summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorKenneth Graunke <[email protected]>2015-08-25 10:01:31 -0700
committerKenneth Graunke <[email protected]>2015-08-27 13:36:57 -0700
commitf90c6b1ce0d96c7dbdd32ab913d5c88913700ba2 (patch)
tree94d3ffea7363d2a7edaa2d1f0ed2d0e662e8caeb /src
parentc44d50775209266b5c8bad0ab7a7c4ccd7db14a4 (diff)
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 <[email protected]> Reviewed-by: Jason Ekstrand <[email protected]> Acked-by: Connor Abbott <[email protected]>
Diffstat (limited to 'src')
-rw-r--r--src/glsl/nir/nir.h97
-rw-r--r--src/glsl/nir/nir_control_flow.h89
2 files changed, 97 insertions, 89 deletions
diff --git a/src/glsl/nir/nir.h b/src/glsl/nir/nir.h
index 40871f73e96..49430cdce68 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 5efd41caadf..b71382fc597 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 */