aboutsummaryrefslogtreecommitdiffstats
path: root/common/placer1.cc
diff options
context:
space:
mode:
authorgatecat <gatecat@ds0.me>2021-06-01 17:52:25 +0100
committergatecat <gatecat@ds0.me>2021-06-02 15:04:49 +0100
commit43b8dde923b8cf57a206526fd6e66ebf1c436010 (patch)
tree4a45f386aa04c43f09dd40c256a1284f6e9fd393 /common/placer1.cc
parent579b98c5963c2b86d191d481a2147a663a8196dd (diff)
downloadnextpnr-43b8dde923b8cf57a206526fd6e66ebf1c436010.tar.gz
nextpnr-43b8dde923b8cf57a206526fd6e66ebf1c436010.tar.bz2
nextpnr-43b8dde923b8cf57a206526fd6e66ebf1c436010.zip
Use hashlib in placers
Signed-off-by: gatecat <gatecat@ds0.me>
Diffstat (limited to 'common/placer1.cc')
-rw-r--r--common/placer1.cc20
1 files changed, 10 insertions, 10 deletions
diff --git a/common/placer1.cc b/common/placer1.cc
index f9cef92f..e8c6aa64 100644
--- a/common/placer1.cc
+++ b/common/placer1.cc
@@ -87,7 +87,7 @@ class SAPlacer
}
diameter = std::max(max_x, max_y) + 1;
- std::unordered_set<IdString> cell_types_in_use;
+ pool<IdString> cell_types_in_use;
for (auto &cell : ctx->cells) {
IdString cell_type = cell.second->type;
cell_types_in_use.insert(cell_type);
@@ -629,7 +629,7 @@ class SAPlacer
bool try_swap_chain(CellInfo *cell, BelId newBase)
{
std::vector<std::pair<CellInfo *, Loc>> cell_rel;
- std::unordered_set<IdString> cells;
+ pool<IdString> cells;
std::vector<std::pair<CellInfo *, BelId>> moves_made;
std::vector<std::pair<CellInfo *, BelId>> dest_bels;
double delta = 0;
@@ -1065,7 +1065,7 @@ class SAPlacer
mc.already_changed_arcs[pn->udata][i] = true;
}
} else if (port.second.type == PORT_IN) {
- auto usr = fast_port_to_user.at(&port.second);
+ auto usr = fast_port_to_user.at(std::make_pair(cell->name, port.first));
if (!mc.already_changed_arcs[pn->udata][usr]) {
mc.changed_arcs.emplace_back(std::make_pair(pn->udata, usr));
mc.already_changed_arcs[pn->udata][usr] = true;
@@ -1122,7 +1122,7 @@ class SAPlacer
NetInfo *ni = net.second.get();
for (size_t i = 0; i < ni->users.size(); i++) {
auto &usr = ni->users.at(i);
- fast_port_to_user[&(usr.cell->ports.at(usr.port))] = i;
+ fast_port_to_user[std::make_pair(usr.cell->name, usr.port)] = i;
}
}
}
@@ -1130,11 +1130,11 @@ class SAPlacer
// Simple routeability driven placement
const int large_cell_thresh = 50;
int total_net_share = 0;
- std::vector<std::vector<std::unordered_map<IdString, int>>> nets_by_tile;
+ std::vector<std::vector<dict<IdString, int>>> nets_by_tile;
void setup_nets_by_tile()
{
total_net_share = 0;
- nets_by_tile.resize(max_x + 1, std::vector<std::unordered_map<IdString, int>>(max_y + 1));
+ nets_by_tile.resize(max_x + 1, std::vector<dict<IdString, int>>(max_y + 1));
for (auto &cell : ctx->cells) {
CellInfo *ci = cell.second.get();
if (int(ci->ports.size()) > large_cell_thresh)
@@ -1194,7 +1194,7 @@ class SAPlacer
std::vector<std::vector<double>> net_arc_tcost;
// Fast lookup for cell port to net user index
- std::unordered_map<const PortInfo *, size_t> fast_port_to_user;
+ dict<std::pair<IdString, IdString>, size_t> fast_port_to_user;
// Wirelength and timing cost at last and current iteration
wirelen_t last_wirelen_cost, curr_wirelen_cost;
@@ -1207,10 +1207,10 @@ class SAPlacer
bool improved = false;
int n_move, n_accept;
int diameter = 35, max_x = 1, max_y = 1;
- std::unordered_map<IdString, std::tuple<int, int>> bel_types;
- std::unordered_map<IdString, BoundingBox> region_bounds;
+ dict<IdString, std::tuple<int, int>> bel_types;
+ dict<IdString, BoundingBox> region_bounds;
FastBels fast_bels;
- std::unordered_set<BelId> locked_bels;
+ pool<BelId> locked_bels;
std::vector<NetInfo *> net_by_udata;
std::vector<decltype(NetInfo::udata)> old_udata;
bool require_legal = true;