Browse Source

nir: Report progress from nir_split_var_copies().

Signed-off-by: Kenneth Graunke <kenneth@whitecape.org>
Reviewed-by: Jason Ekstrand <jason.ekstrand@intel.com>
tags/11.1-branchpoint
Kenneth Graunke 10 years ago
parent
commit
dc18b9357b
2 changed files with 13 additions and 4 deletions
  1. 1
    1
      src/glsl/nir/nir.h
  2. 12
    3
      src/glsl/nir/nir_split_var_copies.c

+ 1
- 1
src/glsl/nir/nir.h View File

void nir_dump_cfg_impl(nir_function_impl *impl, FILE *fp); void nir_dump_cfg_impl(nir_function_impl *impl, FILE *fp);
void nir_dump_cfg(nir_shader *shader, FILE *fp); void nir_dump_cfg(nir_shader *shader, FILE *fp);


void nir_split_var_copies(nir_shader *shader);
bool nir_split_var_copies(nir_shader *shader);


void nir_lower_var_copy_instr(nir_intrinsic_instr *copy, void *mem_ctx); void nir_lower_var_copy_instr(nir_intrinsic_instr *copy, void *mem_ctx);
void nir_lower_var_copies(nir_shader *shader); void nir_lower_var_copies(nir_shader *shader);

+ 12
- 3
src/glsl/nir/nir_split_var_copies.c View File

struct split_var_copies_state { struct split_var_copies_state {
void *mem_ctx; void *mem_ctx;
void *dead_ctx; void *dead_ctx;
bool progress;
}; };


static nir_deref * static nir_deref *
* remove the old one later. * remove the old one later.
*/ */
nir_instr_insert_after(&old_copy->instr, &new_copy->instr); nir_instr_insert_after(&old_copy->instr, &new_copy->instr);
state->progress = true;
} }
break; break;


return true; return true;
} }


static void
static bool
split_var_copies_impl(nir_function_impl *impl) split_var_copies_impl(nir_function_impl *impl)
{ {
struct split_var_copies_state state; struct split_var_copies_state state;


state.mem_ctx = ralloc_parent(impl); state.mem_ctx = ralloc_parent(impl);
state.dead_ctx = ralloc_context(NULL); state.dead_ctx = ralloc_context(NULL);
state.progress = false;


nir_foreach_block(impl, split_var_copies_block, &state); nir_foreach_block(impl, split_var_copies_block, &state);


ralloc_free(state.dead_ctx); ralloc_free(state.dead_ctx);

return state.progress;
} }


void
bool
nir_split_var_copies(nir_shader *shader) nir_split_var_copies(nir_shader *shader)
{ {
bool progress = false;

nir_foreach_overload(shader, overload) { nir_foreach_overload(shader, overload) {
if (overload->impl) if (overload->impl)
split_var_copies_impl(overload->impl);
progress = split_var_copies_impl(overload->impl) || progress;
} }

return progress;
} }

Loading…
Cancel
Save