lima/ppir: add NIR pass to split varying loads
NIR may emit a single instrinsic to load several packed varyings, but that's suboptimal for Utgard PP for several reasons:
- varyings that are used as sampler inputs can be passed using pipeline register with increased precision
- we have small number of regs, so using a vec4 regs for storing two vec2 varyings increases reg pressure.
Add NIR pass to split a single load into several loads and utilize it in lima.
No piglit regressions.
shader-db:
total instructions in shared programs: 81343 -> 81274 (-0.08%)
instructions in affected programs: 217 -> 148 (-31.80%)
helped: 30
HURT: 0
helped stats (abs) min: 1 max: 9 x̄: 2.30 x̃: 2
helped stats (rel) min: 5.26% max: 66.67% x̄: 45.69% x̃: 50.00%
95% mean confidence interval for instructions value: -2.81 -1.79
95% mean confidence interval for instructions %-change: -53.88% -37.49%
Instructions are helped.
total loops in shared programs: 81 -> 81 (0.00%)
loops in affected programs: 0 -> 0
helped: 0
HURT: 0
total spills in shared programs: 80 -> 80 (0.00%)
spills in affected programs: 0 -> 0
helped: 0
HURT: 0
total fills in shared programs: 200 -> 200 (0.00%)
fills in affected programs: 0 -> 0
helped: 0
HURT: 0
LOST: 0
GAINED: 0
Total CPU time (seconds): 121.09 -> 133.92 (10.60%)
Depends on !1981 (merged)