diff --git a/mlir/include/mlir/Dialect/Complex/IR/ComplexOps.td b/mlir/include/mlir/Dialect/Complex/IR/ComplexOps.td --- a/mlir/include/mlir/Dialect/Complex/IR/ComplexOps.td +++ b/mlir/include/mlir/Dialect/Complex/IR/ComplexOps.td @@ -159,7 +159,7 @@ let summary = "computes exponential of a complex number"; let description = [{ The `exp` op takes a single complex number and computes the exponential of - it, i.e. `exp(x)` or `e^(x)`, where `x` is the input tensor. + it, i.e. `exp(x)` or `e^(x)`, where `x` is the input value. `e` denotes Euler's number and is approximately equal to 2.718281. Example: @@ -195,6 +195,27 @@ let hasFolder = 1; } +//===----------------------------------------------------------------------===// +// LogOp +//===----------------------------------------------------------------------===// + +def LogOp : ComplexUnaryOp<"log", [SameOperandsAndResultType]> { + let summary = "computes natural logarithm of a complex number"; + let description = [{ + The `log` op takes a single complex number and computes the natural + logarithm of it, i.e. `log(x)` or `log_e(x)`, where `x` is the input value. + `e` denotes Euler's number and is approximately equal to 2.718281. + + Example: + + ```mlir + %a = complex.log %b : complex + ``` + }]; + + let results = (outs Complex:$result); +} + //===----------------------------------------------------------------------===// // MulOp //===----------------------------------------------------------------------===// diff --git a/mlir/test/Dialect/Complex/ops.mlir b/mlir/test/Dialect/Complex/ops.mlir --- a/mlir/test/Dialect/Complex/ops.mlir +++ b/mlir/test/Dialect/Complex/ops.mlir @@ -26,12 +26,24 @@ // CHECK: complex.eq %[[C]], %[[C]] : complex %eq = complex.eq %complex, %complex : complex - // CHECK: complex.neq %[[C]], %[[C]] : complex - %neq = complex.neq %complex, %complex : complex + // CHECK: complex.exp %[[C]] : complex + %exp = complex.exp %complex : complex + + // CHECK: complex.log %[[C]] : complex + %log = complex.log %complex : complex // CHECK: complex.mul %[[C]], %[[C]] : complex %prod = complex.mul %complex, %complex : complex + // CHECK: complex.neg %[[C]] : complex + %neg = complex.neg %complex : complex + + // CHECK: complex.neq %[[C]], %[[C]] : complex + %neq = complex.neq %complex, %complex : complex + + // CHECK: complex.sign %[[C]] : complex + %sign = complex.sign %complex : complex + // CHECK: complex.sub %[[C]], %[[C]] : complex %diff = complex.sub %complex, %complex : complex return