Mesa (master): panfrost/midgard: Fix mir_print_instruction() for branch instructions

GitLab Mirror gitlab-mirror at kemper.freedesktop.org
Wed Jan 22 15:52:31 UTC 2020


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

Author: Boris Brezillon <boris.brezillon at collabora.com>
Date:   Mon Jan 20 21:44:49 2020 +0100

panfrost/midgard: Fix mir_print_instruction() for branch instructions

Branch instructions should not be treated as regular ALUs.

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

---

 src/panfrost/midgard/midgard_print.c | 38 +++++++++++++++++++++++++++++-------
 1 file changed, 31 insertions(+), 7 deletions(-)

diff --git a/src/panfrost/midgard/midgard_print.c b/src/panfrost/midgard/midgard_print.c
index 43bb671dc66..36a58259931 100644
--- a/src/panfrost/midgard/midgard_print.c
+++ b/src/panfrost/midgard/midgard_print.c
@@ -103,17 +103,41 @@ mir_print_instruction(midgard_instruction *ins)
 {
         printf("\t");
 
-        switch (ins->type) {
-        case TAG_ALU_4: {
-                midgard_alu_op op = ins->alu.op;
-                const char *name = alu_opcode_props[op].name;
-
+        if (midgard_is_branch_unit(ins->unit)) {
                 const char *branch_target_names[] = {
                         "goto", "break", "continue", "discard"
                 };
 
-                if (ins->compact_branch)
-                        name = branch_target_names[ins->branch.target_type];
+                printf("%s.", mir_get_unit(ins->unit));
+                if (ins->branch.target_type == TARGET_DISCARD)
+                        printf("discard.");
+                else if (ins->writeout)
+                        printf("write.");
+                else if (ins->unit == ALU_ENAB_BR_COMPACT &&
+                         !ins->branch.conditional)
+                        printf("uncond.");
+                else
+                        printf("cond.");
+
+                if (!ins->branch.conditional)
+                        printf("always");
+                else if (ins->branch.invert_conditional)
+                        printf("false");
+                else
+                        printf("true");
+
+                if (ins->branch.target_type != TARGET_DISCARD)
+                        printf(" %s -> block(%d)\n",
+                               branch_target_names[ins->branch.target_type],
+                               ins->branch.target_block);
+
+                return;
+        }
+
+        switch (ins->type) {
+        case TAG_ALU_4: {
+                midgard_alu_op op = ins->alu.op;
+                const char *name = alu_opcode_props[op].name;
 
                 if (ins->unit)
                         printf("%s.", mir_get_unit(ins->unit));



More information about the mesa-commit mailing list