diff --git a/vpr/src/device/rr_graph_obj.cpp b/vpr/src/device/rr_graph_obj.cpp index 2df4a77bf..316bc6e87 100644 --- a/vpr/src/device/rr_graph_obj.cpp +++ b/vpr/src/device/rr_graph_obj.cpp @@ -1120,19 +1120,23 @@ void RRGraph::rebuild_node_edges() { auto is_incoming_edge = [&](const RREdgeId edge) { return edge_sink_node(edge) == node; }; - std::partition(node_edges_[node].get(), - node_edges_[node].get() + node_num_in_edges_[node] + node_num_out_edges_[node], - is_incoming_edge); + /* Use stable_partition to keep the relative order, + * This is mainly for comparing the RRGraph write with rr_node writer + * so that it is easy to check consistency + */ + std::stable_partition(node_edges_[node].get(), + node_edges_[node].get() + node_num_in_edges_[node] + node_num_out_edges_[node], + is_incoming_edge); //Partition incoming by configurable/non-configurable - std::partition(node_edges_[node].get(), - node_edges_[node].get() + node_num_in_edges_[node], - is_configurable_edge); + std::stable_partition(node_edges_[node].get(), + node_edges_[node].get() + node_num_in_edges_[node], + is_configurable_edge); //Partition outgoing by configurable/non-configurable - std::partition(node_edges_[node].get() + node_num_in_edges_[node], - node_edges_[node].get() + node_num_in_edges_[node] + node_num_out_edges_[node], - is_configurable_edge); + std::stable_partition(node_edges_[node].get() + node_num_in_edges_[node], + node_edges_[node].get() + node_num_in_edges_[node] + node_num_out_edges_[node], + is_configurable_edge); #if 0 //TODO: Sanity check remove! diff --git a/vpr/src/device/write_xml_rr_graph_obj.cpp b/vpr/src/device/write_xml_rr_graph_obj.cpp index 10cdb273e..a329b7bc0 100644 --- a/vpr/src/device/write_xml_rr_graph_obj.cpp +++ b/vpr/src/device/write_xml_rr_graph_obj.cpp @@ -172,6 +172,8 @@ void write_rr_graph_edges(fstream &fp, const RRGraph& rr_graph) { fp << "\t" << endl; for (auto node : rr_graph.nodes()) { + /* Sort the edges by the ids of sink nodes */ + std::vector sorted_out_edge_ids; for (auto edge: rr_graph.node_out_edges(node)) { fp << "\t\t