| //===--- DirectX.h - Declare DirectX target feature support -----*- C++ -*-===// |
| // |
| // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. |
| // See https://llvm.org/LICENSE.txt for license information. |
| // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception |
| // |
| //===----------------------------------------------------------------------===// |
| // |
| // This file declares DXIL TargetInfo objects. |
| // |
| //===----------------------------------------------------------------------===// |
| |
| #ifndef LLVM_CLANG_LIB_BASIC_TARGETS_DIRECTX_H |
| #define LLVM_CLANG_LIB_BASIC_TARGETS_DIRECTX_H |
| #include "clang/Basic/TargetInfo.h" |
| #include "clang/Basic/TargetOptions.h" |
| #include "llvm/Support/Compiler.h" |
| #include "llvm/TargetParser/Triple.h" |
| |
| namespace clang { |
| namespace targets { |
| |
| static const unsigned DirectXAddrSpaceMap[] = { |
| 0, // Default |
| 1, // opencl_global |
| 3, // opencl_local |
| 2, // opencl_constant |
| 0, // opencl_private |
| 4, // opencl_generic |
| 5, // opencl_global_device |
| 6, // opencl_global_host |
| 0, // cuda_device |
| 0, // cuda_constant |
| 0, // cuda_shared |
| // SYCL address space values for this map are dummy |
| 0, // sycl_global |
| 0, // sycl_global_device |
| 0, // sycl_global_host |
| 0, // sycl_local |
| 0, // sycl_private |
| 0, // ptr32_sptr |
| 0, // ptr32_uptr |
| 0, // ptr64 |
| 3, // hlsl_groupshared |
| // Wasm address space values for this target are dummy values, |
| // as it is only enabled for Wasm targets. |
| 20, // wasm_funcref |
| }; |
| |
| class LLVM_LIBRARY_VISIBILITY DirectXTargetInfo : public TargetInfo { |
| public: |
| DirectXTargetInfo(const llvm::Triple &Triple, const TargetOptions &) |
| : TargetInfo(Triple) { |
| TLSSupported = false; |
| VLASupported = false; |
| LongWidth = LongAlign = 64; |
| AddrSpaceMap = &DirectXAddrSpaceMap; |
| UseAddrSpaceMapMangling = true; |
| HasLegalHalfType = true; |
| HasFloat16 = true; |
| NoAsmVariants = true; |
| PlatformMinVersion = Triple.getOSVersion(); |
| PlatformName = llvm::Triple::getOSTypeName(Triple.getOS()); |
| resetDataLayout("e-m:e-p:32:32-i1:32-i8:8-i16:16-i32:32-i64:64-f16:16-f32:" |
| "32-f64:64-n8:16:32:64"); |
| TheCXXABI.set(TargetCXXABI::Microsoft); |
| } |
| bool useFP16ConversionIntrinsics() const override { return false; } |
| void getTargetDefines(const LangOptions &Opts, |
| MacroBuilder &Builder) const override; |
| |
| bool hasFeature(StringRef Feature) const override { |
| return Feature == "directx"; |
| } |
| |
| ArrayRef<Builtin::Info> getTargetBuiltins() const override { |
| return std::nullopt; |
| } |
| |
| std::string_view getClobbers() const override { return ""; } |
| |
| ArrayRef<const char *> getGCCRegNames() const override { |
| return std::nullopt; |
| } |
| |
| bool validateAsmConstraint(const char *&Name, |
| TargetInfo::ConstraintInfo &info) const override { |
| return true; |
| } |
| |
| ArrayRef<TargetInfo::GCCRegAlias> getGCCRegAliases() const override { |
| return std::nullopt; |
| } |
| |
| BuiltinVaListKind getBuiltinVaListKind() const override { |
| return TargetInfo::VoidPtrBuiltinVaList; |
| } |
| }; |
| |
| } // namespace targets |
| } // namespace clang |
| |
| #endif // LLVM_CLANG_LIB_BASIC_TARGETS_DIRECTX_H |