Mesa (master): i965/fs: Connect cfg properly in predicated break peephole.

Kenneth Graunke kwg at kemper.freedesktop.org
Fri Sep 5 17:01:39 UTC 2014


Module: Mesa
Branch: master
Commit: 3e248e0418370373ac5bcee4b0a88b501b5b22a9
URL:    http://cgit.freedesktop.org/mesa/mesa/commit/?id=3e248e0418370373ac5bcee4b0a88b501b5b22a9

Author: Matt Turner <mattst88 at gmail.com>
Date:   Sun Aug 31 11:07:58 2014 -0700

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 at whitecape.org>

---

 .../drivers/dri/i965/brw_fs_peephole_predicated_break.cpp |   13 +++++++++----
 1 file changed, 9 insertions(+), 4 deletions(-)

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 ab197ee..eb99681 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
@@ -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);




More information about the mesa-commit mailing list