diff --git a/mlir/lib/Conversion/MathToLibm/MathToLibm.cpp b/mlir/lib/Conversion/MathToLibm/MathToLibm.cpp --- a/mlir/lib/Conversion/MathToLibm/MathToLibm.cpp +++ b/mlir/lib/Conversion/MathToLibm/MathToLibm.cpp @@ -168,6 +168,10 @@ "cos", benefit); patterns.add>(patterns.getContext(), "sinf", "sin", benefit); + patterns.add>(patterns.getContext(), + "floorf", "floor", benefit); + patterns.add>(patterns.getContext(), "ceilf", + "ceil", benefit); } namespace { diff --git a/mlir/test/Conversion/MathToLibm/convert-to-libm.mlir b/mlir/test/Conversion/MathToLibm/convert-to-libm.mlir --- a/mlir/test/Conversion/MathToLibm/convert-to-libm.mlir +++ b/mlir/test/Conversion/MathToLibm/convert-to-libm.mlir @@ -18,6 +18,10 @@ // CHECK-DAG: @cosf(f32) -> f32 // CHECK-DAG: @sin(f64) -> f64 // CHECK-DAG: @sinf(f32) -> f32 +// CHECK-DAG: @floor(f64) -> f64 +// CHECK-DAG: @floorf(f32) -> f32 +// CHECK-DAG: @ceil(f64) -> f64 +// CHECK-DAG: @ceilf(f32) -> f32 // CHECK-LABEL: func @atan_caller // CHECK-SAME: %[[FLOAT:.*]]: f32 @@ -303,3 +307,27 @@ %double_result = math.tan %double : vector<2xf64> return %float_result, %double_result : vector<2xf32>, vector<2xf64> } + +// CHECK-LABEL: func @floor_caller +// CHECK-SAME: %[[FLOAT:.*]]: f32 +// CHECK-SAME: %[[DOUBLE:.*]]: f64 +func.func @floor_caller(%float: f32, %double: f64) -> (f32, f64) { + // CHECK-DAG: %[[FLOAT_RESULT:.*]] = call @floorf(%[[FLOAT]]) : (f32) -> f32 + %float_result = math.floor %float : f32 + // CHECK-DAG: %[[DOUBLE_RESULT:.*]] = call @floor(%[[DOUBLE]]) : (f64) -> f64 + %double_result = math.floor %double : f64 + // CHECK: return %[[FLOAT_RESULT]], %[[DOUBLE_RESULT]] + return %float_result, %double_result : f32, f64 +} + +// CHECK-LABEL: func @ceil_caller +// CHECK-SAME: %[[FLOAT:.*]]: f32 +// CHECK-SAME: %[[DOUBLE:.*]]: f64 +func.func @ceil_caller(%float: f32, %double: f64) -> (f32, f64) { + // CHECK-DAG: %[[FLOAT_RESULT:.*]] = call @ceilf(%[[FLOAT]]) : (f32) -> f32 + %float_result = math.ceil %float : f32 + // CHECK-DAG: %[[DOUBLE_RESULT:.*]] = call @ceil(%[[DOUBLE]]) : (f64) -> f64 + %double_result = math.ceil %double : f64 + // CHECK: return %[[FLOAT_RESULT]], %[[DOUBLE_RESULT]] + return %float_result, %double_result : f32, f64 +} \ No newline at end of file