]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
AArch64: don't override march to assembler with mcpu if march is specified [PR110901]
authorTamar Christina <tamar.christina@arm.com>
Thu, 16 Jan 2025 19:23:50 +0000 (19:23 +0000)
committerTamar Christina <tamar.christina@arm.com>
Tue, 28 Jan 2025 10:15:46 +0000 (10:15 +0000)
When both -mcpu and -march are specified, the value of -march wins out.

This is done correctly for the calls to cc1 and for the assembler directives we
put out in assembly files.

However in the call to as we don't do this and instead use the arch from the
cpu.  This leads to a situation that GCC cannot reliably be used to compile
assembly files which don't have a .arch directive.

This is quite common with .S files which use macros to selectively enable
codepath based on what the preprocessor sees.

The fix is to change MCPU_TO_MARCH_SPEC to not override the march if an march
is already specified.

gcc/ChangeLog:

PR target/110901
* config/aarch64/aarch64.h (MCPU_TO_MARCH_SPEC): Don't override if
march is set.

gcc/testsuite/ChangeLog:

PR target/110901
* gcc.target/aarch64/options_set_29.c: New test.

(cherry picked from commit 773beeaafb0ea31bd4e308b64781731d64b571ce)

gcc/config/aarch64/aarch64.h
gcc/testsuite/gcc.target/aarch64/options_set_29.c [new file with mode: 0644]

index 4fa1dfc79065c291ee5c97cc8f641c1f7c9919ec..fe02a02a57b3dfe94b70aa9df7a185d580989cfb 100644 (file)
@@ -1448,7 +1448,7 @@ extern const char *host_detect_local_cpu (int argc, const char **argv);
   CONFIG_TUNE_SPEC
 
 #define MCPU_TO_MARCH_SPEC \
-   " %{mcpu=*:-march=%:rewrite_mcpu(%{mcpu=*:%*})}"
+   "%{!march=*:%{mcpu=*:-march=%:rewrite_mcpu(%{mcpu=*:%*})}}"
 
 extern const char *aarch64_rewrite_mcpu (int argc, const char **argv);
 #define MCPU_TO_MARCH_SPEC_FUNCTIONS \
diff --git a/gcc/testsuite/gcc.target/aarch64/options_set_29.c b/gcc/testsuite/gcc.target/aarch64/options_set_29.c
new file mode 100644 (file)
index 0000000..0a68550
--- /dev/null
@@ -0,0 +1,11 @@
+/* { dg-do assemble } */
+/* { dg-additional-options "-march=armv8.2-a+sve -mcpu=cortex-a72 -O1 -w -###" } */
+
+int main ()
+{
+  return 0;
+}
+
+/* { dg-message "-march=armv8-a\+crc" "no arch from cpu" { xfail *-*-* } 0 } */
+/* { dg-message "-march=armv8\\.2-a\\+sve" "using only sve" { target *-*-* } 0 } */
+/* { dg-excess-errors "" } */