diff options
author | Rhys Perry <[email protected]> | 2019-11-15 16:13:20 +0000 |
---|---|---|
committer | Rhys Perry <[email protected]> | 2019-11-20 15:05:42 +0000 |
commit | ca2de7ae9cee12e95a3c64a237e94b652e007979 (patch) | |
tree | f36b0fd6160df036432152a4f9a5ced1a3d0fdf8 /src/compiler | |
parent | 9f92e8b72130df484862db3d07216a476348aadc (diff) |
nir/large_constants: use nir_index_vars and nir_variable::index
Signed-off-by: Rhys Perry <[email protected]>
Reviewed-by: Connor Abbott <[email protected]>
Diffstat (limited to 'src/compiler')
-rw-r--r-- | src/compiler/nir/nir_opt_large_constants.c | 20 |
1 files changed, 8 insertions, 12 deletions
diff --git a/src/compiler/nir/nir_opt_large_constants.c b/src/compiler/nir/nir_opt_large_constants.c index b901108f597..a3c002f5f4c 100644 --- a/src/compiler/nir/nir_opt_large_constants.c +++ b/src/compiler/nir/nir_opt_large_constants.c @@ -179,19 +179,15 @@ nir_opt_large_constants(nir_shader *shader, /* This pass can only be run once */ assert(shader->constant_data == NULL && shader->constant_data_size == 0); - /* The index parameter is unused for local variables so we'll use it for - * indexing into our array of variable metadata. - */ - unsigned num_locals = 0; - nir_foreach_variable(var, &impl->locals) - var->data.index = num_locals++; + unsigned num_locals = exec_list_length(&impl->locals); + nir_index_vars(shader, impl, nir_var_function_temp); if (num_locals == 0) return false; struct var_info *var_infos = ralloc_array(NULL, struct var_info, num_locals); nir_foreach_variable(var, &impl->locals) { - var_infos[var->data.index] = (struct var_info) { + var_infos[var->index] = (struct var_info) { .var = var, .is_constant = true, .found_read = false, @@ -236,7 +232,7 @@ nir_opt_large_constants(nir_shader *shader, nir_variable *var = nir_deref_instr_get_variable(dst_deref); assert(var->data.mode == nir_var_function_temp); - struct var_info *info = &var_infos[var->data.index]; + struct var_info *info = &var_infos[var->index]; if (!info->is_constant) continue; @@ -264,7 +260,7 @@ nir_opt_large_constants(nir_shader *shader, /* We only consider variables constant if all the reads are * dominated by the block that writes to it. */ - struct var_info *info = &var_infos[var->data.index]; + struct var_info *info = &var_infos[var->index]; if (!info->is_constant) continue; @@ -286,7 +282,7 @@ nir_opt_large_constants(nir_shader *shader, struct var_info *info = &var_infos[i]; /* Fix up indices after we sorted. */ - info->var->data.index = i; + info->var->index = i; if (!info->is_constant) continue; @@ -339,7 +335,7 @@ nir_opt_large_constants(nir_shader *shader, continue; nir_variable *var = nir_deref_instr_get_variable(deref); - struct var_info *info = &var_infos[var->data.index]; + struct var_info *info = &var_infos[var->index]; if (info->is_constant) { b.cursor = nir_after_instr(&intrin->instr); nir_ssa_def *val = build_constant_load(&b, deref, size_align); @@ -357,7 +353,7 @@ nir_opt_large_constants(nir_shader *shader, continue; nir_variable *var = nir_deref_instr_get_variable(deref); - struct var_info *info = &var_infos[var->data.index]; + struct var_info *info = &var_infos[var->index]; if (info->is_constant) { nir_instr_remove(&intrin->instr); nir_deref_instr_remove_if_unused(deref); |