[llvm] 2938f9b - [InstCombine] Fix worklist management in select value equiv fold (NFCI)
Nikita Popov via llvm-commits
llvm-commits at lists.llvm.org
Tue May 23 07:38:06 PDT 2023
Author: Nikita Popov
Date: 2023-05-23T16:37:56+02:00
New Revision: 2938f9b46f0de8aec89b57eb1cd343745cfeb161
URL: https://github.com/llvm/llvm-project/commit/2938f9b46f0de8aec89b57eb1cd343745cfeb161
DIFF: https://github.com/llvm/llvm-project/commit/2938f9b46f0de8aec89b57eb1cd343745cfeb161.diff
LOG: [InstCombine] Fix worklist management in select value equiv fold (NFCI)
Requeue the modified instruction.
This should be NFC apart from worklist order effects.
Added:
Modified:
llvm/lib/Transforms/InstCombine/InstCombineInternal.h
llvm/lib/Transforms/InstCombine/InstCombineSelect.cpp
llvm/test/Transforms/InstCombine/select-binop-cmp.ll
Removed:
################################################################################
diff --git a/llvm/lib/Transforms/InstCombine/InstCombineInternal.h b/llvm/lib/Transforms/InstCombine/InstCombineInternal.h
index fcf777d0b31e..2486be77ebab 100644
--- a/llvm/lib/Transforms/InstCombine/InstCombineInternal.h
+++ b/llvm/lib/Transforms/InstCombine/InstCombineInternal.h
@@ -636,6 +636,8 @@ class LLVM_LIBRARY_VISIBILITY InstCombinerImpl final
SelectPatternFlavor SPF2, Value *C);
Instruction *foldSelectInstWithICmp(SelectInst &SI, ICmpInst *ICI);
Instruction *foldSelectValueEquivalence(SelectInst &SI, ICmpInst &ICI);
+ bool replaceInInstruction(Value *V, Value *Old, Value *New,
+ unsigned Depth = 0);
Value *insertRangeTest(Value *V, const APInt &Lo, const APInt &Hi,
bool isSigned, bool Inside);
diff --git a/llvm/lib/Transforms/InstCombine/InstCombineSelect.cpp b/llvm/lib/Transforms/InstCombine/InstCombineSelect.cpp
index ca75fcfaee3a..1b2930433809 100644
--- a/llvm/lib/Transforms/InstCombine/InstCombineSelect.cpp
+++ b/llvm/lib/Transforms/InstCombine/InstCombineSelect.cpp
@@ -1238,8 +1238,8 @@ static Instruction *canonicalizeSPF(SelectInst &Sel, ICmpInst &Cmp,
return nullptr;
}
-static bool replaceInInstruction(Value *V, Value *Old, Value *New,
- InstCombiner &IC, unsigned Depth = 0) {
+bool InstCombinerImpl::replaceInInstruction(Value *V, Value *Old, Value *New,
+ unsigned Depth) {
// Conservatively limit replacement to two instructions upwards.
if (Depth == 2)
return false;
@@ -1251,10 +1251,11 @@ static bool replaceInInstruction(Value *V, Value *Old, Value *New,
bool Changed = false;
for (Use &U : I->operands()) {
if (U == Old) {
- IC.replaceUse(U, New);
+ replaceUse(U, New);
+ Worklist.add(I);
Changed = true;
} else {
- Changed |= replaceInInstruction(U, Old, New, IC, Depth + 1);
+ Changed |= replaceInInstruction(U, Old, New, Depth + 1);
}
}
return Changed;
@@ -1310,7 +1311,7 @@ Instruction *InstCombinerImpl::foldSelectValueEquivalence(SelectInst &Sel,
// FIXME: Support vectors.
if (match(CmpRHS, m_ImmConstant()) && !match(CmpLHS, m_ImmConstant()) &&
!Cmp.getType()->isVectorTy())
- if (replaceInInstruction(TrueVal, CmpLHS, CmpRHS, *this))
+ if (replaceInInstruction(TrueVal, CmpLHS, CmpRHS))
return &Sel;
}
if (TrueVal != CmpRHS &&
diff --git a/llvm/test/Transforms/InstCombine/select-binop-cmp.ll b/llvm/test/Transforms/InstCombine/select-binop-cmp.ll
index 8a20b09c2990..52248928e240 100644
--- a/llvm/test/Transforms/InstCombine/select-binop-cmp.ll
+++ b/llvm/test/Transforms/InstCombine/select-binop-cmp.ll
@@ -1,5 +1,5 @@
; NOTE: Assertions have been autogenerated by utils/update_test_checks.py
-; RUN: opt < %s -passes=instcombine -S | FileCheck %s
+; RUN: opt < %s -passes=instcombine -instcombine-infinite-loop-threshold=2 -S | FileCheck %s
declare void @use(<2 x i1>)
declare void @use2(i1)
More information about the llvm-commits
mailing list