summaryrefslogtreecommitdiffstats
path: root/mlir/lib/Dialect/VectorOps/VectorOps.cpp
diff options
context:
space:
mode:
authorAndy Davis <andydavis@google.com>2019-12-16 12:56:06 -0800
committerA. Unique TensorFlower <gardener@tensorflow.org>2019-12-16 12:56:38 -0800
commit11e92875f07261c64205c8b72038abf0d65729a0 (patch)
treeb7cb24579edecec9837026b6394275c4280aa57c /mlir/lib/Dialect/VectorOps/VectorOps.cpp
parent6273fa0c6a85985395993e74c92a17709311fb84 (diff)
downloadbcm5719-llvm-11e92875f07261c64205c8b72038abf0d65729a0.tar.gz
bcm5719-llvm-11e92875f07261c64205c8b72038abf0d65729a0.zip
Add InsertSlicesOp to the VectorOps dialect.
PiperOrigin-RevId: 285830394
Diffstat (limited to 'mlir/lib/Dialect/VectorOps/VectorOps.cpp')
-rw-r--r--mlir/lib/Dialect/VectorOps/VectorOps.cpp54
1 files changed, 54 insertions, 0 deletions
diff --git a/mlir/lib/Dialect/VectorOps/VectorOps.cpp b/mlir/lib/Dialect/VectorOps/VectorOps.cpp
index fc8abd710e9..48fc0d4dc30 100644
--- a/mlir/lib/Dialect/VectorOps/VectorOps.cpp
+++ b/mlir/lib/Dialect/VectorOps/VectorOps.cpp
@@ -826,6 +826,60 @@ static LogicalResult verify(InsertOp op) {
}
//===----------------------------------------------------------------------===//
+// InsertSlicesOp
+//===----------------------------------------------------------------------===//
+
+static ParseResult parseInsertSlicesOp(OpAsmParser &parser,
+ OperationState &result) {
+ OpAsmParser::OperandType operandInfo;
+ ArrayAttr sizesAttr;
+ StringRef sizesAttrName = InsertSlicesOp::getSizesAttrName();
+ ArrayAttr stridesAttr;
+ StringRef stridesAttrName = InsertSlicesOp::getStridesAttrName();
+ TupleType tupleType;
+ VectorType resultVectorType;
+ return failure(
+ parser.parseOperand(operandInfo) || parser.parseComma() ||
+ parser.parseAttribute(sizesAttr, sizesAttrName, result.attributes) ||
+ parser.parseComma() ||
+ parser.parseAttribute(stridesAttr, stridesAttrName, result.attributes) ||
+ parser.parseOptionalAttrDict(result.attributes) ||
+ parser.parseColonType(tupleType) ||
+ parser.parseKeywordType("into", resultVectorType) ||
+ parser.resolveOperand(operandInfo, tupleType, result.operands) ||
+ parser.addTypeToList(resultVectorType, result.types));
+}
+
+static void print(OpAsmPrinter &p, InsertSlicesOp op) {
+ p << op.getOperationName() << ' ' << *op.vectors() << ", ";
+ p << op.sizes() << ", " << op.strides();
+ p.printOptionalAttrDict(
+ op.getAttrs(),
+ /*elidedAttrs=*/{InsertSlicesOp::getSizesAttrName(),
+ InsertSlicesOp::getStridesAttrName()});
+ p << " : " << op.vectors()->getType();
+ p << " into " << op.getResultVectorType();
+}
+
+static LogicalResult verify(InsertSlicesOp op) {
+ SmallVector<int64_t, 4> sizes;
+ op.getSizes(sizes);
+ SmallVector<int64_t, 4> strides;
+ op.getStrides(strides);
+ return isValidExtractOrInsertSlicesType(
+ op.getOperation(), op.getResultVectorType(), op.getSourceTupleType(),
+ sizes, strides);
+}
+
+void InsertSlicesOp::getSizes(SmallVectorImpl<int64_t> &results) {
+ populateFromInt64AttrArray(sizes(), results);
+}
+
+void InsertSlicesOp::getStrides(SmallVectorImpl<int64_t> &results) {
+ populateFromInt64AttrArray(strides(), results);
+}
+
+//===----------------------------------------------------------------------===//
// InsertStridedSliceOp
//===----------------------------------------------------------------------===//
OpenPOWER on IntegriCloud