@@ -381,7 +381,7 @@ void outlineAIECores(OpBuilder &builder, AIE::DeviceOp aie_device,
381
381
fn = func::FuncOp::create (aie_device.getLoc (), call.getCallee (),
382
382
call.getCalleeType ());
383
383
fn.setPrivate ();
384
- aie_device.push_back ( fn);
384
+ aie_device.insert (aie_device. getBody ()-> getTerminator (), fn);
385
385
}
386
386
}
387
387
});
@@ -543,8 +543,8 @@ void createAIEModulesAndOutlineCores(
543
543
AIE::AIEDeviceAttr::get (builder.getContext (), options.device ));
544
544
aie_dev->setAttr (SymbolTable::getSymbolAttrName (),
545
545
StringAttr::get (builder.getContext (), segment_name));
546
-
547
- aie_dev.getRegion (). emplaceBlock ( );
546
+ AIE::DeviceOp::ensureTerminator (aie_dev. getRegion (), builder,
547
+ aie_dev.getLoc () );
548
548
seg.walk ([&](xilinx::air::HerdOp h) {
549
549
aie_modules.push_back ({aie_dev, h});
550
550
});
@@ -568,7 +568,8 @@ void createAIEModulesAndOutlineCores(
568
568
AIE::AIEDeviceAttr::get (builder.getContext (), options.device ));
569
569
aie_dev->setAttr (SymbolTable::getSymbolAttrName (),
570
570
StringAttr::get (builder.getContext (), segment_name));
571
- aie_dev.getRegion ().emplaceBlock ();
571
+ AIE::DeviceOp::ensureTerminator (aie_dev.getRegion (), builder,
572
+ aie_dev.getLoc ());
572
573
aie_modules.push_back ({aie_dev, herd});
573
574
};
574
575
for (auto &p : aie_modules) {
@@ -1715,7 +1716,7 @@ class AIRToAIEPass : public air::impl::AIRToAIEBase<AIRToAIEPass> {
1715
1716
return flowOp;
1716
1717
1717
1718
OpBuilder builder (aie_device);
1718
- builder.setInsertionPointToEnd (aie_device.getBody ());
1719
+ builder.setInsertionPoint (aie_device.getBody ()-> getTerminator ());
1719
1720
return builder.create <AIE::FlowOp>(builder.getUnknownLoc (), source,
1720
1721
sourceBundle, sourceChannel, dest,
1721
1722
destBundle, destChannel);
@@ -1801,7 +1802,7 @@ class AIRToAIEPass : public air::impl::AIRToAIEBase<AIRToAIEPass> {
1801
1802
return packetFlowOp;
1802
1803
}
1803
1804
1804
- builder.setInsertionPointToEnd (aie_device.getBody ());
1805
+ builder.setInsertionPoint (aie_device.getBody ()-> getTerminator ());
1805
1806
return createPacketFlowOp (builder, flowID, source, sourceBundle,
1806
1807
sourceChannel, dest, destBundle, destChannel);
1807
1808
}
@@ -2984,7 +2985,7 @@ class AIRToAIEPass : public air::impl::AIRToAIEBase<AIRToAIEPass> {
2984
2985
// Generate aie.shim_dma op
2985
2986
AIE::ShimDMAOp shimDMA = getShimDMAOp (tile);
2986
2987
if (!shimDMA) {
2987
- builder.setInsertionPointToEnd (device.getBody ());
2988
+ builder.setInsertionPoint (device.getBody ()-> getTerminator ());
2988
2989
shimDMA = builder.create <AIE::ShimDMAOp>(builder.getUnknownLoc (),
2989
2990
builder.getIndexType (), tile);
2990
2991
}
@@ -3031,7 +3032,7 @@ class AIRToAIEPass : public air::impl::AIRToAIEBase<AIRToAIEPass> {
3031
3032
// Generate aie.memtile_dma op
3032
3033
AIE::MemTileDMAOp memTileDMA = getMemTileDMAOp (tile);
3033
3034
if (!memTileDMA) {
3034
- builder.setInsertionPointToEnd (device.getBody ());
3035
+ builder.setInsertionPoint (device.getBody ()-> getTerminator ());
3035
3036
memTileDMA = builder.create <AIE::MemTileDMAOp>(
3036
3037
builder.getUnknownLoc (), builder.getIndexType (), tile);
3037
3038
}
@@ -3110,7 +3111,7 @@ class AIRToAIEPass : public air::impl::AIRToAIEBase<AIRToAIEPass> {
3110
3111
}
3111
3112
int destChan = 1 ; // todo: allocation?
3112
3113
3113
- builder.setInsertionPointToEnd (device.getBody ());
3114
+ builder.setInsertionPoint (device.getBody ()-> getTerminator ());
3114
3115
auto keep_pkt_header = builder.getBoolAttr (true );
3115
3116
(void )createPacketFlowOp (
3116
3117
builder, flowID, srcTile, AIE::WireBundle::Trace, 0 , destTile,
@@ -3187,11 +3188,7 @@ class AIRToAIEPass : public air::impl::AIRToAIEBase<AIRToAIEPass> {
3187
3188
if (clTestPatterns.find (" lower-scf-tokens" ) != std::string::npos)
3188
3189
patterns.insert <LowerScfTokenPattern>(ctx);
3189
3190
3190
- OpBuilder builder (ctx);
3191
- AIE::DeviceOp deviceOp = builder.create <AIE::DeviceOp>(
3192
- builder.getUnknownLoc (),
3193
- AIE::AIEDeviceAttr::get (builder.getContext (), *device));
3194
- ShimTileAllocator shimTileAlloc (deviceOp.getTargetModel ());
3191
+ ShimTileAllocator shimTileAlloc (AIE::getTargetModel (*device));
3195
3192
std::map<Operation *, AIE::ObjectFifoCreateOp> linksToComplete;
3196
3193
if (clTestPatterns.find (" lower-air-channels" ) != std::string::npos) {
3197
3194
patterns.insert <LowerAIRChannelsPattern>(
@@ -3348,7 +3345,7 @@ class AIRToAIEPass : public air::impl::AIRToAIEBase<AIRToAIEPass> {
3348
3345
" supported for AIE1." );
3349
3346
} else {
3350
3347
// AIE2 dma metadata format
3351
- builder.setInsertionPointToEnd (device.getBody ());
3348
+ builder.setInsertionPoint (device.getBody ()-> getTerminator ());
3352
3349
createShimDMAAllocationOps (
3353
3350
builder, ctx, herd, shimDmaAlloc.s2mm_allocs ,
3354
3351
AIE::DMAChannelDir::S2MM, chan_renumber_reverse_map);
@@ -3380,7 +3377,7 @@ class AIRToAIEPass : public air::impl::AIRToAIEBase<AIRToAIEPass> {
3380
3377
" supported for AIE1." );
3381
3378
} else {
3382
3379
// AIE2 memtile dma metadata format
3383
- builder.setInsertionPointToEnd (device.getBody ());
3380
+ builder.setInsertionPoint (device.getBody ()-> getTerminator ());
3384
3381
createShimDMAAllocationOps (
3385
3382
builder, ctx, seg, shimDmaAlloc.s2mm_allocs ,
3386
3383
AIE::DMAChannelDir::S2MM, chan_renumber_reverse_map);
@@ -3642,7 +3639,8 @@ FailureOr<ModuleOp> convertAIRToAIE(mlir::RewriterBase &rewriter,
3642
3639
auto devOp = rewriter.create <AIE::DeviceOp>(
3643
3640
aie_module.getLoc (),
3644
3641
AIE::AIEDeviceAttr::get (rewriter.getContext (), options.device ));
3645
- devOp.getRegion ().emplaceBlock ();
3642
+ AIE::DeviceOp::ensureTerminator (devOp.getRegion (), rewriter,
3643
+ devOp.getLoc ());
3646
3644
outlineAIECores (rewriter, devOp, h, tileToHerdMap, options);
3647
3645
3648
3646
auto ctx = aie_module->getContext ();
0 commit comments