[llvm] 9363658 - [InstCombiner] Make isFreeToInvert() and friends instance functions (NFC)
Nikita Popov via llvm-commits
llvm-commits at lists.llvm.org
Fri Dec 1 06:40:25 PST 2023
Author: Nikita Popov
Date: 2023-12-01T15:40:12+01:00
New Revision: 93636581d3589b3b986c0080a82de7fc0bbd01cf
URL: https://github.com/llvm/llvm-project/commit/93636581d3589b3b986c0080a82de7fc0bbd01cf
DIFF: https://github.com/llvm/llvm-project/commit/93636581d3589b3b986c0080a82de7fc0bbd01cf.diff
LOG: [InstCombiner] Make isFreeToInvert() and friends instance functions (NFC)
In order to use SQ inside of these. There doesn't seem to be any
strong need for these to be static.
Added:
Modified:
llvm/include/llvm/Transforms/InstCombine/InstCombiner.h
llvm/lib/Transforms/InstCombine/InstCombineAndOrXor.cpp
Removed:
################################################################################
diff --git a/llvm/include/llvm/Transforms/InstCombine/InstCombiner.h b/llvm/include/llvm/Transforms/InstCombine/InstCombiner.h
index e220d1ad4222ad0..e33afd20cfb2d51 100644
--- a/llvm/include/llvm/Transforms/InstCombine/InstCombiner.h
+++ b/llvm/include/llvm/Transforms/InstCombine/InstCombiner.h
@@ -240,18 +240,18 @@ class LLVM_LIBRARY_VISIBILITY InstCombiner {
/// dereferenceable).
/// If the inversion will consume instructions, `DoesConsume` will be set to
/// true. Otherwise it will be false.
- static Value *getFreelyInvertedImpl(Value *V, bool WillInvertAllUses,
+ Value *getFreelyInvertedImpl(Value *V, bool WillInvertAllUses,
BuilderTy *Builder, bool &DoesConsume,
unsigned Depth);
- static Value *getFreelyInverted(Value *V, bool WillInvertAllUses,
+ Value *getFreelyInverted(Value *V, bool WillInvertAllUses,
BuilderTy *Builder, bool &DoesConsume) {
DoesConsume = false;
return getFreelyInvertedImpl(V, WillInvertAllUses, Builder, DoesConsume,
/*Depth*/ 0);
}
- static Value *getFreelyInverted(Value *V, bool WillInvertAllUses,
+ Value *getFreelyInverted(Value *V, bool WillInvertAllUses,
BuilderTy *Builder) {
bool Unused;
return getFreelyInverted(V, WillInvertAllUses, Builder, Unused);
@@ -263,13 +263,13 @@ class LLVM_LIBRARY_VISIBILITY InstCombiner {
/// uses of V and only keep uses of ~V.
///
/// See also: canFreelyInvertAllUsersOf()
- static bool isFreeToInvert(Value *V, bool WillInvertAllUses,
+ bool isFreeToInvert(Value *V, bool WillInvertAllUses,
bool &DoesConsume) {
return getFreelyInverted(V, WillInvertAllUses, /*Builder*/ nullptr,
DoesConsume) != nullptr;
}
- static bool isFreeToInvert(Value *V, bool WillInvertAllUses) {
+ bool isFreeToInvert(Value *V, bool WillInvertAllUses) {
bool Unused;
return isFreeToInvert(V, WillInvertAllUses, Unused);
}
@@ -279,7 +279,7 @@ class LLVM_LIBRARY_VISIBILITY InstCombiner {
/// NOTE: for Instructions only!
///
/// See also: isFreeToInvert()
- static bool canFreelyInvertAllUsersOf(Instruction *V, Value *IgnoredUser) {
+ bool canFreelyInvertAllUsersOf(Instruction *V, Value *IgnoredUser) {
// Look at every user of V.
for (Use &U : V->uses()) {
if (U.getUser() == IgnoredUser)
diff --git a/llvm/lib/Transforms/InstCombine/InstCombineAndOrXor.cpp b/llvm/lib/Transforms/InstCombine/InstCombineAndOrXor.cpp
index 1ca6085e36de3b7..7379bdf93169ece 100644
--- a/llvm/lib/Transforms/InstCombine/InstCombineAndOrXor.cpp
+++ b/llvm/lib/Transforms/InstCombine/InstCombineAndOrXor.cpp
@@ -1610,7 +1610,7 @@ static Instruction *reassociateFCmps(BinaryOperator &BO,
/// (~A & ~B) == (~(A | B))
/// (~A | ~B) == (~(A & B))
static Instruction *matchDeMorgansLaws(BinaryOperator &I,
- InstCombiner::BuilderTy &Builder) {
+ InstCombiner &IC) {
const Instruction::BinaryOps Opcode = I.getOpcode();
assert((Opcode == Instruction::And || Opcode == Instruction::Or) &&
"Trying to match De Morgan's Laws with something other than and/or");
@@ -1623,10 +1623,10 @@ static Instruction *matchDeMorgansLaws(BinaryOperator &I,
Value *A, *B;
if (match(Op0, m_OneUse(m_Not(m_Value(A)))) &&
match(Op1, m_OneUse(m_Not(m_Value(B)))) &&
- !InstCombiner::isFreeToInvert(A, A->hasOneUse()) &&
- !InstCombiner::isFreeToInvert(B, B->hasOneUse())) {
+ !IC.isFreeToInvert(A, A->hasOneUse()) &&
+ !IC.isFreeToInvert(B, B->hasOneUse())) {
Value *AndOr =
- Builder.CreateBinOp(FlippedOpcode, A, B, I.getName() + ".demorgan");
+ IC.Builder.CreateBinOp(FlippedOpcode, A, B, I.getName() + ".demorgan");
return BinaryOperator::CreateNot(AndOr);
}
@@ -1638,8 +1638,8 @@ static Instruction *matchDeMorgansLaws(BinaryOperator &I,
Value *C;
if (match(Op0, m_OneUse(m_c_BinOp(Opcode, m_Value(A), m_Not(m_Value(B))))) &&
match(Op1, m_Not(m_Value(C)))) {
- Value *FlippedBO = Builder.CreateBinOp(FlippedOpcode, B, C);
- return BinaryOperator::Create(Opcode, A, Builder.CreateNot(FlippedBO));
+ Value *FlippedBO = IC.Builder.CreateBinOp(FlippedOpcode, B, C);
+ return BinaryOperator::Create(Opcode, A, IC.Builder.CreateNot(FlippedBO));
}
return nullptr;
@@ -2483,7 +2483,7 @@ Instruction *InstCombinerImpl::visitAnd(BinaryOperator &I) {
if (Instruction *FoldedLogic = foldBinOpIntoSelectOrPhi(I))
return FoldedLogic;
- if (Instruction *DeMorgan = matchDeMorgansLaws(I, Builder))
+ if (Instruction *DeMorgan = matchDeMorgansLaws(I, *this))
return DeMorgan;
{
@@ -3517,7 +3517,7 @@ Instruction *InstCombinerImpl::visitOr(BinaryOperator &I) {
if (match(Op0, m_And(m_Or(m_Specific(Op1), m_Value(C)), m_Value(A))))
return BinaryOperator::CreateOr(Op1, Builder.CreateAnd(A, C));
- if (Instruction *DeMorgan = matchDeMorgansLaws(I, Builder))
+ if (Instruction *DeMorgan = matchDeMorgansLaws(I, *this))
return DeMorgan;
// Canonicalize xor to the RHS.
@@ -4124,7 +4124,7 @@ static bool canFreelyInvert(InstCombiner &IC, Value *Op,
Instruction *IgnoredUser) {
auto *I = dyn_cast<Instruction>(Op);
return I && IC.isFreeToInvert(I, /*WillInvertAllUses=*/true) &&
- InstCombiner::canFreelyInvertAllUsersOf(I, IgnoredUser);
+ IC.canFreelyInvertAllUsersOf(I, IgnoredUser);
}
static Value *freelyInvert(InstCombinerImpl &IC, Value *Op,
More information about the llvm-commits
mailing list