i386: Don't convert stack operations to pushes if using a redzone.
* config/i386/i386-protos.h (ix86_using_red_zone): Declare. * config/i386/i386.c (ix86_using_red_zone): No longer static. * config/i386/i386.md (stack decrement to push peepholes): Guard with !x86_using_red_zone (). testsuite/ * gcc.target/i386/pr46470.c: Add -mno-red-zone to dg-options for x86_64. From-SVN: r235028
This commit is contained in:
parent
1e77281b13
commit
10e547d619
|
@ -1,3 +1,10 @@
|
|||
2016-04-15 Bernd Schmidt <bschmidt@redhat.com>
|
||||
|
||||
* config/i386/i386-protos.h (ix86_using_red_zone): Declare.
|
||||
* config/i386/i386.c (ix86_using_red_zone): No longer static.
|
||||
* config/i386/i386.md (stack decrement to push peepholes): Guard
|
||||
with !x86_using_red_zone ().
|
||||
|
||||
2016-04-15 Jakub Jelinek <jakub@redhat.com>
|
||||
|
||||
PR c++/70675
|
||||
|
|
|
@ -44,6 +44,8 @@ extern bool ix86_use_pseudo_pic_reg (void);
|
|||
|
||||
extern void ix86_reset_previous_fndecl (void);
|
||||
|
||||
extern bool ix86_using_red_zone (void);
|
||||
|
||||
#ifdef RTX_CODE
|
||||
extern int standard_80387_constant_p (rtx);
|
||||
extern const char *standard_80387_constant_opcode (rtx);
|
||||
|
|
|
@ -3709,7 +3709,7 @@ make_pass_stv (gcc::context *ctxt)
|
|||
|
||||
/* Return true if a red-zone is in use. */
|
||||
|
||||
static inline bool
|
||||
bool
|
||||
ix86_using_red_zone (void)
|
||||
{
|
||||
return TARGET_RED_ZONE && !TARGET_64BIT_MS_ABI;
|
||||
|
|
|
@ -18240,7 +18240,8 @@
|
|||
(clobber (reg:CC FLAGS_REG))
|
||||
(clobber (mem:BLK (scratch)))])]
|
||||
"(TARGET_SINGLE_PUSH || optimize_insn_for_size_p ())
|
||||
&& INTVAL (operands[0]) == -GET_MODE_SIZE (word_mode)"
|
||||
&& INTVAL (operands[0]) == -GET_MODE_SIZE (word_mode)
|
||||
&& !ix86_using_red_zone ()"
|
||||
[(clobber (match_dup 1))
|
||||
(parallel [(set (mem:W (pre_dec:P (reg:P SP_REG))) (match_dup 1))
|
||||
(clobber (mem:BLK (scratch)))])])
|
||||
|
@ -18253,7 +18254,8 @@
|
|||
(clobber (reg:CC FLAGS_REG))
|
||||
(clobber (mem:BLK (scratch)))])]
|
||||
"(TARGET_DOUBLE_PUSH || optimize_insn_for_size_p ())
|
||||
&& INTVAL (operands[0]) == -2*GET_MODE_SIZE (word_mode)"
|
||||
&& INTVAL (operands[0]) == -2*GET_MODE_SIZE (word_mode)
|
||||
&& !ix86_using_red_zone ()"
|
||||
[(clobber (match_dup 1))
|
||||
(set (mem:W (pre_dec:P (reg:P SP_REG))) (match_dup 1))
|
||||
(parallel [(set (mem:W (pre_dec:P (reg:P SP_REG))) (match_dup 1))
|
||||
|
@ -18267,7 +18269,8 @@
|
|||
(match_operand:P 0 "const_int_operand")))
|
||||
(clobber (reg:CC FLAGS_REG))])]
|
||||
"(TARGET_SINGLE_PUSH || optimize_insn_for_size_p ())
|
||||
&& INTVAL (operands[0]) == -GET_MODE_SIZE (word_mode)"
|
||||
&& INTVAL (operands[0]) == -GET_MODE_SIZE (word_mode)
|
||||
&& !ix86_using_red_zone ()"
|
||||
[(clobber (match_dup 1))
|
||||
(set (mem:W (pre_dec:P (reg:P SP_REG))) (match_dup 1))])
|
||||
|
||||
|
@ -18278,7 +18281,8 @@
|
|||
(match_operand:P 0 "const_int_operand")))
|
||||
(clobber (reg:CC FLAGS_REG))])]
|
||||
"(TARGET_DOUBLE_PUSH || optimize_insn_for_size_p ())
|
||||
&& INTVAL (operands[0]) == -2*GET_MODE_SIZE (word_mode)"
|
||||
&& INTVAL (operands[0]) == -2*GET_MODE_SIZE (word_mode)
|
||||
&& !ix86_using_red_zone ()"
|
||||
[(clobber (match_dup 1))
|
||||
(set (mem:W (pre_dec:P (reg:P SP_REG))) (match_dup 1))
|
||||
(set (mem:W (pre_dec:P (reg:P SP_REG))) (match_dup 1))])
|
||||
|
|
|
@ -1,3 +1,8 @@
|
|||
2016-04-15 Bernd Schmidt <bschmidt@redhat.com>
|
||||
|
||||
* gcc.target/i386/pr46470.c: Add -mno-red-zone to dg-options for
|
||||
x86_64.
|
||||
|
||||
2016-04-15 Marek Polacek <polacek@redhat.com>
|
||||
|
||||
PR c/70651
|
||||
|
|
|
@ -4,7 +4,7 @@
|
|||
/* These options are selected to ensure 1 word needs to be allocated
|
||||
on the stack to maintain alignment for the call. This should be
|
||||
transformed to push+pop. We also want to force unwind info updates. */
|
||||
/* { dg-options "-Os -fomit-frame-pointer -fasynchronous-unwind-tables" } */
|
||||
/* { dg-options "-Os -fomit-frame-pointer -fasynchronous-unwind-tables -mno-red-zone" } */
|
||||
/* { dg-options "-Os -fomit-frame-pointer -mpreferred-stack-boundary=3 -fasynchronous-unwind-tables" { target ia32 } } */
|
||||
/* ms_abi has reserved stack-region. */
|
||||
/* { dg-skip-if "" { x86_64-*-mingw* } { "*" } { "" } } */
|
||||
|
|
Loading…
Reference in New Issue