Skip to content

Commit 9f0869a

Browse files
Lewuathepifon2a
authored andcommitted
[mlir][complex] Lower complex.sin/cos to libm
Lower sin/cos operation in complex dialect to libm as a baseline. This follows up to https://reviews.llvm.org/D125550. Reviewed By: pifon2a Differential Revision: https://reviews.llvm.org/D126755
1 parent 3ed6fc9 commit 9f0869a

File tree

2 files changed

+30
-0
lines changed

2 files changed

+30
-0
lines changed

mlir/lib/Conversion/ComplexToLibm/ComplexToLibm.cpp

+4
Original file line numberDiff line numberDiff line change
@@ -73,6 +73,10 @@ void mlir::populateComplexToLibmConversionPatterns(RewritePatternSet &patterns,
7373
"csqrtf", "csqrt", benefit);
7474
patterns.add<ScalarOpToLibmCall<complex::TanhOp>>(patterns.getContext(),
7575
"ctanhf", "ctanh", benefit);
76+
patterns.add<ScalarOpToLibmCall<complex::CosOp>>(patterns.getContext(),
77+
"ccosf", "ccos", benefit);
78+
patterns.add<ScalarOpToLibmCall<complex::SinOp>>(patterns.getContext(),
79+
"csinf", "csin", benefit);
7680
}
7781

7882
namespace {

mlir/test/Conversion/ComplexToLibm/convert-to-libm.mlir

+26
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,8 @@
66
// CHECK-DAG: @csqrt(complex<f64>) -> complex<f64>
77
// CHECK-DAG: @ctanhf(complex<f32>) -> complex<f32>
88
// CHECK-DAG: @ctanh(complex<f64>) -> complex<f64>
9+
// CHECK-DAG: @ccos(complex<f64>) -> complex<f64>
10+
// CHECK-DAG: @csin(complex<f64>) -> complex<f64>
911

1012
// CHECK-LABEL: func @cpow_caller
1113
// CHECK-SAME: %[[FLOAT:.*]]: complex<f32>
@@ -42,3 +44,27 @@ func.func @ctanh_caller(%float: complex<f32>, %double: complex<f64>) -> (complex
4244
// CHECK: return %[[FLOAT_RESULT]], %[[DOUBLE_RESULT]]
4345
return %float_result, %double_result : complex<f32>, complex<f64>
4446
}
47+
48+
// CHECK-LABEL: func @ccos_caller
49+
// CHECK-SAME: %[[FLOAT:.*]]: complex<f32>
50+
// CHECK-SAME: %[[DOUBLE:.*]]: complex<f64>
51+
func.func @ccos_caller(%float: complex<f32>, %double: complex<f64>) -> (complex<f32>, complex<f64>) {
52+
// CHECK: %[[FLOAT_RESULT:.*]] = call @ccosf(%[[FLOAT]])
53+
%float_result = complex.cos %float : complex<f32>
54+
// CHECK: %[[DOUBLE_RESULT:.*]] = call @ccos(%[[DOUBLE]])
55+
%double_result = complex.cos %double : complex<f64>
56+
// CHECK: return %[[FLOAT_RESULT]], %[[DOUBLE_RESULT]]
57+
return %float_result, %double_result : complex<f32>, complex<f64>
58+
}
59+
60+
// CHECK-LABEL: func @csin_caller
61+
// CHECK-SAME: %[[FLOAT:.*]]: complex<f32>
62+
// CHECK-SAME: %[[DOUBLE:.*]]: complex<f64>
63+
func.func @csin_caller(%float: complex<f32>, %double: complex<f64>) -> (complex<f32>, complex<f64>) {
64+
// CHECK: %[[FLOAT_RESULT:.*]] = call @csinf(%[[FLOAT]])
65+
%float_result = complex.sin %float : complex<f32>
66+
// CHECK: %[[DOUBLE_RESULT:.*]] = call @csin(%[[DOUBLE]])
67+
%double_result = complex.sin %double : complex<f64>
68+
// CHECK: return %[[FLOAT_RESULT]], %[[DOUBLE_RESULT]]
69+
return %float_result, %double_result : complex<f32>, complex<f64>
70+
}

0 commit comments

Comments
 (0)