nir: Assert that nir_lower_io is only called with allowed modes

Reviewed-by: Alyssa Rosenzweig <alyssa.rosenzweig@collabora.com>
Reviewed-by: Eric Anholt <eric@anholt.net>
Reviewed-by: Connor Abbott <cwabbott0@gmail.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/5418>
This commit is contained in:
Jason Ekstrand
2020-06-10 12:47:50 -05:00
committed by Marge Bot
parent b019b22c7a
commit be96b069ad

View File

@@ -626,16 +626,10 @@ nir_lower_io_block(nir_block *block,
nir_deref_instr *deref = nir_src_as_deref(intrin->src[0]); nir_deref_instr *deref = nir_src_as_deref(intrin->src[0]);
nir_variable_mode mode = deref->mode; nir_variable_mode mode = deref->mode;
assert(util_is_power_of_two_nonzero(mode));
if ((state->modes & mode) == 0) if ((state->modes & mode) == 0)
continue; continue;
if (mode != nir_var_shader_in &&
mode != nir_var_shader_out &&
mode != nir_var_mem_shared &&
mode != nir_var_uniform)
continue;
nir_variable *var = nir_deref_instr_get_variable(deref); nir_variable *var = nir_deref_instr_get_variable(deref);
b->cursor = nir_before_instr(instr); b->cursor = nir_before_instr(instr);
@@ -723,6 +717,11 @@ nir_lower_io_impl(nir_function_impl *impl,
state.type_size = type_size; state.type_size = type_size;
state.options = options; state.options = options;
ASSERTED nir_variable_mode supported_modes =
nir_var_shader_in | nir_var_shader_out |
nir_var_mem_shared | nir_var_uniform;
assert(!(modes & ~supported_modes));
nir_foreach_block(block, impl) { nir_foreach_block(block, impl) {
progress |= nir_lower_io_block(block, &state); progress |= nir_lower_io_block(block, &state);
} }