-
Kenneth Graunke authored
In 36f0f031 (circa 2016), Emma Anholt extended nir_opt_peephole_select to be more aggressive, and allow some simple ALU instructions and not just moves. That included nir_intrinsic_load_uniform, since it's common to read the same uniform in both the if and else case, but process it with slightly different ALU math. This improved glmark2 tests by 2x on vc4. In 2017 a nir_lower_uniforms_to_ubo pass was introduced to optionally lower uniforms to UBOs. These days, most drivers use this pass, and it's called from the common st_glsl_to_nir code. However, the select peephole pass is called later, by drivers. So that means it would not see load_uniform intrinsics, but rather load_ubo intrinsics. Effectively, this means that we accidentally disabled the select peephole for any case which read uniform values on most drivers. shader-db statistics on Icelake: total instructions in shared programs: 19563921 -> 19559786 (-0.02%) instructions in affected programs: 246386 -> 242251 (-1.68%) helped: 564 / HURT: 0 helped stats (abs) min: 1 max: 69 x̄: 7.33 x̃: 3 helped stats (rel) min: 0.10% max: 12.72% x̄: 2.36% x̃: 2.31% 95% mean confidence interval for instructions value: -8.46 -6.20 95% mean confidence interval for instructions %-change: -2.52% -2.21% Instructions are helped. total cycles in shared programs: 849043372 -> 842662124 (-0.75%) cycles in affected programs: 64157223 -> 57775975 (-9.95%) helped: 841 / HURT: 235 helped stats (abs) min: 1 max: 166697 x̄: 7606.52 x̃: 32 helped stats (rel) min: 0.01% max: 63.12% x̄: 3.89% x̃: 1.06% HURT stats (abs) min: 1 max: 790 x̄: 67.39 x̃: 12 HURT stats (rel) min: <.01% max: 50.85% x̄: 1.96% x̃: 0.45% 95% mean confidence interval for cycles value: -7590.95 -4270.11 95% mean confidence interval for cycles %-change: -3.05% -2.18% Cycles are helped. One shader dropped a send message. SIMD32 churn: +2, -33
5c2bee59