diff options
Diffstat (limited to 'common')
-rw-r--r-- | common/archcheck.cc | 33 | ||||
-rw-r--r-- | common/nextpnr.cc | 4 | ||||
-rw-r--r-- | common/nextpnr.h | 9 |
3 files changed, 28 insertions, 18 deletions
diff --git a/common/archcheck.cc b/common/archcheck.cc index f950aa1a..6702032e 100644 --- a/common/archcheck.cc +++ b/common/archcheck.cc @@ -135,8 +135,10 @@ void archcheck_locs(const Context *ctx) // // This allows a fast way to check getPipsDownhill/getPipsUphill from getPips, // without balloning memory usage. -struct LruWireCacheMap { - LruWireCacheMap(const Context *ctx, size_t cache_size) : ctx(ctx), cache_size(cache_size) { +struct LruWireCacheMap +{ + LruWireCacheMap(const Context *ctx, size_t cache_size) : ctx(ctx), cache_size(cache_size) + { cache_hits = 0; cache_misses = 0; cache_evictions = 0; @@ -159,7 +161,8 @@ struct LruWireCacheMap { std::unordered_map<PipId, WireId> pips_downhill; std::unordered_map<PipId, WireId> pips_uphill; - void removeWireFromCache(WireId wire_to_remove) { + void removeWireFromCache(WireId wire_to_remove) + { for (PipId pip : ctx->getPipsDownhill(wire_to_remove)) { log_assert(pips_downhill.erase(pip) == 1); } @@ -169,7 +172,8 @@ struct LruWireCacheMap { } } - void addWireToCache(WireId wire) { + void addWireToCache(WireId wire) + { for (PipId pip : ctx->getPipsDownhill(wire)) { auto result = pips_downhill.emplace(pip, wire); log_assert(result.second); @@ -181,12 +185,13 @@ struct LruWireCacheMap { } } - void populateCache(WireId wire) { + void populateCache(WireId wire) + { // Put this wire at the end of last_access_list. auto iter = last_access_list.emplace(last_access_list.end(), wire); last_access_map.emplace(wire, iter); - if(last_access_list.size() > cache_size) { + if (last_access_list.size() > cache_size) { // Cache is full, remove front of last_access_list. cache_evictions += 1; WireId wire_to_remove = last_access_list.front(); @@ -202,9 +207,10 @@ struct LruWireCacheMap { // Determine if wire is in the cache. If wire is not in the cache, // adds the wire to the cache, and potentially evicts the oldest wire if // cache is now full. - void checkCache(WireId wire) { + void checkCache(WireId wire) + { auto iter = last_access_map.find(wire); - if(iter == last_access_map.end()) { + if (iter == last_access_map.end()) { cache_misses += 1; populateCache(wire); } else { @@ -215,18 +221,21 @@ struct LruWireCacheMap { } // Returns true if pip is uphill of wire (e.g. pip in getPipsUphill(wire)). - bool isPipUphill(PipId pip, WireId wire) { + bool isPipUphill(PipId pip, WireId wire) + { checkCache(wire); return pips_uphill.at(pip) == wire; } // Returns true if pip is downhill of wire (e.g. pip in getPipsDownhill(wire)). - bool isPipDownhill(PipId pip, WireId wire) { + bool isPipDownhill(PipId pip, WireId wire) + { checkCache(wire); return pips_downhill.at(pip) == wire; } - void cache_info() const { + void cache_info() const + { log_info("Cache hits: %zu\n", cache_hits); log_info("Cache misses: %zu\n", cache_misses); log_info("Cache evictions: %zu\n", cache_evictions); @@ -285,7 +294,7 @@ void archcheck_conn(const Context *ctx) // gains by avoiding the full pip -> wire map, and still preserves a fast // pip -> wire, assuming that pips are returned from getPips with some // chip locality. - LruWireCacheMap pip_cache(ctx, /*cache_size=*/64*1024); + LruWireCacheMap pip_cache(ctx, /*cache_size=*/64 * 1024); log_info("Checking all PIPs...\n"); for (PipId pip : ctx->getPips()) { WireId src_wire = ctx->getPipSrcWire(pip); diff --git a/common/nextpnr.cc b/common/nextpnr.cc index f7f368f1..fc70465c 100644 --- a/common/nextpnr.cc +++ b/common/nextpnr.cc @@ -805,9 +805,9 @@ void BaseCtx::attributesToArchInfo() std::string pip = strs[i * 3 + 1]; PlaceStrength strength = (PlaceStrength)std::stoi(strs[i * 3 + 2]); if (pip.empty()) - getCtx()->bindWire(getCtx()->getWireByName(id(wire)), ni, strength); + getCtx()->bindWire(getCtx()->getWireByName(IdStringList::parse(getCtx(), wire)), ni, strength); else - getCtx()->bindPip(getCtx()->getPipByName(id(pip)), ni, strength); + getCtx()->bindPip(getCtx()->getPipByName(IdStringList::parse(getCtx(), pip)), ni, strength); } } } diff --git a/common/nextpnr.h b/common/nextpnr.h index 78bbf66e..2445bed1 100644 --- a/common/nextpnr.h +++ b/common/nextpnr.h @@ -110,7 +110,8 @@ struct IdString static void initialize_add(const BaseCtx *ctx, const char *s, int idx); - constexpr IdString(int index = 0) : index(index) {} + constexpr IdString() : index(0) {} + explicit constexpr IdString(int index) : index(index) {} void set(const BaseCtx *ctx, const std::string &s); @@ -229,9 +230,9 @@ struct IdStringList SSOArray<IdString, 4> ids; IdStringList(){}; - IdStringList(size_t n) : ids(n, IdString()){}; - IdStringList(IdString id) : ids(1, id){}; - template <typename Tlist> IdStringList(const Tlist &list) : ids(list){}; + explicit IdStringList(size_t n) : ids(n, IdString()){}; + explicit IdStringList(IdString id) : ids(1, id){}; + template <typename Tlist> explicit IdStringList(const Tlist &list) : ids(list){}; static IdStringList parse(Context *ctx, const std::string &str); void build_str(const Context *ctx, std::string &str) const; |