Coverage Report

Created: 2024-01-17 10:31

/src/build/lib/Target/LoongArch/LoongArchGenSubtargetInfo.inc
Line
Count
Source (jump to first uncovered line)
1
/*===- TableGen'erated file -------------------------------------*- C++ -*-===*\
2
|*                                                                            *|
3
|* Subtarget Enumeration Source Fragment                                      *|
4
|*                                                                            *|
5
|* Automatically generated file, do not edit!                                 *|
6
|*                                                                            *|
7
\*===----------------------------------------------------------------------===*/
8
9
10
#ifdef GET_SUBTARGETINFO_ENUM
11
#undef GET_SUBTARGETINFO_ENUM
12
13
namespace llvm {
14
namespace LoongArch {
15
enum {
16
  Feature32Bit = 0,
17
  Feature64Bit = 1,
18
  FeatureBasicD = 2,
19
  FeatureBasicF = 3,
20
  FeatureExtLASX = 4,
21
  FeatureExtLBT = 5,
22
  FeatureExtLSX = 6,
23
  FeatureExtLVZ = 7,
24
  FeatureRelax = 8,
25
  FeatureUAL = 9,
26
  LaGlobalWithAbs = 10,
27
  LaGlobalWithPcrel = 11,
28
  LaLocalWithAbs = 12,
29
  NumSubtargetFeatures = 13
30
};
31
} // end namespace LoongArch
32
} // end namespace llvm
33
34
#endif // GET_SUBTARGETINFO_ENUM
35
36
37
#ifdef GET_SUBTARGETINFO_MACRO
38
GET_SUBTARGETINFO_MACRO(HasBasicD, false, hasBasicD)
39
GET_SUBTARGETINFO_MACRO(HasBasicF, false, hasBasicF)
40
GET_SUBTARGETINFO_MACRO(HasExtLASX, false, hasExtLASX)
41
GET_SUBTARGETINFO_MACRO(HasExtLBT, false, hasExtLBT)
42
GET_SUBTARGETINFO_MACRO(HasExtLSX, false, hasExtLSX)
43
GET_SUBTARGETINFO_MACRO(HasExtLVZ, false, hasExtLVZ)
44
GET_SUBTARGETINFO_MACRO(HasLA32, false, hasLA32)
45
GET_SUBTARGETINFO_MACRO(HasLA64, false, hasLA64)
46
GET_SUBTARGETINFO_MACRO(HasLaGlobalWithAbs, false, hasLaGlobalWithAbs)
47
GET_SUBTARGETINFO_MACRO(HasLaGlobalWithPcrel, false, hasLaGlobalWithPcrel)
48
GET_SUBTARGETINFO_MACRO(HasLaLocalWithAbs, false, hasLaLocalWithAbs)
49
GET_SUBTARGETINFO_MACRO(HasLinkerRelax, false, hasLinkerRelax)
50
GET_SUBTARGETINFO_MACRO(HasUAL, false, hasUAL)
51
#undef GET_SUBTARGETINFO_MACRO
52
#endif // GET_SUBTARGETINFO_MACRO
53
54
55
#ifdef GET_SUBTARGETINFO_MC_DESC
56
#undef GET_SUBTARGETINFO_MC_DESC
57
58
namespace llvm {
59
// Sorted (by key) array of values for CPU features.
60
extern const llvm::SubtargetFeatureKV LoongArchFeatureKV[] = {
61
  { "32bit", "LA32 Basic Integer and Privilege Instruction Set", LoongArch::Feature32Bit, { { { 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, } } } },
62
  { "64bit", "LA64 Basic Integer and Privilege Instruction Set", LoongArch::Feature64Bit, { { { 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, } } } },
63
  { "d", "'D' (Double-Precision Floating-Point)", LoongArch::FeatureBasicD, { { { 0x8ULL, 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, } } } },
64
  { "f", "'F' (Single-Precision Floating-Point)", LoongArch::FeatureBasicF, { { { 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, } } } },
65
  { "la-global-with-abs", "Expand la.global as la.abs", LoongArch::LaGlobalWithAbs, { { { 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, } } } },
66
  { "la-global-with-pcrel", "Expand la.global as la.pcrel", LoongArch::LaGlobalWithPcrel, { { { 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, } } } },
67
  { "la-local-with-abs", "Expand la.local as la.abs", LoongArch::LaLocalWithAbs, { { { 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, } } } },
68
  { "lasx", "'LASX' (Loongson Advanced SIMD Extension)", LoongArch::FeatureExtLASX, { { { 0x40ULL, 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, } } } },
69
  { "lbt", "'LBT' (Loongson Binary Translation Extension)", LoongArch::FeatureExtLBT, { { { 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, } } } },
70
  { "lsx", "'LSX' (Loongson SIMD Extension)", LoongArch::FeatureExtLSX, { { { 0x4ULL, 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, } } } },
71
  { "lvz", "'LVZ' (Loongson Virtualization Extension)", LoongArch::FeatureExtLVZ, { { { 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, } } } },
72
  { "relax", "Enable Linker relaxation", LoongArch::FeatureRelax, { { { 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, } } } },
73
  { "ual", "Allow memory accesses to be unaligned", LoongArch::FeatureUAL, { { { 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, } } } },
74
};
75
76
#ifdef DBGFIELD
77
#error "<target>GenSubtargetInfo.inc requires a DBGFIELD macro"
78
#endif
79
#if !defined(NDEBUG) || defined(LLVM_ENABLE_DUMP)
80
#define DBGFIELD(x) x,
81
#else
82
#define DBGFIELD(x)
83
#endif
84
85
// ===============================================================
86
// Data tables for the new per-operand machine model.
87
88
// {ProcResourceIdx, ReleaseAtCycle, AcquireAtCycle}
89
extern const llvm::MCWriteProcResEntry LoongArchWriteProcResTable[] = {
90
  { 0,  0,  0 }, // Invalid
91
}; // LoongArchWriteProcResTable
92
93
// {Cycles, WriteResourceID}
94
extern const llvm::MCWriteLatencyEntry LoongArchWriteLatencyTable[] = {
95
  { 0,  0}, // Invalid
96
}; // LoongArchWriteLatencyTable
97
98
// {UseIdx, WriteResourceID, Cycles}
99
extern const llvm::MCReadAdvanceEntry LoongArchReadAdvanceTable[] = {
100
  {0,  0,  0}, // Invalid
101
}; // LoongArchReadAdvanceTable
102
103
#undef DBGFIELD
104
105
static const llvm::MCSchedModel NoSchedModel = {
106
  MCSchedModel::DefaultIssueWidth,
107
  MCSchedModel::DefaultMicroOpBufferSize,
108
  MCSchedModel::DefaultLoopMicroOpBufferSize,
109
  MCSchedModel::DefaultLoadLatency,
110
  MCSchedModel::DefaultHighLatency,
111
  MCSchedModel::DefaultMispredictPenalty,
112
  false, // PostRAScheduler
113
  false, // CompleteModel
114
  false, // EnableIntervals
115
  0, // Processor ID
116
  nullptr, nullptr, 0, 0, // No instruction-level machine model.
117
  nullptr, // No Itinerary
118
  nullptr // No extra processor descriptor
119
};
120
121
// Sorted (by key) array of values for CPU subtype.
122
extern const llvm::SubtargetSubTypeKV LoongArchSubTypeKV[] = {
123
 { "generic", { { { 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, } } }, { { { 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, } } }, &NoSchedModel },
124
 { "generic-la32", { { { 0x1ULL, 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, } } }, { { { 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, } } }, &NoSchedModel },
125
 { "generic-la64", { { { 0x202ULL, 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, } } }, { { { 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, } } }, &NoSchedModel },
126
 { "la464", { { { 0x2b2ULL, 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, } } }, { { { 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, } } }, &NoSchedModel },
127
 { "loongarch64", { { { 0x206ULL, 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, } } }, { { { 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, } } }, &NoSchedModel },
128
};
129
130
namespace LoongArch_MC {
131
unsigned resolveVariantSchedClassImpl(unsigned SchedClass,
132
0
    const MCInst *MI, const MCInstrInfo *MCII, unsigned CPUID) {
133
  // Don't know how to resolve this scheduling class.
134
0
  return 0;
135
0
}
136
} // end namespace LoongArch_MC
137
138
struct LoongArchGenMCSubtargetInfo : public MCSubtargetInfo {
139
  LoongArchGenMCSubtargetInfo(const Triple &TT,
140
    StringRef CPU, StringRef TuneCPU, StringRef FS,
141
    ArrayRef<SubtargetFeatureKV> PF,
142
    ArrayRef<SubtargetSubTypeKV> PD,
143
    const MCWriteProcResEntry *WPR,
144
    const MCWriteLatencyEntry *WL,
145
    const MCReadAdvanceEntry *RA, const InstrStage *IS,
146
    const unsigned *OC, const unsigned *FP) :
147
      MCSubtargetInfo(TT, CPU, TuneCPU, FS, PF, PD,
148
0
                      WPR, WL, RA, IS, OC, FP) { }
149
150
  unsigned resolveVariantSchedClass(unsigned SchedClass,
151
      const MCInst *MI, const MCInstrInfo *MCII,
152
0
      unsigned CPUID) const override {
153
0
    return LoongArch_MC::resolveVariantSchedClassImpl(SchedClass, MI, MCII, CPUID);
154
0
  }
155
  unsigned getHwMode() const override;
156
};
157
0
unsigned LoongArchGenMCSubtargetInfo::getHwMode() const {
158
0
  if (checkFeatures("+64bit")) return 1;
159
0
  return 0;
160
0
}
161
162
0
static inline MCSubtargetInfo *createLoongArchMCSubtargetInfoImpl(const Triple &TT, StringRef CPU, StringRef TuneCPU, StringRef FS) {
163
0
  return new LoongArchGenMCSubtargetInfo(TT, CPU, TuneCPU, FS, LoongArchFeatureKV, LoongArchSubTypeKV, 
164
0
                      LoongArchWriteProcResTable, LoongArchWriteLatencyTable, LoongArchReadAdvanceTable, 
165
0
                      nullptr, nullptr, nullptr);
166
0
}
167
168
} // end namespace llvm
169
170
#endif // GET_SUBTARGETINFO_MC_DESC
171
172
173
#ifdef GET_SUBTARGETINFO_TARGET_DESC
174
#undef GET_SUBTARGETINFO_TARGET_DESC
175
176
#include "llvm/Support/Debug.h"
177
#include "llvm/Support/raw_ostream.h"
178
179
// ParseSubtargetFeatures - Parses features string setting specified
180
// subtarget options.
181
0
void llvm::LoongArchSubtarget::ParseSubtargetFeatures(StringRef CPU, StringRef TuneCPU, StringRef FS) {
182
0
  LLVM_DEBUG(dbgs() << "\nFeatures:" << FS);
183
0
  LLVM_DEBUG(dbgs() << "\nCPU:" << CPU);
184
0
  LLVM_DEBUG(dbgs() << "\nTuneCPU:" << TuneCPU << "\n\n");
185
0
  InitMCProcessorInfo(CPU, TuneCPU, FS);
186
0
  const FeatureBitset &Bits = getFeatureBits();
187
0
  if (Bits[LoongArch::Feature32Bit]) HasLA32 = true;
188
0
  if (Bits[LoongArch::Feature64Bit]) HasLA64 = true;
189
0
  if (Bits[LoongArch::FeatureBasicD]) HasBasicD = true;
190
0
  if (Bits[LoongArch::FeatureBasicF]) HasBasicF = true;
191
0
  if (Bits[LoongArch::FeatureExtLASX]) HasExtLASX = true;
192
0
  if (Bits[LoongArch::FeatureExtLBT]) HasExtLBT = true;
193
0
  if (Bits[LoongArch::FeatureExtLSX]) HasExtLSX = true;
194
0
  if (Bits[LoongArch::FeatureExtLVZ]) HasExtLVZ = true;
195
0
  if (Bits[LoongArch::FeatureRelax]) HasLinkerRelax = true;
196
0
  if (Bits[LoongArch::FeatureUAL]) HasUAL = true;
197
0
  if (Bits[LoongArch::LaGlobalWithAbs]) HasLaGlobalWithAbs = true;
198
0
  if (Bits[LoongArch::LaGlobalWithPcrel]) HasLaGlobalWithPcrel = true;
199
0
  if (Bits[LoongArch::LaLocalWithAbs]) HasLaLocalWithAbs = true;
200
0
}
201
#endif // GET_SUBTARGETINFO_TARGET_DESC
202
203
204
#ifdef GET_SUBTARGETINFO_HEADER
205
#undef GET_SUBTARGETINFO_HEADER
206
207
namespace llvm {
208
class DFAPacketizer;
209
namespace LoongArch_MC {
210
unsigned resolveVariantSchedClassImpl(unsigned SchedClass, const MCInst *MI, const MCInstrInfo *MCII, unsigned CPUID);
211
} // end namespace LoongArch_MC
212
213
struct LoongArchGenSubtargetInfo : public TargetSubtargetInfo {
214
  explicit LoongArchGenSubtargetInfo(const Triple &TT, StringRef CPU, StringRef TuneCPU, StringRef FS);
215
public:
216
  unsigned resolveSchedClass(unsigned SchedClass,  const MachineInstr *DefMI, const TargetSchedModel *SchedModel) const override;
217
  unsigned resolveVariantSchedClass(unsigned SchedClass, const MCInst *MI, const MCInstrInfo *MCII, unsigned CPUID) const override;
218
  DFAPacketizer *createDFAPacketizer(const InstrItineraryData *IID) const;
219
  unsigned getHwMode() const override;
220
};
221
} // end namespace llvm
222
223
#endif // GET_SUBTARGETINFO_HEADER
224
225
226
#ifdef GET_SUBTARGETINFO_CTOR
227
#undef GET_SUBTARGETINFO_CTOR
228
229
#include "llvm/CodeGen/TargetSchedule.h"
230
231
namespace llvm {
232
extern const llvm::SubtargetFeatureKV LoongArchFeatureKV[];
233
extern const llvm::SubtargetSubTypeKV LoongArchSubTypeKV[];
234
extern const llvm::MCWriteProcResEntry LoongArchWriteProcResTable[];
235
extern const llvm::MCWriteLatencyEntry LoongArchWriteLatencyTable[];
236
extern const llvm::MCReadAdvanceEntry LoongArchReadAdvanceTable[];
237
LoongArchGenSubtargetInfo::LoongArchGenSubtargetInfo(const Triple &TT, StringRef CPU, StringRef TuneCPU, StringRef FS)
238
  : TargetSubtargetInfo(TT, CPU, TuneCPU, FS, ArrayRef(LoongArchFeatureKV, 13), ArrayRef(LoongArchSubTypeKV, 5), 
239
                        LoongArchWriteProcResTable, LoongArchWriteLatencyTable, LoongArchReadAdvanceTable, 
240
0
                        nullptr, nullptr, nullptr) {}
241
242
unsigned LoongArchGenSubtargetInfo
243
0
::resolveSchedClass(unsigned SchedClass, const MachineInstr *MI, const TargetSchedModel *SchedModel) const {
244
0
  report_fatal_error("Expected a variant SchedClass");
245
0
} // LoongArchGenSubtargetInfo::resolveSchedClass
246
247
unsigned LoongArchGenSubtargetInfo
248
0
::resolveVariantSchedClass(unsigned SchedClass, const MCInst *MI, const MCInstrInfo *MCII, unsigned CPUID) const {
249
0
  return LoongArch_MC::resolveVariantSchedClassImpl(SchedClass, MI, MCII, CPUID);
250
0
} // LoongArchGenSubtargetInfo::resolveVariantSchedClass
251
252
0
unsigned LoongArchGenSubtargetInfo::getHwMode() const {
253
0
  if (checkFeatures("+64bit")) return 1;
254
0
  return 0;
255
0
}
256
} // end namespace llvm
257
258
#endif // GET_SUBTARGETINFO_CTOR
259
260
261
#ifdef GET_STIPREDICATE_DECLS_FOR_MC_ANALYSIS
262
#undef GET_STIPREDICATE_DECLS_FOR_MC_ANALYSIS
263
264
#endif // GET_STIPREDICATE_DECLS_FOR_MC_ANALYSIS
265
266
267
#ifdef GET_STIPREDICATE_DEFS_FOR_MC_ANALYSIS
268
#undef GET_STIPREDICATE_DEFS_FOR_MC_ANALYSIS
269
270
#endif // GET_STIPREDICATE_DEFS_FOR_MC_ANALYSIS
271