diff options
author | Sebastian Pop <spop@codeaurora.org> | 2016-06-10 21:36:41 +0000 |
---|---|---|
committer | Sebastian Pop <spop@codeaurora.org> | 2016-06-10 21:36:41 +0000 |
commit | e1f60b1fb36c5f04b8f3aa60079cbdaf90d1805d (patch) | |
tree | cf9cc9b53e120a44d191e8df60ce3ee10201d5ce /llvm/lib/Transforms | |
parent | 39c226fdba889c61cfc82b7a34a25c813226c2c4 (diff) | |
download | bcm5719-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.cpp | 15 |
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()); |