From 58a54091a96566a7e18c984b4587e0e1d1ee3e9d Mon Sep 17 00:00:00 2001 From: Matt Turner Date: Wed, 5 Nov 2014 15:23:05 -0800 Subject: 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 --- src/mesa/drivers/dri/i965/brw_fs_peephole_predicated_break.cpp | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) (limited to 'src/mesa/drivers') 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)) { -- cgit v1.2.3