aboutsummaryrefslogtreecommitdiff
path: root/llvm/lib/Analysis/MemoryDependenceAnalysis.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'llvm/lib/Analysis/MemoryDependenceAnalysis.cpp')
-rw-r--r--llvm/lib/Analysis/MemoryDependenceAnalysis.cpp10
1 files changed, 6 insertions, 4 deletions
diff --git a/llvm/lib/Analysis/MemoryDependenceAnalysis.cpp b/llvm/lib/Analysis/MemoryDependenceAnalysis.cpp
index 690d575ef979..fce9d5b24faf 100644
--- a/llvm/lib/Analysis/MemoryDependenceAnalysis.cpp
+++ b/llvm/lib/Analysis/MemoryDependenceAnalysis.cpp
@@ -139,10 +139,12 @@ static ModRefInfo GetLocation(const Instruction *Inst, MemoryLocation &Loc,
return ModRefInfo::ModRef;
}
- if (const CallInst *CI = isFreeCall(Inst, &TLI)) {
- // calls to free() deallocate the entire structure
- Loc = MemoryLocation::getAfter(CI->getArgOperand(0));
- return ModRefInfo::Mod;
+ if (const CallBase *CB = dyn_cast<CallBase>(Inst)) {
+ if (Value *FreedOp = getFreedOperand(CB, &TLI)) {
+ // calls to free() deallocate the entire structure
+ Loc = MemoryLocation::getAfter(FreedOp);
+ return ModRefInfo::Mod;
+ }
}
if (const IntrinsicInst *II = dyn_cast<IntrinsicInst>(Inst)) {