From e14f8ee0e4706b8de78cfad9191c3596b649d0f8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marek=20Ol=C5=A1=C3=A1k?= Date: Fri, 21 Nov 2025 12:44:22 -0500 Subject: [PATCH] nir/has_divergent_loop: require divergence metadata, check all function impls instead of forcing callers to call nir_divergence_analysis Reviewed-by: Pierre-Eric Pelloux-Prayer Part-of: --- src/compiler/nir/nir_divergence_analysis.c | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/src/compiler/nir/nir_divergence_analysis.c b/src/compiler/nir/nir_divergence_analysis.c index 1fc7eb69ec9..dfc35393f73 100644 --- a/src/compiler/nir/nir_divergence_analysis.c +++ b/src/compiler/nir/nir_divergence_analysis.c @@ -1587,12 +1587,14 @@ nir_vertex_divergence_analysis(nir_shader *shader) bool nir_has_divergent_loop(nir_shader *shader) { - nir_function_impl *func = nir_shader_get_entrypoint(shader); + nir_foreach_function_impl(impl, shader) { + nir_metadata_require(impl, nir_metadata_divergence); - foreach_list_typed(nir_cf_node, node, node, &func->body) { - if (node->type == nir_cf_node_loop) { - if (nir_cf_node_as_loop(node)->divergent_break) - return true; + foreach_list_typed(nir_cf_node, node, node, &impl->body) { + if (node->type == nir_cf_node_loop) { + if (nir_cf_node_as_loop(node)->divergent_break) + return true; + } } }