mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-01-02 03:00:24 +01:00
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:
parent
2f4f46b708
commit
2ffe44ec0a
1 changed files with 33 additions and 0 deletions
|
|
@ -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;
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue