pan/mdg: Add type fields to IR
authorAlyssa Rosenzweig <alyssa.rosenzweig@collabora.com>
Mon, 27 Apr 2020 22:43:12 +0000 (18:43 -0400)
committerMarge Bot <eric+marge@anholt.net>
Wed, 29 Apr 2020 15:35:54 +0000 (15:35 +0000)
Signed-off-by: Alyssa Rosenzweig <alyssa.rosenzweig@collabora.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/4793>

src/panfrost/midgard/compiler.h
src/panfrost/midgard/midgard_print.c

index 6b3028fbe7c0037f82c294a51adeb4364e5a1f87..92772e26a42754bb4e5f03613c9e2769c66b112b 100644 (file)
@@ -97,6 +97,10 @@ typedef struct midgard_instruction {
         /* vec16 swizzle, unpacked, per source */
         unsigned swizzle[MIR_SRC_COUNT][MIR_VEC_COMPONENTS];
 
+        /* Types! */
+        nir_alu_type src_types[MIR_SRC_COUNT];
+        nir_alu_type dest_type;
+
         /* Special fields for an ALU instruction */
         midgard_reg_info registers;
 
index 67104f3c7aa086139f907d7cfd65ef554dcdc000..60786fef53f3c5b8cfe7912a30b76b89fd43e6a4 100644 (file)
@@ -333,6 +333,7 @@ mir_print_instruction(midgard_instruction *ins)
 
         printf(" ");
         mir_print_index(ins->dest);
+        pan_print_alu_type(ins->dest_type, stdout);
 
         if (ins->mask != 0xF)
                 mir_print_mask(ins->mask);
@@ -345,6 +346,7 @@ mir_print_instruction(midgard_instruction *ins)
                 mir_print_embedded_constant(ins, 0);
         else {
                 mir_print_index(ins->src[0]);
+                pan_print_alu_type(ins->src_types[0], stdout);
                 mir_print_swizzle(ins->swizzle[0]);
         }
         printf(", ");
@@ -355,16 +357,16 @@ mir_print_instruction(midgard_instruction *ins)
                 mir_print_embedded_constant(ins, 1);
         else {
                 mir_print_index(ins->src[1]);
+                pan_print_alu_type(ins->src_types[1], stdout);
                 mir_print_swizzle(ins->swizzle[1]);
         }
 
-        printf(", ");
-        mir_print_index(ins->src[2]);
-        mir_print_swizzle(ins->swizzle[2]);
-
-        printf(", ");
-        mir_print_index(ins->src[3]);
-        mir_print_swizzle(ins->swizzle[3]);
+        for (unsigned c = 2; c <= 3; ++c) {
+                printf(", ");
+                mir_print_index(ins->src[c]);
+                pan_print_alu_type(ins->src_types[c], stdout);
+                mir_print_swizzle(ins->swizzle[c]);
+        }
 
         if (ins->no_spill)
                 printf(" /* no spill */");