"csqrtf", "csqrt", benefit);
patterns.add<ScalarOpToLibmCall<complex::TanhOp>>(patterns.getContext(),
"ctanhf", "ctanh", benefit);
+ patterns.add<ScalarOpToLibmCall<complex::CosOp>>(patterns.getContext(),
+ "ccosf", "ccos", benefit);
+ patterns.add<ScalarOpToLibmCall<complex::SinOp>>(patterns.getContext(),
+ "csinf", "csin", benefit);
}
namespace {
// CHECK-DAG: @csqrt(complex<f64>) -> complex<f64>
// CHECK-DAG: @ctanhf(complex<f32>) -> complex<f32>
// CHECK-DAG: @ctanh(complex<f64>) -> complex<f64>
+// CHECK-DAG: @ccos(complex<f64>) -> complex<f64>
+// CHECK-DAG: @csin(complex<f64>) -> complex<f64>
// CHECK-LABEL: func @cpow_caller
// CHECK-SAME: %[[FLOAT:.*]]: complex<f32>
// CHECK: return %[[FLOAT_RESULT]], %[[DOUBLE_RESULT]]
return %float_result, %double_result : complex<f32>, complex<f64>
}
+
+// CHECK-LABEL: func @ccos_caller
+// CHECK-SAME: %[[FLOAT:.*]]: complex<f32>
+// CHECK-SAME: %[[DOUBLE:.*]]: complex<f64>
+func.func @ccos_caller(%float: complex<f32>, %double: complex<f64>) -> (complex<f32>, complex<f64>) {
+ // CHECK: %[[FLOAT_RESULT:.*]] = call @ccosf(%[[FLOAT]])
+ %float_result = complex.cos %float : complex<f32>
+ // CHECK: %[[DOUBLE_RESULT:.*]] = call @ccos(%[[DOUBLE]])
+ %double_result = complex.cos %double : complex<f64>
+ // CHECK: return %[[FLOAT_RESULT]], %[[DOUBLE_RESULT]]
+ return %float_result, %double_result : complex<f32>, complex<f64>
+}
+
+// CHECK-LABEL: func @csin_caller
+// CHECK-SAME: %[[FLOAT:.*]]: complex<f32>
+// CHECK-SAME: %[[DOUBLE:.*]]: complex<f64>
+func.func @csin_caller(%float: complex<f32>, %double: complex<f64>) -> (complex<f32>, complex<f64>) {
+ // CHECK: %[[FLOAT_RESULT:.*]] = call @csinf(%[[FLOAT]])
+ %float_result = complex.sin %float : complex<f32>
+ // CHECK: %[[DOUBLE_RESULT:.*]] = call @csin(%[[DOUBLE]])
+ %double_result = complex.sin %double : complex<f64>
+ // CHECK: return %[[FLOAT_RESULT]], %[[DOUBLE_RESULT]]
+ return %float_result, %double_result : complex<f32>, complex<f64>
+}
\ No newline at end of file