Skip to content

Commit 18d3a58

Browse files
RKSimonmahesh-attarde
authored andcommitted
[X86] matchVPMADD52 - only use 512-bit MADD52 on AVX512IFMA targets (llvm#161011)
If we have a AVX512 target capable of AVXIFMA but not AVX512IFMA then we must split 512-bit (or larger) types to 256-bits Fixes llvm#160928
1 parent 78e522b commit 18d3a58

File tree

2 files changed

+392
-235
lines changed

2 files changed

+392
-235
lines changed

llvm/lib/Target/X86/X86ISelLowering.cpp

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4452,11 +4452,12 @@ static SDValue splitVectorIntBinary(SDValue Op, SelectionDAG &DAG,
44524452
template <typename F>
44534453
SDValue SplitOpsAndApply(SelectionDAG &DAG, const X86Subtarget &Subtarget,
44544454
const SDLoc &DL, EVT VT, ArrayRef<SDValue> Ops,
4455-
F Builder, bool CheckBWI = true) {
4455+
F Builder, bool CheckBWI = true,
4456+
bool AllowAVX512 = true) {
44564457
assert(Subtarget.hasSSE2() && "Target assumed to support at least SSE2");
44574458
unsigned NumSubs = 1;
44584459
if ((CheckBWI && Subtarget.useBWIRegs()) ||
4459-
(!CheckBWI && Subtarget.useAVX512Regs())) {
4460+
(!CheckBWI && AllowAVX512 && Subtarget.useAVX512Regs())) {
44604461
if (VT.getSizeInBits() > 512) {
44614462
NumSubs = VT.getSizeInBits() / 512;
44624463
assert((VT.getSizeInBits() % 512) == 0 && "Illegal vector size");
@@ -58076,7 +58077,8 @@ static SDValue matchVPMADD52(SDNode *N, SelectionDAG &DAG, const SDLoc &DL,
5807658077
};
5807758078

5807858079
return SplitOpsAndApply(DAG, Subtarget, DL, VT, {Acc, X, Y}, VPMADD52Builder,
58079-
/*CheckBWI*/ false);
58080+
/*CheckBWI*/ false,
58081+
/*AllowAVX512*/ Subtarget.hasIFMA());
5808058082
}
5808158083

5808258084
static SDValue combineAdd(SDNode *N, SelectionDAG &DAG,

0 commit comments

Comments
 (0)