freedreno/ir3: add RA sanity check

Signed-off-by: Rob Clark <robdclark@chromium.org>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/merge_requests/3569>
This commit is contained in:
Rob Clark 2020-01-15 14:52:43 -08:00 committed by Marge Bot
parent 2f4f46b708
commit 2ffe44ec0a

View file

@ -1441,6 +1441,31 @@ ra_alloc(struct ir3_ra_ctx *ctx)
return 0;
}
/* if we end up with split/collect instructions with non-matching src
* and dest regs, that means something has gone wrong. Which makes it
* a pretty good sanity check.
*/
static void
ra_sanity_check(struct ir3 *ir)
{
foreach_block (block, &ir->block_list) {
foreach_instr (instr, &block->instr_list) {
if (instr->opc == OPC_META_SPLIT) {
struct ir3_register *dst = instr->regs[0];
struct ir3_register *src = instr->regs[1];
debug_assert(dst->num == (src->num + instr->split.off));
} else if (instr->opc == OPC_META_COLLECT) {
struct ir3_register *dst = instr->regs[0];
struct ir3_register *src;
foreach_src_n (src, n, instr) {
debug_assert(dst->num == (src->num - n));
}
}
}
}
}
static int
ir3_ra_pass(struct ir3_shader_variant *v, struct ir3_instruction **precolor,
unsigned nprecolor, bool scalar_pass)
@ -1490,5 +1515,13 @@ ir3_ra(struct ir3_shader_variant *v, struct ir3_instruction **precolor,
ir3_print(v->ir);
}
#ifdef DEBUG
# define SANITY_CHECK DEBUG
#else
# define SANITY_CHECK 0
#endif
if (SANITY_CHECK)
ra_sanity_check(v->ir);
return ret;
}