From 73c5be9308f73a6363a926cab771cea5d6f0ad0b Mon Sep 17 00:00:00 2001 From: Alessandro Comodi Date: Fri, 13 Nov 2020 13:15:59 +0100 Subject: [PATCH] rr_graph_util: add get fan-in lists function Signed-off-by: Alessandro Comodi --- vpr/src/route/rr_graph_util.cpp | 17 +++++++++++++++++ vpr/src/route/rr_graph_util.h | 6 ++++++ 2 files changed, 23 insertions(+) diff --git a/vpr/src/route/rr_graph_util.cpp b/vpr/src/route/rr_graph_util.cpp index 9c7f5ef1488..c8b425182c3 100644 --- a/vpr/src/route/rr_graph_util.cpp +++ b/vpr/src/route/rr_graph_util.cpp @@ -177,3 +177,20 @@ void reorder_rr_graph_nodes(const t_router_opts& router_opts) { std::get<2>(edge)); }); } + +vtr::vector> get_fan_in_list() { + auto& rr_nodes = g_vpr_ctx.device().rr_nodes; + + vtr::vector> node_fan_in_list; + + node_fan_in_list.resize(rr_nodes.size(), std::vector(0)); + node_fan_in_list.shrink_to_fit(); + + //Walk the graph and increment fanin on all dwnstream nodes + rr_nodes.for_each_edge( + [&](RREdgeId edge, __attribute__((unused)) RRNodeId src, RRNodeId sink) { + node_fan_in_list[sink].push_back(edge); + }); + + return node_fan_in_list; +} diff --git a/vpr/src/route/rr_graph_util.h b/vpr/src/route/rr_graph_util.h index e890db2f053..514f396f0d2 100644 --- a/vpr/src/route/rr_graph_util.h +++ b/vpr/src/route/rr_graph_util.h @@ -1,10 +1,16 @@ #ifndef RR_GRAPH_UTIL_H #define RR_GRAPH_UTIL_H +#include "vpr_types.h" + int seg_index_of_cblock(t_rr_type from_rr_type, int to_node); int seg_index_of_sblock(int from_node, int to_node); void reorder_rr_graph_nodes(const t_router_opts& router_opts); +// This function generates and returns a vector indexed by RRNodeId +// containing a list of fan-in edges for each node. +vtr::vector> get_fan_in_list(); + #endif