mesa/src
Iago Toral Quiroga cf99584f51 broadcom/compiler: move uniforms right before their first use after scheduling
On V3D the quality of the code we generate is significantly affected by
how we decide to assign accumulators during register allocation, which
is determined by liveness, favoring short-lived temps.

There are many shaders that end up doing a whole lot of uniform loads
first, and using them later, which is very inconvenient for our register
allocation process because this increases uniform liveness and causes
us to use accumulators less efficientely, leading to significant churn.

To fix this, we move uniforms right before their first use in the same
block, but we need to do this after NIR scheduling, which means we are
doing it in non-SSA form, since the scheduler has a tendency to undo
this optimization and it is not easy to modify it to avoid it, since it
works in more abstract terms, using instruction dependencies, estimated
register pressure and instruction delay information to do its work,
which are very different concepts.

total instructions in shared programs: 13316738 -> 13033613 (-2.13%)
instructions in affected programs: 10389172 -> 10106047 (-2.73%)
helped: 55442
HURT: 16144

total threads in shared programs: 413722 -> 415048 (0.32%)
threads in affected programs: 1428 -> 2754 (92.86%)
helped: 680
HURT: 17

total loops in shared programs: 1716 -> 1690 (-1.52%)
loops in affected programs: 26 -> 0
helped: 26
HURT: 0

total uniforms in shared programs: 3704313 -> 3705181 (0.02%)
uniforms in affected programs: 687730 -> 688598 (0.13%)
helped: 2920
HURT: 7384

total max-temps in shared programs: 2364785 -> 2175190 (-8.02%)
max-temps in affected programs: 1215387 -> 1025792 (-15.60%)
helped: 49667
HURT: 1556

total spills in shared programs: 4241 -> 4248 (0.17%)
spills in affected programs: 642 -> 649 (1.09%)
helped: 11
HURT: 19

total fills in shared programs: 6115 -> 6125 (0.16%)
fills in affected programs: 1276 -> 1286 (0.78%)
helped: 11
HURT: 21

total sfu-stalls in shared programs: 34381 -> 36578 (6.39%)
sfu-stalls in affected programs: 16055 -> 18252 (13.68%)
helped: 3647
HURT: 5206

Reviewed-by: Alejandro Piñeiro <apinheiro@igalia.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/15056>
2022-02-24 11:36:00 +00:00
..
amd ci: Allow disabling the whole of the Collabora farm 2022-02-24 07:33:45 +01:00
android_stub
asahi asahi: Wire in pure integer texture formats 2022-02-18 23:48:33 +00:00
broadcom broadcom/compiler: move uniforms right before their first use after scheduling 2022-02-24 11:36:00 +00:00
compiler nir/nir_opt_move: handle non-SSA defs 2022-02-24 11:36:00 +00:00
drm-shim
egl egl/wayland: Don't replace existing backbuffer in get_buffers 2022-02-07 09:57:41 +00:00
etnaviv
freedreno ci: Allow disabling the whole of the Collabora farm 2022-02-24 07:33:45 +01:00
gallium ci: Allow disabling the whole of the Collabora farm 2022-02-24 07:33:45 +01:00
gbm gbm: improve documentation about the lifetime of resources 2022-02-22 14:42:52 +01:00
getopt
glx glx: keep native window glx drawable by driconf option 2022-02-22 07:10:40 +00:00
gtest
hgl
imgui
intel ci: Allow disabling the whole of the Collabora farm 2022-02-24 07:33:45 +01:00
loader gallium/dri: add missing PIPE_BIND_DRI_PRIME handling 2022-02-08 00:13:07 +00:00
mapi
mesa glsl/nir: free GLSL IR right after we convert to NIR 2022-02-24 01:10:49 +00:00
microsoft ci: Disable windows-vs2019 2022-02-23 15:12:41 +00:00
nouveau
panfrost ci: Allow disabling the whole of the Collabora farm 2022-02-24 07:33:45 +01:00
tool
util driconf: add Abaqus configs 2022-02-22 07:10:40 +00:00
virtio vulkan/wsi: untangle buffer-images from prime 2022-02-22 10:04:34 +00:00
vulkan vulkan/wsi: use buffer-image code-path on Windows 2022-02-22 10:04:34 +00:00
meson.build