diff options
author | Kenneth Graunke <[email protected]> | 2015-08-06 18:18:40 -0700 |
---|---|---|
committer | Kenneth Graunke <[email protected]> | 2015-08-24 13:31:41 -0700 |
commit | 8e0d4ef3410ea07d9621df3e083bc3e7c1ad2ab0 (patch) | |
tree | 659c330da07e0be1c9efd58481484dc4c14cadf4 /src | |
parent | 9f00af672b59766008994a190730d48ae03773dd (diff) |
nir: Delete the nir_function_impl::start_block field.
It's simply the first nir_cf_node in the nir_function_impl::body list,
which is easy enough to access - we don't to store a pointer to it
explicitly. Removing it means we don't need to maintain the pointer
when, say, splitting the start block when modifying control flow.
Thanks to Connor Abbott for suggesting this.
Signed-off-by: Kenneth Graunke <[email protected]>
Reviewed-by: Connor Abbott <[email protected]>
Diffstat (limited to 'src')
-rw-r--r-- | src/glsl/nir/nir.c | 1 | ||||
-rw-r--r-- | src/glsl/nir/nir.h | 8 | ||||
-rw-r--r-- | src/glsl/nir/nir_dominance.c | 9 | ||||
-rw-r--r-- | src/glsl/nir/nir_lower_vars_to_ssa.c | 2 | ||||
-rw-r--r-- | src/glsl/nir/nir_opt_gcm.c | 2 | ||||
-rw-r--r-- | src/glsl/nir/nir_to_ssa.c | 2 |
6 files changed, 15 insertions, 9 deletions
diff --git a/src/glsl/nir/nir.c b/src/glsl/nir/nir.c index 2f7cbae42be..60fdac5920d 100644 --- a/src/glsl/nir/nir.c +++ b/src/glsl/nir/nir.c @@ -262,7 +262,6 @@ nir_function_impl_create(nir_function_overload *overload) nir_block *end_block = nir_block_create(mem_ctx); start_block->cf_node.parent = &impl->cf_node; end_block->cf_node.parent = &impl->cf_node; - impl->start_block = start_block; impl->end_block = end_block; exec_list_push_tail(&impl->body, &start_block->cf_node.node); diff --git a/src/glsl/nir/nir.h b/src/glsl/nir/nir.h index 222a219d0e6..52f84c4d62c 100644 --- a/src/glsl/nir/nir.h +++ b/src/glsl/nir/nir.h @@ -1309,7 +1309,7 @@ typedef struct { struct exec_list body; /** < list of nir_cf_node */ - nir_block *start_block, *end_block; + nir_block *end_block; /** list for all local variables in the function */ struct exec_list locals; @@ -1336,6 +1336,12 @@ typedef struct { nir_metadata valid_metadata; } nir_function_impl; +static inline nir_block * +nir_start_block(nir_function_impl *impl) +{ + return (nir_block *) exec_list_get_head(&impl->body); +} + static inline nir_cf_node * nir_cf_node_next(nir_cf_node *node) { diff --git a/src/glsl/nir/nir_dominance.c b/src/glsl/nir/nir_dominance.c index 2f50db1c1f6..af4caae0055 100644 --- a/src/glsl/nir/nir_dominance.c +++ b/src/glsl/nir/nir_dominance.c @@ -42,7 +42,7 @@ static bool init_block_cb(nir_block *block, void *_state) { dom_state *state = (dom_state *) _state; - if (block == state->impl->start_block) + if (block == nir_start_block(state->impl)) block->imm_dom = block; else block->imm_dom = NULL; @@ -78,7 +78,7 @@ static bool calc_dominance_cb(nir_block *block, void *_state) { dom_state *state = (dom_state *) _state; - if (block == state->impl->start_block) + if (block == nir_start_block(state->impl)) return true; nir_block *new_idom = NULL; @@ -209,12 +209,13 @@ nir_calc_dominance_impl(nir_function_impl *impl) nir_foreach_block(impl, calc_dom_frontier_cb, &state); - impl->start_block->imm_dom = NULL; + nir_block *start_block = nir_start_block(impl); + start_block->imm_dom = NULL; calc_dom_children(impl); unsigned dfs_index = 0; - calc_dfs_indicies(impl->start_block, &dfs_index); + calc_dfs_indicies(start_block, &dfs_index); } void diff --git a/src/glsl/nir/nir_lower_vars_to_ssa.c b/src/glsl/nir/nir_lower_vars_to_ssa.c index ccb8f99dfba..4ff21663e57 100644 --- a/src/glsl/nir/nir_lower_vars_to_ssa.c +++ b/src/glsl/nir/nir_lower_vars_to_ssa.c @@ -935,7 +935,7 @@ nir_lower_vars_to_ssa_impl(nir_function_impl *impl) nir_foreach_block(impl, register_variable_uses_block, &state); insert_phi_nodes(&state); - rename_variables_block(impl->start_block, &state); + rename_variables_block(nir_start_block(impl), &state); nir_metadata_preserve(impl, nir_metadata_block_index | nir_metadata_dominance); diff --git a/src/glsl/nir/nir_opt_gcm.c b/src/glsl/nir/nir_opt_gcm.c index 44068bf37b8..5b412eebc32 100644 --- a/src/glsl/nir/nir_opt_gcm.c +++ b/src/glsl/nir/nir_opt_gcm.c @@ -256,7 +256,7 @@ gcm_schedule_early_instr(nir_instr *instr, struct gcm_state *state) /* Start with the instruction at the top. As we iterate over the * sources, it will get moved down as needed. */ - instr->block = state->impl->start_block; + instr->block = nir_start_block(state->impl); state->instr = instr; nir_foreach_src(instr, gcm_schedule_early_src, state); diff --git a/src/glsl/nir/nir_to_ssa.c b/src/glsl/nir/nir_to_ssa.c index a3c35fa0493..b089df79fcf 100644 --- a/src/glsl/nir/nir_to_ssa.c +++ b/src/glsl/nir/nir_to_ssa.c @@ -516,7 +516,7 @@ nir_convert_to_ssa_impl(nir_function_impl *impl) rewrite_state state; init_rewrite_state(impl, &state); - rewrite_block(impl->start_block, &state); + rewrite_block(nir_start_block(impl), &state); remove_unused_regs(impl, &state); |