mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2025-12-26 19:20:08 +01:00
nir/validate: Don't check dimensions in validate_def
Instead, check it at the call sites when actually required (basically just intrinsics), reducing the branching required when not (ALU validation, the hottest of hot paths for CI). IMHO this is more obvious too. Signed-off-by: Alyssa Rosenzweig <alyssa@rosenzweig.io> Reviewed-by: Faith Ekstrand <faith.ekstrand@collabora.com> Reviewed-by: Rhys Perry <pendingchaos02@gmail.com> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/26084>
This commit is contained in:
parent
d2b1e6bed0
commit
9f341cefbb
1 changed files with 14 additions and 14 deletions
|
|
@ -219,14 +219,8 @@ validate_alu_src(nir_alu_instr *instr, unsigned index, validate_state *state)
|
|||
}
|
||||
|
||||
static void
|
||||
validate_def(nir_def *def, validate_state *state,
|
||||
unsigned bit_sizes, unsigned num_components)
|
||||
validate_def(nir_def *def, validate_state *state)
|
||||
{
|
||||
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);
|
||||
|
|
@ -301,7 +295,7 @@ validate_alu_instr(nir_alu_instr *instr, validate_state *state)
|
|||
dest_bit_size == 64);
|
||||
}
|
||||
|
||||
validate_def(&instr->def, state, 0, 0);
|
||||
validate_def(&instr->def, state);
|
||||
}
|
||||
|
||||
static void
|
||||
|
|
@ -421,7 +415,7 @@ validate_deref_instr(nir_deref_instr *instr, validate_state *state)
|
|||
* want to let other compiler components such as SPIR-V decide how big
|
||||
* pointers should be.
|
||||
*/
|
||||
validate_def(&instr->def, state, 0, 0);
|
||||
validate_def(&instr->def, state);
|
||||
|
||||
/* Certain modes cannot be used as sources for phi instructions because
|
||||
* way too many passes assume that they can always chase deref chains.
|
||||
|
|
@ -729,7 +723,11 @@ validate_intrinsic_instr(nir_intrinsic_instr *instr, validate_state *state)
|
|||
else
|
||||
dest_bit_size = dest_bit_size ? dest_bit_size : bit_sizes;
|
||||
|
||||
validate_def(&instr->def, state, dest_bit_size, components_written);
|
||||
validate_def(&instr->def, state);
|
||||
validate_assert(state, instr->def.num_components == components_written);
|
||||
|
||||
if (dest_bit_size)
|
||||
validate_assert(state, instr->def.bit_size & dest_bit_size);
|
||||
}
|
||||
|
||||
if (!vectorized_intrinsic(instr))
|
||||
|
|
@ -885,7 +883,9 @@ validate_tex_instr(nir_tex_instr *instr, validate_state *state)
|
|||
if (instr->is_gather_implicit_lod)
|
||||
validate_assert(state, instr->op == nir_texop_tg4);
|
||||
|
||||
validate_def(&instr->def, state, 0, nir_tex_instr_dest_size(instr));
|
||||
validate_def(&instr->def, state);
|
||||
validate_assert(state, instr->def.num_components ==
|
||||
nir_tex_instr_dest_size(instr));
|
||||
|
||||
unsigned bit_size = nir_alu_type_get_type_size(instr->dest_type);
|
||||
validate_assert(state,
|
||||
|
|
@ -942,7 +942,7 @@ validate_const_value(nir_const_value *val, unsigned bit_size,
|
|||
static void
|
||||
validate_load_const_instr(nir_load_const_instr *instr, validate_state *state)
|
||||
{
|
||||
validate_def(&instr->def, state, 0, 0);
|
||||
validate_def(&instr->def, state);
|
||||
|
||||
for (unsigned i = 0; i < instr->def.num_components; i++)
|
||||
validate_const_value(&instr->value[i], instr->def.bit_size, false, state);
|
||||
|
|
@ -951,7 +951,7 @@ validate_load_const_instr(nir_load_const_instr *instr, validate_state *state)
|
|||
static void
|
||||
validate_ssa_undef_instr(nir_undef_instr *instr, validate_state *state)
|
||||
{
|
||||
validate_def(&instr->def, state, 0, 0);
|
||||
validate_def(&instr->def, state);
|
||||
}
|
||||
|
||||
static void
|
||||
|
|
@ -962,7 +962,7 @@ validate_phi_instr(nir_phi_instr *instr, validate_state *state)
|
|||
* basic blocks, to avoid validating an SSA use before its definition.
|
||||
*/
|
||||
|
||||
validate_def(&instr->def, state, 0, 0);
|
||||
validate_def(&instr->def, state);
|
||||
|
||||
exec_list_validate(&instr->srcs);
|
||||
validate_assert(state, exec_list_length(&instr->srcs) ==
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue