@@ -2543,6 +2543,7 @@ void InstanceOp::build(OpBuilder &builder, OperationState &result,
25432543 } else {
25442544 portAnnotationsAttr = builder.getArrayAttr (portAnnotations);
25452545 }
2546+
25462547 ArrayAttr domainInfoAttr = module .getDomainInfoAttr ();
25472548 if (domainInfoAttr.empty ()) {
25482549 domainInfoAttr = builder.getArrayAttr (SmallVector<Attribute, 16 >(
@@ -2881,6 +2882,13 @@ void InstanceChoiceOp::build(
28812882 portAnnotationsAttr = builder.getArrayAttr (portAnnotations);
28822883 }
28832884
2885+ // Create the domain info attribute.
2886+ ArrayAttr domainInfoAttr = defaultModule.getDomainInfoAttr ();
2887+ if (domainInfoAttr.empty ()) {
2888+ domainInfoAttr = builder.getArrayAttr (SmallVector<Attribute, 16 >(
2889+ resultTypes.size (), builder.getArrayAttr ({})));
2890+ }
2891+
28842892 // Gather the module & case names.
28852893 SmallVector<Attribute> moduleNames, caseNames;
28862894 moduleNames.push_back (SymbolRefAttr::get (defaultModule.getModuleNameAttr ()));
@@ -2891,14 +2899,14 @@ void InstanceChoiceOp::build(
28912899 moduleNames.push_back (SymbolRefAttr::get (caseModule.getModuleNameAttr ()));
28922900 }
28932901
2894- return build (
2895- builder, result, resultTypes, builder.getArrayAttr (moduleNames ),
2896- builder.getArrayAttr (caseNames ), builder. getStringAttr (name ),
2897- NameKindEnumAttr::get (builder. getContext (), nameKind ),
2898- defaultModule. getPortDirectionsAttr (), defaultModule.getPortNamesAttr (),
2899- defaultModule. getDomainInfoAttr (), builder.getArrayAttr (annotations),
2900- portAnnotationsAttr, defaultModule.getLayersAttr (),
2901- innerSym ? hw::InnerSymAttr::get (innerSym) : hw::InnerSymAttr ());
2902+ return build (builder, result, resultTypes, builder. getArrayAttr (moduleNames),
2903+ builder.getArrayAttr (caseNames), builder. getStringAttr (name ),
2904+ NameKindEnumAttr::get ( builder.getContext ( ), nameKind ),
2905+ defaultModule. getPortDirectionsAttr ( ),
2906+ defaultModule.getPortNamesAttr (), domainInfoAttr ,
2907+ builder.getArrayAttr (annotations), portAnnotationsAttr ,
2908+ defaultModule.getLayersAttr (),
2909+ innerSym ? hw::InnerSymAttr::get (innerSym) : hw::InnerSymAttr ());
29022910}
29032911
29042912std::optional<size_t > InstanceChoiceOp::getTargetResultIndex () {
@@ -3024,7 +3032,7 @@ ParseResult InstanceChoiceOp::parse(OpAsmParser &parser,
30243032 }
30253033
30263034 if (parseModulePorts (parser, /* hasSSAIdentifiers=*/ false ,
3027- /* supportsSymbols=*/ false , /* supportsDomains=*/ false ,
3035+ /* supportsSymbols=*/ false , /* supportsDomains=*/ true ,
30283036 entryArgs, portDirections, portNames, portTypes,
30293037 portAnnotations, portSyms, portLocs, domains))
30303038 return failure ();
@@ -3165,10 +3173,9 @@ InstanceChoiceOp::erasePorts(OpBuilder &builder,
31653173 builder, getLoc (), newResultTypes, getModuleNames (), getCaseNames (),
31663174 getName (), getNameKind (),
31673175 direction::packAttribute (getContext (), newPortDirections),
3168- ArrayAttr::get (getContext (), newPortNames),
3169- ArrayAttr::get (getContext (), newPortDomains), getAnnotationsAttr (),
3170- ArrayAttr::get (getContext (), newPortAnnotations), getLayers (),
3171- getInnerSymAttr ());
3176+ ArrayAttr::get (getContext (), newPortNames), newPortDomains,
3177+ getAnnotationsAttr (), ArrayAttr::get (getContext (), newPortAnnotations),
3178+ getLayers (), getInnerSymAttr ());
31723179
31733180 for (unsigned oldIdx = 0 , newIdx = 0 , numOldPorts = getNumResults ();
31743181 oldIdx != numOldPorts; ++oldIdx) {
0 commit comments