From: WANG Xuerui <[email protected]>

This helps writing portable code that needs to work across LA32R and
LA32S.  The tests only work with the fix for PR123171 applied.

gcc/ChangeLog:

        * config/loongarch/loongarch-c.cc (loongarch_update_cpp_builtins):
        Define __loongarch_non_reduced iff the current base ISA is not
        LA32R.

gcc/testsuite/ChangeLog:

        * gcc.target/loongarch/non-reduced-macro-1.c: New test.
        * gcc.target/loongarch/non-reduced-macro-2.c: New test.
        * gcc.target/loongarch/non-reduced-macro-3.c: New test.

Signed-off-by: WANG Xuerui <[email protected]>
---
 gcc/config/loongarch/loongarch-c.cc           |  3 +++
 .../loongarch/non-reduced-macro-1.c           | 19 +++++++++++++++++++
 .../loongarch/non-reduced-macro-2.c           | 19 +++++++++++++++++++
 .../loongarch/non-reduced-macro-3.c           |  7 +++++++
 4 files changed, 48 insertions(+)
 create mode 100644 gcc/testsuite/gcc.target/loongarch/non-reduced-macro-1.c
 create mode 100644 gcc/testsuite/gcc.target/loongarch/non-reduced-macro-2.c
 create mode 100644 gcc/testsuite/gcc.target/loongarch/non-reduced-macro-3.c

diff --git a/gcc/config/loongarch/loongarch-c.cc 
b/gcc/config/loongarch/loongarch-c.cc
index b91ba8dd73d..d3dba74a7d5 100644
--- a/gcc/config/loongarch/loongarch-c.cc
+++ b/gcc/config/loongarch/loongarch-c.cc
@@ -103,6 +103,9 @@ loongarch_update_cpp_builtins (cpp_reader *pfile)
   builtin_define_with_value ("__loongarch_tune",
                             loongarch_tune_strings[la_target.cpu_tune], 1);
 
+  loongarch_def_or_undef (la_target.isa.base != ISA_BASE_LA32R,
+                         "__loongarch_non_reduced", pfile);
+
   /* Legacy compatibility macros for arch/tune info.  */
   if (TARGET_64BIT)
     {
diff --git a/gcc/testsuite/gcc.target/loongarch/non-reduced-macro-1.c 
b/gcc/testsuite/gcc.target/loongarch/non-reduced-macro-1.c
new file mode 100644
index 00000000000..a915c92bd03
--- /dev/null
+++ b/gcc/testsuite/gcc.target/loongarch/non-reduced-macro-1.c
@@ -0,0 +1,19 @@
+/* { dg-do preprocess } */
+/* { dg-options "-march=la32v1.0" } */
+
+#ifndef __loongarch_non_reduced
+#error __loongarch_non_reduced should be defined here
+#endif
+
+#pragma GCC push_options
+#pragma GCC target "arch=la32rv1.0"
+
+#ifdef __loongarch_non_reduced
+#error __loongarch_non_reduced should not be defined here
+#endif
+
+#pragma GCC pop_options
+
+#ifndef __loongarch_non_reduced
+#error __loongarch_non_reduced should be defined here
+#endif
diff --git a/gcc/testsuite/gcc.target/loongarch/non-reduced-macro-2.c 
b/gcc/testsuite/gcc.target/loongarch/non-reduced-macro-2.c
new file mode 100644
index 00000000000..05a81def5af
--- /dev/null
+++ b/gcc/testsuite/gcc.target/loongarch/non-reduced-macro-2.c
@@ -0,0 +1,19 @@
+/* { dg-do preprocess } */
+/* { dg-options "-march=la32rv1.0" } */
+
+#ifdef __loongarch_non_reduced
+#error __loongarch_non_reduced should not be defined here
+#endif
+
+#pragma GCC push_options
+#pragma GCC target "arch=la32v1.0"
+
+#ifndef __loongarch_non_reduced
+#error __loongarch_non_reduced should be defined here
+#endif
+
+#pragma GCC pop_options
+
+#ifdef __loongarch_non_reduced
+#error __loongarch_non_reduced should not be defined here
+#endif
diff --git a/gcc/testsuite/gcc.target/loongarch/non-reduced-macro-3.c 
b/gcc/testsuite/gcc.target/loongarch/non-reduced-macro-3.c
new file mode 100644
index 00000000000..edb1623c5b7
--- /dev/null
+++ b/gcc/testsuite/gcc.target/loongarch/non-reduced-macro-3.c
@@ -0,0 +1,7 @@
+/* { dg-do preprocess } */
+/* { dg-options "-march=loongarch64" } */
+
+/* LA64 does not have any reduced variant.  */
+#ifndef __loongarch_non_reduced
+#error __loongarch_non_reduced should be defined here
+#endif
-- 
2.52.0

Reply via email to