nir: Return a cursor from nir_instr_remove
authorJason Ekstrand <jason.ekstrand@intel.com>
Fri, 16 Mar 2018 16:52:04 +0000 (09:52 -0700)
committerJason Ekstrand <jason.ekstrand@intel.com>
Sat, 31 Mar 2018 00:20:27 +0000 (17:20 -0700)
Because nir_instr_remove is an inline wrapper around nir_instr_remove_v,
the compiler should be able to tell that the return value is unused and
not emit the extra code in most cases.

Reviewed-by: Kenneth Graunke <kenneth@whitecape.org>
src/compiler/nir/nir.c
src/compiler/nir/nir.h
src/compiler/nir/nir_opt_copy_prop_vars.c

index 3fb16e6ca5fa9782d7b0f589dc0c58d7a3a8183b..8364197480b9341a04436ab458aa294e111fe043 100644 (file)
@@ -1159,7 +1159,7 @@ remove_defs_uses(nir_instr *instr)
    nir_foreach_src(instr, remove_use_cb, instr);
 }
 
-void nir_instr_remove(nir_instr *instr)
+void nir_instr_remove_v(nir_instr *instr)
 {
    remove_defs_uses(instr);
    exec_node_remove(&instr->node);
index 5ba6a1f0687877b428e60ef8f1c9c7dd0845b44d..cc7c401b40eff5518865ab1195f5b0aa962ca7f2 100644 (file)
@@ -2274,7 +2274,21 @@ nir_instr_insert_after_cf_list(struct exec_list *list, nir_instr *after)
    nir_instr_insert(nir_after_cf_list(list), after);
 }
 
-void nir_instr_remove(nir_instr *instr);
+void nir_instr_remove_v(nir_instr *instr);
+
+static inline nir_cursor
+nir_instr_remove(nir_instr *instr)
+{
+   nir_cursor cursor;
+   nir_instr *prev = nir_instr_prev(instr);
+   if (prev) {
+      cursor = nir_after_instr(prev);
+   } else {
+      cursor = nir_before_block(instr->block);
+   }
+   nir_instr_remove_v(instr);
+   return cursor;
+}
 
 /** @} */
 
index 89ddc8dd406e51d4ca46b2b6c9fec091e48d8191..cc8f00f9d37303a9a0960e90a9f800d867b0719c 100644 (file)
@@ -349,21 +349,6 @@ store_to_entry(struct copy_prop_var_state *state, struct copy_entry *entry,
    }
 }
 
-/* Remove an instruction and return a cursor pointing to where it was */
-static nir_cursor
-instr_remove_cursor(nir_instr *instr)
-{
-   nir_cursor cursor;
-   nir_instr *prev = nir_instr_prev(instr);
-   if (prev) {
-      cursor = nir_after_instr(prev);
-   } else {
-      cursor = nir_before_block(instr->block);
-   }
-   nir_instr_remove(instr);
-   return cursor;
-}
-
 /* Do a "load" from an SSA-based entry return it in "value" as a value with a
  * single SSA def.  Because an entry could reference up to 4 different SSA
  * defs, a vecN operation may be inserted to combine them into a single SSA
@@ -396,7 +381,7 @@ load_from_ssa_entry_value(struct copy_prop_var_state *state,
 
    if (all_same) {
       /* Our work here is done */
-      b->cursor = instr_remove_cursor(&intrin->instr);
+      b->cursor = nir_instr_remove(&intrin->instr);
       intrin->instr.block = NULL;
       return true;
    }
@@ -594,7 +579,7 @@ load_from_deref_entry_value(struct copy_prop_var_state *state,
       value_tail->child = nir_deref_clone(src_tail->child, value_tail);
    }
 
-   b->cursor = instr_remove_cursor(&intrin->instr);
+   b->cursor = nir_instr_remove(&intrin->instr);
 
    return true;
 }