[Mesa-dev] [RFC 1/3] nir: Add a generic instruction index
Jason Ekstrand
jason at jlekstrand.net
Tue Sep 8 17:35:12 PDT 2015
---
src/glsl/nir/nir.c | 18 ++++++++++++++++++
src/glsl/nir/nir.h | 4 ++++
2 files changed, 22 insertions(+)
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;
+
/* 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);
--
2.5.0.400.gff86faf
More information about the mesa-dev
mailing list