[llvm] Vectorize: Support fminimumnum and fmaximumnum (PR #131781)
YunQiang Su via llvm-commits
llvm-commits at lists.llvm.org
Mon Apr 14 03:34:43 PDT 2025
================
@@ -2776,6 +2776,27 @@ class BasicTTIImplBase : public TargetTransformInfoImplCRTPBase<T> {
}
return Cost;
}
+ case Intrinsic::maximumnum:
+ case Intrinsic::minimumnum: {
+ // On platform that support FMAXNUM_IEEE/FMINNUM_IEEE, we expand
+ // maximumnum/minimumnum to
+ // ARG0 = fcanonicalize ARG0, ARG0 // to quiet ARG0
+ // ARG1 = fcanonicalize ARG1, ARG1 // to quiet ARG1
+ // RESULT = MAXNUM_IEEE ARG0, ARG1 // or MINNUM_IEEE
+ // FIXME: In LangRef, we claimed FMAXNUM has the same behaviour of
+ // FMAXNUM_IEEE, while the backend hasn't migrated the code yet.
+ // Finally, we will remove FMAXNUM_IEEE and FMINNUM_IEEE.
+ int IeeeISD =
+ IID == Intrinsic::maximumnum ? ISD::FMAXNUM_IEEE : ISD::FMINNUM_IEEE;
+ if (TLI->isOperationLegalOrPromote(IeeeISD, LT.second)) {
+ IntrinsicCostAttributes FCanonicalizeAttrs(Intrinsic::canonicalize,
+ RetTy, Tys[0]);
+ InstructionCost FCanonicalizeCost =
+ thisT()->getIntrinsicInstrCost(FCanonicalizeAttrs, CostKind);
----------------
wzssyqa wrote:
I have some try of promote, in fact it cannot work. So I remove it.
The problem is the indexes of input and output are different when it's promote.
We need shuffle for this case while LLVM doesn't support it yet.
https://github.com/llvm/llvm-project/pull/131781
More information about the llvm-commits
mailing list