Module: Mesa
Branch: main
Commit: 88756cee8da77a742fc031ac83f2e5a197023ef8
URL:    
http://cgit.freedesktop.org/mesa/mesa/commit/?id=88756cee8da77a742fc031ac83f2e5a197023ef8

Author: Kenneth Graunke <[email protected]>
Date:   Tue May 24 01:36:50 2022 -0700

intel/compiler: Run nir_opt_large_constants before scalarizing consts

nir_opt_large_constants balks at seeing a store_deref of a variable
where the source is a vecN operation of multiple load_consts, and thinks
that isn't a constant, so it should not bother promoting it.

Unfortunately, we were running nir_lower_load_const_to_scalar before
nir_opt_large_constants, so this prevented a ton of constant promotion.

This commit /used to help/ some shaders in shader-db. Presumably since
!16770 landed, those shaders were already helped.  Currently ther are
no shader-db changes on any Intel platform.

Fossil-db results:

All Intel platforms had similar results. (Ice Lake shown)
Instructions in all programs: 141998227 -> 141421756 (-0.4%)
Instructions helped: 12515
Instructions hurt: 237

SENDs in all programs: 7437925 -> 7468033 (+0.4%)
SENDs hurt: 12806

Cycles in all programs: 9161655753 -> 9132869800 (-0.3%)
Cycles helped: 10163
Cycles hurt: 2637

Spills in all programs: 19977 -> 18678 (-6.5%)
Spills helped: 384
Spills hurt: 40

Fills in all programs: 32863 -> 31396 (-4.5%)
Fills helped: 385
Fills hurt: 42

Lost: 1

Lots of Shadow of the Tomb Raider fragment shaders and Batman Arkham
Origins vertex shaders were hurt for SENDs in this commit.  A couple
Aztec Ruins compute shaders and Spaceship shaders (multiple stages)
were also hurt.

All of the shaders hurt for spills or fills were Spaceship compute
shaders.  Nearly all of the shaders helped were Shadow of the Tomb
Raider fragmenet shaders.  One Spaceship shader was reall, REALLY helped:

Spills helped 
fossils/fossil-db/Spaceship.run.9f90a2a226fcc57f.1.foz/0b507d3abe2e3c28/compute:
 321 -> 13 (-96.0%)
Fills helped 
fossils/fossil-db/Spaceship.run.9f90a2a226fcc57f.1.foz/0b507d3abe2e3c28/compute:
 279 -> 21 (-92.5%)

Overall this seems like an improvement, but we may want to actually
run these few benchmarks before landing.

Reviewed-by: Emma Anholt <[email protected]>
Reviewed-by: Ian Romanick <[email protected]>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/16539>

---

 src/intel/compiler/brw_nir.c | 8 ++++----
 1 file changed, 4 insertions(+), 4 deletions(-)

diff --git a/src/intel/compiler/brw_nir.c b/src/intel/compiler/brw_nir.c
index cb88c50ffa6..760b661f5ba 100644
--- a/src/intel/compiler/brw_nir.c
+++ b/src/intel/compiler/brw_nir.c
@@ -955,10 +955,6 @@ brw_preprocess_nir(const struct brw_compiler *compiler, 
nir_shader *nir,
 
    OPT(nir_lower_bit_size, lower_bit_size_callback, (void *)compiler);
 
-   if (is_scalar) {
-      OPT(nir_lower_load_const_to_scalar);
-   }
-
    /* Lower a bunch of stuff */
    OPT(nir_lower_var_copies);
 
@@ -969,6 +965,10 @@ brw_preprocess_nir(const struct brw_compiler *compiler, 
nir_shader *nir,
       OPT(nir_opt_large_constants, NULL, 32);
    }
 
+   if (is_scalar) {
+      OPT(nir_lower_load_const_to_scalar);
+   }
+
    OPT(nir_lower_system_values);
    OPT(nir_lower_compute_system_values, NULL);
 

Reply via email to