[llvm] c42a5f1 - [TTI] Migrate getOperandInfo to OperandVaueInfo [nfc]
Philip Reames via llvm-commits
llvm-commits at lists.llvm.org
Mon Aug 22 10:19:14 PDT 2022
Author: Philip Reames
Date: 2022-08-22T10:19:02-07:00
New Revision: c42a5f1cc2856d3f4717ef34a731ae751b44dd93
URL: https://github.com/llvm/llvm-project/commit/c42a5f1cc2856d3f4717ef34a731ae751b44dd93
DIFF: https://github.com/llvm/llvm-project/commit/c42a5f1cc2856d3f4717ef34a731ae751b44dd93.diff
LOG: [TTI] Migrate getOperandInfo to OperandVaueInfo [nfc]
This is part of merging OperandValueKind and OperandValueProperties.
Added:
Modified:
llvm/include/llvm/Analysis/TargetTransformInfo.h
llvm/include/llvm/Analysis/TargetTransformInfoImpl.h
llvm/include/llvm/CodeGen/BasicTTIImpl.h
llvm/lib/Analysis/TargetTransformInfo.cpp
llvm/lib/Transforms/Vectorize/LoopVectorize.cpp
llvm/lib/Transforms/Vectorize/SLPVectorizer.cpp
Removed:
################################################################################
diff --git a/llvm/include/llvm/Analysis/TargetTransformInfo.h b/llvm/include/llvm/Analysis/TargetTransformInfo.h
index 1c61677dba0e..590ac70be75e 100644
--- a/llvm/include/llvm/Analysis/TargetTransformInfo.h
+++ b/llvm/include/llvm/Analysis/TargetTransformInfo.h
@@ -1041,10 +1041,7 @@ class TargetTransformInfo {
unsigned getMaxInterleaveFactor(unsigned VF) const;
/// Collect properties of V used in cost analysis, e.g. OP_PowerOf2.
- static OperandValueKind getOperandInfo(const Value *V,
- OperandValueProperties &OpProps);
- static OperandValueKind getOperandInfo(const Value *V);
-
+ static OperandValueInfo getOperandInfo(const Value *V);
/// This is an approximation of reciprocal throughput of a math/logic op.
/// A higher cost indicates less expected throughput.
diff --git a/llvm/include/llvm/Analysis/TargetTransformInfoImpl.h b/llvm/include/llvm/Analysis/TargetTransformInfoImpl.h
index 38deff576092..faf26cb3d4fd 100644
--- a/llvm/include/llvm/Analysis/TargetTransformInfoImpl.h
+++ b/llvm/include/llvm/Analysis/TargetTransformInfoImpl.h
@@ -1074,12 +1074,14 @@ class TargetTransformInfoImplCRTPBase : public TargetTransformInfoImplBase {
case Instruction::Or:
case Instruction::Xor:
case Instruction::FNeg: {
- TTI::OperandValueProperties Op1VP = TTI::OP_None;
+ const auto [Op1VK, Op1VP] = TTI::getOperandInfo(U->getOperand(0));
TTI::OperandValueProperties Op2VP = TTI::OP_None;
- TTI::OperandValueKind Op1VK =
- TTI::getOperandInfo(U->getOperand(0), Op1VP);
- TTI::OperandValueKind Op2VK = Opcode != Instruction::FNeg ?
- TTI::getOperandInfo(U->getOperand(1), Op2VP) : TTI::OK_AnyValue;
+ TTI::OperandValueKind Op2VK = TTI::OK_AnyValue;
+ if (Opcode != Instruction::FNeg) {
+ auto Info = TTI::getOperandInfo(U->getOperand(1));
+ Op2VK = Info.Kind;
+ Op2VP = Info.Properties;
+ }
SmallVector<const Value *, 2> Operands(U->operand_values());
return TargetTTI->getArithmeticInstrCost(Opcode, Ty, CostKind,
Op1VK, Op2VK,
@@ -1105,7 +1107,7 @@ class TargetTransformInfoImplCRTPBase : public TargetTransformInfoImplBase {
case Instruction::Store: {
auto *SI = cast<StoreInst>(U);
Type *ValTy = U->getOperand(0)->getType();
- TTI::OperandValueKind OpVK = TTI::getOperandInfo(U->getOperand(0));
+ TTI::OperandValueKind OpVK = TTI::getOperandInfo(U->getOperand(0)).Kind;
return TargetTTI->getMemoryOpCost(Opcode, ValTy, SI->getAlign(),
SI->getPointerAddressSpace(), CostKind,
OpVK, I);
@@ -1138,10 +1140,8 @@ class TargetTransformInfoImplCRTPBase : public TargetTransformInfoImplBase {
match(U, m_LogicalOr(m_Value(Op0), m_Value(Op1)))) {
// select x, y, false --> x & y
// select x, true, y --> x | y
- TTI::OperandValueProperties Op1VP = TTI::OP_None;
- TTI::OperandValueProperties Op2VP = TTI::OP_None;
- TTI::OperandValueKind Op1VK = TTI::getOperandInfo(Op0, Op1VP);
- TTI::OperandValueKind Op2VK = TTI::getOperandInfo(Op1, Op2VP);
+ const auto [Op1VK, Op1VP] = TTI::getOperandInfo(Op0);
+ const auto [Op2VK, Op2VP] = TTI::getOperandInfo(Op1);
assert(Op0->getType()->getScalarSizeInBits() == 1 &&
Op1->getType()->getScalarSizeInBits() == 1);
diff --git a/llvm/include/llvm/CodeGen/BasicTTIImpl.h b/llvm/include/llvm/CodeGen/BasicTTIImpl.h
index 3bd808ca8fd5..994c8a70971c 100644
--- a/llvm/include/llvm/CodeGen/BasicTTIImpl.h
+++ b/llvm/include/llvm/CodeGen/BasicTTIImpl.h
@@ -1565,13 +1565,13 @@ class BasicTTIImplBase : public TargetTransformInfoImplCRTPBase<T> {
const Value *X = Args[0];
const Value *Y = Args[1];
const Value *Z = Args[2];
- TTI::OperandValueProperties OpPropsX, OpPropsY, OpPropsZ, OpPropsBW;
- TTI::OperandValueKind OpKindX = TTI::getOperandInfo(X, OpPropsX);
- TTI::OperandValueKind OpKindY = TTI::getOperandInfo(Y, OpPropsY);
- TTI::OperandValueKind OpKindZ = TTI::getOperandInfo(Z, OpPropsZ);
+ const auto [OpKindX, OpPropsX] = TTI::getOperandInfo(X);
+ const auto [OpKindY, OpPropsY] = TTI::getOperandInfo(Y);
+ const auto [OpKindZ, OpPropsZ] = TTI::getOperandInfo(Z);
TTI::OperandValueKind OpKindBW = TTI::OK_UniformConstantValue;
- OpPropsBW = isPowerOf2_32(RetTy->getScalarSizeInBits()) ? TTI::OP_PowerOf2
- : TTI::OP_None;
+ TTI::OperandValueProperties OpPropsBW =
+ isPowerOf2_32(RetTy->getScalarSizeInBits()) ? TTI::OP_PowerOf2
+ : TTI::OP_None;
// fshl: (X << (Z % BW)) | (Y >> (BW - (Z % BW)))
// fshr: (X << (BW - (Z % BW))) | (Y >> (Z % BW))
InstructionCost Cost = 0;
diff --git a/llvm/lib/Analysis/TargetTransformInfo.cpp b/llvm/lib/Analysis/TargetTransformInfo.cpp
index 057562e613c7..85caa59a1341 100644
--- a/llvm/lib/Analysis/TargetTransformInfo.cpp
+++ b/llvm/lib/Analysis/TargetTransformInfo.cpp
@@ -716,16 +716,15 @@ unsigned TargetTransformInfo::getMaxInterleaveFactor(unsigned VF) const {
return TTIImpl->getMaxInterleaveFactor(VF);
}
-TargetTransformInfo::OperandValueKind
-TargetTransformInfo::getOperandInfo(const Value *V,
- OperandValueProperties &OpProps) {
+TargetTransformInfo::OperandValueInfo
+TargetTransformInfo::getOperandInfo(const Value *V) {
OperandValueKind OpInfo = OK_AnyValue;
- OpProps = OP_None;
+ OperandValueProperties OpProps = OP_None;
if (const auto *CI = dyn_cast<ConstantInt>(V)) {
if (CI->getValue().isPowerOf2())
OpProps = OP_PowerOf2;
- return OK_UniformConstantValue;
+ return {OK_UniformConstantValue, OpProps};
}
// A broadcast shuffle creates a uniform value.
@@ -763,13 +762,7 @@ TargetTransformInfo::getOperandInfo(const Value *V,
if (Splat && (isa<Argument>(Splat) || isa<GlobalValue>(Splat)))
OpInfo = OK_UniformValue;
- return OpInfo;
-}
-
-TargetTransformInfo::OperandValueKind
-TargetTransformInfo::getOperandInfo(const Value *V) {
- OperandValueProperties Discard = OP_None;
- return getOperandInfo(V, Discard);
+ return {OpInfo, OpProps};
}
InstructionCost TargetTransformInfo::getArithmeticInstrCost(
diff --git a/llvm/lib/Transforms/Vectorize/LoopVectorize.cpp b/llvm/lib/Transforms/Vectorize/LoopVectorize.cpp
index 23f63f36646c..9d860a7dcf89 100644
--- a/llvm/lib/Transforms/Vectorize/LoopVectorize.cpp
+++ b/llvm/lib/Transforms/Vectorize/LoopVectorize.cpp
@@ -6398,7 +6398,7 @@ LoopVectorizationCostModel::getConsecutiveMemOpCost(Instruction *I,
Cost += TTI.getMaskedMemoryOpCost(I->getOpcode(), VectorTy, Alignment, AS,
CostKind);
} else {
- TTI::OperandValueKind OpVK = TTI::getOperandInfo(I->getOperand(0));
+ TTI::OperandValueKind OpVK = TTI::getOperandInfo(I->getOperand(0)).Kind;
Cost += TTI.getMemoryOpCost(I->getOpcode(), VectorTy, Alignment, AS,
CostKind, OpVK, I);
}
@@ -6679,7 +6679,7 @@ LoopVectorizationCostModel::getMemoryInstructionCost(Instruction *I,
const Align Alignment = getLoadStoreAlignment(I);
unsigned AS = getLoadStoreAddressSpace(I);
- TTI::OperandValueKind OpVK = TTI::getOperandInfo(I->getOperand(0));
+ TTI::OperandValueKind OpVK = TTI::getOperandInfo(I->getOperand(0)).Kind;
return TTI.getAddressComputationCost(ValTy) +
TTI.getMemoryOpCost(I->getOpcode(), ValTy, Alignment, AS,
TTI::TCK_RecipThroughput, OpVK, I);
@@ -7111,17 +7111,15 @@ LoopVectorizationCostModel::getInstructionCost(Instruction *I, ElementCount VF,
// Certain instructions can be cheaper to vectorize if they have a constant
// second vector operand. One example of this are shifts on x86.
Value *Op2 = I->getOperand(1);
- TargetTransformInfo::OperandValueProperties Op2VP;
- TargetTransformInfo::OperandValueKind Op2VK =
- TTI.getOperandInfo(Op2, Op2VP);
- if (Op2VK == TargetTransformInfo::OK_AnyValue && Legal->isUniform(Op2))
- Op2VK = TargetTransformInfo::OK_UniformValue;
+ auto Op2Info = TTI.getOperandInfo(Op2);
+ if (Op2Info.Kind == TargetTransformInfo::OK_AnyValue && Legal->isUniform(Op2))
+ Op2Info.Kind = TargetTransformInfo::OK_UniformValue;
SmallVector<const Value *, 4> Operands(I->operand_values());
return TTI.getArithmeticInstrCost(
I->getOpcode(), VectorTy, CostKind,
{TargetTransformInfo::OK_AnyValue, TargetTransformInfo::OP_None},
- {Op2VK, Op2VP}, Operands, I);
+ Op2Info, Operands, I);
}
case Instruction::FNeg: {
return TTI.getArithmeticInstrCost(
@@ -7141,10 +7139,8 @@ LoopVectorizationCostModel::getInstructionCost(Instruction *I, ElementCount VF,
match(I, m_LogicalOr(m_Value(Op0), m_Value(Op1))))) {
// select x, y, false --> x & y
// select x, true, y --> x | y
- TTI::OperandValueProperties Op1VP = TTI::OP_None;
- TTI::OperandValueProperties Op2VP = TTI::OP_None;
- TTI::OperandValueKind Op1VK = TTI::getOperandInfo(Op0, Op1VP);
- TTI::OperandValueKind Op2VK = TTI::getOperandInfo(Op1, Op2VP);
+ const auto [Op1VK, Op1VP] = TTI::getOperandInfo(Op0);
+ const auto [Op2VK, Op2VP] = TTI::getOperandInfo(Op1);
assert(Op0->getType()->getScalarSizeInBits() == 1 &&
Op1->getType()->getScalarSizeInBits() == 1);
diff --git a/llvm/lib/Transforms/Vectorize/SLPVectorizer.cpp b/llvm/lib/Transforms/Vectorize/SLPVectorizer.cpp
index 7d623b0297b9..aedae332f079 100644
--- a/llvm/lib/Transforms/Vectorize/SLPVectorizer.cpp
+++ b/llvm/lib/Transforms/Vectorize/SLPVectorizer.cpp
@@ -6486,7 +6486,7 @@ InstructionCost BoUpSLP::getEntryCost(const TreeEntry *E,
auto *SI =
cast<StoreInst>(IsReorder ? VL[E->ReorderIndices.front()] : VL0);
Align Alignment = SI->getAlign();
- TTI::OperandValueKind OpVK = TTI::getOperandInfo(SI->getOperand(0));
+ TTI::OperandValueKind OpVK = TTI::getOperandInfo(SI->getOperand(0)).Kind;
InstructionCost ScalarEltCost = TTI->getMemoryOpCost(
Instruction::Store, ScalarTy, Alignment, 0, CostKind, OpVK, VL0);
InstructionCost ScalarStCost = VecTy->getNumElements() * ScalarEltCost;
More information about the llvm-commits
mailing list