123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100 |
- //===--- 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/ADT/Triple.h"
- #include "llvm/Support/Compiler.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
- };
- 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;
- }
- const char *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
|