@@ -5104,6 +5104,33 @@ convertOmpTarget(Operation &opInst, llvm::IRBuilderBase &builder,
51045104 return success ();
51055105}
51065106
5107+ // Add DIOp based expression in the declare target variables for AMDGPU target.
5108+ static void updateDebugInfoForDeclareTargetVariables (
5109+ LLVM::GlobalOp globalOp, LLVM::ModuleTranslation &moduleTranslation) {
5110+ llvm::Module *M = moduleTranslation.getLLVMModule ();
5111+ if (!llvm::Triple (M->getTargetTriple ()).isAMDGPU ())
5112+ return ;
5113+
5114+ llvm::GlobalVariable *GV = M->getGlobalVariable (globalOp.getSymName ());
5115+ if (GV) {
5116+ llvm::SmallVector<llvm::DIGlobalVariableExpression *> GVEs;
5117+ GV->getDebugInfo (GVEs);
5118+ GV->eraseMetadata (llvm::LLVMContext::MD_dbg);
5119+ llvm::DIExprBuilder ExprBuilder (M->getContext ());
5120+ unsigned int globalAS = M->getDataLayout ().getDefaultGlobalsAddressSpace ();
5121+ auto ptrTy = llvm::PointerType::get (M->getContext (), globalAS);
5122+ ExprBuilder.append <llvm::DIOp::Arg>(0u , ptrTy);
5123+ ExprBuilder.append <llvm::DIOp::Deref>(GV->getType ());
5124+ for (auto *GVE : GVEs) {
5125+ llvm::DIExpression *Old = GVE->getExpression ();
5126+ assert ((Old == nullptr ) || (Old->getNumElements () == 0 ));
5127+ auto *newGVE = llvm::DIGlobalVariableExpression::get (
5128+ M->getContext (), GVE->getVariable (), ExprBuilder.intoExpression ());
5129+ GV->addDebugInfo (newGVE);
5130+ }
5131+ }
5132+ }
5133+
51075134static LogicalResult
51085135convertDeclareTargetAttr (Operation *op, mlir::omp::DeclareTargetAttr attribute,
51095136 LLVM::ModuleTranslation &moduleTranslation) {
@@ -5135,6 +5162,7 @@ convertDeclareTargetAttr(Operation *op, mlir::omp::DeclareTargetAttr attribute,
51355162
51365163 if (LLVM::GlobalOp gOp = dyn_cast<LLVM::GlobalOp>(op)) {
51375164 llvm::Module *llvmModule = moduleTranslation.getLLVMModule ();
5165+ updateDebugInfoForDeclareTargetVariables (gOp , moduleTranslation);
51385166 if (auto *gVal = llvmModule->getNamedValue (gOp .getSymName ())) {
51395167 llvm::OpenMPIRBuilder *ompBuilder = moduleTranslation.getOpenMPBuilder ();
51405168 bool isDeclaration = gOp .isDeclaration ();
0 commit comments