From 00fd6958fb00a138ed2552eb50413c5d3a011d41 Mon Sep 17 00:00:00 2001 From: liqinweng Date: Fri, 23 Dec 2022 12:40:30 +0800 Subject: [PATCH] [MLIR][Arith] Canonicalize xor with ext Reviewed By: mehdi_amini Differential Revision: https://reviews.llvm.org/D139307 --- mlir/lib/Dialect/Arith/IR/ArithCanonicalization.td | 10 ++++++++++ mlir/lib/Dialect/Arith/IR/ArithOps.cpp | 2 +- mlir/test/Dialect/Arith/canonicalize.mlir | 22 ++++++++++++++++++++++ 3 files changed, 33 insertions(+), 1 deletion(-) diff --git a/mlir/lib/Dialect/Arith/IR/ArithCanonicalization.td b/mlir/lib/Dialect/Arith/IR/ArithCanonicalization.td index 4a96d99..abf3db1 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)), (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> $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> $x, $y)]>; + //===----------------------------------------------------------------------===// // CmpIOp //===----------------------------------------------------------------------===// diff --git a/mlir/lib/Dialect/Arith/IR/ArithOps.cpp b/mlir/lib/Dialect/Arith/IR/ArithOps.cpp index 74e226d7..f6446ea 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 operands) { void arith::XOrIOp::getCanonicalizationPatterns(RewritePatternSet &patterns, MLIRContext *context) { - patterns.add(context); + patterns.add(context); } //===----------------------------------------------------------------------===// diff --git a/mlir/test/Dialect/Arith/canonicalize.mlir b/mlir/test/Dialect/Arith/canonicalize.mlir index a4c800c..d181ae9 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( -- 2.7.4