nir/gcm: Rework the schedule late loop
authorJason Ekstrand <jason@jlekstrand.net>
Thu, 1 Dec 2016 21:51:03 +0000 (13:51 -0800)
committerJason Ekstrand <jason.ekstrand@intel.com>
Thu, 12 Jan 2017 22:56:55 +0000 (14:56 -0800)
commit087e172179be3b9be89955cd012a26ea770ee9eb
tree6432bcfbb0921c2a8a2f6485adf2f40e6bd1dcc4
parente9a4ec4bd806107223b4e3f656071de3a08756a0
nir/gcm: Rework the schedule late loop

This fixes a bug in code motion that occurred when the best block is the
same as the schedule early block.  In this case, because we're checking
(lca != def->parent_instr->block) at the top of the loop, we never get to
the check for loop depth so we wouldn't move it out of the loop.  This
commit reworks the loop to be a simple for loop up the dominator chain and
we place the (lca != def->parent_instr->block) check at the end of the
loop.

Reviewed-by: Matt Turner <mattst88@gmail.com>
src/compiler/nir/nir_opt_gcm.c