ir3: Properly validate pcopy reg sizes
authorConnor Abbott <cwabbott0@gmail.com>
Wed, 18 Aug 2021 12:43:48 +0000 (14:43 +0200)
committerMarge Bot <eric+marge@anholt.net>
Fri, 20 Aug 2021 10:37:36 +0000 (10:37 +0000)
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/12033>

src/freedreno/ir3/ir3_validate.c

index 4c07b02..4fe56b4 100644 (file)
@@ -185,6 +185,10 @@ validate_instr(struct ir3_validate_ctx *ctx, struct ir3_instruction *instr)
          /* handled below */
       } else if (opc_cat(instr->opc) == 0) {
          /* end/chmask/etc are allowed to have different size sources */
+      } else if (instr->opc == OPC_META_PARALLEL_COPY) {
+         /* pcopy sources have to match with their destination but can have
+          * different size.
+          */
       } else if (n > 0) {
          validate_assert(ctx, (last_reg->flags & IR3_REG_HALF) ==
                                  (reg->flags & IR3_REG_HALF));
@@ -322,6 +326,13 @@ validate_instr(struct ir3_validate_ctx *ctx, struct ir3_instruction *instr)
          break;
       }
    }
+
+   if (instr->opc == OPC_META_PARALLEL_COPY) {
+      foreach_src_n (src, n, instr) {
+         validate_assert(ctx, reg_class_flags(src) ==
+                         reg_class_flags(instr->dsts[n]));
+      }
+   }
 }
 
 void