3
0
Fork 0
mirror of https://github.com/YosysHQ/yosys synced 2025-12-23 12:43:46 +00:00

Pass IdString by value instead of by const reference.

When IdString refcounting was expensive, it made sense to pass it by const reference
instead of by value, to avoid refcount churn. Now that IdString is not refcounted,
it's slightly more efficient to pass it by value.
This commit is contained in:
Robert O'Callahan 2025-12-22 01:52:59 +00:00
parent 64a933d77b
commit 46cb05c471
15 changed files with 108 additions and 108 deletions

View file

@ -756,7 +756,7 @@ struct CxxrtlWorker {
// 1b. Generated identifiers for internal names (beginning with `$`) start with `i_`. // 1b. Generated identifiers for internal names (beginning with `$`) start with `i_`.
// 2. An underscore is escaped with another underscore, i.e. `__`. // 2. An underscore is escaped with another underscore, i.e. `__`.
// 3. Any other non-alnum character is escaped with underscores around its lowercase hex code, e.g. `@` as `_40_`. // 3. Any other non-alnum character is escaped with underscores around its lowercase hex code, e.g. `@` as `_40_`.
std::string mangle_name(const RTLIL::IdString &name) std::string mangle_name(RTLIL::IdString name)
{ {
std::string mangled; std::string mangled;
bool first = true; bool first = true;
@ -786,7 +786,7 @@ struct CxxrtlWorker {
return mangled; return mangled;
} }
std::string mangle_module_name(const RTLIL::IdString &name, bool is_blackbox = false) std::string mangle_module_name(RTLIL::IdString name, bool is_blackbox = false)
{ {
// Class namespace. // Class namespace.
if (is_blackbox) if (is_blackbox)
@ -794,19 +794,19 @@ struct CxxrtlWorker {
return mangle_name(name); return mangle_name(name);
} }
std::string mangle_memory_name(const RTLIL::IdString &name) std::string mangle_memory_name(RTLIL::IdString name)
{ {
// Class member namespace. // Class member namespace.
return "memory_" + mangle_name(name); return "memory_" + mangle_name(name);
} }
std::string mangle_cell_name(const RTLIL::IdString &name) std::string mangle_cell_name(RTLIL::IdString name)
{ {
// Class member namespace. // Class member namespace.
return "cell_" + mangle_name(name); return "cell_" + mangle_name(name);
} }
std::string mangle_wire_name(const RTLIL::IdString &name) std::string mangle_wire_name(RTLIL::IdString name)
{ {
// Class member namespace. // Class member namespace.
return mangle_name(name); return mangle_name(name);

View file

@ -879,7 +879,7 @@ static void check_auto_nosync(AstNode *node)
} }
// remove the attributes we've "consumed" // remove the attributes we've "consumed"
for (const RTLIL::IdString &str : attrs_to_drop) { for (RTLIL::IdString str : attrs_to_drop) {
auto it = node->attributes.find(str); auto it = node->attributes.find(str);
node->attributes.erase(it); node->attributes.erase(it);
} }

View file

@ -305,18 +305,18 @@ struct CellTypes
cell_types.clear(); cell_types.clear();
} }
bool cell_known(const RTLIL::IdString &type) const bool cell_known(RTLIL::IdString type) const
{ {
return cell_types.count(type) != 0; return cell_types.count(type) != 0;
} }
bool cell_output(const RTLIL::IdString &type, const RTLIL::IdString &port) const bool cell_output(RTLIL::IdString type, RTLIL::IdString port) const
{ {
auto it = cell_types.find(type); auto it = cell_types.find(type);
return it != cell_types.end() && it->second.outputs.count(port) != 0; return it != cell_types.end() && it->second.outputs.count(port) != 0;
} }
bool cell_input(const RTLIL::IdString &type, const RTLIL::IdString &port) const bool cell_input(RTLIL::IdString type, RTLIL::IdString port) const
{ {
auto it = cell_types.find(type); auto it = cell_types.find(type);
return it != cell_types.end() && it->second.inputs.count(port) != 0; return it != cell_types.end() && it->second.inputs.count(port) != 0;
@ -332,7 +332,7 @@ struct CellTypes
return RTLIL::PortDir(is_input + is_output * 2); return RTLIL::PortDir(is_input + is_output * 2);
} }
bool cell_evaluable(const RTLIL::IdString &type) const bool cell_evaluable(RTLIL::IdString type) const
{ {
auto it = cell_types.find(type); auto it = cell_types.find(type);
return it != cell_types.end() && it->second.is_evaluable; return it != cell_types.end() && it->second.is_evaluable;

View file

@ -602,7 +602,7 @@ void format_emit_string_view(std::string &result, std::string_view spec, int *dy
} }
void format_emit_idstring(std::string &result, std::string_view spec, int *dynamic_ints, void format_emit_idstring(std::string &result, std::string_view spec, int *dynamic_ints,
DynamicIntCount num_dynamic_ints, const IdString &arg) DynamicIntCount num_dynamic_ints, const RTLIL::IdString &arg)
{ {
if (spec == "%s") { if (spec == "%s") {
// Format checking will have guaranteed num_dynamic_ints == 0. // Format checking will have guaranteed num_dynamic_ints == 0.

View file

@ -161,7 +161,7 @@ struct ModIndex : public RTLIL::Monitor
#endif #endif
} }
void notify_connect(RTLIL::Cell *cell, const RTLIL::IdString &port, const RTLIL::SigSpec &old_sig, const RTLIL::SigSpec &sig) override void notify_connect(RTLIL::Cell *cell, RTLIL::IdString port, const RTLIL::SigSpec &old_sig, const RTLIL::SigSpec &sig) override
{ {
log_assert(module == cell->module); log_assert(module == cell->module);

View file

@ -1017,12 +1017,12 @@ RTLIL::Const RTLIL::Const::extract(int offset, int len, RTLIL::State padding) co
} }
#undef check /* check(condition) for Const */ #undef check /* check(condition) for Const */
bool RTLIL::AttrObject::has_attribute(const RTLIL::IdString &id) const bool RTLIL::AttrObject::has_attribute(RTLIL::IdString id) const
{ {
return attributes.count(id); return attributes.count(id);
} }
void RTLIL::AttrObject::set_bool_attribute(const RTLIL::IdString &id, bool value) void RTLIL::AttrObject::set_bool_attribute(RTLIL::IdString id, bool value)
{ {
if (value) if (value)
attributes[id] = RTLIL::Const(1); attributes[id] = RTLIL::Const(1);
@ -1030,7 +1030,7 @@ void RTLIL::AttrObject::set_bool_attribute(const RTLIL::IdString &id, bool value
attributes.erase(id); attributes.erase(id);
} }
bool RTLIL::AttrObject::get_bool_attribute(const RTLIL::IdString &id) const bool RTLIL::AttrObject::get_bool_attribute(RTLIL::IdString id) const
{ {
const auto it = attributes.find(id); const auto it = attributes.find(id);
if (it == attributes.end()) if (it == attributes.end())
@ -1038,7 +1038,7 @@ bool RTLIL::AttrObject::get_bool_attribute(const RTLIL::IdString &id) const
return it->second.as_bool(); return it->second.as_bool();
} }
void RTLIL::AttrObject::set_string_attribute(const RTLIL::IdString& id, string value) void RTLIL::AttrObject::set_string_attribute(RTLIL::IdString id, string value)
{ {
if (value.empty()) if (value.empty())
attributes.erase(id); attributes.erase(id);
@ -1046,7 +1046,7 @@ void RTLIL::AttrObject::set_string_attribute(const RTLIL::IdString& id, string v
attributes[id] = value; attributes[id] = value;
} }
string RTLIL::AttrObject::get_string_attribute(const RTLIL::IdString &id) const string RTLIL::AttrObject::get_string_attribute(RTLIL::IdString id) const
{ {
std::string value; std::string value;
const auto it = attributes.find(id); const auto it = attributes.find(id);
@ -1055,7 +1055,7 @@ string RTLIL::AttrObject::get_string_attribute(const RTLIL::IdString &id) const
return value; return value;
} }
void RTLIL::AttrObject::set_strpool_attribute(const RTLIL::IdString& id, const pool<string> &data) void RTLIL::AttrObject::set_strpool_attribute(RTLIL::IdString id, const pool<string> &data)
{ {
string attrval; string attrval;
for (const auto &s : data) { for (const auto &s : data) {
@ -1066,7 +1066,7 @@ void RTLIL::AttrObject::set_strpool_attribute(const RTLIL::IdString& id, const p
set_string_attribute(id, attrval); set_string_attribute(id, attrval);
} }
void RTLIL::AttrObject::add_strpool_attribute(const RTLIL::IdString& id, const pool<string> &data) void RTLIL::AttrObject::add_strpool_attribute(RTLIL::IdString id, const pool<string> &data)
{ {
pool<string> union_data = get_strpool_attribute(id); pool<string> union_data = get_strpool_attribute(id);
union_data.insert(data.begin(), data.end()); union_data.insert(data.begin(), data.end());
@ -1074,7 +1074,7 @@ void RTLIL::AttrObject::add_strpool_attribute(const RTLIL::IdString& id, const p
set_strpool_attribute(id, union_data); set_strpool_attribute(id, union_data);
} }
pool<string> RTLIL::AttrObject::get_strpool_attribute(const RTLIL::IdString &id) const pool<string> RTLIL::AttrObject::get_strpool_attribute(RTLIL::IdString id) const
{ {
pool<string> data; pool<string> data;
if (attributes.count(id) != 0) if (attributes.count(id) != 0)
@ -1099,7 +1099,7 @@ vector<string> RTLIL::AttrObject::get_hdlname_attribute() const
return split_tokens(get_string_attribute(ID::hdlname), " "); return split_tokens(get_string_attribute(ID::hdlname), " ");
} }
void RTLIL::AttrObject::set_intvec_attribute(const RTLIL::IdString& id, const vector<int> &data) void RTLIL::AttrObject::set_intvec_attribute(RTLIL::IdString id, const vector<int> &data)
{ {
std::stringstream attrval; std::stringstream attrval;
for (auto &i : data) { for (auto &i : data) {
@ -1110,7 +1110,7 @@ void RTLIL::AttrObject::set_intvec_attribute(const RTLIL::IdString& id, const ve
attributes[id] = RTLIL::Const(attrval.str()); attributes[id] = RTLIL::Const(attrval.str());
} }
vector<int> RTLIL::AttrObject::get_intvec_attribute(const RTLIL::IdString &id) const vector<int> RTLIL::AttrObject::get_intvec_attribute(RTLIL::IdString id) const
{ {
vector<int> data; vector<int> data;
auto it = attributes.find(id); auto it = attributes.find(id);
@ -1128,7 +1128,7 @@ vector<int> RTLIL::AttrObject::get_intvec_attribute(const RTLIL::IdString &id) c
return data; return data;
} }
bool RTLIL::Selection::boxed_module(const RTLIL::IdString &mod_name) const bool RTLIL::Selection::boxed_module(RTLIL::IdString mod_name) const
{ {
if (current_design != nullptr) { if (current_design != nullptr) {
auto module = current_design->module(mod_name); auto module = current_design->module(mod_name);
@ -1139,7 +1139,7 @@ bool RTLIL::Selection::boxed_module(const RTLIL::IdString &mod_name) const
} }
} }
bool RTLIL::Selection::selected_module(const RTLIL::IdString &mod_name) const bool RTLIL::Selection::selected_module(RTLIL::IdString mod_name) const
{ {
if (complete_selection) if (complete_selection)
return true; return true;
@ -1154,7 +1154,7 @@ bool RTLIL::Selection::selected_module(const RTLIL::IdString &mod_name) const
return false; return false;
} }
bool RTLIL::Selection::selected_whole_module(const RTLIL::IdString &mod_name) const bool RTLIL::Selection::selected_whole_module(RTLIL::IdString mod_name) const
{ {
if (complete_selection) if (complete_selection)
return true; return true;
@ -1167,7 +1167,7 @@ bool RTLIL::Selection::selected_whole_module(const RTLIL::IdString &mod_name) co
return false; return false;
} }
bool RTLIL::Selection::selected_member(const RTLIL::IdString &mod_name, const RTLIL::IdString &memb_name) const bool RTLIL::Selection::selected_member(RTLIL::IdString mod_name, RTLIL::IdString memb_name) const
{ {
if (complete_selection) if (complete_selection)
return true; return true;
@ -1294,12 +1294,12 @@ RTLIL::ObjRange<RTLIL::Module*> RTLIL::Design::modules()
return RTLIL::ObjRange<RTLIL::Module*>(&modules_, &refcount_modules_); return RTLIL::ObjRange<RTLIL::Module*>(&modules_, &refcount_modules_);
} }
RTLIL::Module *RTLIL::Design::module(const RTLIL::IdString& name) RTLIL::Module *RTLIL::Design::module(RTLIL::IdString name)
{ {
return modules_.count(name) ? modules_.at(name) : NULL; return modules_.count(name) ? modules_.at(name) : NULL;
} }
const RTLIL::Module *RTLIL::Design::module(const RTLIL::IdString& name) const const RTLIL::Module *RTLIL::Design::module(RTLIL::IdString name) const
{ {
return modules_.count(name) ? modules_.at(name) : NULL; return modules_.count(name) ? modules_.at(name) : NULL;
} }
@ -1488,21 +1488,21 @@ void RTLIL::Design::optimize()
it.second.optimize(this); it.second.optimize(this);
} }
bool RTLIL::Design::selected_module(const RTLIL::IdString& mod_name) const bool RTLIL::Design::selected_module(RTLIL::IdString mod_name) const
{ {
if (!selected_active_module.empty() && mod_name != selected_active_module) if (!selected_active_module.empty() && mod_name != selected_active_module)
return false; return false;
return selection().selected_module(mod_name); return selection().selected_module(mod_name);
} }
bool RTLIL::Design::selected_whole_module(const RTLIL::IdString& mod_name) const bool RTLIL::Design::selected_whole_module(RTLIL::IdString mod_name) const
{ {
if (!selected_active_module.empty() && mod_name != selected_active_module) if (!selected_active_module.empty() && mod_name != selected_active_module)
return false; return false;
return selection().selected_whole_module(mod_name); return selection().selected_whole_module(mod_name);
} }
bool RTLIL::Design::selected_member(const RTLIL::IdString& mod_name, const RTLIL::IdString& memb_name) const bool RTLIL::Design::selected_member(RTLIL::IdString mod_name, RTLIL::IdString memb_name) const
{ {
if (!selected_active_module.empty() && mod_name != selected_active_module) if (!selected_active_module.empty() && mod_name != selected_active_module)
return false; return false;
@ -1693,7 +1693,7 @@ RTLIL::IdString RTLIL::Module::derive(RTLIL::Design*, const dict<RTLIL::IdString
log_error("Module `%s' is used with parameters but is not parametric!\n", id2cstr(name)); log_error("Module `%s' is used with parameters but is not parametric!\n", id2cstr(name));
} }
size_t RTLIL::Module::count_id(const RTLIL::IdString& id) size_t RTLIL::Module::count_id(RTLIL::IdString id)
{ {
return wires_.count(id) + memories.count(id) + cells_.count(id) + processes.count(id); return wires_.count(id) + memories.count(id) + cells_.count(id) + processes.count(id);
} }
@ -1718,7 +1718,7 @@ namespace {
cell->name.c_str(), cell->type.c_str(), __FILE__, linenr, buf.str().c_str()); cell->name.c_str(), cell->type.c_str(), __FILE__, linenr, buf.str().c_str());
} }
int param(const RTLIL::IdString& name) int param(RTLIL::IdString name)
{ {
auto it = cell->parameters.find(name); auto it = cell->parameters.find(name);
if (it == cell->parameters.end()) if (it == cell->parameters.end())
@ -1727,7 +1727,7 @@ namespace {
return it->second.as_int(); return it->second.as_int();
} }
int param_bool(const RTLIL::IdString& name) int param_bool(RTLIL::IdString name)
{ {
int v = param(name); int v = param(name);
if (GetSize(cell->parameters.at(name)) > 32) if (GetSize(cell->parameters.at(name)) > 32)
@ -1737,7 +1737,7 @@ namespace {
return v; return v;
} }
int param_bool(const RTLIL::IdString& name, bool expected) int param_bool(RTLIL::IdString name, bool expected)
{ {
int v = param_bool(name); int v = param_bool(name);
if (v != expected) if (v != expected)
@ -1745,20 +1745,20 @@ namespace {
return v; return v;
} }
void param_bits(const RTLIL::IdString& name, int width) void param_bits(RTLIL::IdString name, int width)
{ {
param(name); param(name);
if (GetSize(cell->parameters.at(name)) != width) if (GetSize(cell->parameters.at(name)) != width)
error(__LINE__); error(__LINE__);
} }
std::string param_string(const RTLIL::IdString &name) std::string param_string(RTLIL::IdString name)
{ {
param(name); param(name);
return cell->parameters.at(name).decode_string(); return cell->parameters.at(name).decode_string();
} }
void port(const RTLIL::IdString& name, int width) void port(RTLIL::IdString name, int width)
{ {
auto it = cell->connections_.find(name); auto it = cell->connections_.find(name);
if (it == cell->connections_.end()) if (it == cell->connections_.end())
@ -4366,14 +4366,14 @@ std::map<unsigned int, RTLIL::Cell*> *RTLIL::Cell::get_all_cells(void)
} }
#endif #endif
bool RTLIL::Cell::hasPort(const RTLIL::IdString& portname) const bool RTLIL::Cell::hasPort(RTLIL::IdString portname) const
{ {
return connections_.count(portname) != 0; return connections_.count(portname) != 0;
} }
// bufnorm // bufnorm
const RTLIL::SigSpec &RTLIL::Cell::getPort(const RTLIL::IdString& portname) const const RTLIL::SigSpec &RTLIL::Cell::getPort(RTLIL::IdString portname) const
{ {
return connections_.at(portname); return connections_.at(portname);
} }
@ -4392,7 +4392,7 @@ bool RTLIL::Cell::known() const
return false; return false;
} }
bool RTLIL::Cell::input(const RTLIL::IdString& portname) const bool RTLIL::Cell::input(RTLIL::IdString portname) const
{ {
if (yosys_celltypes.cell_known(type)) if (yosys_celltypes.cell_known(type))
return yosys_celltypes.cell_input(type, portname); return yosys_celltypes.cell_input(type, portname);
@ -4404,7 +4404,7 @@ bool RTLIL::Cell::input(const RTLIL::IdString& portname) const
return false; return false;
} }
bool RTLIL::Cell::output(const RTLIL::IdString& portname) const bool RTLIL::Cell::output(RTLIL::IdString portname) const
{ {
if (yosys_celltypes.cell_known(type)) if (yosys_celltypes.cell_known(type))
return yosys_celltypes.cell_output(type, portname); return yosys_celltypes.cell_output(type, portname);
@ -4416,7 +4416,7 @@ bool RTLIL::Cell::output(const RTLIL::IdString& portname) const
return false; return false;
} }
RTLIL::PortDir RTLIL::Cell::port_dir(const RTLIL::IdString& portname) const RTLIL::PortDir RTLIL::Cell::port_dir(RTLIL::IdString portname) const
{ {
if (yosys_celltypes.cell_known(type)) if (yosys_celltypes.cell_known(type))
return yosys_celltypes.cell_port_dir(type, portname); return yosys_celltypes.cell_port_dir(type, portname);
@ -4432,22 +4432,22 @@ RTLIL::PortDir RTLIL::Cell::port_dir(const RTLIL::IdString& portname) const
return PortDir::PD_UNKNOWN; return PortDir::PD_UNKNOWN;
} }
bool RTLIL::Cell::hasParam(const RTLIL::IdString& paramname) const bool RTLIL::Cell::hasParam(RTLIL::IdString paramname) const
{ {
return parameters.count(paramname) != 0; return parameters.count(paramname) != 0;
} }
void RTLIL::Cell::unsetParam(const RTLIL::IdString& paramname) void RTLIL::Cell::unsetParam(RTLIL::IdString paramname)
{ {
parameters.erase(paramname); parameters.erase(paramname);
} }
void RTLIL::Cell::setParam(const RTLIL::IdString& paramname, RTLIL::Const value) void RTLIL::Cell::setParam(RTLIL::IdString paramname, RTLIL::Const value)
{ {
parameters[paramname] = std::move(value); parameters[paramname] = std::move(value);
} }
const RTLIL::Const &RTLIL::Cell::getParam(const RTLIL::IdString& paramname) const const RTLIL::Const &RTLIL::Cell::getParam(RTLIL::IdString paramname) const
{ {
const auto &it = parameters.find(paramname); const auto &it = parameters.find(paramname);
if (it != parameters.end()) if (it != parameters.end())

View file

@ -241,7 +241,7 @@ struct RTLIL::IdString
*this = id; *this = id;
} }
constexpr inline const IdString &id_string() const { return *this; } constexpr inline IdString id_string() const { return *this; }
inline const char *c_str() const { inline const char *c_str() const {
if (index_ >= 0) if (index_ >= 0)
@ -372,7 +372,7 @@ struct RTLIL::IdString
return Substrings(global_autoidx_id_storage_.at(index_).prefix, -index_); return Substrings(global_autoidx_id_storage_.at(index_).prefix, -index_);
} }
inline bool lt_by_name(const IdString &rhs) const { inline bool lt_by_name(IdString rhs) const {
Substrings lhs_it = substrings(); Substrings lhs_it = substrings();
Substrings rhs_it = rhs.substrings(); Substrings rhs_it = rhs.substrings();
std::string_view lhs_substr = lhs_it.first(); std::string_view lhs_substr = lhs_it.first();
@ -399,12 +399,12 @@ struct RTLIL::IdString
} }
} }
inline bool operator<(const IdString &rhs) const { inline bool operator<(IdString rhs) const {
return index_ < rhs.index_; return index_ < rhs.index_;
} }
inline bool operator==(const IdString &rhs) const { return index_ == rhs.index_; } inline bool operator==(IdString rhs) const { return index_ == rhs.index_; }
inline bool operator!=(const IdString &rhs) const { return index_ != rhs.index_; } inline bool operator!=(IdString rhs) const { return index_ != rhs.index_; }
// The methods below are just convenience functions for better compatibility with std::string. // The methods below are just convenience functions for better compatibility with std::string.
@ -528,7 +528,7 @@ struct RTLIL::IdString
return (... || in(args)); return (... || in(args));
} }
bool in(const IdString &rhs) const { return *this == rhs; } bool in(IdString rhs) const { return *this == rhs; }
bool in(const char *rhs) const { return *this == rhs; } bool in(const char *rhs) const { return *this == rhs; }
bool in(const std::string &rhs) const { return *this == rhs; } bool in(const std::string &rhs) const { return *this == rhs; }
inline bool in(const pool<IdString> &rhs) const; inline bool in(const pool<IdString> &rhs) const;
@ -646,13 +646,13 @@ private:
namespace hashlib { namespace hashlib {
template <> template <>
struct hash_ops<RTLIL::IdString> { struct hash_ops<RTLIL::IdString> {
static inline bool cmp(const RTLIL::IdString &a, const RTLIL::IdString &b) { static inline bool cmp(RTLIL::IdString a, RTLIL::IdString b) {
return a == b; return a == b;
} }
[[nodiscard]] static inline Hasher hash(const RTLIL::IdString &id) { [[nodiscard]] static inline Hasher hash(RTLIL::IdString id) {
return id.hash_top(); return id.hash_top();
} }
[[nodiscard]] static inline Hasher hash_into(const RTLIL::IdString &id, Hasher h) { [[nodiscard]] static inline Hasher hash_into(RTLIL::IdString id, Hasher h) {
return id.hash_into(h); return id.hash_into(h);
} }
}; };
@ -759,11 +759,11 @@ namespace RTLIL {
return str.substr(1); return str.substr(1);
} }
static inline std::string unescape_id(const RTLIL::IdString &str) { static inline std::string unescape_id(RTLIL::IdString str) {
return unescape_id(str.str()); return unescape_id(str.str());
} }
static inline const char *id2cstr(const RTLIL::IdString &str) { static inline const char *id2cstr(RTLIL::IdString str) {
return log_id(str); return log_id(str);
} }
@ -780,7 +780,7 @@ namespace RTLIL {
}; };
struct sort_by_id_str { struct sort_by_id_str {
bool operator()(const RTLIL::IdString &a, const RTLIL::IdString &b) const { bool operator()(RTLIL::IdString a, RTLIL::IdString b) const {
return a.lt_by_name(b); return a.lt_by_name(b);
} }
}; };
@ -1246,22 +1246,22 @@ struct RTLIL::AttrObject
{ {
dict<RTLIL::IdString, RTLIL::Const> attributes; dict<RTLIL::IdString, RTLIL::Const> attributes;
bool has_attribute(const RTLIL::IdString &id) const; bool has_attribute(RTLIL::IdString id) const;
void set_bool_attribute(const RTLIL::IdString &id, bool value=true); void set_bool_attribute(RTLIL::IdString id, bool value=true);
bool get_bool_attribute(const RTLIL::IdString &id) const; bool get_bool_attribute(RTLIL::IdString id) const;
[[deprecated("Use Module::get_blackbox_attribute() instead.")]] [[deprecated("Use Module::get_blackbox_attribute() instead.")]]
bool get_blackbox_attribute(bool ignore_wb=false) const { bool get_blackbox_attribute(bool ignore_wb=false) const {
return get_bool_attribute(ID::blackbox) || (!ignore_wb && get_bool_attribute(ID::whitebox)); return get_bool_attribute(ID::blackbox) || (!ignore_wb && get_bool_attribute(ID::whitebox));
} }
void set_string_attribute(const RTLIL::IdString& id, string value); void set_string_attribute(RTLIL::IdString id, string value);
string get_string_attribute(const RTLIL::IdString &id) const; string get_string_attribute(RTLIL::IdString id) const;
void set_strpool_attribute(const RTLIL::IdString& id, const pool<string> &data); void set_strpool_attribute(RTLIL::IdString id, const pool<string> &data);
void add_strpool_attribute(const RTLIL::IdString& id, const pool<string> &data); void add_strpool_attribute(RTLIL::IdString id, const pool<string> &data);
pool<string> get_strpool_attribute(const RTLIL::IdString &id) const; pool<string> get_strpool_attribute(RTLIL::IdString id) const;
void set_src_attribute(const std::string &src) { void set_src_attribute(const std::string &src) {
set_string_attribute(ID::src, src); set_string_attribute(ID::src, src);
@ -1273,8 +1273,8 @@ struct RTLIL::AttrObject
void set_hdlname_attribute(const vector<string> &hierarchy); void set_hdlname_attribute(const vector<string> &hierarchy);
vector<string> get_hdlname_attribute() const; vector<string> get_hdlname_attribute() const;
void set_intvec_attribute(const RTLIL::IdString& id, const vector<int> &data); void set_intvec_attribute(RTLIL::IdString id, const vector<int> &data);
vector<int> get_intvec_attribute(const RTLIL::IdString &id) const; vector<int> get_intvec_attribute(RTLIL::IdString id) const;
}; };
struct RTLIL::NamedObject : public RTLIL::AttrObject struct RTLIL::NamedObject : public RTLIL::AttrObject
@ -1781,18 +1781,18 @@ struct RTLIL::Selection
// checks if the given module exists in the current design and is a // checks if the given module exists in the current design and is a
// boxed module, warning the user if the current design is not set // boxed module, warning the user if the current design is not set
bool boxed_module(const RTLIL::IdString &mod_name) const; bool boxed_module(RTLIL::IdString mod_name) const;
// checks if the given module is included in this selection // checks if the given module is included in this selection
bool selected_module(const RTLIL::IdString &mod_name) const; bool selected_module(RTLIL::IdString mod_name) const;
// checks if the given module is wholly included in this selection, // checks if the given module is wholly included in this selection,
// i.e. not partially selected // i.e. not partially selected
bool selected_whole_module(const RTLIL::IdString &mod_name) const; bool selected_whole_module(RTLIL::IdString mod_name) const;
// checks if the given member from the given module is included in this // checks if the given member from the given module is included in this
// selection // selection
bool selected_member(const RTLIL::IdString &mod_name, const RTLIL::IdString &memb_name) const; bool selected_member(RTLIL::IdString mod_name, RTLIL::IdString memb_name) const;
// optimizes this selection for the given design by: // optimizes this selection for the given design by:
// - removing non-existent modules and members, any boxed modules and // - removing non-existent modules and members, any boxed modules and
@ -1862,7 +1862,7 @@ struct RTLIL::Monitor
virtual ~Monitor() { } virtual ~Monitor() { }
virtual void notify_module_add(RTLIL::Module*) { } virtual void notify_module_add(RTLIL::Module*) { }
virtual void notify_module_del(RTLIL::Module*) { } virtual void notify_module_del(RTLIL::Module*) { }
virtual void notify_connect(RTLIL::Cell*, const RTLIL::IdString&, const RTLIL::SigSpec&, const RTLIL::SigSpec&) { } virtual void notify_connect(RTLIL::Cell*, RTLIL::IdString, const RTLIL::SigSpec&, const RTLIL::SigSpec&) { }
virtual void notify_connect(RTLIL::Module*, const RTLIL::SigSig&) { } virtual void notify_connect(RTLIL::Module*, const RTLIL::SigSig&) { }
virtual void notify_connect(RTLIL::Module*, const std::vector<RTLIL::SigSig>&) { } virtual void notify_connect(RTLIL::Module*, const std::vector<RTLIL::SigSig>&) { }
virtual void notify_blackout(RTLIL::Module*) { } virtual void notify_blackout(RTLIL::Module*) { }
@ -1897,11 +1897,11 @@ struct RTLIL::Design
~Design(); ~Design();
RTLIL::ObjRange<RTLIL::Module*> modules(); RTLIL::ObjRange<RTLIL::Module*> modules();
RTLIL::Module *module(const RTLIL::IdString &name); RTLIL::Module *module(RTLIL::IdString name);
const RTLIL::Module *module(const RTLIL::IdString &name) const; const RTLIL::Module *module(RTLIL::IdString name) const;
RTLIL::Module *top_module() const; RTLIL::Module *top_module() const;
bool has(const RTLIL::IdString &id) const { bool has(RTLIL::IdString id) const {
return modules_.count(id) != 0; return modules_.count(id) != 0;
} }
@ -1928,15 +1928,15 @@ struct RTLIL::Design
void optimize(); void optimize();
// checks if the given module is included in the current selection // checks if the given module is included in the current selection
bool selected_module(const RTLIL::IdString &mod_name) const; bool selected_module(RTLIL::IdString mod_name) const;
// checks if the given module is wholly included in the current // checks if the given module is wholly included in the current
// selection, i.e. not partially selected // selection, i.e. not partially selected
bool selected_whole_module(const RTLIL::IdString &mod_name) const; bool selected_whole_module(RTLIL::IdString mod_name) const;
// checks if the given member from the given module is included in the // checks if the given member from the given module is included in the
// current selection // current selection
bool selected_member(const RTLIL::IdString &mod_name, const RTLIL::IdString &memb_name) const; bool selected_member(RTLIL::IdString mod_name, RTLIL::IdString memb_name) const;
// checks if the given module is included in the current selection // checks if the given module is included in the current selection
bool selected_module(RTLIL::Module *mod) const; bool selected_module(RTLIL::Module *mod) const;
@ -2068,7 +2068,7 @@ public:
virtual ~Module(); virtual ~Module();
virtual RTLIL::IdString derive(RTLIL::Design *design, const dict<RTLIL::IdString, RTLIL::Const> &parameters, bool mayfail = false); virtual RTLIL::IdString derive(RTLIL::Design *design, const dict<RTLIL::IdString, RTLIL::Const> &parameters, bool mayfail = false);
virtual RTLIL::IdString derive(RTLIL::Design *design, const dict<RTLIL::IdString, RTLIL::Const> &parameters, const dict<RTLIL::IdString, RTLIL::Module*> &interfaces, const dict<RTLIL::IdString, RTLIL::IdString> &modports, bool mayfail = false); virtual RTLIL::IdString derive(RTLIL::Design *design, const dict<RTLIL::IdString, RTLIL::Const> &parameters, const dict<RTLIL::IdString, RTLIL::Module*> &interfaces, const dict<RTLIL::IdString, RTLIL::IdString> &modports, bool mayfail = false);
virtual size_t count_id(const RTLIL::IdString& id); virtual size_t count_id(RTLIL::IdString id);
virtual void expand_interfaces(RTLIL::Design *design, const dict<RTLIL::IdString, RTLIL::Module *> &local_interfaces); virtual void expand_interfaces(RTLIL::Design *design, const dict<RTLIL::IdString, RTLIL::Module *> &local_interfaces);
virtual bool reprocess_if_necessary(RTLIL::Design *design); virtual bool reprocess_if_necessary(RTLIL::Design *design);
@ -2120,20 +2120,20 @@ public:
return design->selected_member(name, member->name); return design->selected_member(name, member->name);
} }
RTLIL::Wire* wire(const RTLIL::IdString &id) { RTLIL::Wire* wire(RTLIL::IdString id) {
auto it = wires_.find(id); auto it = wires_.find(id);
return it == wires_.end() ? nullptr : it->second; return it == wires_.end() ? nullptr : it->second;
} }
RTLIL::Cell* cell(const RTLIL::IdString &id) { RTLIL::Cell* cell(RTLIL::IdString id) {
auto it = cells_.find(id); auto it = cells_.find(id);
return it == cells_.end() ? nullptr : it->second; return it == cells_.end() ? nullptr : it->second;
} }
const RTLIL::Wire* wire(const RTLIL::IdString &id) const{ const RTLIL::Wire* wire(RTLIL::IdString id) const{
auto it = wires_.find(id); auto it = wires_.find(id);
return it == wires_.end() ? nullptr : it->second; return it == wires_.end() ? nullptr : it->second;
} }
const RTLIL::Cell* cell(const RTLIL::IdString &id) const { const RTLIL::Cell* cell(RTLIL::IdString id) const {
auto it = cells_.find(id); auto it = cells_.find(id);
return it == cells_.end() ? nullptr : it->second; return it == cells_.end() ? nullptr : it->second;
} }
@ -2490,23 +2490,23 @@ public:
dict<RTLIL::IdString, RTLIL::Const> parameters; dict<RTLIL::IdString, RTLIL::Const> parameters;
// access cell ports // access cell ports
bool hasPort(const RTLIL::IdString &portname) const; bool hasPort(RTLIL::IdString portname) const;
void unsetPort(const RTLIL::IdString &portname); void unsetPort(RTLIL::IdString portname);
void setPort(const RTLIL::IdString &portname, RTLIL::SigSpec signal); void setPort(RTLIL::IdString portname, RTLIL::SigSpec signal);
const RTLIL::SigSpec &getPort(const RTLIL::IdString &portname) const; const RTLIL::SigSpec &getPort(RTLIL::IdString portname) const;
const dict<RTLIL::IdString, RTLIL::SigSpec> &connections() const; const dict<RTLIL::IdString, RTLIL::SigSpec> &connections() const;
// information about cell ports // information about cell ports
bool known() const; bool known() const;
bool input(const RTLIL::IdString &portname) const; bool input(RTLIL::IdString portname) const;
bool output(const RTLIL::IdString &portname) const; bool output(RTLIL::IdString portname) const;
PortDir port_dir(const RTLIL::IdString &portname) const; PortDir port_dir(RTLIL::IdString portname) const;
// access cell parameters // access cell parameters
bool hasParam(const RTLIL::IdString &paramname) const; bool hasParam(RTLIL::IdString paramname) const;
void unsetParam(const RTLIL::IdString &paramname); void unsetParam(RTLIL::IdString paramname);
void setParam(const RTLIL::IdString &paramname, RTLIL::Const value); void setParam(RTLIL::IdString paramname, RTLIL::Const value);
const RTLIL::Const &getParam(const RTLIL::IdString &paramname) const; const RTLIL::Const &getParam(RTLIL::IdString paramname) const;
void sort(); void sort();
void check(); void check();

View file

@ -526,7 +526,7 @@ void RTLIL::Module::bufNormalize()
pending_deleted_cells.clear(); pending_deleted_cells.clear();
} }
void RTLIL::Cell::unsetPort(const RTLIL::IdString& portname) void RTLIL::Cell::unsetPort(RTLIL::IdString portname)
{ {
RTLIL::SigSpec signal; RTLIL::SigSpec signal;
auto conn_it = connections_.find(portname); auto conn_it = connections_.find(portname);
@ -586,7 +586,7 @@ void RTLIL::Cell::unsetPort(const RTLIL::IdString& portname)
} }
} }
void RTLIL::Cell::setPort(const RTLIL::IdString& portname, RTLIL::SigSpec signal) void RTLIL::Cell::setPort(RTLIL::IdString portname, RTLIL::SigSpec signal)
{ {
auto r = connections_.insert(portname); auto r = connections_.insert(portname);
auto conn_it = r.first; auto conn_it = r.first;

View file

@ -97,13 +97,13 @@ static const char *attr_prefix(ScopeinfoAttrs attrs)
} }
} }
bool scopeinfo_has_attribute(const RTLIL::Cell *scopeinfo, ScopeinfoAttrs attrs, const RTLIL::IdString &id) bool scopeinfo_has_attribute(const RTLIL::Cell *scopeinfo, ScopeinfoAttrs attrs, RTLIL::IdString id)
{ {
log_assert(scopeinfo->type == ID($scopeinfo)); log_assert(scopeinfo->type == ID($scopeinfo));
return scopeinfo->has_attribute(attr_prefix(attrs) + RTLIL::unescape_id(id)); return scopeinfo->has_attribute(attr_prefix(attrs) + RTLIL::unescape_id(id));
} }
RTLIL::Const scopeinfo_get_attribute(const RTLIL::Cell *scopeinfo, ScopeinfoAttrs attrs, const RTLIL::IdString &id) RTLIL::Const scopeinfo_get_attribute(const RTLIL::Cell *scopeinfo, ScopeinfoAttrs attrs, RTLIL::IdString id)
{ {
log_assert(scopeinfo->type == ID($scopeinfo)); log_assert(scopeinfo->type == ID($scopeinfo));
auto found = scopeinfo->attributes.find(attr_prefix(attrs) + RTLIL::unescape_id(id)); auto found = scopeinfo->attributes.find(attr_prefix(attrs) + RTLIL::unescape_id(id));

View file

@ -433,10 +433,10 @@ enum class ScopeinfoAttrs {
}; };
// Check whether the flattened module or flattened cell corresponding to a $scopeinfo cell had a specific attribute. // Check whether the flattened module or flattened cell corresponding to a $scopeinfo cell had a specific attribute.
bool scopeinfo_has_attribute(const RTLIL::Cell *scopeinfo, ScopeinfoAttrs attrs, const RTLIL::IdString &id); bool scopeinfo_has_attribute(const RTLIL::Cell *scopeinfo, ScopeinfoAttrs attrs, RTLIL::IdString id);
// Get a specific attribute from the flattened module or flattened cell corresponding to a $scopeinfo cell. // Get a specific attribute from the flattened module or flattened cell corresponding to a $scopeinfo cell.
RTLIL::Const scopeinfo_get_attribute(const RTLIL::Cell *scopeinfo, ScopeinfoAttrs attrs, const RTLIL::IdString &id); RTLIL::Const scopeinfo_get_attribute(const RTLIL::Cell *scopeinfo, ScopeinfoAttrs attrs, RTLIL::IdString id);
// Get all attribute from the flattened module or flattened cell corresponding to a $scopeinfo cell. // Get all attribute from the flattened module or flattened cell corresponding to a $scopeinfo cell.
dict<RTLIL::IdString, RTLIL::Const> scopeinfo_attributes(const RTLIL::Cell *scopeinfo, ScopeinfoAttrs attrs); dict<RTLIL::IdString, RTLIL::Const> scopeinfo_attributes(const RTLIL::Cell *scopeinfo, ScopeinfoAttrs attrs);

View file

@ -45,7 +45,7 @@ struct PrintAttrsPass : public Pass {
return stringf("%*s", indent, ""); return stringf("%*s", indent, "");
} }
static void log_const(const RTLIL::IdString &s, const RTLIL::Const &x, const unsigned int indent) { static void log_const(RTLIL::IdString s, const RTLIL::Const &x, const unsigned int indent) {
if (x.flags & RTLIL::CONST_FLAG_STRING) if (x.flags & RTLIL::CONST_FLAG_STRING)
log("%s(* %s=\"%s\" *)\n", get_indent_str(indent), log_id(s), x.decode_string()); log("%s(* %s=\"%s\" *)\n", get_indent_str(indent), log_id(s), x.decode_string());
else if (x.flags == RTLIL::CONST_FLAG_NONE || x.flags == RTLIL::CONST_FLAG_SIGNED) else if (x.flags == RTLIL::CONST_FLAG_NONE || x.flags == RTLIL::CONST_FLAG_SIGNED)

View file

@ -36,7 +36,7 @@ struct TraceMonitor : public RTLIL::Monitor
log("#TRACE# Module delete: %s\n", log_id(module)); log("#TRACE# Module delete: %s\n", log_id(module));
} }
void notify_connect(RTLIL::Cell *cell, const RTLIL::IdString &port, const RTLIL::SigSpec &old_sig, const RTLIL::SigSpec &sig) override void notify_connect(RTLIL::Cell *cell, RTLIL::IdString port, const RTLIL::SigSpec &old_sig, const RTLIL::SigSpec &sig) override
{ {
log("#TRACE# Cell connect: %s.%s.%s = %s (was: %s)\n", log_id(cell->module), log_id(cell), log_id(port), log_signal(sig), log_signal(old_sig)); log("#TRACE# Cell connect: %s.%s.%s = %s (was: %s)\n", log_id(cell->module), log_id(cell), log_id(port), log_signal(sig), log_signal(old_sig));
} }

