Skip to content

Commit a5b4788

Browse files
authored
Remove Lock ID Allocation out of ObjectFIFO pass (#3377)
1 parent 065cfd9 commit a5b4788

111 files changed

Lines changed: 626 additions & 662 deletions

File tree

Some content is hidden

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

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

Lines changed: 12 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1501,17 +1501,25 @@ def AIE_LockOp: AIE_Op<"lock", [
15011501
}
15021502
}];
15031503

1504-
let builders = [
1505-
OpBuilder<(ins "mlir::Value":$tile, "int":$lockID, "int":$init), [{
1504+
let builders = [OpBuilder<
1505+
(ins "mlir::Value":$tile, "int":$lockID, "int":$init), [{
15061506
build($_builder, $_state,
15071507
$_builder.getIndexType(),
15081508
tile,
15091509
$_builder.getI32IntegerAttr(lockID),
15101510
$_builder.getI32IntegerAttr(init),
15111511
nullptr
15121512
);
1513-
}]>
1514-
];
1513+
}]>,
1514+
OpBuilder<(ins "mlir::Value":$tile, "int":$init), [{
1515+
build($_builder, $_state,
1516+
$_builder.getIndexType(),
1517+
tile,
1518+
/*lockID=*/nullptr,
1519+
$_builder.getI32IntegerAttr(init),
1520+
nullptr
1521+
);
1522+
}]>];
15151523
let hasVerifier = 1;
15161524
}
15171525

lib/Dialect/AIE/Transforms/AIEObjectFifoStatefulTransform.cpp

Lines changed: 15 additions & 61 deletions
Original file line numberDiff line numberDiff line change
@@ -58,41 +58,6 @@ static constexpr llvm::StringLiteral kBookkeepingSlotAttrName =
5858
static constexpr int SEMAPHORE_CORE_PROD_LOCK_IDX = 0;
5959
static constexpr int SEMAPHORE_CORE_CONS_LOCK_IDX = 1;
6060

61-
//===----------------------------------------------------------------------===//
62-
// Lock Analysis
63-
//===----------------------------------------------------------------------===//
64-
class LockAnalysis {
65-
DenseMap<std::pair<Value, int>, int> locksPerTile;
66-
67-
public:
68-
LockAnalysis(DeviceOp &device) {
69-
// go over the locks created for each tile and update the index in
70-
// locksPerTile
71-
device.walk([&](LockOp lockOp) {
72-
// A lock without an ID does not reserve a particular ID yet, so it does
73-
// not make one unavailable here. AIEAssignLockIDs runs later and gives
74-
// it one of the IDs still free on the tile.
75-
if (!lockOp.getLockID().has_value())
76-
return;
77-
auto tile = lockOp.getTile();
78-
auto lockID = lockOp.getLockIDValue();
79-
locksPerTile[{tile, lockID}] = 1;
80-
});
81-
}
82-
83-
/// Given a tile, returns next usable lockID for that tile.
84-
int getLockID(TileOp &tileOp) {
85-
const auto &targetModel = getTargetModel(tileOp);
86-
for (unsigned i = 0;
87-
i < targetModel.getNumLocks(tileOp.getCol(), tileOp.getRow()); i++)
88-
if (int usageCnt = locksPerTile[{tileOp, i}]; usageCnt == 0) {
89-
locksPerTile[{tileOp, i}] = 1;
90-
return i;
91-
}
92-
return -1;
93-
}
94-
};
95-
9661
//===----------------------------------------------------------------------===//
9762
// DMA Channel Analysis
9863
//===----------------------------------------------------------------------===//
@@ -736,10 +701,10 @@ struct AIEObjectFifoStatefulTransformPass
736701
}
737702

