From 238e08d64326572c3d1cf0f8ebd5e3932184a50d Mon Sep 17 00:00:00 2001 From: jacquesguan Date: Wed, 7 Sep 2022 12:45:57 +0000 Subject: [PATCH] [mlir][Math] Fix RoundEven constant folder. Use roundToIntegral instead roundeven of libm to avoid window build failed. Reviewed By: mehdi_amini Differential Revision: https://reviews.llvm.org/D133402 --- mlir/lib/Dialect/Math/IR/MathOps.cpp | 16 +++++----------- 1 file changed, 5 insertions(+), 11 deletions(-) diff --git a/mlir/lib/Dialect/Math/IR/MathOps.cpp b/mlir/lib/Dialect/Math/IR/MathOps.cpp index 667c0e66bcd6..567e53b4fad7 100644 --- a/mlir/lib/Dialect/Math/IR/MathOps.cpp +++ b/mlir/lib/Dialect/Math/IR/MathOps.cpp @@ -420,17 +420,11 @@ OpFoldResult math::TanhOp::fold(ArrayRef operands) { //===----------------------------------------------------------------------===// 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.