Reviewed-by: Jason Ekstrand <jason.ekstr...@intel.com>
On Tue, Sep 22, 2015 at 8:01 PM, Kenneth Graunke <kenn...@whitecape.org> wrote: > There is a bug where we mess up predecessors/successors due to the > ordering of unlinking/recreating edges/adding fake edges. In order to > fix that, I need everything in one routine. > > However, calling block_add_normal_succs() isn't safe from > cleanup_cf_node() - it would crash trying to insert phi undefs. > So unfortunately I need to add a parameter. > > Signed-off-by: Kenneth Graunke <kenn...@whitecape.org> > --- > src/glsl/nir/nir_control_flow.c | 12 ++++++------ > 1 file changed, 6 insertions(+), 6 deletions(-) > > New patch! > > diff --git a/src/glsl/nir/nir_control_flow.c b/src/glsl/nir/nir_control_flow.c > index e2a151d..2b23f38 100644 > --- a/src/glsl/nir/nir_control_flow.c > +++ b/src/glsl/nir/nir_control_flow.c > @@ -548,8 +548,8 @@ remove_phi_src(nir_block *block, nir_block *pred) > * infinite loops. Note that the jump to be eliminated may be free-floating. > */ > > -static > -void unlink_jump(nir_block *block, nir_jump_type type) > +static void > +unlink_jump(nir_block *block, nir_jump_type type, bool add_normal_successors) > { > if (block->successors[0]) > remove_phi_src(block->successors[0], block); > @@ -574,14 +574,14 @@ void unlink_jump(nir_block *block, nir_jump_type type) > } > > unlink_block_successors(block); > + if (add_normal_successors) > + block_add_normal_succs(block); > } > > void > nir_handle_remove_jump(nir_block *block, nir_jump_type type) > { > - unlink_jump(block, type); > - > - block_add_normal_succs(block); > + unlink_jump(block, type, true); > > nir_function_impl *impl = nir_cf_node_get_function(&block->cf_node); > nir_metadata_preserve(impl, nir_metadata_none); > @@ -689,7 +689,7 @@ cleanup_cf_node(nir_cf_node *node, nir_function_impl > *impl) > nir_foreach_instr_safe(block, instr) { > if (instr->type == nir_instr_type_jump) { > nir_jump_type jump_type = nir_instr_as_jump(instr)->type; > - unlink_jump(block, jump_type); > + unlink_jump(block, jump_type, false); > } else { > nir_foreach_ssa_def(instr, replace_ssa_def_uses, impl); > nir_instr_remove(instr); > -- > 2.5.3 > _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-dev