diff --git a/src/freedreno/ir3/ir3_validate.c b/src/freedreno/ir3/ir3_validate.c index 4c07b02159b..4fe56b45c9c 100644 --- a/src/freedreno/ir3/ir3_validate.c +++ b/src/freedreno/ir3/ir3_validate.c @@ -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