[llvm] [LV][VPlan] Add initial support for CSA vectorization (PR #121222)
Florian Hahn via llvm-commits
llvm-commits at lists.llvm.org
Sun Feb 9 14:13:40 PST 2025
================
@@ -706,6 +706,24 @@ Value *VPInstruction::generate(VPTransformState &State) {
Builder.getInt64Ty(), Mask, true, "first.active.lane");
return Builder.CreateExtractElement(Vec, Ctz, "early.exit.value");
}
+ case VPInstruction::ConditionalScalarAssignmentMaskPhi: {
+ BasicBlock *PreheaderBB = State.CFG.getPreheaderBBFor(this);
+ Value *InitMask = State.get(getOperand(0));
+ PHINode *MaskPhi =
+ State.Builder.CreatePHI(InitMask->getType(), 2, "csa.mask.phi");
+ MaskPhi->addIncoming(InitMask, PreheaderBB);
+ State.set(this, MaskPhi);
+ return MaskPhi;
+ }
+ case VPInstruction::ConditionalScalarAssignmentMaskSel: {
+ Value *WidenedCond = State.get(getOperand(0));
+ Value *MaskPhi = State.get(getOperand(1));
+ Value *AnyOf = State.get(getOperand(2), /*NeedsScalar=*/true);
+ Value *MaskSel =
+ State.Builder.CreateSelect(AnyOf, WidenedCond, MaskPhi, "csa.mask.sel");
+ cast<PHINode>(MaskPhi)->addIncoming(MaskSel, State.CFG.PrevBB);
----------------
fhahn wrote:
Why is this needed? A recipe's execution shouldn't modify outside the IR generated by the reicpe.
Can we instead update MaskPhi via the VPlan Def-use chains?
https://github.com/llvm/llvm-project/pull/121222
More information about the llvm-commits
mailing list