1 //===--- TCE.h - Declare TCE target feature support -------------*- C++ -*-===//
3 // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4 // See https://llvm.org/LICENSE.txt for license information.
5 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
7 //===----------------------------------------------------------------------===//
9 // This file declares TCE TargetInfo objects.
11 //===----------------------------------------------------------------------===//
13 #ifndef LLVM_CLANG_LIB_BASIC_TARGETS_TCE_H
14 #define LLVM_CLANG_LIB_BASIC_TARGETS_TCE_H
16 #include "clang/Basic/TargetInfo.h"
17 #include "clang/Basic/TargetOptions.h"
18 #include "llvm/Support/Compiler.h"
19 #include "llvm/TargetParser/Triple.h"
24 // llvm and clang cannot be used directly to output native binaries for
25 // target, but is used to compile C code to llvm bitcode with correct
26 // type and alignment information.
28 // TCE uses the llvm bitcode as input and uses it for generating customized
29 // target processor and program binary. TCE co-design environment is
30 // publicly available in http://tce.cs.tut.fi
32 static const unsigned TCEOpenCLAddrSpaceMap
[] = {
38 1, // opencl_global_device
39 1, // opencl_global_host
40 // FIXME: generic has to be added to the target
46 0, // sycl_global_device
47 0, // sycl_global_host
53 0, // hlsl_groupshared
56 class LLVM_LIBRARY_VISIBILITY TCETargetInfo
: public TargetInfo
{
58 TCETargetInfo(const llvm::Triple
&Triple
, const TargetOptions
&)
59 : TargetInfo(Triple
) {
62 LongWidth
= LongLongWidth
= 32;
65 LongAlign
= LongLongAlign
= 32;
68 SizeType
= UnsignedInt
;
69 IntMaxType
= SignedLong
;
70 IntPtrType
= SignedInt
;
71 PtrDiffType
= SignedInt
;
78 FloatFormat
= &llvm::APFloat::IEEEsingle();
79 DoubleFormat
= &llvm::APFloat::IEEEsingle();
80 LongDoubleFormat
= &llvm::APFloat::IEEEsingle();
81 resetDataLayout("E-p:32:32:32-i1:8:8-i8:8:32-"
82 "i16:16:32-i32:32:32-i64:32:32-"
83 "f32:32:32-f64:32:32-v64:32:32-"
84 "v128:32:32-v256:32:32-v512:32:32-"
85 "v1024:32:32-a0:0:32-n32");
86 AddrSpaceMap
= &TCEOpenCLAddrSpaceMap
;
87 UseAddrSpaceMapMangling
= true;
90 void getTargetDefines(const LangOptions
&Opts
,
91 MacroBuilder
&Builder
) const override
;
93 bool hasFeature(StringRef Feature
) const override
{ return Feature
== "tce"; }
95 ArrayRef
<Builtin::Info
> getTargetBuiltins() const override
{
99 const char *getClobbers() const override
{ return ""; }
101 BuiltinVaListKind
getBuiltinVaListKind() const override
{
102 return TargetInfo::VoidPtrBuiltinVaList
;
105 ArrayRef
<const char *> getGCCRegNames() const override
{
109 bool validateAsmConstraint(const char *&Name
,
110 TargetInfo::ConstraintInfo
&info
) const override
{
114 ArrayRef
<TargetInfo::GCCRegAlias
> getGCCRegAliases() const override
{
119 class LLVM_LIBRARY_VISIBILITY TCELETargetInfo
: public TCETargetInfo
{
121 TCELETargetInfo(const llvm::Triple
&Triple
, const TargetOptions
&Opts
)
122 : TCETargetInfo(Triple
, Opts
) {
125 resetDataLayout("e-p:32:32:32-i1:8:8-i8:8:32-"
126 "i16:16:32-i32:32:32-i64:32:32-"
127 "f32:32:32-f64:32:32-v64:32:32-"
128 "v128:32:32-v256:32:32-v512:32:32-"
129 "v1024:32:32-a0:0:32-n32");
132 void getTargetDefines(const LangOptions
&Opts
,
133 MacroBuilder
&Builder
) const override
;
135 } // namespace targets
137 #endif // LLVM_CLANG_LIB_BASIC_TARGETS_TCE_H