diff options
author | Davide Italiano <davide@freebsd.org> | 2017-05-15 18:50:53 +0000 |
---|---|---|
committer | Davide Italiano <davide@freebsd.org> | 2017-05-15 18:50:53 +0000 |
commit | 6e7a21274898873cb6aef79b869d89b1081acb7d (patch) | |
tree | df87ccca4543215043a6cc5950b92be8a1ecccf6 /llvm/lib/Transforms | |
parent | e369653bf332cd21b2ee8eabb44febd600bccaa2 (diff) | |
download | bcm5719-llvm-6e7a21274898873cb6aef79b869d89b1081acb7d.tar.gz bcm5719-llvm-6e7a21274898873cb6aef79b869d89b1081acb7d.zip |
[NewGVN] Fix verification of MemoryPhis in verifyMemoryCongruency().
verifyMemoryCongruency() filters out trivially dead MemoryDef(s),
as we find them immediately dead, before moving from TOP to a new
congruence class.
This fixes the same problem for PHI(s) skipping MemoryPhis if all
the operands are dead.
Differential Revision: https://reviews.llvm.org/D33044
llvm-svn: 303100
Diffstat (limited to 'llvm/lib/Transforms')
-rw-r--r-- | llvm/lib/Transforms/Scalar/NewGVN.cpp | 13 |
1 files changed, 13 insertions, 0 deletions
diff --git a/llvm/lib/Transforms/Scalar/NewGVN.cpp b/llvm/lib/Transforms/Scalar/NewGVN.cpp index a8f399d49cc..c70c08dfecd 100644 --- a/llvm/lib/Transforms/Scalar/NewGVN.cpp +++ b/llvm/lib/Transforms/Scalar/NewGVN.cpp @@ -2549,6 +2549,19 @@ void NewGVN::verifyMemoryCongruency() const { return false; if (auto *MemDef = dyn_cast<MemoryDef>(Pair.first)) return !isInstructionTriviallyDead(MemDef->getMemoryInst()); + + // We could have phi nodes which operands are all trivially dead, + // so we don't process them. + if (auto *MemPHI = dyn_cast<MemoryPhi>(Pair.first)) { + for (auto &U : MemPHI->incoming_values()) { + if (Instruction *I = dyn_cast<Instruction>(U.get())) { + if (!isInstructionTriviallyDead(I)) + return true; + } + } + return false; + } + return true; }; |