Mesa (master): nir/opt_loop_unroll: Remove unneeded phis if we make progress

GitLab Mirror gitlab-mirror at kemper.freedesktop.org
Wed Aug 29 06:02:19 UTC 2018


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

Author: Timothy Arceri <tarceri at itsqueeze.com>
Date:   Wed Jul 11 10:50:16 2018 +1000

nir/opt_loop_unroll: Remove unneeded phis if we make progress

Now that SSA values can be derefs and they have special rules, we have
to be a bit more careful about our LCSSA phis.  In particular, we need
to clean up in case LCSSA ended up creating a phi node for a deref.
This avoids validation issues with some CTS tests with the following
patch, but its possible this we could also see the same problem with
the existing unrolling passes.

Reviewed-by: Jason Ekstrand <jason at jlekstrand.net>

---

 src/compiler/nir/nir_opt_loop_unroll.c | 10 +++++++++-
 1 file changed, 9 insertions(+), 1 deletion(-)

diff --git a/src/compiler/nir/nir_opt_loop_unroll.c b/src/compiler/nir/nir_opt_loop_unroll.c
index a1ad0e5981..e0e0b75471 100644
--- a/src/compiler/nir/nir_opt_loop_unroll.c
+++ b/src/compiler/nir/nir_opt_loop_unroll.c
@@ -575,9 +575,17 @@ nir_opt_loop_unroll_impl(nir_function_impl *impl,
                                 &has_nested_loop);
    }
 
-   if (progress)
+   if (progress) {
       nir_lower_regs_to_ssa_impl(impl);
 
+      /* Calling nir_convert_loop_to_lcssa() adds extra phi nodes which may
+       * not be valid if they're used for something such as a deref.
+       *  Remove any unneeded phis.
+       */
+      nir_copy_prop(impl->function->shader);
+      nir_opt_remove_phis_impl(impl);
+   }
+
    return progress;
 }
 




More information about the mesa-commit mailing list