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