pan/bi: Add trivial rewrite helpers
authorAlyssa Rosenzweig <alyssa.rosenzweig@collabora.com>
Sat, 6 Feb 2021 00:52:18 +0000 (19:52 -0500)
committerMarge Bot <eric+marge@anholt.net>
Mon, 8 Feb 2021 14:07:29 +0000 (14:07 +0000)
We need to do certain rewrites during scheduling before RA runs in order
to satsify scheduler post-conditions.

Signed-off-by: Alyssa Rosenzweig <alyssa.rosenzweig@collabora.com>
Reviewed-by: Boris Brezillon <boris.brezillon@collabora.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/8354>

src/panfrost/bifrost/bi_schedule.c

index c976df5..fab8b09 100644 (file)
@@ -890,6 +890,32 @@ bi_rewrite_passthrough(bi_tuple prec, bi_tuple succ)
         }
 }
 
+static void
+bi_rewrite_fau_to_pass(bi_tuple *tuple)
+{
+        bi_foreach_instr_and_src_in_tuple(tuple, ins, s) {
+                if (ins->src[s].type != BI_INDEX_FAU) continue;
+
+                ins->src[s] = bi_passthrough(ins->src[s].offset ?
+                                BIFROST_SRC_FAU_HI : BIFROST_SRC_FAU_LO);
+        }
+}
+
+static void
+bi_rewrite_zero(bi_instr *ins, bool fma)
+{
+        bi_foreach_src(ins, s) {
+                bi_index src = ins->src[s];
+                unsigned swizzle = src.swizzle;
+
+                if (src.type == BI_INDEX_CONSTANT && src.value == 0) {
+                        assert(!src.abs && !src.neg);
+                        ins->src[s] = bi_passthrough(
+                                        fma ? BIFROST_SRC_STAGE : BIFROST_SRC_FAU_LO);
+                        ins->src[s].swizzle = swizzle;
+                }
+        }
+}
 
 #ifndef NDEBUG