[llvm] [VectorCombine] Scalarize binop-like intrinsics (PR #138095)

Simon Pilgrim via llvm-commits llvm-commits at lists.llvm.org
Fri May 2 05:06:59 PDT 2025


================
@@ -1135,9 +1167,16 @@ bool VectorCombine::scalarizeBinopOrCmp(Instruction &I) {
     ScalarInst->copyIRFlags(&I);
 
   // Fold the vector constants in the original vectors into a new base vector.
-  Value *NewVecC =
-      IsCmp ? Builder.CreateCmp(Pred, VecC0, VecC1)
-            : Builder.CreateBinOp((Instruction::BinaryOps)Opcode, VecC0, VecC1);
+  Value *NewVecC;
+  if (isa<CmpInst>(I))
+    NewVecC = Builder.CreateCmp(Pred, VecC0, VecC1);
+  else if (isa<BinaryOperator>(I))
+    NewVecC = Builder.CreateBinOp((Instruction::BinaryOps)Opcode, VecC0, VecC1);
+  else if (auto *II = dyn_cast<IntrinsicInst>(&I))
+    NewVecC =
+        Builder.CreateIntrinsic(VecTy, II->getIntrinsicID(), {VecC0, VecC1});
+  else
+    llvm_unreachable("Unexpected instruction type");
----------------
RKSimon wrote:

```
else
    NewVecC = Builder.CreateIntrinsic(VecTy, cast<IntrinsicInst>(&I)->getIntrinsicID(), {VecC0, VecC1});
```

https://github.com/llvm/llvm-project/pull/138095


More information about the llvm-commits mailing list