Index: trunk/src/plugins/rt_topo/laa1.c =================================================================== --- trunk/src/plugins/rt_topo/laa1.c (revision 1469) +++ trunk/src/plugins/rt_topo/laa1.c (revision 1470) @@ -66,10 +66,13 @@ e->fixed = 1; e->user_ptr = obj; p1->user_long |= p2->user_long |= e->user_long |= layer_bits(ctx, obj); + p1->user_ptr = obj; + p2->user_ptr = obj; break; case RTRND_VIA: p1 = laa_mst_add_point(mst, obj->via.x, obj->via.y, -1); p1->user_long |= layer_bits_all(ctx); + p1->user_ptr = obj; break; case RTRND_ARC: @@ -89,6 +92,7 @@ } p1 = laa_mst_add_point(mst, cx, cy, -1); p1->user_long = layer_bits(ctx, obj); + p1->user_ptr = obj; } else { #warning TODO: non-terminal poly heuristics @@ -139,8 +143,18 @@ /* collect mst edges as 2-nets */ for(n = 0; n < mst.edges.used; n++) { ustn_edge_t *edge = mst.edges.array[n]; - rt_topo_laa_2net_t *tn = calloc(sizeof(rt_topo_laa_2net_t), 1); + rt_topo_laa_2net_t *tn; + rtrnd_any_obj_t *o1, *o2; + /* do not route if start and end are in the same netseg (they are + already connected) */ + o1 = edge->p1->user_ptr; + o2 = edge->p2->user_ptr; + if ((o1 != NULL) && (o2 != NULL) && (o1->hdr.netseg == o2->hdr.netseg)) + continue; + + tn = calloc(sizeof(rt_topo_laa_2net_t), 1); + /* steiner points are vias, potentially using any layer */ if ((edge->p1->user_long == 0) && !edge->p1->fixed) edge->p1->user_long = layer_bits_all(ctx); if ((edge->p2->user_long == 0) && !edge->p2->fixed) edge->p2->user_long = layer_bits_all(ctx);