nir/algebraic: distribute imul(iadd(a, b), c) when b and c are constants
This distributes imul(iadd(a, b), c) to iadd(imul(a, c), b * c) when both b and c are constants. This might allow some compiler backends to create more MADs. For ACO, this allows to combine more DS additions. fossilds-db (Vega10): Totals from 673 (0.49% of 136546) affected shaders: VGPRs: 44548 -> 44516 (-0.07%); split: -0.11%, +0.04% CodeSize: 8301552 -> 8286220 (-0.18%); split: -0.19%, +0.01% MaxWaves: 2731 -> 2735 (+0.15%); split: +0.26%, -0.11% Instrs: 1642684 -> 1638725 (-0.24%); split: -0.24%, +0.00% Cycles: 20846156 -> 20793444 (-0.25%); split: -0.25%, +0.00% VMEM: 108870 -> 108106 (-0.70%); split: +0.03%, -0.73% SMEM: 35718 -> 35674 (-0.12%); split: +0.22%, -0.34% VClause: 20603 -> 20622 (+0.09%); split: -0.01%, +0.10% SClause: 48527 -> 48539 (+0.02%) Copies: 156735 -> 156742 (+0.00%); split: -0.05%, +0.05% PreSGPRs: 43169 -> 43166 (-0.01%); split: -0.02%, +0.02% PreVGPRs: 41369 -> 41330 (-0.09%) shader-db results on Intel: Ice Lake total instructions in shared programs: 20027588 -> 20027446 (<.01%) instructions in affected programs: 71766 -> 71624 (-0.20%) helped: 70 HURT: 0 helped stats (abs) min: 1 max: 7 x̄: 2.03 x̃: 1 helped stats (rel) min: 0.10% max: 2.50% x̄: 0.29% x̃: 0.15% 95% mean confidence interval for instructions value: -2.42 -1.64 95% mean confidence interval for instructions %-change: -0.38% -0.20% Instructions are helped. total cycles in shared programs: 977525222 -> 977494323 (<.01%) cycles in affected programs: 8884593 -> 8853694 (-0.35%) helped: 56 HURT: 16 helped stats (abs) min: 2 max: 7852 x̄: 681.29 x̃: 400 helped stats (rel) min: <.01% max: 19.84% x̄: 2.79% x̃: 0.41% HURT stats (abs) min: 2 max: 1212 x̄: 453.31 x̃: 120 HURT stats (rel) min: 0.05% max: 1.09% x̄: 0.32% x̃: 0.11% 95% mean confidence interval for cycles value: -802.75 -55.56 95% mean confidence interval for cycles %-change: -3.19% -1.01% Cycles are helped. total sends in shared programs: 1032273 -> 1032272 (<.01%) sends in affected programs: 41 -> 40 (-2.44%) helped: 1 HURT: 0 Signed-off-by: Samuel Pitoiset <samuel.pitoiset@gmail.com> Reviewed-by: Eric Anholt <eric@anholt.net> Reviewed-by: Rhys Perry <pendingchaos02@gmail.com> Reviewed-by: Ian Romanick <ian.d.romanick@intel.com> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/7445>
This commit is contained in:

committed by
Marge Bot

parent
2fd5079442
commit
77d6fda0f5
@@ -302,6 +302,9 @@ optimizations.extend([
|
||||
# instruction or a constant offset field for in load / store instructions.
|
||||
(('ishl', ('iadd', a, '#b'), '#c'), ('iadd', ('ishl', a, c), ('ishl', b, c))),
|
||||
|
||||
# (a + #b) * #c
|
||||
(('imul', ('iadd(is_used_once)', a, '#b'), '#c'), ('iadd', ('imul', a, c), ('imul', b, c))),
|
||||
|
||||
# Comparison simplifications
|
||||
(('~inot', ('flt', a, b)), ('fge', a, b)),
|
||||
(('~inot', ('fge', a, b)), ('flt', a, b)),
|
||||
|
Reference in New Issue
Block a user