mesa/src/compiler
Rhys Perry e43007af56 nir/opt_if: add opt_if_rewrite_uniform_uses
Turns:
if (a == (b=readfirstlane(a)))
   use(a)
into:
if (a == (b=readfirstlane(a)))
   use(b)

Improves divergence analysis and lets us scalarize use(a). Improves
Cyberpunk 2077 performance.

fossil-db (Sienna Cichlid, Cyberpunk 2077):
Totals from 57 (10.56% of 540) affected shaders:
VGPRs: 4904 -> 4040 (-17.62%)
CodeSize: 624360 -> 626828 (+0.40%); split: -0.06%, +0.46%
MaxWaves: 656 -> 824 (+25.61%)
Instrs: 119770 -> 119447 (-0.27%); split: -0.49%, +0.22%
Latency: 1950256 -> 1633110 (-16.26%); split: -16.26%, +0.00%
InvThroughput: 364852 -> 292089 (-19.94%)
VClause: 1512 -> 1008 (-33.33%)
SClause: 2693 -> 3196 (+18.68%)
Copies: 10050 -> 9955 (-0.95%); split: -3.34%, +2.40%
Branches: 3476 -> 3547 (+2.04%)
PreSGPRs: 4003 -> 5076 (+26.80%)
PreVGPRs: 4709 -> 3810 (-19.09%)

Signed-off-by: Rhys Perry <pendingchaos02@gmail.com>
Reviewed-by: Timur Kristóf <timur.kristof@gmail.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/12472>
2021-09-24 18:41:18 +00:00
..
glsl util/bitset: s/BITSET_SET_RANGE/BITSET_SET_RANGE_INSIDE_WORD 2021-09-21 20:25:31 +00:00
isaspec compiler/isaspec: add alignment support 2021-09-21 20:25:31 +00:00
nir nir/opt_if: add opt_if_rewrite_uniform_uses 2021-09-24 18:41:18 +00:00
spirv spirv: Identify non-temporal memory access 2021-09-21 21:55:54 +00:00
builtin_type_macros.h compiler/types: Add 64-bit image types 2020-11-09 17:17:39 +00:00
glsl_types.cpp glsl: add missing support for explicit components in interface blocks 2021-05-13 08:07:53 +00:00
glsl_types.h glsl: add missing support for explicit components in interface blocks 2021-05-13 08:07:53 +00:00
meson.build freedreno/isa: move isaspec to a new home 2021-09-21 20:25:31 +00:00
nir_types.cpp nir: Add a size_align helper function for aligning elements to 16 bytes. 2020-11-16 13:54:22 -08:00
nir_types.h nir: Add a size_align helper function for aligning elements to 16 bytes. 2020-11-16 13:54:22 -08:00
shader_enums.c compiler: Add new non-Multiview Task/Mesh builtins 2021-08-28 03:56:42 +00:00
shader_enums.h compiler: Add new non-Multiview Task/Mesh builtins 2021-08-28 03:56:42 +00:00
shader_info.h spirv: Handle the SubgroupSize execution mode 2021-09-21 18:34:59 +00:00