diff options
author | Daniel Berlin <dberlin@dberlin.org> | 2017-04-06 18:52:55 +0000 |
---|---|---|
committer | Daniel Berlin <dberlin@dberlin.org> | 2017-04-06 18:52:55 +0000 |
commit | 08fe6e0f74ff2d5ffa110a2ecfb99a7036a244d5 (patch) | |
tree | f549b35dbbcdc4aa7bf30a8dd264c24bb517d9e1 /llvm | |
parent | 5845e0549e2794274eb3e07edb66f462692efbd8 (diff) | |
download | bcm5719-llvm-08fe6e0f74ff2d5ffa110a2ecfb99a7036a244d5.tar.gz bcm5719-llvm-08fe6e0f74ff2d5ffa110a2ecfb99a7036a244d5.zip |
NewGVN: Fixup some small issues
llvm-svn: 299684
Diffstat (limited to 'llvm')
-rw-r--r-- | llvm/lib/Transforms/Scalar/NewGVN.cpp | 32 |
1 files changed, 11 insertions, 21 deletions
diff --git a/llvm/lib/Transforms/Scalar/NewGVN.cpp b/llvm/lib/Transforms/Scalar/NewGVN.cpp index 91f7292653e..526a4c0f35c 100644 --- a/llvm/lib/Transforms/Scalar/NewGVN.cpp +++ b/llvm/lib/Transforms/Scalar/NewGVN.cpp @@ -2948,27 +2948,21 @@ bool NewGVN::eliminateInstructions(Function &F) { // are left. Value *Leader = CC->RepStoredValue ? CC->RepStoredValue : CC->RepLeader; if (alwaysAvailable(Leader)) { - SmallPtrSet<Value *, 4> MembersLeft; + CongruenceClass::MemberSet MembersLeft; for (auto M : CC->Members) { Value *Member = M; // Void things have no uses we can replace. - if (Member == Leader || Member->getType()->isVoidTy()) { + if (Member == Leader || !isa<Instruction>(Member) || + Member->getType()->isVoidTy()) { MembersLeft.insert(Member); continue; } DEBUG(dbgs() << "Found replacement " << *(Leader) << " for " << *Member << "\n"); - // Due to equality propagation, these may not always be - // instructions, they may be real values. We don't really - // care about trying to replace the non-instructions. - if (auto *I = dyn_cast<Instruction>(Member)) { - assert(Leader != I && "About to accidentally remove our leader"); - replaceInstruction(I, Leader); - AnythingReplaced = true; - continue; - } else { - MembersLeft.insert(I); - } + auto *I = cast<Instruction>(Member); + assert(Leader != I && "About to accidentally remove our leader"); + replaceInstruction(I, Leader); + AnythingReplaced = true; } CC->Members.swap(MembersLeft); } else { @@ -3114,15 +3108,11 @@ bool NewGVN::eliminateInstructions(Function &F) { markInstructionForDeletion(I); // Cleanup the congruence class. - SmallPtrSet<Value *, 4> MembersLeft; - for (Value *Member : CC->Members) { - if (Member->getType()->isVoidTy()) { + CongruenceClass::MemberSet MembersLeft; + for (auto *Member : CC->Members) + if (!isa<Instruction>(Member) || + !InstructionsToErase.count(cast<Instruction>(Member))) MembersLeft.insert(Member); - continue; - } - - MembersLeft.insert(Member); - } CC->Members.swap(MembersLeft); // If we have possible dead stores to look at, try to eliminate them. |