nir: Get rid of global registers

We have a pass to lower global registers to locals and many drivers
dutifully call it.  However, no one ever creates a global register ever
so it's all dead code.  It's time we bury it.

Acked-by: Karol Herbst <kherbst@redhat.com>
Reviewed-by: Kenneth Graunke <kenneth@whitecape.org>
This commit is contained in:
Jason Ekstrand
2019-04-05 19:58:46 -05:00
parent b28bad89b9
commit 6279074de1
18 changed files with 10 additions and 209 deletions

View File

@@ -151,10 +151,8 @@ validate_reg_src(nir_src *src, validate_state *state,
_mesa_set_add(reg_state->if_uses, src);
}
if (!src->reg.reg->is_global) {
validate_assert(state, reg_state->where_defined == state->impl &&
"using a register declared in a different function");
}
validate_assert(state, reg_state->where_defined == state->impl &&
"using a register declared in a different function");
if (bit_sizes)
validate_assert(state, src->reg.reg->bit_size & bit_sizes);
@@ -254,10 +252,8 @@ validate_reg_dest(nir_reg_dest *dest, validate_state *state,
reg_validate_state *reg_state = (reg_validate_state *) entry2->data;
_mesa_set_add(reg_state->defs, dest);
if (!dest->reg->is_global) {
validate_assert(state, reg_state->where_defined == state->impl &&
"writing to a register declared in a different function");
}
validate_assert(state, reg_state->where_defined == state->impl &&
"writing to a register declared in a different function");
if (bit_sizes)
validate_assert(state, dest->reg->bit_size & bit_sizes);
@@ -933,14 +929,9 @@ validate_cf_node(nir_cf_node *node, validate_state *state)
}
static void
prevalidate_reg_decl(nir_register *reg, bool is_global, validate_state *state)
prevalidate_reg_decl(nir_register *reg, validate_state *state)
{
validate_assert(state, reg->is_global == is_global);
if (is_global)
validate_assert(state, reg->index < state->shader->reg_alloc);
else
validate_assert(state, reg->index < state->impl->reg_alloc);
validate_assert(state, reg->index < state->impl->reg_alloc);
validate_assert(state, !BITSET_TEST(state->regs_found, reg->index));
BITSET_SET(state->regs_found, reg->index);
@@ -953,7 +944,7 @@ prevalidate_reg_decl(nir_register *reg, bool is_global, validate_state *state)
reg_state->if_uses = _mesa_pointer_set_create(reg_state);
reg_state->defs = _mesa_pointer_set_create(reg_state);
reg_state->where_defined = is_global ? NULL : state->impl;
reg_state->where_defined = state->impl;
_mesa_hash_table_insert(state->regs, reg, reg_state);
}
@@ -1116,7 +1107,7 @@ validate_function_impl(nir_function_impl *impl, validate_state *state)
sizeof(BITSET_WORD));
exec_list_validate(&impl->registers);
foreach_list_typed(nir_register, reg, node, &impl->registers) {
prevalidate_reg_decl(reg, false, state);
prevalidate_reg_decl(reg, state);
}
state->ssa_defs_found = realloc(state->ssa_defs_found,
@@ -1253,25 +1244,11 @@ nir_validate_shader(nir_shader *shader, const char *when)
validate_var_decl(var, true, &state);
}
state.regs_found = realloc(state.regs_found,
BITSET_WORDS(shader->reg_alloc) *
sizeof(BITSET_WORD));
memset(state.regs_found, 0, BITSET_WORDS(shader->reg_alloc) *
sizeof(BITSET_WORD));
exec_list_validate(&shader->registers);
foreach_list_typed(nir_register, reg, node, &shader->registers) {
prevalidate_reg_decl(reg, true, &state);
}
exec_list_validate(&shader->functions);
foreach_list_typed(nir_function, func, node, &shader->functions) {
validate_function(func, &state);
}
foreach_list_typed(nir_register, reg, node, &shader->registers) {
postvalidate_reg_decl(reg, &state);
}
if (_mesa_hash_table_num_entries(state.errors) > 0)
dump_errors(&state, when);