i965: Update if_block/else_block in the dead control flow pass.
authorMatt Turner <mattst88@gmail.com>
Wed, 3 Sep 2014 04:34:12 +0000 (21:34 -0700)
committerKenneth Graunke <kenneth@whitecape.org>
Fri, 5 Sep 2014 16:52:29 +0000 (09:52 -0700)
I think this bug crept in only recently.

Reviewed-by: Kenneth Graunke <kenneth@whitecape.org>
src/mesa/drivers/dri/i965/brw_dead_control_flow.cpp

index 56884e64bf17aefaded326badd7244db1daad49f..7a302da1b6b594d87d479cb4af33edb9ad472d1a 100644 (file)
@@ -103,6 +103,13 @@ dead_control_flow_eliminate(backend_visitor *v)
          if (earlier_block && earlier_block->can_combine_with(later_block)) {
             earlier_block->combine_with(later_block);
 
+            foreach_block (block, v->cfg) {
+               if (block->if_block == later_block)
+                  block->if_block = earlier_block;
+               if (block->else_block == later_block)
+                  block->else_block = earlier_block;
+            }
+
             /* If ENDIF was in its own block, then we've now deleted it and
              * merged the two surrounding blocks, the latter of which the
              * __next block pointer was pointing to.