diff options
author | Matt Turner <[email protected]> | 2013-10-27 20:03:48 -0700 |
---|---|---|
committer | Matt Turner <[email protected]> | 2013-11-01 15:21:07 -0700 |
commit | ca675b73d3ac2e1b57ec385c2c80b05b6382f6b6 (patch) | |
tree | 037137ffbf36f2da3721832b85780b459a5a7596 /src | |
parent | a8f76d829bdcdb5f238ba6206f1b768098745022 (diff) |
i965/fs: Optimize saturating SEL.L(E) with imm val >= 1.0.
total instructions in shared programs: 1409124 -> 1406971 (-0.15%)
instructions in affected programs: 158376 -> 156223 (-1.36%)
Reviewed-by: Eric Anholt <[email protected]>
Reviewed-by: Paul Berry <[email protected]>
Diffstat (limited to 'src')
-rw-r--r-- | src/mesa/drivers/dri/i965/brw_fs.cpp | 22 |
1 files changed, 22 insertions, 0 deletions
diff --git a/src/mesa/drivers/dri/i965/brw_fs.cpp b/src/mesa/drivers/dri/i965/brw_fs.cpp index 2350cd097c5..56284d94e0b 100644 --- a/src/mesa/drivers/dri/i965/brw_fs.cpp +++ b/src/mesa/drivers/dri/i965/brw_fs.cpp @@ -1880,6 +1880,28 @@ fs_visitor::opt_algebraic() break; } break; + case BRW_OPCODE_SEL: + if (inst->saturate && inst->src[1].file == IMM) { + switch (inst->conditional_mod) { + case BRW_CONDITIONAL_LE: + case BRW_CONDITIONAL_L: + switch (inst->src[1].type) { + case BRW_REGISTER_TYPE_F: + if (inst->src[1].imm.f >= 1.0f) { + inst->opcode = BRW_OPCODE_MOV; + inst->src[1] = reg_undef; + progress = true; + } + break; + default: + break; + } + break; + default: + break; + } + } + break; default: break; } |