From: Uros Bizjak Date: Thu, 7 Jan 2016 19:06:37 +0000 (+0100) Subject: re PR target/69140 (stack alignment + O1 breaks with Microsoft ABI) X-Git-Tag: basepoints/gcc-7~1785 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=0de71e1f517fd3f97f072d400991e10879d2867c;p=thirdparty%2Fgcc.git re PR target/69140 (stack alignment + O1 breaks with Microsoft ABI) 2016-01-07 Uros Bizjak PR target/69140 * config/i386/i386.c (ix86_frame_pointer_required): Enable frame pointer for TARGET_64BIT_MS_ABI when stack is misaligned. 2016-01-07 Uros Bizjak Revert 2016-01-06 Uros Bizjak PR target/69140 * config/i386/i386.c (ix86_expand_prologue): Declare fs.sp_valid depending on frame_pointer_needed before remaining integer and SSE registers are saved. From-SVN: r232140 --- diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 215a366b02e9..db0b95922948 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,19 @@ +2016-01-07 Uros Bizjak + + PR target/69140 + * config/i386/i386.c (ix86_frame_pointer_required): Enable + frame pointer for TARGET_64BIT_MS_ABI when stack is misaligned. + +2016-01-07 Uros Bizjak + + Revert + 2016-01-06 Uros Bizjak + + PR target/69140 + * config/i386/i386.c (ix86_expand_prologue): Declare fs.sp_valid + depending on frame_pointer_needed before remaining integer and SSE + registers are saved. + 2016-01-07 Sandra Loosemore PR 1078 diff --git a/gcc/config/i386/i386.c b/gcc/config/i386/i386.c index 9c3fa70b752c..aac0847db7ee 100644 --- a/gcc/config/i386/i386.c +++ b/gcc/config/i386/i386.c @@ -10903,6 +10903,10 @@ ix86_frame_pointer_required (void) if (TARGET_64BIT_MS_ABI && get_frame_size () > SEH_MAX_FRAME_SIZE) return true; + /* SSE saves require frame-pointer when stack is misaligned. */ + if (TARGET_64BIT_MS_ABI && ix86_incoming_stack_boundary < 128) + return true; + /* In ix86_option_override_internal, TARGET_OMIT_LEAF_FRAME_POINTER turns off the frame pointer by default. Turn it back on now if we've not got a leaf function. */ @@ -13065,8 +13069,6 @@ ix86_expand_prologue (void) m->fs.fp_valid = true; } - m->fs.sp_valid = !frame_pointer_needed; - if (!int_registers_saved) ix86_emit_save_regs_using_mov (frame.reg_save_offset); if (!sse_registers_saved)