xref: /freebsd-src/contrib/llvm-project/clang/lib/Basic/Targets/DirectX.h (revision 81ad626541db97eb356e2c1d4a20eb2a26a766ab)
1*81ad6265SDimitry Andric //===--- DirectX.h - Declare DirectX target feature support -----*- C++ -*-===//
2*81ad6265SDimitry Andric //
3*81ad6265SDimitry Andric // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4*81ad6265SDimitry Andric // See https://llvm.org/LICENSE.txt for license information.
5*81ad6265SDimitry Andric // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6*81ad6265SDimitry Andric //
7*81ad6265SDimitry Andric //===----------------------------------------------------------------------===//
8*81ad6265SDimitry Andric //
9*81ad6265SDimitry Andric // This file declares DXIL TargetInfo objects.
10*81ad6265SDimitry Andric //
11*81ad6265SDimitry Andric //===----------------------------------------------------------------------===//
12*81ad6265SDimitry Andric 
13*81ad6265SDimitry Andric #ifndef LLVM_CLANG_LIB_BASIC_TARGETS_DIRECTX_H
14*81ad6265SDimitry Andric #define LLVM_CLANG_LIB_BASIC_TARGETS_DIRECTX_H
15*81ad6265SDimitry Andric #include "clang/Basic/TargetInfo.h"
16*81ad6265SDimitry Andric #include "clang/Basic/TargetOptions.h"
17*81ad6265SDimitry Andric #include "llvm/ADT/Triple.h"
18*81ad6265SDimitry Andric #include "llvm/Support/Compiler.h"
19*81ad6265SDimitry Andric 
20*81ad6265SDimitry Andric namespace clang {
21*81ad6265SDimitry Andric namespace targets {
22*81ad6265SDimitry Andric 
23*81ad6265SDimitry Andric static const unsigned DirectXAddrSpaceMap[] = {
24*81ad6265SDimitry Andric     0, // Default
25*81ad6265SDimitry Andric     1, // opencl_global
26*81ad6265SDimitry Andric     3, // opencl_local
27*81ad6265SDimitry Andric     2, // opencl_constant
28*81ad6265SDimitry Andric     0, // opencl_private
29*81ad6265SDimitry Andric     4, // opencl_generic
30*81ad6265SDimitry Andric     5, // opencl_global_device
31*81ad6265SDimitry Andric     6, // opencl_global_host
32*81ad6265SDimitry Andric     0, // cuda_device
33*81ad6265SDimitry Andric     0, // cuda_constant
34*81ad6265SDimitry Andric     0, // cuda_shared
35*81ad6265SDimitry Andric     // SYCL address space values for this map are dummy
36*81ad6265SDimitry Andric     0, // sycl_global
37*81ad6265SDimitry Andric     0, // sycl_global_device
38*81ad6265SDimitry Andric     0, // sycl_global_host
39*81ad6265SDimitry Andric     0, // sycl_local
40*81ad6265SDimitry Andric     0, // sycl_private
41*81ad6265SDimitry Andric     0, // ptr32_sptr
42*81ad6265SDimitry Andric     0, // ptr32_uptr
43*81ad6265SDimitry Andric     0  // ptr64
44*81ad6265SDimitry Andric };
45*81ad6265SDimitry Andric 
46*81ad6265SDimitry Andric class LLVM_LIBRARY_VISIBILITY DirectXTargetInfo : public TargetInfo {
47*81ad6265SDimitry Andric public:
48*81ad6265SDimitry Andric   DirectXTargetInfo(const llvm::Triple &Triple, const TargetOptions &)
49*81ad6265SDimitry Andric       : TargetInfo(Triple) {
50*81ad6265SDimitry Andric     TLSSupported = false;
51*81ad6265SDimitry Andric     VLASupported = false;
52*81ad6265SDimitry Andric     LongWidth = LongAlign = 64;
53*81ad6265SDimitry Andric     AddrSpaceMap = &DirectXAddrSpaceMap;
54*81ad6265SDimitry Andric     UseAddrSpaceMapMangling = true;
55*81ad6265SDimitry Andric     HasLegalHalfType = true;
56*81ad6265SDimitry Andric     HasFloat16 = true;
57*81ad6265SDimitry Andric     NoAsmVariants = true;
58*81ad6265SDimitry Andric     resetDataLayout("e-m:e-p:32:32-i1:32-i8:8-i16:16-i32:32-i64:64-f16:16-f32:"
59*81ad6265SDimitry Andric                     "32-f64:64-n8:16:32:64");
60*81ad6265SDimitry Andric     TheCXXABI.set(TargetCXXABI::Microsoft);
61*81ad6265SDimitry Andric   }
62*81ad6265SDimitry Andric   bool useFP16ConversionIntrinsics() const override { return false; }
63*81ad6265SDimitry Andric   void getTargetDefines(const LangOptions &Opts,
64*81ad6265SDimitry Andric                         MacroBuilder &Builder) const override;
65*81ad6265SDimitry Andric 
66*81ad6265SDimitry Andric   bool hasFeature(StringRef Feature) const override {
67*81ad6265SDimitry Andric     return Feature == "directx";
68*81ad6265SDimitry Andric   }
69*81ad6265SDimitry Andric 
70*81ad6265SDimitry Andric   ArrayRef<Builtin::Info> getTargetBuiltins() const override { return None; }
71*81ad6265SDimitry Andric 
72*81ad6265SDimitry Andric   const char *getClobbers() const override { return ""; }
73*81ad6265SDimitry Andric 
74*81ad6265SDimitry Andric   ArrayRef<const char *> getGCCRegNames() const override { return None; }
75*81ad6265SDimitry Andric 
76*81ad6265SDimitry Andric   bool validateAsmConstraint(const char *&Name,
77*81ad6265SDimitry Andric                              TargetInfo::ConstraintInfo &info) const override {
78*81ad6265SDimitry Andric     return true;
79*81ad6265SDimitry Andric   }
80*81ad6265SDimitry Andric 
81*81ad6265SDimitry Andric   ArrayRef<TargetInfo::GCCRegAlias> getGCCRegAliases() const override {
82*81ad6265SDimitry Andric     return None;
83*81ad6265SDimitry Andric   }
84*81ad6265SDimitry Andric 
85*81ad6265SDimitry Andric   BuiltinVaListKind getBuiltinVaListKind() const override {
86*81ad6265SDimitry Andric     return TargetInfo::VoidPtrBuiltinVaList;
87*81ad6265SDimitry Andric   }
88*81ad6265SDimitry Andric };
89*81ad6265SDimitry Andric 
90*81ad6265SDimitry Andric } // namespace targets
91*81ad6265SDimitry Andric } // namespace clang
92*81ad6265SDimitry Andric 
93*81ad6265SDimitry Andric #endif // LLVM_CLANG_LIB_BASIC_TARGETS_DIRECTX_H
94