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);
}
Пример #2
0
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);
}
Пример #3
0
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;
}
Пример #4
0
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;
}
Пример #5
0
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);
}
Пример #6
0
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;
}
Пример #7
0
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;
}
Пример #8
0
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;
}
Пример #10
0
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;
}
Пример #11
0
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;
}