From 374cbc17a4b886f2b26008b0ffae2dc62645450f Mon Sep 17 00:00:00 2001 From: Georg Lehmann Date: Sun, 1 Mar 2026 13:16:43 +0100 Subject: [PATCH] nir_opt_algebraic: reassociate fadd into ffma where one factor is a constant This restriction doesn't really make sense, probably an accident. Foz-DB Navi48: Totals from 2290 (2.00% of 114655) affected shaders: MaxWaves: 57496 -> 57510 (+0.02%); split: +0.06%, -0.03% Instrs: 2817419 -> 2816209 (-0.04%); split: -0.12%, +0.08% CodeSize: 15218816 -> 15220576 (+0.01%); split: -0.09%, +0.10% VGPRs: 147456 -> 147384 (-0.05%); split: -0.07%, +0.02% Latency: 13757114 -> 13751833 (-0.04%); split: -0.13%, +0.09% InvThroughput: 2463343 -> 2462482 (-0.03%); split: -0.07%, +0.04% VClause: 40137 -> 40153 (+0.04%); split: -0.07%, +0.11% SClause: 57351 -> 57385 (+0.06%); split: -0.12%, +0.18% Copies: 135482 -> 136258 (+0.57%); split: -0.22%, +0.79% Branches: 30886 -> 30894 (+0.03%) PreSGPRs: 113470 -> 113462 (-0.01%); split: -0.03%, +0.02% PreVGPRs: 117554 -> 117591 (+0.03%); split: -0.01%, +0.04% VALU: 1682734 -> 1681557 (-0.07%); split: -0.10%, +0.03% SALU: 390685 -> 391301 (+0.16%); split: -0.07%, +0.22% VOPD: 6159 -> 6254 (+1.54%); split: +1.72%, -0.18% Reviewed-by: Alyssa Rosenzweig Part-of: --- src/compiler/nir/nir_opt_algebraic.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/compiler/nir/nir_opt_algebraic.py b/src/compiler/nir/nir_opt_algebraic.py index 6907303dd0f..ce4e760408f 100644 --- a/src/compiler/nir/nir_opt_algebraic.py +++ b/src/compiler/nir/nir_opt_algebraic.py @@ -2351,10 +2351,10 @@ optimizations.extend([ (('imul', '#a', ('imul', 'b(is_not_const)', '#c')), ('imul', ('imul', a, c), b)), (('~fadd', '#a', ('fadd', 'b(is_not_const)', '#c')), ('fadd', ('fadd', a, c), b)), (('~fadd', '#a', ('fneg', ('fadd', 'b(is_not_const)', '#c'))), ('fadd', ('fadd', a, ('fneg', c)), ('fneg', b))), - (('~fadd', '#a', ('ffma', 'b(is_not_const)', 'c(is_not_const)', '#d')), ('ffma', b, c, ('fadd', a, d))), - (('~fadd', '#a', ('fneg', ('ffma', 'b(is_not_const)', 'c(is_not_const)', '#d'))), ('ffma', ('fneg', b), c, ('fadd', a, ('fneg', d)))), - (('~fadd', '#a', ('ffmaz', 'b(is_not_const)', 'c(is_not_const)', '#d')), ('ffmaz', b, c, ('fadd', a, d))), - (('~fadd', '#a', ('fneg', ('ffmaz', 'b(is_not_const)', 'c(is_not_const)', '#d'))), ('ffmaz', ('fneg', b), c, ('fadd', a, ('fneg', d)))), + (('~fadd', '#a', ('ffma', 'b(is_not_const)', c, '#d')), ('ffma', b, c, ('fadd', a, d))), + (('~fadd', '#a', ('fneg', ('ffma', 'b(is_not_const)', c, '#d'))), ('ffma', ('fneg', b), c, ('fadd', a, ('fneg', d)))), + (('~fadd', '#a', ('ffmaz', 'b(is_not_const)', c, '#d')), ('ffmaz', b, c, ('fadd', a, d))), + (('~fadd', '#a', ('fneg', ('ffmaz', 'b(is_not_const)', c, '#d'))), ('ffmaz', ('fneg', b), c, ('fadd', a, ('fneg', d)))), (('iadd', '#a', ('iadd', 'b(is_not_const)', '#c')), ('iadd', ('iadd', a, c), b)), (('iand', '#a', ('iand', 'b(is_not_const)', '#c')), ('iand', ('iand', a, c), b)), (('ior', '#a', ('ior', 'b(is_not_const)', '#c')), ('ior', ('ior', a, c), b)),