diff --git a/mlir/lib/Dialect/Math/IR/MathOps.cpp b/mlir/lib/Dialect/Math/IR/MathOps.cpp --- a/mlir/lib/Dialect/Math/IR/MathOps.cpp +++ b/mlir/lib/Dialect/Math/IR/MathOps.cpp @@ -420,17 +420,11 @@ //===----------------------------------------------------------------------===// OpFoldResult math::RoundEvenOp::fold(ArrayRef operands) { - return constFoldUnaryOpConditional( - operands, [](const APFloat &a) -> Optional { - switch (a.getSizeInBits(a.getSemantics())) { - case 64: - return APFloat(roundeven(a.convertToDouble())); - case 32: - return APFloat(roundevenf(a.convertToFloat())); - default: - return {}; - } - }); + return constFoldUnaryOp(operands, [](const APFloat &a) { + APFloat result(a); + result.roundToIntegral(llvm::RoundingMode::NearestTiesToEven); + return result; + }); } /// Materialize an integer or floating point constant.