nir/algebraic: distribute fmul(fadd(a, b), c) when b and c are constants

This allows for more MAD/FMA instructions to be created.

fossil-db (Sienna Cichlid):
Totals from 50134 (33.46% of 149839) affected shaders:
VGPRs: 2436536 -> 2436000 (-0.02%); split: -0.05%, +0.03%
SpillSGPRs: 13136 -> 13135 (-0.01%); split: -0.02%, +0.02%
CodeSize: 206621424 -> 206278292 (-0.17%); split: -0.23%, +0.07%
MaxWaves: 1116804 -> 1117448 (+0.06%); split: +0.07%, -0.01%
Instrs: 38977460 -> 38862886 (-0.29%); split: -0.33%, +0.04%
Latency: 832425389 -> 827432260 (-0.60%); split: -0.63%, +0.03%
InvThroughput: 184193457 -> 183563350 (-0.34%); split: -0.37%, +0.03%

Signed-off-by: Rhys Perry <pendingchaos02@gmail.com>
Reviewed-by: Samuel Pitoiset <samuel.pitoiset@gmail.com>
Reviewed-by: Ian Romanick <ian.d.romanick@intel.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/7458>
This commit is contained in:
Rhys Perry 2020-11-05 13:18:08 +00:00 committed by Marge Bot
parent 63cc1fe71f
commit a1af902531
6 changed files with 32 additions and 30 deletions

View File

