Skip to content

Commit dd3ddef

Browse files
committed
Small bug fixes
Signed-off-by: Maciej Dudek <[email protected]>
1 parent 69e5725 commit dd3ddef

File tree

1 file changed

+20
-14
lines changed

1 file changed

+20
-14
lines changed

vpr/src/route/rr_graph_fpga_interchange.cpp

Lines changed: 20 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -497,7 +497,8 @@ struct RR_Graph_Builder {
497497
}
498498
}
499499
existing_nodes.erase(vertex->loc);
500-
delete (vertex);
500+
VTR_ASSERT(vertex != root_node);
501+
delete vertex;
501502
}
502503

503504
for (auto& node : existing_nodes) {
@@ -518,11 +519,11 @@ struct RR_Graph_Builder {
518519
* Removes dangling nodes from a graph represented by the root node.
519520
* Dangling nodes are nodes that do not connect to a pin, a pip or other non-dangling node.
520521
*/
521-
int reduce_graph_and_count_nodes(node_* root) {
522+
int reduce_graph_and_count_nodes(node_*& root) {
522523
int cnt = 0;
523524
std::queue<node_*> walker;
524525
std::stack<node_*> back_walker;
525-
walker.push(root);
526+
walker.emplace(root);
526527
root->visited = root;
527528
bool all_nulls;
528529
while (!walker.empty()) {
@@ -559,7 +560,9 @@ struct RR_Graph_Builder {
559560
temp->links[(i + 2) % 4] = nullptr;
560561
}
561562
}
562-
delete (vertex);
563+
if (vertex == root)
564+
root = nullptr;
565+
delete vertex;
563566
} else if (vertex->on_route) {
564567
vertex->visited->on_route = true;
565568
if (vertex->visited->segment_id == -1)
@@ -577,12 +580,12 @@ struct RR_Graph_Builder {
577580

578581
std::queue<node_*> walker;
579582
std::stack<node_*> back_walker;
580-
walker.emplace(root);
583+
walker.push(root);
581584
bool all_nulls, is_chanx, is_chany;
582585
while (!walker.empty()) {
583586
node_* vertex = walker.front();
584587
walker.pop();
585-
back_walker.emplace(vertex);
588+
back_walker.push(vertex);
586589
is_chany = false;
587590
is_chanx = vertex->has_pins;
588591
all_nulls = true;
@@ -594,7 +597,7 @@ struct RR_Graph_Builder {
594597
is_chany = i == 1 ? true : is_chany;
595598
}
596599
if (vertex->links[i]->visited == vertex) {
597-
walker.emplace(vertex->links[i]);
600+
walker.push(vertex->links[i]);
598601
}
599602
}
600603
}
@@ -717,17 +720,18 @@ struct RR_Graph_Builder {
717720
* Clean up of earlier stages
718721
*/
719722
void delete_nodes(node_* root) {
720-
std::queue<node_*> walker;
721-
std::stack<node_*> back_walker;
722-
walker.emplace(root);
723+
std::queue<node_*, std::list<node_*>> walker;
724+
std::stack<node_*, std::list<node_*>> back_walker;
725+
walker.push(root);
723726
while (!walker.empty()) {
724727
node_* vertex = walker.front();
725728
walker.pop();
726-
back_walker.emplace(vertex);
729+
back_walker.push(vertex);
730+
location loc = vertex->loc;
727731
for (int i = 0; i < 4; ++i) {
728732
if (vertex->links[i] != nullptr) {
729733
if (vertex->links[i]->visited == vertex) {
730-
walker.emplace(vertex->links[i]);
734+
walker.push(vertex->links[i]);
731735
}
732736
}
733737
}
@@ -742,7 +746,7 @@ struct RR_Graph_Builder {
742746
temp->links[(i + 2) % 4] = nullptr;
743747
}
744748
}
745-
delete (vertex);
749+
delete vertex;
746750
}
747751
}
748752

@@ -752,7 +756,7 @@ struct RR_Graph_Builder {
752756
void process_nodes() {
753757
auto wires = ar_.getWires();
754758
for (auto const& node : ar_.getNodes()) {
755-
std::tuple<int, int> base_wire_{wires[node.getWires()[0]].getTile(), wires[node.getWires()[0]].getWire()};
759+
std::tuple<int, int> base_wire_(wires[node.getWires()[0]].getTile(), wires[node.getWires()[0]].getWire());
756760
int node_id = wire_to_node_[base_wire_];
757761
std::set<location> all_possible_tiles = node_to_locs_[node_id];
758762
int root_x, root_y;
@@ -766,6 +770,8 @@ struct RR_Graph_Builder {
766770

767771
node_* root = build_node_graph(node_id, all_possible_tiles, empties, root_x, root_y);
768772
int div = reduce_graph_and_count_nodes(root);
773+
if (root == nullptr)
774+
continue;
769775
float capacitance, resistance;
770776
auto model = ar_.getNodeTimings()[node.getNodeTiming()];
771777
capacitance = get_corner_value(model.getCapacitance(), "slow", "typ") / div;

0 commit comments

Comments
 (0)