[gcc r16-7474] ifcvt: Fix rtl checking due to reversed_comparison_code returning UNKNOWN [PR124062]
Andrew Pinski
pinskia@gcc.gnu.org
Thu Feb 12 09:25:29 GMT 2026
https://gcc.gnu.org/g:04159cca134b196d07bcbe7b71e8096ba1f3eda3
commit r16-7474-g04159cca134b196d07bcbe7b71e8096ba1f3eda3
Author: Andrew Pinski <andrew.pinski@oss.qualcomm.com>
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 <andrew.pinski@oss.qualcomm.com>
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);
+}
+
More information about the Gcc-cvs
mailing list