Mesa (main): pan/bi: Copy back add_successor
GitLab Mirror
gitlab-mirror at kemper.freedesktop.org
Sun Jul 18 02:03:17 UTC 2021
Module: Mesa
Branch: main
Commit: 8bee48a635be1ec1397416b9099a5f86767949cf
URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=8bee48a635be1ec1397416b9099a5f86767949cf
Author: Alyssa Rosenzweig <alyssa at collabora.com>
Date: Fri Jul 16 18:22:54 2021 -0400
pan/bi: Copy back add_successor
Trying to get back independent block types.
Signed-off-by: Alyssa Rosenzweig <alyssa at collabora.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/11936>
---
src/panfrost/bifrost/bifrost_compile.c | 41 +++++++++++++++++++++++++++-------
1 file changed, 33 insertions(+), 8 deletions(-)
diff --git a/src/panfrost/bifrost/bifrost_compile.c b/src/panfrost/bifrost/bifrost_compile.c
index 594d02d9b46..84bc4d2bd0a 100644
--- a/src/panfrost/bifrost/bifrost_compile.c
+++ b/src/panfrost/bifrost/bifrost_compile.c
@@ -63,6 +63,31 @@ int bifrost_debug = 0;
static bi_block *emit_cf_list(bi_context *ctx, struct exec_list *list);
+static void
+bi_block_add_successor(bi_block *block, bi_block *successor)
+{
+ assert(block != NULL && successor != NULL);
+
+ /* Cull impossible edges */
+ if (block->base.unconditional_jumps)
+ return;
+
+ for (unsigned i = 0; i < ARRAY_SIZE(block->base.successors); ++i) {
+ if (block->base.successors[i]) {
+ if (block->base.successors[i] == (pan_block *) successor)
+ return;
+ else
+ continue;
+ }
+
+ block->base.successors[i] = (void *) successor;
+ _mesa_set_add(successor->base.predecessors, block);
+ return;
+ }
+
+ unreachable("Too many successors");
+}
+
static void
bi_emit_jump(bi_builder *b, nir_jump_instr *instr)
{
@@ -79,7 +104,7 @@ bi_emit_jump(bi_builder *b, nir_jump_instr *instr)
unreachable("Unhandled jump type");
}
- pan_block_add_successor(&b->shader->current_block->base, &branch->branch_target->base);
+ bi_block_add_successor(b->shader->current_block, branch->branch_target);
b->shader->current_block->base.unconditional_jumps = true;
}
@@ -2861,7 +2886,7 @@ emit_if(bi_context *ctx, nir_if *nif)
if (ctx->instruction_count == count_in) {
then_branch->branch_target = ctx->after_block;
- pan_block_add_successor(&end_then_block->base, &ctx->after_block->base); /* fallthrough */
+ bi_block_add_successor(end_then_block, ctx->after_block); /* fallthrough */
} else {
then_branch->branch_target = else_block;
@@ -2870,12 +2895,12 @@ emit_if(bi_context *ctx, nir_if *nif)
bi_instr *then_exit = bi_jump(&_b, bi_zero());
then_exit->branch_target = ctx->after_block;
- pan_block_add_successor(&end_then_block->base, &then_exit->branch_target->base);
- pan_block_add_successor(&end_else_block->base, &ctx->after_block->base); /* fallthrough */
+ bi_block_add_successor(end_then_block, then_exit->branch_target);
+ bi_block_add_successor(end_else_block, ctx->after_block); /* fallthrough */
}
- pan_block_add_successor(&before_block->base, &then_branch->branch_target->base); /* then_branch */
- pan_block_add_successor(&before_block->base, &then_block->base); /* fallthrough */
+ bi_block_add_successor(before_block, then_branch->branch_target); /* then_branch */
+ bi_block_add_successor(before_block, then_block); /* fallthrough */
}
static void
@@ -2898,8 +2923,8 @@ emit_loop(bi_context *ctx, nir_loop *nloop)
bi_builder _b = bi_init_builder(ctx, bi_after_block(ctx->current_block));
bi_instr *I = bi_jump(&_b, bi_zero());
I->branch_target = ctx->continue_block;
- pan_block_add_successor(&start_block->base, &ctx->continue_block->base);
- pan_block_add_successor(&ctx->current_block->base, &ctx->continue_block->base);
+ bi_block_add_successor(start_block, ctx->continue_block);
+ bi_block_add_successor(ctx->current_block, ctx->continue_block);
ctx->after_block = ctx->break_block;
More information about the mesa-commit
mailing list