@@ -973,6 +973,7 @@ void init_draw_coords(float width_val) {
973
973
t_draw_state* draw_state = get_draw_state_vars ();
974
974
t_draw_coords* draw_coords = get_draw_coords_vars ();
975
975
auto & device_ctx = g_vpr_ctx.device ();
976
+ const auto & rr_graph = device_ctx.rr_graph ;
976
977
977
978
if (!draw_state->show_graphics && !draw_state->save_graphics
978
979
&& draw_state->graphics_commands .empty ())
@@ -983,9 +984,10 @@ void init_draw_coords(float width_val) {
983
984
draw_state->draw_rr_node = (t_draw_rr_node*)vtr::realloc (
984
985
draw_state->draw_rr_node ,
985
986
(device_ctx.rr_nodes .size ()) * sizeof (t_draw_rr_node));
986
- for (size_t i = 0 ; i < device_ctx.rr_nodes .size (); i++) {
987
- draw_state->draw_rr_node [i].color = DEFAULT_RR_NODE_COLOR;
988
- draw_state->draw_rr_node [i].node_highlighted = false ;
987
+ /* FIXME: the type cast should be eliminated by making draw_rr_node adapt RRNodeId */
988
+ for (const RRNodeId& rr_id : rr_graph.nodes ()) {
989
+ draw_state->draw_rr_node [(size_t )rr_id].color = DEFAULT_RR_NODE_COLOR;
990
+ draw_state->draw_rr_node [(size_t )rr_id].node_highlighted = false ;
989
991
}
990
992
}
991
993
draw_coords->tile_width = width_val;
@@ -1310,28 +1312,28 @@ static void draw_routing_costs(ezgl::renderer* g) {
1310
1312
float max_cost = -min_cost;
1311
1313
std::vector<float > rr_node_costs (device_ctx.rr_nodes .size (), 0 .);
1312
1314
1313
- for (size_t inode = 0 ; inode < device_ctx.rr_nodes . size (); inode++ ) {
1315
+ for (const RRNodeId& rr_id : device_ctx.rr_graph . nodes () ) {
1314
1316
float cost = 0 .;
1315
1317
if (draw_state->show_routing_costs == DRAW_TOTAL_ROUTING_COSTS
1316
1318
|| draw_state->show_routing_costs
1317
1319
== DRAW_LOG_TOTAL_ROUTING_COSTS) {
1318
- cost = get_single_rr_cong_cost (inode ,
1320
+ cost = get_single_rr_cong_cost (( size_t )rr_id ,
1319
1321
get_draw_state_vars ()->pres_fac );
1320
1322
1321
1323
} else if (draw_state->show_routing_costs == DRAW_BASE_ROUTING_COSTS) {
1322
- cost = get_single_rr_cong_base_cost (inode );
1324
+ cost = get_single_rr_cong_base_cost (( size_t )rr_id );
1323
1325
1324
1326
} else if (draw_state->show_routing_costs == DRAW_ACC_ROUTING_COSTS
1325
1327
|| draw_state->show_routing_costs
1326
1328
== DRAW_LOG_ACC_ROUTING_COSTS) {
1327
- cost = get_single_rr_cong_acc_cost (inode );
1329
+ cost = get_single_rr_cong_acc_cost (( size_t )rr_id );
1328
1330
1329
1331
} else {
1330
1332
VTR_ASSERT (
1331
1333
draw_state->show_routing_costs == DRAW_PRES_ROUTING_COSTS
1332
1334
|| draw_state->show_routing_costs
1333
1335
== DRAW_LOG_PRES_ROUTING_COSTS);
1334
- cost = get_single_rr_cong_pres_cost (inode ,
1336
+ cost = get_single_rr_cong_pres_cost (( size_t )rr_id ,
1335
1337
get_draw_state_vars ()->pres_fac );
1336
1338
}
1337
1339
@@ -1341,15 +1343,15 @@ static void draw_routing_costs(ezgl::renderer* g) {
1341
1343
== DRAW_LOG_PRES_ROUTING_COSTS) {
1342
1344
cost = std::log (cost);
1343
1345
}
1344
- rr_node_costs[inode ] = cost;
1346
+ rr_node_costs[( size_t )rr_id ] = cost;
1345
1347
min_cost = std::min (min_cost, cost);
1346
1348
max_cost = std::max (max_cost, cost);
1347
1349
}
1348
1350
1349
1351
// Hide min value, draw_rr_costs() ignores NaN's
1350
- for (size_t inode = 0 ; inode < device_ctx.rr_nodes . size (); inode++ ) {
1351
- if (rr_node_costs[inode ] == min_cost) {
1352
- rr_node_costs[inode ] = NAN;
1352
+ for (const RRNodeId& rr_id : device_ctx.rr_graph . nodes () ) {
1353
+ if (rr_node_costs[( size_t )rr_id ] == min_cost) {
1354
+ rr_node_costs[( size_t )rr_id ] = NAN;
1353
1355
}
1354
1356
}
1355
1357
char msg[vtr::bufsize];
@@ -1458,11 +1460,11 @@ void draw_rr(ezgl::renderer* g) {
1458
1460
1459
1461
g->set_line_dash (ezgl::line_dash::none);
1460
1462
1461
- for (size_t inode = 0 ; inode < device_ctx.rr_nodes . size (); inode++ ) {
1462
- RRNodeId rr_node = RRNodeId (inode) ;
1463
+ for (const RRNodeId& rr_id : device_ctx.rr_graph . nodes () ) {
1464
+ size_t inode = ( size_t )rr_id ;
1463
1465
if (!draw_state->draw_rr_node [inode].node_highlighted ) {
1464
1466
/* If not highlighted node, assign color based on type. */
1465
- switch (rr_graph.node_type (rr_node )) {
1467
+ switch (rr_graph.node_type (rr_id )) {
1466
1468
case CHANX:
1467
1469
case CHANY:
1468
1470
draw_state->draw_rr_node [inode].color = DEFAULT_RR_NODE_COLOR;
@@ -1485,7 +1487,7 @@ void draw_rr(ezgl::renderer* g) {
1485
1487
}
1486
1488
1487
1489
/* Now call drawing routines to draw the node. */
1488
- switch (rr_graph.node_type (rr_node )) {
1490
+ switch (rr_graph.node_type (rr_id )) {
1489
1491
case SINK:
1490
1492
draw_rr_src_sink (inode, draw_state->draw_rr_node [inode].color , g);
1491
1493
break ;
@@ -1516,7 +1518,7 @@ void draw_rr(ezgl::renderer* g) {
1516
1518
1517
1519
default :
1518
1520
vpr_throw (VPR_ERROR_OTHER, __FILE__, __LINE__,
1519
- " in draw_rr: Unexpected rr_node type: %d.\n " , rr_graph.node_type (rr_node ));
1521
+ " in draw_rr: Unexpected rr_node type: %d.\n " , rr_graph.node_type (rr_id ));
1520
1522
}
1521
1523
}
1522
1524
@@ -2718,22 +2720,22 @@ void draw_highlight_fan_in_fan_out(const std::set<int>& nodes) {
2718
2720
}
2719
2721
2720
2722
/* Highlight the nodes that can fanin to this node in blue. */
2721
- for (size_t inode = 0 ; inode < device_ctx. rr_nodes . size (); inode++ ) {
2722
- for (t_edge_size iedge = 0 , l = rr_graph.num_edges (RRNodeId ( inode) ); iedge < l;
2723
+ for (const RRNodeId& inode : rr_graph. nodes () ) {
2724
+ for (t_edge_size iedge = 0 , l = rr_graph.num_edges (inode); iedge < l;
2723
2725
iedge++) {
2724
- int fanout_node = size_t (rr_graph.edge_sink_node (RRNodeId (node) , iedge));
2726
+ int fanout_node = size_t (rr_graph.edge_sink_node (inode , iedge));
2725
2727
if (fanout_node == node) {
2726
2728
if (draw_state->draw_rr_node [node].color == ezgl::MAGENTA
2727
- && draw_state->draw_rr_node [inode].color
2729
+ && draw_state->draw_rr_node [size_t ( inode) ].color
2728
2730
!= ezgl::MAGENTA) {
2729
2731
// If node is highlighted, highlight its fanin
2730
- draw_state->draw_rr_node [inode].color = ezgl::BLUE;
2731
- draw_state->draw_rr_node [inode].node_highlighted = true ;
2732
+ draw_state->draw_rr_node [size_t ( inode) ].color = ezgl::BLUE;
2733
+ draw_state->draw_rr_node [size_t ( inode) ].node_highlighted = true ;
2732
2734
} else if (draw_state->draw_rr_node [node].color
2733
2735
== ezgl::WHITE) {
2734
2736
// If node is de-highlighted, de-highlight its fanin
2735
- draw_state->draw_rr_node [inode].color = DEFAULT_RR_NODE_COLOR;
2736
- draw_state->draw_rr_node [inode].node_highlighted = false ;
2737
+ draw_state->draw_rr_node [size_t ( inode) ].color = DEFAULT_RR_NODE_COLOR;
2738
+ draw_state->draw_rr_node [size_t ( inode) ].node_highlighted = false ;
2737
2739
}
2738
2740
}
2739
2741
}
@@ -2755,17 +2757,17 @@ static int draw_check_rr_node_hit(float click_x, float click_y) {
2755
2757
auto & device_ctx = g_vpr_ctx.device ();
2756
2758
const auto & rr_graph = device_ctx.rr_graph ;
2757
2759
2758
- for (size_t inode = 0 ; inode < device_ctx.rr_nodes . size (); inode++ ) {
2759
- RRNodeId rr_node = RRNodeId (inode) ;
2760
- switch (rr_graph.node_type (rr_node )) {
2760
+ for (const RRNodeId& rr_id : device_ctx.rr_graph . nodes () ) {
2761
+ size_t inode = ( size_t )rr_id ;
2762
+ switch (rr_graph.node_type (rr_id )) {
2761
2763
case IPIN:
2762
2764
case OPIN: {
2763
- int i = rr_graph.node_xlow (rr_node );
2764
- int j = rr_graph.node_ylow (rr_node );
2765
+ int i = rr_graph.node_xlow (rr_id );
2766
+ int j = rr_graph.node_ylow (rr_id );
2765
2767
t_physical_tile_type_ptr type = device_ctx.grid [i][j].type ;
2766
2768
int width_offset = device_ctx.grid [i][j].width_offset ;
2767
2769
int height_offset = device_ctx.grid [i][j].height_offset ;
2768
- int ipin = rr_graph.node_pin_num (rr_node );
2770
+ int ipin = rr_graph.node_pin_num (rr_id );
2769
2771
float xcen, ycen;
2770
2772
for (const e_side& iside : SIDES) {
2771
2773
// If pin exists on this side of the block, then get pin coordinates
@@ -3053,7 +3055,8 @@ void deselect_all() {
3053
3055
for (auto net_id : cluster_ctx.clb_nlist .nets ())
3054
3056
draw_state->net_color [net_id] = ezgl::BLACK;
3055
3057
3056
- for (size_t i = 0 ; i < device_ctx.rr_nodes .size (); i++) {
3058
+ for (const RRNodeId& rr_id : device_ctx.rr_graph .nodes ()) {
3059
+ size_t i = (size_t )rr_id;
3057
3060
draw_state->draw_rr_node [i].color = DEFAULT_RR_NODE_COLOR;
3058
3061
draw_state->draw_rr_node [i].node_highlighted = false ;
3059
3062
}
@@ -4140,17 +4143,17 @@ static void draw_router_expansion_costs(ezgl::renderer* g) {
4140
4143
4141
4144
std::vector<float > rr_costs (device_ctx.rr_nodes .size ());
4142
4145
4143
- for (size_t inode = 0 ; inode < device_ctx.rr_nodes . size (); ++inode ) {
4146
+ for (const RRNodeId& rr_id : device_ctx.rr_graph . nodes () ) {
4144
4147
float cost = get_router_expansion_cost (
4145
- routing_ctx.rr_node_route_inf [inode ],
4148
+ routing_ctx.rr_node_route_inf [( size_t )rr_id ],
4146
4149
draw_state->show_router_expansion_cost );
4147
- rr_costs[inode ] = cost;
4150
+ rr_costs[( size_t )rr_id ] = cost;
4148
4151
}
4149
4152
4150
4153
bool all_nan = true ;
4151
- for (size_t inode = 0 ; inode < device_ctx.rr_nodes . size (); ++inode ) {
4152
- if (std::isinf (rr_costs[inode ])) {
4153
- rr_costs[inode ] = NAN;
4154
+ for (const RRNodeId& rr_id : device_ctx.rr_graph . nodes () ) {
4155
+ if (std::isinf (rr_costs[( size_t )rr_id ])) {
4156
+ rr_costs[( size_t )rr_id ] = NAN;
4154
4157
} else {
4155
4158
all_nan = false ;
4156
4159
}
@@ -4199,11 +4202,11 @@ static void draw_rr_costs(ezgl::renderer* g, const std::vector<float>& rr_costs,
4199
4202
4200
4203
float min_cost = std::numeric_limits<float >::infinity ();
4201
4204
float max_cost = -min_cost;
4202
- for (size_t inode = 0 ; inode < device_ctx.rr_nodes . size (); inode++ ) {
4203
- if (std::isnan (rr_costs[inode ])) continue ;
4205
+ for (const RRNodeId& rr_id : device_ctx.rr_graph . nodes () ) {
4206
+ if (std::isnan (rr_costs[( size_t )rr_id ])) continue ;
4204
4207
4205
- min_cost = std::min (min_cost, rr_costs[inode ]);
4206
- max_cost = std::max (max_cost, rr_costs[inode ]);
4208
+ min_cost = std::min (min_cost, rr_costs[( size_t )rr_id ]);
4209
+ max_cost = std::max (max_cost, rr_costs[( size_t )rr_id ]);
4207
4210
}
4208
4211
if (min_cost == std::numeric_limits<float >::infinity ()) min_cost = 0 ;
4209
4212
if (max_cost == -std::numeric_limits<float >::infinity ()) max_cost = 0 ;
0 commit comments