]> git.ipfire.org Git - thirdparty/gcc.git/commit
arm: avoid unmatched insn in movhfcc [PR118460]
authorRichard Earnshaw <rearnsha@arm.com>
Tue, 14 Oct 2025 12:53:05 +0000 (13:53 +0100)
committerRichard Earnshaw <rearnsha@arm.com>
Wed, 15 Oct 2025 15:55:36 +0000 (16:55 +0100)
commit99af0f9078865269ae13367a25e2b156c8ccba77
treee6529b3e11759eaf8ff382990ce3a6def0a53710
parent94ce59ad335ac372afb4521e880add4cf8fc0607
arm: avoid unmatched insn in movhfcc [PR118460]

When compiling for m-profile with the floating-point extension we have
a vsel instruction that takes a limited set of comparisons.  In most
cases we can use this with careful selection of the operand order, but
we need to expand things in the right way.  This patch is in two parts:

1) We validate that the expansion will produce correct RTL;
2) We canonicalize the comparison to increase the chances that the
above check will pass.

gcc:

PR target/118460
* config/arm/arm.cc (arm_canonicalize_comparison): For floating-
point comparisons, swap the operand order if that will be more
likely to produce a comparison that can be used with VSEL.
(arm_validize_comparison): Make sure that HFmode comparisons
are compatible with VSEL.

gcc/testsuite:

PR target/118460
* gcc.target/arm/armv8_2-fp16-move-1.c: Adjust expected output.
* gcc.target/arm/armv8_2-fp16-move-2.c: Likewise.
gcc/config/arm/arm.cc
gcc/testsuite/gcc.target/arm/armv8_2-fp16-move-1.c
gcc/testsuite/gcc.target/arm/armv8_2-fp16-move-2.c