[Mesa-dev] Loop unrolling and if statement opts

Eero Tamminen eero.t.tamminen at intel.com
Wed Jul 11 08:20:21 UTC 2018


Hi,

Have you considered partial loop unrolling support?

I.e. when loop counter is known, but too high for full unroll, doing 
partial loop unrolling (e.g. unroll 4x times) and dividing loop counter 
by same amount (if it didn't divide evenly, need to unroll remainder 
outside of loop).

This is supported e.g. by Intel Windows compiler.


	- Eero

On 11.07.2018 09:48, Timothy Arceri wrote:
> This series started out as me trying to unrolls some useless loops I
> spotted in some shaders from DXVK games (see patch 10), but I found
> some other issues and improvements along the way.
> 
> The biggest winner seem like it could be the dolphin uber shaders on
> i965 (on radeonsi the shaders don't seem to have spilling issues).
> The loops in the uber shaders that are unrolled are those used as
> wrappers around switchs by GLSL IR.
> 
> shader-db results for the series on IVB (note as the loops that are
> unrolled only have a single iteration I enabled shader-db reporting
> on shaders where loops are unrolled):
> 
> total instructions in shared programs: 10018187 -> 10016468 (-0.02%)
> instructions in affected programs: 104080 -> 102361 (-1.65%)
> helped: 36
> HURT: 15
> 
> total cycles in shared programs: 220065064 -> 154529655 (-29.78%)
> cycles in affected programs: 126063017 -> 60527608 (-51.99%)
> helped: 51
> HURT: 0
> 
> total loops in shared programs: 2515 -> 2308 (-8.23%)
> loops in affected programs: 903 -> 696 (-22.92%)
> helped: 51
> HURT: 0
> 
> total spills in shared programs: 4370 -> 4124 (-5.63%)
> spills in affected programs: 1397 -> 1151 (-17.61%)
> helped: 9
> HURT: 12
> 
> total fills in shared programs: 4581 -> 4419 (-3.54%)
> fills in affected programs: 2201 -> 2039 (-7.36%)
> helped: 9
> HURT: 15


More information about the mesa-dev mailing list