From: Matt Turner Date: Wed, 5 Nov 2014 23:23:05 +0000 (-0800) Subject: i965/fs: Wire up control flow correctly in predicated break pass. X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=58a54091a96566a7e18c984b4587e0e1d1ee3e9d;p=mesa.git i965/fs: Wire up control flow correctly in predicated break pass. When the earlier block ended with control flow, we'd mistakenly remove some of its links to its children. The same happened with the later block. Acked-by: Jason Ekstrand --- diff --git a/src/mesa/drivers/dri/i965/brw_fs_peephole_predicated_break.cpp b/src/mesa/drivers/dri/i965/brw_fs_peephole_predicated_break.cpp index b7a1d7e7722..047c2c0b1cf 100644 --- a/src/mesa/drivers/dri/i965/brw_fs_peephole_predicated_break.cpp +++ b/src/mesa/drivers/dri/i965/brw_fs_peephole_predicated_break.cpp @@ -107,10 +107,14 @@ fs_visitor::opt_peephole_predicated_break() } endif_inst->remove(endif_block); - earlier_block->children.make_empty(); - later_block->parents.make_empty(); + if (!earlier_block->ends_with_control_flow()) { + earlier_block->children.make_empty(); + earlier_block->add_successor(cfg->mem_ctx, jump_block); + } - earlier_block->add_successor(cfg->mem_ctx, jump_block); + if (!later_block->starts_with_control_flow()) { + later_block->parents.make_empty(); + } jump_block->add_successor(cfg->mem_ctx, later_block); if (earlier_block->can_combine_with(jump_block)) {