agx: Add loop header? flag
authorAlyssa Rosenzweig <alyssa@rosenzweig.io>
Mon, 15 May 2023 21:17:05 +0000 (17:17 -0400)
committerMarge Bot <emma+marge@anholt.net>
Fri, 23 Jun 2023 17:37:41 +0000 (17:37 +0000)
This is useful for deciding whether we need to fix up phis in RA.

Signed-off-by: Alyssa Rosenzweig <alyssa@rosenzweig.io>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/23832>

src/asahi/compiler/agx_compile.c
src/asahi/compiler/agx_compiler.h

index 310aaf1..a364b12 100644 (file)
@@ -1738,6 +1738,7 @@ emit_loop(agx_context *ctx, nir_loop *nloop)
 
    /* Emit the body */
    ctx->after_block = ctx->continue_block;
+   ctx->after_block->loop_header = true;
    agx_block *start_block = emit_cf_list(ctx, &nloop->body);
 
    /* Fix up the nesting counter via an always true while_icmp, and branch back
index 9bcf3da..4e7ff0e 100644 (file)
@@ -358,6 +358,11 @@ typedef struct agx_block {
    /* Register allocation */
    BITSET_DECLARE(regs_out, AGX_NUM_REGS);
 
+   /* Is this block a loop header? If not, all of its predecessors precede it in
+    * source order.
+    */
+   bool loop_header;
+
    /* Offset of the block in the emitted binary */
    off_t offset;