[llvm] 6cb8584 - [AMDGPU] Fold sudot intrinsics with a zero multiplicand (#226479)
via llvm-commits
llvm-commits at lists.llvm.org
Wed Sep 30 07:54:35 PDT 2026
Author: Harrison Hao
Date: 2026-09-30T22:54:20+08:00
New Revision: 6cb8584a22334623c901e9bb9b2b80f750bd47e5
URL: https://github.com/llvm/llvm-project/commit/6cb8584a22334623c901e9bb9b2b80f750bd47e5
DIFF: https://github.com/llvm/llvm-project/commit/6cb8584a22334623c901e9bb9b2b80f750bd47e5.diff
LOG: [AMDGPU] Fold sudot intrinsics with a zero multiplicand (#226479)
Replace sudot4 and sudot8 with their accumulator when either
multiplicand is zero.
For example:
```
sudot4(sign0, x, sign1, 0, acc, clamp)
->
acc
```
Added:
Modified:
llvm/lib/Target/AMDGPU/AMDGPUInstCombineIntrinsic.cpp
llvm/test/Transforms/InstCombine/AMDGPU/llvm.amdgcn.sudot.ll
Removed:
################################################################################
diff --git a/llvm/lib/Target/AMDGPU/AMDGPUInstCombineIntrinsic.cpp b/llvm/lib/Target/AMDGPU/AMDGPUInstCombineIntrinsic.cpp
index f4b4eafd9f3dd..4936b16148ce4 100644
--- a/llvm/lib/Target/AMDGPU/AMDGPUInstCombineIntrinsic.cpp
+++ b/llvm/lib/Target/AMDGPU/AMDGPUInstCombineIntrinsic.cpp
@@ -2051,6 +2051,9 @@ GCNTTIImpl::instCombineIntrinsic(InstCombiner &IC, IntrinsicInst &II) const {
return ⅈ
}
+ if (match(Src1, m_Zero()))
+ return IC.replaceInstUsesWith(II, II.getArgOperand(4));
+
if (Instruction *I = foldConstantIntoDotAccumulator(II, 4, 5, IC))
return I;
diff --git a/llvm/test/Transforms/InstCombine/AMDGPU/llvm.amdgcn.sudot.ll b/llvm/test/Transforms/InstCombine/AMDGPU/llvm.amdgcn.sudot.ll
index e99e6bbf00821..8ce7f4c1933fe 100644
--- a/llvm/test/Transforms/InstCombine/AMDGPU/llvm.amdgcn.sudot.ll
+++ b/llvm/test/Transforms/InstCombine/AMDGPU/llvm.amdgcn.sudot.ll
@@ -36,8 +36,7 @@ define i32 @sudot4_const_lhs(i32 %b, i32 %acc) {
define i32 @sudot4_a_zero(i32 %b, i32 %acc) {
; CHECK-LABEL: define i32 @sudot4_a_zero(
; CHECK-SAME: i32 [[B:%.*]], i32 [[ACC:%.*]]) {
-; CHECK-NEXT: [[DOT:%.*]] = call i32 @llvm.amdgcn.sudot4(i1 false, i32 [[B]], i1 true, i32 0, i32 [[ACC]], i1 false)
-; CHECK-NEXT: ret i32 [[DOT]]
+; CHECK-NEXT: ret i32 [[ACC]]
;
%dot = call i32 @llvm.amdgcn.sudot4(i1 true, i32 0, i1 false, i32 %b, i32 %acc, i1 false)
ret i32 %dot
@@ -326,8 +325,7 @@ define i32 @sudot8_const_lhs(i32 %b, i32 %acc) {
define i32 @sudot8_a_zero(i32 %b, i32 %acc) {
; CHECK-LABEL: define i32 @sudot8_a_zero(
; CHECK-SAME: i32 [[B:%.*]], i32 [[ACC:%.*]]) {
-; CHECK-NEXT: [[DOT:%.*]] = call i32 @llvm.amdgcn.sudot8(i1 true, i32 [[B]], i1 false, i32 0, i32 [[ACC]], i1 false)
-; CHECK-NEXT: ret i32 [[DOT]]
+; CHECK-NEXT: ret i32 [[ACC]]
;
%dot = call i32 @llvm.amdgcn.sudot8(i1 false, i32 0, i1 true, i32 %b, i32 %acc, i1 false)
ret i32 %dot
More information about the llvm-commits
mailing list