[Mlir-commits] [mlir] 6b49834 - [mlir] Add folder for complex.ReOp and complex.ImOp.
Adrian Kuegel
llvmlistbot at llvm.org
Mon May 17 04:36:13 PDT 2021
Author: Adrian Kuegel
Date: 2021-05-17T13:35:51+02:00
New Revision: 6b49834d652ba70fc24eaea1c37330639d697de5
URL: https://github.com/llvm/llvm-project/commit/6b49834d652ba70fc24eaea1c37330639d697de5
DIFF: https://github.com/llvm/llvm-project/commit/6b49834d652ba70fc24eaea1c37330639d697de5.diff
LOG: [mlir] Add folder for complex.ReOp and complex.ImOp.
Now that complex constants are supported, we can also fold.
Differential Revision: https://reviews.llvm.org/D102609
Added:
mlir/test/Dialect/Complex/canonicalize.mlir
Modified:
mlir/include/mlir/Dialect/Complex/IR/ComplexOps.td
mlir/lib/Dialect/Complex/IR/ComplexOps.cpp
Removed:
################################################################################
diff --git a/mlir/include/mlir/Dialect/Complex/IR/ComplexOps.td b/mlir/include/mlir/Dialect/Complex/IR/ComplexOps.td
index 5e4648da488d6..efea0b284552e 100644
--- a/mlir/include/mlir/Dialect/Complex/IR/ComplexOps.td
+++ b/mlir/include/mlir/Dialect/Complex/IR/ComplexOps.td
@@ -144,6 +144,7 @@ def ImOp : Complex_Op<"im",
let results = (outs AnyFloat:$imaginary);
let assemblyFormat = "$complex attr-dict `:` type($complex)";
+ let hasFolder = 1;
}
//===----------------------------------------------------------------------===//
@@ -185,6 +186,7 @@ def ReOp : Complex_Op<"re",
let results = (outs AnyFloat:$real);
let assemblyFormat = "$complex attr-dict `:` type($complex)";
+ let hasFolder = 1;
}
diff --git a/mlir/lib/Dialect/Complex/IR/ComplexOps.cpp b/mlir/lib/Dialect/Complex/IR/ComplexOps.cpp
index 6b4855dc4339b..37fae63edf98e 100644
--- a/mlir/lib/Dialect/Complex/IR/ComplexOps.cpp
+++ b/mlir/lib/Dialect/Complex/IR/ComplexOps.cpp
@@ -17,3 +17,13 @@ using namespace mlir::complex;
#define GET_OP_CLASSES
#include "mlir/Dialect/Complex/IR/ComplexOps.cpp.inc"
+
+OpFoldResult ReOp::fold(ArrayRef<Attribute> operands) {
+ ArrayAttr arrayAttr = operands[0].dyn_cast<ArrayAttr>();
+ return arrayAttr[0];
+}
+
+OpFoldResult ImOp::fold(ArrayRef<Attribute> operands) {
+ ArrayAttr arrayAttr = operands[0].dyn_cast<ArrayAttr>();
+ return arrayAttr[1];
+}
diff --git a/mlir/test/Dialect/Complex/canonicalize.mlir b/mlir/test/Dialect/Complex/canonicalize.mlir
new file mode 100644
index 0000000000000..3ad66f908f538
--- /dev/null
+++ b/mlir/test/Dialect/Complex/canonicalize.mlir
@@ -0,0 +1,19 @@
+// RUN: mlir-opt %s -canonicalize | FileCheck %s
+
+// CHECK-LABEL: func @real_of_const(
+func @real_of_const() -> f32 {
+ // CHECK: %[[CST:.*]] = constant 1.000000e+00 : f32
+ // CHECK-NEXT: return %[[CST]] : f32
+ %complex = constant [1.0 : f32, 0.0 : f32] : complex<f32>
+ %1 = complex.re %complex : complex<f32>
+ return %1 : f32
+}
+
+// CHECK-LABEL: func @imag_of_const(
+func @imag_of_const() -> f32 {
+ // CHECK: %[[CST:.*]] = constant 0.000000e+00 : f32
+ // CHECK-NEXT: return %[[CST]] : f32
+ %complex = constant [1.0 : f32, 0.0 : f32] : complex<f32>
+ %1 = complex.im %complex : complex<f32>
+ return %1 : f32
+}
More information about the Mlir-commits
mailing list