diff options
author | David S. Miller <davem@davemloft.net> | 2011-11-04 20:25:59 +0000 |
---|---|---|
committer | David S. Miller <davem@gcc.gnu.org> | 2011-11-04 13:25:59 -0700 |
commit | 7a83e5bc5546183af6934f623a568b11cca63f78 (patch) | |
tree | b00e8e391633ace5af1d48f9f8a269da78231dd8 /gcc | |
parent | 801fe0bb11f8a6adbb1679c7fda44f6caa61e7a2 (diff) | |
download | gcc-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/ChangeLog | 9 | ||||
-rw-r--r-- | gcc/config/sparc/sparc.c | 13 |
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 |