[llvm] bb86c5d - [VPlan] Use inferScalarType in VPInstruction::ResumePhi codegen (NFC).
Florian Hahn via llvm-commits
llvm-commits at lists.llvm.org
Sat Dec 21 07:55:43 PST 2024
Author: Florian Hahn
Date: 2024-12-21T15:55:21Z
New Revision: bb86c5dd4d32c42183ed27a1ff7b34b1201215c4
URL: https://github.com/llvm/llvm-project/commit/bb86c5dd4d32c42183ed27a1ff7b34b1201215c4
DIFF: https://github.com/llvm/llvm-project/commit/bb86c5dd4d32c42183ed27a1ff7b34b1201215c4.diff
LOG: [VPlan] Use inferScalarType in VPInstruction::ResumePhi codegen (NFC).
Use VPlan-based type analysis to retrieve type of phi node. Also adds
missing type inference for ResumePhi and ComputeReductionResult opcodes.
Added:
Modified:
llvm/lib/Transforms/Vectorize/VPlanAnalysis.cpp
llvm/lib/Transforms/Vectorize/VPlanRecipes.cpp
Removed:
################################################################################
diff --git a/llvm/lib/Transforms/Vectorize/VPlanAnalysis.cpp b/llvm/lib/Transforms/Vectorize/VPlanAnalysis.cpp
index 0d981ff5826ed8..35497a7431f766 100644
--- a/llvm/lib/Transforms/Vectorize/VPlanAnalysis.cpp
+++ b/llvm/lib/Transforms/Vectorize/VPlanAnalysis.cpp
@@ -61,10 +61,16 @@ Type *VPTypeAnalysis::inferScalarTypeForRecipe(const VPInstruction *R) {
case Instruction::ICmp:
case VPInstruction::ActiveLaneMask:
return inferScalarType(R->getOperand(1));
+ case VPInstruction::ComputeReductionResult: {
+ auto *PhiR = cast<VPReductionPHIRecipe>(R->getOperand(0));
+ auto *OrigPhi = cast<PHINode>(PhiR->getUnderlyingValue());
+ return OrigPhi->getType();
+ }
case VPInstruction::ExplicitVectorLength:
return Type::getIntNTy(Ctx, 32);
case VPInstruction::FirstOrderRecurrenceSplice:
case VPInstruction::Not:
+ case VPInstruction::ResumePhi:
return SetResultTyFromOp();
case VPInstruction::ExtractFromEnd: {
Type *BaseTy = inferScalarType(R->getOperand(0));
diff --git a/llvm/lib/Transforms/Vectorize/VPlanRecipes.cpp b/llvm/lib/Transforms/Vectorize/VPlanRecipes.cpp
index cda90d70e5c8da..2f9ff3e4204336 100644
--- a/llvm/lib/Transforms/Vectorize/VPlanRecipes.cpp
+++ b/llvm/lib/Transforms/Vectorize/VPlanRecipes.cpp
@@ -629,7 +629,7 @@ Value *VPInstruction::generate(VPTransformState &State) {
Value *IncomingFromOtherPreds =
State.get(getOperand(1), /* IsScalar */ true);
auto *NewPhi =
- Builder.CreatePHI(IncomingFromOtherPreds->getType(), 2, Name);
+ Builder.CreatePHI(State.TypeAnalysis.inferScalarType(this), 2, Name);
BasicBlock *VPlanPred =
State.CFG
.VPBB2IRBB[cast<VPBasicBlock>(getParent()->getPredecessors()[0])];
More information about the llvm-commits
mailing list