diff options
Diffstat (limited to 'mlir/lib/Dialect/VectorOps/VectorOps.cpp')
| -rw-r--r-- | mlir/lib/Dialect/VectorOps/VectorOps.cpp | 74 | 
1 files changed, 74 insertions, 0 deletions
diff --git a/mlir/lib/Dialect/VectorOps/VectorOps.cpp b/mlir/lib/Dialect/VectorOps/VectorOps.cpp index 2dfa4568a3e..fc8abd710e9 100644 --- a/mlir/lib/Dialect/VectorOps/VectorOps.cpp +++ b/mlir/lib/Dialect/VectorOps/VectorOps.cpp @@ -347,6 +347,42 @@ SmallVector<AffineMap, 4> ContractionOp::getIndexingMaps() {  }  //===----------------------------------------------------------------------===// +// ExtractElementOp +//===----------------------------------------------------------------------===// + +static void print(OpAsmPrinter &p, vector::ExtractElementOp op) { +  p << op.getOperationName() << " " << *op.vector() << "[" << *op.position() +    << " : " << op.position()->getType() << "]"; +  p.printOptionalAttrDict(op.getAttrs()); +  p << " : " << op.vector()->getType(); +} + +static ParseResult parseExtractElementOp(OpAsmParser &parser, +                                         OperationState &result) { +  OpAsmParser::OperandType vector, position; +  Type positionType; +  VectorType vectorType; +  if (parser.parseOperand(vector) || parser.parseLSquare() || +      parser.parseOperand(position) || parser.parseColonType(positionType) || +      parser.parseRSquare() || +      parser.parseOptionalAttrDict(result.attributes) || +      parser.parseColonType(vectorType)) +    return failure(); +  Type resultType = vectorType.getElementType(); +  return failure( +      parser.resolveOperand(vector, vectorType, result.operands) || +      parser.resolveOperand(position, positionType, result.operands) || +      parser.addTypeToList(resultType, result.types)); +} + +static LogicalResult verify(vector::ExtractElementOp op) { +  VectorType vectorType = op.getVectorType(); +  if (vectorType.getRank() != 1) +    return op.emitOpError("expected 1-D vector"); +  return success(); +} + +//===----------------------------------------------------------------------===//  // ExtractOp  //===----------------------------------------------------------------------===// @@ -685,6 +721,44 @@ static ParseResult parseShuffleOp(OpAsmParser &parser, OperationState &result) {  }  //===----------------------------------------------------------------------===// +// InsertElementOp +//===----------------------------------------------------------------------===// + +static void print(OpAsmPrinter &p, InsertElementOp op) { +  p << op.getOperationName() << " " << *op.source() << ", " << *op.dest() << "[" +    << *op.position() << " : " << op.position()->getType() << "]"; +  p.printOptionalAttrDict(op.getAttrs()); +  p << " : " << op.dest()->getType(); +} + +static ParseResult parseInsertElementOp(OpAsmParser &parser, +                                        OperationState &result) { +  OpAsmParser::OperandType source, dest, position; +  Type positionType; +  VectorType destType; +  if (parser.parseOperand(source) || parser.parseComma() || +      parser.parseOperand(dest) || parser.parseLSquare() || +      parser.parseOperand(position) || parser.parseColonType(positionType) || +      parser.parseRSquare() || +      parser.parseOptionalAttrDict(result.attributes) || +      parser.parseColonType(destType)) +    return failure(); +  Type sourceType = destType.getElementType(); +  return failure( +      parser.resolveOperand(source, sourceType, result.operands) || +      parser.resolveOperand(dest, destType, result.operands) || +      parser.resolveOperand(position, positionType, result.operands) || +      parser.addTypeToList(destType, result.types)); +} + +static LogicalResult verify(InsertElementOp op) { +  auto dstVectorType = op.getDestVectorType(); +  if (dstVectorType.getRank() != 1) +    return op.emitOpError("expected 1-D vector"); +  return success(); +} + +//===----------------------------------------------------------------------===//  // InsertOp  //===----------------------------------------------------------------------===//  | 

