}
static void
-validate_ssa_def(nir_def *def, validate_state *state)
+validate_def(nir_def *def, validate_state *state,
+ unsigned bit_sizes, unsigned num_components)
{
+ if (bit_sizes)
+ validate_assert(state, def->bit_size & bit_sizes);
+ if (num_components)
+ validate_assert(state, def->num_components == num_components);
+
validate_assert(state, def->index < state->impl->ssa_alloc);
validate_assert(state, !BITSET_TEST(state->ssa_defs_found, def->index));
BITSET_SET(state->ssa_defs_found, def->index);
}
static void
-validate_dest(nir_dest *dest, validate_state *state,
- unsigned bit_sizes, unsigned num_components)
-{
- if (bit_sizes)
- validate_assert(state, dest->ssa.bit_size & bit_sizes);
- if (num_components)
- validate_assert(state, dest->ssa.num_components == num_components);
- validate_ssa_def(&dest->ssa, state);
-}
-
-static void
-validate_alu_dest(nir_alu_instr *instr, validate_state *state)
-{
- nir_alu_dest *dest = &instr->dest;
- validate_dest(&dest->dest, state, 0, 0);
-}
-
-static void
validate_alu_instr(nir_alu_instr *instr, validate_state *state)
{
validate_assert(state, instr->op < nir_num_opcodes);
dest_bit_size == 64);
}
- validate_alu_dest(instr, state);
+ validate_def(&instr->dest.dest.ssa, state, 0, 0);
}
static void
* want to let other compiler components such as SPIR-V decide how big
* pointers should be.
*/
- validate_dest(&instr->dest, state, 0, 0);
+ validate_def(&instr->dest.ssa, state, 0, 0);
/* Certain modes cannot be used as sources for phi instructions because
* way too many passes assume that they can always chase deref chains.
else
dest_bit_size = dest_bit_size ? dest_bit_size : bit_sizes;
- validate_dest(&instr->dest, state, dest_bit_size, components_written);
+ validate_def(&instr->dest.ssa, state, dest_bit_size, components_written);
}
if (!vectorized_intrinsic(instr))
if (instr->is_gather_implicit_lod)
validate_assert(state, instr->op == nir_texop_tg4);
- validate_dest(&instr->dest, state, 0, nir_tex_instr_dest_size(instr));
+ validate_def(&instr->dest.ssa, state, 0, nir_tex_instr_dest_size(instr));
unsigned bit_size = nir_alu_type_get_type_size(instr->dest_type);
validate_assert(state,
static void
validate_load_const_instr(nir_load_const_instr *instr, validate_state *state)
{
- validate_ssa_def(&instr->def, state);
+ validate_def(&instr->def, state, 0, 0);
for (unsigned i = 0; i < instr->def.num_components; i++)
validate_const_value(&instr->value[i], instr->def.bit_size, false, state);
static void
validate_ssa_undef_instr(nir_undef_instr *instr, validate_state *state)
{
- validate_ssa_def(&instr->def, state);
+ validate_def(&instr->def, state, 0, 0);
}
static void
* basic blocks, to avoid validating an SSA use before its definition.
*/
- validate_dest(&instr->dest, state, 0, 0);
+ validate_def(&instr->dest.ssa, state, 0, 0);
exec_list_validate(&instr->srcs);
validate_assert(state, exec_list_length(&instr->srcs) ==