Index: lib/CodeGen/CGOpenMPRuntime.h =================================================================== --- lib/CodeGen/CGOpenMPRuntime.h +++ lib/CodeGen/CGOpenMPRuntime.h @@ -1623,6 +1623,9 @@ /// the predefined allocator and translates it into the corresponding address /// space. virtual bool hasAllocateAttributeForGlobalVar(const VarDecl *VD, LangAS &AS); + + /// Return whether the unified_shared_memory has been specified. + virtual bool hasRequiresUnifiedSharedMemory(); }; /// Class supports emissionof SIMD-only code. Index: lib/CodeGen/CGOpenMPRuntime.cpp =================================================================== --- lib/CodeGen/CGOpenMPRuntime.cpp +++ lib/CodeGen/CGOpenMPRuntime.cpp @@ -8255,6 +8255,10 @@ MapValuesArrayTy &Pointers, MapValuesArrayTy &Sizes, MapFlagsArrayTy &Types) const { + // If using unified memory, no need to do the mappings. + if (CGF.CGM.getOpenMPRuntime().hasRequiresUnifiedSharedMemory()) + return; + // Map other list items in the map clause which are not captured variables // but "declare target link" global variables. for (const auto *C : this->CurDir.getClausesOfKind()) { @@ -9251,6 +9255,10 @@ return false; } +bool CGOpenMPRuntime::hasRequiresUnifiedSharedMemory() { + return HasRequiresUnifiedSharedMemory; +} + CGOpenMPRuntime::DisableAutoDeclareTargetRAII::DisableAutoDeclareTargetRAII( CodeGenModule &CGM) : CGM(CGM) {