radv_optimize_nir(ordered_shaders[i - 1], false, false);
nir_remove_dead_variables(ordered_shaders[i],
- nir_var_shader_out);
+ nir_var_shader_out, NULL);
nir_remove_dead_variables(ordered_shaders[i - 1],
- nir_var_shader_in);
+ nir_var_shader_in, NULL);
bool progress = nir_remove_unused_varyings(ordered_shaders[i],
ordered_shaders[i - 1]);
NIR_PASS(progress, shader, nir_opt_copy_prop_vars);
NIR_PASS(progress, shader, nir_opt_dead_write_vars);
NIR_PASS(progress, shader, nir_remove_dead_variables,
- nir_var_function_temp | nir_var_shader_in | nir_var_shader_out);
+ nir_var_function_temp | nir_var_shader_in | nir_var_shader_out,
+ NULL);
NIR_PASS_V(shader, nir_lower_alu_to_scalar, NULL, NULL);
NIR_PASS_V(shader, nir_lower_phis_to_scalar);
NIR_PASS_V(nir, nir_lower_input_attachments, true);
NIR_PASS_V(nir, nir_remove_dead_variables,
- nir_var_shader_in | nir_var_shader_out | nir_var_system_value | nir_var_mem_shared);
+ nir_var_shader_in | nir_var_shader_out | nir_var_system_value | nir_var_mem_shared,
+ NULL);
NIR_PASS_V(nir, nir_propagate_invariant);
nir_split_var_copies(nir);
nir_lower_global_vars_to_local(nir);
- nir_remove_dead_variables(nir, nir_var_function_temp);
+ nir_remove_dead_variables(nir, nir_var_function_temp, NULL);
bool gfx7minus = device->physical_device->rad_info.chip_class <= GFX7;
nir_lower_subgroups(nir, &(struct nir_lower_subgroups_options) {
.subgroup_size = subgroup_size,
&c->s->outputs, used_outputs, NULL); /* demotes to globals */
NIR_PASS_V(c->s, nir_lower_global_vars_to_local);
v3d_optimize_nir(c->s);
- NIR_PASS_V(c->s, nir_remove_dead_variables, nir_var_shader_in);
+ NIR_PASS_V(c->s, nir_remove_dead_variables, nir_var_shader_in, NULL);
/* This must go before nir_lower_io */
if (c->vs_key->per_vertex_point_size)
&c->s->outputs, used_outputs, NULL); /* demotes to globals */
NIR_PASS_V(c->s, nir_lower_global_vars_to_local);
v3d_optimize_nir(c->s);
- NIR_PASS_V(c->s, nir_remove_dead_variables, nir_var_shader_in);
+ NIR_PASS_V(c->s, nir_remove_dead_variables, nir_var_shader_in, NULL);
/* This must go before nir_lower_io */
if (c->gs_key->per_vertex_point_size)
bool nir_remove_dead_derefs(nir_shader *shader);
bool nir_remove_dead_derefs_impl(nir_function_impl *impl);
-bool nir_remove_dead_variables(nir_shader *shader, nir_variable_mode modes);
+bool nir_remove_dead_variables(nir_shader *shader, nir_variable_mode modes,
+ bool (*can_remove_var)(nir_variable *var));
bool nir_lower_variable_initializers(nir_shader *shader,
nir_variable_mode modes);
}
static bool
-remove_dead_vars(struct exec_list *var_list, struct set *live)
+remove_dead_vars(struct exec_list *var_list, struct set *live,
+ bool (*can_remove_var)(nir_variable *var))
{
bool progress = false;
foreach_list_typed_safe(nir_variable, var, node, var_list) {
+ if (can_remove_var && !can_remove_var(var))
+ continue;
+
struct set_entry *entry = _mesa_set_search(live, var);
if (entry == NULL) {
/* Mark this variable as used by setting the mode to 0 */
}
bool
-nir_remove_dead_variables(nir_shader *shader, nir_variable_mode modes)
+nir_remove_dead_variables(nir_shader *shader, nir_variable_mode modes,
+ bool (*can_remove_var)(nir_variable *var))
{
bool progress = false;
struct set *live = _mesa_pointer_set_create(NULL);
add_var_use_shader(shader, live, modes);
- if (modes & nir_var_uniform)
- progress = remove_dead_vars(&shader->uniforms, live) || progress;
+ if (modes & nir_var_uniform) {
+ progress = remove_dead_vars(&shader->uniforms, live, can_remove_var) ||
+ progress;
+ }
- if (modes & nir_var_shader_in)
- progress = remove_dead_vars(&shader->inputs, live) || progress;
+ if (modes & nir_var_shader_in) {
+ progress = remove_dead_vars(&shader->inputs, live, can_remove_var) ||
+ progress;
+ }
- if (modes & nir_var_shader_out)
- progress = remove_dead_vars(&shader->outputs, live) || progress;
+ if (modes & nir_var_shader_out) {
+ progress = remove_dead_vars(&shader->outputs, live, can_remove_var) ||
+ progress;
+ }
- if (modes & nir_var_shader_temp)
- progress = remove_dead_vars(&shader->globals, live) || progress;
+ if (modes & nir_var_shader_temp) {
+ progress = remove_dead_vars(&shader->globals, live, can_remove_var) ||
+ progress;
+ }
- if (modes & nir_var_system_value)
- progress = remove_dead_vars(&shader->system_values, live) || progress;
+ if (modes & nir_var_system_value) {
+ progress = remove_dead_vars(&shader->system_values, live,
+ can_remove_var) || progress;
+ }
- if (modes & nir_var_mem_shared)
- progress = remove_dead_vars(&shader->shared, live) || progress;
+ if (modes & nir_var_mem_shared) {
+ progress = remove_dead_vars(&shader->shared, live, can_remove_var) ||
+ progress;
+ }
if (modes & nir_var_function_temp) {
nir_foreach_function(function, shader) {
if (function->impl) {
- if (remove_dead_vars(&function->impl->locals, live))
+ if (remove_dead_vars(&function->impl->locals, live,
+ can_remove_var))
progress = true;
}
}
*/
nir_lower_variable_initializers(b->shader, nir_var_shader_out);
nir_remove_dead_variables(b->shader,
- nir_var_shader_in | nir_var_shader_out);
+ nir_var_shader_in | nir_var_shader_out, NULL);
/* We sometimes generate bogus derefs that, while never used, give the
* validator a bit of heartburn. Run dead code to get rid of them.
OPT_V(s, nir_opt_cse);
}
- OPT_V(s, nir_remove_dead_variables, nir_var_function_temp);
+ OPT_V(s, nir_remove_dead_variables, nir_var_function_temp, NULL);
OPT_V(s, nir_opt_sink, nir_move_const_undef);
NIR_PASS_V(nir, nir_split_per_member_structs);
NIR_PASS_V(nir, nir_remove_dead_variables,
- nir_var_shader_in | nir_var_shader_out | nir_var_system_value | nir_var_mem_shared);
+ nir_var_shader_in | nir_var_shader_out | nir_var_system_value | nir_var_mem_shared,
+ NULL);
/* Gather information for transform feedback.
* This should be called after nir_split_per_member_structs.
nir_convert_from_ssa(nir, true);
nir_lower_locals_to_regs(nir);
nir_remove_dead_derefs(nir);
- nir_remove_dead_variables(nir, nir_var_function_temp);
+ nir_remove_dead_variables(nir, nir_var_function_temp, NULL);
nir_foreach_variable(variable, &nir->outputs)
handle_shader_output_decl(bld_base, nir, variable);
while( OPT(s, nir_opt_vectorize) );
OPT_V(s, nir_lower_alu_to_scalar, etna_alu_to_scalar_filter_cb, specs);
- NIR_PASS_V(s, nir_remove_dead_variables, nir_var_function_temp);
+ NIR_PASS_V(s, nir_remove_dead_variables, nir_var_function_temp, NULL);
NIR_PASS_V(s, nir_opt_algebraic_late);
NIR_PASS_V(s, nir_move_vec_src_uses_to_dest);
ir2_optimize_loop(s);
- OPT_V(s, nir_remove_dead_variables, nir_var_function_temp);
+ OPT_V(s, nir_remove_dead_variables, nir_var_function_temp, NULL);
OPT_V(s, nir_opt_sink, nir_move_const_undef);
/* TODO we dont want to get shaders writing to depth for depth textures */
NIR_PASS_V(s, nir_opt_dce);
NIR_PASS_V(s, nir_lower_locals_to_regs);
NIR_PASS_V(s, nir_convert_from_ssa, true);
- NIR_PASS_V(s, nir_remove_dead_variables, nir_var_function_temp);
+ NIR_PASS_V(s, nir_remove_dead_variables, nir_var_function_temp, NULL);
nir_sweep(s);
}
NIR_PASS_V(s, nir_lower_locals_to_regs);
NIR_PASS_V(s, nir_convert_from_ssa, true);
- NIR_PASS_V(s, nir_remove_dead_variables, nir_var_function_temp);
+ NIR_PASS_V(s, nir_remove_dead_variables, nir_var_function_temp, NULL);
NIR_PASS_V(s, nir_move_vec_src_uses_to_dest);
NIR_PASS_V(s, nir_lower_vec_to_movs);
NIR_PASS_V(nir, nir_lower_bool_to_int32);
NIR_PASS_V(nir, nir_lower_locals_to_regs);
- NIR_PASS_V(nir, nir_remove_dead_variables, nir_var_function_temp);
+ NIR_PASS_V(nir, nir_remove_dead_variables, nir_var_function_temp, NULL);
NIR_PASS_V(nir, nir_convert_from_ssa, true);
// Garbage collect dead instructions
if (optimize)
while(optimize_once(sel->nir));
- NIR_PASS_V(sel->nir, nir_remove_dead_variables, nir_var_shader_in);
- NIR_PASS_V(sel->nir, nir_remove_dead_variables, nir_var_shader_out);
+ NIR_PASS_V(sel->nir, nir_remove_dead_variables, nir_var_shader_in, NULL);
+ NIR_PASS_V(sel->nir, nir_remove_dead_variables, nir_var_shader_out, NULL);
NIR_PASS_V(sel->nir, nir_lower_vars_to_scratch,
si_nir_opts(nir);
NIR_PASS_V(nir, nir_lower_bool_to_int32);
- NIR_PASS_V(nir, nir_remove_dead_variables, nir_var_function_temp);
+ NIR_PASS_V(nir, nir_remove_dead_variables, nir_var_function_temp, NULL);
if (sscreen->debug_flags & DBG(FS_CORRECT_DERIVS_AFTER_KILL))
NIR_PASS_V(nir, nir_lower_discard_to_demote);
v3d_optimize_nir(s);
- NIR_PASS_V(s, nir_remove_dead_variables, nir_var_function_temp);
+ NIR_PASS_V(s, nir_remove_dead_variables, nir_var_function_temp, NULL);
/* Garbage collect dead instructions */
nir_sweep(s);
vc4_optimize_nir(s);
- NIR_PASS_V(s, nir_remove_dead_variables, nir_var_function_temp);
+ NIR_PASS_V(s, nir_remove_dead_variables, nir_var_function_temp, NULL);
/* Garbage collect dead instructions */
nir_sweep(s);
NIR_PASS_V(nir, nir_lower_clip_halfz);
NIR_PASS_V(nir, nir_lower_regs_to_ssa);
optimize_nir(nir);
- NIR_PASS_V(nir, nir_remove_dead_variables, nir_var_function_temp);
+ NIR_PASS_V(nir, nir_remove_dead_variables, nir_var_function_temp, NULL);
NIR_PASS_V(nir, lower_discard_if);
NIR_PASS_V(nir, nir_convert_from_ssa, true);
wm_prog_data->base.binding_table.texture_start = BLORP_TEXTURE_BT_INDEX;
brw_preprocess_nir(compiler, nir, NULL);
- nir_remove_dead_variables(nir, nir_var_shader_in);
+ nir_remove_dead_variables(nir, nir_var_shader_in, NULL);
nir_shader_gather_info(nir, nir_shader_get_entrypoint(nir));
if (blorp->compiler->devinfo->gen < 6) {
/* Workaround Gfxbench unused local sampler variable which will trigger an
* assert in the opt_large_constants pass.
*/
- OPT(nir_remove_dead_variables, nir_var_function_temp);
+ OPT(nir_remove_dead_variables, nir_var_function_temp, NULL);
}
static unsigned
if (nir_link_opt_varyings(producer, consumer))
brw_nir_optimize(consumer, compiler, c_is_scalar, false);
- NIR_PASS_V(producer, nir_remove_dead_variables, nir_var_shader_out);
- NIR_PASS_V(consumer, nir_remove_dead_variables, nir_var_shader_in);
+ NIR_PASS_V(producer, nir_remove_dead_variables, nir_var_shader_out, NULL);
+ NIR_PASS_V(consumer, nir_remove_dead_variables, nir_var_shader_in, NULL);
if (nir_remove_unused_varyings(producer, consumer)) {
NIR_PASS_V(producer, nir_lower_global_vars_to_local);
NIR_PASS_V(nir, nir_split_per_member_structs);
NIR_PASS_V(nir, nir_remove_dead_variables,
- nir_var_shader_in | nir_var_shader_out | nir_var_system_value);
+ nir_var_shader_in | nir_var_shader_out | nir_var_system_value,
+ NULL);
NIR_PASS_V(nir, nir_propagate_invariant);
NIR_PASS_V(nir, nir_lower_io_to_temporaries,
}
assert (nir);
- nir_remove_dead_variables(nir, nir_var_shader_in | nir_var_shader_out);
+ nir_remove_dead_variables(nir, nir_var_shader_in | nir_var_shader_out,
+ NULL);
nir_validate_shader(nir, "after glsl_to_nir or spirv_to_nir");
NIR_PASS_V(nir, nir_lower_io_to_temporaries,
nir_shader_get_entrypoint(nir), true, false);
NIR_PASS(progress, nir, nir_remove_dead_variables,
(nir_variable_mode)(nir_var_function_temp |
nir_var_shader_temp |
- nir_var_mem_shared));
+ nir_var_mem_shared),
+ NULL);
NIR_PASS(progress, nir, nir_opt_copy_prop_vars);
NIR_PASS(progress, nir, nir_opt_dead_write_vars);
if (!_mesa_is_gles(st->ctx) || !nir->info.separate_shader) {
nir_variable_mode mask =
(nir_variable_mode) (nir_var_shader_in | nir_var_shader_out);
- nir_remove_dead_variables(nir, mask);
+ nir_remove_dead_variables(nir, mask, NULL);
}
if (options->lower_all_io_to_temps ||
nir_variable_mode mask = (nir_variable_mode)
(nir_var_shader_in | nir_var_shader_out | nir_var_function_temp );
- nir_remove_dead_variables(nir, mask);
+ nir_remove_dead_variables(nir, mask, NULL);
if (!st->has_hw_atomics)
NIR_PASS_V(nir, nir_lower_atomics_to_ssbo);
if (nir_link_opt_varyings(producer, consumer))
st_nir_opts(consumer);
- NIR_PASS_V(producer, nir_remove_dead_variables, nir_var_shader_out);
- NIR_PASS_V(consumer, nir_remove_dead_variables, nir_var_shader_in);
+ NIR_PASS_V(producer, nir_remove_dead_variables, nir_var_shader_out, NULL);
+ NIR_PASS_V(consumer, nir_remove_dead_variables, nir_var_shader_in, NULL);
if (nir_remove_unused_varyings(producer, consumer)) {
NIR_PASS_V(producer, nir_lower_global_vars_to_local);
* nir_compact_varyings() depends on all dead varyings being removed so
* we need to call nir_remove_dead_variables() again here.
*/
- NIR_PASS_V(producer, nir_remove_dead_variables, nir_var_shader_out);
- NIR_PASS_V(consumer, nir_remove_dead_variables, nir_var_shader_in);
+ NIR_PASS_V(producer, nir_remove_dead_variables, nir_var_shader_out,
+ NULL);
+ NIR_PASS_V(consumer, nir_remove_dead_variables, nir_var_shader_in,
+ NULL);
}
}