summaryrefslogtreecommitdiffstats
path: root/mlir/include
diff options
context:
space:
mode:
authorRiver Riddle <riverriddle@google.com>2019-12-13 14:52:39 -0800
committerA. Unique TensorFlower <gardener@tensorflow.org>2019-12-13 17:19:02 -0800
commit7ac42fa26e5ac2c3554eb38b7456c6bd81e69cec (patch)
treeceff109190beaf4333847d0b2391491b29275237 /mlir/include
parent27ae92516b925e5b8e416032117ef8922fca4d37 (diff)
downloadbcm5719-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.h11
-rw-r--r--mlir/include/mlir/Dialect/AffineOps/AffineOps.td5
-rw-r--r--mlir/include/mlir/Dialect/QuantOps/QuantOps.td2
-rw-r--r--mlir/include/mlir/Dialect/StandardOps/Ops.h8
-rw-r--r--mlir/include/mlir/Dialect/StandardOps/Ops.td6
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"> {
OpenPOWER on IntegriCloud