Skip to content

Commit c21dee7

Browse files
authored
Change aie.device op from NoTerminator to SingleBlockImplicitTerminator (#1936)
1 parent f7867a9 commit c21dee7

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

42 files changed

+148
-151
lines changed

include/aie/Dialect/AIE/IR/AIEOps.td

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ class AIE_Op<string mnemonic, list<Trait> traits = []> :
2828

2929
def AIE_DeviceOp: AIE_Op<"device", [
3030
AIETarget, HasParent<"mlir::ModuleOp">,
31-
SymbolTable, SingleBlock, NoTerminator, IsolatedFromAbove
31+
SymbolTable, SingleBlockImplicitTerminator<"EndOp">, IsolatedFromAbove
3232
]> {
3333
let summary = "Define an AIE design targetting a complete device";
3434
let description = [{
@@ -63,7 +63,6 @@ def AIE_DeviceOp: AIE_Op<"device", [
6363
let extraClassDeclaration = [{
6464
const xilinx::AIE::AIETargetModel &getTargetModel();
6565
}];
66-
let hasVerifier = 1;
6766
}
6867

6968
def AIE_TileOp: AIE_Op<"tile", [

include/aie/Dialect/AIE/Transforms/AIEPasses.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -70,7 +70,7 @@ struct AIEPathfinderPass : AIERoutePathfinderFlowsBase<AIEPathfinderPass> {
7070
: analyzer(std::move(analyzer)) {}
7171

7272
void runOnOperation() override;
73-
void runOnFlow(DeviceOp d, mlir::OpBuilder &builder);
73+
void runOnFlow(DeviceOp d);
7474
void runOnPacketFlow(DeviceOp d, mlir::OpBuilder &builder);
7575

7676
typedef std::pair<mlir::Operation *, Port> PhysPort;

lib/Conversion/AIEToConfiguration/AIEToConfiguration.cpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -432,6 +432,7 @@ xilinx::AIE::convertTransactionBinaryToMLIR(mlir::MLIRContext *ctx,
432432
AIEDevice::npu1};
433433
auto device = builder.create<DeviceOp>(loc, devices[columns - 1]);
434434
device.getRegion().emplaceBlock();
435+
DeviceOp::ensureTerminator(device.getBodyRegion(), builder, loc);
435436
builder.setInsertionPointToStart(device.getBody());
436437

437438
// convert the parsed ops to MLIR

lib/Dialect/AIE/IR/AIEDialect.cpp

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1128,8 +1128,6 @@ const AIETargetModel &DeviceOp::getTargetModel() {
11281128
return xilinx::AIE::getTargetModel(getDevice());
11291129
}
11301130

1131-
LogicalResult DeviceOp::verify() { return success(); }
1132-
11331131
//===----------------------------------------------------------------------===//
11341132
// TileOp
11351133
//===----------------------------------------------------------------------===//

lib/Dialect/AIE/Transforms/AIEAssignBuffers.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -463,7 +463,7 @@ struct AIEAssignBufferAddressesPass
463463

464464
void runOnOperation() override {
465465
DeviceOp device = getOperation();
466-
OpBuilder builder = OpBuilder::atBlockEnd(device.getBody());
466+
OpBuilder builder = OpBuilder::atBlockTerminator(device.getBody());
467467
// Make sure all the buffers have a name
468468
int counter = 0;
469469
device.walk<WalkOrder::PreOrder>([&](BufferOp buffer) {

lib/Dialect/AIE/Transforms/AIEAssignLockIDs.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@ struct AIEAssignLockIDsPass : AIEAssignLockIDsBase<AIEAssignLockIDsPass> {
3535

3636
void runOnOperation() override {
3737
DeviceOp device = getOperation();
38-
OpBuilder rewriter = OpBuilder::atBlockEnd(device.getBody());
38+
OpBuilder rewriter = OpBuilder::atBlockTerminator(device.getBody());
3939

4040
// All of the lock ops on a tile, separated into ops which have been
4141
// assigned to a lock, and ops which have not.

lib/Dialect/AIE/Transforms/AIECanonicalizeDevice.cpp

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,8 @@ struct AIECanonicalizeDevicePass
4545
deviceOp.getRegion().takeBody(moduleOp.getBodyRegion());
4646
new (&moduleOp->getRegion(0)) Region(moduleOp);
4747
moduleOp->getRegion(0).emplaceBlock();
48+
49+
DeviceOp::ensureTerminator(deviceOp.getBodyRegion(), builder, location);
4850
OpBuilder builder2 = OpBuilder::atBlockBegin(moduleOp.getBody());
4951
builder2.insert(deviceOp);
5052
}

lib/Dialect/AIE/Transforms/AIECreatePathFindFlows.cpp

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -174,7 +174,7 @@ struct ConvertFlowsToInterconnect : OpConversionPattern<FlowOp> {
174174

175175
namespace xilinx::AIE {
176176

177-
void AIEPathfinderPass::runOnFlow(DeviceOp d, OpBuilder &builder) {
177+
void AIEPathfinderPass::runOnFlow(DeviceOp d) {
178178
// Apply rewrite rule to switchboxes to add assignments to every 'connect'
179179
// operation inside
180180
ConversionTarget target(getContext());
@@ -928,15 +928,15 @@ void AIEPathfinderPass::runOnOperation() {
928928
DeviceOp d = getOperation();
929929
if (failed(analyzer.runAnalysis(d)))
930930
return signalPassFailure();
931-
OpBuilder builder = OpBuilder::atBlockEnd(d.getBody());
931+
OpBuilder builder = OpBuilder::atBlockTerminator(d.getBody());
932932

933933
if (clRouteCircuit)
934-
runOnFlow(d, builder);
934+
runOnFlow(d);
935935
if (clRoutePacket)
936936
runOnPacketFlow(d, builder);
937937

938938
// Populate wires between switchboxes and tiles.
939-
builder.setInsertionPointToEnd(d.getBody());
939+
builder.setInsertionPoint(d.getBody()->getTerminator());
940940
for (int col = 0; col <= analyzer.getMaxCol(); col++) {
941941
for (int row = 0; row <= analyzer.getMaxRow(); row++) {
942942
TileOp tile;

lib/Dialect/AIE/Transforms/AIEFindFlows.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -226,7 +226,7 @@ class ConnectivityAnalysis {
226226
static void findFlowsFrom(TileOp op, ConnectivityAnalysis &analysis,
227227
OpBuilder &rewriter) {
228228
Operation *Op = op.getOperation();
229-
rewriter.setInsertionPointToEnd(Op->getBlock());
229+
rewriter.setInsertionPoint(Op->getBlock()->getTerminator());
230230

231231
std::vector bundles = {WireBundle::Core, WireBundle::DMA};
232232
for (WireBundle bundle : bundles) {
@@ -276,7 +276,7 @@ struct AIEFindFlowsPass : public AIEFindFlowsBase<AIEFindFlowsPass> {
276276
ConnectivityAnalysis analysis(d);
277277
d.getTargetModel().validate();
278278

279-
OpBuilder builder = OpBuilder::atBlockEnd(d.getBody());
279+
OpBuilder builder = OpBuilder::atBlockTerminator(d.getBody());
280280
for (auto tile : d.getOps<TileOp>()) {
281281
findFlowsFrom(tile, analysis, builder);
282282
}

lib/Dialect/AIE/Transforms/AIEGenerateColumnControlOverlay.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -187,7 +187,7 @@ struct AIEGenerateColumnControlOverlayPass
187187
void runOnOperation() override {
188188
DeviceOp device = getOperation();
189189
const auto &targetModel = device.getTargetModel();
190-
OpBuilder builder = OpBuilder::atBlockEnd(device.getBody());
190+
OpBuilder builder = OpBuilder::atBlockTerminator(device.getBody());
191191

192192
if (targetModel.getTargetArch() == AIEArch::AIE1)
193193
return; // Disable this pass for AIE1; AIE1 support NYI.
@@ -314,7 +314,7 @@ struct AIEGenerateColumnControlOverlayPass
314314
auto availableShimChans =
315315
getAvailableShimChans(device, shimTile, shimWireBundle, isShimMM2S);
316316

317-
builder.setInsertionPointToEnd(device.getBody());
317+
builder.setInsertionPoint(device.getBody()->getTerminator());
318318
for (auto tOp : ctrlTiles) {
319319
if (tOp->hasAttr("controller_id"))
320320
ctrlPktFlowID =

0 commit comments

Comments
 (0)