i965: Handle all_equal/any_nequal in the new FS.
authorEric Anholt <eric@anholt.net>
Mon, 27 Sep 2010 23:11:18 +0000 (16:11 -0700)
committerEric Anholt <eric@anholt.net>
Mon, 27 Sep 2010 23:12:18 +0000 (16:12 -0700)
These are generated for scalar operands instead of plain equal/nequal.
But for scalars, they're the same anyway.  +30 piglits.

src/mesa/drivers/dri/i965/brw_fs.cpp

index cf3e4e6..9d022e0 100644 (file)
@@ -725,11 +725,13 @@ fs_visitor::visit(ir_expression *ir)
       emit(fs_inst(BRW_OPCODE_AND, this->result, this->result, fs_reg(0x1)));
       break;
    case ir_binop_equal:
+   case ir_binop_all_equal: /* same as nequal for scalars */
       inst = emit(fs_inst(BRW_OPCODE_CMP, this->result, op[0], op[1]));
       inst->conditional_mod = BRW_CONDITIONAL_Z;
       emit(fs_inst(BRW_OPCODE_AND, this->result, this->result, fs_reg(0x1)));
       break;
    case ir_binop_nequal:
+   case ir_binop_any_nequal: /* same as nequal for scalars */
       inst = emit(fs_inst(BRW_OPCODE_CMP, this->result, op[0], op[1]));
       inst->conditional_mod = BRW_CONDITIONAL_NZ;
       emit(fs_inst(BRW_OPCODE_AND, this->result, this->result, fs_reg(0x1)));
@@ -750,8 +752,6 @@ fs_visitor::visit(ir_expression *ir)
    case ir_binop_dot:
    case ir_binop_cross:
    case ir_unop_any:
-   case ir_binop_all_equal:
-   case ir_binop_any_nequal:
       assert(!"not reached: should be handled by brw_fs_channel_expressions");
       break;