1c5e54e27SChris Bieneman //===--- DirectX.h - Declare DirectX target feature support -----*- C++ -*-===// 2c5e54e27SChris Bieneman // 3c5e54e27SChris Bieneman // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 4c5e54e27SChris Bieneman // See https://llvm.org/LICENSE.txt for license information. 5c5e54e27SChris Bieneman // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 6c5e54e27SChris Bieneman // 7c5e54e27SChris Bieneman //===----------------------------------------------------------------------===// 8c5e54e27SChris Bieneman // 9c5e54e27SChris Bieneman // This file declares DXIL TargetInfo objects. 10c5e54e27SChris Bieneman // 11c5e54e27SChris Bieneman //===----------------------------------------------------------------------===// 12c5e54e27SChris Bieneman 13c5e54e27SChris Bieneman #ifndef LLVM_CLANG_LIB_BASIC_TARGETS_DIRECTX_H 14c5e54e27SChris Bieneman #define LLVM_CLANG_LIB_BASIC_TARGETS_DIRECTX_H 15c5e54e27SChris Bieneman #include "clang/Basic/TargetInfo.h" 16c5e54e27SChris Bieneman #include "clang/Basic/TargetOptions.h" 17c5e54e27SChris Bieneman #include "llvm/Support/Compiler.h" 1862c7f035SArchibald Elliott #include "llvm/TargetParser/Triple.h" 19c5e54e27SChris Bieneman 20c5e54e27SChris Bieneman namespace clang { 21c5e54e27SChris Bieneman namespace targets { 22c5e54e27SChris Bieneman 23c5e54e27SChris Bieneman static const unsigned DirectXAddrSpaceMap[] = { 24c5e54e27SChris Bieneman 0, // Default 25c5e54e27SChris Bieneman 1, // opencl_global 26c5e54e27SChris Bieneman 3, // opencl_local 27c5e54e27SChris Bieneman 2, // opencl_constant 28c5e54e27SChris Bieneman 0, // opencl_private 29c5e54e27SChris Bieneman 4, // opencl_generic 30c5e54e27SChris Bieneman 5, // opencl_global_device 31c5e54e27SChris Bieneman 6, // opencl_global_host 32c5e54e27SChris Bieneman 0, // cuda_device 33c5e54e27SChris Bieneman 0, // cuda_constant 34c5e54e27SChris Bieneman 0, // cuda_shared 35c5e54e27SChris Bieneman // SYCL address space values for this map are dummy 36c5e54e27SChris Bieneman 0, // sycl_global 37c5e54e27SChris Bieneman 0, // sycl_global_device 38c5e54e27SChris Bieneman 0, // sycl_global_host 39c5e54e27SChris Bieneman 0, // sycl_local 40c5e54e27SChris Bieneman 0, // sycl_private 41c5e54e27SChris Bieneman 0, // ptr32_sptr 42c5e54e27SChris Bieneman 0, // ptr32_uptr 437e04c0adSXiang Li 0, // ptr64 447e04c0adSXiang Li 3, // hlsl_groupshared 45*d92bac8aSHelena Kotas 2, // hlsl_constant 468d0c8897SPaulo Matos // Wasm address space values for this target are dummy values, 478d0c8897SPaulo Matos // as it is only enabled for Wasm targets. 488d0c8897SPaulo Matos 20, // wasm_funcref 49c5e54e27SChris Bieneman }; 50c5e54e27SChris Bieneman 51c5e54e27SChris Bieneman class LLVM_LIBRARY_VISIBILITY DirectXTargetInfo : public TargetInfo { 52c5e54e27SChris Bieneman public: 53c5e54e27SChris Bieneman DirectXTargetInfo(const llvm::Triple &Triple, const TargetOptions &) 54c5e54e27SChris Bieneman : TargetInfo(Triple) { 55c5e54e27SChris Bieneman TLSSupported = false; 56c5e54e27SChris Bieneman VLASupported = false; 57c5e54e27SChris Bieneman AddrSpaceMap = &DirectXAddrSpaceMap; 58c5e54e27SChris Bieneman UseAddrSpaceMapMangling = true; 59c5e54e27SChris Bieneman HasLegalHalfType = true; 60c5e54e27SChris Bieneman HasFloat16 = true; 61c5e54e27SChris Bieneman NoAsmVariants = true; 6210378c45SChris Bieneman PlatformMinVersion = Triple.getOSVersion(); 6310378c45SChris Bieneman PlatformName = llvm::Triple::getOSTypeName(Triple.getOS()); 64c5e54e27SChris Bieneman resetDataLayout("e-m:e-p:32:32-i1:32-i8:8-i16:16-i32:32-i64:64-f16:16-f32:" 65c5e54e27SChris Bieneman "32-f64:64-n8:16:32:64"); 66c2063de1SGreg Roth TheCXXABI.set(TargetCXXABI::GenericItanium); 67c5e54e27SChris Bieneman } 6877f72ac1SXiang Li bool useFP16ConversionIntrinsics() const override { return false; } 69c5e54e27SChris Bieneman void getTargetDefines(const LangOptions &Opts, 70c5e54e27SChris Bieneman MacroBuilder &Builder) const override; 71c5e54e27SChris Bieneman 72c5e54e27SChris Bieneman bool hasFeature(StringRef Feature) const override { 73c5e54e27SChris Bieneman return Feature == "directx"; 74c5e54e27SChris Bieneman } 75c5e54e27SChris Bieneman 76ca79ff07SChandler Carruth ArrayRef<Builtin::Info> getTargetBuiltins() const override { return {}; } 77c5e54e27SChris Bieneman 7842d758bfSStoorx std::string_view getClobbers() const override { return ""; } 79c5e54e27SChris Bieneman 804dd55c56SJay Foad ArrayRef<const char *> getGCCRegNames() const override { return {}; } 81c5e54e27SChris Bieneman 82c5e54e27SChris Bieneman bool validateAsmConstraint(const char *&Name, 83c5e54e27SChris Bieneman TargetInfo::ConstraintInfo &info) const override { 84c5e54e27SChris Bieneman return true; 85c5e54e27SChris Bieneman } 86c5e54e27SChris Bieneman 87c5e54e27SChris Bieneman ArrayRef<TargetInfo::GCCRegAlias> getGCCRegAliases() const override { 884dd55c56SJay Foad return {}; 89c5e54e27SChris Bieneman } 90c5e54e27SChris Bieneman 91c5e54e27SChris Bieneman BuiltinVaListKind getBuiltinVaListKind() const override { 92c5e54e27SChris Bieneman return TargetInfo::VoidPtrBuiltinVaList; 93c5e54e27SChris Bieneman } 9426c582bbSGreg Roth 9526c582bbSGreg Roth void adjust(DiagnosticsEngine &Diags, LangOptions &Opts) override { 9626c582bbSGreg Roth TargetInfo::adjust(Diags, Opts); 9726c582bbSGreg Roth // The static values this addresses do not apply outside of the same thread 9826c582bbSGreg Roth // This protection is neither available nor needed 9926c582bbSGreg Roth Opts.ThreadsafeStatics = false; 10026c582bbSGreg Roth } 101c5e54e27SChris Bieneman }; 102c5e54e27SChris Bieneman 103c5e54e27SChris Bieneman } // namespace targets 104c5e54e27SChris Bieneman } // namespace clang 105c5e54e27SChris Bieneman 106c5e54e27SChris Bieneman #endif // LLVM_CLANG_LIB_BASIC_TARGETS_DIRECTX_H 107