radeonsi/nir: call nir_lower_flrp only once per shader
authorMarek Olšák <marek.olsak@amd.com>
Wed, 13 Nov 2019 04:41:23 +0000 (23:41 -0500)
committerMarek Olšák <marek.olsak@amd.com>
Fri, 15 Nov 2019 19:34:49 +0000 (14:34 -0500)
Reviewed-by: Timothy Arceri <tarceri@itsqueeze.com>
src/gallium/drivers/radeonsi/si_shader_nir.c

index c11032ba8001b7fc5dfaa1367c218c845fcf1442..9a7bc54cad08944b657f89051c24842efa355082 100644 (file)
@@ -805,10 +805,6 @@ static void
 si_nir_opts(struct nir_shader *nir)
 {
        bool progress;
-        unsigned lower_flrp =
-                (nir->options->lower_flrp16 ? 16 : 0) |
-                (nir->options->lower_flrp32 ? 32 : 0) |
-                (nir->options->lower_flrp64 ? 64 : 0);
 
        do {
                progress = false;
@@ -839,7 +835,12 @@ si_nir_opts(struct nir_shader *nir)
                NIR_PASS(progress, nir, nir_opt_algebraic);
                NIR_PASS(progress, nir, nir_opt_constant_folding);
 
-               if (lower_flrp != 0) {
+               if (!nir->info.flrp_lowered) {
+                       unsigned lower_flrp =
+                               (nir->options->lower_flrp16 ? 16 : 0) |
+                               (nir->options->lower_flrp32 ? 32 : 0) |
+                               (nir->options->lower_flrp64 ? 64 : 0);
+                       assert(lower_flrp);
                        bool lower_flrp_progress = false;
 
                        NIR_PASS(lower_flrp_progress, nir, nir_lower_flrp,
@@ -855,7 +856,7 @@ si_nir_opts(struct nir_shader *nir)
                        /* Nothing should rematerialize any flrps, so we only
                         * need to do this lowering once.
                         */
-                       lower_flrp = 0;
+                       nir->info.flrp_lowered = true;
                }
 
                NIR_PASS(progress, nir, nir_opt_undef);