* i386.md (SSE cmov splitter): Handle memory operand in operand 5.
authorJan Hubicka <jh@suse.cz>
Mon, 20 Jan 2003 13:37:03 +0000 (14:37 +0100)
committerJan Hubicka <hubicka@gcc.gnu.org>
Mon, 20 Jan 2003 13:37:03 +0000 (13:37 +0000)
From-SVN: r61506

gcc/ChangeLog
gcc/config/i386/i386.md

index 095161fa174bbd58b3bfaa2cca6ee3d3c1ed7466..ff97b3121bf50a151e79a5323189b70a7b8eb101 100644 (file)
@@ -1,3 +1,7 @@
+Mon Jan 20 14:36:23 CET 2003  Jan Hubicka  <jh@suse.cz>
+
+       * i386.md (SSE cmov splitter):  Handle memory operand in operand 5.
+
 2003-01-20  Andreas Schwab  <schwab@suse.de>
 
        * system.h: Don't declare strsignal if the decl test hasn't been
index 936bade5deebdd160c3433356c7f8ea5b9364fae..688cf6b75fe21f69e396d5a4788eb06db3551f94 100644 (file)
 (define_split
   [(set (match_operand 0 "register_operand" "")
        (if_then_else (match_operator 1 "comparison_operator"
-                       [(match_operand 4 "register_operand" "")
+                       [(match_operand 4 "nonimmediate_operand" "")
                         (match_operand 5 "nonimmediate_operand" "")])
                      (match_operand 2 "nonmemory_operand" "")
                      (match_operand 3 "nonmemory_operand" "")))]
        }
     }
   PUT_MODE (operands[1], GET_MODE (operands[0]));
-  if (!sse_comparison_operator (operands[1], VOIDmode))
+  if (!sse_comparison_operator (operands[1], VOIDmode)
+      || !rtx_equal_p (operands[0], operands[4]))
     {
       rtx tmp = operands[5];
       operands[5] = operands[4];
       operands[4] = tmp;
       PUT_CODE (operands[1], swap_condition (GET_CODE (operands[1])));
     }
+  if (!rtx_equal_p (operands[0], operands[4]))
+    abort ();
   if (const0_operand (operands[2], GET_MODE (operands[0])))
     {
       operands[7] = operands[3];