Skip to content

Commit fe9e209

Browse files
wzssyqaYour Name
andauthored
Vectorize: Support fminimumnum and fmaximumnum (#131781)
Support auto-vectorize for fminimum_num and fmaximum_num. For ARM64 with SVE, scalable vector cannot support yet. --------- Co-authored-by: Your Name <[email protected]>
1 parent 07fe9c6 commit fe9e209

File tree

6 files changed

+639
-346
lines changed

6 files changed

+639
-346
lines changed

llvm/include/llvm/CodeGen/BasicTTIImpl.h

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2776,6 +2776,27 @@ class BasicTTIImplBase : public TargetTransformInfoImplCRTPBase<T> {
27762776
}
27772777
return Cost;
27782778
}
2779+
case Intrinsic::maximumnum:
2780+
case Intrinsic::minimumnum: {
2781+
// On platform that support FMAXNUM_IEEE/FMINNUM_IEEE, we expand
2782+
// maximumnum/minimumnum to
2783+
// ARG0 = fcanonicalize ARG0, ARG0 // to quiet ARG0
2784+
// ARG1 = fcanonicalize ARG1, ARG1 // to quiet ARG1
2785+
// RESULT = MAXNUM_IEEE ARG0, ARG1 // or MINNUM_IEEE
2786+
// FIXME: In LangRef, we claimed FMAXNUM has the same behaviour of
2787+
// FMAXNUM_IEEE, while the backend hasn't migrated the code yet.
2788+
// Finally, we will remove FMAXNUM_IEEE and FMINNUM_IEEE.
2789+
int IeeeISD =
2790+
IID == Intrinsic::maximumnum ? ISD::FMAXNUM_IEEE : ISD::FMINNUM_IEEE;
2791+
if (TLI->isOperationLegal(IeeeISD, LT.second)) {
2792+
IntrinsicCostAttributes FCanonicalizeAttrs(Intrinsic::canonicalize,
2793+
RetTy, Tys[0]);
2794+
InstructionCost FCanonicalizeCost =
2795+
thisT()->getIntrinsicInstrCost(FCanonicalizeAttrs, CostKind);
2796+
return LT.first + FCanonicalizeCost * 2;
2797+
}
2798+
break;
2799+
}
27792800
default:
27802801
break;
27812802
}

llvm/lib/Analysis/VectorUtils.cpp

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -89,6 +89,8 @@ bool llvm::isTriviallyVectorizable(Intrinsic::ID ID) {
8989
case Intrinsic::maxnum:
9090
case Intrinsic::minimum:
9191
case Intrinsic::maximum:
92+
case Intrinsic::minimumnum:
93+
case Intrinsic::maximumnum:
9294
case Intrinsic::modf:
9395
case Intrinsic::copysign:
9496
case Intrinsic::floor:

0 commit comments

Comments
 (0)