st/nir: Move 64-bit lowering later
authorJason Ekstrand <jason.ekstrand@intel.com>
Mon, 4 Mar 2019 23:02:39 +0000 (17:02 -0600)
committerJason Ekstrand <jason@jlekstrand.net>
Wed, 6 Mar 2019 17:24:57 +0000 (17:24 +0000)
Now that we have a loop unrolling cost function and loop unrolling isn't
going to kill us the moment we have a 64-bit op in a loop, we can go
ahead and move 64-bit lowering later.  This gives us the opportunity to
do more optimizations and actually let the full optimizer run even on
64-bit ops rather than hoping one round of opt_algebraic will fix
everything.  This substantially reduces both fp64 shader compile times
and the resulting code size.

Reviewed-by: Matt Turner <mattst88@gmail.com>
Reviewed-by: Jordan Justen <jordan.l.justen@intel.com>
Reviewed-by: Kenneth Graunke <kenneth@whitecape.org>
src/mesa/state_tracker/st_glsl_to_nir.cpp

index 3d01b91f4258c0ad50f6c4fad9d224bed174fafd..fa0cdf771e414dc5ce495f85d30b9101b8d99202 100644 (file)
@@ -410,6 +410,8 @@ st_glsl_to_nir(struct st_context *st, struct gl_program *prog,
      NIR_PASS_V(nir, nir_lower_alu_to_scalar);
    }
 
+   st_nir_opts(nir, is_scalar);
+
    if (lower_64bit) {
       bool lowered_64bit_ops = false;
       bool progress = false;
@@ -429,9 +431,10 @@ st_glsl_to_nir(struct st_context *st, struct gl_program *prog,
          NIR_PASS(progress, nir, nir_opt_algebraic);
          lowered_64bit_ops |= progress;
       } while (progress);
-   }
 
-   st_nir_opts(nir, is_scalar);
+      if (progress)
+         st_nir_opts(nir, is_scalar);
+   }
 
    return nir;
 }