vc4: Update copy propagation for control flow.
authorEric Anholt <eric@anholt.net>
Wed, 13 Jul 2016 20:37:56 +0000 (13:37 -0700)
committerEric Anholt <eric@anholt.net>
Thu, 14 Jul 2016 06:54:15 +0000 (23:54 -0700)
commit4e797bd98f3aaea8d295c661f7501053156d211a
treef0a83760f3dafc48b78f797e8a6f7d04626d0035
parent94135e8736f2741684e978afac9d34c368f7bcb1
vc4: Update copy propagation for control flow.

Previously, we could assume that a MOV from a temp was always an available
copy, because all temps were SSA in NIR, and their non-SSA state in QIR
was just due to the fact that they were from a bcsel or pack_unorm_4x8, so
we could use the current value of the temp after that series of QIR
instructions to define it.

However, this is no longer the case with control flow.  Instead, we track
a new array of MOVs defined within the block that haven't had their source
or dest killed yet, and use that primarily.  We fall back to looking
through the QIR defs array to handle across-block MOVs, but now require
that copies from the SSA defs have an SSA src as well.
src/gallium/drivers/vc4/vc4_opt_copy_propagation.c