diff options
author | Matt Turner <[email protected]> | 2015-02-10 17:45:28 -0800 |
---|---|---|
committer | Matt Turner <[email protected]> | 2016-02-25 10:51:15 -0800 |
commit | 4009a9ead490ef1718e6fa83141aa086a43cd901 (patch) | |
tree | e7fec99d4cdfd6cdbd0b5da0a8dbd388cb332318 /src/mesa/drivers | |
parent | 65d3217cb03bc4be97c99300a5cc3f6190d06345 (diff) |
i965/fs: Allow saturate propagation to propagate negations into MADs.
Allows us to transform
mad res src0 src1 src2
mov.sat dst -res
into
mad.sat dst -src0 -src1 src2
instructions in affected programs: 3712 -> 3688 (-0.65%)
helped: 24
Reviewed-by: Ian Romanick <[email protected]>
Diffstat (limited to 'src/mesa/drivers')
-rw-r--r-- | src/mesa/drivers/dri/i965/brw_fs_saturate_propagation.cpp | 4 |
1 files changed, 4 insertions, 0 deletions
diff --git a/src/mesa/drivers/dri/i965/brw_fs_saturate_propagation.cpp b/src/mesa/drivers/dri/i965/brw_fs_saturate_propagation.cpp index 7c825097ca2..dc2b0c8aa8d 100644 --- a/src/mesa/drivers/dri/i965/brw_fs_saturate_propagation.cpp +++ b/src/mesa/drivers/dri/i965/brw_fs_saturate_propagation.cpp @@ -86,6 +86,10 @@ opt_saturate_propagation_local(fs_visitor *v, bblock_t *block) if (scan_inst->opcode == BRW_OPCODE_MUL) { scan_inst->src[0].negate = !scan_inst->src[0].negate; inst->src[0].negate = false; + } else if (scan_inst->opcode == BRW_OPCODE_MAD) { + scan_inst->src[0].negate = !scan_inst->src[0].negate; + scan_inst->src[1].negate = !scan_inst->src[1].negate; + inst->src[0].negate = false; } else if (scan_inst->opcode == BRW_OPCODE_ADD) { if (scan_inst->src[1].file == IMM) { if (!brw_negate_immediate(scan_inst->src[1].type, |