From: Ian Romanick <ian.d.roman...@intel.com> Shader-db results:
Ivy Bridge (0x0166): total instructions in shared programs: 6274041 -> 6273868 (-0.00%) instructions in affected programs: 30913 -> 30740 (-0.56%) helped: 121 No change on any other platform or with NIR. Weird. Signed-off-by: Ian Romanick <ian.d.roman...@intel.com> --- src/mesa/drivers/dri/i965/brw_fs_visitor.cpp | 37 +++++++++++++++++++++++++++- 1 file changed, 36 insertions(+), 1 deletion(-) diff --git a/src/mesa/drivers/dri/i965/brw_fs_visitor.cpp b/src/mesa/drivers/dri/i965/brw_fs_visitor.cpp index f1e9fb5..cc28808 100644 --- a/src/mesa/drivers/dri/i965/brw_fs_visitor.cpp +++ b/src/mesa/drivers/dri/i965/brw_fs_visitor.cpp @@ -685,6 +685,40 @@ fs_visitor::emit_interpolate_expression(ir_expression *ir) } } +static bool +is_comparison_of_expression_with_zero(ir_rvalue *ir) +{ + ir_expression *const cmp = ir->as_expression(); + + if (cmp == NULL) + return false; + + switch (cmp->operation) { + case ir_binop_less: + case ir_binop_greater: + case ir_binop_lequal: + case ir_binop_gequal: + case ir_binop_equal: + case ir_binop_nequal: + break; + default: + return false; + } + + const ir_constant *const op_const[2] = { + cmp->operands[0]->as_constant(), + cmp->operands[1]->as_constant() + }; + + const ir_expression *const op_expr[2] = { + cmp->operands[0]->as_expression(), + cmp->operands[1]->as_expression() + }; + + return (op_const[0] != NULL && op_const[0]->is_zero() && op_expr[1] != NULL) || + (op_const[1] != NULL && op_const[1]->is_zero() && op_expr[0] != NULL); +} + void fs_visitor::visit(ir_expression *ir) { @@ -725,7 +759,8 @@ fs_visitor::visit(ir_expression *ir) * ir_unop_b2f and ir_unop_b2i are implemented. */ ir_constant *const false_result = ir->operands[2]->as_constant(); - if (brw->gen >= 6 && false_result && false_result->is_zero()) { + if (brw->gen >= 6 && false_result && false_result->is_zero() && + !is_comparison_of_expression_with_zero(ir->operands[0])) { ir->operands[0]->accept(this); op[0] = this->result; ir->operands[1]->accept(this); -- 2.1.0 _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-dev