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: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/39934>
This commit is contained in:
Daniel Schürmann 2026-02-17 10:24:18 +01:00 committed by Marge Bot
parent a57b900a59
commit eabd7cc22c

View file

@ -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;