From: Rob Clark Date: Tue, 17 Dec 2019 19:57:14 +0000 (-0800) Subject: freedreno/ir3: cleanup after lower_locals_to_regs X-Git-Url: http://git.osdn.net/view?a=commitdiff_plain;h=c1194e10b2dc4d14ea21eb9bc8e607056ebaffcd;p=android-x86%2Fexternal-mesa.git freedreno/ir3: cleanup after lower_locals_to_regs Signed-off-by: Rob Clark Part-of: --- diff --git a/src/freedreno/ir3/ir3_context.c b/src/freedreno/ir3/ir3_context.c index 334b0ae0bab..33e73bcb216 100644 --- a/src/freedreno/ir3/ir3_context.c +++ b/src/freedreno/ir3/ir3_context.c @@ -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