diff --git a/mlir/lib/Conversion/ComplexToLibm/ComplexToLibm.cpp b/mlir/lib/Conversion/ComplexToLibm/ComplexToLibm.cpp index b3762f0293492..f2b50d109f8f6 100644 --- a/mlir/lib/Conversion/ComplexToLibm/ComplexToLibm.cpp +++ b/mlir/lib/Conversion/ComplexToLibm/ComplexToLibm.cpp @@ -117,6 +117,8 @@ void mlir::populateComplexToLibmConversionPatterns(RewritePatternSet &patterns, patterns.getContext(), "cabsf", "cabs", benefit); patterns.add>( patterns.getContext(), "cargf", "carg", benefit); + patterns.add>(patterns.getContext(), + "ctanf", "ctan", benefit); } namespace { @@ -136,7 +138,8 @@ void ConvertComplexToLibmPass::runOnOperation() { target.addLegalDialect(); target.addIllegalOp(); + complex::LogOp, complex::AbsOp, complex::AngleOp, + complex::TanOp>(); if (failed(applyPartialConversion(module, target, std::move(patterns)))) signalPassFailure(); } diff --git a/mlir/test/Conversion/ComplexToLibm/convert-to-libm.mlir b/mlir/test/Conversion/ComplexToLibm/convert-to-libm.mlir index 0a19751324d8b..ecf243c53a80c 100644 --- a/mlir/test/Conversion/ComplexToLibm/convert-to-libm.mlir +++ b/mlir/test/Conversion/ComplexToLibm/convert-to-libm.mlir @@ -12,6 +12,8 @@ // CHECK-DAG: @cabs(complex) -> f64 // CHECK-DAG: @carg(complex) -> f64 // CHECK-DAG: @clog(complex) -> complex +// CHECK-DAG: @ctanf(complex) -> complex +// CHECK-DAG: @ctan(complex) -> complex // CHECK-LABEL: func @cpow_caller // CHECK-SAME: %[[FLOAT:.*]]: complex @@ -120,3 +122,15 @@ func.func @clog_caller(%float: complex, %double: complex) -> (complex< // CHECK: return %[[FLOAT_RESULT]], %[[DOUBLE_RESULT]] return %float_result, %double_result : complex, complex } + +// CHECK-LABEL: func @ctan_caller +// CHECK-SAME: %[[FLOAT:.*]]: complex +// CHECK-SAME: %[[DOUBLE:.*]]: complex +func.func @ctan_caller(%float: complex, %double: complex) -> (complex, complex) { + // CHECK: %[[FLOAT_RESULT:.*]] = call @ctanf(%[[FLOAT]]) + %float_result = complex.tan %float : complex + // CHECK: %[[DOUBLE_RESULT:.*]] = call @ctan(%[[DOUBLE]]) + %double_result = complex.tan %double : complex + // CHECK: return %[[FLOAT_RESULT]], %[[DOUBLE_RESULT]] + return %float_result, %double_result : complex, complex +}