i386: Avoid stack realignment if possible
authorH.J. Lu <hongjiu.lu@intel.com>
Tue, 5 Sep 2017 16:39:24 +0000 (16:39 +0000)
committerH.J. Lu <hjl@gcc.gnu.org>
Tue, 5 Sep 2017 16:39:24 +0000 (09:39 -0700)
commitf174328efedff73f53cad8848fe69f92e940309a
tree706d0c95cf17f85e96d477d27f667d470ee40466
parentc253525edd51a027b7db30e077a6643a78544b0c
i386: Avoid stack realignment if possible

ix86_finalize_stack_frame_flags has been extended to eliminate frame
pointer when the new stack frame isn't needed with and without
-maccumulate-outgoing-args as well as -fomit-frame-pointer.  Since stack
access with larger alignment may be optimized out, to decide if stack
realignment is needed, we need to not only check for stack frame access,
but also verify the alignment of stack frame access.  Since alignment of
memory access via arg_pointer is set up by caller, not by callee, we
should find the maximum stack alignment from the stack frame access
instructions via stack pointer and frame pointrer to avoid stack
realignment when stack alignment needed is less than incoming stack
boundary.

gcc/

PR target/59501
PR target/81624
PR target/81769
* config/i386/i386.c (ix86_finalize_stack_frame_flags): Don't
realign stack if stack alignment needed is less than incoming
stack boundary.

gcc/testsuite/

PR target/59501
PR target/81624
PR target/81769
* gcc.target/i386/pr59501-4a.c: Remove xfail.
* gcc.target/i386/pr81769-1a.c: New test.
* gcc.target/i386/pr81769-1b.c: Likewise.
* gcc.target/i386/pr81769-2.c: Likewise.

From-SVN: r251718
gcc/ChangeLog
gcc/config/i386/i386.c
gcc/testsuite/ChangeLog
gcc/testsuite/gcc.target/i386/pr59501-4a.c
gcc/testsuite/gcc.target/i386/pr81769-1a.c [new file with mode: 0644]
gcc/testsuite/gcc.target/i386/pr81769-1b.c [new file with mode: 0644]
gcc/testsuite/gcc.target/i386/pr81769-2.c [new file with mode: 0644]