Skip to content

Commit 2cb8aed

Browse files
ElectrikSpaceSylvain Noiryjgmelber
authored
Add lowering of aie.event for aie2 and aie2p (#2652)
Co-authored-by: Sylvain Noiry <[email protected]> Co-authored-by: Joseph Melber <[email protected]>
1 parent ffdf9c5 commit 2cb8aed

File tree

2 files changed

+60
-5
lines changed

2 files changed

+60
-5
lines changed

lib/Dialect/AIE/Transforms/AIECoreToStandard.cpp

Lines changed: 25 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -92,6 +92,7 @@ static auto getAIE2Intrinsics(OpBuilder &builder) {
9292
Type accType = VectorType::get({16}, int32Type);
9393
IntrinsicDecls functions = {
9494
{"debug_i32", {int32Type}, {}},
95+
{"llvm.aie2.event", {int32Type}, {}},
9596
{"llvm.aie2.put.ms", {int32Type, int32Type}, {}}, //(%value, %tlast) -> ()
9697
{"llvm.aie2.get.ss", {}, {int32Type, int32Type}}, //() -> (%value, %tlast)
9798
{"llvm.aie2.mcd.write.vec",
@@ -115,6 +116,7 @@ static auto getAIE2pIntrinsics(OpBuilder &builder) {
115116
Type accType = VectorType::get({16}, int32Type);
116117
IntrinsicDecls functions = {
117118
{"debug_i32", {int32Type}, {}},
119+
{"llvm.aie2p.event", {int32Type}, {}},
118120
{"llvm.aie2p.put.ms",
119121
{int32Type, int32Type},
120122
{}}, //(%value, %tlast) -> ()
@@ -577,13 +579,33 @@ struct AIEEventOpToStdLowering : OpConversionPattern<EventOp> {
577579
LogicalResult
578580
matchAndRewrite(EventOp op, OpAdaptor adaptor,
579581
ConversionPatternRewriter &rewriter) const override {
580-
std::string funcName = "llvm.aie.event" + std::to_string(op.getVal());
582+
auto device = op->getParentOfType<DeviceOp>();
583+
std::string funcName;
584+
SmallVector<Value, 1> args;
585+
switch (device.getTargetModel().getTargetArch()) {
586+
case AIEArch::AIE1:
587+
funcName = "llvm.aie.event" + std::to_string(op.getVal());
588+
break;
589+
case AIEArch::AIE2:
590+
funcName = "llvm.aie2.event";
591+
args.push_back(rewriter.create<arith::ConstantOp>(
592+
op.getLoc(), rewriter.getI32Type(),
593+
rewriter.getI32IntegerAttr(op.getVal())));
594+
break;
595+
case AIEArch::AIE2p:
596+
funcName = "llvm.aie2p.event";
597+
args.push_back(rewriter.create<arith::ConstantOp>(
598+
op.getLoc(), rewriter.getI32Type(),
599+
rewriter.getI32IntegerAttr(op.getVal())));
600+
break;
601+
default:
602+
return op->emitOpError("Unsupported AIEArch for EventOp lowering");
603+
}
581604
auto eventFunc = module.lookupSymbol<func::FuncOp>(funcName);
582605
if (!eventFunc)
583606
return op.emitOpError("Could not find the intrinsic function ")
584607
<< funcName;
585-
rewriter.create<func::CallOp>(rewriter.getUnknownLoc(), eventFunc,
586-
ValueRange({}));
608+
rewriter.create<func::CallOp>(rewriter.getUnknownLoc(), eventFunc, args);
587609
rewriter.eraseOp(op);
588610
return success();
589611
}

test/lower-to-standard/lower_event.mlir

Lines changed: 35 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,11 +8,12 @@
88
//
99
//===----------------------------------------------------------------------===//
1010

11-
// RUN: aie-opt --aie-standard-lowering %s | FileCheck %s
11+
// RUN: aie-opt --aie-standard-lowering --split-input-file %s | FileCheck %s
1212

13+
// CHECK-LABEL: test_aie1
1314
// CHECK: call @llvm.aie.event0()
1415
// CHECK: call @llvm.aie.event1()
15-
module @test {
16+
module @test_aie1 {
1617
aie.device(xcvc1902) {
1718
%tile11 = aie.tile(1, 1)
1819
%core11 = aie.core(%tile11) {
@@ -22,3 +23,35 @@ module @test {
2223
}
2324
}
2425
}
26+
27+
// -----
28+
29+
// CHECK-LABEL: test_aie2
30+
// CHECK: call @llvm.aie2.event(%{{.*}})
31+
// CHECK: call @llvm.aie2.event(%{{.*}})
32+
module @test_aie2 {
33+
aie.device(npu1) {
34+
%tile02 = aie.tile(0, 2)
35+
%core02 = aie.core(%tile02) {
36+
aie.event(0)
37+
aie.event(1)
38+
aie.end
39+
}
40+
}
41+
}
42+
43+
// -----
44+
45+
// CHECK-LABEL: test_aie2p
46+
// CHECK: call @llvm.aie2p.event(%{{.*}})
47+
// CHECK: call @llvm.aie2p.event(%{{.*}})
48+
module @test_aie2p {
49+
aie.device(npu2) {
50+
%tile02 = aie.tile(0, 2)
51+
%core02 = aie.core(%tile02) {
52+
aie.event(0)
53+
aie.event(1)
54+
aie.end
55+
}
56+
}
57+
}

0 commit comments

Comments
 (0)