[llvm] r299684 - NewGVN: Fixup some small issues
Daniel Berlin via llvm-commits
llvm-commits at lists.llvm.org
Thu Apr 6 11:52:55 PDT 2017
Author: dannyb
Date: Thu Apr 6 13:52:55 2017
New Revision: 299684
URL: http://llvm.org/viewvc/llvm-project?rev=299684&view=rev
Log:
NewGVN: Fixup some small issues
Modified:
llvm/trunk/lib/Transforms/Scalar/NewGVN.cpp
Modified: llvm/trunk/lib/Transforms/Scalar/NewGVN.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Transforms/Scalar/NewGVN.cpp?rev=299684&r1=299683&r2=299684&view=diff
==============================================================================
--- llvm/trunk/lib/Transforms/Scalar/NewGVN.cpp (original)
+++ llvm/trunk/lib/Transforms/Scalar/NewGVN.cpp Thu Apr 6 13:52:55 2017
@@ -2948,27 +2948,21 @@ bool NewGVN::eliminateInstructions(Funct
// 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(Funct
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.
More information about the llvm-commits
mailing list