RISC-V: Fix -march option parsing when extension exists.
authorXing GUO <higuoxing@gmail.com>
Thu, 28 Jan 2021 03:22:40 +0000 (11:22 +0800)
committerKito Cheng <kito.cheng@sifive.com>
Thu, 28 Jan 2021 03:25:50 +0000 (11:25 +0800)
This patch fixes -march option parsing when `p` extension exists,
e.g., -march=rv64imafdcp should produce

.attribute arch, "rv64i2p0_m2p0_a2p0_f2p0_d2p0_c2p0_p"

rather than

.attribute arch, "rv64i2p0_m2p0_a2p0_f2p0_d2p0_c_p"

gcc/ChangeLog:

* common/config/riscv/riscv-common.c
(riscv_subset_list::parsing_subset_version): Fix -march option parsing
when `p` extension exists.

gcc/testsuite/ChangeLog:

* gcc.target/riscv/attribute-18.c: New test.

gcc/common/config/riscv/riscv-common.c
gcc/testsuite/gcc.target/riscv/attribute-18.c [new file with mode: 0644]

index b3f5c07c819cadff8f2bd9bc63e75f16e5aa4de4..6bbe25dba89074e691ae9e17a755314e5b462c6c 100644 (file)
@@ -527,9 +527,7 @@ riscv_subset_list::parsing_subset_version (const char *ext,
              /* Might be beginning of `p` extension.  */
              if (std_ext_p)
                {
-                 *major_version = version;
-                 *minor_version = 0;
-                 *explicit_version_p = true;
+                 get_default_version (ext, major_version, minor_version);
                  return p;
                }
              else
diff --git a/gcc/testsuite/gcc.target/riscv/attribute-18.c b/gcc/testsuite/gcc.target/riscv/attribute-18.c
new file mode 100644 (file)
index 0000000..1fd80fe
--- /dev/null
@@ -0,0 +1,4 @@
+/* { dg-do compile } */
+/* { dg-options "-march=rv64imafdcp -mabi=lp64d -misa-spec=2.2" } */
+int foo() {}
+/* { dg-final { scan-assembler ".attribute arch, \"rv64i2p0_m2p0_a2p0_f2p0_d2p0_c2p0_p\"" } } */