aco: optimize v_add(v_bcnt(a, 0), b) to v_bcnt(a, b)
authorSamuel Pitoiset <samuel.pitoiset@gmail.com>
Wed, 11 Nov 2020 17:42:35 +0000 (18:42 +0100)
committerMarge Bot <eric+marge@anholt.net>
Fri, 13 Nov 2020 07:28:50 +0000 (07:28 +0000)
commit68488fd3835f2d1a63562ae16777987af3ff7e01
tree915812c68af1c201d0d98e2aac88d17c324ab14c
parent580fbbb59a601c5eb858a53a4924c87da7e253f9
aco: optimize v_add(v_bcnt(a, 0), b) to v_bcnt(a, b)

The first operand of v_bcnt should always be a VGPR because if it's
a SGPR, isel selects s_bcnt1 but I added a sanity check to prevent
any problems.

fossils-db (Vega10):
Totals from 23 (0.02% of 139517) affected shaders:
CodeSize: 106828 -> 106664 (-0.15%)
Instrs: 20242 -> 20201 (-0.20%)
Cycles: 213112 -> 211352 (-0.83%)
VMEM: 3200 -> 3184 (-0.50%)
SMEM: 928 -> 927 (-0.11%)

Helps Control, Assassins Creeds Origins and Youngblood.

Signed-off-by: Samuel Pitoiset <samuel.pitoiset@gmail.com>
Reviewed-by: Rhys Perry <pendingchaos02@gmail.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/7568>
src/amd/compiler/aco_optimizer.cpp
src/amd/compiler/tests/test_optimizer.cpp