Mesa (master): nir: Move nir_cursor to nir.h.

Kenneth Graunke kwg at kemper.freedesktop.org
Thu Aug 27 20:40:52 UTC 2015


Module: Mesa
Branch: master
Commit: f90c6b1ce0d96c7dbdd32ab913d5c88913700ba2
URL:    http://cgit.freedesktop.org/mesa/mesa/commit/?id=f90c6b1ce0d96c7dbdd32ab913d5c88913700ba2

Author: Kenneth Graunke <kenneth at whitecape.org>
Date:   Tue Aug 25 10:01:31 2015 -0700

nir: Move nir_cursor to nir.h.

We want to use this for normal instruction insertion too, not just
control flow.  Generally these functions are going to be extremely
useful when working with NIR, so I want them to be widely available
without having to include a separate file.

Signed-off-by: Kenneth Graunke <kenneth at whitecape.org>
Reviewed-by: Jason Ekstrand <jason.ekstrand at intel.com>
Acked-by: Connor Abbott <cwabbott0 at gmail.com>

---

 src/glsl/nir/nir.h              |   97 +++++++++++++++++++++++++++++++++++++++
 src/glsl/nir/nir_control_flow.h |   89 -----------------------------------
 2 files changed, 97 insertions(+), 89 deletions(-)

diff --git a/src/glsl/nir/nir.h b/src/glsl/nir/nir.h
index 40871f7..49430cd 100644
--- a/src/glsl/nir/nir.h
+++ b/src/glsl/nir/nir.h
@@ -1546,6 +1546,101 @@ nir_deref *nir_copy_deref(void *mem_ctx, nir_deref *deref);
 nir_load_const_instr *
 nir_deref_get_const_initializer_load(nir_shader *shader, nir_deref_var *deref);
 
+/**
+ * NIR Cursors and Instruction Insertion API
+ * @{
+ *
+ * A tiny struct representing a point to insert/extract instructions or
+ * control flow nodes.  Helps reduce the combinatorial explosion of possible
+ * points to insert/extract.
+ *
+ * \sa nir_control_flow.h
+ */
+typedef enum {
+   nir_cursor_before_block,
+   nir_cursor_after_block,
+   nir_cursor_before_instr,
+   nir_cursor_after_instr,
+} nir_cursor_option;
+
+typedef struct {
+   nir_cursor_option option;
+   union {
+      nir_block *block;
+      nir_instr *instr;
+   };
+} nir_cursor;
+
+static inline nir_cursor
+nir_before_block(nir_block *block)
+{
+   nir_cursor cursor;
+   cursor.option = nir_cursor_before_block;
+   cursor.block = block;
+   return cursor;
+}
+
+static inline nir_cursor
+nir_after_block(nir_block *block)
+{
+   nir_cursor cursor;
+   cursor.option = nir_cursor_after_block;
+   cursor.block = block;
+   return cursor;
+}
+
+static inline nir_cursor
+nir_before_instr(nir_instr *instr)
+{
+   nir_cursor cursor;
+   cursor.option = nir_cursor_before_instr;
+   cursor.instr = instr;
+   return cursor;
+}
+
+static inline nir_cursor
+nir_after_instr(nir_instr *instr)
+{
+   nir_cursor cursor;
+   cursor.option = nir_cursor_after_instr;
+   cursor.instr = instr;
+   return cursor;
+}
+
+static inline nir_cursor
+nir_before_cf_node(nir_cf_node *node)
+{
+   if (node->type == nir_cf_node_block)
+      return nir_before_block(nir_cf_node_as_block(node));
+
+   return nir_after_block(nir_cf_node_as_block(nir_cf_node_prev(node)));
+}
+
+static inline nir_cursor
+nir_after_cf_node(nir_cf_node *node)
+{
+   if (node->type == nir_cf_node_block)
+      return nir_after_block(nir_cf_node_as_block(node));
+
+   return nir_before_block(nir_cf_node_as_block(nir_cf_node_next(node)));
+}
+
+static inline nir_cursor
+nir_before_cf_list(struct exec_list *cf_list)
+{
+   nir_cf_node *first_node = exec_node_data(nir_cf_node,
+                                            exec_list_get_head(cf_list), node);
+   return nir_before_cf_node(first_node);
+}
+
+static inline nir_cursor
+nir_after_cf_list(struct exec_list *cf_list)
+{
+   nir_cf_node *last_node = exec_node_data(nir_cf_node,
+                                           exec_list_get_tail(cf_list), node);
+   return nir_after_cf_node(last_node);
+}
+
 void nir_instr_insert_before(nir_instr *instr, nir_instr *before);
 void nir_instr_insert_after(nir_instr *instr, nir_instr *after);
 
