[llvm] d406c15 - [VPlan] Use VPInstructionWithType for casts in VPlan0. (NFC)
Florian Hahn via llvm-commits
llvm-commits at lists.llvm.org
Sun Nov 9 13:37:42 PST 2025
Author: Florian Hahn
Date: 2025-11-09T21:35:50Z
New Revision: d406c15fc8fc84efe8f7fd073afe64b21974e2c1
URL: https://github.com/llvm/llvm-project/commit/d406c15fc8fc84efe8f7fd073afe64b21974e2c1
DIFF: https://github.com/llvm/llvm-project/commit/d406c15fc8fc84efe8f7fd073afe64b21974e2c1.diff
LOG: [VPlan] Use VPInstructionWithType for casts in VPlan0. (NFC)
Use VPInstructionWithType for casts in VPlan0, to enable additional
analysis/transforms on VPlan0, and more accurate modeling in VPlan0.
Added:
Modified:
llvm/lib/Transforms/Vectorize/LoopVectorize.cpp
llvm/lib/Transforms/Vectorize/VPlanConstruction.cpp
Removed:
################################################################################
diff --git a/llvm/lib/Transforms/Vectorize/LoopVectorize.cpp b/llvm/lib/Transforms/Vectorize/LoopVectorize.cpp
index 666033b1fac62..45b5570261416 100644
--- a/llvm/lib/Transforms/Vectorize/LoopVectorize.cpp
+++ b/llvm/lib/Transforms/Vectorize/LoopVectorize.cpp
@@ -8157,9 +8157,10 @@ VPRecipeBase *VPRecipeBuilder::tryToCreateWidenRecipe(VPSingleDefRecipe *R,
return new VPWidenSelectRecipe(*cast<SelectInst>(Instr), R->operands());
if (Instruction::isCast(VPI->getOpcode())) {
+ auto *CastR = cast<VPInstructionWithType>(R);
auto *CI = cast<CastInst>(Instr);
return new VPWidenCastRecipe(CI->getOpcode(), VPI->getOperand(0),
- CI->getType(), *CI);
+ CastR->getResultType(), *CI);
}
return tryToWiden(VPI);
diff --git a/llvm/lib/Transforms/Vectorize/VPlanConstruction.cpp b/llvm/lib/Transforms/Vectorize/VPlanConstruction.cpp
index f405c40611fcb..663e31a499b01 100644
--- a/llvm/lib/Transforms/Vectorize/VPlanConstruction.cpp
+++ b/llvm/lib/Transforms/Vectorize/VPlanConstruction.cpp
@@ -20,6 +20,7 @@
#include "llvm/Analysis/LoopInfo.h"
#include "llvm/Analysis/LoopIterator.h"
#include "llvm/Analysis/ScalarEvolution.h"
+#include "llvm/IR/InstrTypes.h"
#include "llvm/IR/MDBuilder.h"
#define DEBUG_TYPE "vplan"
@@ -233,10 +234,15 @@ void PlainCFGBuilder::createVPInstructionsForVPBB(VPBasicBlock *VPBB,
for (Value *Op : Inst->operands())
VPOperands.push_back(getOrCreateVPOperand(Op));
- // Build VPInstruction for any arbitrary Instruction without specific
- // representation in VPlan.
- NewR = cast<VPInstruction>(
- VPIRBuilder.createNaryOp(Inst->getOpcode(), VPOperands, Inst));
+ if (auto *CI = dyn_cast<CastInst>(Inst)) {
+ NewR = VPIRBuilder.createScalarCast(CI->getOpcode(), VPOperands[0],
+ CI->getType(), CI->getDebugLoc());
+ NewR->setUnderlyingValue(CI);
+ } else {
+ // Build VPInstruction for any arbitrary Instruction without specific
+ // representation in VPlan.
+ NewR = VPIRBuilder.createNaryOp(Inst->getOpcode(), VPOperands, Inst);
+ }
}
IRDef2VPValue[Inst] = NewR;
More information about the llvm-commits
mailing list