12 using namespace circt;
17 SmallVectorImpl<OpAsmParser::UnresolvedOperand> &
inputs,
18 SmallVectorImpl<Type> &inputTypes, ArrayAttr &inputNames) {
20 SmallVector<Attribute> argNames;
23 if (parser.parseKeywordOrString(&portName))
27 inputTypes.push_back({});
28 return failure(parser.parseColon() || parser.parseOperand(
inputs.back()) ||
29 parser.parseColon() || parser.parseType(inputTypes.back()));
31 llvm::SMLoc inputsOperandsLoc;
32 if (parser.getCurrentLocation(&inputsOperandsLoc) ||
33 parser.parseCommaSeparatedList(OpAsmParser::Delimiter::Paren,
43 OperandRange
inputs, TypeRange inputTypes,
44 ArrayAttr inputNames) {
46 llvm::interleaveComma(llvm::zip(
inputs, inputNames), p,
47 [&](std::tuple<Value, Attribute> input) {
48 Value val = std::get<0>(input);
49 p.printKeywordOrString(
50 std::get<1>(input).cast<StringAttr>().getValue());
51 p <<
": " << val <<
": " << val.getType();
57 SmallVectorImpl<Type> &resultTypes,
58 ArrayAttr &resultNames) {
60 SmallVector<Attribute> names;
61 auto parseResultPort = [&]() -> ParseResult {
63 if (parser.parseKeywordOrString(&portName))
66 resultTypes.push_back({});
67 return parser.parseColonType(resultTypes.back());
69 llvm::SMLoc inputsOperandsLoc;
70 if (parser.getCurrentLocation(&inputsOperandsLoc) ||
71 parser.parseCommaSeparatedList(OpAsmParser::Delimiter::Paren,
81 TypeRange resultTypes, ArrayAttr resultNames) {
83 llvm::interleaveComma(
84 llvm::zip(resultTypes, resultNames), p,
85 [&](std::tuple<Type, Attribute> result) {
86 p.printKeywordOrString(
87 std::get<1>(result).cast<StringAttr>().getValue());
88 p <<
": " << std::get<0>(result);
94 ArrayAttr ¶meters) {
95 SmallVector<Attribute> params;
97 auto parseParameter = [&]() {
102 if (parser.parseKeywordOrString(&name) || parser.parseColonType(type))
106 if (succeeded(parser.parseOptionalEqual())) {
107 if (parser.parseAttribute(value, type))
111 auto &
builder = parser.getBuilder();
117 if (failed(parser.parseCommaSeparatedList(
118 OpAsmParser::Delimiter::OptionalLessGreater, parseParameter)))
127 ArrayAttr parameters) {
128 if (parameters.empty())
132 llvm::interleaveComma(parameters, p, [&](Attribute param) {
133 auto paramAttr = param.cast<ParamDeclAttr>();
134 p << paramAttr.getName().getValue() <<
": " << paramAttr.getType();
135 if (
auto value = paramAttr.getValue()) {
137 p.printAttributeWithoutType(value);
static ParseResult parseInputPort(OpAsmParser &parser, module_like_impl::PortParse &result)
llvm::SmallVector< StringAttr > inputs
Direction get(bool isOutput)
Returns an output direction if isOutput is true, otherwise returns an input direction.
The InstanceGraph op interface, see InstanceGraphInterface.td for more details.
ParseResult parseInputPortList(OpAsmParser &parser, SmallVectorImpl< OpAsmParser::UnresolvedOperand > &inputs, SmallVectorImpl< Type > &inputTypes, ArrayAttr &inputNames)
Parse a list of instance input ports.
void printOutputPortList(OpAsmPrinter &p, Operation *op, TypeRange resultTypes, ArrayAttr resultNames)
Print a list of instance output ports.
ParseResult parseOptionalParameterList(OpAsmParser &parser, ArrayAttr ¶meters)
Parse an parameter list if present.
void printOptionalParameterList(OpAsmPrinter &p, Operation *op, ArrayAttr parameters)
Print a parameter list for a module or instance.
void printInputPortList(OpAsmPrinter &p, Operation *op, OperandRange inputs, TypeRange inputTypes, ArrayAttr inputNames)
Print a list of instance input ports.
ParseResult parseOutputPortList(OpAsmParser &parser, SmallVectorImpl< Type > &resultTypes, ArrayAttr &resultNames)
Parse a list of instance output ports.