amd/llvm: Mark pointer function arguments as 32-byte aligned.
authorBas Nieuwenhuizen <bas@basnieuwenhuizen.nl>
Thu, 19 Dec 2019 00:39:56 +0000 (01:39 +0100)
committerMarge Bot <eric+marge@anholt.net>
Wed, 8 Jul 2020 23:47:06 +0000 (23:47 +0000)
commit40e00c800cf863ddf75b65b249968031ecbf52d6
tree42e09d159fccb9e06de3bc84867b919a506018d0
parentd2bd77eae4800e739ad360d4e06a7243d2335f84
amd/llvm: Mark pointer function arguments as 32-byte aligned.

Otherwise LLVM does not see the pointers as allowing speculative
loads.

The pipeline-db results are pretty wild, but mostly what is to be
expected from allowing more code movement in LLVM:

Totals from affected shaders:
SGPRS: 157728 -> 168336 (6.73 %)
VGPRS: 158628 -> 158664 (0.02 %)
Spilled SGPRs: 10845 -> 24753 (128.24 %)
Spilled VGPRs: 13 -> 13 (0.00 %)
Private memory VGPRs: 0 -> 0 (0.00 %)
Scratch size: 8 -> 8 (0.00 %) dwords per thread
Code Size: 17189180 -> 17313712 (0.72 %) bytes
LDS: 204 -> 204 (0.00 %) blocks
Max Waves: 5700 -> 5687 (-0.23 %)
Wait states: 0 -> 0 (0.00 %)

This gives some boosts for shaders we can move a descriptor load
outside a loop.

Reviewed-by: Marek Olšák <marek.olsak@amd.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/3159>
src/amd/llvm/ac_llvm_build.c
src/amd/llvm/ac_llvm_helper.cpp
src/amd/llvm/ac_llvm_util.h