diff options
author | Jakub Jelinek <jakub@redhat.com> | 2008-11-18 13:33:38 +0100 |
---|---|---|
committer | Jakub Jelinek <jakub@gcc.gnu.org> | 2008-11-18 13:33:38 +0100 |
commit | 6ea90eb7102cf3354bd6fd4288dbf64c6ba73652 (patch) | |
tree | 07ecff427e4719a1637fbff42c41577e57b2f515 | |
parent | d74b4b00786ae456928033b68ce195794e0bf021 (diff) | |
download | gcc-6ea90eb7102cf3354bd6fd4288dbf64c6ba73652.zip gcc-6ea90eb7102cf3354bd6fd4288dbf64c6ba73652.tar.gz gcc-6ea90eb7102cf3354bd6fd4288dbf64c6ba73652.tar.bz2 |
re PR target/38130 (__builtin_alloca (vs IRA?) testsuite failures on mingw32)
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
-rw-r--r-- | gcc/ChangeLog | 9 | ||||
-rw-r--r-- | gcc/config/i386/i386.c | 4 | ||||
-rw-r--r-- | gcc/config/i386/i386.md | 18 |
3 files changed, 21 insertions, 10 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index b7087f0..08f6310 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -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 diff --git a/gcc/config/i386/i386.c b/gcc/config/i386/i386.c index 38da3a4..f84f326 100644 --- a/gcc/config/i386/i386.c +++ b/gcc/config/i386/i386.c @@ -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)); diff --git a/gcc/config/i386/i386.md b/gcc/config/i386/i386.md index 055add4..d49e49a 100644 --- a/gcc/config/i386/i386.md +++ b/gcc/config/i386/i386.md @@ -20196,9 +20196,10 @@ (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" @@ -20206,9 +20207,10 @@ (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))] @@ -20240,9 +20242,9 @@ { 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); } |