PR middle-end/33794
authoruros <uros@138bc75d-0d04-0410-961f-82ee72b054a4>
Wed, 17 Oct 2007 15:22:23 +0000 (15:22 +0000)
committeruros <uros@138bc75d-0d04-0410-961f-82ee72b054a4>
Wed, 17 Oct 2007 15:22:23 +0000 (15:22 +0000)
* reg-stack.c (move_for_stack_reg): Swap input argument of
UNSPEC_TAN insn to the top of the stack.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@129406 138bc75d-0d04-0410-961f-82ee72b054a4

gcc/ChangeLog
gcc/reg-stack.c

index a37131f..34462e4 100644 (file)
@@ -1,5 +1,11 @@
 2007-10-17  Uros Bizjak  <ubizjak@gmail.com>
 
+       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  <ubizjak@gmail.com>
+
        PR target/32961
        * config/i386/i386.c (ix86_expand_builtin) [IX86_BUILTIN_PSLLWI128,
        IX86_BUILTIN_PSLLDI128, BUILTIN_PSLLQI128, IX86_BUILTIN_PSRAWI128,
index f5d263f..248a8c2 100644 (file)
@@ -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);