View file

@ -415,7 +415,7 @@ struct BufnormPass : public Pass {
return mapped_bits.at(bit); return mapped_bits.at(bit);
}; };
auto make_buffer_f = [&](const IdString &type, const SigSpec &src, const SigSpec &dst) auto make_buffer_f = [&](IdString type, const SigSpec &src, const SigSpec &dst)
{ {
auto it = old_buffers.find(pair<IdString, SigSpec>(type, dst)); auto it = old_buffers.find(pair<IdString, SigSpec>(type, dst));

View file

@ -27,7 +27,7 @@
USING_YOSYS_NAMESPACE USING_YOSYS_NAMESPACE
YOSYS_NAMESPACE_BEGIN YOSYS_NAMESPACE_BEGIN
static void transfer_attr (Cell* to, const Cell* from, const IdString& attr) { static void transfer_attr (Cell* to, const Cell* from, IdString attr) {
if (from->has_attribute(attr)) if (from->has_attribute(attr))
to->attributes[attr] = from->attributes.at(attr); to->attributes[attr] = from->attributes.at(attr);
} }

View file

@ -112,7 +112,7 @@ namespace pyosys {
void notify_connect( void notify_connect(
RTLIL::Cell *cell, RTLIL::Cell *cell,
const RTLIL::IdString &port, RTLIL::IdString port,
const RTLIL::SigSpec &old_sig, const RTLIL::SigSpec &old_sig,
const RTLIL::SigSpec &sig const RTLIL::SigSpec &sig
) override { ) override {
@ -228,7 +228,7 @@ namespace pyosys {
"notify_connect", "notify_connect",
py::overload_cast< py::overload_cast<
RTLIL::Cell *, RTLIL::Cell *,
const RTLIL::IdString &, RTLIL::IdString,
const RTLIL::SigSpec &, const RTLIL::SigSpec &,
const RTLIL::SigSpec & const RTLIL::SigSpec &
>(&RTLIL::Monitor::notify_connect) >(&RTLIL::Monitor::notify_connect)