nir: Drop nir_if_rewrite_condition()

Use nir_src_rewrite() instead.  In a couple of cases, we can even drop a
switch on whether or not it's an if source.

Reviewed-by: Alyssa Rosenzweig <alyssa@rosenzweig.io>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/24729>
This commit is contained in:
Faith Ekstrand 2023-08-17 15:41:41 -05:00 committed by Marge Bot
parent 267b4fb1b9
commit 964c73e13e
11 changed files with 13 additions and 46 deletions

View file

@ -1501,18 +1501,6 @@ nir_instr_move_src(nir_instr *dest_instr, nir_src *dest, nir_src *src)
src_add_all_uses(dest, dest_instr, NULL);
}
void
nir_if_rewrite_condition(nir_if *if_stmt, nir_src new_src)
{
nir_shader *shader = ralloc_parent(if_stmt);
nir_src *src = &if_stmt->condition;
assert(!src_is_valid(src) || (src->is_if && src->parent_if == if_stmt));
src_remove_all_uses(src);
src_copy(src, &new_src, shader->gctx);
src_add_all_uses(src, NULL, if_stmt);
}
void
nir_def_init(nir_instr *instr, nir_def *def,
unsigned num_components,
@ -2079,13 +2067,8 @@ nir_function_impl_lower_instructions(nir_function_impl *impl,
if (new_def->parent_instr->block != instr->block)
preserved = nir_metadata_none;
nir_src new_src = nir_src_for_ssa(new_def);
list_for_each_entry_safe(nir_src, use_src, &old_uses, use_link) {
if (use_src->is_if)
nir_if_rewrite_condition(use_src->parent_if, new_src);
else
nir_instr_rewrite_src(use_src->parent_instr, use_src, new_src);
}
list_for_each_entry_safe(nir_src, use_src, &old_uses, use_link)
nir_src_rewrite(use_src, new_def);
if (nir_def_is_unused(old_def)) {
iter = nir_instr_free_and_dce(instr);

View file

@ -4449,8 +4449,6 @@ void nir_instr_clear_src(nir_instr *instr, nir_src *src);
void nir_instr_move_src(nir_instr *dest_instr, nir_src *dest, nir_src *src);
void nir_if_rewrite_condition(nir_if *if_stmt, nir_src new_src);
void nir_def_init(nir_instr *instr, nir_def *def,
unsigned num_components, unsigned bit_size);
static inline void

View file

@ -779,7 +779,7 @@ spill_ssa_defs_and_lower_shader_calls(nir_shader *shader, uint32_t num_calls,
get_phi_builder_def_for_src(&following_if->condition,
&pbv_arr, block);
if (new_def != NULL)
nir_if_rewrite_condition(following_if, nir_src_for_ssa(new_def));
nir_src_rewrite(&following_if->condition, new_def);
}
/* Handle phi sources that source from this block. We have to do this

View file

@ -876,7 +876,7 @@ opt_if_simplification(nir_builder *b, nir_if *nif)
nir_def *new_condition =
nir_inot(b, &alu_instr->def);
nir_if_rewrite_condition(nif, nir_src_for_ssa(new_condition));
nir_src_rewrite(&nif->condition, new_condition);
/* Grab pointers to the last then/else blocks for fixing up the phis. */
nir_block *then_block = nir_if_last_then_block(nif);
@ -1266,14 +1266,7 @@ propagate_condition_eval(nir_builder *b, nir_if *nif, nir_src *use_src,
}
nir_def *nalu = clone_alu_and_replace_src_defs(b, alu, def);
/* Rewrite use to use new alu instruction */
nir_src new_src = nir_src_for_ssa(nalu);
if (alu_use->is_if)
nir_if_rewrite_condition(alu_use->parent_if, new_src);
else
nir_instr_rewrite_src(alu_use->parent_instr, alu_use, new_src);
nir_src_rewrite(alu_use, nalu);
return true;
}
@ -1308,12 +1301,7 @@ evaluate_condition_use(nir_builder *b, nir_if *nif, nir_src *use_src)
bool bool_value;
if (evaluate_if_condition(nif, b->cursor, &bool_value)) {
/* Rewrite use to use const */
nir_src imm_src = nir_src_for_ssa(nir_imm_bool(b, bool_value));
if (use_src->is_if)
nir_if_rewrite_condition(use_src->parent_if, imm_src);
else
nir_instr_rewrite_src(use_src->parent_instr, use_src, imm_src);
nir_src_rewrite(use_src, nir_imm_bool(b, bool_value));
progress = true;
}

View file

@ -351,7 +351,7 @@ nir_opt_collapse_if(nir_if *if_stmt, nir_shader *shader, unsigned limit,
struct nir_builder b = nir_builder_at(nir_before_cf_node(&if_stmt->cf_node));
nir_def *cond = nir_iand(&b, if_stmt->condition.ssa,
parent_if->condition.ssa);
nir_if_rewrite_condition(if_stmt, nir_src_for_ssa(cond));
nir_src_rewrite(&if_stmt->condition, cond);
/* move the whole inner if before the parent if */
nir_cf_list tmp;

View file

@ -123,8 +123,7 @@ nir_opt_rematerialize_compares_impl(nir_shader *shader, nir_function_impl *impl)
nir_instr_insert_after_block(prev_block, &clone->instr);
nir_if_rewrite_condition(if_stmt,
nir_src_for_ssa(&clone->def));
nir_src_rewrite(&if_stmt->condition, &clone->def);
progress = true;
} else {
nir_instr *const use_instr = use->parent_instr;

View file

@ -134,7 +134,7 @@ repair_ssa_def(nir_def *def, void *void_state)
}
if (src->is_if)
nir_if_rewrite_condition(src->parent_if, nir_src_for_ssa(block_def));
nir_src_rewrite(&src->parent_if->condition, block_def);
else
nir_instr_rewrite_src(src->parent_instr, src, nir_src_for_ssa(block_def));
}

View file

@ -262,7 +262,7 @@ convert_loop_exit_for_ssa(nir_def *def, void *void_state)
nir_foreach_use_including_if_safe(use, def) {
if (use->is_if) {
if (!is_if_use_inside_loop(use, state->loop))
nir_if_rewrite_condition(use->parent_if, nir_src_for_ssa(dest));
nir_src_rewrite(&use->parent_if->condition, dest);
continue;
}

View file

@ -75,7 +75,7 @@ lima_nir_duplicate_load_const(nir_builder *b, nir_load_const_instr *load)
dupl = last_dupl;
}
nir_if_rewrite_condition(use_src->parent_if, nir_src_for_ssa(&dupl->def));
nir_src_rewrite(&use_src->parent_if->condition, &dupl->def);
last_parent_instr = use_src->parent_instr;
last_dupl = dupl;
}

View file

@ -82,7 +82,7 @@ lima_nir_duplicate_intrinsic(nir_builder *b, nir_intrinsic_instr *itr,
dupl = last_dupl;
}
nir_if_rewrite_condition(use_src->parent_if, nir_src_for_ssa(&dupl->def));
nir_src_rewrite(&use_src->parent_if->condition, &dupl->def);
last_parent_instr = use_src->parent_instr;
last_dupl = dupl;
}

View file

@ -74,8 +74,7 @@ replace_intrinsic(nir_builder *b, nir_intrinsic_instr *intrin)
}
nir_foreach_if_use_safe(src, &intrin->def) {
b->cursor = nir_before_src(src);
nir_if_rewrite_condition(src->parent_if,
nir_src_for_ssa(clone_intrinsic(b, intrin)));
nir_src_rewrite(&src->parent_if->condition, clone_intrinsic(b, intrin));
}
nir_instr_remove(&intrin->instr);