OSDN Git Service

PR rtl-opt/33410
authorrth <rth@138bc75d-0d04-0410-961f-82ee72b054a4>
Thu, 7 Feb 2008 17:45:24 +0000 (17:45 +0000)
committerrth <rth@138bc75d-0d04-0410-961f-82ee72b054a4>
Thu, 7 Feb 2008 17:45:24 +0000 (17:45 +0000)
        * config/alpha/alpha.c (alpha_emit_xfloating_compare): Use an
        EXPR_LIST for the REG_EQUAL instead of a comparison with a
        funny mode.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@132171 138bc75d-0d04-0410-961f-82ee72b054a4

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

index 334fabf..370d11f 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 800b354..991193f 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;
 }