]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
re PR rtl-optimization/33410 (ICE in iv_analyze_expr, at loop-iv.c:934)
authorRichard Henderson <rth@redhat.com>
Thu, 7 Feb 2008 17:45:24 +0000 (09:45 -0800)
committerRichard Henderson <rth@gcc.gnu.org>
Thu, 7 Feb 2008 17:45:24 +0000 (09:45 -0800)
        PR rtl-opt/33410
        * config/alpha/alpha.c (alpha_emit_xfloating_compare): Use an
        EXPR_LIST for the REG_EQUAL instead of a comparison with a
        funny mode.

From-SVN: r132171

gcc/ChangeLog
gcc/config/alpha/alpha.c

index 334fabf07c16b49ccc415edbf11ebfdda75f8f42..370d11f0812373276acb768b21df6070741393b1 100644 (file)
@@ -1,3 +1,10 @@
+2008-07-07  Richard Henderson  <rth@redhat.com>
+
+       PR rtl-opt/33410
+       * config/alpha/alpha.c (alpha_emit_xfloating_compare): Use an
+       EXPR_LIST for the REG_EQUAL instead of a comparison with a 
+       funny mode.
+
 2008-02-07  Uros Bizjak  <ubizjak@gmail.com>
 
        PR tree-optimization/35085
index 800b354a71d24dc2401dfed8a699e58800f599c5..991193f28dc129a7b173fe66c97585c619e3d286 100644 (file)
@@ -3047,7 +3047,7 @@ static rtx
 alpha_emit_xfloating_compare (enum rtx_code *pcode, rtx op0, rtx op1)
 {
   enum rtx_code cmp_code, res_code;
-  rtx func, out, operands[2];
+  rtx func, out, operands[2], note;
 
   /* X_floating library comparison functions return
           -1  unordered
@@ -3087,10 +3087,13 @@ alpha_emit_xfloating_compare (enum rtx_code *pcode, rtx op0, rtx op1)
   operands[1] = op1;
   out = gen_reg_rtx (DImode);
 
-  /* ??? Strange mode for equiv because what's actually returned
-     is -1,0,1, not a proper boolean value.  */
-  alpha_emit_xfloating_libcall (func, out, operands, 2,
-                               gen_rtx_fmt_ee (cmp_code, CCmode, op0, op1));
+  /* What's actually returned is -1,0,1, not a proper boolean value,
+     so use an EXPR_LIST as with a generic libcall instead of a 
+     comparison type expression.  */
+  note = gen_rtx_EXPR_LIST (VOIDmode, op1, NULL_RTX);
+  note = gen_rtx_EXPR_LIST (VOIDmode, op0, note);
+  note = gen_rtx_EXPR_LIST (VOIDmode, func, note);
+  alpha_emit_xfloating_libcall (func, out, operands, 2, note);
 
   return out;
 }