aboutsummaryrefslogtreecommitdiffstats
path: root/passes/techmap
diff options
context:
space:
mode:
authorEddie Hung <eddie@fpgeh.com>2020-02-13 14:57:06 -0800
committerEddie Hung <eddie@fpgeh.com>2020-02-13 14:57:06 -0800
commit3d2a2e87992e1ecd3e724f379ce32044b7506aa3 (patch)
tree72b60cf3ec62a31b57c436b45465702e216a0024 /passes/techmap
parentebb11bcea4ab5d2aed90d640904bf490a3285fb8 (diff)
downloadyosys-3d2a2e87992e1ecd3e724f379ce32044b7506aa3.tar.gz
yosys-3d2a2e87992e1ecd3e724f379ce32044b7506aa3.tar.bz2
yosys-3d2a2e87992e1ecd3e724f379ce32044b7506aa3.zip
iopadmap: fixes as suggested by @mwkmwkmwk
Diffstat (limited to 'passes/techmap')
-rw-r--r--passes/techmap/iopadmap.cc30
1 files changed, 11 insertions, 19 deletions
diff --git a/passes/techmap/iopadmap.cc b/passes/techmap/iopadmap.cc
index b3ae5eafe..a6e4fac14 100644
--- a/passes/techmap/iopadmap.cc
+++ b/passes/techmap/iopadmap.cc
@@ -408,35 +408,27 @@ struct IopadmapPass : public Pass {
RTLIL::Wire *wire = it.first;
RTLIL::Wire *new_wire = module->addWire(NEW_ID, wire);
module->swap_names(new_wire, wire);
+ wire->attributes.clear();
for (int i = 0; i < wire->width; i++)
{
SigBit wire_bit(wire, i);
if (!it.second.count(i)) {
- if (wire->port_output) {
+ if (wire->port_output)
module->connect(SigSpec(new_wire, i), SigSpec(wire, i));
- wire->attributes.clear();
- }
- else {
+ else
module->connect(SigSpec(wire, i), SigSpec(new_wire, i));
- wire->attributes.clear();
-
- }
} else {
auto &new_conn = it.second.at(i);
new_conn.first->setPort(new_conn.second, RTLIL::SigSpec(new_wire, i));
+ }
+ }
- // For cell outputs, move \init attributes from old wire to new wire
- if (new_conn.first->output(new_conn.second)) {
- auto it = wire->attributes.find(ID(init));
- if (it != wire->attributes.end()) {
- for (auto it2 = wire->attributes.begin(); it2 != wire->attributes.end(); )
- if (it == it2)
- ++it2;
- else
- it2 = wire->attributes.erase(it2);
- new_wire->attributes.erase(ID(init));
- }
- }
+ if (wire->port_output) {
+ auto jt = new_wire->attributes.find(ID(init));
+ // For output ports, move \init attributes from old wire to new wire
+ if (jt != new_wire->attributes.end()) {
+ wire->attributes[ID(init)] = std::move(jt->second);
+ new_wire->attributes.erase(jt);
}
}