summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/panfrost/midgard/midgard_liveness.c13
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;