The cmod propagation pass handles CMP and MOV.NZ. If we propagated a conditional modifier other than NZ onto a MOV, it would be stuck there. Convert these instructions into a CMP to let the cmod be propagated further.
instructions in affected programs: 1482 -> 1454 (-1.89%) helped: 6 --- src/mesa/drivers/dri/i965/brw_fs.cpp | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/src/mesa/drivers/dri/i965/brw_fs.cpp b/src/mesa/drivers/dri/i965/brw_fs.cpp index 200a494..61e286a 100644 --- a/src/mesa/drivers/dri/i965/brw_fs.cpp +++ b/src/mesa/drivers/dri/i965/brw_fs.cpp @@ -2312,6 +2312,16 @@ fs_visitor::opt_algebraic() foreach_block_and_inst(block, fs_inst, inst, cfg) { switch (inst->opcode) { case BRW_OPCODE_MOV: + if (inst->dst.is_null() && inst->conditional_mod) { + inst->opcode = BRW_OPCODE_CMP; + inst->saturate = false; + inst->src[1] = fs_reg(0.0f); + inst->src[1].type = inst->src[0].type; + inst->dst.type = inst->src[0].type; + progress = true; + break; + } + if (inst->src[0].file != IMM) break; -- 2.0.5 _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-dev