summaryrefslogtreecommitdiffstats
path: root/llvm/lib/Analysis/AliasAnalysis.cpp
diff options
context:
space:
mode:
authorDaniel Berlin <dberlin@dberlin.org>2015-04-13 23:05:45 +0000
committerDaniel Berlin <dberlin@dberlin.org>2015-04-13 23:05:45 +0000
commitb2d227693ff492efacaace465f8d4fe0f1141e3e (patch)
treef39fb021f217e1dedca1a6d07b2b6c16fc55c38c /llvm/lib/Analysis/AliasAnalysis.cpp
parentcf0ed3a8365c88bcedf7222b306746f08da3aedb (diff)
downloadbcm5719-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.cpp21
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;
OpenPOWER on IntegriCloud