freedreno/ir3: assert that only single address

An instruction can reference only a single address register value.
Add an assert to catch bugs.

Also, address value should also be local to the same block as the
instruction.

(The one spot where changing the instruction address is actually legit
needs to clear the address first.)

Signed-off-by: Rob Clark <robdclark@chromium.org>
Reviewed-by: Eric Anholt <eric@anholt.net>
This commit is contained in:
Rob Clark
2019-09-02 10:08:37 -07:00
committed by Rob Clark
parent f94f22e87a
commit e59bfc820b
2 changed files with 5 additions and 0 deletions
+4
View File
@@ -1041,6 +1041,10 @@ ir3_instr_set_address(struct ir3_instruction *instr,
{
if (instr->address != addr) {
struct ir3 *ir = instr->block->shader;
debug_assert(!instr->address);
debug_assert(instr->block == addr->block);
instr->address = addr;
array_insert(ir, ir->indirects, instr);
}
+1
View File
@@ -709,6 +709,7 @@ split_addr(struct ir3_sched_ctx *ctx)
/* original addr is scheduled, but new one isn't: */
new_addr->flags &= ~IR3_INSTR_MARK;
}
indirect->address = NULL;
ir3_instr_set_address(indirect, new_addr);
}
}