From c1194e10b2dc4d14ea21eb9bc8e607056ebaffcd Mon Sep 17 00:00:00 2001 From: Rob Clark Date: Tue, 17 Dec 2019 11:57:14 -0800 Subject: [PATCH] freedreno/ir3: cleanup after lower_locals_to_regs Signed-off-by: Rob Clark Part-of: --- src/freedreno/ir3/ir3_context.c | 25 +++++++++++++++++-------- 1 file changed, 17 insertions(+), 8 deletions(-) diff --git a/src/freedreno/ir3/ir3_context.c b/src/freedreno/ir3/ir3_context.c index 334b0ae..33e73bc 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 -- 2.7.4