[stackprotector] Use analysis from the StackProtector pass for stack layout in PEI...
authorJosh Magee <joshua_magee@playstation.sony.com>
Thu, 19 Dec 2013 03:17:11 +0000 (03:17 +0000)
committerJosh Magee <joshua_magee@playstation.sony.com>
Thu, 19 Dec 2013 03:17:11 +0000 (03:17 +0000)
commit5b6af7163d0a76864bed610c4e884aeffa16b302
treeb839cde5feb63a9fd0ad985b0210532783d2e056
parent629f3b229e58bd930f87a9a3c01aec52daf5bc87
[stackprotector] Use analysis from the StackProtector pass for stack layout in PEI a nd LocalStackSlot passes.

This changes the MachineFrameInfo API to use the new SSPLayoutKind information
produced by the StackProtector pass (instead of a boolean flag) and updates a
few pass dependencies (to preserve the SSP analysis).

The stack layout follows the same approach used prior to this change - i.e.,
only LargeArray stack objects will be placed near the canary and everything
else will be laid out normally.  After this change, structures containing large
arrays will also be placed near the canary - a case previously missed by the
old implementation.

Out of tree targets will need to update their usage of
MachineFrameInfo::CreateStackObject to remove the MayNeedSP argument.

The next patch will implement the rules for sspstrong and sspreq.  The end goal
is to support ssp-strong stack layout rules.

WIP.

Differential Revision: http://llvm-reviews.chandlerc.com/D2158

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@197653 91177308-0d34-0410-b5e6-96231b3b80d8
18 files changed:
include/llvm/CodeGen/MachineFrameInfo.h
include/llvm/CodeGen/StackProtector.h
lib/CodeGen/LocalStackSlotAllocation.cpp
lib/CodeGen/MachineFunction.cpp
lib/CodeGen/MachineFunctionPass.cpp
lib/CodeGen/Passes.cpp
lib/CodeGen/PrologEpilogInserter.cpp
lib/CodeGen/SelectionDAG/FunctionLoweringInfo.cpp
lib/CodeGen/SelectionDAG/SelectionDAGBuilder.cpp
lib/CodeGen/StackProtector.cpp
lib/Target/Hexagon/HexagonRemoveSZExtArgs.cpp
lib/Target/NVPTX/NVPTXAllocaHoisting.h
lib/Target/NVPTX/NVPTXLowerAggrCopies.h
lib/Target/NVPTX/NVPTXSplitBBatBar.h
lib/Target/X86/X86FastISel.cpp
lib/Target/XCore/XCoreISelLowering.cpp
test/CodeGen/ARM/ssp-data-layout.ll [new file with mode: 0644]
test/CodeGen/X86/ssp-data-layout.ll [new file with mode: 0644]