OSDN Git Service

Fix sparc regression due to recent movcc pattern changes.
authordavem <davem@138bc75d-0d04-0410-961f-82ee72b054a4>
Fri, 4 Nov 2011 20:25:59 +0000 (20:25 +0000)
committerdavem <davem@138bc75d-0d04-0410-961f-82ee72b054a4>
Fri, 4 Nov 2011 20:25:59 +0000 (20:25 +0000)
PR target/49965
* config/sparc/sparc.c (sparc_expand_conditional_move): Handle the
fact that sparc_emit_float_lib_cmp modifies the comparison in
operands[1].

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

gcc/ChangeLog
gcc/config/sparc/sparc.c

index d9b9412..438e33c 100644 (file)
@@ -1,3 +1,10 @@
+2011-11-03  David S. Miller  <davem@davemloft.net>
+
+       PR target/49965
+       * config/sparc/sparc.c (sparc_expand_conditional_move): Handle the
+       fact that sparc_emit_float_lib_cmp modifies the comparison in
+       operands[1].
+
 2011-11-05     Ralf Corsépius <ralf.corsepius@rtems.org>
 
        * config/lm32/t-rtems: New.
@@ -67,7 +74,7 @@
        (avr_init_builtin_int24): New static function to define built-in
        24-bit types __int24 and __uint24.
        (avr_init_builtins): Use it.
-       
+
 2011-11-04  Thomas Doerfler <thomas.doerfler@embedded-brains.de>
 
        PR target/50989
index b57a158..0daa53d 100644 (file)
@@ -11509,12 +11509,16 @@ sparc_expand_conditional_move (enum machine_mode mode, rtx *operands)
   rtx cc_reg, dst, cmp;
 
   cmp = operands[1];
-  cmp_mode = GET_MODE (XEXP (cmp, 0));
-  if (cmp_mode == DImode && !TARGET_ARCH64)
+  if (GET_MODE (XEXP (cmp, 0)) == DImode && !TARGET_ARCH64)
     return false;
 
-  dst = operands[0];
+  if (GET_MODE (XEXP (cmp, 0)) == TFmode && !TARGET_HARD_QUAD)
+    cmp = sparc_emit_float_lib_cmp (XEXP (cmp, 0), XEXP (cmp, 1), rc);
+
+  cmp_mode = GET_MODE (XEXP (cmp, 0));
+  rc = GET_CODE (cmp);
 
+  dst = operands[0];
   if (! rtx_equal_p (operands[2], dst)
       && ! rtx_equal_p (operands[3], dst))
     {
@@ -11533,9 +11537,6 @@ sparc_expand_conditional_move (enum machine_mode mode, rtx *operands)
         rc = reverse_condition (rc);
     }
 
-  if (cmp_mode == TFmode && !TARGET_HARD_QUAD)
-    cmp = sparc_emit_float_lib_cmp (XEXP (cmp, 0), XEXP (cmp, 1), rc);
-
   if (XEXP (cmp, 1) == const0_rtx
       && GET_CODE (XEXP (cmp, 0)) == REG
       && cmp_mode == DImode