radeonsi: don't preload constants at the beginning of shaders
authorMarek Olšák <marek.olsak@amd.com>
Fri, 9 Sep 2016 22:29:31 +0000 (00:29 +0200)
committerMarek Olšák <marek.olsak@amd.com>
Mon, 12 Sep 2016 19:06:57 +0000 (21:06 +0200)
commit546bc07349d0e53b71766780cf726fe21f7d6983
treeef256b4ae1740e37f2bd9a0703eeeef8db358edb
parente2fb0441150e81f7ba30db1c8e8583858c3d8d5e
radeonsi: don't preload constants at the beginning of shaders

LLVM can CSE the loads, thus we can always re-load constants before each
use. The decrease in SGPR spilling is huge.

The best improvements are the dumbest ones.

26011 shaders in 14651 tests
Totals:
SGPRS: 1453346 -> 1251920 (-13.86 %)
VGPRS: 742576 -> 728421 (-1.91 %)
Spilled SGPRs: 52298 -> 16644 (-68.17 %)
Spilled VGPRs: 397 -> 369 (-7.05 %)
Scratch VGPRs: 1372 -> 1344 (-2.04 %) dwords per thread
Code Size: 36136488 -> 36001064 (-0.37 %) bytes
LDS: 767 -> 767 (0.00 %) blocks
Max Waves: 219315 -> 222221 (1.33 %)

Reviewed-by: Bas Nieuwenhuizen <bas@basnieuwenhuizen.nl>
Reviewed-by: Edward O'Callaghan <funfunctor@folklore1984.net>
Reviewed-by: Nicolai Hähnle <nicolai.haehnle@amd.com>
src/gallium/drivers/radeonsi/si_shader.c