aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorDavid S. Miller <davem@davemloft.net>2011-11-04 20:25:59 +0000
committerDavid S. Miller <davem@gcc.gnu.org>2011-11-04 13:25:59 -0700
commit7a83e5bc5546183af6934f623a568b11cca63f78 (patch)
treeb00e8e391633ace5af1d48f9f8a269da78231dd8 /gcc
parent801fe0bb11f8a6adbb1679c7fda44f6caa61e7a2 (diff)
downloadgcc-7a83e5bc5546183af6934f623a568b11cca63f78.zip
gcc-7a83e5bc5546183af6934f623a568b11cca63f78.tar.gz
gcc-7a83e5bc5546183af6934f623a568b11cca63f78.tar.bz2
Fix sparc regression due to recent movcc pattern changes.
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
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog9
-rw-r--r--gcc/config/sparc/sparc.c13
2 files changed, 15 insertions, 7 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index d9b9412..438e33c 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -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
diff --git a/gcc/config/sparc/sparc.c b/gcc/config/sparc/sparc.c
index b57a158..0daa53d 100644
--- a/gcc/config/sparc/sparc.c
+++ b/gcc/config/sparc/sparc.c
@@ -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