diff options
author | Dan Gohman <gohman@apple.com> | 2009-07-28 00:37:06 +0000 |
---|---|---|
committer | Dan Gohman <gohman@apple.com> | 2009-07-28 00:37:06 +0000 |
commit | a195b7ffd6612a331751c7b6042d5cd921ee586c (patch) | |
tree | 88bba7a98e80cc9e3853535e6777cc06fa77b45c /lib/Transforms/Scalar/MemCpyOptimizer.cpp | |
parent | 1f0962756dc46a2909250d242dfa2953eb15e036 (diff) |
Grab the LLVMContext and parent Module of SI ahead of the
point where SI can get deleted. This fixes a use of free'd memory.
This fixes Externals/Povray.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@77285 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/Transforms/Scalar/MemCpyOptimizer.cpp')
-rw-r--r-- | lib/Transforms/Scalar/MemCpyOptimizer.cpp | 7 |
1 files changed, 4 insertions, 3 deletions
diff --git a/lib/Transforms/Scalar/MemCpyOptimizer.cpp b/lib/Transforms/Scalar/MemCpyOptimizer.cpp index f63a912d6c..c359e47d05 100644 --- a/lib/Transforms/Scalar/MemCpyOptimizer.cpp +++ b/lib/Transforms/Scalar/MemCpyOptimizer.cpp @@ -352,6 +352,8 @@ bool MemCpyOpt::processStore(StoreInst *SI, BasicBlock::iterator& BBI) { TargetData &TD = getAnalysis<TargetData>(); AliasAnalysis &AA = getAnalysis<AliasAnalysis>(); + LLVMContext &Context = SI->getContext(); + Module *M = SI->getParent()->getParent()->getParent(); // Okay, so we now have a single store that can be splatable. Scan to find // all subsequent stores of the same value to offset from the same pointer. @@ -431,8 +433,7 @@ bool MemCpyOpt::processStore(StoreInst *SI, BasicBlock::iterator& BBI) { if (MemSetF == 0) { const Type *Tys[] = {Type::Int64Ty}; - MemSetF = Intrinsic::getDeclaration(SI->getParent()->getParent() - ->getParent(), Intrinsic::memset, + MemSetF = Intrinsic::getDeclaration(M, Intrinsic::memset, Tys, 1); } @@ -440,7 +441,7 @@ bool MemCpyOpt::processStore(StoreInst *SI, BasicBlock::iterator& BBI) { StartPtr = Range.StartPtr; // Cast the start ptr to be i8* as memset requires. - const Type *i8Ptr = SI->getContext().getPointerTypeUnqual(Type::Int8Ty); + const Type *i8Ptr = Context.getPointerTypeUnqual(Type::Int8Ty); if (StartPtr->getType() != i8Ptr) StartPtr = new BitCastInst(StartPtr, i8Ptr, StartPtr->getName(), InsertPt); |