pan/midgard: Localize visited
tracking
Instead of a property on the block, just track it within the function to minimize IR dependencies. Signed-off-by: Alyssa Rosenzweig <alyssa.rosenzweig@collabora.com> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/4150>
This commit is contained in:

committed by
Marge Bot

parent
218785c4a9
commit
3bbec3bc64
@@ -190,13 +190,6 @@ typedef struct midgard_block {
|
||||
|
||||
struct set *predecessors;
|
||||
|
||||
/* The successors pointer form a graph, and in the case of
|
||||
* complex control flow, this graph has a cycles. To aid
|
||||
* traversal during liveness analysis, we have a visited?
|
||||
* boolean for passes to use as they see fit, provided they
|
||||
* clean up later */
|
||||
bool visited;
|
||||
|
||||
/* In liveness analysis, these are live masks (per-component) for
|
||||
* indices for the block. Scalar compilers have the luxury of using
|
||||
* simple bit fields, but for us, liveness is a vector idea. */
|
||||
|
@@ -129,11 +129,15 @@ mir_compute_liveness(compiler_context *ctx)
|
||||
_mesa_hash_pointer,
|
||||
_mesa_key_pointer_equal);
|
||||
|
||||
struct set *visited = _mesa_set_create(ctx,
|
||||
_mesa_hash_pointer,
|
||||
_mesa_key_pointer_equal);
|
||||
|
||||
/* Allocate */
|
||||
|
||||
mir_foreach_block(ctx, block) {
|
||||
block->live_in = rzalloc_array(ctx, uint16_t, ctx->temp_count);
|
||||
block->live_out = rzalloc_array(ctx, uint16_t, ctx->temp_count);
|
||||
block->live_in = rzalloc_array(NULL, uint16_t, ctx->temp_count);
|
||||
block->live_out = rzalloc_array(NULL, uint16_t, ctx->temp_count);
|
||||
}
|
||||
|
||||
/* Initialize the work list with the exit block */
|
||||
@@ -154,20 +158,19 @@ mir_compute_liveness(compiler_context *ctx)
|
||||
|
||||
/* If we made progress, we need to process the predecessors */
|
||||
|
||||
if (progress || !blk->visited) {
|
||||
if (progress || !_mesa_set_search(visited, blk)) {
|
||||
mir_foreach_predecessor(blk, pred)
|
||||
_mesa_set_add(work_list, pred);
|
||||
}
|
||||
|
||||
blk->visited = true;
|
||||
_mesa_set_add(visited, blk);
|
||||
} while((cur = _mesa_set_next_entry(work_list, NULL)) != NULL);
|
||||
|
||||
_mesa_set_destroy(visited, NULL);
|
||||
_mesa_set_destroy(work_list, NULL);
|
||||
|
||||
/* Liveness is now valid */
|
||||
ctx->metadata |= MIDGARD_METADATA_LIVENESS;
|
||||
|
||||
mir_foreach_block(ctx, block) {
|
||||
block->visited = false;
|
||||
}
|
||||
}
|
||||
|
||||
/* Once liveness data is no longer valid, call this */
|
||||
|
Reference in New Issue
Block a user