From e0519294c7f416beb726d0e1463520f3166637d6 Mon Sep 17 00:00:00 2001 From: Jason Ekstrand Date: Tue, 22 Aug 2017 12:18:32 -0700 Subject: [PATCH] nir/opt_intrinsics: Rework progress 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 --- src/compiler/nir/nir_opt_intrinsics.c | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/src/compiler/nir/nir_opt_intrinsics.c b/src/compiler/nir/nir_opt_intrinsics.c index f12dc87..26a0f96 100644 --- a/src/compiler/nir/nir_opt_intrinsics.c +++ b/src/compiler/nir/nir_opt_intrinsics.c @@ -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; } -- 2.7.4