[Mesa-dev] [PATCH 1/3] i965: Improve dead control flow elimination.

Matt Turner mattst88 at gmail.com
Mon Jul 21 11:42:18 PDT 2014


... to eliminate an ELSE instruction followed immediately by an ENDIF.

instructions in affected programs:     704 -> 700 (-0.57%)
---
 .../drivers/dri/i965/brw_dead_control_flow.cpp     | 25 +++++++++++++---------
 1 file changed, 15 insertions(+), 10 deletions(-)

diff --git a/src/mesa/drivers/dri/i965/brw_dead_control_flow.cpp b/src/mesa/drivers/dri/i965/brw_dead_control_flow.cpp
index 14c6898..f0530a1 100644
--- a/src/mesa/drivers/dri/i965/brw_dead_control_flow.cpp
+++ b/src/mesa/drivers/dri/i965/brw_dead_control_flow.cpp
@@ -32,6 +32,7 @@
 /* Look for and eliminate dead control flow:
  *
  *   - if/endif
+ *   . else in else/endif
  *   - if/else/endif
  */
 bool
@@ -54,24 +55,28 @@ dead_control_flow_eliminate(backend_visitor *v)
 
       backend_instruction *if_inst = NULL, *else_inst = NULL;
       backend_instruction *prev_inst = (backend_instruction *) endif_inst->prev;
-      if (prev_inst->opcode == BRW_OPCODE_IF) {
-         if_inst = prev_inst;
-         found = true;
-      } else if (prev_inst->opcode == BRW_OPCODE_ELSE) {
+      if (prev_inst->opcode == BRW_OPCODE_ELSE) {
          else_inst = prev_inst;
+         found = true;
 
          prev_inst = (backend_instruction *) prev_inst->prev;
-         if (prev_inst->opcode == BRW_OPCODE_IF) {
-            if_inst = prev_inst;
-            found = true;
-         }
+      }
+
+      if (prev_inst->opcode == BRW_OPCODE_IF) {
+         if_inst = prev_inst;
+         found = true;
+      } else {
+         /* Don't remove the ENDIF if we didn't find a dead IF. */
+         endif_inst = NULL;
       }
 
       if (found) {
-         if_inst->remove();
+         if (if_inst)
+            if_inst->remove();
          if (else_inst)
             else_inst->remove();
-         endif_inst->remove();
+         if (endif_inst)
+            endif_inst->remove();
          progress = true;
       }
    }
-- 
1.8.5.5



More information about the mesa-dev mailing list