RISC-V: Fix __riscv_compressed regression.
authorJim Wilson <jimw@sifive.com>
Fri, 29 Mar 2019 21:51:58 +0000 (21:51 +0000)
committerJim Wilson <wilson@gcc.gnu.org>
Fri, 29 Mar 2019 21:51:58 +0000 (14:51 -0700)
This was accidentally broken by the patch adding ELF attribute support.
The __riscv_compressed predefined macro is not being defined when the
target supports the C extension.  The fix adds testcases to verify that
all of the predefined macros are correct for various option combinations.

gcc/
* common/config/riscv/riscv-common.c (riscv_parse_arch_string):
Clear MASK_RVC and then set if C subset supported.

gcc/testsuite/
* gcc.target/riscv/predef-1.c: New.
* gcc.target/riscv/predef-2.c: New.
* gcc.target/riscv/predef-3.c: New.
* gcc.target/riscv/predef-4.c: New.
* gcc.target/riscv/predef-5.c: New.
* gcc.target/riscv/predef-6.c: New.
* gcc.target/riscv/predef-7.c: New.
* gcc.target/riscv/predef-8.c: New.

From-SVN: r270026

gcc/ChangeLog
gcc/common/config/riscv/riscv-common.c
gcc/testsuite/ChangeLog
gcc/testsuite/gcc.target/riscv/predef-1.c [new file with mode: 0644]
gcc/testsuite/gcc.target/riscv/predef-2.c [new file with mode: 0644]
gcc/testsuite/gcc.target/riscv/predef-3.c [new file with mode: 0644]
gcc/testsuite/gcc.target/riscv/predef-4.c [new file with mode: 0644]
gcc/testsuite/gcc.target/riscv/predef-5.c [new file with mode: 0644]
gcc/testsuite/gcc.target/riscv/predef-6.c [new file with mode: 0644]
gcc/testsuite/gcc.target/riscv/predef-7.c [new file with mode: 0644]
gcc/testsuite/gcc.target/riscv/predef-8.c [new file with mode: 0644]

index 563943567ca6048c1c03893d32467b9e7301a116..a9b1ee79632b8506e04620ac5d503b90ea114413 100644 (file)
@@ -1,3 +1,8 @@
+2019-03-29  Jim Wilson  <jimw@sifive.com>
+
+       * common/config/riscv/riscv-common.c (riscv_parse_arch_string):
+       Clear MASK_RVC and then set if C subset supported.
+
 2019-03-29  Jakub Jelinek  <jakub@redhat.com>
 
        PR c/89872
index 72c43c69b2392a77e57c9ed420bfaed20c4284e9..9452bd3a0ce566cdda37aaac699c46933e52d51d 100644 (file)
@@ -564,6 +564,10 @@ riscv_parse_arch_string (const char *isa, int *flags, location_t loc)
   if (subset_list->lookup ("d"))
     *flags |= MASK_DOUBLE_FLOAT;
 
+  *flags &= ~MASK_RVC;
+  if (subset_list->lookup ("c"))
+    *flags |= MASK_RVC;
+
   if (current_subset_list)
     delete current_subset_list;
 
index 542f4eeb26f090667e1bf0979f8d0b007fcd833e..f5f5bbf24f364cb96ccb23ef9b6fb18cc2b91a12 100644 (file)
@@ -1,3 +1,14 @@
+2019-03-29  Jim Wilson  <jimw@sifive.com>
+
+       * gcc.target/riscv/predef-1.c: New.
+       * gcc.target/riscv/predef-2.c: New.
+       * gcc.target/riscv/predef-3.c: New.
+       * gcc.target/riscv/predef-4.c: New.
+       * gcc.target/riscv/predef-5.c: New.
+       * gcc.target/riscv/predef-6.c: New.
+       * gcc.target/riscv/predef-7.c: New.
+       * gcc.target/riscv/predef-8.c: New.
+
 2019-03-29  Jakub Jelinek  <jakub@redhat.com>
 
        PR rtl-optimization/89865
