]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
Fix sparc regression due to recent movcc pattern changes.
authorDavid S. Miller <davem@davemloft.net>
Fri, 4 Nov 2011 20:25:59 +0000 (20:25 +0000)
committerDavid S. Miller <davem@gcc.gnu.org>
Fri, 4 Nov 2011 20:25:59 +0000 (13:25 -0700)
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].

From-SVN: r180982

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

index d9b941277b65077b396e249695bd9c207ae42f1f..438e33c0da1f47701d4eaa17126200d3ca22f8b1 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 b57a15840975edff157cedd17291c6ac2eab74ce..0daa53d795d5ce59037c8574e6608580d5fb385c 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