freedreno/ir3: cleanup after lower_locals_to_regs
authorRob Clark <robdclark@chromium.org>
Tue, 17 Dec 2019 19:57:14 +0000 (11:57 -0800)
committerMarge Bot <eric+marge@anholt.net>
Sat, 1 Feb 2020 02:40:22 +0000 (02:40 +0000)
Signed-off-by: Rob Clark <robdclark@chromium.org>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/merge_requests/3569>

src/freedreno/ir3/ir3_context.c

index 334b0ae0bab5ce39a6d80f0f5b4023613d0629b0..33e73bcb21655f5a31ebe59e5b99a2529221113b 100644 (file)
@@ -79,21 +79,30 @@ ir3_context_init(struct ir3_compiler *compiler,
         * in ir3_optimize_nir():
         */
        NIR_PASS_V(ctx->s, nir_lower_bool_to_int32);
-       NIR_PASS_V(ctx->s, nir_lower_locals_to_regs);
+       bool progress = false;
+       NIR_PASS(progress, ctx->s, nir_lower_locals_to_regs);
+
+       /* we could need cleanup after lower_locals_to_regs */
+       while (progress) {
+               progress = false;
+               NIR_PASS(progress, ctx->s, nir_opt_algebraic);
+               NIR_PASS(progress, ctx->s, nir_opt_constant_folding);
+       }
 
        /* We want to lower nir_op_imul as late as possible, to catch also
         * those generated by earlier passes (e.g, nir_lower_locals_to_regs).
         * However, we want a final swing of a few passes to have a chance
         * at optimizing the result.
         */
-       bool progress = false;
+       progress = false;
        NIR_PASS(progress, ctx->s, ir3_nir_lower_imul);
-       if (progress) {
-               NIR_PASS_V(ctx->s, nir_opt_algebraic);
-               NIR_PASS_V(ctx->s, nir_opt_copy_prop_vars);
-               NIR_PASS_V(ctx->s, nir_opt_dead_write_vars);
-               NIR_PASS_V(ctx->s, nir_opt_dce);
-               NIR_PASS_V(ctx->s, nir_opt_constant_folding);
+       while (progress) {
+               progress = false;
+               NIR_PASS(progress, ctx->s, nir_opt_algebraic);
+               NIR_PASS(progress, ctx->s, nir_opt_copy_prop_vars);
+               NIR_PASS(progress, ctx->s, nir_opt_dead_write_vars);
+               NIR_PASS(progress, ctx->s, nir_opt_dce);
+               NIR_PASS(progress, ctx->s, nir_opt_constant_folding);
        }
 
        /* Enable the texture pre-fetch feature only a4xx onwards.  But