ir3/lower_io_offsets: Try propagate SSBO's SHR into a previous shift instruction
authorEduardo Lima Mitev <elima@igalia.com>
Thu, 28 Feb 2019 17:17:50 +0000 (18:17 +0100)
committerEduardo Lima Mitev <elima@igalia.com>
Wed, 13 Mar 2019 20:19:44 +0000 (21:19 +0100)
commit759ceda07e122e3b2cc7a5e44698f41accb5e92c
treeb0e59baba2cd0cf7a710da914c090f806c27dd91
parent2e4525883f0744b0c8df9792ded597090a8ad987
ir3/lower_io_offsets: Try propagate SSBO's SHR into a previous shift instruction

While we lack value range tracking, this patch tries to 'manually' propogate
the division by 4 to calculate SSBO element-offset, into a possible previous
shift operation (shift left or right); checking that it is safe to do so.

This should help in cases like ie. when accessing a field in an array of
structs, where the offset is likely defined as base plus a multiplication
by a struct or array element size.

See dEQP test 'dEQP-GLES31.functional.ssbo.atomic.xor.highp_uint'
for an example of a shader that benefits from this.

Reviewed-by: Rob Clark <robdclark@gmail.com>
src/freedreno/ir3/ir3_nir_lower_io_offsets.c