[llvm] [VPlan] Use llvm.masked.{u, s}{div, rem} for predicated division (PR #191377)
Florian Hahn via llvm-commits
llvm-commits at lists.llvm.org
Tue Apr 28 02:03:48 PDT 2026
================
@@ -6700,28 +6705,21 @@ bool VPRecipeBuilder::shouldWiden(Instruction *I, VFRange &Range) const {
Range);
}
-VPWidenRecipe *VPRecipeBuilder::tryToWiden(VPInstruction *VPI) {
+VPRecipeWithIRFlags *VPRecipeBuilder::tryToWiden(VPInstruction *VPI) {
auto *I = VPI->getUnderlyingInstr();
switch (VPI->getOpcode()) {
default:
return nullptr;
case Instruction::SDiv:
case Instruction::UDiv:
case Instruction::SRem:
- case Instruction::URem: {
- // If not provably safe, use a select to form a safe divisor before widening the
- // div/rem operation itself. Otherwise fall through to general handling below.
- if (CM.isPredicatedInst(I)) {
- SmallVector<VPValue *> Ops(VPI->operandsWithoutMask());
- VPValue *Mask = VPI->getMask();
- VPValue *One = Plan.getConstantInt(I->getType(), 1u);
- auto *SafeRHS =
- Builder.createSelect(Mask, Ops[1], One, VPI->getDebugLoc());
- Ops[1] = SafeRHS;
- return new VPWidenRecipe(*I, Ops, *VPI, *VPI, VPI->getDebugLoc());
----------------
fhahn wrote:
One thing we lose with the intrinsics is things like the `exact` flag. I don't think there anything we can do about that, but it would probably be good to have a test for that?
https://github.com/llvm/llvm-project/pull/191377
More information about the llvm-commits
mailing list