pan/bi: Add cursor data structures
authorAlyssa Rosenzweig <alyssa.rosenzweig@collabora.com>
Fri, 27 Nov 2020 23:54:49 +0000 (18:54 -0500)
committerAlyssa Rosenzweig <alyssa.rosenzweig@collabora.com>
Wed, 23 Dec 2020 18:29:37 +0000 (13:29 -0500)
To be used in conjunction with the builder.

Signed-off-by: Alyssa Rosenzweig <alyssa.rosenzweig@collabora.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/8215>

src/panfrost/bifrost/compiler.h

index 20f755b..f90c738 100644 (file)
@@ -1105,4 +1105,48 @@ signed bi_block_offset(bi_context *ctx, bi_clause *start, bi_block *target);
 
 void bi_pack(bi_context *ctx, struct util_dynarray *emission);
 
+/* Like in NIR, for use with the builder */
+
+enum bi_cursor_option {
+    bi_cursor_after_block,
+    bi_cursor_before_instr,
+    bi_cursor_after_instr
+};
+
+typedef struct {
+    enum bi_cursor_option option;
+
+    union {
+        bi_block *block;
+        bi_instr *instr;
+    };
+} bi_cursor;
+
+static inline bi_cursor
+bi_after_block(bi_block *block)
+{
+    return (bi_cursor) {
+        .option = bi_cursor_after_block,
+        .block = block
+    };
+}
+
+static inline bi_cursor
+bi_before_instr(bi_instr *instr)
+{
+    return (bi_cursor) {
+        .option = bi_cursor_before_instr,
+        .instr = instr
+    };
+}
+
+static inline bi_cursor
+bi_after_instr(bi_instr *instr)
+{
+    return (bi_cursor) {
+        .option = bi_cursor_after_instr,
+        .instr = instr
+    };
+}
+
 #endif