@@ -788,6 +788,45 @@ struct CUFLaunchOpConversion
788788 const mlir::SymbolTable &symTab;
789789};
790790
791+ struct CUFSyncDescriptorOpConversion
792+ : public mlir::OpRewritePattern<cuf::SyncDescriptorOp> {
793+ using OpRewritePattern::OpRewritePattern;
794+
795+ CUFSyncDescriptorOpConversion (mlir::MLIRContext *context,
796+ const mlir::SymbolTable &symTab)
797+ : OpRewritePattern(context), symTab{symTab} {}
798+
799+ mlir::LogicalResult
800+ matchAndRewrite (cuf::SyncDescriptorOp op,
801+ mlir::PatternRewriter &rewriter) const override {
802+ auto mod = op->getParentOfType <mlir::ModuleOp>();
803+ fir::FirOpBuilder builder (rewriter, mod);
804+ mlir::Location loc = op.getLoc ();
805+
806+ auto globalOp = mod.lookupSymbol <fir::GlobalOp>(op.getGlobalName ());
807+ if (!globalOp)
808+ return mlir::failure ();
809+
810+ auto hostAddr = builder.create <fir::AddrOfOp>(
811+ loc, fir::ReferenceType::get (globalOp.getType ()), op.getGlobalName ());
812+ mlir::func::FuncOp callee =
813+ fir::runtime::getRuntimeFunc<mkRTKey (CUFSyncGlobalDescriptor)>(loc,
814+ builder);
815+ auto fTy = callee.getFunctionType ();
816+ mlir::Value sourceFile = fir::factory::locationToFilename (builder, loc);
817+ mlir::Value sourceLine =
818+ fir::factory::locationToLineNo (builder, loc, fTy .getInput (2 ));
819+ llvm::SmallVector<mlir::Value> args{fir::runtime::createArguments (
820+ builder, loc, fTy , hostAddr, sourceFile, sourceLine)};
821+ builder.create <fir::CallOp>(loc, callee, args);
822+ op.erase ();
823+ return mlir::success ();
824+ }
825+
826+ private:
827+ const mlir::SymbolTable &symTab;
828+ };
829+
791830class CUFOpConversion : public fir ::impl::CUFOpConversionBase<CUFOpConversion> {
792831public:
793832 void runOnOperation () override {
@@ -851,7 +890,8 @@ void cuf::populateCUFToFIRConversionPatterns(
851890 CUFFreeOpConversion>(patterns.getContext ());
852891 patterns.insert <CUFDataTransferOpConversion>(patterns.getContext (), symtab,
853892 &dl, &converter);
854- patterns.insert <CUFLaunchOpConversion>(patterns.getContext (), symtab);
893+ patterns.insert <CUFLaunchOpConversion, CUFSyncDescriptorOpConversion>(
894+ patterns.getContext (), symtab);
855895}
856896
857897void cuf::populateFIRCUFConversionPatterns (const mlir::SymbolTable &symtab,
0 commit comments