diff options
author | Bill Wendling <isanbard@gmail.com> | 2010-07-27 01:55:19 +0000 |
---|---|---|
committer | Bill Wendling <isanbard@gmail.com> | 2010-07-27 01:55:19 +0000 |
commit | 0ff1ef650bac208b337059c2829880db5b4e4487 (patch) | |
tree | 5ffc84db766d243ae993c716386bc82996ae62ca /llvm/lib/CodeGen/SelectionDAG/FunctionLoweringInfo.cpp | |
parent | b052e8f4368ff0b2ccea18057209a335b5a6b940 (diff) | |
download | bcm5719-llvm-0ff1ef650bac208b337059c2829880db5b4e4487.tar.gz bcm5719-llvm-0ff1ef650bac208b337059c2829880db5b4e4487.zip |
It's better to have the arrays, which would trigger the creation of stack
protectors, to be near the stack protectors on the stack. Accomplish this by
tagging the stack object with a predicate that indicates that it would trigger
this. In the prolog-epilog inserter, assign these objects to the stack after the
stack protector but before the other objects.
llvm-svn: 109481
Diffstat (limited to 'llvm/lib/CodeGen/SelectionDAG/FunctionLoweringInfo.cpp')
-rw-r--r-- | llvm/lib/CodeGen/SelectionDAG/FunctionLoweringInfo.cpp | 10 |
1 files changed, 9 insertions, 1 deletions
diff --git a/llvm/lib/CodeGen/SelectionDAG/FunctionLoweringInfo.cpp b/llvm/lib/CodeGen/SelectionDAG/FunctionLoweringInfo.cpp index ee3bc0abbcf..77a2c866966 100644 --- a/llvm/lib/CodeGen/SelectionDAG/FunctionLoweringInfo.cpp +++ b/llvm/lib/CodeGen/SelectionDAG/FunctionLoweringInfo.cpp @@ -112,8 +112,16 @@ void FunctionLoweringInfo::set(const Function &fn, MachineFunction &mf) { TySize *= CUI->getZExtValue(); // Get total allocated size. if (TySize == 0) TySize = 1; // Don't create zero-sized stack objects. + + // The object may need to be placed onto the stack near the stack + // protector if one exists. Determine here if this object is a suitable + // candidate. I.e., it would trigger the creation of a stack protector. + bool MayNeedSP = + (AI->isArrayAllocation() || + (TySize > 8 && isa<ArrayType>(Ty) && + cast<ArrayType>(Ty)->getElementType()->isIntegerTy(8))); StaticAllocaMap[AI] = - MF->getFrameInfo()->CreateStackObject(TySize, Align, false); + MF->getFrameInfo()->CreateStackObject(TySize, Align, false, MayNeedSP); } for (; BB != EB; ++BB) |