Commit 28a3e164 authored by Jason Ekstrand's avatar Jason Ekstrand
Browse files

nir: Use nir_foreach_ssa_def for setting up ssa destinations



Before, we were using foreach_dest and switching on whether the destination
was an SSA value.  This works, except not all destinations are SSA values
so we have to special-case ssa_undef instructions.  Now that we have a
foreach_ssa_def function, we can iterate over all of the register
destinations in one pass and iterate over the SSA destinations in a second.
This way, if we add other ssa-only instructions, we won't have to worry
about adding them to the special case we have for ssa_undef.
Reviewed-by: default avatarConnor Abbott <cwabbott0@gmail.com>
parent 193fea9e
......@@ -1176,27 +1176,28 @@ add_use_cb(nir_src *src, void *state)
return true;
}
static void
add_ssa_def(nir_instr *instr, nir_ssa_def *def)
static bool
add_ssa_def_cb(nir_ssa_def *def, void *state)
{
nir_instr *instr = (nir_instr *) state;
if (instr->block && def->index == UINT_MAX) {
nir_function_impl *impl =
nir_cf_node_get_function(&instr->block->cf_node);
def->index = impl->ssa_alloc++;
}
return true;
}
static bool
add_def_cb(nir_dest *dest, void *state)
add_reg_def_cb(nir_dest *dest, void *state)
{
nir_instr *instr = (nir_instr *) state;
if (dest->is_ssa) {
add_ssa_def(instr, &dest->ssa);
} else {
if (!dest->is_ssa)
_mesa_set_add(dest->reg.reg->defs, _mesa_hash_pointer(instr), instr);
}
return true;
}
......@@ -1204,12 +1205,9 @@ add_def_cb(nir_dest *dest, void *state)
static void
add_defs_uses(nir_instr *instr)
{
if (instr->type == nir_instr_type_ssa_undef) {
add_ssa_def(instr, &nir_instr_as_ssa_undef(instr)->def);
} else {
nir_foreach_src(instr, add_use_cb, instr);
nir_foreach_dest(instr, add_def_cb, instr);
}
nir_foreach_src(instr, add_use_cb, instr);
nir_foreach_dest(instr, add_reg_def_cb, instr);
nir_foreach_ssa_def(instr, add_ssa_def_cb, instr);
}
void
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment