diff options
Diffstat (limited to 'lib/Analysis/MemoryDependenceAnalysis.cpp')
-rw-r--r-- | lib/Analysis/MemoryDependenceAnalysis.cpp | 10 |
1 files changed, 6 insertions, 4 deletions
diff --git a/lib/Analysis/MemoryDependenceAnalysis.cpp b/lib/Analysis/MemoryDependenceAnalysis.cpp index 3a544f35d5..ad89124371 100644 --- a/lib/Analysis/MemoryDependenceAnalysis.cpp +++ b/lib/Analysis/MemoryDependenceAnalysis.cpp @@ -386,15 +386,17 @@ MemoryDependenceAnalysis::getModRefInfo(const Instruction *Inst, // with a smarter AA in place, this test is just wasting compile time. if (!DT) return AliasAnalysis::ModRef; const Value *Object = GetUnderlyingObject(MemLoc.Ptr, TD); - if (!isIdentifiedObject(Object) || isa<GlobalValue>(Object)) + if (!isIdentifiedObject(Object) || isa<GlobalValue>(Object) || + isa<Constant>(Object)) return AliasAnalysis::ModRef; + ImmutableCallSite CS(Inst); - if (!CS.getInstruction()) return AliasAnalysis::ModRef; + if (!CS.getInstruction() || CS.getInstruction() == Object) + return AliasAnalysis::ModRef; CapturesBefore CB(Inst, DT); llvm::PointerMayBeCaptured(Object, &CB); - - if (isa<Constant>(Object) || CS.getInstruction() == Object || CB.Captured) + if (CB.Captured) return AliasAnalysis::ModRef; unsigned ArgNo = 0; |