summaryrefslogtreecommitdiffstats
path: root/src/compiler/nir
diff options
context:
space:
mode:
authorCaio Marcelo de Oliveira Filho <[email protected]>2018-04-10 23:13:38 -0700
committerJason Ekstrand <[email protected]>2018-04-11 11:05:05 -0700
commit1c9bccdeb8acf1a531b49bbb6c69ea96879e79de (patch)
treeea2f5961ed5ea74843872be7b788fa0d4c4f934f /src/compiler/nir
parentbc2b170d6849d31fc88df4ece635ff789e4ad0c2 (diff)
nir/vars_to_ssa: Rework register_variable_uses()
The return value was needed to make use of the old nir_foreach_block helper, but not needed anymore with the macro version. Then go one step further and move the foreach directly into the register variable uses function. v2: Move foreach to register_variable_uses(). (Jason) Reviewed-by: Jason Ekstrand <[email protected]>
Diffstat (limited to 'src/compiler/nir')
-rw-r--r--src/compiler/nir/nir_lower_vars_to_ssa.c51
1 files changed, 23 insertions, 28 deletions
diff --git a/src/compiler/nir/nir_lower_vars_to_ssa.c b/src/compiler/nir/nir_lower_vars_to_ssa.c
index 0cc65143e76..f327a14d9b3 100644
--- a/src/compiler/nir/nir_lower_vars_to_ssa.c
+++ b/src/compiler/nir/nir_lower_vars_to_ssa.c
@@ -406,36 +406,35 @@ register_copy_instr(nir_intrinsic_instr *copy_instr,
}
}
-/* Registers all variable uses in the given block. */
-static bool
-register_variable_uses_block(nir_block *block,
- struct lower_variables_state *state)
+static void
+register_variable_uses(nir_function_impl *impl,
+ struct lower_variables_state *state)
{
- nir_foreach_instr_safe(instr, block) {
- if (instr->type != nir_instr_type_intrinsic)
- continue;
+ nir_foreach_block(block, impl) {
+ nir_foreach_instr_safe(instr, block) {
+ if (instr->type != nir_instr_type_intrinsic)
+ continue;
- nir_intrinsic_instr *intrin = nir_instr_as_intrinsic(instr);
+ nir_intrinsic_instr *intrin = nir_instr_as_intrinsic(instr);
- switch (intrin->intrinsic) {
- case nir_intrinsic_load_var:
- register_load_instr(intrin, state);
- break;
+ switch (intrin->intrinsic) {
+ case nir_intrinsic_load_var:
+ register_load_instr(intrin, state);
+ break;
- case nir_intrinsic_store_var:
- register_store_instr(intrin, state);
- break;
+ case nir_intrinsic_store_var:
+ register_store_instr(intrin, state);
+ break;
- case nir_intrinsic_copy_var:
- register_copy_instr(intrin, state);
- break;
+ case nir_intrinsic_copy_var:
+ register_copy_instr(intrin, state);
+ break;
- default:
- continue;
+ default:
+ continue;
+ }
}
}
-
- return true;
}
/* Walks over all of the copy instructions to or from the given deref_node
@@ -654,9 +653,7 @@ nir_lower_vars_to_ssa_impl(nir_function_impl *impl)
/* Build the initial deref structures and direct_deref_nodes table */
state.add_to_direct_deref_nodes = true;
- nir_foreach_block(block, impl) {
- register_variable_uses_block(block, &state);
- }
+ register_variable_uses(impl, &state);
bool progress = false;
@@ -696,9 +693,7 @@ nir_lower_vars_to_ssa_impl(nir_function_impl *impl)
* added load/store instructions are registered. We need this
* information for phi node insertion below.
*/
- nir_foreach_block(block, impl) {
- register_variable_uses_block(block, &state);
- }
+ register_variable_uses(impl, &state);
state.phi_builder = nir_phi_builder_create(state.impl);