Implementation of DivNoNan. Pseudo-code: if (y == 0) { return 0 } else { return x / y; }
| 71 | // return x / y; |
| 72 | // } |
| 73 | static xla::XlaOp DivNoNanImpl(xla::XlaBuilder* b, DataType dtype, xla::XlaOp x, |
| 74 | xla::XlaOp y, const BCast& broadcast_helper) { |
| 75 | std::tie(x, y) = XlaBinaryOp::Broadcast(x, y, broadcast_helper); |
| 76 | auto zero = XlaHelpers::Zero(b, dtype); |
| 77 | auto y_equals_0 = xla::Eq(y, zero); |
| 78 | auto zeros = xla::ZerosLike(x); |
| 79 | auto result = xla::Select(y_equals_0, zeros, xla::Div(x, y)); |
| 80 | return result; |
| 81 | } |
| 82 | XLA_MAKE_BINARY(DivNoNan, |
| 83 | DivNoNanImpl(b, input_type(0), lhs, rhs, broadcast_helper)); |
| 84 |