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