diff options
Diffstat (limited to 'contrib/llvm-project/clang/lib/Basic/Targets/NVPTX.h')
-rw-r--r-- | contrib/llvm-project/clang/lib/Basic/Targets/NVPTX.h | 64 |
1 files changed, 43 insertions, 21 deletions
diff --git a/contrib/llvm-project/clang/lib/Basic/Targets/NVPTX.h b/contrib/llvm-project/clang/lib/Basic/Targets/NVPTX.h index 038dec4a28bd..25dc979d882f 100644 --- a/contrib/llvm-project/clang/lib/Basic/Targets/NVPTX.h +++ b/contrib/llvm-project/clang/lib/Basic/Targets/NVPTX.h @@ -16,8 +16,9 @@ #include "clang/Basic/Cuda.h" #include "clang/Basic/TargetInfo.h" #include "clang/Basic/TargetOptions.h" -#include "llvm/ADT/Triple.h" #include "llvm/Support/Compiler.h" +#include "llvm/TargetParser/Triple.h" +#include <optional> namespace clang { namespace targets { @@ -35,9 +36,18 @@ static const unsigned NVPTXAddrSpaceMap[] = { 1, // cuda_device 4, // cuda_constant 3, // cuda_shared + 1, // sycl_global + 1, // sycl_global_device + 1, // sycl_global_host + 3, // sycl_local + 0, // sycl_private 0, // ptr32_sptr 0, // ptr32_uptr - 0 // ptr64 + 0, // ptr64 + 0, // hlsl_groupshared + // Wasm address space values for this target are dummy values, + // as it is only enabled for Wasm targets. + 20, // wasm_funcref }; /// The DWARF address class. Taken from @@ -52,8 +62,7 @@ static const int NVPTXDWARFAddrSpaceMap[] = { class LLVM_LIBRARY_VISIBILITY NVPTXTargetInfo : public TargetInfo { static const char *const GCCRegNames[]; - static const Builtin::Info BuiltinInfo[]; - CudaArch GPU; + OffloadArch GPU; uint32_t PTXVersion; std::unique_ptr<TargetInfo> HostTarget; @@ -66,11 +75,14 @@ public: ArrayRef<Builtin::Info> getTargetBuiltins() const override; + bool useFP16ConversionIntrinsics() const override { return false; } + bool initFeatureMap(llvm::StringMap<bool> &Features, DiagnosticsEngine &Diags, StringRef CPU, const std::vector<std::string> &FeaturesVec) const override { - Features[CudaArchToString(GPU)] = true; + if (GPU != OffloadArch::UNUSED) + Features[OffloadArchToString(GPU)] = true; Features["ptx" + std::to_string(PTXVersion)] = true; return TargetInfo::initFeatureMap(Features, Diags, CPU, FeaturesVec); } @@ -81,7 +93,7 @@ public: ArrayRef<TargetInfo::GCCRegAlias> getGCCRegAliases() const override { // No aliases. - return None; + return std::nullopt; } bool validateAsmConstraint(const char *&Name, @@ -95,34 +107,34 @@ public: case 'l': case 'f': case 'd': + case 'q': Info.setAllowsRegister(); return true; } } - const char *getClobbers() const override { + std::string_view getClobbers() const override { // FIXME: Is this really right? return ""; } BuiltinVaListKind getBuiltinVaListKind() const override { - // FIXME: implement - return TargetInfo::CharPtrBuiltinVaList; + return TargetInfo::VoidPtrBuiltinVaList; } bool isValidCPUName(StringRef Name) const override { - return StringToCudaArch(Name) != CudaArch::UNKNOWN; + return StringToOffloadArch(Name) != OffloadArch::UNKNOWN; } void fillValidCPUList(SmallVectorImpl<StringRef> &Values) const override { - for (int i = static_cast<int>(CudaArch::SM_20); - i < static_cast<int>(CudaArch::LAST); ++i) - Values.emplace_back(CudaArchToString(static_cast<CudaArch>(i))); + for (int i = static_cast<int>(OffloadArch::SM_20); + i < static_cast<int>(OffloadArch::Generic); ++i) + Values.emplace_back(OffloadArchToString(static_cast<OffloadArch>(i))); } bool setCPU(const std::string &Name) override { - GPU = StringToCudaArch(Name); - return GPU != CudaArch::UNKNOWN; + GPU = StringToOffloadArch(Name); + return GPU != OffloadArch::UNKNOWN; } void setSupportedOpenCLOpts() override { @@ -130,8 +142,11 @@ public: Opts["cl_clang_storage_class_specifiers"] = true; Opts["__cl_clang_function_pointers"] = true; Opts["__cl_clang_variadic_functions"] = true; + Opts["__cl_clang_non_portable_kernel_param_types"] = true; + Opts["__cl_clang_bitfields"] = true; Opts["cl_khr_fp64"] = true; + Opts["__opencl_c_fp64"] = true; Opts["cl_khr_byte_addressable_store"] = true; Opts["cl_khr_global_int32_base_atomics"] = true; Opts["cl_khr_global_int32_extended_atomics"] = true; @@ -139,17 +154,21 @@ public: Opts["cl_khr_local_int32_extended_atomics"] = true; } + const llvm::omp::GV &getGridValue() const override { + return llvm::omp::NVPTXGridValues; + } + /// \returns If a target requires an address within a target specific address /// space \p AddressSpace to be converted in order to be used, then return the /// corresponding target specific DWARF address space. /// - /// \returns Otherwise return None and no conversion will be emitted in the - /// DWARF. - Optional<unsigned> + /// \returns Otherwise return std::nullopt and no conversion will be emitted + /// in the DWARF. + std::optional<unsigned> getDWARFAddressSpace(unsigned AddressSpace) const override { - if (AddressSpace >= llvm::array_lengthof(NVPTXDWARFAddrSpaceMap) || + if (AddressSpace >= std::size(NVPTXDWARFAddrSpaceMap) || NVPTXDWARFAddrSpaceMap[AddressSpace] < 0) - return llvm::None; + return std::nullopt; return NVPTXDWARFAddrSpaceMap[AddressSpace]; } @@ -163,7 +182,10 @@ public: return CCCR_Warning; } - bool hasExtIntType() const override { return true; } + bool hasBitIntType() const override { return true; } + bool hasBFloat16Type() const override { return true; } + + OffloadArch getGPU() const { return GPU; } }; } // namespace targets } // namespace clang |