Hi!

On 10/4/26 19:14, Torbjörn Svensson via Sourceware Forge wrote:

This is a summary of discussions relative to the merge request created by Torbjörn 
Svensson (azoff) <[email protected]> titled
arm: Set Cortex-M55 tuning for MVE FP tests
since its creation.

Description: Changes since v1:
- Dropped the generic change in lib/target-supports.exp
- Added the change to the dg-options/dg-additional-options for the affected 
tests.

--

When running DejaGNU with thumb/arch=a/tune=b and a does not happen to be 
armv8.1-m.main+mve.fp, the effective target check will switch target to that. If that 
happens, the tune "b" will survive and impact what assembler that will be 
generated.
This change resets the tune to the default one for armv8.1-m.main+mve.fp.

Tested on arm-none-eabi with both -mcpu and -mtune on r17-4804-gf7094fe5ff882f 
without any regressions.

Ok for trunk, releases/gcc-16 and releases/gcc-15?

--

CC: Richard Earnshaw <[email protected]>
CC: Andre Simoes Dias Vieira <[email protected]>
CC: Christophe Lyon <[email protected]>

The full and up to date discussion can be found at 
https://forge.sourceware.org/gcc/gcc/pulls/238

The merge request has been closed without being merged directly on the forge 
repository.

On 2026-10-04 07:03:32+00:00, Torbjörn Svensson (azoff) 
<[email protected]> requested that Christophe Lyon (clyon) 
<[email protected]> review the code:




On 2026-10-04 07:31:07+00:00, Richard Earnshaw (rearnsha) <[email protected]> 
commented on the code:


+++ gcc/testsuite/lib/target-supports.exp
@@ -7035,2 +7035,3 @@
      # need to be added to the -march option.
-    foreach flags {"" "-mfloat-abi=softfp -mfpu=auto -mcpu=unset 
-march=armv8.1-m.main+mve.fp" "-mfloat-abi=hard -mfpu=auto -mcpu=unset 
-march=armv8.1-m.main+mve.fp"} {
+    foreach flags {
+       ""
Why would this alternative not also override the tuning?  What if we have a CPU 
with the same architecture but different tuning costs?

Which tests are affected by this issue?  Would it make sense to override the 
tuning there as needed?
+++ gcc/testsuite/lib/target-supports.exp
@@ -7035,2 +7035,3 @@
      # need to be added to the -march option.
-    foreach flags {"" "-mfloat-abi=softfp -mfpu=auto -mcpu=unset 
-march=armv8.1-m.main+mve.fp" "-mfloat-abi=hard -mfpu=auto -mcpu=unset 
-march=armv8.1-m.main+mve.fp"} {
+    foreach flags {
+       ""
The tests fixed are:
- FAIL: gcc.target/arm/mve/intrinsics/vcmpeqq_n_f16.c check-function-bodies foo2
- FAIL: gcc.target/arm/mve/intrinsics/vcmpeqq_n_f32.c check-function-bodies foo2
- FAIL: gcc.target/arm/mve/intrinsics/vcmpgeq_n_f16.c check-function-bodies foo2
- FAIL: gcc.target/arm/mve/intrinsics/vcmpgeq_n_f32.c check-function-bodies foo2
- FAIL: gcc.target/arm/mve/intrinsics/vcmpgtq_n_f16.c check-function-bodies foo2
- FAIL: gcc.target/arm/mve/intrinsics/vcmpgtq_n_f32.c check-function-bodies foo2
- FAIL: gcc.target/arm/mve/intrinsics/vcmpleq_n_f16.c check-function-bodies foo2
- FAIL: gcc.target/arm/mve/intrinsics/vcmpleq_n_f32.c check-function-bodies foo2
- FAIL: gcc.target/arm/mve/intrinsics/vcmpltq_n_f16.c check-function-bodies foo2
- FAIL: gcc.target/arm/mve/intrinsics/vcmpltq_n_f32.c check-function-bodies foo2
- FAIL: gcc.target/arm/mve/intrinsics/vcmpneq_n_f16.c check-function-bodies foo2
- FAIL: gcc.target/arm/mve/intrinsics/vcmpneq_n_f32.c check-function-bodies foo2
- FAIL: gcc.target/arm/mve/intrinsics/vdupq_n_f16.c check-function-bodies foo1
- FAIL: gcc.target/arm/mve/intrinsics/vdupq_n_f32.c check-function-bodies foo1

All of these were failing with 
`thumb/arch=armv7ve+simd/tune=cortex-a7/float-abi=hard/fpu=auto` and 
`thumb/arch=armv7ve+nofp/tune=cortex-a7/float-abi=soft/fpu=auto`, while passing 
when replacing `-mtune` with `-mcpu`.

The reason why I did not add the `-mtune=cortex-m55` for the empty string is 
that I thought it was only needed when switching target.
I can add it there too in case you think that is better (should have no impact 
regardless).

Comparing -mtune with -mcpu for gcc.target/arm/mve/intrinsics/vcmpeqq_n_f16.c, 
I see the following difference in generated assembler:
```
--- mcpu.s  2026-10-04 09:49:39.835214873 +0200
+++ mtune.s  2026-10-04 09:49:39.836214873 +0200
@@ -66,11 +66,23 @@
         @ args = 0, pretend = 0, frame = 0
         @ frame_needed = 0, uses_anonymous_args = 0
         @ link register save eliminated.
-       vmov    d6, r0, r1  @ v8hf
-       vmov    d7, r2, r3
-       movw    r3, #15462
-       vcmp.f16        eq, q3, r3
+       vmov    d4, r0, r1  @ v8hf
+       vmov    d5, r2, r3
+       vldr.64 d6, .L5
+       vldr.64 d7, .L5+8
+       vcmp.f16        eq, q2, q3
         vmrs    r0, p0  @ movhi
         uxth    r0, r0
         bx      lr
+.L6:
+       .align  3
+.L5:
+       .short  15462
+       .short  15462
+       .short  15462
+       .short  15462
+       .short  15462
+       .short  15462
+       .short  15462
+       .short  15462
         .size   foo2, .-foo2
```

Sorry it's not clear to me which code is with -mtune and which one is with -mcpu?

and do you mean -mtune=cortexx-a7 / -mcpu=cortex-a7?

Also I'm not sure I understand the fix ;-)
IIUC without your patch the test fails because it's compiled with
thumb/arch=armv7ve+simd/tune=cortex-a7/float-abi=hard/fpu=auto followed by "-mfloat-abi=hard -mfpu=auto -mcpu=unset -march=armv8.1-m.main+mve.fp" from arm_v8_1m_mve_fp_ok_nocache?

which gets simplified to
-mthumb -march=armv8.1-m.main+mve.fp -mtune=cortex-a7
-mfloat-abi=hard -mfpu=auto -mcpu=unset
and -mcpu does not cancel the effect of -mtune?

Thanks,

Christophe

If you have a suggestion how to fix the tests in a better way, I'd be happy to 
try it.


On 2026-10-04 11:52:44+00:00, Torbjörn Svensson (azoff) wrote:

Updated the patch after live discussion with Richard E.

On 2026-10-04 11:54:30+00:00, Richard Earnshaw (rearnsha) <[email protected]> 
approved the changes:
OK



On 2026-10-04 17:13:16+00:00, Torbjörn Svensson (azoff) wrote:

Pushed as r17-4873-g8a5c76ca173f25, r16-9734-ga239230fc45aa9 and 
r15-11613-gb56c7709b773a2.

Reply via email to