[llvm] [AMDGPU] Extend max3/min3 tree-reduction combine to cover ternary chains (PR #194845)

Dmitry Sidorov via llvm-commits llvm-commits at lists.llvm.org
Wed Apr 29 17:49:47 PDT 2026


================
@@ -16012,21 +16012,26 @@ SDValue SITargetLowering::performMinMaxCombine(SDNode *N,
 
   if (supportsMin3Max3(*Subtarget, Opc, VT)) {
     auto IsTreeWithCombinableChildren = [Opc](SDValue Op) {
-      return Op.getOperand(0).getOpcode() == Opc &&
-             Op.getOperand(1).getOpcode() == Opc &&
-             (Op.getOperand(0).hasOneUse() || Op.getOperand(1).hasOneUse());
+      return (Op.getOperand(0).getOpcode() == Opc &&
+              Op.getOperand(0).hasOneUse()) ||
+             (Op.getOperand(1).getOpcode() == Opc &&
+              Op.getOperand(1).hasOneUse());
     };
 
+    bool TreeCombineApplies = Op0.getOpcode() == Opc && Op0.hasOneUse() &&
+                              Op1.getOpcode() == Opc && Op1.hasOneUse();
+    bool TreeCombineDeferred =
+        TreeCombineApplies && (IsTreeWithCombinableChildren(Op0) ||
+                               IsTreeWithCombinableChildren(Op1));
----------------
MrSidims wrote:

nit:
```suggestion
bool HasCombinableTreeChild =
    IsTreeWithCombinableChildren(Op0) || IsTreeWithCombinableChildren(Op1);
```
not a strong request, leave it as you like, I just had troubles parsing what happens next under ifs.

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


More information about the llvm-commits mailing list