i965/vec4: Handle ir_triop_lrp on Gen4-5 as well.
authorKenneth Graunke <kenneth@whitecape.org>
Mon, 24 Feb 2014 00:29:46 +0000 (16:29 -0800)
committerKenneth Graunke <kenneth@whitecape.org>
Wed, 26 Feb 2014 10:16:53 +0000 (02:16 -0800)
commit56879a7ac41b8c7513a97cc02921f76a2ec8407c
treedc834fc03c10e78a90def8df14c54ff82f894096
parentffde483f3c4da547f2823f72554cea1d1ff25e48
i965/vec4: Handle ir_triop_lrp on Gen4-5 as well.

When the vec4 backend encountered an ir_triop_lrp, it always emitted an
actual LRP instruction, which only exists on Gen6+.  Gen4-5 used
lower_instructions() to decompose ir_triop_lrp at the IR level.

Since commit 8d37e9915a3b21 ("glsl: Optimize open-coded lrp into lrp."),
we've had an bug where lower_instructions translates ir_triop_lrp into
arithmetic, but opt_algebraic reassembles it back into a lrp.

To avoid this ordering concern, just handle ir_triop_lrp in the backend.
The FS backend already does this, so we may as well do likewise.

v2: Add a comment reminding us that we could emit better assembly if we
    implemented the infrastructure necessary to support using MAC.
    (Assembly code provided by Eric Anholt).

Cc: "10.1" <mesa-stable@lists.freedesktop.org>
Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=75253
Signed-off-by: Kenneth Graunke <kenneth@whitecape.org>
Reviewed-by: Matt Turner <mattst88@gmail.com>
Acked-by: Eric Anholt <eric@anholt.net>
src/mesa/drivers/dri/i965/brw_vec4.h
src/mesa/drivers/dri/i965/brw_vec4_visitor.cpp