@@ -963,6 +963,8 @@ void DwarfCompileUnit::applyConcreteDbgVariableAttributes(
963963
964964 if (Expr) {
965965 if (auto NewElementsRef = Expr->getNewElementsRef ()) {
966+ if (DV.isDivergentAddrSpaceCompatible ())
967+ DwarfExpr.permitDivergentAddrSpace ();
966968 DwarfExpr.addExpression (*NewElementsRef, DVal->getLocEntries (), &TRI);
967969 addBlock (VariableDie, dwarf::DW_AT_location, DwarfExpr.finalize ());
968970 return ;
@@ -1045,6 +1047,8 @@ void DwarfCompileUnit::applyConcreteDbgVariableAttributes(const Loc::MMI &MMI,
10451047 addBlock (VariableDie, dwarf::DW_AT_location, DwarfExpr.finalize ());
10461048 return ;
10471049 }
1050+ if (DV.isDivergentAddrSpaceCompatible ())
1051+ DwarfExpr.permitDivergentAddrSpace ();
10481052 for (const auto &Fragment : MMI.getFrameIndexExprs ()) {
10491053 Register FrameReg;
10501054 const DIExpression *Expr = Fragment.Expr ;
@@ -1840,7 +1844,19 @@ void DwarfCompileUnit::applyCommonDbgVariableAttributes(const DbgVariable &Var,
18401844 }
18411845
18421846 addSourceLine (VariableDie, DIVar);
1843- addType (VariableDie, Var.getType ());
1847+
1848+ const DIType *VarTy = Var.getType ();
1849+ if (Var.isDivergentAddrSpaceCompatible ()) {
1850+ if (std::optional<unsigned > EntityAS = Var.getCommonDivergentAddrSpace ()) {
1851+ if (auto DwarfAS = getAsmPrinter ()->TM .mapToDWARFAddrSpace (*EntityAS)) {
1852+ TempDIDerivedType Tmp =
1853+ cast<DIDerivedType>(VarTy)->cloneWithAddressSpace (*DwarfAS);
1854+ VarTy = MDNode::replaceWithUniqued (std::move (Tmp));
1855+ }
1856+ }
1857+ }
1858+
1859+ addType (VariableDie, VarTy);
18441860 if (Var.isArtificial ())
18451861 addFlag (VariableDie, dwarf::DW_AT_artificial);
18461862}
0 commit comments