nir/opt_vectorize: Add a callback for filtering of vectorizing.
[mesa.git] / src / panfrost / util / pan_ir.c
index 95f8e6b53269000e58b1771526342f05edcad3bc..4fdb9ebabff44c73060e74785facff7246fc086a 100644 (file)
@@ -33,6 +33,10 @@ uint16_t
 pan_to_bytemask(unsigned bytes, unsigned mask)
 {
         switch (bytes) {
+        case 0:
+                assert(mask == 0);
+                return 0;
+
         case 8:
                 return mask;
 
@@ -70,3 +74,54 @@ pan_to_bytemask(unsigned bytes, unsigned mask)
                 unreachable("Invalid register mode");
         }
 }
+
+void
+pan_block_add_successor(pan_block *block, pan_block *successor)
+{
+        assert(block);
+        assert(successor);
+
+        for (unsigned i = 0; i < ARRAY_SIZE(block->successors); ++i) {
+                if (block->successors[i]) {
+                       if (block->successors[i] == successor)
+                               return;
+                       else
+                               continue;
+                }
+
+                block->successors[i] = successor;
+                _mesa_set_add(successor->predecessors, block);
+                return;
+        }
+
+        unreachable("Too many successors");
+}
+
+/* Prints a NIR ALU type in Bifrost-style ".f32" ".i8" etc */
+
+void
+pan_print_alu_type(nir_alu_type t, FILE *fp)
+{
+        unsigned size = nir_alu_type_get_type_size(t);
+        nir_alu_type base = nir_alu_type_get_base_type(t);
+
+        switch (base) {
+        case nir_type_int:
+                fprintf(fp, ".i");
+                break;
+        case nir_type_uint:
+                fprintf(fp, ".u");
+                break;
+        case nir_type_bool:
+                fprintf(fp, ".b");
+                break;
+        case nir_type_float:
+                fprintf(fp, ".f");
+                break;
+        default:
+                fprintf(fp, ".unknown");
+                break;
+        }
+
+        fprintf(fp, "%u", size);
+}