diff --git a/clang/lib/Basic/Targets/NVPTX.cpp b/clang/lib/Basic/Targets/NVPTX.cpp index 1a1d39636fa2d..1081e0ad679c9 100644 --- a/clang/lib/Basic/Targets/NVPTX.cpp +++ b/clang/lib/Basic/Targets/NVPTX.cpp @@ -62,8 +62,7 @@ NVPTXTargetInfo::NVPTXTargetInfo(const llvm::Triple &Triple, .Default(32); } - // FIXME: Needed for compiling SYCL to PTX. - TLSSupported = Triple.getEnvironment() == llvm::Triple::SYCLDevice; + TLSSupported = false; VLASupported = false; AddrSpaceMap = &NVPTXAddrSpaceMap; GridValues = llvm::omp::NVPTXGpuGridValues; diff --git a/clang/lib/Basic/Targets/NVPTX.h b/clang/lib/Basic/Targets/NVPTX.h index 2b4f0ec3eccae..eb158a17e0bca 100644 --- a/clang/lib/Basic/Targets/NVPTX.h +++ b/clang/lib/Basic/Targets/NVPTX.h @@ -171,6 +171,12 @@ class LLVM_LIBRARY_VISIBILITY NVPTXTargetInfo : public TargetInfo { return CCCR_Warning; } + void adjust(LangOptions &Opts) override { + TargetInfo::adjust(Opts); + // FIXME: Needed for compiling SYCL to PTX. + TLSSupported = TLSSupported || Opts.SYCLIsDevice; + } + bool hasExtIntType() const override { return true; } }; } // namespace targets diff --git a/llvm/lib/Target/NVPTX/NVPTXTargetMachine.cpp b/llvm/lib/Target/NVPTX/NVPTXTargetMachine.cpp index cb729548c9d16..b657f6f4531fa 100644 --- a/llvm/lib/Target/NVPTX/NVPTXTargetMachine.cpp +++ b/llvm/lib/Target/NVPTX/NVPTXTargetMachine.cpp @@ -304,8 +304,9 @@ void NVPTXPassConfig::addIRPasses() { const NVPTXSubtarget &ST = *getTM().getSubtargetImpl(); addPass(createNVVMReflectPass(ST.getSmVersion())); - if (getTM().getTargetTriple().getOS() == Triple::CUDA && - getTM().getTargetTriple().getEnvironment() == Triple::SYCLDevice) { + // FIXME: should the target triple check be done by the pass itself? + // See createNVPTXLowerArgsPass as an example + if (getTM().getTargetTriple().getOS() == Triple::CUDA) { addPass(createGlobalOffsetPass()); addPass(createLocalAccessorToSharedMemoryPass()); } diff --git a/llvm/lib/Target/NVPTX/SYCL/LocalAccessorToSharedMemory.cpp b/llvm/lib/Target/NVPTX/SYCL/LocalAccessorToSharedMemory.cpp index 00da015870099..fc8374f647f82 100644 --- a/llvm/lib/Target/NVPTX/SYCL/LocalAccessorToSharedMemory.cpp +++ b/llvm/lib/Target/NVPTX/SYCL/LocalAccessorToSharedMemory.cpp @@ -38,7 +38,8 @@ class LocalAccessorToSharedMemory : public ModulePass { bool runOnModule(Module &M) override { // Invariant: This pass is only intended to operate on SYCL kernels being - // compiled to the `nvptx{,64}-nvidia-cuda-sycldevice` triple. + // compiled to the `nvptx{,64}-nvidia-cuda` triple. + // TODO: make sure that non-SYCL kernels are not impacted. if (skipModule(M)) return false; @@ -48,7 +49,9 @@ class LocalAccessorToSharedMemory : public ModulePass { // Access `nvvm.annotations` to determine which functions are kernel entry // points. auto NvvmMetadata = M.getNamedMetadata("nvvm.annotations"); - assert(NvvmMetadata && "IR compiled to PTX must have nvvm.annotations"); + if (!NvvmMetadata) + return false; + for (auto MetadataNode : NvvmMetadata->operands()) { if (MetadataNode->getNumOperands() != 3) continue;