[Mlir-commits] [mlir] 1bb9f4e - [MLIR] Create folders for extsi/extui
William S. Moses
llvmlistbot at llvm.org
Sun Jan 2 21:11:28 PST 2022
Author: William S. Moses
Date: 2022-01-03T00:11:23-05:00
New Revision: 1bb9f4e482e9b98c05a055c8edc338a81bbeca2d
URL: https://github.com/llvm/llvm-project/commit/1bb9f4e482e9b98c05a055c8edc338a81bbeca2d
DIFF: https://github.com/llvm/llvm-project/commit/1bb9f4e482e9b98c05a055c8edc338a81bbeca2d.diff
LOG: [MLIR] Create folders for extsi/extui
Create folders/canonicalizers for extsi/extui. Specifically,
extui(extui(x)) -> extui(x)
extsi(extsi(x)) -> extsi(x)
extsi(extui(x)) -> extui(x)
Reviewed By: mehdi_amini
Differential Revision: https://reviews.llvm.org/D116515
Added:
Modified:
mlir/include/mlir/Dialect/Arithmetic/IR/ArithmeticOps.td
mlir/lib/Dialect/Arithmetic/IR/ArithmeticCanonicalization.td
mlir/lib/Dialect/Arithmetic/IR/ArithmeticOps.cpp
mlir/test/Dialect/Arithmetic/canonicalize.mlir
Removed:
################################################################################
diff --git a/mlir/include/mlir/Dialect/Arithmetic/IR/ArithmeticOps.td b/mlir/include/mlir/Dialect/Arithmetic/IR/ArithmeticOps.td
index a08f811d92b09..fb6d32fd04f62 100644
--- a/mlir/include/mlir/Dialect/Arithmetic/IR/ArithmeticOps.td
+++ b/mlir/include/mlir/Dialect/Arithmetic/IR/ArithmeticOps.td
@@ -818,6 +818,7 @@ def Arith_ExtSIOp : Arith_IToICastOp<"extsi"> {
}];
let hasFolder = 1;
+ let hasCanonicalizer = 1;
let verifier = [{ return verifyExtOp<IntegerType>(*this); }];
}
diff --git a/mlir/lib/Dialect/Arithmetic/IR/ArithmeticCanonicalization.td b/mlir/lib/Dialect/Arithmetic/IR/ArithmeticCanonicalization.td
index a2d1aeb9b3a2a..49ce6ec5ae0a9 100644
--- a/mlir/lib/Dialect/Arithmetic/IR/ArithmeticCanonicalization.td
+++ b/mlir/lib/Dialect/Arithmetic/IR/ArithmeticCanonicalization.td
@@ -128,4 +128,12 @@ def IndexCastOfExtSI :
def BitcastOfBitcast :
Pat<(Arith_BitcastOp (Arith_BitcastOp $x)), (replaceWithValue $x)>;
+//===----------------------------------------------------------------------===//
+// ExtSIOp
+//===----------------------------------------------------------------------===//
+
+// extsi(extui(x iN : iM) : iL) -> extui(x : iL)
+def ExtSIOfExtUI :
+ Pat<(Arith_ExtSIOp (Arith_ExtUIOp $x)), (Arith_ExtUIOp $x)>;
+
#endif // ARITHMETIC_PATTERNS
diff --git a/mlir/lib/Dialect/Arithmetic/IR/ArithmeticOps.cpp b/mlir/lib/Dialect/Arithmetic/IR/ArithmeticOps.cpp
index 2a6b463bd4e85..aa485d39e0db1 100644
--- a/mlir/lib/Dialect/Arithmetic/IR/ArithmeticOps.cpp
+++ b/mlir/lib/Dialect/Arithmetic/IR/ArithmeticOps.cpp
@@ -788,6 +788,11 @@ OpFoldResult arith::ExtUIOp::fold(ArrayRef<Attribute> operands) {
return IntegerAttr::get(
getType(), lhs.getValue().zext(getType().getIntOrFloatBitWidth()));
+ if (auto lhs = getIn().getDefiningOp<ExtUIOp>()) {
+ getInMutable().assign(lhs.getIn());
+ return getResult();
+ }
+
return {};
}
@@ -804,6 +809,11 @@ OpFoldResult arith::ExtSIOp::fold(ArrayRef<Attribute> operands) {
return IntegerAttr::get(
getType(), lhs.getValue().sext(getType().getIntOrFloatBitWidth()));
+ if (auto lhs = getIn().getDefiningOp<ExtSIOp>()) {
+ getInMutable().assign(lhs.getIn());
+ return getResult();
+ }
+
return {};
}
@@ -811,6 +821,11 @@ bool arith::ExtSIOp::areCastCompatible(TypeRange inputs, TypeRange outputs) {
return checkWidthChangeCast<std::greater, IntegerType>(inputs, outputs);
}
+void arith::ExtSIOp::getCanonicalizationPatterns(
+ OwningRewritePatternList &patterns, MLIRContext *context) {
+ patterns.insert<ExtSIOfExtUI>(context);
+}
+
//===----------------------------------------------------------------------===//
// ExtFOp
//===----------------------------------------------------------------------===//
diff --git a/mlir/test/Dialect/Arithmetic/canonicalize.mlir b/mlir/test/Dialect/Arithmetic/canonicalize.mlir
index b4a5cf43ba82c..87a198cb7c4ab 100644
--- a/mlir/test/Dialect/Arithmetic/canonicalize.mlir
+++ b/mlir/test/Dialect/Arithmetic/canonicalize.mlir
@@ -70,6 +70,35 @@ func @cmpOfExtUI(%arg0: i1) -> i1 {
// -----
+// CHECK-LABEL: @extSIOfExtUI
+// CHECK: %[[res:.+]] = arith.extui %arg0 : i1 to i64
+// CHECK: return %[[res]]
+func @extSIOfExtUI(%arg0: i1) -> i64 {
+ %ext1 = arith.extui %arg0 : i1 to i8
+ %ext2 = arith.extsi %ext1 : i8 to i64
+ return %ext2 : i64
+}
+
+// CHECK-LABEL: @extUIOfExtUI
+// CHECK: %[[res:.+]] = arith.extui %arg0 : i1 to i64
+// CHECK: return %[[res]]
+func @extUIOfExtUI(%arg0: i1) -> i64 {
+ %ext1 = arith.extui %arg0 : i1 to i8
+ %ext2 = arith.extui %ext1 : i8 to i64
+ return %ext2 : i64
+}
+
+// CHECK-LABEL: @extSIOfExtSI
+// CHECK: %[[res:.+]] = arith.extsi %arg0 : i1 to i64
+// CHECK: return %[[res]]
+func @extSIOfExtSI(%arg0: i1) -> i64 {
+ %ext1 = arith.extsi %arg0 : i1 to i8
+ %ext2 = arith.extsi %ext1 : i8 to i64
+ return %ext2 : i64
+}
+
+// -----
+
// CHECK-LABEL: @indexCastOfSignExtend
// CHECK: %[[res:.+]] = arith.index_cast %arg0 : i8 to index
// CHECK: return %[[res]]
More information about the Mlir-commits
mailing list