Mesa (master): i965/fs: Wire up control flow correctly in predicated break pass.

Matt Turner mattst88 at kemper.freedesktop.org
Fri Nov 7 00:35:31 UTC 2014


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

Author: Matt Turner <mattst88 at gmail.com>
Date:   Wed Nov  5 15:23:05 2014 -0800

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 <jason.ekstrand at intel.com>

---

 .../drivers/dri/i965/brw_fs_peephole_predicated_break.cpp    |   10 +++++++---
 1 file changed, 7 insertions(+), 3 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 b7a1d7e..047c2c0 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)) {




More information about the mesa-commit mailing list