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