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 <kenneth@whitecape.org>
Reviewed-by: Connor Abbott <cwabbott0@gmail.com>
This commit is contained in:
Kenneth Graunke
2015-08-06 18:18:40 -07:00
parent 9f00af672b
commit 8e0d4ef341
6 changed files with 15 additions and 9 deletions
-1
View File
@@ -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);
+7 -1
View File
@@ -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)
{
+5 -4
View File
@@ -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
+1 -1
View File
@@ -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);
+1 -1
View File
@@ -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);
+1 -1
View File
@@ -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);