From 590e9a42f41c63a825798501a94419c1ae60f6ab Mon Sep 17 00:00:00 2001 From: Uros Bizjak Date: Wed, 17 Oct 2007 17:22:23 +0200 Subject: [PATCH] re PR middle-end/33794 (Wrong code w/ -ffast-math) PR middle-end/33794 * reg-stack.c (move_for_stack_reg): Swap input argument of UNSPEC_TAN insn to the top of the stack. From-SVN: r129406 --- gcc/ChangeLog | 6 ++++++ gcc/reg-stack.c | 12 +++++++----- 2 files changed, 13 insertions(+), 5 deletions(-) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index a37131f8f1f9..34462e4a89fb 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,9 @@ +2007-10-17 Uros Bizjak + + PR middle-end/33794 + * reg-stack.c (move_for_stack_reg): Swap input argument of + UNSPEC_TAN insn to the top of the stack. + 2007-10-17 Uros Bizjak PR target/32961 diff --git a/gcc/reg-stack.c b/gcc/reg-stack.c index f5d263fbff29..248a8c2b9a5c 100644 --- a/gcc/reg-stack.c +++ b/gcc/reg-stack.c @@ -1085,11 +1085,13 @@ move_for_stack_reg (rtx insn, stack regstack, rtx pat) special case with i387 UNSPEC_TAN, where destination is live (an argument to fptan) but inherent load of 1.0 is modelled as a load from a constant. */ - if (! (GET_CODE (pat) == PARALLEL - && XVECLEN (pat, 0) == 2 - && GET_CODE (XVECEXP (pat, 0, 1)) == SET - && GET_CODE (SET_SRC (XVECEXP (pat, 0, 1))) == UNSPEC - && XINT (SET_SRC (XVECEXP (pat, 0, 1)), 1) == UNSPEC_TAN)) + if (GET_CODE (pat) == PARALLEL + && XVECLEN (pat, 0) == 2 + && GET_CODE (XVECEXP (pat, 0, 1)) == SET + && GET_CODE (SET_SRC (XVECEXP (pat, 0, 1))) == UNSPEC + && XINT (SET_SRC (XVECEXP (pat, 0, 1)), 1) == UNSPEC_TAN) + emit_swap_insn (insn, regstack, dest); + else gcc_assert (get_hard_regnum (regstack, dest) < FIRST_STACK_REG); gcc_assert (regstack->top < REG_STACK_SIZE); -- 2.47.2