[Mlir-commits] [mlir] 00fd695 - [MLIR][Arith] Canonicalize xor with ext
llvmlistbot at llvm.org
llvmlistbot at llvm.org
Thu Dec 22 20:43:53 PST 2022
Author: liqinweng
Date: 2022-12-23T12:40:30+08:00
New Revision: 00fd6958fb00a138ed2552eb50413c5d3a011d41
URL: https://github.com/llvm/llvm-project/commit/00fd6958fb00a138ed2552eb50413c5d3a011d41
DIFF: https://github.com/llvm/llvm-project/commit/00fd6958fb00a138ed2552eb50413c5d3a011d41.diff
LOG: [MLIR][Arith] Canonicalize xor with ext
Reviewed By: mehdi_amini
Differential Revision: https://reviews.llvm.org/D139307
Added:
Modified:
mlir/lib/Dialect/Arith/IR/ArithCanonicalization.td
mlir/lib/Dialect/Arith/IR/ArithOps.cpp
mlir/test/Dialect/Arith/canonicalize.mlir
Removed:
################################################################################
diff --git a/mlir/lib/Dialect/Arith/IR/ArithCanonicalization.td b/mlir/lib/Dialect/Arith/IR/ArithCanonicalization.td
index 4a96d99249092..abf3db1728dcf 100644
--- a/mlir/lib/Dialect/Arith/IR/ArithCanonicalization.td
+++ b/mlir/lib/Dialect/Arith/IR/ArithCanonicalization.td
@@ -164,6 +164,16 @@ def XOrINotCmpI :
(ConstantLikeMatcher ConstantAttr<I1Attr, "1">)),
(Arith_CmpIOp (InvertPredicate $pred), $a, $b)>;
+// xor extui(x), extui(y) -> extui(xor(x,y))
+def XOrIOfExtUI :
+ Pat<(Arith_XOrIOp (Arith_ExtUIOp $x), (Arith_ExtUIOp $y)), (Arith_ExtUIOp (Arith_XOrIOp $x, $y)),
+ [(Constraint<CPred<"$0.getType() == $1.getType()">> $x, $y)]>;
+
+// xor extsi(x), extsi(y) -> extsi(xor(x,y))
+def XOrIOfExtSI :
+ Pat<(Arith_XOrIOp (Arith_ExtSIOp $x), (Arith_ExtSIOp $y)), (Arith_ExtSIOp (Arith_XOrIOp $x, $y)),
+ [(Constraint<CPred<"$0.getType() == $1.getType()">> $x, $y)]>;
+
//===----------------------------------------------------------------------===//
// CmpIOp
//===----------------------------------------------------------------------===//
diff --git a/mlir/lib/Dialect/Arith/IR/ArithOps.cpp b/mlir/lib/Dialect/Arith/IR/ArithOps.cpp
index 74e226d7a3452..f6446ea5ae4c6 100644
--- a/mlir/lib/Dialect/Arith/IR/ArithOps.cpp
+++ b/mlir/lib/Dialect/Arith/IR/ArithOps.cpp
@@ -841,7 +841,7 @@ OpFoldResult arith::XOrIOp::fold(ArrayRef<Attribute> operands) {
void arith::XOrIOp::getCanonicalizationPatterns(RewritePatternSet &patterns,
MLIRContext *context) {
- patterns.add<XOrINotCmpI>(context);
+ patterns.add<XOrINotCmpI, XOrIOfExtUI, XOrIOfExtSI>(context);
}
//===----------------------------------------------------------------------===//
diff --git a/mlir/test/Dialect/Arith/canonicalize.mlir b/mlir/test/Dialect/Arith/canonicalize.mlir
index a4c800cc826ac..d181ae9d9d111 100644
--- a/mlir/test/Dialect/Arith/canonicalize.mlir
+++ b/mlir/test/Dialect/Arith/canonicalize.mlir
@@ -1036,6 +1036,28 @@ func.func @xorxor(%cmp : i1) -> i1 {
return %nncmp : i1
}
+// CHECK-LABEL: @xorOfExtSI
+// CHECK: %[[comb:.+]] = arith.xori %arg0, %arg1 : i8
+// CHECK: %[[ext:.+]] = arith.extsi %[[comb]] : i8 to i64
+// CHECK: return %[[ext]]
+func.func @xorOfExtSI(%arg0: i8, %arg1: i8) -> i64 {
+ %ext0 = arith.extsi %arg0 : i8 to i64
+ %ext1 = arith.extsi %arg1 : i8 to i64
+ %res = arith.xori %ext0, %ext1 : i64
+ return %res : i64
+}
+
+// CHECK-LABEL: @xorOfExtUI
+// CHECK: %[[comb:.+]] = arith.xori %arg0, %arg1 : i8
+// CHECK: %[[ext:.+]] = arith.extui %[[comb]] : i8 to i64
+// CHECK: return %[[ext]]
+func.func @xorOfExtUI(%arg0: i8, %arg1: i8) -> i64 {
+ %ext0 = arith.extui %arg0 : i8 to i64
+ %ext1 = arith.extui %arg1 : i8 to i64
+ %res = arith.xori %ext0, %ext1 : i64
+ return %res : i64
+}
+
// -----
// CHECK-LABEL: @bitcastSameType(
More information about the Mlir-commits
mailing list