diff --git a/llvm/lib/Transforms/IPO/OpenMPOpt.cpp b/llvm/lib/Transforms/IPO/OpenMPOpt.cpp index 783f6df2da2901..b8e15a2895daa3 100644 --- a/llvm/lib/Transforms/IPO/OpenMPOpt.cpp +++ b/llvm/lib/Transforms/IPO/OpenMPOpt.cpp @@ -287,6 +287,20 @@ struct OMPInformationCache : public InformationCache { OpenMPPostLink(OpenMPPostLink) { OMPBuilder.Config.IsTargetDevice = isOpenMPDevice(OMPBuilder.M); + const Triple T(OMPBuilder.M.getTargetTriple()); + switch (T.getArch()) { + case llvm::Triple::nvptx: + case llvm::Triple::nvptx64: + case llvm::Triple::amdgcn: + assert(OMPBuilder.Config.IsTargetDevice && + "OpenMP AMDGPU/NVPTX is only prepared to deal with device code."); + OMPBuilder.Config.IsGPU = true; + break; + default: + OMPBuilder.Config.IsGPU = false; + break; + } + OMPBuilder.initialize(); initializeRuntimeFunctions(M); initializeInternalControlVars();