@@ -1560,6 +1655,8 @@ void nir_instr_insert_after_cf_list(struct exec_list *list, nir_instr *after);
 
 void nir_instr_remove(nir_instr *instr);
 
+/** @} */
+
 typedef bool (*nir_foreach_ssa_def_cb)(nir_ssa_def *def, void *state);
 typedef bool (*nir_foreach_dest_cb)(nir_dest *dest, void *state);
 typedef bool (*nir_foreach_src_cb)(nir_src *src, void *state);
diff --git a/src/glsl/nir/nir_control_flow.h b/src/glsl/nir/nir_control_flow.h
index 5efd41c..b71382f 100644
--- a/src/glsl/nir/nir_control_flow.h
+++ b/src/glsl/nir/nir_control_flow.h
@@ -45,95 +45,6 @@ extern "C" {
  *    deleting them.
  */
 
-/* Helper struct for representing a point to extract/insert. Helps reduce the
- * combinatorial explosion of possible points to extract.
- */
-
-typedef enum {
-   nir_cursor_before_block,
-   nir_cursor_after_block,
-   nir_cursor_before_instr,
-   nir_cursor_after_instr,
-} nir_cursor_option;
-
-typedef struct {
-   nir_cursor_option option;
-   union {
-      nir_block *block;
-      nir_instr *instr;
-   };
-} nir_cursor;
-
-static inline nir_cursor
-nir_before_block(nir_block *block)
-{
-   nir_cursor cursor;
-   cursor.option = nir_cursor_before_block;
-   cursor.block = block;
-   return cursor;
-}
-
-static inline nir_cursor
-nir_after_block(nir_block *block)
-{
-   nir_cursor cursor;
-   cursor.option = nir_cursor_after_block;
-   cursor.block = block;
-   return cursor;
-}
-
-static inline nir_cursor
-nir_before_instr(nir_instr *instr)
-{
-   nir_cursor cursor;
-   cursor.option = nir_cursor_before_instr;
-   cursor.instr = instr;
-   return cursor;
-}
-
-static inline nir_cursor
-nir_after_instr(nir_instr *instr)
-{
-   nir_cursor cursor;
-   cursor.option = nir_cursor_after_instr;
-   cursor.instr = instr;
-   return cursor;
-}
-
-static inline nir_cursor
-nir_before_cf_node(nir_cf_node *node)
-{
-   if (node->type == nir_cf_node_block)
-      return nir_before_block(nir_cf_node_as_block(node));
-
-   return nir_after_block(nir_cf_node_as_block(nir_cf_node_prev(node)));
-}
-
-static inline nir_cursor
-nir_after_cf_node(nir_cf_node *node)
-{
-   if (node->type == nir_cf_node_block)
-      return nir_after_block(nir_cf_node_as_block(node));
-
-   return nir_before_block(nir_cf_node_as_block(nir_cf_node_next(node)));
-}
-
-static inline nir_cursor
-nir_before_cf_list(struct exec_list *cf_list)
-{
-   nir_cf_node *first_node = exec_node_data(nir_cf_node,
-                                            exec_list_get_head(cf_list), node);
-   return nir_before_cf_node(first_node);
-}
-
-static inline nir_cursor
-nir_after_cf_list(struct exec_list *cf_list)
-{
-   nir_cf_node *last_node = exec_node_data(nir_cf_node,
-                                           exec_list_get_tail(cf_list), node);
-   return nir_after_cf_node(last_node);
-}
-
 /** Control flow insertion. */
 
 /** puts a control flow node where the cursor is */




More information about the mesa-commit mailing list