@@ -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 }
0 commit comments