diff options
author | Reid Kleckner <reid@kleckner.net> | 2014-01-31 23:45:12 +0000 |
---|---|---|
committer | Reid Kleckner <reid@kleckner.net> | 2014-01-31 23:45:12 +0000 |
commit | f10743d765c456db7c9cd2a9fe4c528d75bb5b8f (patch) | |
tree | f369c935c1a43d3cea904b1419db8aee9c0305ca /lib | |
parent | 1cf770889fb526b7de5448c38c23182741be445f (diff) | |
download | llvm-f10743d765c456db7c9cd2a9fe4c528d75bb5b8f.tar.gz llvm-f10743d765c456db7c9cd2a9fe4c528d75bb5b8f.tar.bz2 llvm-f10743d765c456db7c9cd2a9fe4c528d75bb5b8f.tar.xz |
Don't put non-static allocas in the static alloca map
Allocas marked inalloca are never static, but we were trying to put them
into the static alloca map if they were in the entry block. Also add an
assertion in x86 fastisel.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@200593 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib')
-rw-r--r-- | lib/CodeGen/SelectionDAG/FunctionLoweringInfo.cpp | 8 | ||||
-rw-r--r-- | lib/Target/X86/X86FastISel.cpp | 1 |
2 files changed, 8 insertions, 1 deletions
diff --git a/lib/CodeGen/SelectionDAG/FunctionLoweringInfo.cpp b/lib/CodeGen/SelectionDAG/FunctionLoweringInfo.cpp index 82e97f40fc..d842fabae2 100644 --- a/lib/CodeGen/SelectionDAG/FunctionLoweringInfo.cpp +++ b/lib/CodeGen/SelectionDAG/FunctionLoweringInfo.cpp @@ -74,7 +74,12 @@ void FunctionLoweringInfo::set(const Function &fn, MachineFunction &mf) { // them. Function::const_iterator BB = Fn->begin(), EB = Fn->end(); for (BasicBlock::const_iterator I = BB->begin(), E = BB->end(); I != E; ++I) - if (const AllocaInst *AI = dyn_cast<AllocaInst>(I)) + if (const AllocaInst *AI = dyn_cast<AllocaInst>(I)) { + // Don't fold inalloca allocas or other dynamic allocas into the initial + // stack frame allocation, even if they are in the entry block. + if (!AI->isStaticAlloca()) + continue; + if (const ConstantInt *CUI = dyn_cast<ConstantInt>(AI->getArraySize())) { Type *Ty = AI->getAllocatedType(); uint64_t TySize = TLI->getDataLayout()->getTypeAllocSize(Ty); @@ -88,6 +93,7 @@ void FunctionLoweringInfo::set(const Function &fn, MachineFunction &mf) { StaticAllocaMap[AI] = MF->getFrameInfo()->CreateStackObject(TySize, Align, false, AI); } + } for (; BB != EB; ++BB) for (BasicBlock::const_iterator I = BB->begin(), E = BB->end(); diff --git a/lib/Target/X86/X86FastISel.cpp b/lib/Target/X86/X86FastISel.cpp index d653c871b2..be6f13899c 100644 --- a/lib/Target/X86/X86FastISel.cpp +++ b/lib/Target/X86/X86FastISel.cpp @@ -2483,6 +2483,7 @@ unsigned X86FastISel::TargetMaterializeAlloca(const AllocaInst *C) { // X86SelectAddrss, and TargetMaterializeAlloca. if (!FuncInfo.StaticAllocaMap.count(C)) return 0; + assert(C->isStaticAlloca() && "dynamic alloca in the static alloca map?"); X86AddressMode AM; if (!X86SelectAddress(C, AM)) |