From 5a1d31a28490e85de440b55e2e257b61d32e85b9 Mon Sep 17 00:00:00 2001 From: Sanjay Patel Date: Tue, 5 Jan 2021 15:08:51 -0500 Subject: [PATCH] [SLP] use reduction kind's opcode for cost model queries; NFC This should be no-functional-change because the reduction kind opcodes are 1-for-1 mappings to the instructions we are matching as reductions. But we want to remove the need for the `OperationData` opcode field because that does not work when we start matching intrinsics (eg, maxnum) as reduction candidates. --- llvm/lib/Transforms/Vectorize/SLPVectorizer.cpp | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/llvm/lib/Transforms/Vectorize/SLPVectorizer.cpp b/llvm/lib/Transforms/Vectorize/SLPVectorizer.cpp index 390b71e..48f2a2d 100644 --- a/llvm/lib/Transforms/Vectorize/SLPVectorizer.cpp +++ b/llvm/lib/Transforms/Vectorize/SLPVectorizer.cpp @@ -7138,6 +7138,7 @@ private: auto *VecTy = FixedVectorType::get(ScalarTy, ReduxWidth); RecurKind Kind = RdxTreeInst.getKind(); + unsigned RdxOpcode = RecurrenceDescriptor::getOpcode(Kind); int SplittingRdxCost; switch (Kind) { case RecurKind::Add: @@ -7147,9 +7148,8 @@ private: case RecurKind::Xor: case RecurKind::FAdd: case RecurKind::FMul: - SplittingRdxCost = - TTI->getArithmeticReductionCost(RdxTreeInst.getOpcode(), VecTy, - /*IsPairwiseForm=*/false); + SplittingRdxCost = TTI->getArithmeticReductionCost( + RdxOpcode, VecTy, /*IsPairwiseForm=*/false); break; case RecurKind::SMax: case RecurKind::SMin: @@ -7175,15 +7175,14 @@ private: case RecurKind::Xor: case RecurKind::FAdd: case RecurKind::FMul: - ScalarReduxCost = - TTI->getArithmeticInstrCost(RdxTreeInst.getOpcode(), ScalarTy); + ScalarReduxCost = TTI->getArithmeticInstrCost(RdxOpcode, ScalarTy); break; case RecurKind::SMax: case RecurKind::SMin: case RecurKind::UMax: case RecurKind::UMin: ScalarReduxCost = - TTI->getCmpSelInstrCost(RdxTreeInst.getOpcode(), ScalarTy) + + TTI->getCmpSelInstrCost(RdxOpcode, ScalarTy) + TTI->getCmpSelInstrCost(Instruction::Select, ScalarTy, CmpInst::makeCmpResultType(ScalarTy)); break; -- 2.7.4