forked from OSchip/llvm-project
Add clang DirectX target support
This change adds a stub DirectX target for clang to enable targeting dxil targets. Reviewed By: pete Differential Revision: https://reviews.llvm.org/D122085
This commit is contained in:
parent
e68257fcee
commit
c5e54e2752
|
@ -75,6 +75,7 @@ add_clang_library(clangBasic
|
|||
Targets/ARM.cpp
|
||||
Targets/AVR.cpp
|
||||
Targets/BPF.cpp
|
||||
Targets/DirectX.cpp
|
||||
Targets/Hexagon.cpp
|
||||
Targets/Lanai.cpp
|
||||
Targets/Le64.cpp
|
||||
|
|
|
@ -19,6 +19,7 @@
|
|||
#include "Targets/ARM.h"
|
||||
#include "Targets/AVR.h"
|
||||
#include "Targets/BPF.h"
|
||||
#include "Targets/DirectX.h"
|
||||
#include "Targets/Hexagon.h"
|
||||
#include "Targets/Lanai.h"
|
||||
#include "Targets/Le64.h"
|
||||
|
@ -649,6 +650,8 @@ TargetInfo *AllocateTarget(const llvm::Triple &Triple,
|
|||
return nullptr;
|
||||
}
|
||||
|
||||
case llvm::Triple::dxil:
|
||||
return new DirectXTargetInfo(Triple,Opts);
|
||||
case llvm::Triple::renderscript32:
|
||||
return new LinuxTargetInfo<RenderScript32TargetInfo>(Triple, Opts);
|
||||
case llvm::Triple::renderscript64:
|
||||
|
|
|
@ -0,0 +1,22 @@
|
|||
//===--- DirectX.cpp - Implement DirectX target feature support -----------===//
|
||||
//
|
||||
// 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 implements DirectX TargetInfo objects.
|
||||
//
|
||||
//===----------------------------------------------------------------------===//
|
||||
|
||||
#include "DirectX.h"
|
||||
#include "Targets.h"
|
||||
|
||||
using namespace clang;
|
||||
using namespace clang::targets;
|
||||
|
||||
void DirectXTargetInfo::getTargetDefines(const LangOptions &Opts,
|
||||
MacroBuilder &Builder) const {
|
||||
DefineStd(Builder, "DIRECTX", Opts);
|
||||
}
|
|
@ -0,0 +1,92 @@
|
|||
//===--- 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
|
||||
};
|
||||
|
||||
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;
|
||||
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");
|
||||
}
|
||||
|
||||
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 None; }
|
||||
|
||||
const char *getClobbers() const override { return ""; }
|
||||
|
||||
ArrayRef<const char *> getGCCRegNames() const override { return None; }
|
||||
|
||||
bool validateAsmConstraint(const char *&Name,
|
||||
TargetInfo::ConstraintInfo &info) const override {
|
||||
return true;
|
||||
}
|
||||
|
||||
ArrayRef<TargetInfo::GCCRegAlias> getGCCRegAliases() const override {
|
||||
return None;
|
||||
}
|
||||
|
||||
BuiltinVaListKind getBuiltinVaListKind() const override {
|
||||
return TargetInfo::VoidPtrBuiltinVaList;
|
||||
}
|
||||
};
|
||||
|
||||
} // namespace targets
|
||||
} // namespace clang
|
||||
|
||||
#endif // LLVM_CLANG_LIB_BASIC_TARGETS_DIRECTX_H
|
|
@ -0,0 +1,10 @@
|
|||
// RUN: %clang -target dxil-pc-shadermodel6.0-pixel -S -emit-llvm -o - %s | FileCheck %s
|
||||
// RUN: %clang -target dxil-pc-shadermodel6.0-vertex -S -emit-llvm -o - %s | FileCheck %s
|
||||
// RUN: %clang -target dxil-pc-shadermodel6.0-compute -S -emit-llvm -o - %s | FileCheck %s
|
||||
// RUN: %clang -target dxil-pc-shadermodel6.0-library -S -emit-llvm -o - %s | FileCheck %s
|
||||
// RUN: %clang -target dxil-pc-shadermodel6.0-hull -S -emit-llvm -o - %s | FileCheck %s
|
||||
// RUN: %clang -target dxil-pc-shadermodel6.0-domain -S -emit-llvm -o - %s | FileCheck %s
|
||||
// RUN: %clang -target dxil-pc-shadermodel6.0-geometry -S -emit-llvm -o - %s | FileCheck %s
|
||||
|
||||
// CHECK: target datalayout = "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"
|
||||
// CHECK: target triple = "dxil-pc-shadermodel6.0-{{[a-z]+}}"
|
|
@ -0,0 +1 @@
|
|||
config.suffixes = ['.c', '.hlsl']
|
Loading…
Reference in New Issue