xref: /llvm-project/clang/lib/Basic/Targets/DirectX.h (revision d92bac8a3ebb19106f6bca6b7613a27c52cb48ab)
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