------- Comment #4 from hjl dot tools at gmail dot com  2008-09-12 17:53 -------
We can't define FLOAT_STORE_FLAG_VALUE for SSE since we can't
represent 0xfffffff as a valid FP value. This patch makes
fold_rtx to match simplify_relational_operation:

--- ./cse.c.foo 2008-09-08 10:46:09.000000000 -0700
+++ ./cse.c     2008-09-12 10:46:18.000000000 -0700
@@ -3217,14 +3217,16 @@ fold_rtx (rtx x, rtx insn)
          rtx true_rtx = const_true_rtx, false_rtx = const0_rtx;
          enum machine_mode mode_arg1;

-#ifdef FLOAT_STORE_FLAG_VALUE
          if (SCALAR_FLOAT_MODE_P (mode))
            {
+#ifdef FLOAT_STORE_FLAG_VALUE
              true_rtx = (CONST_DOUBLE_FROM_REAL_VALUE
                          (FLOAT_STORE_FLAG_VALUE (mode), mode));
+#else
+             true_rtx = NULL_RTX;
+#endif
              false_rtx = CONST0_RTX (mode);
            }
-#endif

          code = find_comparison_args (code, &folded_arg0, &folded_arg1,
                                       &mode_arg0, &mode_arg1);
@@ -3332,8 +3334,17 @@ fold_rtx (rtx x, rtx insn)
                                                  const_arg1))
                              || (REG_P (folded_arg1)
                                  && (REG_QTY (REGNO (folded_arg1)) ==
ent->comparison_qty))))
-                       return (comparison_dominates_p (ent->comparison_code,
code)
-                               ? true_rtx : false_rtx);
+                       {
+                         if (comparison_dominates_p (ent->comparison_code,
code))
+                           {
+                             if (true_rtx)
+                               return true_rtx;
+                             else
+                               break;
+                           }
+                         else
+                           return false_rtx;
+                       }
                    }
                }
            }


-- 


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=37489

Reply via email to