nir: Allow derefs to be used as phi sources
authorCaio Marcelo de Oliveira Filho <caio.oliveira@intel.com>
Tue, 7 May 2019 09:03:59 +0000 (02:03 -0700)
committerCaio Marcelo de Oliveira Filho <caio.oliveira@intel.com>
Wed, 29 May 2019 15:19:15 +0000 (08:19 -0700)
commit8bdf5a008b3e22f0cd2e836184decfac3265f0df
treec1598e7c929b02e919c39deded40d07d0dcb76a1
parentee2a92bcde0d34f5f92375598167422206efda21
nir: Allow derefs to be used as phi sources

It is possible and valid for a pointer to be selected based on a
conditional before used, and depending on the mode, those cases will
result in a phi with derefs as sources.

To achieve this, we don't rematerialize derefs that are used by phis.
As a consequence, when converting from SSA to regs, we may have phis
that come from different blocks and are used by phis.  We now convert
those to regs too.

Validation was added to ensure only derefs of certain modes can be
used as phi sources.  No extra validation is needed for the presence
of cast, any instruction that uses derefs will validate the
deref-chain is complete (ending in a cast or a var).

Reviewed-by: Jason Ekstrand <jason@jlekstrand.net>
src/compiler/nir/nir_deref.c
src/compiler/nir/nir_from_ssa.c
src/compiler/nir/nir_validate.c