diff options
Diffstat (limited to 'src/freedreno/ir3/ir3_liveness.c')
-rw-r--r-- | src/freedreno/ir3/ir3_liveness.c | 14 |
1 files changed, 14 insertions, 0 deletions
diff --git a/src/freedreno/ir3/ir3_liveness.c b/src/freedreno/ir3/ir3_liveness.c index 4285c7dc7cf..86e4a0fa1e7 100644 --- a/src/freedreno/ir3/ir3_liveness.c +++ b/src/freedreno/ir3/ir3_liveness.c @@ -96,6 +96,20 @@ compute_block_liveness(struct ir3_liveness *live, struct ir3_block *block, } } } + + for (unsigned i = 0; i < block->physical_predecessors_count; i++) { + const struct ir3_block *pred = block->physical_predecessors[i]; + unsigned name; + BITSET_FOREACH_SET(name, tmp_live, live->definitions_count) { + struct ir3_register *reg = live->definitions[name]; + if (!(reg->flags & IR3_REG_SHARED)) + continue; + if (!BITSET_TEST(live->live_out[pred->index], name)) { + progress = true; + BITSET_SET(live->live_out[pred->index], name); + } + } + } return progress; } |