Skip to content

Commit 14cff91

Browse files
Remove code duplication between global context and AtomPBBimap
1 parent 00aad1b commit 14cff91

24 files changed

+1968
-2083
lines changed

utils/fasm/src/fasm.cpp

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -343,9 +343,9 @@ static AtomNetId _find_atom_input_logical_net(const t_pb* atom, const t_pb_route
343343

344344
static LogicVec lut_outputs(const t_pb* atom_pb, size_t num_inputs, const t_pb_routes &pb_route) {
345345
auto& atom_ctx = g_vpr_ctx.atom();
346-
AtomBlockId block_id = atom_ctx.lookup().pb_atom(atom_pb);
346+
AtomBlockId block_id = atom_ctx.lookup().atom_pb_bimap().pb_atom(atom_pb);
347347
const auto& truth_table = atom_ctx.netlist().block_truth_table(block_id);
348-
auto ports = atom_ctx.netlist().block_input_ports(atom_ctx.lookup().pb_atom(atom_pb));
348+
auto ports = atom_ctx.netlist().block_input_ports(atom_ctx.lookup().atom_pb_bimap().pb_atom(atom_pb));
349349

350350
const t_pb_graph_node* gnode = atom_pb->pb_graph_node;
351351

@@ -537,7 +537,7 @@ static const t_pb_routes &find_pb_route(const t_pb* pb) {
537537
void FasmWriterVisitor::check_for_param(const t_pb *atom) {
538538
auto& atom_ctx = g_vpr_ctx.atom();
539539

540-
auto atom_blk_id = atom_ctx.lookup().pb_atom(atom);
540+
auto atom_blk_id = atom_ctx.lookup().atom_pb_bimap().pb_atom(atom);
541541
if (atom_blk_id == AtomBlockId::INVALID()) {
542542
return;
543543
}
@@ -592,7 +592,7 @@ void FasmWriterVisitor::check_for_param(const t_pb *atom) {
592592
void FasmWriterVisitor::check_for_lut(const t_pb* atom) {
593593
auto& atom_ctx = g_vpr_ctx.atom();
594594

595-
auto atom_blk_id = atom_ctx.lookup().pb_atom(atom);
595+
auto atom_blk_id = atom_ctx.lookup().atom_pb_bimap().pb_atom(atom);
596596
if (atom_blk_id == AtomBlockId::INVALID()) {
597597
return;
598598
}

vpr/src/base/atom_lookup.cpp

Lines changed: 0 additions & 49 deletions
Original file line numberDiff line numberDiff line change
@@ -4,55 +4,6 @@
44
#include "vtr_optional.h"
55

66
#include "atom_lookup.h"
7-
/*
8-
* PB
9-
*/
10-
const t_pb* AtomLookup::atom_pb(const AtomBlockId blk_id) const {
11-
VTR_ASSERT(!lock_atom_pb);
12-
auto iter = atom_to_pb_.find(blk_id);
13-
if (iter == atom_to_pb_.end()) {
14-
//Not found
15-
return nullptr;
16-
}
17-
return iter->second;
18-
}
19-
20-
AtomBlockId AtomLookup::pb_atom(const t_pb* pb) const {
21-
VTR_ASSERT(!lock_atom_pb);
22-
auto iter = atom_to_pb_.find(pb);
23-
if (iter == atom_to_pb_.inverse_end()) {
24-
//Not found
25-
return AtomBlockId::INVALID();
26-
}
27-
return iter->second;
28-
}
29-
30-
const t_pb_graph_node* AtomLookup::atom_pb_graph_node(const AtomBlockId blk_id) const {
31-
VTR_ASSERT(!lock_atom_pb);
32-
const t_pb* pb = atom_pb(blk_id);
33-
if (pb) {
34-
//Found
35-
return pb->pb_graph_node;
36-
}
37-
return nullptr;
38-
}
39-
40-
void AtomLookup::set_atom_pb(const AtomBlockId blk_id, const t_pb* pb) {
41-
VTR_ASSERT(!lock_atom_pb);
42-
//If either of blk_id or pb are not valid,
43-
//remove any mapping
44-
45-
if (!blk_id && pb) {
46-
//Remove
47-
atom_to_pb_.erase(pb);
48-
} else if (blk_id && !pb) {
49-
//Remove
50-
atom_to_pb_.erase(blk_id);
51-
} else if (blk_id && pb) {
52-
//If both are valid store the mapping
53-
atom_to_pb_.update(blk_id, pb);
54-
}
55-
}
567

578
/*
589
* PB Pins

vpr/src/base/atom_lookup.h

Lines changed: 7 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,8 @@
1515

1616
#include "vtr_optional.h"
1717

18+
#include "atom_pb_bimap.h"
19+
1820
/**
1921
* @brief The AtomLookup class describes the mapping between components in the AtomNetlist
2022
* and other netlists/entities (i.e. atom block <-> t_pb, atom block <-> clb)
@@ -32,24 +34,8 @@ class AtomLookup {
3234
* PBs
3335
*/
3436

35-
/**
36-
* @brief Returns the leaf pb associated with the atom blk_id
37-
* @note this is the lowest level pb which corresponds directly to the atom block
38-
*/
39-
const t_pb* atom_pb(const AtomBlockId blk_id) const;
40-
41-
///@brief Returns the atom block id associated with pb
42-
AtomBlockId pb_atom(const t_pb* pb) const;
43-
44-
///@brief Conveneince wrapper around atom_pb to access the associated graph node
45-
const t_pb_graph_node* atom_pb_graph_node(const AtomBlockId blk_id) const;
46-
47-
/**
48-
* @brief Sets the bidirectional mapping between an atom and pb
49-
*
50-
* If either blk_id or pb are not valid any, existing mapping is removed
51-
*/
52-
void set_atom_pb(const AtomBlockId blk_id, const t_pb* pb);
37+
inline AtomPBBimap &mutable_atom_pb_bimap() {return atom_to_pb_bimap_;}
38+
inline const AtomPBBimap &atom_pb_bimap() const {return atom_to_pb_bimap_;}
5339

5440
/*
5541
* PB Pins
@@ -111,20 +97,15 @@ class AtomLookup {
11197

11298
///@brief Sets the bi-directional mapping between an atom netlist pin and timing graph node
11399
void set_atom_pin_tnode(const AtomPinId pin, const tatum::NodeId node, BlockTnode block_tnode_type);
114-
115-
// Getter function for atom_to_pb_
116-
inline const vtr::bimap<AtomBlockId, const t_pb*, vtr::linear_map, std::unordered_map> &atom_to_pb() const{
117-
return atom_to_pb_;
118-
}
119100

120101
// Setter function for atom_to_pb_
121-
void set_atom_to_pb(const vtr::bimap<AtomBlockId, const t_pb*, vtr::linear_map, std::unordered_map> &atom_to_pb){
122-
atom_to_pb_ = atom_to_pb;
102+
void set_atom_to_pb_bimap(const AtomPBBimap& atom_to_pb){
103+
atom_to_pb_bimap_ = atom_to_pb;
123104
}
124105

125106
private: //Types
126107
private:
127-
vtr::bimap<AtomBlockId, const t_pb*, vtr::linear_map, std::unordered_map> atom_to_pb_;
108+
AtomPBBimap atom_to_pb_bimap_;
128109

129110
vtr::vector_map<AtomPinId, const t_pb_graph_pin*> atom_pin_to_pb_graph_pin_;
130111

vpr/src/base/load_flat_place.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -71,7 +71,7 @@ static void print_flat_cluster(FILE* fp,
7171
// Print a line for each atom.
7272
for (AtomBlockId atom : atoms_lookup[blk_id]) {
7373
// Get the atom pb graph node.
74-
t_pb_graph_node* atom_pbgn = atom_ctx.lookup().atom_pb(atom)->pb_graph_node;
74+
t_pb_graph_node* atom_pbgn = atom_ctx.lookup().atom_pb_bimap().atom_pb(atom)->pb_graph_node;
7575

7676
// Print the flat placement information for this atom.
7777
fprintf(fp, "%s %d %d %d %d %d #%zu %s\n",

vpr/src/base/netlist_writer.cpp

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -859,7 +859,7 @@ class NetlistWriterVisitor : public NetlistVisitor {
859859
void visit_atom_impl(const t_pb* atom) override {
860860
auto& atom_ctx = g_vpr_ctx.atom();
861861

862-
auto atom_pb = atom_ctx.lookup().pb_atom(atom);
862+
auto atom_pb = atom_ctx.lookup().atom_pb_bimap().pb_atom(atom);
863863
if (atom_pb == AtomBlockId::INVALID()) {
864864
return;
865865
}
@@ -1787,7 +1787,7 @@ class NetlistWriterVisitor : public NetlistVisitor {
17871787
}
17881788

17891789
auto& atom_ctx = g_vpr_ctx.atom();
1790-
AtomBlockId blk_id = atom_ctx.lookup().pb_atom(atom);
1790+
AtomBlockId blk_id = atom_ctx.lookup().atom_pb_bimap().pb_atom(atom);
17911791
for (auto param : atom_ctx.netlist().block_params(blk_id)) {
17921792
params[param.first] = param.second;
17931793
}
@@ -1809,7 +1809,7 @@ class NetlistWriterVisitor : public NetlistVisitor {
18091809
tatum::NodeId find_tnode(const t_pb* atom, int cluster_pin_idx) {
18101810
auto& atom_ctx = g_vpr_ctx.atom();
18111811

1812-
AtomBlockId blk_id = atom_ctx.lookup().pb_atom(atom);
1812+
AtomBlockId blk_id = atom_ctx.lookup().atom_pb_bimap().pb_atom(atom);
18131813
ClusterBlockId clb_index = atom_ctx.lookup().atom_clb(blk_id);
18141814

18151815
auto key = std::make_pair(clb_index, cluster_pin_idx);
@@ -1840,7 +1840,7 @@ class NetlistWriterVisitor : public NetlistVisitor {
18401840
const t_pb* atom) { //LUT primitive
18411841
auto& atom_ctx = g_vpr_ctx.atom();
18421842

1843-
const t_model* model = atom_ctx.netlist().block_model(atom_ctx.lookup().pb_atom(atom));
1843+
const t_model* model = atom_ctx.netlist().block_model(atom_ctx.lookup().atom_pb_bimap().pb_atom(atom));
18441844
VTR_ASSERT(model->name == std::string(MODEL_NAMES));
18451845

18461846
#ifdef DEBUG_LUT_MASK
@@ -1851,7 +1851,7 @@ class NetlistWriterVisitor : public NetlistVisitor {
18511851
std::vector<int> permute = determine_lut_permutation(num_inputs, atom);
18521852

18531853
//Retrieve the truth table
1854-
const auto& truth_table = atom_ctx.netlist().block_truth_table(atom_ctx.lookup().pb_atom(atom));
1854+
const auto& truth_table = atom_ctx.netlist().block_truth_table(atom_ctx.lookup().atom_pb_bimap().pb_atom(atom));
18551855

18561856
//Apply the permutation
18571857
auto permuted_truth_table = permute_truth_table(truth_table, num_inputs, permute);
@@ -1896,7 +1896,7 @@ class NetlistWriterVisitor : public NetlistVisitor {
18961896
//
18971897
//We walk through the logical inputs to this atom (i.e. in the original truth table/netlist)
18981898
//and find the corresponding input in the implementation atom (i.e. in the current netlist)
1899-
auto ports = atom_ctx.netlist().block_input_ports(atom_ctx.lookup().pb_atom(atom_pb));
1899+
auto ports = atom_ctx.netlist().block_input_ports(atom_ctx.lookup().atom_pb_bimap().pb_atom(atom_pb));
19001900
if (ports.size() == 1) {
19011901
const t_pb_graph_node* gnode = atom_pb->pb_graph_node;
19021902
VTR_ASSERT(gnode->num_input_ports == 1);
@@ -2144,7 +2144,7 @@ class MergedNetlistWriterVisitor : public NetlistWriterVisitor {
21442144
void visit_atom_impl(const t_pb* atom) override {
21452145
auto& atom_ctx = g_vpr_ctx.atom();
21462146

2147-
auto atom_pb = atom_ctx.lookup().pb_atom(atom);
2147+
auto atom_pb = atom_ctx.lookup().atom_pb_bimap().pb_atom(atom);
21482148
if (atom_pb == AtomBlockId::INVALID()) {
21492149
return;
21502150
}

vpr/src/base/read_netlist.cpp

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -177,7 +177,7 @@ ClusteredNetlist read_netlist(const char* net_file,
177177

178178
//Reset atom/pb mapping (it is reloaded from the packed netlist file)
179179
for (auto blk_id : atom_ctx.netlist().blocks())
180-
atom_ctx.mutable_lookup().set_atom_pb(blk_id, nullptr);
180+
atom_ctx.mutable_lookup().mutable_atom_pb_bimap().set_atom_pb(blk_id, nullptr);
181181

182182
//Count the number of blocks for allocation
183183
bcount = pugiutil::count_children(top, "block", loc_data, pugiutil::ReqOpt::OPTIONAL);
@@ -197,7 +197,7 @@ ClusteredNetlist read_netlist(const char* net_file,
197197

198198
/* Error check */
199199
for (auto blk_id : atom_ctx.netlist().blocks()) {
200-
if (atom_ctx.lookup().atom_pb(blk_id) == nullptr) {
200+
if (atom_ctx.lookup().atom_pb_bimap().atom_pb(blk_id) == nullptr) {
201201
VPR_FATAL_ERROR(VPR_ERROR_NET_F,
202202
".blif file and .net file do not match, .net file missing atom %s.\n",
203203
atom_ctx.netlist().block_name(blk_id).c_str());
@@ -319,7 +319,7 @@ static void processComplexBlock(pugi::xml_node clb_block,
319319
}
320320

321321
//Parse all pbs and CB internal nets
322-
atom_ctx.mutable_lookup().set_atom_pb(AtomBlockId::INVALID(), clb_nlist->block_pb(index));
322+
atom_ctx.mutable_lookup().mutable_atom_pb_bimap().set_atom_pb(AtomBlockId::INVALID(), clb_nlist->block_pb(index));
323323

324324
clb_nlist->block_pb(index)->pb_graph_node = clb_nlist->block_type(index)->pb_graph_head;
325325
clb_nlist->block_pb(index)->pb_route = alloc_pb_route(clb_nlist->block_pb(index)->pb_graph_node);
@@ -474,7 +474,7 @@ static void processPb(pugi::xml_node Parent, const ClusterBlockId index, t_pb* p
474474

475475
//Update atom netlist mapping
476476
VTR_ASSERT(blk_id);
477-
atom_ctx.mutable_lookup().set_atom_pb(blk_id, pb);
477+
atom_ctx.mutable_lookup().mutable_atom_pb_bimap().set_atom_pb(blk_id, pb);
478478
atom_ctx.mutable_lookup().set_atom_clb(blk_id, index);
479479

480480
auto atom_attrs = atom_ctx.netlist().block_attrs(blk_id);
@@ -542,7 +542,7 @@ static void processPb(pugi::xml_node Parent, const ClusterBlockId index, t_pb* p
542542
pb->child_pbs[i][pb_index].name = vtr::strdup(name.value());
543543

544544
/* Parse all pbs and CB internal nets*/
545-
atom_ctx.mutable_lookup().set_atom_pb(AtomBlockId::INVALID(), &pb->child_pbs[i][pb_index]);
545+
atom_ctx.mutable_lookup().mutable_atom_pb_bimap().set_atom_pb(AtomBlockId::INVALID(), &pb->child_pbs[i][pb_index]);
546546

547547
auto mode = child.attribute("mode");
548548
pb->child_pbs[i][pb_index].mode = 0;
@@ -564,7 +564,7 @@ static void processPb(pugi::xml_node Parent, const ClusterBlockId index, t_pb* p
564564
} else {
565565
/* physical block has no used primitives but it may have used routing */
566566
pb->child_pbs[i][pb_index].name = nullptr;
567-
atom_ctx.mutable_lookup().set_atom_pb(AtomBlockId::INVALID(), &pb->child_pbs[i][pb_index]);
567+
atom_ctx.mutable_lookup().mutable_atom_pb_bimap().set_atom_pb(AtomBlockId::INVALID(), &pb->child_pbs[i][pb_index]);
568568

569569
auto lookahead1 = pugiutil::get_first_child(child, "outputs", loc_data, pugiutil::OPTIONAL);
570570
if (lookahead1) {
@@ -1180,7 +1180,7 @@ static void load_atom_pin_mapping(const ClusteredNetlist& clb_nlist) {
11801180
auto& atom_ctx = g_vpr_ctx.atom();
11811181

11821182
for (const AtomBlockId blk : atom_ctx.netlist().blocks()) {
1183-
const t_pb* pb = atom_ctx.lookup().atom_pb(blk);
1183+
const t_pb* pb = atom_ctx.lookup().atom_pb_bimap().atom_pb(blk);
11841184
VTR_ASSERT_MSG(pb, "Atom block must have a matching PB");
11851185

11861186
const t_pb_graph_node* gnode = pb->pb_graph_node;
@@ -1250,7 +1250,7 @@ void set_atom_pin_mapping(const ClusteredNetlist& clb_nlist, const AtomBlockId a
12501250
return;
12511251
}
12521252

1253-
const t_pb* atom_pb = atom_ctx.lookup().atom_pb(atom_blk);
1253+
const t_pb* atom_pb = atom_ctx.lookup().atom_pb_bimap().atom_pb(atom_blk);
12541254

12551255
//This finds the index within the atom port to which the current gpin
12561256
//is mapped. Note that this accounts for any applied pin rotations

vpr/src/draw/draw.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -797,7 +797,7 @@ ezgl::point2d atom_pin_draw_coord(AtomPinId pin) {
797797

798798
AtomBlockId blk = atom_ctx.netlist().pin_block(pin);
799799
ClusterBlockId clb_index = atom_ctx.lookup().atom_clb(blk);
800-
const t_pb_graph_node* pg_gnode = atom_ctx.lookup().atom_pb_graph_node(blk);
800+
const t_pb_graph_node* pg_gnode = atom_ctx.lookup().atom_pb_bimap().atom_pb_graph_node(blk);
801801

802802
t_draw_coords* draw_coords = get_draw_coords_vars();
803803
ezgl::rectangle pb_bbox = draw_coords->get_absolute_pb_bbox(clb_index,

vpr/src/draw/draw_floorplanning.cpp

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -149,8 +149,8 @@ void draw_constrained_atoms(ezgl::renderer* g) {
149149
auto atoms = constraints.get_part_atoms((PartitionId)partitionID);
150150

151151
for (const AtomBlockId atom_id : atoms) {
152-
if (atom_ctx.lookup().atom_pb(atom_id) != nullptr) {
153-
const t_pb* pb = atom_ctx.lookup().atom_pb(atom_id);
152+
if (atom_ctx.lookup().atom_pb_bimap().atom_pb(atom_id) != nullptr) {
153+
const t_pb* pb = atom_ctx.lookup().atom_pb_bimap().atom_pb(atom_id);
154154
auto color = kelly_max_contrast_colors_no_black[partitionID % (kelly_max_contrast_colors_no_black.size())];
155155
ClusterBlockId clb_index = atom_ctx.lookup().atom_clb(atom_id);
156156
auto type = cluster_ctx.clb_nlist.block_type(clb_index);
@@ -306,7 +306,7 @@ static GtkTreeModel* create_and_fill_model() {
306306
-1);
307307

308308
for (AtomBlockId const_atom : atoms) {
309-
std::string atom_name = (atom_ctx.lookup().atom_pb(const_atom))->name;
309+
std::string atom_name = (atom_ctx.lookup().atom_pb_bimap().atom_pb(const_atom))->name;
310310
gtk_tree_store_append(store, &child_iter, &iter);
311311
gtk_tree_store_set(store, &child_iter,
312312
COL_NAME, atom_name.c_str(),

vpr/src/draw/intra_logic_block.cpp

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -530,13 +530,13 @@ void collect_pb_atoms_recurr(const t_pb* pb, std::vector<AtomBlockId>& atoms) {
530530

531531
if (pb->is_primitive()) {
532532
//Base case
533-
AtomBlockId blk = atom_ctx.lookup().pb_atom(pb);
533+
AtomBlockId blk = atom_ctx.lookup().atom_pb_bimap().pb_atom(pb);
534534
if (blk) {
535535
atoms.push_back(blk);
536536
}
537537
} else {
538538
//Recurse
539-
VTR_ASSERT_DEBUG(atom_ctx.lookup().pb_atom(pb) == AtomBlockId::INVALID());
539+
VTR_ASSERT_DEBUG(atom_ctx.lookup().atom_pb_bimap().pb_atom(pb) == AtomBlockId::INVALID());
540540

541541
for (int itype = 0; itype < pb->get_num_child_types(); ++itype) {
542542
for (int ichild = 0; ichild < pb->get_num_children_of_type(itype); ++ichild) {
@@ -575,14 +575,14 @@ void draw_logical_connections(ezgl::renderer* g) {
575575
continue; /* Don't Draw */
576576
}
577577

578-
const t_pb_graph_node* src_pb_gnode = atom_ctx.lookup().atom_pb_graph_node(src_blk_id);
578+
const t_pb_graph_node* src_pb_gnode = atom_ctx.lookup().atom_pb_bimap().atom_pb_graph_node(src_blk_id);
579579
bool src_is_selected = sel_subblk_info.is_in_selected_subtree(src_pb_gnode, src_clb);
580580
bool src_is_src_of_selected = sel_subblk_info.is_source_of_selected(src_pb_gnode, src_clb);
581581

582582
// iterate over the sinks
583583
for (auto sink_pin_id : atom_ctx.netlist().net_sinks(net_id)) {
584584
AtomBlockId sink_blk_id = atom_ctx.netlist().pin_block(sink_pin_id);
585-
const t_pb_graph_node* sink_pb_gnode = atom_ctx.lookup().atom_pb_graph_node(sink_blk_id);
585+
const t_pb_graph_node* sink_pb_gnode = atom_ctx.lookup().atom_pb_bimap().atom_pb_graph_node(sink_blk_id);
586586
ClusterBlockId sink_clb = atom_ctx.lookup().atom_clb(sink_blk_id);
587587
int sink_layer_num = block_locs[sink_clb].loc.layer;
588588

@@ -807,7 +807,7 @@ void t_selected_sub_block_info::set(t_pb* new_selected_sub_block, const ClusterB
807807

808808
for (auto blk_id : atom_ctx.netlist().blocks()) {
809809
const ClusterBlockId clb = atom_ctx.lookup().atom_clb(blk_id);
810-
const t_pb_graph_node* pb_graph_node = atom_ctx.lookup().atom_pb_graph_node(blk_id);
810+
const t_pb_graph_node* pb_graph_node = atom_ctx.lookup().atom_pb_bimap().atom_pb_graph_node(blk_id);
811811
// find the atom block that corrisponds to this pb.
812812
if (is_in_selected_subtree(pb_graph_node, clb)) {
813813
//Collect the sources of all nets driving this node
@@ -818,7 +818,7 @@ void t_selected_sub_block_info::set(t_pb* new_selected_sub_block, const ClusterB
818818
AtomBlockId src_blk = atom_ctx.netlist().pin_block(driver_pin_id);
819819

820820
const ClusterBlockId src_clb = atom_ctx.lookup().atom_clb(src_blk);
821-
const t_pb_graph_node* src_pb_graph_node = atom_ctx.lookup().atom_pb_graph_node(src_blk);
821+
const t_pb_graph_node* src_pb_graph_node = atom_ctx.lookup().atom_pb_bimap().atom_pb_graph_node(src_blk);
822822

823823
sources.insert(gnode_clb_pair(src_pb_graph_node, src_clb));
824824
}
@@ -830,7 +830,7 @@ void t_selected_sub_block_info::set(t_pb* new_selected_sub_block, const ClusterB
830830
AtomBlockId sink_blk = atom_ctx.netlist().pin_block(sink_pin_id);
831831

832832
const ClusterBlockId sink_clb = atom_ctx.lookup().atom_clb(sink_blk);
833-
const t_pb_graph_node* sink_pb_graph_node = atom_ctx.lookup().atom_pb_graph_node(sink_blk);
833+
const t_pb_graph_node* sink_pb_graph_node = atom_ctx.lookup().atom_pb_bimap().atom_pb_graph_node(sink_blk);
834834

835835
sinks.insert(gnode_clb_pair(sink_pb_graph_node, sink_clb));
836836
}
@@ -882,7 +882,7 @@ t_selected_sub_block_info::clb_pin_tuple::clb_pin_tuple(ClusterBlockId clb_index
882882
t_selected_sub_block_info::clb_pin_tuple::clb_pin_tuple(const AtomPinId atom_pin) {
883883
auto& atom_ctx = g_vpr_ctx.atom();
884884
clb_index = atom_ctx.lookup().atom_clb(atom_ctx.netlist().pin_block(atom_pin));
885-
pb_gnode = atom_ctx.lookup().atom_pb_graph_node(atom_ctx.netlist().pin_block(atom_pin));
885+
pb_gnode = atom_ctx.lookup().atom_pb_bimap().atom_pb_graph_node(atom_ctx.netlist().pin_block(atom_pin));
886886
}
887887

888888
bool t_selected_sub_block_info::clb_pin_tuple::operator==(const clb_pin_tuple& rhs) const {

0 commit comments

Comments
 (0)