https://gcc.gnu.org/g:04159cca134b196d07bcbe7b71e8096ba1f3eda3
commit r16-7474-g04159cca134b196d07bcbe7b71e8096ba1f3eda3 Author: Andrew Pinski <[email protected]> Date: Wed Feb 11 13:24:04 2026 -0800 ifcvt: Fix rtl checking due to reversed_comparison_code returning UNKNOWN [PR124062] This was an oversight on my part (after r16-6435-g594f2cbf30f0a3) where I forgot that sometimes reversed_comparison_code will return UNKNOWN when the floating point comparison can't be reversed. This seems only to show up with RTL checking only; at least as far as I can tell because it is rejected later on but I could be wrong. Bootstrapped and tested on x86_64-linux-gnu. PR rtl-optimization/124062 gcc/ChangeLog: * ifcvt.cc (noce_try_cond_arith): Check the conditional code for UNKNOWN. gcc/testsuite/ChangeLog: * gcc.dg/torture/pr124062-1.c: New test. Signed-off-by: Andrew Pinski <[email protected]> Diff: --- gcc/ifcvt.cc | 3 +++ gcc/testsuite/gcc.dg/torture/pr124062-1.c | 14 ++++++++++++++ 2 files changed, 17 insertions(+) diff --git a/gcc/ifcvt.cc b/gcc/ifcvt.cc index ca996d6ae19c..7f5af2ca9159 100644 --- a/gcc/ifcvt.cc +++ b/gcc/ifcvt.cc @@ -3194,6 +3194,9 @@ noce_try_cond_arith (struct noce_if_info *if_info) else if (!(noce_cond_zero_binary_op_supported (a) && REG_P (b))) goto fail; + if (code == UNKNOWN) + goto fail; + op = GET_CODE (a); /* Canonicalize x = (z op y) : y to x = (y op z) : y */ diff --git a/gcc/testsuite/gcc.dg/torture/pr124062-1.c b/gcc/testsuite/gcc.dg/torture/pr124062-1.c new file mode 100644 index 000000000000..d59064c5d4d5 --- /dev/null +++ b/gcc/testsuite/gcc.dg/torture/pr124062-1.c @@ -0,0 +1,14 @@ +/* { dg-do compile } */ + +/* PR rtl-optimization/124062 */ + +void a(int); +double b; +void c(int d, int e) { + int f = e; + if (b < 0) + f += d; + a(f); + a(e); +} +