738703
/// Function used to create objectFifo locks based on target architecture.
739-
/// Called by createObjectFifoElements().
704+
/// Called by createObjectFifoElements(). Locks are created without a lock ID;
705+
/// AIEAssignLockIDs assigns concrete IDs later in the pipeline.
740706
std::vector<LockOp>
741-
createObjectFifoLocks(OpBuilder &builder, LockAnalysis &lockAnalysis,
742-
ObjectFifoCreateOp op, int numElem,
707+
createObjectFifoLocks(OpBuilder &builder, ObjectFifoCreateOp op, int numElem,
743708
int joinDistribFactor, TileOp creation_tile,
744709
int repeatCount, ObjectFifoState &state) {
745710
std::vector<LockOp> locks;
@@ -767,10 +732,7 @@ struct AIEObjectFifoStatefulTransformPass
767732
for (int i = 0; i < numElem; i++) {
768733
// create corresponding aie1 locks
769734
int initValue = op.getInitValues().has_value() ? 1 : 0;
770-
int lockID = lockAnalysis.getLockID(creation_tile);
771-
assert(lockID >= 0 && "No more locks to allocate!");
772-
auto lock =
773-
LockOp::create(builder, ofLoc, creation_tile, lockID, initValue);
735+
auto lock = LockOp::create(builder, ofLoc, creation_tile, initValue);
774736
lock.getOperation()->setAttr(SymbolTable::getSymbolAttrName(),
775737
builder.getStringAttr(op.name().str() +
776738
"_lock_" +
@@ -783,11 +745,9 @@ struct AIEObjectFifoStatefulTransformPass
783745
auto initValues = op.getInitValues().has_value()
784746
? op.getInitValues().value().size()
785747
: 0;
786-
int prodLockID = lockAnalysis.getLockID(creation_tile);
787-
assert(prodLockID >= 0 && "No more locks to allocate!");
788748
int prodLockValue = (numElem - initValues) * repeatCount;
789-
auto prodLock = LockOp::create(builder, ofLoc, creation_tile,
790-
prodLockID, prodLockValue);
749+
auto prodLock =
750+
LockOp::create(builder, ofLoc, creation_tile, prodLockValue);
791751
prodLock.getOperation()->setAttr(
792752
SymbolTable::getSymbolAttrName(),
793753
builder.getStringAttr(op.name().str() + "_prod_lock_" +
@@ -796,11 +756,9 @@ struct AIEObjectFifoStatefulTransformPass
796756
"producer lock must land at SEMAPHORE_CORE_PROD_LOCK_IDX");
797757
locks.push_back(prodLock);
798758

799-
int consLockID = lockAnalysis.getLockID(creation_tile);
800-
assert(consLockID >= 0 && "No more locks to allocate!");
801759
int consLockValue = initValues * repeatCount;
802-
auto consLock = LockOp::create(builder, ofLoc, creation_tile,
803-
consLockID, consLockValue);
760+
auto consLock =
761+
LockOp::create(builder, ofLoc, creation_tile, consLockValue);
804762
consLock.getOperation()->setAttr(
805763
SymbolTable::getSymbolAttrName(),
806764
builder.getStringAttr(op.name().str() + "_cons_lock_" +
@@ -943,9 +901,8 @@ struct AIEObjectFifoStatefulTransformPass
943901

944902
/// Function used to create objectFifo elements and their locks.
945903
/// It maps the input objectFifo to associated buffers and locks.
946-
void createObjectFifoElements(OpBuilder &builder, LockAnalysis &lockAnalysis,
947-
ObjectFifoCreateOp op, int share_direction,
948-
ObjectFifoState &state) {
904+
void createObjectFifoElements(OpBuilder &builder, ObjectFifoCreateOp op,
905+
int share_direction, ObjectFifoState &state) {
949906
if (!op.size())
950907
return;
951908

@@ -1157,9 +1114,9 @@ struct AIEObjectFifoStatefulTransformPass
11571114
joinDistribFactor *= linkOp->getFifoIns().size();
11581115
state.objFifoLinks[*linkOp] = op;
11591116
}
1160-
std::vector<LockOp> locks = createObjectFifoLocks(
1161-
builder, lockAnalysis, op, numElem, joinDistribFactor, creation_tile,
1162-
repeatCount, state);
1117+
std::vector<LockOp> locks =
1118+
createObjectFifoLocks(builder, op, numElem, joinDistribFactor,
1119+
creation_tile, repeatCount, state);
11631120
state.buffersPerFifo[op] = buffers;
11641121
state.locksPerFifo[op] = locks;
11651122
}
@@ -2264,7 +2221,6 @@ struct AIEObjectFifoStatefulTransformPass
22642221
// multi-device safety
22652222
ObjectFifoState state;
22662223

2267-
LockAnalysis lockAnalysis(device);
22682224
DMAChannelAnalysis dmaAnalysis(device);
22692225
OpBuilder builder = OpBuilder::atBlockTerminator(device.getBody());
22702226
auto *ctx = device->getContext();
@@ -2459,8 +2415,7 @@ struct AIEObjectFifoStatefulTransformPass
24592415

24602416
// if split, the necessary size for producer fifo might change
24612417
if (shared) {
2462-
createObjectFifoElements(builder, lockAnalysis, createOp,
2463-
share_direction, state);
2418+
createObjectFifoElements(builder, createOp, share_direction, state);
24642419
} else {
24652420
if (isa<ArrayAttr>(createOp.getElemNumber()))
24662421
createOp.setElemNumberAttr(
@@ -2474,8 +2429,7 @@ struct AIEObjectFifoStatefulTransformPass
24742429
builder.getI32IntegerAttr(prodMaxAcquire));
24752430
}
24762431
}
2477-
createObjectFifoElements(builder, lockAnalysis, createOp,
2478-
share_direction, state);
2432+
createObjectFifoElements(builder, createOp, share_direction, state);
24792433
}
24802434
}
24812435

test/Passes/lower-dma-channel-reset/dma_channel_reset_for_pipeline.mlir

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@
1212
// to the reset + set_lock + START_QUEUE trio. This is the path a lit test that
1313
// runs the lowering pass in isolation does NOT exercise.
1414

15-
// RUN: aie-opt --aie-objectFifo-stateful-transform --aie-assign-bd-ids \
15+
// RUN: aie-opt --aie-objectFifo-stateful-transform --aie-assign-lock-ids --aie-assign-bd-ids \
1616
// RUN: --aie-materialize-runtime-sequences --aie-lower-dma-channel-reset \
1717
// RUN: --aie-dma-to-npu --aie-lower-set-lock \
1818
// RUN: %s | FileCheck %s

test/assign-buffer-addresses/fallback_routine_simple.mlir

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -28,10 +28,10 @@
2828
// CHECK: %act_3_4_buff_1 = aie.buffer(%tile_1_2) {address = 16448 : i32, sym_name = "act_3_4_buff_1"} : memref<8xi32>
2929
// CHECK: %act_3_4_buff_2 = aie.buffer(%tile_1_2) {address = 16480 : i32, sym_name = "act_3_4_buff_2"} : memref<8xi32>
3030
// CHECK: %act_3_4_buff_3 = aie.buffer(%tile_1_2) {address = 16512 : i32, sym_name = "act_3_4_buff_3"} : memref<8xi32>
31-
// CHECK: %act_3_4_lock_0 = aie.lock(%tile_1_2, 0) {init = 0 : i32, sym_name = "act_3_4_lock_0"}
32-
// CHECK: %act_3_4_lock_1 = aie.lock(%tile_1_2, 1) {init = 0 : i32, sym_name = "act_3_4_lock_1"}
33-
// CHECK: %act_3_4_lock_2 = aie.lock(%tile_1_2, 2) {init = 0 : i32, sym_name = "act_3_4_lock_2"}
34-
// CHECK: %act_3_4_lock_3 = aie.lock(%tile_1_2, 3) {init = 0 : i32, sym_name = "act_3_4_lock_3"}
31+
// CHECK: %act_3_4_lock_0 = aie.lock(%tile_1_2) {init = 0 : i32, sym_name = "act_3_4_lock_0"}
32+
// CHECK: %act_3_4_lock_1 = aie.lock(%tile_1_2) {init = 0 : i32, sym_name = "act_3_4_lock_1"}
33+
// CHECK: %act_3_4_lock_2 = aie.lock(%tile_1_2) {init = 0 : i32, sym_name = "act_3_4_lock_2"}
34+
// CHECK: %act_3_4_lock_3 = aie.lock(%tile_1_2) {init = 0 : i32, sym_name = "act_3_4_lock_3"}
3535
// CHECK: }
3636
// CHECK: }
3737

test/objectFifo-stateful-transform/access_patterns/AIE2_cyclostatic_L1.mlir

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,8 +14,8 @@
1414
// CHECK: aie.device(xcve2302) {
1515
// CHECK: %[[t0:.*]] = aie.tile(2, 2)
1616
// CHECK: %[[t1:.*]] = aie.tile(2, 3)
17-
// CHECK: %[[PL:.*]] = aie.lock(%[[t0]], 0) {init = 4 : i32, sym_name = "fifo_prod_lock_0"}
18-
// CHECK: %[[CL:.*]] = aie.lock(%[[t0]], 1) {init = 0 : i32, sym_name = "fifo_cons_lock_0"}
17+
// CHECK: %[[PL:.*]] = aie.lock(%[[t0]]) {init = 4 : i32, sym_name = "fifo_prod_lock_0"}
18+
// CHECK: %[[CL:.*]] = aie.lock(%[[t0]]) {init = 0 : i32, sym_name = "fifo_cons_lock_0"}
1919
// CHECK: %[[c0:.*]] = aie.core(%[[t0]]) {
2020
// CHECK: %[[C1:.*]] = arith.constant 1 : i32
2121
// CHECK: aie.use_lock(%[[PL]], AcquireGreaterEqual, %[[C1]])

test/objectFifo-stateful-transform/access_patterns/AIE2_cyclostatic_L1_dynamic.mlir

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -23,8 +23,8 @@
2323
// CHECK: %[[B1:.*]] = aie.buffer(%[[T22]]) {sym_name = "fifo_buff_1"} : memref<i32>
2424
// CHECK: %[[B2:.*]] = aie.buffer(%[[T22]]) {sym_name = "fifo_buff_2"} : memref<i32>
2525
// CHECK: %[[B3:.*]] = aie.buffer(%[[T22]]) {sym_name = "fifo_buff_3"} : memref<i32>
26-
// CHECK: %[[PROD:.*]] = aie.lock(%[[T22]], 0) {init = 4 : i32, sym_name = "fifo_prod_lock_0"}
27-
// CHECK: %[[CONS:.*]] = aie.lock(%[[T22]], 1) {init = 0 : i32, sym_name = "fifo_cons_lock_0"}
26+
// CHECK: %[[PROD:.*]] = aie.lock(%[[T22]]) {init = 4 : i32, sym_name = "fifo_prod_lock_0"}
27+
// CHECK: %[[CONS:.*]] = aie.lock(%[[T22]]) {init = 0 : i32, sym_name = "fifo_cons_lock_0"}
2828
// CHECK: %[[BUF23:.*]] = aie.buffer(%[[T23]]) {sym_name = "buf23"} : memref<4xi32>
2929
// CHECK: %{{.*}} = aie.core(%[[T22]]) {
3030
// CHECK: %[[C1I:.*]] = arith.constant 1 : i32

test/objectFifo-stateful-transform/access_patterns/AIE2_cyclostatic_L2.mlir

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -44,8 +44,8 @@
4444
// CHECK: %[[fifo1_cons_buff_1:.*]] = aie.buffer(%[[t2]]) {sym_name = "fifo1_cons_buff_1"} : memref<1xi32>
4545
// CHECK: %[[fifo1_cons_buff_2:.*]] = aie.buffer(%[[t2]]) {sym_name = "fifo1_cons_buff_2"} : memref<1xi32>
4646
// CHECK: %[[fifo1_cons_buff_3:.*]] = aie.buffer(%[[t2]]) {sym_name = "fifo1_cons_buff_3"} : memref<1xi32>
47-
// CHECK: %[[fifo1_cons_prod_lock:.*]] = aie.lock(%[[t2]], 0) {init = 4 : i32, sym_name = "fifo1_cons_prod_lock_0"}
48-
// CHECK: %[[fifo1_cons_cons_lock:.*]] = aie.lock(%[[t2]], 1) {init = 0 : i32, sym_name = "fifo1_cons_cons_lock_0"}
47+
// CHECK: %[[fifo1_cons_prod_lock:.*]] = aie.lock(%[[t2]]) {init = 4 : i32, sym_name = "fifo1_cons_prod_lock_0"}
48+
// CHECK: %[[fifo1_cons_cons_lock:.*]] = aie.lock(%[[t2]]) {init = 0 : i32, sym_name = "fifo1_cons_cons_lock_0"}
4949

5050
// The consume buffers are used at the receiving end of a stream to notify the
5151
// sender to send more objects once they have been consumed. In this case,
@@ -55,8 +55,8 @@
5555
// CHECK: %[[fifo0_cons_buff_2:.*]] = aie.buffer(%[[t1]]) {sym_name = "fifo0_cons_buff_2"} : memref<1xi32>
5656
// CHECK: %[[fifo0_cons_buff_3:.*]] = aie.buffer(%[[t1]]) {sym_name = "fifo0_cons_buff_3"} : memref<1xi32>
5757

58-
// CHECK: %[[fifo0_cons_prod_lock:.*]] = aie.lock(%[[t1]], 0) {init = 4 : i32, sym_name = "fifo0_cons_prod_lock_0"}
59-
// CHECK: %[[fifo0_cons_cons_lock:.*]] = aie.lock(%[[t1]], 1) {init = 0 : i32, sym_name = "fifo0_cons_cons_lock_0"}
58+
// CHECK: %[[fifo0_cons_prod_lock:.*]] = aie.lock(%[[t1]]) {init = 4 : i32, sym_name = "fifo0_cons_prod_lock_0"}
59+
// CHECK: %[[fifo0_cons_cons_lock:.*]] = aie.lock(%[[t1]]) {init = 0 : i32, sym_name = "fifo0_cons_cons_lock_0"}
6060

6161
// The objectFifo lowering creates two buffers (for ping-pong) on the producer
6262
// side to which elements are written.
@@ -65,11 +65,11 @@
6565

6666
// Whenever the prod lock can be acquired, the core can proceed to put another
6767
// object into the fifo, i.e. there is space in the queue.
68-
// CHECK: %[[fifo0_prod_lock:.*]] = aie.lock(%[[t0]], 0) {init = 2 : i32, sym_name = "fifo0_prod_lock_0"}
68+
// CHECK: %[[fifo0_prod_lock:.*]] = aie.lock(%[[t0]]) {init = 2 : i32, sym_name = "fifo0_prod_lock_0"}
6969

7070
// Whenever the cons lock can be acquired, there is an object available in the
7171
// queue to be consumed.
72-
// CHECK: %[[fifo0_cons_lock:.*]] = aie.lock(%[[t0]], 1) {init = 0 : i32, sym_name = "fifo0_cons_lock_0"}
72+
// CHECK: %[[fifo0_cons_lock:.*]] = aie.lock(%[[t0]]) {init = 0 : i32, sym_name = "fifo0_cons_lock_0"}
7373

7474
// CHECK: %[[buf83:.*]] = aie.buffer(%[[t2]]) {sym_name = "buf83"} : memref<1xi32>
7575

test/objectFifo-stateful-transform/access_patterns/AIE2_cyclostatic_dma.mlir

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -16,12 +16,12 @@
1616
// CHECK: %[[buf1_0:.*]] = aie.buffer(%[[t1]]) {sym_name = "fifo_cons_buff_0"} : memref<i32>
1717
// CHECK: %[[buf1_1:.*]] = aie.buffer(%[[t1]]) {sym_name = "fifo_cons_buff_1"} : memref<i32>
1818
// CHECK: %[[buf1_2:.*]] = aie.buffer(%[[t1]]) {sym_name = "fifo_cons_buff_2"} : memref<i32>
19-
// CHECK: %[[C_PL:.*]] = aie.lock(%[[t1]], 0) {init = 3 : i32, sym_name = "fifo_cons_prod_lock_0"}
20-
// CHECK: %[[C_CL:.*]] = aie.lock(%[[t1]], 1) {init = 0 : i32, sym_name = "fifo_cons_cons_lock_0"}
19+
// CHECK: %[[C_PL:.*]] = aie.lock(%[[t1]]) {init = 3 : i32, sym_name = "fifo_cons_prod_lock_0"}
20+
// CHECK: %[[C_CL:.*]] = aie.lock(%[[t1]]) {init = 0 : i32, sym_name = "fifo_cons_cons_lock_0"}
2121
// CHECK: %[[buf0_0:.*]] = aie.buffer(%[[t0]]) {sym_name = "fifo_buff_0"} : memref<i32>
2222
// CHECK: %[[buf0_1:.*]] = aie.buffer(%[[t0]]) {sym_name = "fifo_buff_1"} : memref<i32>
23-
// CHECK: %[[PL:.*]] = aie.lock(%[[t0]], 0) {init = 2 : i32, sym_name = "fifo_prod_lock_0"}
24-
// CHECK: %[[CL:.*]] = aie.lock(%[[t0]], 1) {init = 0 : i32, sym_name = "fifo_cons_lock_0"}
23+
// CHECK: %[[PL:.*]] = aie.lock(%[[t0]]) {init = 2 : i32, sym_name = "fifo_prod_lock_0"}
24+
// CHECK: %[[CL:.*]] = aie.lock(%[[t0]]) {init = 0 : i32, sym_name = "fifo_cons_lock_0"}
2525
// CHECK: aie.flow(%[[t0]], DMA : 0, %[[t1]], DMA : 0)
2626
// CHECK: %[[c0:.*]] = aie.core(%[[t0]]) {
2727
// CHECK: aie.use_lock(%[[PL]], AcquireGreaterEqual, %{{.*}})

test/objectFifo-stateful-transform/access_patterns/AIE2_delayed_release.mlir

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -35,8 +35,8 @@
3535
// CHECK: %[[fifo_buff_1:.*]] = aie.buffer(%[[tile0]]) {sym_name = "fifo_buff_1"} : memref<i32>
3636
// CHECK: %[[fifo_buff_2:.*]] = aie.buffer(%[[tile0]]) {sym_name = "fifo_buff_2"} : memref<i32>
3737
// CHECK: %[[fifo_buff_3:.*]] = aie.buffer(%[[tile0]]) {sym_name = "fifo_buff_3"} : memref<i32>
38-
// CHECK: %[[fifo_prod_lock:.*]] = aie.lock(%[[tile0]], 0) {init = 4 : i32, sym_name = "fifo_prod_lock_0"}
39-
// CHECK: %[[fifo_cons_lock:.*]] = aie.lock(%[[tile0]], 1) {init = 0 : i32, sym_name = "fifo_cons_lock_0"}
38+
// CHECK: %[[fifo_prod_lock:.*]] = aie.lock(%[[tile0]]) {init = 4 : i32, sym_name = "fifo_prod_lock_0"}
39+
// CHECK: %[[fifo_cons_lock:.*]] = aie.lock(%[[tile0]]) {init = 0 : i32, sym_name = "fifo_cons_lock_0"}
4040
// CHECK: %[[buf23:.*]] = aie.buffer(%[[tile1]]) {sym_name = "buf23"} : memref<4xi32>
4141
// CHECK: %[[core0:.*]] = aie.core(%[[tile0]]) {
4242
// CHECK-DAG: %[[C1:.*]] = arith.constant 1 : i32

test/objectFifo-stateful-transform/access_patterns/AIE2_dynamic_locks.mlir

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -34,11 +34,11 @@
3434

3535
// The setup for flows, locks, and buffers can be the same in the dynamic case:
3636
// CHECK: %[[fifo_buff_0:.*]] = aie.buffer(%[[tile23]]) {sym_name = "fifo_buff_0"} : memref<i64>
37-
// CHECK: %[[fifo_prod_lock:.*]] = aie.lock(%[[tile23]], 0) {init = 1 : i32, sym_name = "fifo_prod_lock_0"}
38-
// CHECK: %[[fifo_cons_lock:.*]] = aie.lock(%[[tile23]], 1) {init = 0 : i32, sym_name = "fifo_cons_lock_0"}
37+
// CHECK: %[[fifo_prod_lock:.*]] = aie.lock(%[[tile23]]) {init = 1 : i32, sym_name = "fifo_prod_lock_0"}
38+
// CHECK: %[[fifo_cons_lock:.*]] = aie.lock(%[[tile23]]) {init = 0 : i32, sym_name = "fifo_cons_lock_0"}
3939
// CHECK: %[[fifo_cons_buff_0:.*]] = aie.buffer(%[[tile43]]) {sym_name = "fifo_cons_buff_0"} : memref<i64>
40-
// CHECK: %[[fifo_cons_prod_lock:.*]] = aie.lock(%[[tile43]], 0) {init = 1 : i32, sym_name = "fifo_cons_prod_lock_0"}
41-
// CHECK: %[[fifo_cons_cons_lock:.*]] = aie.lock(%[[tile43]], 1) {init = 0 : i32, sym_name = "fifo_cons_cons_lock_0"}
40+
// CHECK: %[[fifo_cons_prod_lock:.*]] = aie.lock(%[[tile43]]) {init = 1 : i32, sym_name = "fifo_cons_prod_lock_0"}
41+
// CHECK: %[[fifo_cons_cons_lock:.*]] = aie.lock(%[[tile43]]) {init = 0 : i32, sym_name = "fifo_cons_cons_lock_0"}
4242
// CHECK: aie.flow(%[[tile23]], DMA : 0, %[[tile43]], DMA : 0)
4343

4444
// CHECK: %[[ssa8:.*]] = aie.core(%[[tile23]]) {

0 commit comments

Comments
 (0)