summaryrefslogtreecommitdiffstats
path: root/llvm/lib/Transforms
diff options
context:
space:
mode:
authorSebastian Pop <spop@codeaurora.org>2016-06-10 21:36:41 +0000
committerSebastian Pop <spop@codeaurora.org>2016-06-10 21:36:41 +0000
commite1f60b1fb36c5f04b8f3aa60079cbdaf90d1805d (patch)
treecf9cc9b53e120a44d191e8df60ce3ee10201d5ce /llvm/lib/Transforms
parent39c226fdba889c61cfc82b7a34a25c813226c2c4 (diff)
downloadbcm5719-llvm-e1f60b1fb36c5f04b8f3aa60079cbdaf90d1805d.tar.gz
bcm5719-llvm-e1f60b1fb36c5f04b8f3aa60079cbdaf90d1805d.zip
MemorySSA: fix memory access local dominance function for live on entry
A memory access defined on function entry cannot be locally dominated by another memory access. The patch was split from http://reviews.llvm.org/D19338 which exposes the problem. Differential Revision: http://reviews.llvm.org/D21039 llvm-svn: 272436
Diffstat (limited to 'llvm/lib/Transforms')
-rw-r--r--llvm/lib/Transforms/Utils/MemorySSA.cpp15
1 files changed, 15 insertions, 0 deletions
diff --git a/llvm/lib/Transforms/Utils/MemorySSA.cpp b/llvm/lib/Transforms/Utils/MemorySSA.cpp
index 5946b99d146..85d21b1007e 100644
--- a/llvm/lib/Transforms/Utils/MemorySSA.cpp
+++ b/llvm/lib/Transforms/Utils/MemorySSA.cpp
@@ -623,6 +623,21 @@ bool MemorySSA::locallyDominates(const MemoryAccess *Dominator,
assert((Dominator->getBlock() == Dominatee->getBlock()) &&
"Asking for local domination when accesses are in different blocks!");
+
+ // A node dominates itself.
+ if (Dominatee == Dominator)
+ return true;
+
+ // When Dominatee is defined on function entry, it is not dominated by another
+ // memory access.
+ if (isLiveOnEntryDef(Dominatee))
+ return false;
+
+ // When Dominator is defined on function entry, it dominates the other memory
+ // access.
+ if (isLiveOnEntryDef(Dominator))
+ return true;
+
// Get the access list for the block
const AccessListType *AccessList = getBlockAccesses(Dominator->getBlock());
AccessListType::const_reverse_iterator It(Dominator->getIterator());
OpenPOWER on IntegriCloud