[llvm] [X86] combineAdd - remove unnecessary add(a,concat(vpmaddwd(x,y),vpmaddwd(z,w))) -> vpdpwssd(a,concat(x,z),concat(y,w)) fold (PR #209838)
Simon Pilgrim via llvm-commits
llvm-commits at lists.llvm.org
Thu Jul 16 06:28:13 PDT 2026
- Previous message: [llvm] [X86] combineAdd - remove unnecessary add(a,concat(vpmaddwd(x,y),vpmaddwd(z,w))) -> vpdpwssd(a,concat(x,z),concat(y,w)) fold (PR #209838)
- Next message: [llvm] [X86] combineAdd - remove unnecessary add(a,concat(vpmaddwd(x,y),vpmaddwd(z,w))) -> vpdpwssd(a,concat(x,z),concat(y,w)) fold (PR #209838)
- Messages sorted by:
[ date ]
[ thread ]
[ subject ]
[ author ]
https://github.com/RKSimon updated https://github.com/llvm/llvm-project/pull/209838
>From 77b2141cd171afd1bc25fef17303c82a2c2bf258 Mon Sep 17 00:00:00 2001
From: Simon Pilgrim <llvm-dev at redking.me.uk>
Date: Wed, 15 Jul 2026 18:17:17 +0100
Subject: [PATCH] [X86] combineAdd - remove unnecessary
add(a,concat(vpmaddwd(x,y),vpmaddwd(z,w))) ->
vpdpwssd(a,concat(x,z),concat(y,w)) fold
We already handle vpmaddwd concatenation in combineConcatVectorOps - but 512-bit vpmaddwd is only available on BWI targets, which was missing from the tests
Technically if there's a target that has AVX512VNNI but not BWI, then this fold would be useful, but there's no such target and there's a limit to "what if" optimisations we really need.
A small attempt at cleaning out some not very useful code from X86ISelLowering.cpp - I'm intending to do a lot more of this for 24.x / #143088
---
llvm/lib/Target/X86/X86ISelLowering.cpp | 16 ----------------
llvm/test/CodeGen/X86/vpdpwssd.ll | 4 ++--
2 files changed, 2 insertions(+), 18 deletions(-)
diff --git a/llvm/lib/Target/X86/X86ISelLowering.cpp b/llvm/lib/Target/X86/X86ISelLowering.cpp
index bb4b13e4feca4..97e783c09f0f2 100644
--- a/llvm/lib/Target/X86/X86ISelLowering.cpp
+++ b/llvm/lib/Target/X86/X86ISelLowering.cpp
@@ -59798,22 +59798,6 @@ static SDValue combineAdd(SDNode *N, SelectionDAG &DAG,
}
}
- // Peephole for 512-bit VPDPBSSD on non-VLX targets.
- // TODO: Should this be part of matchPMADDWD/matchPMADDWD_2?
- if (Subtarget.hasVNNI() && Subtarget.useAVX512Regs() && VT == MVT::v16i32) {
- SDValue Accum, Lo0, Lo1, Hi0, Hi1;
- if (sd_match(N, m_Add(m_Value(Accum),
- m_Node(ISD::CONCAT_VECTORS,
- m_BinOp(X86ISD::VPMADDWD, m_Value(Lo0),
- m_Value(Lo1)),
- m_BinOp(X86ISD::VPMADDWD, m_Value(Hi0),
- m_Value(Hi1)))))) {
- return DAG.getNode(X86ISD::VPDPWSSD, DL, VT, Accum,
- concatSubVectors(Lo0, Hi0, DAG, DL),
- concatSubVectors(Lo1, Hi1, DAG, DL));
- }
- }
-
// Fold ADD(ADC(Y,0,W),X) -> ADC(X,Y,W)
if (Op0.getOpcode() == X86ISD::ADC && Op0->hasOneUse() &&
X86::isZeroNode(Op0.getOperand(1))) {
diff --git a/llvm/test/CodeGen/X86/vpdpwssd.ll b/llvm/test/CodeGen/X86/vpdpwssd.ll
index ea97800505bc2..69a13e4555928 100644
--- a/llvm/test/CodeGen/X86/vpdpwssd.ll
+++ b/llvm/test/CodeGen/X86/vpdpwssd.ll
@@ -2,8 +2,8 @@
; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mcpu=znver4 | FileCheck %s --check-prefixes=CHECK,AVX512VL-VNNI
; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mcpu=znver5 | FileCheck %s --check-prefixes=CHECK,AVX-VNNI
; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mcpu=znver6 | FileCheck %s --check-prefixes=CHECK,AVX-VNNI
-; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+avx512vnni,+fast-dpwssd | FileCheck %s --check-prefixes=CHECK,AVX512-VNNI
-; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+avx512vnni,+avx512vl,+fast-dpwssd | FileCheck %s --check-prefixes=CHECK,AVX512VL-VNNI
+; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+avx512vnni,+avx512bw,+fast-dpwssd | FileCheck %s --check-prefixes=CHECK,AVX512-VNNI
+; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+avx512vnni,+avx512bw,+avx512vl,+fast-dpwssd | FileCheck %s --check-prefixes=CHECK,AVX512VL-VNNI
define <16 x i32> @vpdpwssd_test(<16 x i32> %0, <16 x i32> %1, <16 x i32> %2) {
; CHECK-LABEL: vpdpwssd_test:
- Previous message: [llvm] [X86] combineAdd - remove unnecessary add(a,concat(vpmaddwd(x,y),vpmaddwd(z,w))) -> vpdpwssd(a,concat(x,z),concat(y,w)) fold (PR #209838)
- Next message: [llvm] [X86] combineAdd - remove unnecessary add(a,concat(vpmaddwd(x,y),vpmaddwd(z,w))) -> vpdpwssd(a,concat(x,z),concat(y,w)) fold (PR #209838)
- Messages sorted by:
[ date ]
[ thread ]
[ subject ]
[ author ]
More information about the llvm-commits
mailing list