xref: /llvm-project/mlir/lib/Dialect/Transform/Utils/Utils.cpp (revision 2c1c67674cb3beb4e091a9f446de5858631cf8ae)
1 //===- Utils.cpp - Transform dialect utilities ----------------------------===//
2 //
3 // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4 // See https://llvm.org/LICENSE.txt for license information.
5 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6 //
7 //===----------------------------------------------------------------------===//
8 
9 #include "mlir/Dialect/Transform/Utils/Utils.h"
10 
11 #include "mlir/IR/OpDefinition.h"
12 #include "mlir/Interfaces/ViewLikeInterface.h"
13 
14 using namespace mlir;
15 using namespace mlir::transform;
16 
printPackedOrDynamicIndexList(OpAsmPrinter & printer,Operation * op,Value packed,Type packedType,OperandRange values,TypeRange valueTypes,DenseI64ArrayAttr integers)17 void mlir::transform::printPackedOrDynamicIndexList(
18     OpAsmPrinter &printer, Operation *op, Value packed, Type packedType,
19     OperandRange values, TypeRange valueTypes, DenseI64ArrayAttr integers) {
20   if (packed) {
21     assert(values.empty() && (!integers || integers.empty()) &&
22            "expected no values/integers");
23     printer << "*(" << packed;
24     if (packedType) {
25       printer << " : " << packedType;
26     }
27     printer << ")";
28     return;
29   }
30   printDynamicIndexList(printer, op, values, integers, valueTypes);
31 }
32 
parsePackedOrDynamicIndexList(OpAsmParser & parser,std::optional<OpAsmParser::UnresolvedOperand> & packed,Type & packedType,SmallVectorImpl<OpAsmParser::UnresolvedOperand> & values,SmallVectorImpl<Type> * valueTypes,DenseI64ArrayAttr & integers)33 ParseResult mlir::transform::parsePackedOrDynamicIndexList(
34     OpAsmParser &parser, std::optional<OpAsmParser::UnresolvedOperand> &packed,
35     Type &packedType, SmallVectorImpl<OpAsmParser::UnresolvedOperand> &values,
36     SmallVectorImpl<Type> *valueTypes, DenseI64ArrayAttr &integers) {
37   OpAsmParser::UnresolvedOperand packedOperand;
38   if (parser.parseOptionalStar().succeeded()) {
39     if (parser.parseLParen().failed() ||
40         parser.parseOperand(packedOperand).failed())
41       return failure();
42     if (packedType && (parser.parseColonType(packedType).failed()))
43       return failure();
44     if (parser.parseRParen().failed())
45       return failure();
46     packed.emplace(packedOperand);
47     integers = parser.getBuilder().getDenseI64ArrayAttr({});
48     return success();
49   }
50 
51   return parseDynamicIndexList(parser, values, integers, valueTypes);
52 }
53