freedreno/a2xx: ir2: fix lowering of instructions after float lowering
authorJonathan Marek <jonathan@marek.ca>
Wed, 4 Sep 2019 19:18:09 +0000 (15:18 -0400)
committerJonathan Marek <jonathan@marek.ca>
Fri, 6 Sep 2019 02:24:29 +0000 (02:24 +0000)
Some instructions generated by int/bool float lowering need to be lowered
by opt_algebraic.

Fixes: 43dbd7d6
Signed-off-by: Jonathan Marek <jonathan@marek.ca>
Reviewed-by: Rob Clark <robdclark@chromium.org>
Reviewed-by: Eric Anholt <eric@anholt.net>
src/gallium/drivers/freedreno/a2xx/ir2_nir.c

index 6915194234db74957d70bdf0e6387e9cfadb25a4..bb3ca9c9c0ccd5bb6b3a61dabd4f25ad0bef7544 100644 (file)
@@ -1097,15 +1097,14 @@ ir2_nir_compile(struct ir2_context *ctx, bool binning)
        if (binning)
                cleanup_binning(ctx);
 
-       /* postprocess */
-       OPT_V(ctx->nir, nir_opt_algebraic_late);
-
        OPT_V(ctx->nir, nir_copy_prop);
        OPT_V(ctx->nir, nir_opt_dce);
        OPT_V(ctx->nir, nir_opt_move, nir_move_comparisons);
 
        OPT_V(ctx->nir, nir_lower_int_to_float);
        OPT_V(ctx->nir, nir_lower_bool_to_float);
+       while(OPT(ctx->nir, nir_opt_algebraic));
+       OPT_V(ctx->nir, nir_opt_algebraic_late);
        OPT_V(ctx->nir, nir_lower_to_source_mods, nir_lower_all_source_mods);
 
        OPT_V(ctx->nir, nir_lower_alu_to_scalar, ir2_alu_to_scalar_filter_cb, NULL);