56 DeviceOp device = getOperation();
57 OpBuilder builder = OpBuilder::atBlockTerminator(device.getBody());
59 for (
auto broadcastpacket : device.getOps<BroadcastPacketOp>()) {
60 Region &r = broadcastpacket.getPorts();
62 Port sourcePort = broadcastpacket.port();
63 TileOp srcTile = cast<TileOp>(broadcastpacket.getTile().getDefiningOp());
65 for (Operation &Op : b.getOperations()) {
66 if (BPIDOp bpid = dyn_cast<BPIDOp>(Op)) {
67 Region &r_bpid = bpid.getPorts();
68 Block &b_bpid = r_bpid.front();
69 int flowID = bpid.IDInt();
70 builder.setInsertionPointAfter(broadcastpacket);
71 PacketFlowOp pkFlow = PacketFlowOp::create(
72 builder, broadcastpacket.getLoc(), flowID,
nullptr,
nullptr);
73 Region &r_pkFlow = pkFlow.getPorts();
74 Block *b_pkFlow = builder.createBlock(&r_pkFlow);
75 builder.setInsertionPointToStart(b_pkFlow);
76 PacketSourceOp::create(builder, broadcastpacket.getLoc(), srcTile,
77 sourcePort.bundle, sourcePort.channel);
78 for (Operation &op : b_bpid.getOperations()) {
79 if (BPDestOp bpdest = dyn_cast<BPDestOp>(op)) {
80 TileOp destTile = cast<TileOp>(bpdest.getTile().getDefiningOp());
81 Port destPort = bpdest.port();
82 builder.setInsertionPointToEnd(b_pkFlow);
83 PacketDestOp::create(builder, bpdest.getLoc(), destTile,
84 destPort.bundle, destPort.channel);
87 builder.setInsertionPointToEnd(b_pkFlow);
88 EndOp::create(builder, broadcastpacket.getLoc());
93 ConversionTarget target(getContext());
94 RewritePatternSet patterns(&getContext());
98 if (failed(applyPartialConversion(device, target, std::move(patterns))))