Skip to content

Commit

Permalink
[mlir][complex] Lower complex.angle to libm
Browse files Browse the repository at this point in the history
complex.angle corresponds to arg function in libm. We can lower complex.angle to arg and argf.

Reviewed By: pifon2a

Differential Revision: https://reviews.llvm.org/D129341
  • Loading branch information
Lewuathe authored and pifon2a committed Jul 8, 2022
1 parent 18a1085 commit f27deee
Show file tree
Hide file tree
Showing 2 changed files with 15 additions and 1 deletion.
4 changes: 3 additions & 1 deletion mlir/lib/Conversion/ComplexToLibm/ComplexToLibm.cpp
Expand Up @@ -109,6 +109,8 @@ void mlir::populateComplexToLibmConversionPatterns(RewritePatternSet &patterns,
"conjf", "conj", benefit);
patterns.add<ScalarOpToLibmCall<complex::AbsOp, FloatTypeResolver>>(
patterns.getContext(), "cabsf", "cabs", benefit);
patterns.add<ScalarOpToLibmCall<complex::AngleOp, FloatTypeResolver>>(
patterns.getContext(), "cargf", "carg", benefit);
}

namespace {
Expand All @@ -127,7 +129,7 @@ void ConvertComplexToLibmPass::runOnOperation() {
ConversionTarget target(getContext());
target.addLegalDialect<func::FuncDialect>();
target.addIllegalOp<complex::PowOp, complex::SqrtOp, complex::TanhOp,
complex::AbsOp>();
complex::AbsOp, complex::AngleOp>();
if (failed(applyPartialConversion(module, target, std::move(patterns))))
signalPassFailure();
}
Expand Down
12 changes: 12 additions & 0 deletions mlir/test/Conversion/ComplexToLibm/convert-to-libm.mlir
Expand Up @@ -93,4 +93,16 @@ func.func @cabs_caller(%float: complex<f32>, %double: complex<f64>) -> (f32, f64
%double_result = complex.abs %double : complex<f64>
// CHECK: return %[[FLOAT_RESULT]], %[[DOUBLE_RESULT]]
return %float_result, %double_result : f32, f64
}

// CHECK-LABEL: func @carg_caller
// CHECK-SAME: %[[FLOAT:.*]]: complex<f32>
// CHECK-SAME: %[[DOUBLE:.*]]: complex<f64>
func.func @carg_caller(%float: complex<f32>, %double: complex<f64>) -> (f32, f64) {
// CHECK: %[[FLOAT_RESULT:.*]] = call @cargf(%[[FLOAT]])
%float_result = complex.angle %float : complex<f32>
// CHECK: %[[DOUBLE_RESULT:.*]] = call @carg(%[[DOUBLE]])
%double_result = complex.angle %double : complex<f64>
// CHECK: return %[[FLOAT_RESULT]], %[[DOUBLE_RESULT]]
return %float_result, %double_result : f32, f64
}

0 comments on commit f27deee

Please sign in to comment.