Skip to content

Commit

Permalink
select.cc: More refactoring
Browse files Browse the repository at this point in the history
  • Loading branch information
KrystalDelusion committed Nov 14, 2024
1 parent f61fb63 commit 8c60caf
Showing 1 changed file with 29 additions and 40 deletions.
69 changes: 29 additions & 40 deletions passes/cmds/select.cc
Original file line number Diff line number Diff line change
Expand Up @@ -212,21 +212,16 @@ static void select_op_random(RTLIL::Design *design, RTLIL::Selection &lhs, int c
{
vector<pair<IdString, IdString>> objects;

for (auto mod : design->modules())
design->selection_stack.push_back(lhs);
for (auto mod : design->selected_modules())
{
if (!lhs.selected_module(mod->name))
continue;

for (auto cell : mod->cells()) {
if (lhs.selected_member(mod->name, cell->name))
objects.push_back(make_pair(mod->name, cell->name));
}
for (auto cell : mod->selected_cells())
objects.push_back(make_pair(mod->name, cell->name));

for (auto wire : mod->wires()) {
if (lhs.selected_member(mod->name, wire->name))
objects.push_back(make_pair(mod->name, wire->name));
}
for (auto wire : mod->selected_wires())
objects.push_back(make_pair(mod->name, wire->name));
}
design->selection_stack.pop_back();

lhs = RTLIL::Selection(false, false, design);

Expand All @@ -243,28 +238,23 @@ static void select_op_random(RTLIL::Design *design, RTLIL::Selection &lhs, int c

static void select_op_submod(RTLIL::Design *design, RTLIL::Selection &lhs)
{
for (auto mod : design->modules())
{
if (lhs.selected_whole_module(mod->name))
{
for (auto cell : mod->cells())
{
if (design->module(cell->type) == nullptr)
continue;
design->selection_stack.push_back(lhs);
for (auto mod : design->selected_modules())
for (auto cell : mod->selected_cells())
if (design->module(cell->type) != nullptr)
lhs.selected_modules.insert(cell->type);
}
}
}
design->selection_stack.pop_back();
}

static void select_op_cells_to_modules(RTLIL::Design *design, RTLIL::Selection &lhs)
{
RTLIL::Selection new_sel(false, lhs.selects_boxes, design);
for (auto mod : design->modules())
if (lhs.selected_module(mod->name))
for (auto cell : mod->cells())
if (lhs.selected_member(mod->name, cell->name) && (design->module(cell->type) != nullptr))
new_sel.selected_modules.insert(cell->type);
design->selection_stack.push_back(lhs);
for (auto mod : design->selected_modules())
for (auto cell : mod->selected_cells())
if (design->module(cell->type) != nullptr)
new_sel.selected_modules.insert(cell->type);
design->selection_stack.pop_back();
lhs = new_sel;
}

Expand All @@ -288,26 +278,23 @@ static void select_op_fullmod(RTLIL::Design *design, RTLIL::Selection &lhs)

static void select_op_alias(RTLIL::Design *design, RTLIL::Selection &lhs)
{
for (auto mod : design->modules())
design->selection_stack.push_back(lhs);
for (auto mod : design->selected_modules())
{
if (!lhs.selects_boxes && mod->get_blackbox_attribute())
continue;
if (lhs.selected_whole_module(mod->name))
continue;
if (!lhs.selected_module(mod->name))
continue;

SigMap sigmap(mod);
SigPool selected_bits;

for (auto wire : mod->wires())
if (lhs.selected_member(mod->name, wire->name))
selected_bits.add(sigmap(wire));
for (auto wire : mod->selected_wires())
selected_bits.add(sigmap(wire));

for (auto wire : mod->wires())
if (!lhs.selected_member(mod->name, wire->name) && selected_bits.check_any(sigmap(wire)))
lhs.selected_members[mod->name].insert(wire->name);
}
design->selection_stack.pop_back();
}

static void select_op_union(RTLIL::Design* design, RTLIL::Selection &lhs, const RTLIL::Selection &rhs)
Expand Down Expand Up @@ -476,16 +463,17 @@ static int select_op_expand(RTLIL::Design *design, RTLIL::Selection &lhs, std::v
{
int sel_objects = 0;
bool is_input, is_output;
for (auto mod : design->modules())
design->selection_stack.push_back(lhs);
for (auto mod : design->selected_modules())
{
if (lhs.selected_whole_module(mod->name) || !lhs.selected_module(mod->name))
if (lhs.selected_whole_module(mod->name))
continue;

std::set<RTLIL::Wire*> selected_wires;
auto selected_members = lhs.selected_members[mod->name];

for (auto wire : mod->wires())
if (lhs.selected_member(mod->name, wire->name) && limits.count(wire->name) == 0)
for (auto wire : mod->selected_wires())
if (limits.count(wire->name) == 0)
selected_wires.insert(wire);

for (auto &conn : mod->connections())
Expand Down Expand Up @@ -537,6 +525,7 @@ static int select_op_expand(RTLIL::Design *design, RTLIL::Selection &lhs, std::v
exclude_match:;
}
}
design->selection_stack.pop_back();

return sel_objects;
}
Expand Down

0 comments on commit 8c60caf

Please sign in to comment.