aboutsummaryrefslogtreecommitdiffstats
path: root/common
diff options
context:
space:
mode:
authorKeith Rothman <537074+litghost@users.noreply.github.com>2021-02-01 14:28:32 -0800
committerKeith Rothman <537074+litghost@users.noreply.github.com>2021-02-02 07:44:49 -0800
commitda74a425d23352d7cddf9d1c4b0b7c86dd567c40 (patch)
tree3657232a91e97f839cd9114f40aa0c565afc23d4 /common
parent01509ec7c991f0ec674fd933095dfe52be28b46f (diff)
downloadnextpnr-da74a425d23352d7cddf9d1c4b0b7c86dd567c40.tar.gz
nextpnr-da74a425d23352d7cddf9d1c4b0b7c86dd567c40.tar.bz2
nextpnr-da74a425d23352d7cddf9d1c4b0b7c86dd567c40.zip
Run "make clangformat".
Signed-off-by: Keith Rothman <537074+litghost@users.noreply.github.com>
Diffstat (limited to 'common')
-rw-r--r--common/arch_pybindings_shared.h12
-rw-r--r--common/archcheck.cc20
-rw-r--r--common/fast_bels.h45
-rw-r--r--common/place_common.cc3
-rw-r--r--common/placer1.cc7
-rw-r--r--common/placer_heap.cc49
6 files changed, 73 insertions, 63 deletions
diff --git a/common/arch_pybindings_shared.h b/common/arch_pybindings_shared.h
index b8ea7b17..5295c6ab 100644
--- a/common/arch_pybindings_shared.h
+++ b/common/arch_pybindings_shared.h
@@ -112,17 +112,17 @@ fn_wrapper_2a_v<Context, decltype(&Context::writeSVG), &Context::writeSVG, pass_
pass_through<std::string>>::def_wrap(ctx_cls, "writeSVG");
// const\_range\<BelBucketId\> getBelBuckets() const
-fn_wrapper_0a<Context, decltype(&Context::getBelBuckets), &Context::getBelBuckets, wrap_context<BelBucketRange>>::def_wrap(ctx_cls,
- "getBelBuckets");
+fn_wrapper_0a<Context, decltype(&Context::getBelBuckets), &Context::getBelBuckets,
+ wrap_context<BelBucketRange>>::def_wrap(ctx_cls, "getBelBuckets");
// BelBucketId getBelBucketForBel(BelId bel) const
fn_wrapper_1a<Context, decltype(&Context::getBelBucketForBel), &Context::getBelBucketForBel, conv_to_str<BelBucketId>,
conv_from_str<BelId>>::def_wrap(ctx_cls, "getBelBucketForBel");
// BelBucketId getBelBucketForCellType(IdString cell\_type) const
-fn_wrapper_1a<Context, decltype(&Context::getBelBucketForCellType), &Context::getBelBucketForCellType, conv_to_str<BelBucketId>,
- conv_from_str<IdString>>::def_wrap(ctx_cls, "getBelBucketForCellType");
+fn_wrapper_1a<Context, decltype(&Context::getBelBucketForCellType), &Context::getBelBucketForCellType,
+ conv_to_str<BelBucketId>, conv_from_str<IdString>>::def_wrap(ctx_cls, "getBelBucketForCellType");
// const\_range\<BelId\> getBelsInBucket(BelBucketId bucket) const
-fn_wrapper_1a<Context, decltype(&Context::getBelsInBucket), &Context::getBelsInBucket, wrap_context<BelRangeForBelBucket>,
- conv_from_str<BelBucketId>>::def_wrap(ctx_cls, "getBelsInBucket");
+fn_wrapper_1a<Context, decltype(&Context::getBelsInBucket), &Context::getBelsInBucket,
+ wrap_context<BelRangeForBelBucket>, conv_from_str<BelBucketId>>::def_wrap(ctx_cls, "getBelsInBucket");
// bool isValidBelForCellType(IdString cell\_type, BelId bel) const
fn_wrapper_2a<Context, decltype(&Context::isValidBelForCellType), &Context::isValidBelForCellType, pass_through<bool>,
conv_from_str<IdString>, conv_from_str<BelId>>::def_wrap(ctx_cls, "isValidBelForCellType");
diff --git a/common/archcheck.cc b/common/archcheck.cc
index 585fcfee..f5760c88 100644
--- a/common/archcheck.cc
+++ b/common/archcheck.cc
@@ -53,7 +53,7 @@ void archcheck_names(const Context *ctx)
}
log_info("Checking bucket names..\n");
- for(BelBucketId bucket : ctx->getBelBuckets()) {
+ for (BelBucketId bucket : ctx->getBelBuckets()) {
IdString name = ctx->getBelBucketName(bucket);
BelBucketId bucket2 = ctx->getBelBucketByName(name);
if (bucket != bucket2) {
@@ -204,12 +204,12 @@ void archcheck_buckets(const Context *ctx)
// BEL buckets should be subsets of BELs that form an exact cover.
// In particular that means cell types in a bucket should only be
// placable in that bucket.
- for(BelBucketId bucket : ctx->getBelBuckets()) {
+ for (BelBucketId bucket : ctx->getBelBuckets()) {
// Find out which cell types are in this bucket.
std::unordered_set<IdString> cell_types_in_bucket;
- for(IdString cell_type : ctx->getCellTypes()) {
- if(ctx->getBelBucketForCellType(cell_type) == bucket) {
+ for (IdString cell_type : ctx->getCellTypes()) {
+ if (ctx->getBelBucketForCellType(cell_type) == bucket) {
cell_types_in_bucket.insert(cell_type);
}
}
@@ -219,7 +219,7 @@ void archcheck_buckets(const Context *ctx)
std::unordered_set<IdString> cell_types_unused;
std::unordered_set<BelId> bels_in_bucket;
- for(BelId bel : ctx->getBelsInBucket(bucket)) {
+ for (BelId bel : ctx->getBelsInBucket(bucket)) {
BelBucketId bucket2 = ctx->getBelBucketForBel(bel);
log_assert(bucket == bucket2);
@@ -227,9 +227,9 @@ void archcheck_buckets(const Context *ctx)
// Check to see if a cell type not in this bucket can be
// placed at a BEL in this bucket.
- for(IdString cell_type : ctx->getCellTypes()) {
- if(ctx->getBelBucketForCellType(cell_type) == bucket) {
- if(ctx->isValidBelForCellType(cell_type, bel)) {
+ for (IdString cell_type : ctx->getCellTypes()) {
+ if (ctx->getBelBucketForCellType(cell_type) == bucket) {
+ if (ctx->isValidBelForCellType(cell_type, bel)) {
cell_types_unused.erase(cell_type);
}
} else {
@@ -240,8 +240,8 @@ void archcheck_buckets(const Context *ctx)
// Verify that any BEL not in this bucket reports a different
// bucket.
- for(BelId bel : ctx->getBels()) {
- if(ctx->getBelBucketForBel(bel) != bucket) {
+ for (BelId bel : ctx->getBels()) {
+ if (ctx->getBelBucketForBel(bel) != bucket) {
log_assert(bels_in_bucket.count(bel) == 0);
}
}
diff --git a/common/fast_bels.h b/common/fast_bels.h
index 2301bc7d..be2852cd 100644
--- a/common/fast_bels.h
+++ b/common/fast_bels.h
@@ -20,24 +20,30 @@
#pragma once
-#include "nextpnr.h"
#include <cstddef>
+#include "nextpnr.h"
NEXTPNR_NAMESPACE_BEGIN
// FastBels is a lookup class that provides a fast lookup for finding BELs
// that support a given cell type.
-struct FastBels {
- struct TypeData {
+struct FastBels
+{
+ struct TypeData
+ {
size_t type_index;
int number_of_possible_bels;
};
- FastBels(Context *ctx, bool check_bel_available, int minBelsForGridPick) : ctx(ctx), check_bel_available(check_bel_available), minBelsForGridPick(minBelsForGridPick) {}
+ FastBels(Context *ctx, bool check_bel_available, int minBelsForGridPick)
+ : ctx(ctx), check_bel_available(check_bel_available), minBelsForGridPick(minBelsForGridPick)
+ {
+ }
- void addCellType(IdString cell_type) {
+ void addCellType(IdString cell_type)
+ {
auto iter = cell_types.find(cell_type);
- if(iter != cell_types.end()) {
+ if (iter != cell_types.end()) {
// This cell type has already been added to the fast BEL lookup.
return;
}
@@ -50,7 +56,7 @@ struct FastBels {
auto &bel_data = fast_bels_by_cell_type.at(type_idx);
for (auto bel : ctx->getBels()) {
- if(!ctx->isValidBelForCellType(cell_type, bel)) {
+ if (!ctx->isValidBelForCellType(cell_type, bel)) {
continue;
}
@@ -58,11 +64,11 @@ struct FastBels {
}
for (auto bel : ctx->getBels()) {
- if(check_bel_available && !ctx->checkBelAvail(bel)) {
+ if (check_bel_available && !ctx->checkBelAvail(bel)) {
continue;
}
- if(!ctx->isValidBelForCellType(cell_type, bel)) {
+ if (!ctx->isValidBelForCellType(cell_type, bel)) {
continue;
}
@@ -83,9 +89,10 @@ struct FastBels {
}
}
- void addBelBucket(BelBucketId partition) {
+ void addBelBucket(BelBucketId partition)
+ {
auto iter = partition_types.find(partition);
- if(iter != partition_types.end()) {
+ if (iter != partition_types.end()) {
// This partition has already been added to the fast BEL lookup.
return;
}
@@ -98,7 +105,7 @@ struct FastBels {
auto &bel_data = fast_bels_by_partition_type.at(type_idx);
for (auto bel : ctx->getBels()) {
- if(ctx->getBelBucketForBel(bel) != partition) {
+ if (ctx->getBelBucketForBel(bel) != partition) {
continue;
}
@@ -106,11 +113,11 @@ struct FastBels {
}
for (auto bel : ctx->getBels()) {
- if(check_bel_available && !ctx->checkBelAvail(bel)) {
+ if (check_bel_available && !ctx->checkBelAvail(bel)) {
continue;
}
- if(ctx->getBelBucketForBel(bel) != partition) {
+ if (ctx->getBelBucketForBel(bel) != partition) {
continue;
}
@@ -133,9 +140,10 @@ struct FastBels {
typedef std::vector<std::vector<std::vector<BelId>>> FastBelsData;
- int getBelsForCellType(IdString cell_type, FastBelsData **data) {
+ int getBelsForCellType(IdString cell_type, FastBelsData **data)
+ {
auto iter = cell_types.find(cell_type);
- if(iter == cell_types.end()) {
+ if (iter == cell_types.end()) {
addCellType(cell_type);
iter = cell_types.find(cell_type);
NPNR_ASSERT(iter != cell_types.end());
@@ -147,9 +155,10 @@ struct FastBels {
return cell_type_data.number_of_possible_bels;
}
- size_t getBelsForBelBucket(BelBucketId partition, FastBelsData **data) {
+ size_t getBelsForBelBucket(BelBucketId partition, FastBelsData **data)
+ {
auto iter = partition_types.find(partition);
- if(iter == partition_types.end()) {
+ if (iter == partition_types.end()) {
addBelBucket(partition);
iter = partition_types.find(partition);
NPNR_ASSERT(iter != partition_types.end());
diff --git a/common/place_common.cc b/common/place_common.cc
index fb973e2c..3f89169a 100644
--- a/common/place_common.cc
+++ b/common/place_common.cc
@@ -118,7 +118,8 @@ bool place_single_cell(Context *ctx, CellInfo *cell, bool require_legality)
}
IdString targetType = cell->type;
for (auto bel : ctx->getBels()) {
- if (ctx->isValidBelForCellType(targetType, bel) && (!require_legality || ctx->isValidBelForCell(cell, bel))) {
+ if (ctx->isValidBelForCellType(targetType, bel) &&
+ (!require_legality || ctx->isValidBelForCell(cell, bel))) {
if (ctx->checkBelAvail(bel)) {
wirelen_t wirelen = get_cell_metric_at_bel(ctx, cell, bel, MetricType::COST);
if (iters >= 4)
diff --git a/common/placer1.cc b/common/placer1.cc
index 2d63ea42..1c039090 100644
--- a/common/placer1.cc
+++ b/common/placer1.cc
@@ -39,11 +39,11 @@
#include <stdlib.h>
#include <string.h>
#include <vector>
+#include "fast_bels.h"
#include "log.h"
#include "place_common.h"
#include "timing.h"
#include "util.h"
-#include "fast_bels.h"
namespace std {
template <> struct hash<std::pair<NEXTPNR_NAMESPACE_PREFIX IdString, std::size_t>>
@@ -76,7 +76,8 @@ class SAPlacer
};
public:
- SAPlacer(Context *ctx, Placer1Cfg cfg) : ctx(ctx), fast_bels(ctx, /*check_bel_available=*/false, cfg.minBelsForGridPick), cfg(cfg)
+ SAPlacer(Context *ctx, Placer1Cfg cfg)
+ : ctx(ctx), fast_bels(ctx, /*check_bel_available=*/false, cfg.minBelsForGridPick), cfg(cfg)
{
for (auto bel : ctx->getBels()) {
Loc loc = ctx->getBelLocation(bel);
@@ -91,7 +92,7 @@ class SAPlacer
cell_types_in_use.insert(cell_type);
}
- for(auto cell_type : cell_types_in_use) {
+ for (auto cell_type : cell_types_in_use) {
fast_bels.addCellType(cell_type);
}
diff --git a/common/placer_heap.cc b/common/placer_heap.cc
index e14a4660..d149a5b0 100644
--- a/common/placer_heap.cc
+++ b/common/placer_heap.cc
@@ -44,13 +44,13 @@
#include <queue>
#include <tuple>
#include <unordered_map>
+#include "fast_bels.h"
#include "log.h"
#include "nextpnr.h"
#include "place_common.h"
#include "placer1.h"
#include "timing.h"
#include "util.h"
-#include "fast_bels.h"
NEXTPNR_NAMESPACE_BEGIN
@@ -138,7 +138,10 @@ template <typename T> struct EquationSystem
class HeAPPlacer
{
public:
- HeAPPlacer(Context *ctx, PlacerHeapCfg cfg) : ctx(ctx), cfg(cfg), fast_bels(ctx, /*check_bel_available=*/true, -1) { Eigen::initParallel(); }
+ HeAPPlacer(Context *ctx, PlacerHeapCfg cfg) : ctx(ctx), cfg(cfg), fast_bels(ctx, /*check_bel_available=*/true, -1)
+ {
+ Eigen::initParallel();
+ }
bool place()
{
@@ -429,10 +432,10 @@ class HeAPPlacer
buckets_in_use.insert(bucket);
}
- for(auto cell_type : cell_types_in_use) {
+ for (auto cell_type : cell_types_in_use) {
fast_bels.addCellType(cell_type);
}
- for(auto bucket : buckets_in_use) {
+ for (auto bucket : buckets_in_use) {
fast_bels.addBelBucket(bucket);
}
@@ -500,8 +503,8 @@ class HeAPPlacer
continue;
}
- for(auto cell_type : cell_types) {
- if(ctx->isValidBelForCellType(cell_type, bel)) {
+ for (auto cell_type : cell_types) {
+ if (ctx->isValidBelForCellType(cell_type, bel)) {
available_bels[cell_type].push_back(bel);
}
}
@@ -532,23 +535,21 @@ class HeAPPlacer
// all.
if (!available_bels.count(ci->type)) {
log_error("Unable to place cell '%s', no BELs remaining to implement cell type '%s'\n",
- ci->name.c_str(ctx),
- ci->type.c_str(ctx));
+ ci->name.c_str(ctx), ci->type.c_str(ctx));
}
// Find an unused BEL from bels_for_cell_type.
auto &bels_for_cell_type = available_bels.at(ci->type);
BelId bel;
- while(true) {
+ while (true) {
if (bels_for_cell_type.empty()) {
log_error("Unable to place cell '%s', no BELs remaining to implement cell type '%s'\n",
- ci->name.c_str(ctx),
- ci->type.c_str(ctx));
+ ci->name.c_str(ctx), ci->type.c_str(ctx));
}
BelId candidate_bel = bels_for_cell_type.back();
bels_for_cell_type.pop_back();
- if(bels_used.count(candidate_bel)) {
+ if (bels_used.count(candidate_bel)) {
// candidate_bel has already been used by another
// cell type, skip it.
continue;
@@ -1202,13 +1203,12 @@ class HeAPPlacer
return int(fb.at(type)->at(x).at(y).size());
}
- bool is_cell_fixed(const CellInfo & cell) const {
+ bool is_cell_fixed(const CellInfo &cell) const
+ {
return buckets.count(ctx->getBelBucketForCellType(cell.type)) == 0;
}
- size_t cell_index(const CellInfo & cell) const {
- return type_index.at(ctx->getBelBucketForCellType(cell.type));
- }
+ size_t cell_index(const CellInfo &cell) const { return type_index.at(ctx->getBelBucketForCellType(cell.type)); }
void init()
{
@@ -1239,9 +1239,9 @@ class HeAPPlacer
for (auto &cell_loc : p->cell_locs) {
IdString cell_name = cell_loc.first;
- const CellInfo & cell = *ctx->cells.at(cell_name);
- const CellLocation & loc = cell_loc.second;
- if(is_cell_fixed(cell)) {
+ const CellInfo &cell = *ctx->cells.at(cell_name);
+ const CellLocation &loc = cell_loc.second;
+ if (is_cell_fixed(cell)) {
continue;
}
@@ -1261,9 +1261,9 @@ class HeAPPlacer
for (auto &cell_loc : p->cell_locs) {
IdString cell_name = cell_loc.first;
- const CellInfo & cell = *ctx->cells.at(cell_name);
- const CellLocation & loc = cell_loc.second;
- if(is_cell_fixed(cell)) {
+ const CellInfo &cell = *ctx->cells.at(cell_name);
+ const CellLocation &loc = cell_loc.second;
+ if (is_cell_fixed(cell)) {
continue;
}
@@ -1285,7 +1285,7 @@ class HeAPPlacer
}
for (auto cell : p->solve_cells) {
- if(is_cell_fixed(*cell)) {
+ if (is_cell_fixed(*cell)) {
continue;
}
@@ -1476,8 +1476,7 @@ class HeAPPlacer
if (reg.cells > reg.bels) {
IdString bucket_name = ctx->getBelBucketName(bucket);
log_error("Failed to expand region (%d, %d) |_> (%d, %d) of %d %ss\n", reg.x0, reg.y0,
- reg.x1, reg.y1, reg.cells.at(type_index.at(bucket)),
- bucket_name.c_str(ctx));
+ reg.x1, reg.y1, reg.cells.at(type_index.at(bucket)), bucket_name.c_str(ctx));
}
}
break;