@ -445,6 +445,8 @@ optimizations.extend([
# (a + #b) * #c => (a * #c) + (#b * #c)
(('imul', ('iadd(is_used_once)', a, '#b'), '#c'), ('iadd', ('imul', a, c), ('imul', b, c))),
(('~fmul', ('fadd(is_used_once)', a, '#b'), '#c'), ('fadd', ('fmul', a, c), ('fmul', b, c)),
'!options->avoid_ternary_with_two_constants'),
# ((a + #b) + c) * #d => ((a + c) * #d) + (#b * #d)
(('imul', ('iadd(is_used_once)', ('iadd(is_used_once)', a, '#b'), c), '#d'),

View File

@ -45,9 +45,9 @@ traces:
# checksum: 4b707f385256b380c936186db8c251cb
# 1 minute
- device: freedreno-a530
checksum: a71d62bb2c0fabeca41468628777b441
checksum: 130dbeac42683b46fed4b268c5aad984
- device: freedreno-a630
checksum: 339dce29ae08569652438116829510c7
checksum: 139861e52f9425b4adb7c0b90b885f91
- path: xonotic/xonotic-keybench-high.trace
expectations:
# Skipped since it's long on a530.
@ -97,9 +97,9 @@ traces:
# - device: freedreno-a306
# checksum: bd6e158327d68e69ecf5edfacc368a7b
- device: freedreno-a530
checksum: 1b72313340c37a96acd82e3332513a3e
checksum: ccecf1479c9dd784ebfb4bbf19724640
- device: freedreno-a630
checksum: eea608db257a1caa21517f0b13807952
checksum: 4c1b94f65eaf1ae16b8465350f5840e0
- path: neverball/neverball.trace
expectations:
# Skipped since it's long on a530.
@ -325,9 +325,9 @@ traces:
#- device: freedreno-a306
# checksum: 0c57ccc3989b75a940b28ea1cc09cb0d
- device: freedreno-a530
checksum: bc19f0f58935fdb348f401396e6845e1
checksum: 4715d72a7958f2fd5a387c16b3a01579
- device: freedreno-a630
checksum: f546f840e916ab0f11f8df0e4eee584d
checksum: 1e397c5c34c9c50350a8db1a060a6bbb
- path: glmark2/shading:shading=blinn-phong-inf.trace
expectations:
- device: freedreno-a306
@ -420,7 +420,7 @@ traces:
- path: gputest/gimark.trace
expectations:
- device: freedreno-a630
checksum: e58167bd8eeb8952facbc00ff0449135
checksum: dd8fb768033d09f6edc98b4cfff02c6f
- path: gputest/pixmark-julia-fp32.trace
expectations:
- device: freedreno-a630
@ -450,11 +450,11 @@ traces:
- path: gputest/plot3d.trace
expectations:
- device: freedreno-a306
checksum: f6ecd9b8afc692b0cdb459b9b30db8d4
checksum: 302943895dbdd7730958fb0175f23b7f
- device: freedreno-a530
checksum: 4faafe5fab0d8ec6d7b549c94f663c92
checksum: 755aa5b521237ddf9fea3181d2ba2b75
- device: freedreno-a630
checksum: 0a6a16c394a413f02ec2ebcc3251e366
checksum: 302aec1ced68e22182460b617b0f2aef
# Note: Requires GL4 for tess.
- path: gputest/tessmark.trace
expectations:
@ -471,9 +471,9 @@ traces:
- path: humus/AmbientAperture.trace
expectations:
- device: freedreno-a306
checksum: 8d4c52f0af9c09710d358f24c73fae3c
checksum: 3d9243cbd0659cb58b16cade2be3f2c2
- device: freedreno-a530
checksum: aab5c853e383e1cda56663d65f6925ad
checksum: c55c1ba5683306980956b5f89563f343
- device: freedreno-a630
checksum: 83fd7bce0fc1e1f30bd143b7d30ca890
- path: humus/CelShading.trace
@ -534,7 +534,7 @@ traces:
expectations:
# a306/a630 would need higher GL version to run
- device: freedreno-a630
checksum: 0e32ca8fc815a7250f38a07faeafb21b
checksum: e93cf9682c9ca5ed6a6effe5b7fdd386
- path: pathfinder/canvas_text_v2.trace
expectations:
# a306/a630 would need higher GL version to run

View File

@ -37,7 +37,7 @@ traces:
- path: gputest/pixmark-piano.trace
expectations:
- device: gl-vmware-llvmpipe
checksum: f73a68e9814405910c4628a2824f1eae
checksum: cfaf4c036d8a5626afb1392d8fccabd0
- path: gputest/triangle.trace
expectations:
- device: gl-vmware-llvmpipe

View File

@ -5,7 +5,7 @@ traces:
- path: behdad-glyphy/glyphy.trace
expectations:
- device: gl-panfrost-t860
checksum: 22bf5262745fd47c5c5eadb93d7cc420
checksum: b6cd8d92987530edcfc36a933c9b07f6
- path: glmark2/desktop:windows=4:effect=blur:blur-radius=5:passes=1:separable=true.trace
expectations:
- device: gl-panfrost-t860
@ -158,7 +158,7 @@ traces:
- path: glmark2/refract.trace
expectations:
- device: gl-panfrost-t860
checksum: 6557deca1a47a7a77723658ea579ac63
checksum: e520a0071fd940be1401aea2bec97709
- path: glmark2/shading:shading=blinn-phong-inf.trace
expectations:
- device: gl-panfrost-t860
@ -209,11 +209,11 @@ traces:
- path: gputest/plot3d.trace
expectations:
- device: gl-panfrost-t860
checksum: a34223830866a42747db199b04c5e1be
checksum: e73715f3b6a4f1609eaf5432af03714e
- path: humus/AmbientAperture.trace
expectations:
- device: gl-panfrost-t860
checksum: e4c0b930ef99f14305e1ade7f1779c09
checksum: b0d4a64e0907f817161b2a0e85af7a9a
- path: humus/CelShading.trace
expectations:
- device: gl-panfrost-t860

View File

@ -21,11 +21,11 @@ traces:
- path: pathfinder/demo.trace
expectations:
- device: gl-radeonsi-stoney
checksum: c81c85f9b247dd1b06c3dd5b669cc283
checksum: 8ff636268dfa0d54b6f15d70d15e354d
- path: pathfinder/canvas_moire.trace
expectations:
- device: gl-radeonsi-stoney
checksum: 78dd2357ad6e5ffc049a75bfb11c5497
checksum: 505b9cad6e65c13463a0786944f8b679
- path: pathfinder/canvas_text_v2.trace
expectations:
- device: gl-radeonsi-stoney
@ -37,7 +37,7 @@ traces:
- path: gputest/pixmark-piano.trace
expectations:
- device: gl-radeonsi-stoney
checksum: 86ebe6ff8038975de8724fa9536edb7e
checksum: 58a86d233d03e2a174cb79c16028f916
- path: gputest/triangle.trace
expectations:
- device: gl-radeonsi-stoney
@ -133,7 +133,7 @@ traces:
- path: glmark2/refract.trace
expectations:
- device: gl-radeonsi-stoney
checksum: 9d0a2d2fce0b80a265fbcee5107c9e82
checksum: 41d105bdd10a354f6d161c67f715b7f9
- path: glmark2/shading:shading=blinn-phong-inf.trace
expectations:
- device: gl-radeonsi-stoney
@ -173,11 +173,11 @@ traces:
- path: godot/Material Testers.x86_64_2020.04.08_13.38_frame799.rdc
expectations:
- device: gl-radeonsi-stoney
checksum: 02f654ad77c0c1106e1b31e1c86c93bb
checksum: 4df1fbfc346851fe9e086a0708afde21
- path: gputest/gimark.trace
expectations:
- device: gl-radeonsi-stoney
checksum: 4442dbd44a9704c499da4817fffce306
checksum: 52f76e6db877111845990ee128552082
- path: gputest/pixmark-julia-fp32.trace
expectations:
- device: gl-radeonsi-stoney
@ -193,7 +193,7 @@ traces:
- path: gputest/plot3d.trace
expectations:
- device: gl-radeonsi-stoney
checksum: ce101e0808b9a2e0092d1668e653a32b
checksum: 203c0c186a8eab5fbb8753ec25848b53
- path: gputest/tessmark.trace
expectations:
- device: gl-radeonsi-stoney
@ -201,7 +201,7 @@ traces:
- path: humus/AmbientAperture.trace
expectations:
- device: gl-radeonsi-stoney
checksum: 664ea58a62b27737b7d0ae9e86ab85c0
checksum: 7ad498c94dcfbf22ef56f115648be86d
- path: humus/CelShading.trace
expectations:
- device: gl-radeonsi-stoney

View File

@ -17,11 +17,11 @@ traces:
- path: gputest/furmark.trace
expectations:
- device: gl-virgl
checksum: 87ffd45be95f2d55f82325c86ce32f20
checksum: 292ebf725dcea23def48a807c4e2ea09
- path: gputest/pixmark-piano.trace
expectations:
- device: gl-virgl
checksum: 8293e59b818715ddf1c23e9f60b17851
checksum: 52a05afe422b32de0779fae3f5e1391a
- path: gputest/triangle.trace
expectations:
- device: gl-virgl
@ -121,7 +121,7 @@ traces:
- path: glmark2/refract.trace
expectations:
- device: gl-virgl
checksum: b77f24a0651ef93e1c4253042ad9c9fa
checksum: eba9998078a2fb5c28ab1df53ca88fc2
- path: glmark2/shading:shading=blinn-phong-inf.trace
expectations:
- device: gl-virgl
@ -178,7 +178,7 @@ traces:
- path: gputest/plot3d.trace
expectations:
- device: gl-virgl
checksum: f3c0187ab2197c57e699135b7f42b8cc
checksum: 399cc67c27f9fb585b0e21a7110c53e7
# Times out
# - path: gputest/tessmark.trace
# expectations: