On Mon, Sep 14, 2015 at 11:52 AM, Kenneth Graunke <kenn...@whitecape.org> wrote: > On Tuesday, September 08, 2015 05:35:12 PM Jason Ekstrand wrote: >> --- >> src/glsl/nir/nir.c | 18 ++++++++++++++++++ >> src/glsl/nir/nir.h | 4 ++++ >> 2 files changed, 22 insertions(+) > > Commit message could use a rationale, such as: > > This will allow us to efficiently determine whether one instruction > comes before another. > > (which is a little different than the reasoning behind SSA defs and > register having indexes...those are for printing...this is IP) > >> >> diff --git a/src/glsl/nir/nir.c b/src/glsl/nir/nir.c >> index 3f4bec4..156fe94 100644 >> --- a/src/glsl/nir/nir.c >> +++ b/src/glsl/nir/nir.c >> @@ -1404,3 +1404,21 @@ nir_index_ssa_defs(nir_function_impl *impl) >> nir_foreach_block(impl, index_ssa_block, &index); >> impl->ssa_alloc = index; >> } >> + >> +static bool >> +index_instrs_block(nir_block *block, void *state) >> +{ >> + unsigned *index = state; >> + nir_foreach_instr(block, instr) >> + instr->index = (*index)++; >> + >> + return true; >> +} >> + >> +unsigned >> +nir_index_instrs(nir_function_impl *impl) >> +{ >> + unsigned index = 0; >> + nir_foreach_block(impl, index_instrs_block, &index); >> + return index; >> +} >> diff --git a/src/glsl/nir/nir.h b/src/glsl/nir/nir.h >> index e73b7fb..e7e1881 100644 >> --- a/src/glsl/nir/nir.h >> +++ b/src/glsl/nir/nir.h >> @@ -417,6 +417,9 @@ typedef struct nir_instr { >> nir_instr_type type; >> struct nir_block *block; >> >> + /** generic register index. */ >> + unsigned index; > > Not a register index. An global instruction index or IP of sorts...
Thanks > Do we want to say something about the how the order of blocks influences > the numbers, and how this affects dominance? It's not immediately > obvious from the code (nir_foreach_block and all...) I'll add a comment to index_instrs as a follow-up patch. > > Certainly using this within a block is safe and reasonable. > > Reviewed-by: Kenneth Graunke <kenn...@whitecape.org> > >> + >> /* A temporary for optimization and analysis passes to use for storing >> * flags. For instance, DCE uses this to store the "dead/live" info. >> */ >> @@ -1739,6 +1742,7 @@ nir_loop *nir_block_get_following_loop(nir_block >> *block); >> void nir_index_local_regs(nir_function_impl *impl); >> void nir_index_global_regs(nir_shader *shader); >> void nir_index_ssa_defs(nir_function_impl *impl); >> +unsigned nir_index_instrs(nir_function_impl *impl); >> >> void nir_index_blocks(nir_function_impl *impl); >> >> _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-dev