Mesa (master): pan/bi: Add side_effects helper

GitLab Mirror gitlab-mirror at kemper.freedesktop.org
Fri Feb 5 18:01:43 UTC 2021


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

Author: Alyssa Rosenzweig <alyssa.rosenzweig at collabora.com>
Date:   Wed Feb  3 14:33:48 2021 -0500

pan/bi: Add side_effects helper

DCE needs to be tuned for this.

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

---

 src/panfrost/bifrost/bir.c      | 33 +++++++++++++++++++++++++++++++++
 src/panfrost/bifrost/compiler.h |  1 +
 2 files changed, 34 insertions(+)

diff --git a/src/panfrost/bifrost/bir.c b/src/panfrost/bifrost/bir.c
index 4012eeb6cab..544a4648cf7 100644
--- a/src/panfrost/bifrost/bir.c
+++ b/src/panfrost/bifrost/bir.c
@@ -152,3 +152,36 @@ bi_next_clause(bi_context *ctx, pan_block *block, bi_clause *clause)
 
         return NULL;
 }
+
+/* Does an instruction have a side effect not captured by its register
+ * destination? Applies to certain message-passing instructions only, used in
+ * dead code elimation */
+
+bool
+bi_side_effects(enum bi_opcode op)
+{
+        switch (bi_opcode_props[op].message) {
+        case BIFROST_MESSAGE_NONE:
+        case BIFROST_MESSAGE_VARYING:
+        case BIFROST_MESSAGE_ATTRIBUTE:
+        case BIFROST_MESSAGE_TEX:
+        case BIFROST_MESSAGE_VARTEX:
+        case BIFROST_MESSAGE_LOAD:
+        case BIFROST_MESSAGE_64BIT:
+                return false;
+
+        case BIFROST_MESSAGE_STORE:
+        case BIFROST_MESSAGE_ATOMIC:
+        case BIFROST_MESSAGE_BARRIER:
+        case BIFROST_MESSAGE_BLEND:
+        case BIFROST_MESSAGE_Z_STENCIL:
+        case BIFROST_MESSAGE_ATEST:
+        case BIFROST_MESSAGE_JOB:
+                return true;
+
+        case BIFROST_MESSAGE_TILE:
+                return (op != BI_OPCODE_LD_TILE);
+        }
+
+        unreachable("Invalid message type");
+}
diff --git a/src/panfrost/bifrost/compiler.h b/src/panfrost/bifrost/compiler.h
index 8b21728e31e..979927d0d02 100644
--- a/src/panfrost/bifrost/compiler.h
+++ b/src/panfrost/bifrost/compiler.h
@@ -708,6 +708,7 @@ unsigned bi_count_read_registers(bi_instr *ins, unsigned src);
 uint16_t bi_bytemask_of_read_components(bi_instr *ins, bi_index node);
 unsigned bi_writemask(bi_instr *ins);
 bi_clause * bi_next_clause(bi_context *ctx, pan_block *block, bi_clause *clause);
+bool bi_side_effects(enum bi_opcode op);
 
 void bi_print_instr(bi_instr *I, FILE *fp);
 void bi_print_slots(bi_registers *regs, FILE *fp);



More information about the mesa-commit mailing list