12 using namespace circt;
17 SmallVectorImpl<OpAsmParser::UnresolvedOperand> &
inputs,
18 SmallVectorImpl<Type> &inputTypes, ArrayAttr &inputNames) {
20 SmallVector<Attribute> argNames;
21 auto parseInputPort = [&]() -> ParseResult {
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);
llvm::SmallVector< StringAttr > inputs
Direction get(bool isOutput)
Returns an output direction if isOutput is true, otherwise returns an input direction.
This file defines an intermediate representation for circuits acting as an abstraction for constraint...
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.