i965/fs: Connect cfg properly in predicated break peephole.

If the ENDIF instruction was the only instruction in its block, we'd
leave the successors of the merged if+jump block in a bad state.

Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=83080
Reviewed-by: Kenneth Graunke <kenneth@whitecape.org>
This commit is contained in:
Matt Turner
2014-08-31 11:07:58 -07:00
committed by Kenneth Graunke
parent 1a00f24751
commit 3e248e0418
@@ -87,13 +87,18 @@ fs_visitor::opt_peephole_predicated_break()
}
if_inst->remove(if_block);
bblock_t *later_block = endif_block;
if (endif_block->start_ip == endif_block->end_ip) {
later_block = (bblock_t *)endif_block->link.next;
}
endif_inst->remove(endif_block);
if_block->children.make_empty();
endif_block->parents.make_empty();
earlier_block->children.make_empty();
later_block->parents.make_empty();
if_block->add_successor(cfg->mem_ctx, jump_block);
jump_block->add_successor(cfg->mem_ctx, endif_block);
earlier_block->add_successor(cfg->mem_ctx, jump_block);
jump_block->add_successor(cfg->mem_ctx, later_block);
if (earlier_block->can_combine_with(jump_block)) {
earlier_block->combine_with(jump_block);