From eabd7cc22cfef6d6e22382935ee7d208a7116702 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Daniel=20Sch=C3=BCrmann?= Date: Tue, 17 Feb 2026 10:24:18 +0100 Subject: [PATCH] nir/divergence: Fix nir_block::divergent in presence of divergent breaks If no second pass is necessary, we might miss setting nir_block::divergent to true, if a loop has a divergent break. Part-of: --- src/compiler/nir/nir_divergence_analysis.c | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/src/compiler/nir/nir_divergence_analysis.c b/src/compiler/nir/nir_divergence_analysis.c index f7b3344fae6..7ce64981fca 100644 --- a/src/compiler/nir/nir_divergence_analysis.c +++ b/src/compiler/nir/nir_divergence_analysis.c @@ -1523,6 +1523,12 @@ visit_loop(nir_loop *loop, struct divergence_state *state) loop_state.first_visit = false; } while (repeat); + /* Ensure that nir_block::divergent is set correctly. */ + if (loop_state.divergent_loop_break || state->divergent_cf) { + nir_foreach_block_in_cf_node(block, &loop->cf_node) + block->divergent = true; + } + loop->divergent_continue = loop_state.divergent_loop_continue; loop->divergent_break = loop_state.divergent_loop_break;