llvmorg-github-actions[bot] wrote:
<!--LLVM PR SUMMARY COMMENT--> @llvm/pr-subscribers-llvm-transforms Author: Harrison Hao (harrisonGPU) <details> <summary>Changes</summary> Replace sudot4 and sudot8 with their accumulator when either multiplicand is zero. For example: ``` sudot4(sign0, x, sign1, 0, acc, clamp) -> acc ``` --- <sub>Stack created with <a href="https://github.com/github/gh-stack">GitHub Stacks CLI</a> • <a href="https://gh.io/stacks-feedback">Give Feedback 💬</a></sub> --- Full diff: https://github.com/llvm/llvm-project/pull/226479.diff 2 Files Affected: - (modified) llvm/lib/Target/AMDGPU/AMDGPUInstCombineIntrinsic.cpp (+3) - (modified) llvm/test/Transforms/InstCombine/AMDGPU/llvm.amdgcn.sudot.ll (+2-4) ``````````diff diff --git a/llvm/lib/Target/AMDGPU/AMDGPUInstCombineIntrinsic.cpp b/llvm/lib/Target/AMDGPU/AMDGPUInstCombineIntrinsic.cpp index 0e81d503c5fd28..494c796b4b1645 100644 --- a/llvm/lib/Target/AMDGPU/AMDGPUInstCombineIntrinsic.cpp +++ b/llvm/lib/Target/AMDGPU/AMDGPUInstCombineIntrinsic.cpp @@ -2036,6 +2036,9 @@ GCNTTIImpl::instCombineIntrinsic(InstCombiner &IC, IntrinsicInst &II) const { return &II; } + 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 e99e6bbf00821f..8ce7f4c1933feb 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 `````````` </details> https://github.com/llvm/llvm-project/pull/226479 _______________________________________________ llvm-branch-commits mailing list [email protected] https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-branch-commits
