summaryrefslogtreecommitdiffstats
path: root/llvm
diff options
context:
space:
mode:
authorDaniel Berlin <dberlin@dberlin.org>2017-04-06 18:52:55 +0000
committerDaniel Berlin <dberlin@dberlin.org>2017-04-06 18:52:55 +0000
commit08fe6e0f74ff2d5ffa110a2ecfb99a7036a244d5 (patch)
treef549b35dbbcdc4aa7bf30a8dd264c24bb517d9e1 /llvm
parent5845e0549e2794274eb3e07edb66f462692efbd8 (diff)
downloadbcm5719-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.cpp32
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.
OpenPOWER on IntegriCloud