Shader-db results on bdw with INTEL_DEBUG=vec4: total instructions in shared programs: 1634044 -> 1612936 (-1.29%) instructions in affected programs: 802502 -> 781394 (-2.63%) helped: 5036 HURT: 1442
total cycles in shared programs: 9397790 -> 9355382 (-0.45%) cycles in affected programs: 5078600 -> 5036192 (-0.84%) helped: 3875 HURT: 2554 LOST: 0 GAINED: 0 Most of the hurt programs seem to be because we generate extra MOV's due to vectorizing things. For example, in shaders/non-free/steam/anomaly-2/158.shader_test, this: add(8) g116<1>.xyF g12<4,4,1>.xyyyF g1.4<0,4,1>.xyyyF { align16 NoDDClr 1Q }; add(8) g117<1>.xyF g12<4,4,1>.xyyyF g1.4<0,4,1>.zwwwF { align16 NoDDClr 1Q }; add(8) g116<1>.zwF g12<4,4,1>.xxxyF -g1.4<0,4,1>.xxxyF { align16 NoDDChk 1Q }; add(8) g117<1>.zwF g12<4,4,1>.xxxyF -g1.4<0,4,1>.zzzwF { align16 NoDDChk 1Q }; Turns into this: add(8) g13<1>F g12<4,4,1>.xyxyF g1.4<0,4,1>F { align16 1Q }; add(8) g14<1>F g12<4,4,1>.xyxyF -g1.4<0,4,1>F { align16 1Q }; mov(8) g116<1>.xyD g13<4,4,1>.xyyyD { align16 NoDDClr 1Q }; mov(8) g117<1>.xyD g13<4,4,1>.zwwwD { align16 NoDDClr 1Q }; mov(8) g116<1>.zwD g14<4,4,1>.xxxyD { align16 NoDDChk 1Q }; mov(8) g117<1>.zwD g14<4,4,1>.zzzwD { align16 NoDDChk 1Q }; So we eliminated two add's, but then had to introduce four mov's to transpose the result. I don't think there's much we can do about this at the NIR level, unfortunately. Signed-off-by: Connor Abbott <cwabbo...@gmail.com> --- src/mesa/drivers/dri/i965/brw_nir.c | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/src/mesa/drivers/dri/i965/brw_nir.c b/src/mesa/drivers/dri/i965/brw_nir.c index fe5cad4..29cafe6 100644 --- a/src/mesa/drivers/dri/i965/brw_nir.c +++ b/src/mesa/drivers/dri/i965/brw_nir.c @@ -198,6 +198,14 @@ nir_optimize(nir_shader *nir, bool is_scalar) nir_validate_shader(nir); progress |= nir_opt_cse(nir); nir_validate_shader(nir); + + if (!is_scalar) { + progress |= nir_opt_vectorize(nir); + nir_validate_shader(nir); + progress |= nir_copy_prop(nir); + nir_validate_shader(nir); + } + progress |= nir_opt_peephole_select(nir); nir_validate_shader(nir); progress |= nir_opt_algebraic(nir); -- 2.4.3 _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-dev