static void nir_lower_tex_impl(nir_function_impl *impl, lower_tex_state *state) { nir_builder_init(&state->b, impl); nir_foreach_block(impl, nir_lower_tex_block, state); nir_metadata_preserve(impl, nir_metadata_block_index | nir_metadata_dominance); }
static void convert_impl(nir_function_impl *impl) { nir_builder b; nir_builder_init(&b, impl); nir_foreach_block(impl, convert_block, &b); nir_metadata_preserve(impl, nir_metadata_block_index | nir_metadata_dominance); }
static bool opt_dead_cf_impl(nir_function_impl *impl) { bool dummy; bool progress = dead_cf_list(&impl->body, &dummy); if (progress) nir_metadata_preserve(impl, nir_metadata_none); return progress; }
static bool vc4_nir_lower_txf_ms_impl(struct vc4_compile *c, nir_function_impl *impl) { nir_foreach_block(impl, vc4_nir_lower_txf_ms_block, c); nir_metadata_preserve(impl, nir_metadata_block_index | nir_metadata_dominance); return true; }
static void nir_lower_io_impl(nir_function_impl *impl) { struct lower_io_state state; state.mem_ctx = ralloc_parent(impl); nir_foreach_block(impl, nir_lower_io_block, &state); nir_metadata_preserve(impl, nir_metadata_block_index | nir_metadata_dominance); }
static bool nir_lower_vec_to_movs_impl(nir_function_impl *impl) { struct vec_to_movs_state state = { impl, false }; nir_foreach_block(impl, lower_vec_to_movs_block, &state); if (state.progress) { nir_metadata_preserve(impl, nir_metadata_block_index | nir_metadata_dominance); } return state.progress; }
static bool nir_opt_cse_impl(nir_function_impl *impl) { struct set *instr_set = nir_instr_set_create(NULL); nir_metadata_require(impl, nir_metadata_dominance); bool progress = cse_block(nir_start_block(impl), instr_set); if (progress) nir_metadata_preserve(impl, nir_metadata_block_index | nir_metadata_dominance); nir_instr_set_destroy(instr_set); return progress; }
bool nir_opt_undef(nir_shader *shader) { bool progress = false; nir_foreach_overload(shader, overload) { if (overload->impl) { nir_foreach_block(overload->impl, opt_undef_block, &progress); if (progress) nir_metadata_preserve(overload->impl, nir_metadata_block_index | nir_metadata_dominance); } } return progress; }
static bool nir_opt_constant_folding_impl(nir_function_impl *impl) { struct constant_fold_state state; state.mem_ctx = ralloc_parent(impl); state.impl = impl; state.progress = false; nir_foreach_block(impl, constant_fold_block, &state); if (state.progress) nir_metadata_preserve(impl, nir_metadata_block_index | nir_metadata_dominance); return state.progress; }
static bool split_var_copies_impl(nir_function_impl *impl) { struct split_var_copies_state state; state.mem_ctx = ralloc_parent(impl); state.dead_ctx = ralloc_context(NULL); state.progress = false; nir_foreach_block(impl, split_var_copies_block, &state); ralloc_free(state.dead_ctx); if (state.progress) { nir_metadata_preserve(impl, nir_metadata_block_index | nir_metadata_dominance); } return state.progress; }
bool nir_opt_dce_impl(nir_function_impl *impl) { struct exec_list *worklist = ralloc(NULL, struct exec_list); exec_list_make_empty(worklist); nir_foreach_block(impl, init_block_cb, worklist); while (!exec_list_is_empty(worklist)) { nir_instr *instr = worklist_pop(worklist); nir_foreach_src(instr, mark_live_cb, worklist); } ralloc_free(worklist); bool progress = false; nir_foreach_block(impl, delete_block_cb, &progress); if (progress) nir_metadata_preserve(impl, nir_metadata_block_index | nir_metadata_dominance); return progress; }