intel/fs: Move the defin[]/defout[] screening up to livein[]/liveout[] setup.
authorEmma Anholt <emma@anholt.net>
Tue, 13 Jun 2023 23:18:09 +0000 (16:18 -0700)
committerMarge Bot <emma+marge@anholt.net>
Tue, 22 Aug 2023 23:34:30 +0000 (23:34 +0000)
This keeps us from having to run the loop to propagate up quite so much.

steam shader-db time -1.86356% +/- 0.941498% (n=10).  There's a small
scheduling effect, since previously the scheduler wasn't considering
defin/defout:

cycles helped:   shaders/closed/steam/amnesia-the-dark-descent/high/241.shader_test FS SIMD16: 11428 -> 11422 (-0.05%) (scheduled: scheduled)
cycles helped:   shaders/humus-volumetricfogging2/1.shader_test FS SIMD32: 13832 -> 13800 (-0.23%) (scheduled: scheduled)
cycles helped:   shaders/tesseract/479.shader_test FS SIMD32:      9330 -> 8644 (-7.35%) (scheduled: scheduled)

cycles HURT:   shaders/robclark-shaders/android/angle/aztec_ruins/36.shader_test FS SIMD32: 7870 -> 7940 (0.89%) (scheduled: scheduled)
cycles HURT:   shaders/robclark-shaders/gfxbench5/gl_5_high_off/57.shader_test FS SIMD32: 7870 -> 7940 (0.89%) (scheduled: scheduled)
cycles HURT:   shaders/robclark-shaders/gfxbench5/gl_5_normal_off/54.shader_test FS SIMD32: 7870 -> 7940 (0.89%) (scheduled: scheduled)
cycles HURT:   shaders/robclark-shaders/android/angle/aztec_ruins/30.shader_test FS SIMD32: 8726 -> 8808 (0.94%) (scheduled: scheduled)
cycles HURT:   shaders/robclark-shaders/gfxbench5/gl_5_high_off/51.shader_test FS SIMD32: 8726 -> 8808 (0.94%) (scheduled: scheduled)
cycles HURT:   shaders/robclark-shaders/gfxbench5/gl_5_normal_off/48.shader_test FS SIMD32: 8726 -> 8808 (0.94%) (scheduled: scheduled)
cycles HURT:   shaders/robclark-shaders/gfxbench5/gl_4_off/129.shader_test TCS SIMD8: 3911 -> 3979 (1.74%) (scheduled: scheduled)
cycles HURT:   shaders/robclark-shaders/gfxbench5/gl_4_off/109.shader_test TCS SIMD8: 3911 -> 3979 (1.74%) (scheduled: scheduled)

total cycles in shared programs: 313096438 -> 313096306 (<.01%)
cycles in affected programs: 92200 -> 92068 (-0.14%)

Reviewed-by: Ian Romanick <ian.d.romanick@intel.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/24702>

src/intel/compiler/brw_fs_live_variables.cpp

index fa74fc2..c8f8f8c 100644 (file)
@@ -191,6 +191,7 @@ fs_live_variables::compute_live_variables()
             for (int i = 0; i < bitset_words; i++) {
                BITSET_WORD new_liveout = (child_bd->livein[i] &
                                           ~bd->liveout[i]);
+               new_liveout &= bd->defout[i]; /* Screen off uses with no reaching def */
                if (new_liveout) {
                   bd->liveout[i] |= new_liveout;
                   cont = true;
@@ -209,6 +210,7 @@ fs_live_variables::compute_live_variables()
             BITSET_WORD new_livein = (bd->use[i] |
                                       (bd->liveout[i] &
                                        ~bd->def[i]));
+            new_livein &= bd->defin[i]; /* Screen off uses with no reaching def */
             if (new_livein & ~bd->livein[i]) {
                bd->livein[i] |= new_livein;
                cont = true;
@@ -236,8 +238,8 @@ fs_live_variables::compute_start_end()
       struct block_data *bd = &block_data[block->num];
 
       for (int w = 0; w < bitset_words; w++) {
-         BITSET_WORD livedefin = bd->livein[w] & bd->defin[w];
-         BITSET_WORD livedefout = bd->liveout[w] & bd->defout[w];
+         BITSET_WORD livedefin = bd->livein[w];
+         BITSET_WORD livedefout = bd->liveout[w];
          BITSET_WORD livedefinout = livedefin | livedefout;
          while (livedefinout) {
             unsigned b = u_bit_scan(&livedefinout);