nir: Apply passes to all functions
Reviewed-by: Alyssa Rosenzweig <alyssa@rosenzweig.io> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/29577>
This commit is contained in:
committed by
Marge Bot
parent
bb40284f76
commit
a8ce60eec1
@@ -1458,8 +1458,10 @@ void
|
||||
nir_divergence_analysis(nir_shader *shader)
|
||||
{
|
||||
shader->info.divergence_analysis_run = true;
|
||||
nir_divergence_analysis_impl(nir_shader_get_entrypoint(shader),
|
||||
shader->options->divergence_analysis_options);
|
||||
nir_foreach_function_impl(impl, shader) {
|
||||
nir_divergence_analysis_impl(impl,
|
||||
shader->options->divergence_analysis_options);
|
||||
}
|
||||
}
|
||||
|
||||
/* Compute divergence between vertices of the same primitive. This uses
|
||||
@@ -1474,7 +1476,6 @@ nir_vertex_divergence_analysis(nir_shader *shader)
|
||||
struct divergence_state state = {
|
||||
.stage = shader->info.stage,
|
||||
.shader = shader,
|
||||
.impl = nir_shader_get_entrypoint(shader),
|
||||
.options = shader->options->divergence_analysis_options,
|
||||
.loop = NULL,
|
||||
.loop_all_invariant = false,
|
||||
@@ -1482,10 +1483,12 @@ nir_vertex_divergence_analysis(nir_shader *shader)
|
||||
.first_visit = true,
|
||||
};
|
||||
|
||||
nir_metadata_require(nir_shader_get_entrypoint(shader),
|
||||
nir_metadata_block_index);
|
||||
visit_cf_list(&nir_shader_get_entrypoint(shader)->body, &state);
|
||||
nir_metadata_preserve(nir_shader_get_entrypoint(shader), nir_metadata_all);
|
||||
nir_foreach_function_impl(impl, shader) {
|
||||
nir_metadata_require(impl, nir_metadata_block_index);
|
||||
state.impl = impl;
|
||||
visit_cf_list(&impl->body, &state);
|
||||
nir_metadata_preserve(impl, nir_metadata_all);
|
||||
}
|
||||
}
|
||||
|
||||
bool
|
||||
|
||||
@@ -956,7 +956,8 @@ gather_func_info(nir_function_impl *func, nir_shader *shader,
|
||||
|
||||
if (!call->indirect_callee.ssa)
|
||||
assert(impl || !"nir_shader_gather_info only works with linked shaders");
|
||||
gather_func_info(impl, shader, visited_funcs, dead_ctx);
|
||||
if (impl)
|
||||
gather_func_info(impl, shader, visited_funcs, dead_ctx);
|
||||
break;
|
||||
}
|
||||
default:
|
||||
|
||||
@@ -229,21 +229,24 @@ nir_lower_memory_model(nir_shader *shader)
|
||||
{
|
||||
bool progress = false;
|
||||
|
||||
nir_function_impl *impl = nir_shader_get_entrypoint(shader);
|
||||
struct exec_list *cf_list = &impl->body;
|
||||
nir_foreach_function_impl(impl, shader) {
|
||||
bool impl_progress = false;
|
||||
struct exec_list *cf_list = &impl->body;
|
||||
|
||||
uint32_t modes = 0;
|
||||
foreach_list_typed(nir_cf_node, cf_node, node, cf_list)
|
||||
progress |= lower_make_visible(cf_node, &modes);
|
||||
uint32_t modes = 0;
|
||||
foreach_list_typed(nir_cf_node, cf_node, node, cf_list)
|
||||
impl_progress |= lower_make_visible(cf_node, &modes);
|
||||
|
||||
modes = 0;
|
||||
foreach_list_typed_reverse(nir_cf_node, cf_node, node, cf_list)
|
||||
progress |= lower_make_available(cf_node, &modes);
|
||||
modes = 0;
|
||||
foreach_list_typed_reverse(nir_cf_node, cf_node, node, cf_list)
|
||||
impl_progress |= lower_make_available(cf_node, &modes);
|
||||
|
||||
if (progress)
|
||||
nir_metadata_preserve(impl, nir_metadata_control_flow);
|
||||
else
|
||||
nir_metadata_preserve(impl, nir_metadata_all);
|
||||
if (impl_progress)
|
||||
nir_metadata_preserve(impl, nir_metadata_control_flow);
|
||||
else
|
||||
nir_metadata_preserve(impl, nir_metadata_all);
|
||||
progress |= impl_progress;
|
||||
}
|
||||
|
||||
return progress;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user