nir/opt_intrinsics: Rework progress
authorJason Ekstrand <jason.ekstrand@intel.com>
Tue, 22 Aug 2017 19:18:32 +0000 (12:18 -0700)
committerJason Ekstrand <jason.ekstrand@intel.com>
Wed, 25 Oct 2017 23:14:09 +0000 (16:14 -0700)
This commit fixes two issues:  First, we were returning false regardless
of whether or not the function made progress.  Second, we were calling
nir_metadata_preserve far more often than needed; we only need to call
it once per impl.

Reviewed-by: Lionel Landwerlin <lionel.g.landwerlin@intel.com>
src/compiler/nir/nir_opt_intrinsics.c

index f12dc8779cba162d156a4785e74fe0c2b38ac0a7..26a0f9650ad11ddcc39f95f8aefbac39f6d58905 100644 (file)
@@ -121,8 +121,6 @@ opt_intrinsics_impl(nir_function_impl *impl)
          nir_ssa_def_rewrite_uses(&intrin->dest.ssa,
                                   nir_src_for_ssa(replacement));
          nir_instr_remove(instr);
-         nir_metadata_preserve(impl, nir_metadata_block_index |
-                                     nir_metadata_dominance);
          progress = true;
       }
    }
@@ -136,9 +134,15 @@ nir_opt_intrinsics(nir_shader *shader)
    bool progress = false;
 
    nir_foreach_function(function, shader) {
-      if (function->impl)
-         progress |= opt_intrinsics_impl(function->impl);
+      if (!function->impl)
+         continue;
+
+      if (opt_intrinsics_impl(function->impl)) {
+         progress = true;
+         nir_metadata_preserve(function->impl, nir_metadata_block_index |
+                                               nir_metadata_dominance);
+      }
    }
 
-   return false;
+   return progress;
 }