[Mesa-dev] [PATCH 128/133] nir/live_variables: Use the new ssa_def iterator

Jason Ekstrand jason at jlekstrand.net
Mon Dec 15 22:13:11 PST 2014


---
 src/glsl/nir/nir_live_variables.c | 32 +++++++++++++-------------------
 1 file changed, 13 insertions(+), 19 deletions(-)

diff --git a/src/glsl/nir/nir_live_variables.c b/src/glsl/nir/nir_live_variables.c
index 7d99a06..13306b3 100644
--- a/src/glsl/nir/nir_live_variables.c
+++ b/src/glsl/nir/nir_live_variables.c
@@ -47,29 +47,23 @@ struct live_variables_state {
 };
 
 static bool
-index_dest(nir_dest *dest, void *void_state)
+index_ssa_def(nir_ssa_def *def, void *void_state)
 {
    struct live_variables_state *state = void_state;
 
-   if (dest->is_ssa)
-      dest->ssa.live_index = state->num_ssa_defs++;
+   if (def->parent_instr->type == nir_instr_type_ssa_undef)
+      def->live_index = 0;
+   else
+      def->live_index = state->num_ssa_defs++;
 
    return true;
 }
 
 static bool
-index_ssa_definitions_block(nir_block *block, void *void_state)
+index_ssa_definitions_block(nir_block *block, void *state)
 {
-   struct live_variables_state *state = void_state;
-
-   nir_foreach_instr(block, instr) {
-      if (instr->type == nir_instr_type_ssa_undef) {
-         nir_ssa_undef_instr *undef = nir_instr_as_ssa_undef(instr);
-         undef->def.live_index = 0;
-      } else {
-         nir_foreach_dest(instr, index_dest, state);
-      }
-   }
+   nir_foreach_instr(block, instr)
+      nir_foreach_ssa_def(instr, index_ssa_def, state);
 
    return true;
 }
@@ -107,12 +101,11 @@ set_src_live(nir_src *src, void *void_live)
 }
 
 static bool
-set_dest_dead(nir_dest *dest, void *void_live)
+set_ssa_def_dead(nir_ssa_def *def, void *void_live)
 {
    BITSET_WORD *live = void_live;
 
-   if (dest->is_ssa)
-      BITSET_CLEAR(live, dest->ssa.live_index);
+   BITSET_CLEAR(live, def->live_index);
 
    return true;
 }
@@ -134,7 +127,8 @@ propagate_across_edge(nir_block *pred, nir_block *succ,
          break;
       nir_phi_instr *phi = nir_instr_as_phi(instr);
 
-      set_dest_dead(&phi->dest, live);
+      assert(phi->dest.is_ssa);
+      set_ssa_def_dead(&phi->dest.ssa, live);
    }
 
    nir_foreach_instr(succ, instr) {
@@ -183,7 +177,7 @@ walk_instructions_block(nir_block *block, void *void_state)
       if (instr->type == nir_instr_type_phi)
          break;
 
-      nir_foreach_dest(instr, set_dest_dead, block->live_in);
+      nir_foreach_ssa_def(instr, set_ssa_def_dead, block->live_in);
       nir_foreach_src(instr, set_src_live, block->live_in);
    }
 
-- 
2.2.0



More information about the mesa-dev mailing list