diff options
| author | River Riddle <riverriddle@google.com> | 2019-12-13 14:52:39 -0800 |
|---|---|---|
| committer | A. Unique TensorFlower <gardener@tensorflow.org> | 2019-12-13 17:19:02 -0800 |
| commit | 7ac42fa26e5ac2c3554eb38b7456c6bd81e69cec (patch) | |
| tree | ceff109190beaf4333847d0b2391491b29275237 /mlir/include | |
| parent | 27ae92516b925e5b8e416032117ef8922fca4d37 (diff) | |
| download | bcm5719-llvm-7ac42fa26e5ac2c3554eb38b7456c6bd81e69cec.tar.gz bcm5719-llvm-7ac42fa26e5ac2c3554eb38b7456c6bd81e69cec.zip | |
Refactor various canonicalization patterns as in-place folds.
This is more efficient, and allows for these to fire in more situations: e.g. createOrFold, DialectConversion, etc.
PiperOrigin-RevId: 285476837
Diffstat (limited to 'mlir/include')
| -rw-r--r-- | mlir/include/mlir/Dialect/AffineOps/AffineOps.h | 11 | ||||
| -rw-r--r-- | mlir/include/mlir/Dialect/AffineOps/AffineOps.td | 5 | ||||
| -rw-r--r-- | mlir/include/mlir/Dialect/QuantOps/QuantOps.td | 2 | ||||
| -rw-r--r-- | mlir/include/mlir/Dialect/StandardOps/Ops.h | 8 | ||||
| -rw-r--r-- | mlir/include/mlir/Dialect/StandardOps/Ops.td | 6 |
5 files changed, 18 insertions, 14 deletions
diff --git a/mlir/include/mlir/Dialect/AffineOps/AffineOps.h b/mlir/include/mlir/Dialect/AffineOps/AffineOps.h index 835ac24b4ae..8268f81b856 100644 --- a/mlir/include/mlir/Dialect/AffineOps/AffineOps.h +++ b/mlir/include/mlir/Dialect/AffineOps/AffineOps.h @@ -295,8 +295,8 @@ public: static ParseResult parse(OpAsmParser &parser, OperationState &result); void print(OpAsmPrinter &p); LogicalResult verify(); - static void getCanonicalizationPatterns(OwningRewritePatternList &results, - MLIRContext *context); + LogicalResult fold(ArrayRef<Attribute> cstOperands, + SmallVectorImpl<OpFoldResult> &results); /// Returns true if this DMA operation is strided, returns false otherwise. bool isStrided() { @@ -380,8 +380,8 @@ public: static ParseResult parse(OpAsmParser &parser, OperationState &result); void print(OpAsmPrinter &p); LogicalResult verify(); - static void getCanonicalizationPatterns(OwningRewritePatternList &results, - MLIRContext *context); + LogicalResult fold(ArrayRef<Attribute> cstOperands, + SmallVectorImpl<OpFoldResult> &results); }; /// The "affine.load" op reads an element from a memref, where the index @@ -450,6 +450,7 @@ public: LogicalResult verify(); static void getCanonicalizationPatterns(OwningRewritePatternList &results, MLIRContext *context); + OpFoldResult fold(ArrayRef<Attribute> operands); }; /// The "affine.store" op writes an element to a memref, where the index @@ -520,6 +521,8 @@ public: LogicalResult verify(); static void getCanonicalizationPatterns(OwningRewritePatternList &results, MLIRContext *context); + LogicalResult fold(ArrayRef<Attribute> cstOperands, + SmallVectorImpl<OpFoldResult> &results); }; /// Returns true if the given Value can be used as a dimension id. diff --git a/mlir/include/mlir/Dialect/AffineOps/AffineOps.td b/mlir/include/mlir/Dialect/AffineOps/AffineOps.td index 4d4060414dd..cea44b8dacd 100644 --- a/mlir/include/mlir/Dialect/AffineOps/AffineOps.td +++ b/mlir/include/mlir/Dialect/AffineOps/AffineOps.td @@ -177,12 +177,13 @@ def AffineForOp : Affine_Op<"for", /// Sets the upper bound to the given constant value. void setConstantUpperBound(int64_t value); - /// Returns true if both the lower and upper bound have the same operand + /// Returns true if both the lower and upper bound have the same operand /// lists (same operands in the same order). bool matchingBoundOperandList(); }]; let hasCanonicalizer = 1; + let hasFolder = 1; } def AffineIfOp : Affine_Op<"if", [ImplicitAffineTerminator]> { @@ -239,7 +240,7 @@ def AffineIfOp : Affine_Op<"if", [ImplicitAffineTerminator]> { } }]; - let hasCanonicalizer = 1; + let hasFolder = 1; } def AffineMinOp : Affine_Op<"min"> { diff --git a/mlir/include/mlir/Dialect/QuantOps/QuantOps.td b/mlir/include/mlir/Dialect/QuantOps/QuantOps.td index 85d5cd2ee90..072715d65aa 100644 --- a/mlir/include/mlir/Dialect/QuantOps/QuantOps.td +++ b/mlir/include/mlir/Dialect/QuantOps/QuantOps.td @@ -93,7 +93,7 @@ def quant_DequantizeCastOp : quant_Op<"dcast", [NoSideEffect]> { def quant_StorageCastOp : quant_Op<"scast", [NoSideEffect]> { let arguments = (ins quant_RealOrStorageValueType:$arg); let results = (outs quant_RealOrStorageValueType); - let hasCanonicalizer = 0b1; + let hasFolder = 1; } //===----------------------------------------------------------------------===// diff --git a/mlir/include/mlir/Dialect/StandardOps/Ops.h b/mlir/include/mlir/Dialect/StandardOps/Ops.h index c7c8714752f..fcf16c05c33 100644 --- a/mlir/include/mlir/Dialect/StandardOps/Ops.h +++ b/mlir/include/mlir/Dialect/StandardOps/Ops.h @@ -268,8 +268,8 @@ public: void print(OpAsmPrinter &p); LogicalResult verify(); - static void getCanonicalizationPatterns(OwningRewritePatternList &results, - MLIRContext *context); + LogicalResult fold(ArrayRef<Attribute> cstOperands, + SmallVectorImpl<OpFoldResult> &results); bool isStrided() { return getNumOperands() != 1 + getSrcMemRefRank() + 1 + getDstMemRefRank() + @@ -331,8 +331,8 @@ public: static ParseResult parse(OpAsmParser &parser, OperationState &result); void print(OpAsmPrinter &p); - static void getCanonicalizationPatterns(OwningRewritePatternList &results, - MLIRContext *context); + LogicalResult fold(ArrayRef<Attribute> cstOperands, + SmallVectorImpl<OpFoldResult> &results); }; /// Prints dimension and symbol list. diff --git a/mlir/include/mlir/Dialect/StandardOps/Ops.td b/mlir/include/mlir/Dialect/StandardOps/Ops.td index 8e21a8bbbc1..553a612f5a6 100644 --- a/mlir/include/mlir/Dialect/StandardOps/Ops.td +++ b/mlir/include/mlir/Dialect/StandardOps/Ops.td @@ -659,6 +659,7 @@ def DeallocOp : Std_Op<"dealloc"> { let arguments = (ins AnyMemRef:$memref); let hasCanonicalizer = 1; + let hasFolder = 1; } def DimOp : Std_Op<"dim", [NoSideEffect]> { @@ -691,7 +692,6 @@ def DimOp : Std_Op<"dim", [NoSideEffect]> { }]; let hasFolder = 1; - let hasCanonicalizer = 1; } def DivFOp : FloatArithmeticOp<"divf"> { @@ -834,7 +834,7 @@ def LoadOp : Std_Op<"load"> { operand_range getIndices() { return {operand_begin() + 1, operand_end()}; } }]; - let hasCanonicalizer = 1; + let hasFolder = 1; } def LogOp : FloatUnaryOp<"log"> { @@ -1137,7 +1137,7 @@ def StoreOp : Std_Op<"store"> { } }]; - let hasCanonicalizer = 1; + let hasFolder = 1; } def SubFOp : FloatArithmeticOp<"subf"> { |