diff --git a/gcc/testsuite/gcc.target/riscv/predef-1.c b/gcc/testsuite/gcc.target/riscv/predef-1.c
new file mode 100644 (file)
index 0000000..70f121f
--- /dev/null
@@ -0,0 +1,66 @@
+/* { dg-do compile } */
+/* { dg-options "-O2 -march=rv32i -mabi=ilp32 -mcmodel=medlow" } */
+
+int main () {
+#if !defined(__riscv)
+#error "__riscv"
+#endif
+
+#if defined(__riscv_compressed)
+#error "__riscv_compressed"
+#endif
+
+#if defined(__riscv_32e)
+#error "__riscv_32e"
+#endif
+
+#if defined(__riscv_atomic)
+#error "__riscv_atomic"
+#endif
+
+#if defined(__riscv_mul)
+#error "__riscv_mul"
+#endif
+#if defined(__riscv_div)
+#error "__riscv_div"
+#endif
+#if defined(__riscv_muldiv)
+#error "__riscv_muldiv"
+#endif
+
+#if __riscv_xlen != 32
+#error "__riscv_xlen"
+#endif
+
+#if defined(__riscv_fdiv)
+#error "__riscv_fdiv"
+#endif
+#if defined(__riscv_fsqrt)
+#error "__riscv_fsqrt"
+#endif
+
+#if defined(__riscv_abi_rve)
+#error "__riscv_abi_rve"
+#endif
+#if !defined(__riscv_float_abi_soft)
+#error "__riscv_float_abi_soft"
+#endif
+#if defined(__riscv_float_abi_single)
+#error "__riscv_float_abi_single"
+#endif
+#if defined(__riscv_float_abi_double)
+#error "__riscv_float_abi_double"
+#endif
+
+#if !defined(__riscv_cmodel_medlow)
+#error "__riscv_cmodel_medlow"
+#endif
+#if defined(__riscv_cmodel_medany)
+#error "__riscv_cmodel_medlow"
+#endif
+#if defined(__riscv_cmodel_pic)
+#error "__riscv_cmodel_medlow"
+#endif
+
+  return 0;
+}
diff --git a/gcc/testsuite/gcc.target/riscv/predef-2.c b/gcc/testsuite/gcc.target/riscv/predef-2.c
new file mode 100644 (file)
index 0000000..6f3c8c3
--- /dev/null
@@ -0,0 +1,66 @@
+/* { dg-do compile } */
+/* { dg-options "-O2 -march=rv32imaf -mabi=ilp32f -mcmodel=medany" } */
+
+int main () {
+#if !defined(__riscv)
+#error "__riscv"
+#endif
+
+#if defined(__riscv_compressed)
+#error "__riscv_compressed"
+#endif
+
+#if defined(__riscv_32e)
+#error "__riscv_32e"
+#endif
+
+#if !defined(__riscv_atomic)
+#error "__riscv_atomic"
+#endif
+
+#if !defined(__riscv_mul)
+#error "__riscv_mul"
+#endif
+#if !defined(__riscv_div)
+#error "__riscv_div"
+#endif
+#if !defined(__riscv_muldiv)
+#error "__riscv_muldiv"
+#endif
+
+#if __riscv_xlen != 32
+#error "__riscv_xlen"
+#endif
+
+#if !defined(__riscv_fdiv)
+#error "__riscv_fdiv"
+#endif
+#if !defined(__riscv_fsqrt)
+#error "__riscv_fsqrt"
+#endif
+
+#if defined(__riscv_abi_rve)
+#error "__riscv_abi_rve"
+#endif
+#if defined(__riscv_float_abi_soft)
+#error "__riscv_float_abi_soft"
+#endif
+#if !defined(__riscv_float_abi_single)
+#error "__riscv_float_abi_single"
+#endif
+#if defined(__riscv_float_abi_double)
+#error "__riscv_float_abi_double"
+#endif
+
+#if defined(__riscv_cmodel_medlow)
+#error "__riscv_cmodel_medlow"
+#endif
+#if !defined(__riscv_cmodel_medany)
+#error "__riscv_cmodel_medlow"
+#endif
+#if defined(__riscv_cmodel_pic)
+#error "__riscv_cmodel_medlow"
+#endif
+
+  return 0;
+}
diff --git a/gcc/testsuite/gcc.target/riscv/predef-3.c b/gcc/testsuite/gcc.target/riscv/predef-3.c
new file mode 100644 (file)
index 0000000..6f4f2e2
--- /dev/null
@@ -0,0 +1,66 @@
+/* { dg-do compile } */
+/* { dg-options "-O2 -march=rv32imafdc -mabi=ilp32d -fpic" } */
+
+int main () {
+#if !defined(__riscv)
+#error "__riscv"
+#endif
+
+#if !defined(__riscv_compressed)
+#error "__riscv_compressed"
+#endif
+
+#if defined(__riscv_32e)
+#error "__riscv_32e"
+#endif
+
+#if !defined(__riscv_atomic)
+#error "__riscv_atomic"
+#endif
+
+#if !defined(__riscv_mul)
+#error "__riscv_mul"
+#endif
+#if !defined(__riscv_div)
+#error "__riscv_div"
+#endif
+#if !defined(__riscv_muldiv)
+#error "__riscv_muldiv"
+#endif
+
+#if __riscv_xlen != 32
+#error "__riscv_xlen"
+#endif
+
+#if !defined(__riscv_fdiv)
+#error "__riscv_fdiv"
+#endif
+#if !defined(__riscv_fsqrt)
+#error "__riscv_fsqrt"
+#endif
+
+#if defined(__riscv_abi_rve)
+#error "__riscv_abi_rve"
+#endif
+#if defined(__riscv_float_abi_soft)
+#error "__riscv_float_abi_soft"
+#endif
+#if defined(__riscv_float_abi_single)
+#error "__riscv_float_abi_single"
+#endif
+#if !defined(__riscv_float_abi_double)
+#error "__riscv_float_abi_double"
+#endif
+
+#if defined(__riscv_cmodel_medlow)
+#error "__riscv_cmodel_medlow"
+#endif
+#if defined(__riscv_cmodel_medany)
+#error "__riscv_cmodel_medlow"
+#endif
+#if !defined(__riscv_cmodel_pic)
+#error "__riscv_cmodel_medlow"
+#endif
+
+  return 0;
+}
diff --git a/gcc/testsuite/gcc.target/riscv/predef-4.c b/gcc/testsuite/gcc.target/riscv/predef-4.c
new file mode 100644 (file)
index 0000000..822f617
--- /dev/null
@@ -0,0 +1,66 @@
+/* { dg-do compile } */
+/* { dg-options "-O2 -march=rv64ia -mabi=lp64 -mcmodel=medlow" } */
+
+int main () {
+#if !defined(__riscv)
+#error "__riscv"
+#endif
+
+#if defined(__riscv_compressed)
+#error "__riscv_compressed"
+#endif
+
+#if defined(__riscv_32e)
+#error "__riscv_32e"
+#endif
+
+#if !defined(__riscv_atomic)
+#error "__riscv_atomic"
+#endif
+
+#if defined(__riscv_mul)
+#error "__riscv_mul"
+#endif
+#if defined(__riscv_div)
+#error "__riscv_div"
+#endif
+#if defined(__riscv_muldiv)
+#error "__riscv_muldiv"
+#endif
+
+#if __riscv_xlen != 64
+#error "__riscv_xlen"
+#endif
+
+#if defined(__riscv_fdiv)
+#error "__riscv_fdiv"
+#endif
+#if defined(__riscv_fsqrt)
+#error "__riscv_fsqrt"
+#endif
+
+#if defined(__riscv_abi_rve)
+#error "__riscv_abi_rve"
+#endif
+#if !defined(__riscv_float_abi_soft)
+#error "__riscv_float_abi_soft"
+#endif
+#if defined(__riscv_float_abi_single)
+#error "__riscv_float_abi_single"
+#endif
+#if defined(__riscv_float_abi_double)
+#error "__riscv_float_abi_double"
+#endif
+
+#if !defined(__riscv_cmodel_medlow)
+#error "__riscv_cmodel_medlow"
+#endif
+#if defined(__riscv_cmodel_medany)
+#error "__riscv_cmodel_medlow"
+#endif
+#if defined(__riscv_cmodel_pic)
+#error "__riscv_cmodel_medlow"
+#endif
+
+  return 0;
+}
diff --git a/gcc/testsuite/gcc.target/riscv/predef-5.c b/gcc/testsuite/gcc.target/riscv/predef-5.c
new file mode 100644 (file)
index 0000000..6649049
--- /dev/null
@@ -0,0 +1,66 @@
+/* { dg-do compile } */
+/* { dg-options "-O2 -march=rv64imf -mabi=lp64f -mcmodel=medany" } */
+
+int main () {
+#if !defined(__riscv)
+#error "__riscv"
+#endif
+
+#if defined(__riscv_compressed)
+#error "__riscv_compressed"
+#endif
+
+#if defined(__riscv_32e)
+#error "__riscv_32e"
+#endif
+
+#if defined(__riscv_atomic)
+#error "__riscv_atomic"
+#endif
+
+#if !defined(__riscv_mul)
+#error "__riscv_mul"
+#endif
+#if !defined(__riscv_div)
+#error "__riscv_div"
+#endif
+#if !defined(__riscv_muldiv)
+#error "__riscv_muldiv"
+#endif
+
+#if __riscv_xlen != 64
+#error "__riscv_xlen"
+#endif
+
+#if !defined(__riscv_fdiv)
+#error "__riscv_fdiv"
+#endif
+#if !defined(__riscv_fsqrt)
+#error "__riscv_fsqrt"
+#endif
+
+#if defined(__riscv_abi_rve)
+#error "__riscv_abi_rve"
+#endif
+#if defined(__riscv_float_abi_soft)
+#error "__riscv_float_abi_soft"
+#endif
+#if !defined(__riscv_float_abi_single)
+#error "__riscv_float_abi_single"
+#endif
+#if defined(__riscv_float_abi_double)
+#error "__riscv_float_abi_double"
+#endif
+
+#if defined(__riscv_cmodel_medlow)
+#error "__riscv_cmodel_medlow"
+#endif
+#if !defined(__riscv_cmodel_medany)
+#error "__riscv_cmodel_medlow"
+#endif
+#if defined(__riscv_cmodel_pic)
+#error "__riscv_cmodel_medlow"
+#endif
+
+  return 0;
+}
diff --git a/gcc/testsuite/gcc.target/riscv/predef-6.c b/gcc/testsuite/gcc.target/riscv/predef-6.c
new file mode 100644 (file)
index 0000000..ee4e02b
--- /dev/null
@@ -0,0 +1,66 @@
+/* { dg-do compile } */
+/* { dg-options "-O2 -march=rv64gc -mabi=lp64d -fpic" } */
+
+int main () {
+#if !defined(__riscv)
+#error "__riscv"
+#endif
+
+#if !defined(__riscv_compressed)
+#error "__riscv_compressed"
+#endif
+
+#if defined(__riscv_32e)
+#error "__riscv_32e"
+#endif
+
+#if !defined(__riscv_atomic)
+#error "__riscv_atomic"
+#endif
+
+#if !defined(__riscv_mul)
+#error "__riscv_mul"
+#endif
+#if !defined(__riscv_div)
+#error "__riscv_div"
+#endif
+#if !defined(__riscv_muldiv)
+#error "__riscv_muldiv"
+#endif
+
+#if __riscv_xlen != 64
+#error "__riscv_xlen"
+#endif
+
+#if !defined(__riscv_fdiv)
+#error "__riscv_fdiv"
+#endif
+#if !defined(__riscv_fsqrt)
+#error "__riscv_fsqrt"
+#endif
+
+#if defined(__riscv_abi_rve)
+#error "__riscv_abi_rve"
+#endif
+#if defined(__riscv_float_abi_soft)
+#error "__riscv_float_abi_soft"
+#endif
+#if defined(__riscv_float_abi_single)
+#error "__riscv_float_abi_single"
+#endif
+#if !defined(__riscv_float_abi_double)
+#error "__riscv_float_abi_double"
+#endif
+
+#if defined(__riscv_cmodel_medlow)
+#error "__riscv_cmodel_medlow"
+#endif
+#if defined(__riscv_cmodel_medany)
+#error "__riscv_cmodel_medlow"
+#endif
+#if !defined(__riscv_cmodel_pic)
+#error "__riscv_cmodel_medlow"
+#endif
+
+  return 0;
+}
diff --git a/gcc/testsuite/gcc.target/riscv/predef-7.c b/gcc/testsuite/gcc.target/riscv/predef-7.c
new file mode 100644 (file)
index 0000000..0358f32
--- /dev/null
@@ -0,0 +1,66 @@
+/* { dg-do compile } */
+/* { dg-options "-O2 -march=rv32em -mabi=ilp32e -mno-div -mcmodel=medlow" } */
+
+int main () {
+#if !defined(__riscv)
+#error "__riscv"
+#endif
+
+#if defined(__riscv_compressed)
+#error "__riscv_compressed"
+#endif
+
+#if !defined(__riscv_32e)
+#error "__riscv_32e"
+#endif
+
+#if defined(__riscv_atomic)
+#error "__riscv_atomic"
+#endif
+
+#if !defined(__riscv_mul)
+#error "__riscv_mul"
+#endif
+#if defined(__riscv_div)
+#error "__riscv_div"
+#endif
+#if defined(__riscv_muldiv)
+#error "__riscv_muldiv"
+#endif
+
+#if __riscv_xlen != 32
+#error "__riscv_xlen"
+#endif
+
+#if defined(__riscv_fdiv)
+#error "__riscv_fdiv"
+#endif
+#if defined(__riscv_fsqrt)
+#error "__riscv_fsqrt"
+#endif
+
+#if !defined(__riscv_abi_rve)
+#error "__riscv_abi_rve"
+#endif
+#if !defined(__riscv_float_abi_soft)
+#error "__riscv_float_abi_soft"
+#endif
+#if defined(__riscv_float_abi_single)
+#error "__riscv_float_abi_single"
+#endif
+#if defined(__riscv_float_abi_double)
+#error "__riscv_float_abi_double"
+#endif
+
+#if !defined(__riscv_cmodel_medlow)
+#error "__riscv_cmodel_medlow"
+#endif
+#if defined(__riscv_cmodel_medany)
+#error "__riscv_cmodel_medlow"
+#endif
+#if defined(__riscv_cmodel_pic)
+#error "__riscv_cmodel_medlow"
+#endif
+
+  return 0;
+}
diff --git a/gcc/testsuite/gcc.target/riscv/predef-8.c b/gcc/testsuite/gcc.target/riscv/predef-8.c
new file mode 100644 (file)
index 0000000..41cd9fe
--- /dev/null
@@ -0,0 +1,66 @@
+/* { dg-do compile } */
+/* { dg-options "-O2 -march=rv32if -mabi=ilp32f -mno-fdiv -mcmodel=medany" } */
+
+int main () {
+#if !defined(__riscv)
+#error "__riscv"
+#endif
+
+#if defined(__riscv_compressed)
+#error "__riscv_compressed"
+#endif
+
+#if defined(__riscv_32e)
+#error "__riscv_32e"
+#endif
+
+#if defined(__riscv_atomic)
+#error "__riscv_atomic"
+#endif
+
+#if defined(__riscv_mul)
+#error "__riscv_mul"
+#endif
+#if defined(__riscv_div)
+#error "__riscv_div"
+#endif
+#if defined(__riscv_muldiv)
+#error "__riscv_muldiv"
+#endif
+
+#if __riscv_xlen != 32
+#error "__riscv_xlen"
+#endif
+
+#if defined(__riscv_fdiv)
+#error "__riscv_fdiv"
+#endif
+#if defined(__riscv_fsqrt)
+#error "__riscv_fsqrt"
+#endif
+
+#if defined(__riscv_abi_rve)
+#error "__riscv_abi_rve"
+#endif
+#if defined(__riscv_float_abi_soft)
+#error "__riscv_float_abi_soft"
+#endif
+#if !defined(__riscv_float_abi_single)
+#error "__riscv_float_abi_single"
+#endif
+#if defined(__riscv_float_abi_double)
+#error "__riscv_float_abi_double"
+#endif
+
+#if defined(__riscv_cmodel_medlow)
+#error "__riscv_cmodel_medlow"
+#endif
+#if !defined(__riscv_cmodel_medany)
+#error "__riscv_cmodel_medlow"
+#endif
+#if defined(__riscv_cmodel_pic)
+#error "__riscv_cmodel_medlow"
+#endif
+
+  return 0;
+}