5, 6, and 7 are Reviewed-by: Jason Ekstrand <jason.ekstr...@intel.com>
On Tue, Sep 22, 2015 at 9:37 PM, Connor Abbott <cwabbo...@gmail.com> wrote: > On Tue, Sep 22, 2015 at 11:01 PM, Kenneth Graunke <kenn...@whitecape.org> > wrote: >> The NIR control flow modification API churns the block structure, >> splitting blocks, stitching them back together, and so on. Preserving >> information about block dominance is hard (and probably not worthwhile). >> >> This patch makes nir_cf_extract() throw away all metadata, like we do >> when adding/removing jumps. >> >> We then make the dead control flow pass compute dominance information >> right before it uses it. This is necessary because earlier work by the >> pass may have invalidated it. >> >> Signed-off-by: Kenneth Graunke <kenn...@whitecape.org> > > Reviewed-by: Connor Abbott <cwabbo...@gmail.com> > >> --- >> src/glsl/nir/nir_control_flow.c | 3 +++ >> src/glsl/nir/nir_opt_dead_cf.c | 7 ++++--- >> 2 files changed, 7 insertions(+), 3 deletions(-) >> >> New patch! >> >> diff --git a/src/glsl/nir/nir_control_flow.c >> b/src/glsl/nir/nir_control_flow.c >> index e027766..8ec1252 100644 >> --- a/src/glsl/nir/nir_control_flow.c >> +++ b/src/glsl/nir/nir_control_flow.c >> @@ -742,6 +742,9 @@ nir_cf_extract(nir_cf_list *extracted, nir_cursor begin, >> nir_cursor end) >> extracted->impl = nir_cf_node_get_function(&block_begin->cf_node); >> exec_list_make_empty(&extracted->list); >> >> + /* Dominance and other block-related information is toast. */ >> + nir_metadata_preserve(extracted->impl, nir_metadata_none); >> + >> nir_cf_node *cf_node = &block_begin->cf_node; >> nir_cf_node *cf_node_end = &block_end->cf_node; >> while (true) { >> diff --git a/src/glsl/nir/nir_opt_dead_cf.c b/src/glsl/nir/nir_opt_dead_cf.c >> index 317bbc5..0d4819b 100644 >> --- a/src/glsl/nir/nir_opt_dead_cf.c >> +++ b/src/glsl/nir/nir_opt_dead_cf.c >> @@ -203,6 +203,10 @@ loop_is_dead(nir_loop *loop) >> NULL)) >> return false; >> >> + nir_function_impl *impl = nir_cf_node_get_function(&loop->cf_node); >> + nir_metadata_require(impl, nir_metadata_live_variables | >> + nir_metadata_dominance); >> + >> for (nir_block *cur = after->imm_dom; cur != before; cur = cur->imm_dom) >> { >> nir_foreach_instr(cur, instr) { >> if (!nir_foreach_ssa_def(instr, def_not_live_out, after)) >> @@ -332,9 +336,6 @@ dead_cf_list(struct exec_list *list, bool >> *list_ends_in_jump) >> static bool >> opt_dead_cf_impl(nir_function_impl *impl) >> { >> - nir_metadata_require(impl, nir_metadata_live_variables | >> - nir_metadata_dominance); >> - >> bool dummy; >> bool progress = dead_cf_list(&impl->body, &dummy); >> >> -- >> 2.5.3 >> _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-dev