@@ -5104,6 +5104,33 @@ convertOmpTarget(Operation &opInst, llvm::IRBuilderBase &builder,
5104
5104
return success ();
5105
5105
}
5106
5106
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
+
5107
5134
static LogicalResult
5108
5135
convertDeclareTargetAttr (Operation *op, mlir::omp::DeclareTargetAttr attribute,
5109
5136
LLVM::ModuleTranslation &moduleTranslation) {
@@ -5135,6 +5162,7 @@ convertDeclareTargetAttr(Operation *op, mlir::omp::DeclareTargetAttr attribute,
5135
5162
5136
5163
if (LLVM::GlobalOp gOp = dyn_cast<LLVM::GlobalOp>(op)) {
5137
5164
llvm::Module *llvmModule = moduleTranslation.getLLVMModule ();
5165
+ updateDebugInfoForDeclareTargetVariables (gOp , moduleTranslation);
5138
5166
if (auto *gVal = llvmModule->getNamedValue (gOp .getSymName ())) {
5139
5167
llvm::OpenMPIRBuilder *ompBuilder = moduleTranslation.getOpenMPBuilder ();
5140
5168
bool isDeclaration = gOp .isDeclaration ();
0 commit comments