From 42663165a26e4f172755c7b9f9b3ce9235118ca8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Daniel=20Sch=C3=BCrmann?= Date: Fri, 6 Mar 2026 12:01:44 +0100 Subject: [PATCH] vtn: set nir_loop::do_while during spirv_to_nir() Acked-by: Timothy Arceri Reviewed-by: Georg Lehmann Part-of: --- src/compiler/spirv/vtn_structured_cfg.c | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/src/compiler/spirv/vtn_structured_cfg.c b/src/compiler/spirv/vtn_structured_cfg.c index 5424c8dc55a..34db3519490 100644 --- a/src/compiler/spirv/vtn_structured_cfg.c +++ b/src/compiler/spirv/vtn_structured_cfg.c @@ -1220,6 +1220,14 @@ vtn_emit_branch(struct vtn_builder *b, const struct vtn_block *block, struct vtn_construct *loop = block->parent->innermost_loop; vtn_assert(loop); vtn_emit_break_for_construct(b, block, loop); + + /* If this is a conditional back-edge, flag this loop as do-while loop. + * The same applies to single-block loops. + */ + if (block->parent->type == vtn_construct_type_continue || + vtn_is_single_block_loop(loop)) { + loop->nloop->do_while = true; + } break; }