[llvm-branch-commits] [llvm] [AMDGPU] Fold a constant add/sub into the sudot4/sudot8 accumulator (PR #225322)

Tim Gymnich via llvm-branch-commits llvm-branch-commits at lists.llvm.org
Tue Sep 22 03:16:22 PDT 2026


================
@@ -2087,6 +2087,32 @@ GCNTTIImpl::instCombineIntrinsic(InstCombiner &IC, IntrinsicInst &II) const {
     }
     return std::nullopt;
   }
+  case Intrinsic::amdgcn_sudot4:
+  case Intrinsic::amdgcn_sudot8: {
+    // Reassociating across a saturating accumulate is not valid.
+    if (!II.hasOneUse() || !match(II.getArgOperand(5), m_Zero()))
+      break;
+
+    const APInt *Acc;
+    if (!match(II.getArgOperand(4), m_APInt(Acc)))
+      break;
+
+    auto *AccumUser = dyn_cast<BinaryOperator>(II.user_back());
+    if (!AccumUser)
+      break;
+
+    const APInt *AccumDelta;
+    Constant *NewAcc;
+    if (match(AccumUser, m_c_Add(m_Specific(&II), m_APInt(AccumDelta))))
+      NewAcc = ConstantInt::get(II.getType(), *Acc + *AccumDelta);
+    else
+      break;
----------------
tgymnich wrote:

```suggestion
    if (!match(AccumUser, m_c_Add(m_Specific(&II), m_APInt(AccumDelta))))
      break;
      
    NewAcc = ConstantInt::get(II.getType(), *Acc + *AccumDelta);
```

https://github.com/llvm/llvm-project/pull/225322


More information about the llvm-branch-commits mailing list