[llvm] [LV][EVL] Support cast instruction with EVL-vectorization (PR #108351)

via llvm-commits llvm-commits at lists.llvm.org
Mon Dec 2 05:05:49 PST 2024


================
@@ -962,22 +962,35 @@ void VPWidenIntrinsicRecipe::execute(VPTransformState &State) {
 
   // Use vector version of the intrinsic.
   Module *M = State.Builder.GetInsertBlock()->getModule();
+  bool IsVPIntrinsic = VPIntrinsic::isVPIntrinsic(VectorIntrinsicID);
   Function *VectorF =
-      Intrinsic::getOrInsertDeclaration(M, VectorIntrinsicID, TysForDecl);
-  assert(VectorF && "Can't retrieve vector intrinsic.");
+      IsVPIntrinsic
+          ? VPIntrinsic::getOrInsertDeclarationForParams(M, VectorIntrinsicID,
+                                                         TysForDecl[0], Args)
+          : Intrinsic::getOrInsertDeclaration(M, VectorIntrinsicID, TysForDecl);
+  assert(VectorF &&
+         "Can't retrieve vector intrinsic or vector-predication intrinsics.");
 
-  auto *CI = cast_or_null<CallInst>(getUnderlyingValue());
   SmallVector<OperandBundleDef, 1> OpBundles;
-  if (CI)
-    CI->getOperandBundlesAsDefs(OpBundles);
+  if (!IsVPIntrinsic) {
+    if (auto *CI = cast_or_null<CallInst>(getUnderlyingValue()))
+      CI->getOperandBundlesAsDefs(OpBundles);
+  }
 
-  CallInst *V = State.Builder.CreateCall(VectorF, Args, OpBundles);
+  Instruction *V = State.Builder.CreateCall(VectorF, Args, OpBundles);
 
-  setFlags(V);
+  if (IsVPIntrinsic) {
+    // Currently vp-intrinsics only accept FMF flags. llvm.vp.uitofp will get
+    // Flags of OperationType::NonNegOp && OperationType::FPMathOp.
+    if (isa<FPMathOperator>(V) && VectorIntrinsicID != Intrinsic::vp_uitofp)
+      setFlags(V);
----------------
LiqinWeng wrote:

1. If we want to get the IR Flags, we need get the Instruction, which will get the correct OpType. `void setFlags(Instruction *I)`. But I didnt pass the Instruction on VPlanTransform 
2. uitofp has the nneg IR flags,  but llvm.vp.uitofp seems no this flag. I'm not sure if I understood something wrong.
3. How to handle vp instruction IR flags may need to be handled by a separate patch? Currently, it seems that VP Reductions does not handle IR Flags

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


More information about the llvm-commits mailing list