nir/gcm: fix a bug with metadata handling
We were using impl->num_blocks, but that isn't guaranteed to be up-to-date until after the block_index metadata is required. If we were unlucky, this could lead to overwriting memory. Noticed by inspection. Signed-off-by: Connor Abbott <cwabbott0@gmail.com> Reviewed-by: Jason Ekstrand <jason@jlekstrand.net>
This commit is contained in:
@@ -456,6 +456,9 @@ gcm_place_instr(nir_instr *instr, struct gcm_state *state)
|
|||||||
static bool
|
static bool
|
||||||
opt_gcm_impl(nir_function_impl *impl, bool value_number)
|
opt_gcm_impl(nir_function_impl *impl, bool value_number)
|
||||||
{
|
{
|
||||||
|
nir_metadata_require(impl, nir_metadata_block_index |
|
||||||
|
nir_metadata_dominance);
|
||||||
|
|
||||||
struct gcm_state state;
|
struct gcm_state state;
|
||||||
|
|
||||||
state.impl = impl;
|
state.impl = impl;
|
||||||
@@ -463,9 +466,6 @@ opt_gcm_impl(nir_function_impl *impl, bool value_number)
|
|||||||
exec_list_make_empty(&state.instrs);
|
exec_list_make_empty(&state.instrs);
|
||||||
state.blocks = rzalloc_array(NULL, struct gcm_block_info, impl->num_blocks);
|
state.blocks = rzalloc_array(NULL, struct gcm_block_info, impl->num_blocks);
|
||||||
|
|
||||||
nir_metadata_require(impl, nir_metadata_block_index |
|
|
||||||
nir_metadata_dominance);
|
|
||||||
|
|
||||||
gcm_build_block_info(&impl->body, &state, 0);
|
gcm_build_block_info(&impl->body, &state, 0);
|
||||||
|
|
||||||
nir_foreach_block(block, impl) {
|
nir_foreach_block(block, impl) {
|
||||||
|
Reference in New Issue
Block a user