summaryrefslogtreecommitdiffstats
path: root/llvm/lib/Transforms
diff options
context:
space:
mode:
authorNick Lewycky <nicholas@mxc.ca>2012-02-20 23:32:26 +0000
committerNick Lewycky <nicholas@mxc.ca>2012-02-20 23:32:26 +0000
commit519561f418c77dcf46fd6d96d25d884fa07fd7da (patch)
treee195b6ac3c6176b1c2a0132e89908c2cf82f29e4 /llvm/lib/Transforms
parent63618f9ba62da2ee447896ea49e9ac5f1d087971 (diff)
downloadbcm5719-llvm-519561f418c77dcf46fd6d96d25d884fa07fd7da.tar.gz
bcm5719-llvm-519561f418c77dcf46fd6d96d25d884fa07fd7da.zip
Check for the correct size in the invariant marker.
llvm-svn: 151003
Diffstat (limited to 'llvm/lib/Transforms')
-rw-r--r--llvm/lib/Transforms/IPO/GlobalOpt.cpp11
1 files changed, 7 insertions, 4 deletions
diff --git a/llvm/lib/Transforms/IPO/GlobalOpt.cpp b/llvm/lib/Transforms/IPO/GlobalOpt.cpp
index d197a3c87ad..bb37bf4c26e 100644
--- a/llvm/lib/Transforms/IPO/GlobalOpt.cpp
+++ b/llvm/lib/Transforms/IPO/GlobalOpt.cpp
@@ -2511,10 +2511,13 @@ bool Evaluator::EvaluateBlock(BasicBlock::iterator CurInst,
if (!II->use_empty())
return false;
ConstantInt *Size = cast<ConstantInt>(II->getArgOperand(0));
- if (Size->isAllOnesValue()) {
- Value *PtrArg = getVal(II->getArgOperand(1));
- Value *Ptr = PtrArg->stripPointerCasts();
- if (GlobalVariable *GV = dyn_cast<GlobalVariable>(Ptr))
+ Value *PtrArg = getVal(II->getArgOperand(1));
+ Value *Ptr = PtrArg->stripPointerCasts();
+ if (GlobalVariable *GV = dyn_cast<GlobalVariable>(Ptr)) {
+ Type *ElemTy = cast<PointerType>(GV->getType())->getElementType();
+ if (!Size->isAllOnesValue() &&
+ Size->getValue().getLimitedValue() >=
+ TD->getTypeStoreSize(ElemTy))
Invariants.insert(GV);
}
// Continue even if we do nothing.
OpenPOWER on IntegriCloud