aboutsummaryrefslogtreecommitdiffstats
path: root/common
diff options
context:
space:
mode:
Diffstat (limited to 'common')
-rw-r--r--common/router2.cc10
1 files changed, 10 insertions, 0 deletions
diff --git a/common/router2.cc b/common/router2.cc
index b6875ef0..152878c6 100644
--- a/common/router2.cc
+++ b/common/router2.cc
@@ -572,7 +572,17 @@ struct Router2
auto &ad = nd.arcs.at(usr_idx);
auto &usr = net->users.at(usr_idx);
WireId src = ctx->getNetinfoSourceWire(net);
+ // Skip routes with no source
+ if (src == WireId())
+ return true;
WireId dst = ctx->getNetinfoSinkWire(net, usr);
+ // Skip routes where the destination is already bound
+ if (dst == WireId() || ctx->getBoundWireNet(dst) == net)
+ return true;
+ // Skip routes where there is no routing (special cases)
+ if (ad.wires.empty())
+ return true;
+
WireId cursor = dst;
std::vector<PipId> to_bind;