Skip to content

Intel back-end optimizer improvements and interpolation rework in preparation for SIMD32 FS (2).

Francisco Jerez requested to merge currojerez/mesa:intel-simd32-mr-2 into master

The final purpose of this series is to rework the representation of barycentrics in the Intel back-end in order to avoid more or less subtle bugs while using SIMD32 fragment shaders (see the last two commits of this MR).

Unfortunately simply doing that would have led to a massive number of shader-db regressions due to limitations of the Intel back-end optimizer. In order to avoid that the rest of this MR includes a number of optimizer improvements that don't only prevent the regressions, but significantly improve the code quality of SIMD32 programs, and to a lesser extent SIMD8 and SIMD16 programs.

With SIMD32 enabled this MR leads to the following shader-db changes on ICL:

total instructions in shared programs: 20662316 -> 20466903 (-0.95%)
instructions in affected programs: 10538474 -> 10343061 (-1.85%)
helped: 68775
HURT: 6

total spills in shared programs: 8938 -> 8748 (-2.13%)
spills in affected programs: 376 -> 186 (-50.53%)
helped: 9
HURT: 5

total fills in shared programs: 8965 -> 8663 (-3.37%)
fills in affected programs: 965 -> 663 (-31.30%)
helped: 9
HURT: 6

LOST:   146
GAINED: 43

On SKL:

total instructions in shared programs: 18725867 -> 18614912 (-0.59%)
instructions in affected programs: 3876590 -> 3765635 (-2.86%)
helped: 27492
HURT: 2

LOST:   191
GAINED: 417

On SNB:

total instructions in shared programs: 14573613 -> 13980646 (-4.07%)
instructions in affected programs: 5199074 -> 4606107 (-11.41%)
helped: 29998
HURT: 0

LOST:   21
GAINED: 30

Results are somewhat less impressive but still significant without SIMD32 fragment shaders enabled. On ICL:

total instructions in shared programs: 16148728 -> 16061659 (-0.54%)
instructions in affected programs: 6114788 -> 6027719 (-1.42%)
helped: 42046
HURT: 6

total spills in shared programs: 8218 -> 8028 (-2.31%)
spills in affected programs: 376 -> 186 (-50.53%)
helped: 9
HURT: 5

total fills in shared programs: 8953 -> 8651 (-3.37%)
fills in affected programs: 965 -> 663 (-31.30%)
helped: 9
HURT: 6

LOST:   0
GAINED: 3

On SKL:

total instructions in shared programs: 14927994 -> 14926738 (-0.01%)
instructions in affected programs: 168850 -> 167594 (-0.74%)
helped: 711
HURT: 2

On SNB:

total instructions in shared programs: 10770538 -> 10734403 (-0.34%)
instructions in affected programs: 2702172 -> 2666037 (-1.34%)
helped: 17818
HURT: 0

All of the hurt shaders are either spilling slightly more or emitting additional NOP instructions due to the SIMD16 POW workaround for Gen8-9 combined with differences in scheduling.

Merge request reports