From 8d845783d7c55e1e991c6db51acfacb46dc599c1 Mon Sep 17 00:00:00 2001 From: jakub Date: Tue, 18 Nov 2008 12:33:38 +0000 Subject: [PATCH] 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. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@141965 138bc75d-0d04-0410-961f-82ee72b054a4 --- gcc/ChangeLog | 9 +++++++++ gcc/config/i386/i386.c | 4 ++-- gcc/config/i386/i386.md | 18 ++++++++++-------- 3 files changed, 21 insertions(+), 10 deletions(-) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index b7087f0e21a..08f63104473 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,12 @@ +2008-11-18 Jakub Jelinek + + 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 * 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 38da3a4a1f6..f84f326cef7 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 055add495fe..d49e49a3eb4 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); } -- 2.11.0