[NFC][FIRRTL] Add an accessor to the cases of instance choices

This commit is contained in:
Nandor Licker 2023-12-13 03:56:00 -08:00
parent 34c5329073
commit b45cfc065f
2 changed files with 22 additions and 0 deletions

View File

@ -199,6 +199,11 @@ def InstanceChoiceOp : HardwareDeclOp<"instance_choice", [
return direction::get(getPortDirections()[resultNo]);
}
/// Return the port name for the specified result number.
StringAttr getPortName(size_t resultNo) {
return cast<StringAttr>(getPortNames()[resultNo]);
}
/// Return the default target attribute.
FlatSymbolRefAttr getDefaultTargetAttr() {
return getModuleNamesAttr()[0].cast<FlatSymbolRefAttr>();
@ -211,6 +216,10 @@ def InstanceChoiceOp : HardwareDeclOp<"instance_choice", [
/// Return the target for an option or the default if none specified.
FlatSymbolRefAttr getTargetOrDefaultAttr(OptionCaseOp option);
/// Return the list of case-module mappings.
SmallVector<std::pair<SymbolRefAttr, FlatSymbolRefAttr>, 1>
getTargetChoices();
}];
let builders = [

View File

@ -2477,6 +2477,19 @@ InstanceChoiceOp::getTargetOrDefaultAttr(OptionCaseOp option) {
}
return getDefaultTargetAttr();
}
SmallVector<std::pair<SymbolRefAttr, FlatSymbolRefAttr>, 1>
InstanceChoiceOp::getTargetChoices() {
auto caseNames = getCaseNamesAttr();
auto moduleNames = getModuleNamesAttr();
SmallVector<std::pair<SymbolRefAttr, FlatSymbolRefAttr>, 1> choices;
for (size_t i = 0; i < caseNames.size(); ++i) {
choices.emplace_back(caseNames[i].cast<SymbolRefAttr>(),
moduleNames[i + 1].cast<FlatSymbolRefAttr>());
}
return choices;
}
//===----------------------------------------------------------------------===//
// MemOp