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 @@ -147,6 +147,53 @@ let hasFolder = 1; } +//===----------------------------------------------------------------------===// +// IsEqualOp +//===----------------------------------------------------------------------===// + +def IsEqualOp : Complex_Op<"eq", + [NoSideEffect, AllTypesMatch<["lhs", "rhs"]>]> { + let summary = "computes whether two complex values are equal"; + let description = [{ + The `eq` op takes two complex numbers and returns whether they are equal. + + Example: + + ```mlir + %a = complex.eq %b, %c : complex + ``` + }]; + + let arguments = (ins Complex:$lhs, Complex:$rhs); + let results = (outs I1:$result); + + let assemblyFormat = "$lhs `,` $rhs attr-dict `:` type($lhs)"; +} + +//===----------------------------------------------------------------------===// +// IsNotEqualOp +//===----------------------------------------------------------------------===// + +def IsNotEqualOp : Complex_Op<"neq", + [NoSideEffect, AllTypesMatch<["lhs", "rhs"]>]> { + let summary = "computes whether two complex values are not equal"; + let description = [{ + The `neq` op takes two complex numbers and returns whether they are not + equal. + + Example: + + ```mlir + %a = complex.neq %b, %c : complex + ``` + }]; + + let arguments = (ins Complex:$lhs, Complex:$rhs); + let results = (outs I1:$result); + + let assemblyFormat = "$lhs `,` $rhs attr-dict `:` type($lhs)"; +} + //===----------------------------------------------------------------------===// // MulOp //===----------------------------------------------------------------------===// diff --git a/mlir/lib/Dialect/Complex/IR/ComplexOps.cpp b/mlir/lib/Dialect/Complex/IR/ComplexOps.cpp --- a/mlir/lib/Dialect/Complex/IR/ComplexOps.cpp +++ b/mlir/lib/Dialect/Complex/IR/ComplexOps.cpp @@ -7,6 +7,7 @@ //===----------------------------------------------------------------------===// #include "mlir/Dialect/Complex/IR/Complex.h" +#include "mlir/IR/Builders.h" using namespace mlir; using namespace mlir::complex; 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 @@ -23,6 +23,12 @@ // CHECK: complex.div %[[C]], %[[C]] : complex %div = complex.div %complex, %complex : complex + // 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.mul %[[C]], %[[C]] : complex %prod = complex.mul %complex, %complex : complex