nir/opt_dead_cf: fixup for new foreach_block()
authorConnor Abbott <cwabbott0@gmail.com>
Tue, 12 Apr 2016 18:43:16 +0000 (14:43 -0400)
committerJason Ekstrand <jason.ekstrand@intel.com>
Thu, 28 Apr 2016 22:52:17 +0000 (15:52 -0700)
Reviewed-by: Jason Ekstrand <jason@jlekstrand.net>
src/compiler/nir/nir_opt_dead_cf.c

index d397695785f6cd77cf3681cd69a7436667145d1a..a8506b7d36ab8eb233cdba2f24bdf60376d7daa3 100644 (file)
@@ -135,33 +135,33 @@ opt_constant_if(nir_if *if_stmt, bool condition)
 }
 
 static bool
-block_has_no_side_effects(nir_block *block, void *state)
+cf_node_has_side_effects(nir_cf_node *node)
 {
-   (void) state;
+   nir_foreach_block_in_cf_node(block, node) {
+      nir_foreach_instr(block, instr) {
+         if (instr->type == nir_instr_type_call)
+            return true;
 
-   nir_foreach_instr(block, instr) {
-      if (instr->type == nir_instr_type_call)
-         return false;
+         /* Return instructions can cause us to skip over other side-effecting
+          * instructions after the loop, so consider them to have side effects
+          * here.
+          */
 
-      /* Return instructions can cause us to skip over other side-effecting
-       * instructions after the loop, so consider them to have side effects
-       * here.
-       */
+         if (instr->type == nir_instr_type_jump &&
+             nir_instr_as_jump(instr)->type == nir_jump_return)
+            return true;
 
-      if (instr->type == nir_instr_type_jump &&
-          nir_instr_as_jump(instr)->type == nir_jump_return)
-         return false;
-
-      if (instr->type != nir_instr_type_intrinsic)
-         continue;
+         if (instr->type != nir_instr_type_intrinsic)
+            continue;
 
-      nir_intrinsic_instr *intrin = nir_instr_as_intrinsic(instr);
-      if (!nir_intrinsic_infos[intrin->intrinsic].flags &
-          NIR_INTRINSIC_CAN_ELIMINATE)
-         return false;
+         nir_intrinsic_instr *intrin = nir_instr_as_intrinsic(instr);
+         if (!nir_intrinsic_infos[intrin->intrinsic].flags &
+             NIR_INTRINSIC_CAN_ELIMINATE)
+            return true;
+      }
    }
 
-   return true;
+   return false;
 }
 
 static bool
@@ -199,8 +199,7 @@ loop_is_dead(nir_loop *loop)
        nir_block_first_instr(after)->type == nir_instr_type_phi)
       return false;
 
-   if (!nir_foreach_block_in_cf_node_call(&loop->cf_node, block_has_no_side_effects,
-                                     NULL))
+   if (cf_node_has_side_effects(&loop->cf_node))
       return false;
 
    nir_function_impl *impl = nir_cf_node_get_function(&loop->cf_node);