re PR target/38130 (__builtin_alloca (vs IRA?) testsuite failures on mingw32)
authorJakub Jelinek <jakub@redhat.com>
Tue, 18 Nov 2008 12:33:38 +0000 (13:33 +0100)
committerJakub Jelinek <jakub@gcc.gnu.org>
Tue, 18 Nov 2008 12:33:38 +0000 (13:33 +0100)
PR target/38130
* config/i386/i386.md (allocate_stack_worker_32,
allocate_stack_worker_64): Don't use match_dup between input and
output operand.
(allocate_stack): Adjust gen_stack_worker_{32,64} caller.
* config/i386/i386.c (ix86_expand_prologue): Likewise.

From-SVN: r141965

gcc/ChangeLog
gcc/config/i386/i386.c
gcc/config/i386/i386.md

index b7087f0..08f6310 100644 (file)
@@ -1,3 +1,12 @@
+2008-11-18  Jakub Jelinek  <jakub@redhat.com>
+
+       PR target/38130
+       * config/i386/i386.md (allocate_stack_worker_32,
+       allocate_stack_worker_64): Don't use match_dup between input and
+       output operand.
+       (allocate_stack): Adjust gen_stack_worker_{32,64} caller.
+       * config/i386/i386.c (ix86_expand_prologue): Likewise.
+
 2008-11-18  Kai Tietz  <kai.tietz@onevision.com>
 
        * config/i386/t-cygming (SHLIB_LINK): Make sure that $(SHLIB_MAP).def
index 38da3a4..f84f326 100644 (file)
@@ -7989,9 +7989,9 @@ ix86_expand_prologue (void)
       emit_move_insn (eax, GEN_INT (allocate));
 
       if (TARGET_64BIT)
-       insn = gen_allocate_stack_worker_64 (eax);
+       insn = gen_allocate_stack_worker_64 (eax, eax);
       else
-       insn = gen_allocate_stack_worker_32 (eax);
+       insn = gen_allocate_stack_worker_32 (eax, eax);
       insn = emit_insn (insn);
       RTX_FRAME_RELATED_P (insn) = 1;
       t = gen_rtx_PLUS (Pmode, stack_pointer_rtx, GEN_INT (-allocate));
index 055add4..d49e49a 100644 (file)
    (set_attr "mode" "DI")])
 
 (define_insn "allocate_stack_worker_32"
-  [(set (match_operand:SI 0 "register_operand" "+a")
-       (unspec_volatile:SI [(match_dup 0)] UNSPECV_STACK_PROBE))
-   (set (reg:SI SP_REG) (minus:SI (reg:SI SP_REG) (match_dup 0)))
+  [(set (match_operand:SI 0 "register_operand" "=a")
+       (unspec_volatile:SI [(match_operand:SI 1 "register_operand" "0")]
+                           UNSPECV_STACK_PROBE))
+   (set (reg:SI SP_REG) (minus:SI (reg:SI SP_REG) (match_dup 1)))
    (clobber (reg:CC FLAGS_REG))]
   "!TARGET_64BIT && TARGET_STACK_PROBE"
   "call\t___chkstk"
    (set_attr "length" "5")])
 
 (define_insn "allocate_stack_worker_64"
-  [(set (match_operand:DI 0 "register_operand" "+a")
-       (unspec_volatile:DI [(match_dup 0)] UNSPECV_STACK_PROBE))
-   (set (reg:DI SP_REG) (minus:DI (reg:DI SP_REG) (match_dup 0)))
+  [(set (match_operand:DI 0 "register_operand" "=a")
+       (unspec_volatile:DI [(match_operand:DI 1 "register_operand" "0")]
+                           UNSPECV_STACK_PROBE))
+   (set (reg:DI SP_REG) (minus:DI (reg:DI SP_REG) (match_dup 1)))
    (clobber (reg:DI R10_REG))
    (clobber (reg:DI R11_REG))
    (clobber (reg:CC FLAGS_REG))]
     {
       x = copy_to_mode_reg (Pmode, operands[1]);
       if (TARGET_64BIT)
-       x = gen_allocate_stack_worker_64 (x);
+       x = gen_allocate_stack_worker_64 (x, x);
       else
-       x = gen_allocate_stack_worker_32 (x);
+       x = gen_allocate_stack_worker_32 (x, x);
       emit_insn (x);
     }