[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