i965: Safely iterate the predecessors of the end block.
authorKenneth Graunke <kenneth@whitecape.org>
Thu, 25 Aug 2016 04:33:16 +0000 (21:33 -0700)
committerKenneth Graunke <kenneth@whitecape.org>
Fri, 26 Aug 2016 02:18:24 +0000 (19:18 -0700)
commitc2fd6b0f5d1c964fa63e72d6938721cba9597629
treede8d2a1354cac6400bc4a6051b6a15959cf01ddc
parent3203fe3d509b6a0e44c82384fba1dcc4c8c43dc6
i965: Safely iterate the predecessors of the end block.

We want to insert code in each of the predecessors of the end block.
This code includes a nir_if, which would split the block, altering
the set.  To avoid that, I emitted a dead constant at the end of each
block before splitting it, so that the set of predecessors remained
unchanged.  This was admittedly ugly.

Connor suggested instead saving a copy of the set, so we can iterate
it safely.  This is also a little ugly, but a much better plan.

Signed-off-by: Kenneth Graunke <kenneth@whitecape.org>
Reviewed-by: Connor Abbott <cwabbott0@gmail.com>
src/mesa/drivers/dri/i965/brw_nir_tcs_workarounds.c