diff options
| author | Nick Lewycky <nicholas@mxc.ca> | 2012-02-20 23:32:26 +0000 |
|---|---|---|
| committer | Nick Lewycky <nicholas@mxc.ca> | 2012-02-20 23:32:26 +0000 |
| commit | 0ef0557ab5cd11f56c16e82551d4f3b58bb2507a (patch) | |
| tree | e15644f32031da9633d2bab76ccb75a228af3a4c /lib/Transforms/IPO | |
| parent | 01b623c8c2d1bd015a8bb20eafee3322575eff8f (diff) | |
| download | external_llvm-0ef0557ab5cd11f56c16e82551d4f3b58bb2507a.zip external_llvm-0ef0557ab5cd11f56c16e82551d4f3b58bb2507a.tar.gz external_llvm-0ef0557ab5cd11f56c16e82551d4f3b58bb2507a.tar.bz2 | |
Check for the correct size in the invariant marker.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@151003 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/Transforms/IPO')
| -rw-r--r-- | lib/Transforms/IPO/GlobalOpt.cpp | 11 |
1 files changed, 7 insertions, 4 deletions
diff --git a/lib/Transforms/IPO/GlobalOpt.cpp b/lib/Transforms/IPO/GlobalOpt.cpp index d197a3c..bb37bf4 100644 --- a/lib/Transforms/IPO/GlobalOpt.cpp +++ b/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. |
