diff options
author | Daniel Berlin <dberlin@dberlin.org> | 2015-04-13 23:05:45 +0000 |
---|---|---|
committer | Daniel Berlin <dberlin@dberlin.org> | 2015-04-13 23:05:45 +0000 |
commit | b2d227693ff492efacaace465f8d4fe0f1141e3e (patch) | |
tree | f39fb021f217e1dedca1a6d07b2b6c16fc55c38c /llvm/lib/Analysis/AliasAnalysis.cpp | |
parent | cf0ed3a8365c88bcedf7222b306746f08da3aedb (diff) | |
download | bcm5719-llvm-b2d227693ff492efacaace465f8d4fe0f1141e3e.tar.gz bcm5719-llvm-b2d227693ff492efacaace465f8d4fe0f1141e3e.zip |
Make getModRefInfo with a default location not crash.
Add getModRefInfo that works without location.
Add unit tests.
llvm-svn: 234811
Diffstat (limited to 'llvm/lib/Analysis/AliasAnalysis.cpp')
-rw-r--r-- | llvm/lib/Analysis/AliasAnalysis.cpp | 21 |
1 files changed, 12 insertions, 9 deletions
diff --git a/llvm/lib/Analysis/AliasAnalysis.cpp b/llvm/lib/Analysis/AliasAnalysis.cpp index 0b0fd50a866..c8323620558 100644 --- a/llvm/lib/Analysis/AliasAnalysis.cpp +++ b/llvm/lib/Analysis/AliasAnalysis.cpp @@ -330,7 +330,7 @@ AliasAnalysis::getModRefInfo(const LoadInst *L, const Location &Loc) { // If the load address doesn't alias the given address, it doesn't read // or write the specified memory. - if (!alias(getLocation(L), Loc)) + if (Loc.Ptr && !alias(getLocation(L), Loc)) return NoModRef; // Otherwise, a load just reads. @@ -343,15 +343,18 @@ AliasAnalysis::getModRefInfo(const StoreInst *S, const Location &Loc) { if (!S->isUnordered()) return ModRef; - // If the store address cannot alias the pointer in question, then the - // specified memory cannot be modified by the store. - if (!alias(getLocation(S), Loc)) - return NoModRef; + if (Loc.Ptr) { + // If the store address cannot alias the pointer in question, then the + // specified memory cannot be modified by the store. + if (!alias(getLocation(S), Loc)) + return NoModRef; - // If the pointer is a pointer to constant memory, then it could not have been - // modified by this store. - if (pointsToConstantMemory(Loc)) - return NoModRef; + // If the pointer is a pointer to constant memory, then it could not have + // been modified by this store. + if (pointsToConstantMemory(Loc)) + return NoModRef; + + } // Otherwise, a store just writes. return Mod; |