Pass some more args by reference in select.cc

Before this patch, the code passed around std::string objects by
value. It's probably not a hot-spot, but it can't hurt to avoid the
copying.

Removing the copy and clean-up code means the resulting code is ~6.1kb
smaller when compiled with GCC 9.3 and standard settings.
This commit is contained in:
Rupert Swarbrick 2020-05-26 11:41:32 +01:00
parent 061d1f0c07
commit d681c9df85
2 changed files with 8 additions and 8 deletions

View File

@ -125,7 +125,7 @@ struct Backend : Pass
}; };
// implemented in passes/cmds/select.cc // implemented in passes/cmds/select.cc
extern void handle_extra_select_args(Pass *pass, std::vector<std::string> args, size_t argidx, size_t args_size, RTLIL::Design *design); extern void handle_extra_select_args(Pass *pass, const std::vector<std::string> &args, size_t argidx, size_t args_size, RTLIL::Design *design);
extern RTLIL::Selection eval_select_args(const vector<string> &args, RTLIL::Design *design); extern RTLIL::Selection eval_select_args(const vector<string> &args, RTLIL::Design *design);
extern void eval_select_op(vector<RTLIL::Selection> &work, const string &op, RTLIL::Design *design); extern void eval_select_op(vector<RTLIL::Selection> &work, const string &op, RTLIL::Design *design);

View File

@ -54,7 +54,7 @@ static bool match_ids(RTLIL::IdString id, const std::string &pattern)
return false; return false;
} }
static bool match_attr_val(const RTLIL::Const &value, std::string pattern, char match_op) static bool match_attr_val(const RTLIL::Const &value, const std::string &pattern, char match_op)
{ {
if (match_op == 0) if (match_op == 0)
return true; return true;
@ -106,7 +106,7 @@ static bool match_attr_val(const RTLIL::Const &value, std::string pattern, char
log_abort(); log_abort();
} }
static bool match_attr(const dict<RTLIL::IdString, RTLIL::Const> &attributes, std::string name_pat, std::string value_pat, char match_op) static bool match_attr(const dict<RTLIL::IdString, RTLIL::Const> &attributes, const std::string &name_pat, const std::string &value_pat, char match_op)
{ {
if (name_pat.find('*') != std::string::npos || name_pat.find('?') != std::string::npos || name_pat.find('[') != std::string::npos) { if (name_pat.find('*') != std::string::npos || name_pat.find('?') != std::string::npos || name_pat.find('[') != std::string::npos) {
for (auto &it : attributes) { for (auto &it : attributes) {
@ -124,7 +124,7 @@ static bool match_attr(const dict<RTLIL::IdString, RTLIL::Const> &attributes, st
return false; return false;
} }
static bool match_attr(const dict<RTLIL::IdString, RTLIL::Const> &attributes, std::string match_expr) static bool match_attr(const dict<RTLIL::IdString, RTLIL::Const> &attributes, const std::string &match_expr)
{ {
size_t pos = match_expr.find_first_of("<!=>"); size_t pos = match_expr.find_first_of("<!=>");
@ -415,7 +415,7 @@ namespace {
}; };
} }
static int parse_comma_list(std::set<RTLIL::IdString> &tokens, std::string str, size_t pos, std::string stopchar) static int parse_comma_list(std::set<RTLIL::IdString> &tokens, const std::string &str, size_t pos, std::string stopchar)
{ {
stopchar += ','; stopchar += ',';
while (1) { while (1) {
@ -500,7 +500,7 @@ static int select_op_expand(RTLIL::Design *design, RTLIL::Selection &lhs, std::v
return sel_objects; return sel_objects;
} }
static void select_op_expand(RTLIL::Design *design, std::string arg, char mode, bool eval_only) static void select_op_expand(RTLIL::Design *design, const std::string &arg, char mode, bool eval_only)
{ {
int pos = (mode == 'x' ? 2 : 3) + (eval_only ? 1 : 0); int pos = (mode == 'x' ? 2 : 3) + (eval_only ? 1 : 0);
int levels = 1, rem_objects = -1; int levels = 1, rem_objects = -1;
@ -971,7 +971,7 @@ PRIVATE_NAMESPACE_END
YOSYS_NAMESPACE_BEGIN YOSYS_NAMESPACE_BEGIN
// used in kernel/register.cc and maybe other locations, extern decl. in register.h // used in kernel/register.cc and maybe other locations, extern decl. in register.h
void handle_extra_select_args(Pass *pass, vector<string> args, size_t argidx, size_t args_size, RTLIL::Design *design) void handle_extra_select_args(Pass *pass, const vector<string> &args, size_t argidx, size_t args_size, RTLIL::Design *design)
{ {
work_stack.clear(); work_stack.clear();
for (; argidx < args_size; argidx++) { for (; argidx < args_size; argidx++) {
@ -1675,7 +1675,7 @@ struct CdPass : public Pass {
} CdPass; } CdPass;
template<typename T> template<typename T>
static void log_matches(const char *title, Module *module, T list) static void log_matches(const char *title, Module *module, const T &list)
{ {
std::vector<IdString> matches; std::vector<IdString> matches;