[mlir][Math] Fix RoundEven constant folder.
authorjacquesguan <Jianjian.Guan@streamcomputing.com>
Wed, 7 Sep 2022 12:45:57 +0000 (12:45 +0000)
committerMehdi Amini <joker.eph@gmail.com>
Wed, 7 Sep 2022 12:46:05 +0000 (12:46 +0000)
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

index 667c0e6..567e53b 100644 (file)
@@ -420,17 +420,11 @@ OpFoldResult math::TanhOp::fold(ArrayRef<Attribute> operands) {
 //===----------------------------------------------------------------------===//
 
 OpFoldResult math::RoundEvenOp::fold(ArrayRef<Attribute> operands) {
-  return constFoldUnaryOpConditional<FloatAttr>(
-      operands, [](const APFloat &a) -> Optional<APFloat> {
-        switch (a.getSizeInBits(a.getSemantics())) {
-        case 64:
-          return APFloat(roundeven(a.convertToDouble()));
-        case 32:
-          return APFloat(roundevenf(a.convertToFloat()));
-        default:
-          return {};
-        }
-      });
+  return constFoldUnaryOp<FloatAttr>(operands, [](const APFloat &a) {
+    APFloat result(a);
+    result.roundToIntegral(llvm::RoundingMode::NearestTiesToEven);
+    return result;
+  });
 }
 
 /// Materialize an integer or floating point constant.