[InstCombine] Improve simplify demanded bits worklist management

This fixes a small mistake from D72944: The worklist add should
happen before assigning the new operand, not after.

In case an actual replacement happens, the old operand needs to
be added for DCE. If no actual replacement happens, then old/new
are the same, so it doesn't matter.

This drops one iteration from the annotated test case.
This commit is contained in:
Nikita Popov 2020-02-20 22:19:10 +01:00
parent 0e3e242209
commit b178555318
2 changed files with 3 additions and 3 deletions
llvm
lib/Transforms/InstCombine
test/Transforms/InstCombine

View File

@ -87,9 +87,9 @@ bool InstCombiner::SimplifyDemandedBits(Instruction *I, unsigned OpNo,
Value *NewVal = SimplifyDemandedUseBits(U.get(), DemandedMask, Known,
Depth, I);
if (!NewVal) return false;
U = NewVal;
// Add the simplified instruction back to the worklist.
// Add the old operand back to the worklist.
Worklist.addValue(U.get());
U = NewVal;
return true;
}

View File

@ -1,4 +1,4 @@
; RUN: opt -instcombine -S < %s | FileCheck %s
; RUN: opt -instcombine -instcombine-infinite-loop-threshold=3 -S < %s | FileCheck %s
; <rdar://problem/8606771>
define i32 @main(i32 %argc) {