i965/nir/opt_peephole_ffma: Bypass fusion if any operand of fadd and fmul is a const
authorEduardo Lima Mitev <elima@igalia.com>
Thu, 22 Oct 2015 13:32:13 +0000 (15:32 +0200)
committerEduardo Lima Mitev <elima@igalia.com>
Tue, 10 Nov 2015 20:13:35 +0000 (21:13 +0100)
commitde51676b410ff3ccab1df765f8eee15126c9de4c
tree020e81651d7307d8f7f13e4a11cc6c96614f995f
parentfb3b5669cee85781b603f612228387e9a2e4120f
i965/nir/opt_peephole_ffma: Bypass fusion if any operand of fadd and fmul is a const

When both fadd and fmul instructions have at least one operand that is a
constant and it is only used once, the total number of instructions can
be reduced from 3 (1 ffma + 2 load_const) to 2 (1 fmul + 1 fadd); because
the constants will be progagated as immediate operands of fmul and fadd.

This patch detects these situations and prevents fusing fmul+fadd into ffma.

Shader-db results on i965 Haswell:

total instructions in shared programs: 6235835 -> 6225895 (-0.16%)
instructions in affected programs:     1124094 -> 1114154 (-0.88%)
total loops in shared programs:        1979 -> 1979 (0.00%)
helped:                                7612
HURT:                                  843
GAINED:                                4
LOST:                                  0

Reviewed-by: Jason Ekstrand <jason.ekstrand@intel.com>
src/mesa/drivers/dri/i965/brw_nir_opt_peephole_ffma.c