pan/bi: Add helper to debug port assignment
authorAlyssa Rosenzweig <alyssa.rosenzweig@collabora.com>
Sun, 5 Apr 2020 22:06:08 +0000 (18:06 -0400)
committerMarge Bot <eric+marge@anholt.net>
Sun, 5 Apr 2020 23:26:04 +0000 (23:26 +0000)
Signed-off-by: Alyssa Rosenzweig <alyssa.rosenzweig@collabora.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/4458>

src/panfrost/bifrost/bi_pack.c

index f1eb3be52b028052190bcc323e75eb4d71918ec7..8c91c0436d2cce944b6a8a64c399a32e0131b9b4 100644 (file)
@@ -77,6 +77,27 @@ struct bi_registers {
         bool first_instruction;
 };
 
+static inline void
+bi_print_ports(struct bi_registers *regs)
+{
+        for (unsigned i = 0; i < 2; ++i) {
+                if (regs->enabled[i])
+                        printf("port %u: %u\n", i, regs->port[i]);
+        }
+
+        if (regs->write_fma || regs->write_add) {
+                printf("port 2 (%s): %u\n",
+                                regs->write_fma ? "FMA" : "ADD",
+                                regs->port[2]);
+        }
+
+        if ((regs->write_fma && regs->write_add) || regs->read_port3) {
+                printf("port 3 (%s): %u\n",
+                                regs->read_port3 ? "read" : "ADD",
+                                regs->port[3]);
+        }
+}
+
 /* The uniform/constant slot allows loading a contiguous 64-bit immediate or
  * pushed uniform per bundle. Figure out which one we need in the bundle (the
  * scheduler needs to ensure we only have one type per bundle), validate
@@ -216,7 +237,11 @@ bi_assign_port_read(struct bi_registers *regs, unsigned src)
         if (!regs->read_port3) {
                 regs->port[3] = reg;
                 regs->read_port3 = true;
+                return;
         }
+
+        bi_print_ports(regs);
+        unreachable("Failed to find a free port for src");
 }
 
 static struct bi_registers