mirror of
https://github.com/YosysHQ/yosys
synced 2025-04-23 09:05:32 +00:00
Merge pull request #1845 from YosysHQ/eddie/kernel_speedup
kernel: speedup by using more pass-by-const-ref
This commit is contained in:
commit
37f42fe102
20 changed files with 538 additions and 560 deletions
|
@ -35,7 +35,7 @@ struct TraceMonitor : public RTLIL::Monitor
|
|||
log("#TRACE# Module delete: %s\n", log_id(module));
|
||||
}
|
||||
|
||||
void notify_connect(RTLIL::Cell *cell, const RTLIL::IdString &port, const RTLIL::SigSpec &old_sig, RTLIL::SigSpec &sig) YS_OVERRIDE
|
||||
void notify_connect(RTLIL::Cell *cell, const RTLIL::IdString &port, const RTLIL::SigSpec &old_sig, const RTLIL::SigSpec &sig) YS_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));
|
||||
}
|
||||
|
|
|
@ -120,8 +120,8 @@ struct MemoryShareWorker
|
|||
for (auto &cond : conditions) {
|
||||
RTLIL::SigSpec sig1, sig2;
|
||||
for (auto &it : cond) {
|
||||
sig1.append_bit(it.first);
|
||||
sig2.append_bit(it.second ? RTLIL::State::S1 : RTLIL::State::S0);
|
||||
sig1.append(it.first);
|
||||
sig2.append(it.second ? RTLIL::State::S1 : RTLIL::State::S0);
|
||||
}
|
||||
terms.append(module->Ne(NEW_ID, sig1, sig2));
|
||||
created_conditions++;
|
||||
|
@ -284,8 +284,8 @@ struct MemoryShareWorker
|
|||
std::pair<RTLIL::SigBit, RTLIL::SigBit> key(v_bits[i], v_mask_bits[i]);
|
||||
if (groups.count(key) == 0) {
|
||||
groups[key].first = grouped_bits.size();
|
||||
grouped_bits.append_bit(v_bits[i]);
|
||||
grouped_mask_bits.append_bit(v_mask_bits[i]);
|
||||
grouped_bits.append(v_bits[i]);
|
||||
grouped_mask_bits.append(v_mask_bits[i]);
|
||||
}
|
||||
groups[key].second.push_back(i);
|
||||
}
|
||||
|
@ -295,7 +295,7 @@ struct MemoryShareWorker
|
|||
|
||||
for (int i = 0; i < bits.size(); i++) {
|
||||
std::pair<RTLIL::SigBit, RTLIL::SigBit> key(v_bits[i], v_mask_bits[i]);
|
||||
result.append_bit(grouped_result.at(groups.at(key).first));
|
||||
result.append(grouped_result.at(groups.at(key).first));
|
||||
}
|
||||
|
||||
return result;
|
||||
|
@ -326,7 +326,7 @@ struct MemoryShareWorker
|
|||
|
||||
for (int i = 0; i < int(v_old_en.size()); i++) {
|
||||
std::pair<RTLIL::SigBit, RTLIL::SigBit> key(v_old_en[i], v_next_en[i]);
|
||||
new_merged_en.append_bit(grouped_new_en.at(groups.at(key)));
|
||||
new_merged_en.append(grouped_new_en.at(groups.at(key)));
|
||||
}
|
||||
|
||||
// Create the new merged_data signal.
|
||||
|
@ -635,8 +635,8 @@ struct MemoryShareWorker
|
|||
for (int j = 0; j < int(this_en.size()); j++) {
|
||||
std::pair<RTLIL::SigBit, RTLIL::SigBit> key(last_en[j], this_en[j]);
|
||||
if (!groups_en.count(key)) {
|
||||
grouped_last_en.append_bit(last_en[j]);
|
||||
grouped_this_en.append_bit(this_en[j]);
|
||||
grouped_last_en.append(last_en[j]);
|
||||
grouped_this_en.append(this_en[j]);
|
||||
groups_en[key] = grouped_en->width;
|
||||
grouped_en->width++;
|
||||
}
|
||||
|
|
|
@ -203,8 +203,8 @@ bool compare_signals(RTLIL::SigBit &s1, RTLIL::SigBit &s2, SigPool ®s, SigPoo
|
|||
return !(w2->port_input && w2->port_output);
|
||||
|
||||
if (w1->name[0] == '\\' && w2->name[0] == '\\') {
|
||||
if (regs.check_any(s1) != regs.check_any(s2))
|
||||
return regs.check_any(s2);
|
||||
if (regs.check(s1) != regs.check(s2))
|
||||
return regs.check(s2);
|
||||
if (direct_wires.count(w1) != direct_wires.count(w2))
|
||||
return direct_wires.count(w2) != 0;
|
||||
if (conns.check_any(s1) != conns.check_any(s2))
|
||||
|
@ -358,8 +358,8 @@ bool rmunused_module_signals(RTLIL::Module *module, bool purge_mode, bool verbos
|
|||
s2[i] = initval[i];
|
||||
initval[i] = State::Sx;
|
||||
}
|
||||
new_conn.first.append_bit(s1[i]);
|
||||
new_conn.second.append_bit(s2[i]);
|
||||
new_conn.first.append(s1[i]);
|
||||
new_conn.second.append(s2[i]);
|
||||
}
|
||||
if (new_conn.first.size() > 0) {
|
||||
if (initval.is_fully_undef())
|
||||
|
|
|
@ -192,11 +192,11 @@ bool group_cell_inputs(RTLIL::Module *module, RTLIL::Cell *cell, bool commutativ
|
|||
|
||||
for (auto &it : grouped_bits[i]) {
|
||||
for (auto &bit : it.second) {
|
||||
new_conn.first.append_bit(bit);
|
||||
new_conn.second.append_bit(RTLIL::SigBit(new_y, new_a.size()));
|
||||
new_conn.first.append(bit);
|
||||
new_conn.second.append(RTLIL::SigBit(new_y, new_a.size()));
|
||||
}
|
||||
new_a.append_bit(it.first.first);
|
||||
new_b.append_bit(it.first.second);
|
||||
new_a.append(it.first.first);
|
||||
new_b.append(it.first.second);
|
||||
}
|
||||
|
||||
if (cell->type.in(ID($and), ID($or)) && i == GRP_CONST_A) {
|
||||
|
|
|
@ -192,13 +192,13 @@ struct OptReduceWorker
|
|||
|
||||
if (all_tuple_bits_same)
|
||||
{
|
||||
old_sig_conn.first.append_bit(sig_y.at(i));
|
||||
old_sig_conn.second.append_bit(sig_a.at(i));
|
||||
old_sig_conn.first.append(sig_y.at(i));
|
||||
old_sig_conn.second.append(sig_a.at(i));
|
||||
}
|
||||
else if (consolidated_in_tuples_map.count(in_tuple))
|
||||
{
|
||||
old_sig_conn.first.append_bit(sig_y.at(i));
|
||||
old_sig_conn.second.append_bit(consolidated_in_tuples_map.at(in_tuple));
|
||||
old_sig_conn.first.append(sig_y.at(i));
|
||||
old_sig_conn.second.append(consolidated_in_tuples_map.at(in_tuple));
|
||||
}
|
||||
else
|
||||
{
|
||||
|
|
|
@ -331,7 +331,7 @@ struct Pmux2ShiftxPass : public Pass {
|
|||
pair<SigSpec, Const> entry;
|
||||
|
||||
for (auto it : bits) {
|
||||
entry.first.append_bit(it.first);
|
||||
entry.first.append(it.first);
|
||||
entry.second.bits.push_back(it.second);
|
||||
}
|
||||
|
||||
|
@ -352,7 +352,7 @@ struct Pmux2ShiftxPass : public Pass {
|
|||
pair<SigSpec, Const> entry;
|
||||
|
||||
for (auto it : bits) {
|
||||
entry.first.append_bit(it.first);
|
||||
entry.first.append(it.first);
|
||||
entry.second.bits.push_back(it.second);
|
||||
}
|
||||
|
||||
|
|
|
@ -516,7 +516,7 @@ struct ShareWorker
|
|||
if (unsigned_cell->getPort(ID::A).to_sigbit_vector().back() != RTLIL::State::S0) {
|
||||
unsigned_cell->parameters.at(ID(A_WIDTH)) = unsigned_cell->parameters.at(ID(A_WIDTH)).as_int() + 1;
|
||||
RTLIL::SigSpec new_a = unsigned_cell->getPort(ID::A);
|
||||
new_a.append_bit(RTLIL::State::S0);
|
||||
new_a.append(RTLIL::State::S0);
|
||||
unsigned_cell->setPort(ID::A, new_a);
|
||||
}
|
||||
unsigned_cell->parameters.at(ID(A_SIGNED)) = true;
|
||||
|
@ -588,7 +588,7 @@ struct ShareWorker
|
|||
if (unsigned_cell->getPort(ID::A).to_sigbit_vector().back() != RTLIL::State::S0) {
|
||||
unsigned_cell->parameters.at(ID(A_WIDTH)) = unsigned_cell->parameters.at(ID(A_WIDTH)).as_int() + 1;
|
||||
RTLIL::SigSpec new_a = unsigned_cell->getPort(ID::A);
|
||||
new_a.append_bit(RTLIL::State::S0);
|
||||
new_a.append(RTLIL::State::S0);
|
||||
unsigned_cell->setPort(ID::A, new_a);
|
||||
}
|
||||
unsigned_cell->parameters.at(ID(A_SIGNED)) = true;
|
||||
|
@ -601,7 +601,7 @@ struct ShareWorker
|
|||
if (unsigned_cell->getPort(ID::B).to_sigbit_vector().back() != RTLIL::State::S0) {
|
||||
unsigned_cell->parameters.at(ID(B_WIDTH)) = unsigned_cell->parameters.at(ID(B_WIDTH)).as_int() + 1;
|
||||
RTLIL::SigSpec new_b = unsigned_cell->getPort(ID::B);
|
||||
new_b.append_bit(RTLIL::State::S0);
|
||||
new_b.append(RTLIL::State::S0);
|
||||
unsigned_cell->setPort(ID::B, new_b);
|
||||
}
|
||||
unsigned_cell->parameters.at(ID(B_SIGNED)) = true;
|
||||
|
@ -790,7 +790,7 @@ struct ShareWorker
|
|||
p.second.bits.clear();
|
||||
|
||||
for (auto &it : p_bits) {
|
||||
p.first.append_bit(it.first);
|
||||
p.first.append(it.first);
|
||||
p.second.bits.push_back(it.second);
|
||||
}
|
||||
|
||||
|
@ -906,14 +906,14 @@ struct ShareWorker
|
|||
if (used_in_a)
|
||||
for (auto p : c_patterns) {
|
||||
for (int i = 0; i < GetSize(sig_s); i++)
|
||||
p.first.append_bit(sig_s[i]), p.second.bits.push_back(RTLIL::State::S0);
|
||||
p.first.append(sig_s[i]), p.second.bits.push_back(RTLIL::State::S0);
|
||||
if (sort_check_activation_pattern(p))
|
||||
activation_patterns_cache[cell].insert(p);
|
||||
}
|
||||
|
||||
for (int idx : used_in_b_parts)
|
||||
for (auto p : c_patterns) {
|
||||
p.first.append_bit(sig_s[idx]), p.second.bits.push_back(RTLIL::State::S1);
|
||||
p.first.append(sig_s[idx]), p.second.bits.push_back(RTLIL::State::S1);
|
||||
if (sort_check_activation_pattern(p))
|
||||
activation_patterns_cache[cell].insert(p);
|
||||
}
|
||||
|
@ -948,7 +948,7 @@ struct ShareWorker
|
|||
|
||||
RTLIL::SigSpec signal;
|
||||
for (auto &bit : all_bits)
|
||||
signal.append_bit(bit);
|
||||
signal.append(bit);
|
||||
|
||||
return signal;
|
||||
}
|
||||
|
@ -963,7 +963,7 @@ struct ShareWorker
|
|||
|
||||
for (int i = 0; i < GetSize(p_first); i++)
|
||||
if (filter_bits.count(p_first[i]) == 0) {
|
||||
new_p.first.append_bit(p_first[i]);
|
||||
new_p.first.append(p_first[i]);
|
||||
new_p.second.bits.push_back(p.second.bits.at(i));
|
||||
}
|
||||
|
||||
|
|
|
@ -98,7 +98,7 @@ struct WreduceWorker
|
|||
|
||||
SigSpec sig_removed;
|
||||
for (int i = GetSize(bits_removed)-1; i >= 0; i--)
|
||||
sig_removed.append_bit(bits_removed[i]);
|
||||
sig_removed.append(bits_removed[i]);
|
||||
|
||||
if (GetSize(bits_removed) == GetSize(sig_y)) {
|
||||
log("Removed cell %s.%s (%s).\n", log_id(module), log_id(cell), log_id(cell->type));
|
||||
|
|
|
@ -93,7 +93,7 @@ struct PruneWorker
|
|||
for (int i = 0; i < GetSize(lhs); i++) {
|
||||
RTLIL::SigBit lhs_bit = lhs[i];
|
||||
if (lhs_bit.wire && !assigned[lhs_bit]) {
|
||||
conn.first.append_bit(lhs_bit);
|
||||
conn.first.append(lhs_bit);
|
||||
conn.second.append(rhs.extract(i));
|
||||
}
|
||||
}
|
||||
|
|
|
@ -117,11 +117,11 @@ struct Clk2fflogicPass : public Pass {
|
|||
SigSpec clock_edge_pattern;
|
||||
|
||||
if (clkpol) {
|
||||
clock_edge_pattern.append_bit(State::S0);
|
||||
clock_edge_pattern.append_bit(State::S1);
|
||||
clock_edge_pattern.append(State::S0);
|
||||
clock_edge_pattern.append(State::S1);
|
||||
} else {
|
||||
clock_edge_pattern.append_bit(State::S1);
|
||||
clock_edge_pattern.append_bit(State::S0);
|
||||
clock_edge_pattern.append(State::S1);
|
||||
clock_edge_pattern.append(State::S0);
|
||||
}
|
||||
|
||||
SigSpec clock_edge = module->Eqx(NEW_ID, {clk, SigSpec(past_clk)}, clock_edge_pattern);
|
||||
|
@ -257,11 +257,11 @@ struct Clk2fflogicPass : public Pass {
|
|||
SigSpec clock_edge_pattern;
|
||||
|
||||
if (clkpol) {
|
||||
clock_edge_pattern.append_bit(State::S0);
|
||||
clock_edge_pattern.append_bit(State::S1);
|
||||
clock_edge_pattern.append(State::S0);
|
||||
clock_edge_pattern.append(State::S1);
|
||||
} else {
|
||||
clock_edge_pattern.append_bit(State::S1);
|
||||
clock_edge_pattern.append_bit(State::S0);
|
||||
clock_edge_pattern.append(State::S1);
|
||||
clock_edge_pattern.append(State::S0);
|
||||
}
|
||||
|
||||
SigSpec clock_edge = module->Eqx(NEW_ID, {clk, SigSpec(past_clk)}, clock_edge_pattern);
|
||||
|
|
|
@ -286,7 +286,7 @@ struct ExtractReducePass : public Pass
|
|||
SigSpec input;
|
||||
for (auto b : input_pool)
|
||||
if (input_pool_intermed.count(b) == 0)
|
||||
input.append_bit(b);
|
||||
input.append(b);
|
||||
|
||||
SigBit output = sigmap(head_cell->getPort(ID::Y)[0]);
|
||||
|
||||
|
|
|
@ -1405,7 +1405,7 @@ struct FlowmapWorker
|
|||
|
||||
RTLIL::SigSpec lut_a, lut_y = node;
|
||||
for (auto input_node : input_nodes)
|
||||
lut_a.append_bit(input_node);
|
||||
lut_a.append(input_node);
|
||||
lut_a.append(RTLIL::Const(State::Sx, minlut - input_nodes.size()));
|
||||
|
||||
RTLIL::Cell *lut = module->addLut(NEW_ID, lut_a, lut_y, lut_table);
|
||||
|
|
|
@ -906,8 +906,8 @@ struct TechmapWorker
|
|||
|
||||
RTLIL::SigSig port_conn;
|
||||
for (auto &it : port_connmap) {
|
||||
port_conn.first.append_bit(it.first);
|
||||
port_conn.second.append_bit(it.second);
|
||||
port_conn.first.append(it.first);
|
||||
port_conn.second.append(it.second);
|
||||
}
|
||||
tpl->connect(port_conn);
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue