aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJakub Jelinek <jakub@redhat.com>2008-11-18 13:33:38 +0100
committerJakub Jelinek <jakub@gcc.gnu.org>2008-11-18 13:33:38 +0100
commit6ea90eb7102cf3354bd6fd4288dbf64c6ba73652 (patch)
tree07ecff427e4719a1637fbff42c41577e57b2f515
parentd74b4b00786ae456928033b68ce195794e0bf021 (diff)
downloadgcc-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/ChangeLog9
-rw-r--r--gcc/config/i386/i386.c4
-rw-r--r--gcc/config/i386/i386.md18
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);
}