From 934731460a0412f09ccadfe8383d99f5ff1cfd70 Mon Sep 17 00:00:00 2001 From: Daniel Berlin Date: Thu, 6 Apr 2017 18:52:55 +0000 Subject: [PATCH] NewGVN: Fixup some small issues git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@299684 91177308-0d34-0410-b5e6-96231b3b80d8 --- lib/Transforms/Scalar/NewGVN.cpp | 32 +++++++++++--------------------- 1 file changed, 11 insertions(+), 21 deletions(-) diff --git a/lib/Transforms/Scalar/NewGVN.cpp b/lib/Transforms/Scalar/NewGVN.cpp index 91f7292653e..526a4c0f35c 100644 --- a/lib/Transforms/Scalar/NewGVN.cpp +++ b/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 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(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(Member)) { - assert(Leader != I && "About to accidentally remove our leader"); - replaceInstruction(I, Leader); - AnythingReplaced = true; - continue; - } else { - MembersLeft.insert(I); - } + auto *I = cast(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 MembersLeft; - for (Value *Member : CC->Members) { - if (Member->getType()->isVoidTy()) { + CongruenceClass::MemberSet MembersLeft; + for (auto *Member : CC->Members) + if (!isa(Member) || + !InstructionsToErase.count(cast(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. -- 2.11.0