intel: Run the optimization loop before and after lowering int64
authorJason Ekstrand <jason@jlekstrand.net>
Fri, 12 Jul 2019 23:47:15 +0000 (18:47 -0500)
committerJason Ekstrand <jason@jlekstrand.net>
Sat, 13 Jul 2019 02:59:28 +0000 (02:59 +0000)
For bindless SSBO access, we have to do 64-bit address calculations.  On
ICL and above, we don't have 64-bit integer support so we have to lower
the address calculations to 32-bit arithmetic.  If we don't run the
optimization loop before lowering, we won't fold any of the address
chain calculations before lowering 64-bit arithmetic and they aren't
really foldable afterwards.  This cuts the size of the generated code in
the compute shader in dEQP-VK.ssbo.phys.layout.random.16bit.scalar.13 by
around 30%.

Reviewed-by: Kenneth Graunke <kenneth@whitecape.org>
Reviewed-by: Caio Marcelo de Oliveira Filho <caio.oliveira@intel.com>
src/intel/compiler/brw_nir.c

index ef387e5160175701f8b2ad5f6a2f775e2ee9340d..a08057581605d5f1b0e989caad482e3a25a5a330 100644 (file)
@@ -821,7 +821,6 @@ brw_postprocess_nir(nir_shader *nir, const struct brw_compiler *compiler,
    UNUSED bool progress; /* Written by OPT */
 
    OPT(brw_nir_lower_mem_access_bit_sizes);
-   OPT(nir_lower_int64, nir->options->lower_int64_options);
 
    do {
       progress = false;
@@ -830,6 +829,9 @@ brw_postprocess_nir(nir_shader *nir, const struct brw_compiler *compiler,
 
    brw_nir_optimize(nir, compiler, is_scalar, false);
 
+   if (OPT(nir_lower_int64, nir->options->lower_int64_options))
+      brw_nir_optimize(nir, compiler, is_scalar, false);
+
    if (devinfo->gen >= 6) {
       /* Try and fuse multiply-adds */
       OPT(brw_nir_opt_peephole_ffma);