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>
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 */
--- /dev/null
+/* { 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);
+}
+