From 8b9506fe7db5f4157760f2317b16cae1f7353d2a Mon Sep 17 00:00:00 2001 From: davem Date: Fri, 4 Nov 2011 20:25:59 +0000 Subject: [PATCH] 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]. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@180982 138bc75d-0d04-0410-961f-82ee72b054a4 --- gcc/ChangeLog | 9 ++++++++- 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 + + 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 * 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 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 -- 2.7.4