design->check();
}
-void Pass::call_newsel(RTLIL::Design *design, std::string command)
+void Pass::call_on_selection(RTLIL::Design *design, const RTLIL::Selection &selection, std::string command)
{
std::string backup_selected_active_module = design->selected_active_module;
design->selected_active_module.clear();
- design->selection_stack.push_back(RTLIL::Selection());
+ design->selection_stack.push_back(selection);
Pass::call(design, command);
design->selected_active_module = backup_selected_active_module;
}
-void Pass::call_newsel(RTLIL::Design *design, std::vector<std::string> args)
+void Pass::call_on_selection(RTLIL::Design *design, const RTLIL::Selection &selection, std::vector<std::string> args)
{
std::string backup_selected_active_module = design->selected_active_module;
design->selected_active_module.clear();
- design->selection_stack.push_back(RTLIL::Selection());
+ design->selection_stack.push_back(selection);
+
+ Pass::call(design, args);
+
+ design->selection_stack.pop_back();
+ design->selected_active_module = backup_selected_active_module;
+}
+
+void Pass::call_on_module(RTLIL::Design *design, RTLIL::Module *module, std::string command)
+{
+ std::string backup_selected_active_module = design->selected_active_module;
+ design->selected_active_module = module->name;
+ design->selection_stack.push_back(RTLIL::Selection(false));
+ design->selection_stack.back().select(module);
+
+ Pass::call(design, command);
+
+ design->selection_stack.pop_back();
+ design->selected_active_module = backup_selected_active_module;
+}
+
+void Pass::call_on_module(RTLIL::Design *design, RTLIL::Module *module, std::vector<std::string> args)
+{
+ std::string backup_selected_active_module = design->selected_active_module;
+ design->selected_active_module = module->name;
+ design->selection_stack.push_back(RTLIL::Selection(false));
+ design->selection_stack.back().select(module);
Pass::call(design, args);
static void call(RTLIL::Design *design, std::string command);
static void call(RTLIL::Design *design, std::vector<std::string> args);
- static void call_newsel(RTLIL::Design *design, std::string command);
- static void call_newsel(RTLIL::Design *design, std::vector<std::string> args);
+ static void call_on_selection(RTLIL::Design *design, const RTLIL::Selection &selection, std::string command);
+ static void call_on_selection(RTLIL::Design *design, const RTLIL::Selection &selection, std::vector<std::string> args);
+
+ static void call_on_module(RTLIL::Design *design, RTLIL::Module *module, std::string command);
+ static void call_on_module(RTLIL::Design *design, RTLIL::Module *module, std::vector<std::string> args);
static void init_register();
static void done_register();
if (module == NULL)
log("Nothing selected -> do nothing.\n");
else {
- Pass::call_newsel(design, stringf("opt_clean %s", module->name.c_str()));
+ Pass::call_on_module(design, module, "opt_clean");
log_header("Continuing SUBMOD pass.\n");
SubmodWorker worker(design, module, opt_name);
}
tpl->add(data.wire);
std::string cmd_string = data.value.as_const().decode_string();
-
- RTLIL::Selection tpl_mod_sel(false);
- std::string backup_active_module = map->selected_active_module;
- map->selected_active_module = tpl->name;
- tpl_mod_sel.select(tpl);
- map->selection_stack.push_back(tpl_mod_sel);
- Pass::call(map, cmd_string);
- map->selection_stack.pop_back();
- map->selected_active_module = backup_active_module;
+ Pass::call_on_module(map, tpl, cmd_string);
keep_running = true;
break;