diff options
-rw-r--r-- | src/panfrost/midgard/midgard_liveness.c | 13 |
1 files changed, 13 insertions, 0 deletions
diff --git a/src/panfrost/midgard/midgard_liveness.c b/src/panfrost/midgard/midgard_liveness.c index a18d8b9f8ad..899c8eaa00f 100644 --- a/src/panfrost/midgard/midgard_liveness.c +++ b/src/panfrost/midgard/midgard_liveness.c @@ -60,11 +60,24 @@ is_live_after_successors(compiler_context *ctx, midgard_block *bl, int src) succ->visited = true; + /* Within this block, check if it's overwritten first */ + bool block_done = false; + mir_foreach_instr_in_block(succ, ins) { if (midgard_is_live_in_instr(ins, src)) return true; + + /* If written-before-use, we're gone */ + + if (ins->ssa_args.dest == src && ins->type == TAG_LOAD_STORE_4 && ins->load_store.op == midgard_op_ld_int4 && ins->load_store.unknown == 0x1EEA) { + block_done = true; + break; + } } + if (block_done) + continue; + /* ...and also, check *its* successors */ if (is_live_after_successors(ctx, succ, src)) return true; |