nir: Switch the indexing of block->live_in/out arrays.
authorEric Anholt <eric@anholt.net>
Thu, 23 Jul 2020 19:29:02 +0000 (12:29 -0700)
committerMarge Bot <eric+marge@anholt.net>
Mon, 31 Aug 2020 18:28:36 +0000 (18:28 +0000)
commit73d2c6cdce8c12e87e387bc958c720f9d8f6b9b4
tree9379ccb9a837de1cb074e732ae722ddc3f482906
parent5d2b2b59c451915c0b11184ae47c0673fdff3146
nir: Switch the indexing of block->live_in/out arrays.

In nir-to-tgsi, I want to free temps storing SSA values when they go dead,
and NIR liveness has most of the information I need.  Hoever, when I reach
the end of a block, I need to free whatever temps were in liveout which
are dead at that point.  If liveout is indexed by live_index, then I don't
know the maximum live_index for iterating the live_out bitset, and I also
don't have a way to map that index back to the def->index that my temps
are stored under.

We can use the more typical def->index for these bitsets, which resolves
both of those problems.  The only cost is that ssa_undefs don't get merged
into a single bit in the bitfield, but there are generally 1-4 of them in
a shader and we don't track liveness for those anyway so splitting them
apart is fine.

Reviewed-by: Jason Ekstrand <jason@jlekstrand.net>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/6408>
src/compiler/nir/nir.c
src/compiler/nir/nir.h
src/compiler/nir/nir_liveness.c