Coverage Report

Created: 2020-10-24 06:27

/Users/buildslave/jenkins/workspace/coverage/llvm-project/clang/lib/Basic/Targets/VE.h
Line
Count
Source (jump to first uncovered line)
1
//===--- VE.h - Declare VE target feature support ---------------*- C++ -*-===//
2
//
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
6
//
7
//===----------------------------------------------------------------------===//
8
//
9
// This file declares VE TargetInfo objects.
10
//
11
//===----------------------------------------------------------------------===//
12
13
#ifndef LLVM_CLANG_LIB_BASIC_TARGETS_VE_H
14
#define LLVM_CLANG_LIB_BASIC_TARGETS_VE_H
15
16
#include "clang/Basic/TargetInfo.h"
17
#include "clang/Basic/TargetOptions.h"
18
#include "llvm/ADT/Triple.h"
19
#include "llvm/Support/Compiler.h"
20
21
namespace clang {
22
namespace targets {
23
24
class LLVM_LIBRARY_VISIBILITY VETargetInfo : public TargetInfo {
25
  static const Builtin::Info BuiltinInfo[];
26
27
public:
28
  VETargetInfo(const llvm::Triple &Triple, const TargetOptions &)
29
2
      : TargetInfo(Triple) {
30
2
    NoAsmVariants = true;
31
2
    LongDoubleWidth = 128;
32
2
    LongDoubleAlign = 128;
33
2
    LongDoubleFormat = &llvm::APFloat::IEEEquad();
34
2
    DoubleAlign = LongLongAlign = 64;
35
2
    SuitableAlign = 64;
36
2
    LongWidth = LongAlign = PointerWidth = PointerAlign = 64;
37
2
    SizeType = UnsignedLong;
38
2
    PtrDiffType = SignedLong;
39
2
    IntPtrType = SignedLong;
40
2
    IntMaxType = SignedLong;
41
2
    Int64Type = SignedLong;
42
2
    RegParmMax = 8;
43
2
    MaxAtomicPromoteWidth = MaxAtomicInlineWidth = 64;
44
45
2
    WCharType = UnsignedInt;
46
2
    WIntType = UnsignedInt;
47
2
    UseZeroLengthBitfieldAlignment = true;
48
2
    resetDataLayout("e-m:e-i64:64-n32:64-S128");
49
2
  }
50
51
  void getTargetDefines(const LangOptions &Opts,
52
                        MacroBuilder &Builder) const override;
53
54
0
  bool hasSjLjLowering() const override {
55
    // TODO
56
0
    return false;
57
0
  }
58
59
  ArrayRef<Builtin::Info> getTargetBuiltins() const override;
60
61
2
  BuiltinVaListKind getBuiltinVaListKind() const override {
62
2
    return TargetInfo::VoidPtrBuiltinVaList;
63
2
  }
64
65
0
  CallingConvCheckResult checkCallingConvention(CallingConv CC) const override {
66
0
    switch (CC) {
67
0
    default:
68
0
      return CCCR_Warning;
69
0
    case CC_C:
70
0
      return CCCR_OK;
71
0
    }
72
0
  }
73
74
0
  const char *getClobbers() const override { return ""; }
75
76
0
  ArrayRef<const char *> getGCCRegNames() const override {
77
0
    static const char *const GCCRegNames[] = {
78
        // Regular registers
79
0
        "sx0",  "sx1",  "sx2",  "sx3",  "sx4",  "sx5",  "sx6",  "sx7",
80
0
        "sx8",  "sx9",  "sx10", "sx11", "sx12", "sx13", "sx14", "sx15",
81
0
        "sx16", "sx17", "sx18", "sx19", "sx20", "sx21", "sx22", "sx23",
82
0
        "sx24", "sx25", "sx26", "sx27", "sx28", "sx29", "sx30", "sx31",
83
0
        "sx32", "sx33", "sx34", "sx35", "sx36", "sx37", "sx38", "sx39",
84
0
        "sx40", "sx41", "sx42", "sx43", "sx44", "sx45", "sx46", "sx47",
85
0
        "sx48", "sx49", "sx50", "sx51", "sx52", "sx53", "sx54", "sx55",
86
0
        "sx56", "sx57", "sx58", "sx59", "sx60", "sx61", "sx62", "sx63",
87
0
    };
88
0
    return llvm::makeArrayRef(GCCRegNames);
89
0
  }
90
91
0
  ArrayRef<TargetInfo::GCCRegAlias> getGCCRegAliases() const override {
92
0
    static const TargetInfo::GCCRegAlias GCCRegAliases[] = {
93
0
        {{"s0"}, "sx0"},
94
0
        {{"s1"}, "sx1"},
95
0
        {{"s2"}, "sx2"},
96
0
        {{"s3"}, "sx3"},
97
0
        {{"s4"}, "sx4"},
98
0
        {{"s5"}, "sx5"},
99
0
        {{"s6"}, "sx6"},
100
0
        {{"s7"}, "sx7"},
101
0
        {{"s8", "sl"}, "sx8"},
102
0
        {{"s9", "fp"}, "sx9"},
103
0
        {{"s10", "lr"}, "sx10"},
104
0
        {{"s11", "sp"}, "sx11"},
105
0
        {{"s12", "outer"}, "sx12"},
106
0
        {{"s13"}, "sx13"},
107
0
        {{"s14", "tp"}, "sx14"},
108
0
        {{"s15", "got"}, "sx15"},
109
0
        {{"s16", "plt"}, "sx16"},
110
0
        {{"s17", "info"}, "sx17"},
111
0
        {{"s18"}, "sx18"},
112
0
        {{"s19"}, "sx19"},
113
0
        {{"s20"}, "sx20"},
114
0
        {{"s21"}, "sx21"},
115
0
        {{"s22"}, "sx22"},
116
0
        {{"s23"}, "sx23"},
117
0
        {{"s24"}, "sx24"},
118
0
        {{"s25"}, "sx25"},
119
0
        {{"s26"}, "sx26"},
120
0
        {{"s27"}, "sx27"},
121
0
        {{"s28"}, "sx28"},
122
0
        {{"s29"}, "sx29"},
123
0
        {{"s30"}, "sx30"},
124
0
        {{"s31"}, "sx31"},
125
0
        {{"s32"}, "sx32"},
126
0
        {{"s33"}, "sx33"},
127
0
        {{"s34"}, "sx34"},
128
0
        {{"s35"}, "sx35"},
129
0
        {{"s36"}, "sx36"},
130
0
        {{"s37"}, "sx37"},
131
0
        {{"s38"}, "sx38"},
132
0
        {{"s39"}, "sx39"},
133
0
        {{"s40"}, "sx40"},
134
0
        {{"s41"}, "sx41"},
135
0
        {{"s42"}, "sx42"},
136
0
        {{"s43"}, "sx43"},
137
0
        {{"s44"}, "sx44"},
138
0
        {{"s45"}, "sx45"},
139
0
        {{"s46"}, "sx46"},
140
0
        {{"s47"}, "sx47"},
141
0
        {{"s48"}, "sx48"},
142
0
        {{"s49"}, "sx49"},
143
0
        {{"s50"}, "sx50"},
144
0
        {{"s51"}, "sx51"},
145
0
        {{"s52"}, "sx52"},
146
0
        {{"s53"}, "sx53"},
147
0
        {{"s54"}, "sx54"},
148
0
        {{"s55"}, "sx55"},
149
0
        {{"s56"}, "sx56"},
150
0
        {{"s57"}, "sx57"},
151
0
        {{"s58"}, "sx58"},
152
0
        {{"s59"}, "sx59"},
153
0
        {{"s60"}, "sx60"},
154
0
        {{"s61"}, "sx61"},
155
0
        {{"s62"}, "sx62"},
156
0
        {{"s63"}, "sx63"},
157
0
    };
158
0
    return llvm::makeArrayRef(GCCRegAliases);
159
0
  }
160
161
  bool validateAsmConstraint(const char *&Name,
162
0
                             TargetInfo::ConstraintInfo &Info) const override {
163
0
    return false;
164
0
  }
165
166
32
  bool allowsLargerPreferedTypeAlignment() const override { return false; }
167
};
168
} // namespace targets
169
} // namespace clang
170
#endif // LLVM_CLANG_LIB_BASIC_TARGETS_VE_H