Coverage Report

Created: 2025-08-25 07:49

/src/keystone/llvm/lib/Target/Hexagon/HexagonGenSubtargetInfo.inc
Line
Count
Source
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
namespace llvm_ks {
13
namespace Hexagon {
14
enum : uint64_t {
15
  ArchV4 = 0,
16
  ArchV5 = 1,
17
  ArchV55 = 2,
18
  ArchV60 = 3,
19
  ExtensionHVX = 4,
20
  ExtensionHVXDbl = 5
21
};
22
}
23
} // end llvm namespace
24
#endif // GET_SUBTARGETINFO_ENUM
25
26
27
#ifdef GET_SUBTARGETINFO_MC_DESC
28
#undef GET_SUBTARGETINFO_MC_DESC
29
namespace llvm_ks {
30
// Sorted (by key) array of values for CPU features.
31
extern const llvm_ks::SubtargetFeatureKV HexagonFeatureKV[] = {
32
  { "hvx", "Hexagon HVX instructions", { Hexagon::ExtensionHVX }, { } },
33
  { "hvx-double", "Hexagon HVX Double instructions", { Hexagon::ExtensionHVXDbl }, { } },
34
  { "v4", "Hexagon V4", { Hexagon::ArchV4 }, { } },
35
  { "v5", "Hexagon V5", { Hexagon::ArchV5 }, { } },
36
  { "v55", "Hexagon V55", { Hexagon::ArchV55 }, { } },
37
  { "v60", "Hexagon V60", { Hexagon::ArchV60 }, { } }
38
};
39
40
// Sorted (by key) array of values for CPU subtype.
41
extern const llvm_ks::SubtargetFeatureKV HexagonSubTypeKV[] = {
42
  { "hexagonv4", "Select the hexagonv4 processor", { Hexagon::ArchV4 }, { } },
43
  { "hexagonv5", "Select the hexagonv5 processor", { Hexagon::ArchV4, Hexagon::ArchV5 }, { } },
44
  { "hexagonv55", "Select the hexagonv55 processor", { Hexagon::ArchV4, Hexagon::ArchV5, Hexagon::ArchV55 }, { } },
45
  { "hexagonv60", "Select the hexagonv60 processor", { Hexagon::ArchV4, Hexagon::ArchV5, Hexagon::ArchV55, Hexagon::ArchV60, Hexagon::ExtensionHVX }, { } }
46
};
47
48
#ifdef DBGFIELD
49
#error "<target>GenSubtargetInfo.inc requires a DBGFIELD macro"
50
#endif
51
#ifndef NDEBUG
52
#define DBGFIELD(x) x,
53
#else
54
#define DBGFIELD(x)
55
#endif
56
57
// Functional units for "HexagonItinerariesV4"
58
namespace HexagonItinerariesV4FU {
59
  const unsigned SLOT0 = 1 << 0;
60
  const unsigned SLOT1 = 1 << 1;
61
  const unsigned SLOT2 = 1 << 2;
62
  const unsigned SLOT3 = 1 << 3;
63
  const unsigned SLOT_ENDLOOP = 1 << 4;
64
}
65
66
// Functional units for "HexagonItinerariesV55"
67
namespace HexagonItinerariesV55FU {
68
  const unsigned SLOT0 = 1 << 0;
69
  const unsigned SLOT1 = 1 << 1;
70
  const unsigned SLOT2 = 1 << 2;
71
  const unsigned SLOT3 = 1 << 3;
72
  const unsigned SLOT_ENDLOOP = 1 << 4;
73
}
74
75
// Functional units for "HexagonItinerariesV60"
76
namespace HexagonItinerariesV60FU {
77
  const unsigned SLOT0 = 1 << 0;
78
  const unsigned SLOT1 = 1 << 1;
79
  const unsigned SLOT2 = 1 << 2;
80
  const unsigned SLOT3 = 1 << 3;
81
  const unsigned SLOT_ENDLOOP = 1 << 4;
82
  const unsigned CVI_ST = 1 << 5;
83
  const unsigned CVI_XLANE = 1 << 6;
84
  const unsigned CVI_SHIFT = 1 << 7;
85
  const unsigned CVI_MPY0 = 1 << 8;
86
  const unsigned CVI_MPY1 = 1 << 9;
87
  const unsigned CVI_LD = 1 << 10;
88
  const unsigned CVI_XLSHF = 1 << 11;
89
  const unsigned CVI_MPY01 = 1 << 12;
90
  const unsigned CVI_ALL = 1 << 13;
91
}
92
93
extern const llvm_ks::InstrStage HexagonStages[] = {
94
  { 0, 0, 0, llvm_ks::InstrStage::Required }, // No itinerary
95
  { 1, HexagonItinerariesV4FU::SLOT2 | HexagonItinerariesV4FU::SLOT3, -1, (llvm_ks::InstrStage::ReservationKinds)0 }, // 1
96
  { 1, HexagonItinerariesV4FU::SLOT0 | HexagonItinerariesV4FU::SLOT1 | HexagonItinerariesV4FU::SLOT2 | HexagonItinerariesV4FU::SLOT3, -1, (llvm_ks::InstrStage::ReservationKinds)0 }, // 2
97
  { 1, HexagonItinerariesV4FU::SLOT3, -1, (llvm_ks::InstrStage::ReservationKinds)0 }, // 3
98
  { 1, HexagonItinerariesV4FU::SLOT2, -1, (llvm_ks::InstrStage::ReservationKinds)0 }, // 4
99
  { 1, HexagonItinerariesV4FU::SLOT0 | HexagonItinerariesV4FU::SLOT1, -1, (llvm_ks::InstrStage::ReservationKinds)0 }, // 5
100
  { 1, HexagonItinerariesV4FU::SLOT0, -1, (llvm_ks::InstrStage::ReservationKinds)0 }, // 6
101
  { 1, HexagonItinerariesV4FU::SLOT_ENDLOOP, -1, (llvm_ks::InstrStage::ReservationKinds)0 }, // 7
102
  { 1, HexagonItinerariesV4FU::SLOT2 | HexagonItinerariesV4FU::SLOT3, 0, (llvm_ks::InstrStage::ReservationKinds)0 },   { 1, HexagonItinerariesV4FU::SLOT2 | HexagonItinerariesV4FU::SLOT3, -1, (llvm_ks::InstrStage::ReservationKinds)0 }, // 8-9
103
  { 2, HexagonItinerariesV55FU::SLOT2 | HexagonItinerariesV55FU::SLOT3, -1, (llvm_ks::InstrStage::ReservationKinds)0 }, // 10
104
  { 1, HexagonItinerariesV55FU::SLOT2 | HexagonItinerariesV55FU::SLOT3, -1, (llvm_ks::InstrStage::ReservationKinds)0 }, // 11
105
  { 1, HexagonItinerariesV55FU::SLOT0 | HexagonItinerariesV55FU::SLOT1 | HexagonItinerariesV55FU::SLOT2 | HexagonItinerariesV55FU::SLOT3, -1, (llvm_ks::InstrStage::ReservationKinds)0 }, // 12
106
  { 2, HexagonItinerariesV55FU::SLOT0 | HexagonItinerariesV55FU::SLOT1 | HexagonItinerariesV55FU::SLOT2 | HexagonItinerariesV55FU::SLOT3, -1, (llvm_ks::InstrStage::ReservationKinds)0 }, // 13
107
  { 3, HexagonItinerariesV55FU::SLOT3, -1, (llvm_ks::InstrStage::ReservationKinds)0 }, // 14
108
  { 3, HexagonItinerariesV55FU::SLOT2 | HexagonItinerariesV55FU::SLOT3, -1, (llvm_ks::InstrStage::ReservationKinds)0 }, // 15
109
  { 2, HexagonItinerariesV55FU::SLOT3, -1, (llvm_ks::InstrStage::ReservationKinds)0 }, // 16
110
  { 2, HexagonItinerariesV55FU::SLOT2, -1, (llvm_ks::InstrStage::ReservationKinds)0 }, // 17
111
  { 3, HexagonItinerariesV55FU::SLOT0 | HexagonItinerariesV55FU::SLOT1, -1, (llvm_ks::InstrStage::ReservationKinds)0 }, // 18
112
  { 1, HexagonItinerariesV55FU::SLOT0, -1, (llvm_ks::InstrStage::ReservationKinds)0 }, // 19
113
  { 2, HexagonItinerariesV55FU::SLOT_ENDLOOP, -1, (llvm_ks::InstrStage::ReservationKinds)0 }, // 20
114
  { 1, HexagonItinerariesV55FU::SLOT2 | HexagonItinerariesV55FU::SLOT3, 0, (llvm_ks::InstrStage::ReservationKinds)0 },   { 1, HexagonItinerariesV55FU::SLOT2 | HexagonItinerariesV55FU::SLOT3, -1, (llvm_ks::InstrStage::ReservationKinds)0 }, // 21-22
115
  { 3, HexagonItinerariesV55FU::SLOT0, -1, (llvm_ks::InstrStage::ReservationKinds)0 }, // 23
116
  { 2, HexagonItinerariesV55FU::SLOT0 | HexagonItinerariesV55FU::SLOT1, -1, (llvm_ks::InstrStage::ReservationKinds)0 }, // 24
117
  { 1, HexagonItinerariesV55FU::SLOT0 | HexagonItinerariesV55FU::SLOT1, -1, (llvm_ks::InstrStage::ReservationKinds)0 }, // 25
118
  { 2, HexagonItinerariesV60FU::SLOT2 | HexagonItinerariesV60FU::SLOT3, -1, (llvm_ks::InstrStage::ReservationKinds)0 }, // 26
119
  { 1, HexagonItinerariesV60FU::SLOT2 | HexagonItinerariesV60FU::SLOT3, -1, (llvm_ks::InstrStage::ReservationKinds)0 }, // 27
120
  { 1, HexagonItinerariesV60FU::SLOT0 | HexagonItinerariesV60FU::SLOT1 | HexagonItinerariesV60FU::SLOT2 | HexagonItinerariesV60FU::SLOT3, -1, (llvm_ks::InstrStage::ReservationKinds)0 }, // 28
121
  { 2, HexagonItinerariesV60FU::SLOT0 | HexagonItinerariesV60FU::SLOT1 | HexagonItinerariesV60FU::SLOT2 | HexagonItinerariesV60FU::SLOT3, -1, (llvm_ks::InstrStage::ReservationKinds)0 }, // 29
122
  { 3, HexagonItinerariesV60FU::SLOT3, -1, (llvm_ks::InstrStage::ReservationKinds)0 }, // 30
123
  { 3, HexagonItinerariesV60FU::SLOT2 | HexagonItinerariesV60FU::SLOT3, -1, (llvm_ks::InstrStage::ReservationKinds)0 }, // 31
124
  { 2, HexagonItinerariesV60FU::SLOT3, -1, (llvm_ks::InstrStage::ReservationKinds)0 }, // 32
125
  { 2, HexagonItinerariesV60FU::SLOT2, -1, (llvm_ks::InstrStage::ReservationKinds)0 }, // 33
126
  { 3, HexagonItinerariesV60FU::SLOT0 | HexagonItinerariesV60FU::SLOT1, -1, (llvm_ks::InstrStage::ReservationKinds)0 }, // 34
127
  { 1, HexagonItinerariesV60FU::SLOT0, -1, (llvm_ks::InstrStage::ReservationKinds)0 }, // 35
128
  { 2, HexagonItinerariesV60FU::SLOT_ENDLOOP, -1, (llvm_ks::InstrStage::ReservationKinds)0 }, // 36
129
  { 4, HexagonItinerariesV60FU::SLOT2 | HexagonItinerariesV60FU::SLOT3, -1, (llvm_ks::InstrStage::ReservationKinds)0 }, // 37
130
  { 1, HexagonItinerariesV60FU::SLOT0 | HexagonItinerariesV60FU::SLOT1 | HexagonItinerariesV60FU::SLOT2 | HexagonItinerariesV60FU::SLOT3, 0, (llvm_ks::InstrStage::ReservationKinds)0 },   { 1, HexagonItinerariesV60FU::CVI_XLANE | HexagonItinerariesV60FU::CVI_SHIFT | HexagonItinerariesV60FU::CVI_MPY0 | HexagonItinerariesV60FU::CVI_MPY1, -1, (llvm_ks::InstrStage::ReservationKinds)0 }, // 38-39
131
  { 1, HexagonItinerariesV60FU::SLOT2 | HexagonItinerariesV60FU::SLOT3, 0, (llvm_ks::InstrStage::ReservationKinds)0 },   { 1, HexagonItinerariesV60FU::SLOT2 | HexagonItinerariesV60FU::SLOT3, -1, (llvm_ks::InstrStage::ReservationKinds)0 }, // 40-41
132
  { 4, HexagonItinerariesV60FU::SLOT0, -1, (llvm_ks::InstrStage::ReservationKinds)0 }, // 42
133
  { 2, HexagonItinerariesV60FU::SLOT0 | HexagonItinerariesV60FU::SLOT1, -1, (llvm_ks::InstrStage::ReservationKinds)0 }, // 43
134
  { 3, HexagonItinerariesV60FU::SLOT0, -1, (llvm_ks::InstrStage::ReservationKinds)0 }, // 44
135
  { 1, HexagonItinerariesV60FU::SLOT0 | HexagonItinerariesV60FU::SLOT1, 0, (llvm_ks::InstrStage::ReservationKinds)0 },   { 1, HexagonItinerariesV60FU::CVI_LD, 0, (llvm_ks::InstrStage::ReservationKinds)0 },   { 1, HexagonItinerariesV60FU::CVI_XLANE | HexagonItinerariesV60FU::CVI_SHIFT | HexagonItinerariesV60FU::CVI_MPY0 | HexagonItinerariesV60FU::CVI_MPY1, -1, (llvm_ks::InstrStage::ReservationKinds)0 }, // 45-47
136
  { 1, HexagonItinerariesV60FU::SLOT0 | HexagonItinerariesV60FU::SLOT1, -1, (llvm_ks::InstrStage::ReservationKinds)0 }, // 48
137
  { 1, HexagonItinerariesV60FU::SLOT0, 0, (llvm_ks::InstrStage::ReservationKinds)0 },   { 1, HexagonItinerariesV60FU::CVI_ST, 0, (llvm_ks::InstrStage::ReservationKinds)0 },   { 1, HexagonItinerariesV60FU::CVI_XLANE | HexagonItinerariesV60FU::CVI_SHIFT | HexagonItinerariesV60FU::CVI_MPY0 | HexagonItinerariesV60FU::CVI_MPY1, -1, (llvm_ks::InstrStage::ReservationKinds)0 }, // 49-51
138
  { 1, HexagonItinerariesV60FU::SLOT2 | HexagonItinerariesV60FU::SLOT3, 0, (llvm_ks::InstrStage::ReservationKinds)0 },   { 1, HexagonItinerariesV60FU::CVI_MPY0 | HexagonItinerariesV60FU::CVI_MPY1, -1, (llvm_ks::InstrStage::ReservationKinds)0 }, // 52-53
139
  { 1, HexagonItinerariesV60FU::SLOT0 | HexagonItinerariesV60FU::SLOT1 | HexagonItinerariesV60FU::SLOT2 | HexagonItinerariesV60FU::SLOT3, 0, (llvm_ks::InstrStage::ReservationKinds)0 },   { 1, HexagonItinerariesV60FU::CVI_XLSHF | HexagonItinerariesV60FU::CVI_MPY01, -1, (llvm_ks::InstrStage::ReservationKinds)0 }, // 54-55
140
  { 1, HexagonItinerariesV60FU::SLOT0 | HexagonItinerariesV60FU::SLOT1 | HexagonItinerariesV60FU::SLOT2 | HexagonItinerariesV60FU::SLOT3, 0, (llvm_ks::InstrStage::ReservationKinds)0 },   { 1, HexagonItinerariesV60FU::CVI_XLANE, -1, (llvm_ks::InstrStage::ReservationKinds)0 }, // 56-57
141
  { 1, HexagonItinerariesV60FU::SLOT0, 0, (llvm_ks::InstrStage::ReservationKinds)0 },   { 1, HexagonItinerariesV60FU::SLOT1, 0, (llvm_ks::InstrStage::ReservationKinds)0 },   { 1, HexagonItinerariesV60FU::CVI_LD, 0, (llvm_ks::InstrStage::ReservationKinds)0 },   { 1, HexagonItinerariesV60FU::CVI_XLANE, -1, (llvm_ks::InstrStage::ReservationKinds)0 }, // 58-61
142
  { 1, HexagonItinerariesV60FU::SLOT0 | HexagonItinerariesV60FU::SLOT1, 0, (llvm_ks::InstrStage::ReservationKinds)0 },   { 1, HexagonItinerariesV60FU::CVI_LD, -1, (llvm_ks::InstrStage::ReservationKinds)0 }, // 62-63
143
  { 1, HexagonItinerariesV60FU::SLOT0, 0, (llvm_ks::InstrStage::ReservationKinds)0 },   { 1, HexagonItinerariesV60FU::SLOT1, 0, (llvm_ks::InstrStage::ReservationKinds)0 },   { 1, HexagonItinerariesV60FU::CVI_ST, 0, (llvm_ks::InstrStage::ReservationKinds)0 },   { 1, HexagonItinerariesV60FU::CVI_XLANE, -1, (llvm_ks::InstrStage::ReservationKinds)0 }, // 64-67
144
  { 1, HexagonItinerariesV60FU::SLOT0, 0, (llvm_ks::InstrStage::ReservationKinds)0 },   { 1, HexagonItinerariesV60FU::CVI_ST, -1, (llvm_ks::InstrStage::ReservationKinds)0 }, // 68-69
145
  { 1, HexagonItinerariesV60FU::SLOT2 | HexagonItinerariesV60FU::SLOT3, 0, (llvm_ks::InstrStage::ReservationKinds)0 },   { 1, HexagonItinerariesV60FU::CVI_MPY01, -1, (llvm_ks::InstrStage::ReservationKinds)0 }, // 70-71
146
  { 1, HexagonItinerariesV60FU::SLOT0 | HexagonItinerariesV60FU::SLOT1 | HexagonItinerariesV60FU::SLOT2 | HexagonItinerariesV60FU::SLOT3, 0, (llvm_ks::InstrStage::ReservationKinds)0 },   { 1, HexagonItinerariesV60FU::CVI_SHIFT, -1, (llvm_ks::InstrStage::ReservationKinds)0 }, // 72-73
147
  { 1, HexagonItinerariesV60FU::SLOT0 | HexagonItinerariesV60FU::SLOT1 | HexagonItinerariesV60FU::SLOT2 | HexagonItinerariesV60FU::SLOT3, 0, (llvm_ks::InstrStage::ReservationKinds)0 },   { 1, HexagonItinerariesV60FU::CVI_XLSHF, -1, (llvm_ks::InstrStage::ReservationKinds)0 }, // 74-75
148
  { 1, HexagonItinerariesV60FU::SLOT0 | HexagonItinerariesV60FU::SLOT1 | HexagonItinerariesV60FU::SLOT2 | HexagonItinerariesV60FU::SLOT3, 0, (llvm_ks::InstrStage::ReservationKinds)0 },   { 1, HexagonItinerariesV60FU::CVI_ALL, -1, (llvm_ks::InstrStage::ReservationKinds)0 }, // 76-77
149
  { 0, 0, 0, llvm_ks::InstrStage::Required } // End stages
150
};
151
152
static const llvm_ks::InstrItinerary HexagonItinerariesV4[] = {
153
  { 0, 0, 0, 0, 0 }, // 0 NoInstrModel
154
  { 1, 1, 2, 0, 0 }, // 1 S_2op_tc_2_SLOT23
155
  { 1, 1, 2, 0, 0 }, // 2 S_2op_tc_1_SLOT23
156
  { 1, 2, 3, 0, 0 }, // 3 ALU32_3op_tc_1_SLOT0123
157
  { 1, 1, 2, 0, 0 }, // 4 ALU64_tc_1_SLOT23
158
  { 1, 1, 2, 0, 0 }, // 5 ALU64_tc_2_SLOT23
159
  { 1, 2, 3, 0, 0 }, // 6 ALU32_ADDI_tc_1_SLOT0123
160
  { 1, 2, 3, 0, 0 }, // 7 ALU32_3op_tc_2_SLOT0123
161
  { 1, 2, 3, 0, 0 }, // 8 ALU32_2op_tc_1_SLOT0123
162
  { 1, 3, 4, 0, 0 }, // 9 CR_tc_3x_SLOT3
163
  { 1, 1, 2, 0, 0 }, // 10 ALU64_tc_2early_SLOT23
164
  { 1, 1, 2, 0, 0 }, // 11 M_tc_3x_SLOT23
165
  { 1, 1, 2, 0, 0 }, // 12 S_3op_tc_1_SLOT23
166
  { 1, 1, 2, 0, 0 }, // 13 S_3op_tc_2early_SLOT23
167
  { 1, 1, 2, 0, 0 }, // 14 S_3op_tc_2_SLOT23
168
  { 1, 2, 3, 0, 0 }, // 15 EXTENDER_tc_1_SLOT0123
169
  { 1, 1, 2, 0, 0 }, // 16 S_3op_tc_3_SLOT23
170
  { 0, 0, 0, 0, 0 }, // 17 M_tc_3stall_SLOT23
171
  { 1, 2, 3, 0, 0 }, // 18 PSEUDO
172
  { 1, 1, 2, 0, 0 }, // 19 CR_tc_2early_SLOT23
173
  { 1, 1, 2, 0, 0 }, // 20 S_2op_tc_2early_SLOT23
174
  { 1, 2, 3, 0, 0 }, // 21 ALU32_3op_tc_2early_SLOT0123
175
  { 1, 2, 3, 0, 0 }, // 22 ALU32_2op_tc_2early_SLOT0123
176
  { 1, 3, 4, 0, 0 }, // 23 CR_tc_2_SLOT3
177
  { 1, 4, 5, 0, 0 }, // 24 J_tc_2early_SLOT2
178
  { 1, 1, 2, 0, 0 }, // 25 J_tc_2early_SLOT23
179
  { 1, 5, 6, 0, 0 }, // 26 LD_tc_ld_SLOT01
180
  { 1, 6, 7, 0, 0 }, // 27 DUPLEX
181
  { 1, 7, 8, 0, 0 }, // 28 J_tc_2early_SLOT0123
182
  { 1, 1, 2, 0, 0 }, // 29 S_2op_tc_3or4x_SLOT23
183
  { 1, 1, 2, 0, 0 }, // 30 ALU64_tc_3x_SLOT23
184
  { 1, 1, 2, 0, 0 }, // 31 M_tc_3or4x_SLOT23
185
  { 1, 1, 2, 0, 0 }, // 32 M_tc_3_SLOT23
186
  { 0, 0, 0, 0, 0 }, // 33 CVI_VA
187
  { 1, 8, 10, 0, 0 }, // 34 PSEUDOM
188
  { 1, 3, 4, 0, 0 }, // 35 CR_tc_2early_SLOT3
189
  { 1, 6, 7, 0, 0 }, // 36 NCJ_tc_3or4stall_SLOT0
190
  { 1, 1, 2, 0, 0 }, // 37 COMPOUND
191
  { 1, 5, 6, 0, 0 }, // 38 V2LDST_tc_ld_SLOT01
192
  { 1, 6, 7, 0, 0 }, // 39 LD_tc_ld_SLOT0
193
  { 1, 6, 7, 0, 0 }, // 40 V4LDST_tc_st_SLOT0
194
  { 1, 5, 6, 0, 0 }, // 41 V4LDST_tc_ld_SLOT01
195
  { 1, 6, 7, 0, 0 }, // 42 LD_tc_3or4stall_SLOT0
196
  { 0, 0, 0, 0, 0 }, // 43 CVI_VM_LD
197
  { 1, 1, 2, 0, 0 }, // 44 M_tc_2_SLOT23
198
  { 1, 1, 2, 0, 0 }, // 45 S_3op_tc_3x_SLOT23
199
  { 1, 6, 7, 0, 0 }, // 46 ST_tc_ld_SLOT0
200
  { 1, 5, 6, 0, 0 }, // 47 V2LDST_tc_st_SLOT01
201
  { 1, 5, 6, 0, 0 }, // 48 ST_tc_st_SLOT01
202
  { 1, 6, 7, 0, 0 }, // 49 V2LDST_tc_st_SLOT0
203
  { 1, 6, 7, 0, 0 }, // 50 ST_tc_st_SLOT0
204
  { 1, 5, 6, 0, 0 }, // 51 V4LDST_tc_st_SLOT01
205
  { 0, 0, 0, 0, 0 }, // 52 CVI_VM_ST
206
  { 0, 0, 0, 0, 0 }, // 53 PREFIX
207
  { 0, 0, 0, 0, 0 }, // 54 CVI_VX_LATE
208
  { 0, 0, 0, 0, 0 }, // 55 CVI_VA_DV
209
  { 0, 0, 0, 0, 0 }, // 56 CVI_VP_LONG
210
  { 0, 0, 0, 0, 0 }, // 57 CVI_VM_VP_LDU
211
  { 0, 0, 0, 0, 0 }, // 58 CVI_VM_CUR_LD
212
  { 0, 0, 0, 0, 0 }, // 59 CVI_VM_TMP_LD
213
  { 0, 0, 0, 0, 0 }, // 60 CVI_VM_STU
214
  { 0, 0, 0, 0, 0 }, // 61 CVI_VM_NEW_ST
215
  { 0, 0, 0, 0, 0 }, // 62 CVI_VX
216
  { 0, 0, 0, 0, 0 }, // 63 CVI_VX_DV
217
  { 0, 0, 0, 0, 0 }, // 64 CVI_VS
218
  { 0, 0, 0, 0, 0 }, // 65 CVI_VP_VS_LONG_EARLY
219
  { 0, 0, 0, 0, 0 }, // 66 CVI_VP
220
  { 0, 0, 0, 0, 0 }, // 67 CVI_VP_VS_LONG
221
  { 0, 0, 0, 0, 0 }, // 68 CVI_HIST
222
  { 0, 0, 0, 0, 0 }, // 69 CVI_VX_DV_LONG
223
  { 0, 0, 0, 0, 0 }, // 70 CVI_VX_LONG
224
  { 0, 0, 0, 0, 0 }, // 71 CVI_VINLANESAT
225
  { 0, 0, 0, 0, 0 }, // 72 CVI_VP_VS
226
  { 1, 6, 7, 0, 0 }, // 73 ST_tc_3stall_SLOT0
227
  { 0, ~0U, ~0U, ~0U, ~0U } // end marker
228
};
229
230
static const llvm_ks::InstrItinerary HexagonItinerariesV55[] = {
231
  { 0, 0, 0, 0, 0 }, // 0 NoInstrModel
232
  { 1, 10, 11, 0, 0 }, // 1 S_2op_tc_2_SLOT23
233
  { 1, 11, 12, 0, 0 }, // 2 S_2op_tc_1_SLOT23
234
  { 1, 12, 13, 0, 0 }, // 3 ALU32_3op_tc_1_SLOT0123
235
  { 1, 11, 12, 0, 0 }, // 4 ALU64_tc_1_SLOT23
236
  { 1, 10, 11, 0, 0 }, // 5 ALU64_tc_2_SLOT23
237
  { 1, 12, 13, 0, 0 }, // 6 ALU32_ADDI_tc_1_SLOT0123
238
  { 1, 13, 14, 0, 0 }, // 7 ALU32_3op_tc_2_SLOT0123
239
  { 1, 12, 13, 0, 0 }, // 8 ALU32_2op_tc_1_SLOT0123
240
  { 1, 14, 15, 0, 0 }, // 9 CR_tc_3x_SLOT3
241
  { 1, 10, 11, 0, 0 }, // 10 ALU64_tc_2early_SLOT23
242
  { 1, 15, 16, 0, 0 }, // 11 M_tc_3x_SLOT23
243
  { 1, 11, 12, 0, 0 }, // 12 S_3op_tc_1_SLOT23
244
  { 1, 10, 11, 0, 0 }, // 13 S_3op_tc_2early_SLOT23
245
  { 1, 10, 11, 0, 0 }, // 14 S_3op_tc_2_SLOT23
246
  { 1, 12, 13, 0, 0 }, // 15 EXTENDER_tc_1_SLOT0123
247
  { 1, 15, 16, 0, 0 }, // 16 S_3op_tc_3_SLOT23
248
  { 1, 15, 16, 0, 0 }, // 17 M_tc_3stall_SLOT23
249
  { 1, 12, 13, 0, 0 }, // 18 PSEUDO
250
  { 1, 10, 11, 0, 0 }, // 19 CR_tc_2early_SLOT23
251
  { 1, 10, 11, 0, 0 }, // 20 S_2op_tc_2early_SLOT23
252
  { 1, 13, 14, 0, 0 }, // 21 ALU32_3op_tc_2early_SLOT0123
253
  { 1, 13, 14, 0, 0 }, // 22 ALU32_2op_tc_2early_SLOT0123
254
  { 1, 16, 17, 0, 0 }, // 23 CR_tc_2_SLOT3
255
  { 1, 17, 18, 0, 0 }, // 24 J_tc_2early_SLOT2
256
  { 1, 10, 11, 0, 0 }, // 25 J_tc_2early_SLOT23
257
  { 1, 18, 19, 0, 0 }, // 26 LD_tc_ld_SLOT01
258
  { 1, 19, 20, 0, 0 }, // 27 DUPLEX
259
  { 1, 20, 21, 0, 0 }, // 28 J_tc_2early_SLOT0123
260
  { 1, 15, 16, 0, 0 }, // 29 S_2op_tc_3or4x_SLOT23
261
  { 1, 15, 16, 0, 0 }, // 30 ALU64_tc_3x_SLOT23
262
  { 1, 15, 16, 0, 0 }, // 31 M_tc_3or4x_SLOT23
263
  { 1, 15, 16, 0, 0 }, // 32 M_tc_3_SLOT23
264
  { 0, 0, 0, 0, 0 }, // 33 CVI_VA
265
  { 1, 21, 23, 0, 0 }, // 34 PSEUDOM
266
  { 1, 16, 17, 0, 0 }, // 35 CR_tc_2early_SLOT3
267
  { 1, 23, 24, 0, 0 }, // 36 NCJ_tc_3or4stall_SLOT0
268
  { 1, 11, 12, 0, 0 }, // 37 COMPOUND
269
  { 1, 24, 25, 0, 0 }, // 38 V2LDST_tc_ld_SLOT01
270
  { 1, 23, 24, 0, 0 }, // 39 LD_tc_ld_SLOT0
271
  { 1, 19, 20, 0, 0 }, // 40 V4LDST_tc_st_SLOT0
272
  { 1, 18, 19, 0, 0 }, // 41 V4LDST_tc_ld_SLOT01
273
  { 1, 23, 24, 0, 0 }, // 42 LD_tc_3or4stall_SLOT0
274
  { 0, 0, 0, 0, 0 }, // 43 CVI_VM_LD
275
  { 1, 10, 11, 0, 0 }, // 44 M_tc_2_SLOT23
276
  { 1, 15, 16, 0, 0 }, // 45 S_3op_tc_3x_SLOT23
277
  { 1, 23, 24, 0, 0 }, // 46 ST_tc_ld_SLOT0
278
  { 1, 25, 26, 0, 0 }, // 47 V2LDST_tc_st_SLOT01
279
  { 1, 25, 26, 0, 0 }, // 48 ST_tc_st_SLOT01
280
  { 1, 19, 20, 0, 0 }, // 49 V2LDST_tc_st_SLOT0
281
  { 1, 19, 20, 0, 0 }, // 50 ST_tc_st_SLOT0
282
  { 1, 25, 26, 0, 0 }, // 51 V4LDST_tc_st_SLOT01
283
  { 0, 0, 0, 0, 0 }, // 52 CVI_VM_ST
284
  { 1, 12, 13, 0, 0 }, // 53 PREFIX
285
  { 0, 0, 0, 0, 0 }, // 54 CVI_VX_LATE
286
  { 0, 0, 0, 0, 0 }, // 55 CVI_VA_DV
287
  { 0, 0, 0, 0, 0 }, // 56 CVI_VP_LONG
288
  { 0, 0, 0, 0, 0 }, // 57 CVI_VM_VP_LDU
289
  { 0, 0, 0, 0, 0 }, // 58 CVI_VM_CUR_LD
290
  { 0, 0, 0, 0, 0 }, // 59 CVI_VM_TMP_LD
291
  { 0, 0, 0, 0, 0 }, // 60 CVI_VM_STU
292
  { 0, 0, 0, 0, 0 }, // 61 CVI_VM_NEW_ST
293
  { 0, 0, 0, 0, 0 }, // 62 CVI_VX
294
  { 0, 0, 0, 0, 0 }, // 63 CVI_VX_DV
295
  { 0, 0, 0, 0, 0 }, // 64 CVI_VS
296
  { 0, 0, 0, 0, 0 }, // 65 CVI_VP_VS_LONG_EARLY
297
  { 0, 0, 0, 0, 0 }, // 66 CVI_VP
298
  { 0, 0, 0, 0, 0 }, // 67 CVI_VP_VS_LONG
299
  { 0, 0, 0, 0, 0 }, // 68 CVI_HIST
300
  { 0, 0, 0, 0, 0 }, // 69 CVI_VX_DV_LONG
301
  { 0, 0, 0, 0, 0 }, // 70 CVI_VX_LONG
302
  { 0, 0, 0, 0, 0 }, // 71 CVI_VINLANESAT
303
  { 0, 0, 0, 0, 0 }, // 72 CVI_VP_VS
304
  { 1, 23, 24, 0, 0 }, // 73 ST_tc_3stall_SLOT0
305
  { 0, ~0U, ~0U, ~0U, ~0U } // end marker
306
};
307
308
static const llvm_ks::InstrItinerary HexagonItinerariesV60[] = {
309
  { 0, 0, 0, 0, 0 }, // 0 NoInstrModel
310
  { 1, 26, 27, 0, 0 }, // 1 S_2op_tc_2_SLOT23
311
  { 1, 27, 28, 0, 0 }, // 2 S_2op_tc_1_SLOT23
312
  { 1, 28, 29, 0, 0 }, // 3 ALU32_3op_tc_1_SLOT0123
313
  { 1, 27, 28, 0, 0 }, // 4 ALU64_tc_1_SLOT23
314
  { 1, 26, 27, 0, 0 }, // 5 ALU64_tc_2_SLOT23
315
  { 1, 28, 29, 0, 0 }, // 6 ALU32_ADDI_tc_1_SLOT0123
316
  { 1, 29, 30, 0, 0 }, // 7 ALU32_3op_tc_2_SLOT0123
317
  { 1, 28, 29, 0, 0 }, // 8 ALU32_2op_tc_1_SLOT0123
318
  { 1, 30, 31, 0, 0 }, // 9 CR_tc_3x_SLOT3
319
  { 1, 26, 27, 0, 0 }, // 10 ALU64_tc_2early_SLOT23
320
  { 1, 31, 32, 0, 0 }, // 11 M_tc_3x_SLOT23
321
  { 1, 27, 28, 0, 0 }, // 12 S_3op_tc_1_SLOT23
322
  { 1, 26, 27, 0, 0 }, // 13 S_3op_tc_2early_SLOT23
323
  { 1, 26, 27, 0, 0 }, // 14 S_3op_tc_2_SLOT23
324
  { 1, 28, 29, 0, 0 }, // 15 EXTENDER_tc_1_SLOT0123
325
  { 1, 31, 32, 0, 0 }, // 16 S_3op_tc_3_SLOT23
326
  { 1, 31, 32, 0, 0 }, // 17 M_tc_3stall_SLOT23
327
  { 1, 28, 29, 0, 0 }, // 18 PSEUDO
328
  { 1, 26, 27, 0, 0 }, // 19 CR_tc_2early_SLOT23
329
  { 1, 26, 27, 0, 0 }, // 20 S_2op_tc_2early_SLOT23
330
  { 1, 29, 30, 0, 0 }, // 21 ALU32_3op_tc_2early_SLOT0123
331
  { 1, 29, 30, 0, 0 }, // 22 ALU32_2op_tc_2early_SLOT0123
332
  { 1, 32, 33, 0, 0 }, // 23 CR_tc_2_SLOT3
333
  { 1, 33, 34, 0, 0 }, // 24 J_tc_2early_SLOT2
334
  { 1, 26, 27, 0, 0 }, // 25 J_tc_2early_SLOT23
335
  { 1, 34, 35, 0, 0 }, // 26 LD_tc_ld_SLOT01
336
  { 1, 35, 36, 0, 0 }, // 27 DUPLEX
337
  { 1, 36, 37, 0, 0 }, // 28 J_tc_2early_SLOT0123
338
  { 1, 37, 38, 0, 0 }, // 29 S_2op_tc_3or4x_SLOT23
339
  { 1, 31, 32, 0, 0 }, // 30 ALU64_tc_3x_SLOT23
340
  { 1, 37, 38, 0, 0 }, // 31 M_tc_3or4x_SLOT23
341
  { 1, 31, 32, 0, 0 }, // 32 M_tc_3_SLOT23
342
  { 1, 38, 40, 0, 0 }, // 33 CVI_VA
343
  { 1, 40, 42, 0, 0 }, // 34 PSEUDOM
344
  { 1, 32, 33, 0, 0 }, // 35 CR_tc_2early_SLOT3
345
  { 1, 42, 43, 0, 0 }, // 36 NCJ_tc_3or4stall_SLOT0
346
  { 1, 27, 28, 0, 0 }, // 37 COMPOUND
347
  { 1, 43, 44, 0, 0 }, // 38 V2LDST_tc_ld_SLOT01
348
  { 1, 44, 45, 0, 0 }, // 39 LD_tc_ld_SLOT0
349
  { 1, 35, 36, 0, 0 }, // 40 V4LDST_tc_st_SLOT0
350
  { 1, 34, 35, 0, 0 }, // 41 V4LDST_tc_ld_SLOT01
351
  { 1, 42, 43, 0, 0 }, // 42 LD_tc_3or4stall_SLOT0
352
  { 1, 45, 48, 0, 0 }, // 43 CVI_VM_LD
353
  { 1, 26, 27, 0, 0 }, // 44 M_tc_2_SLOT23
354
  { 1, 31, 32, 0, 0 }, // 45 S_3op_tc_3x_SLOT23
355
  { 1, 44, 45, 0, 0 }, // 46 ST_tc_ld_SLOT0
356
  { 1, 48, 49, 0, 0 }, // 47 V2LDST_tc_st_SLOT01
357
  { 1, 48, 49, 0, 0 }, // 48 ST_tc_st_SLOT01
358
  { 1, 35, 36, 0, 0 }, // 49 V2LDST_tc_st_SLOT0
359
  { 1, 35, 36, 0, 0 }, // 50 ST_tc_st_SLOT0
360
  { 1, 48, 49, 0, 0 }, // 51 V4LDST_tc_st_SLOT01
361
  { 1, 49, 52, 0, 0 }, // 52 CVI_VM_ST
362
  { 1, 28, 29, 0, 0 }, // 53 PREFIX
363
  { 1, 52, 54, 0, 0 }, // 54 CVI_VX_LATE
364
  { 1, 54, 56, 0, 0 }, // 55 CVI_VA_DV
365
  { 1, 56, 58, 0, 0 }, // 56 CVI_VP_LONG
366
  { 1, 58, 62, 0, 0 }, // 57 CVI_VM_VP_LDU
367
  { 1, 45, 48, 0, 0 }, // 58 CVI_VM_CUR_LD
368
  { 1, 62, 64, 0, 0 }, // 59 CVI_VM_TMP_LD
369
  { 1, 64, 68, 0, 0 }, // 60 CVI_VM_STU
370
  { 1, 68, 70, 0, 0 }, // 61 CVI_VM_NEW_ST
371
  { 1, 52, 54, 0, 0 }, // 62 CVI_VX
372
  { 1, 70, 72, 0, 0 }, // 63 CVI_VX_DV
373
  { 1, 72, 74, 0, 0 }, // 64 CVI_VS
374
  { 1, 74, 76, 0, 0 }, // 65 CVI_VP_VS_LONG_EARLY
375
  { 1, 56, 58, 0, 0 }, // 66 CVI_VP
376
  { 1, 74, 76, 0, 0 }, // 67 CVI_VP_VS_LONG
377
  { 1, 76, 78, 0, 0 }, // 68 CVI_HIST
378
  { 1, 70, 72, 0, 0 }, // 69 CVI_VX_DV_LONG
379
  { 1, 52, 54, 0, 0 }, // 70 CVI_VX_LONG
380
  { 1, 72, 74, 0, 0 }, // 71 CVI_VINLANESAT
381
  { 1, 74, 76, 0, 0 }, // 72 CVI_VP_VS
382
  { 1, 44, 45, 0, 0 }, // 73 ST_tc_3stall_SLOT0
383
  { 0, ~0U, ~0U, ~0U, ~0U } // end marker
384
};
385
386
// ===============================================================
387
// Data tables for the new per-operand machine model.
388
389
static const llvm_ks::MCSchedModel HexagonModelV4 = {
390
  4, // IssueWidth
391
  MCSchedModel::DefaultMicroOpBufferSize,
392
  MCSchedModel::DefaultLoopMicroOpBufferSize,
393
  1, // LoadLatency
394
  MCSchedModel::DefaultHighLatency,
395
  MCSchedModel::DefaultMispredictPenalty,
396
  0, // PostRAScheduler
397
  1, // CompleteModel
398
  1, // Processor ID
399
  nullptr, nullptr, 0, 0, // No instruction-level machine model.
400
  HexagonItinerariesV4};
401
402
static const llvm_ks::MCSchedModel HexagonModelV55 = {
403
  4, // IssueWidth
404
  MCSchedModel::DefaultMicroOpBufferSize,
405
  MCSchedModel::DefaultLoopMicroOpBufferSize,
406
  1, // LoadLatency
407
  MCSchedModel::DefaultHighLatency,
408
  MCSchedModel::DefaultMispredictPenalty,
409
  0, // PostRAScheduler
410
  1, // CompleteModel
411
  2, // Processor ID
412
  nullptr, nullptr, 0, 0, // No instruction-level machine model.
413
  HexagonItinerariesV55};
414
415
static const llvm_ks::MCSchedModel HexagonModelV60 = {
416
  4, // IssueWidth
417
  MCSchedModel::DefaultMicroOpBufferSize,
418
  MCSchedModel::DefaultLoopMicroOpBufferSize,
419
  1, // LoadLatency
420
  MCSchedModel::DefaultHighLatency,
421
  MCSchedModel::DefaultMispredictPenalty,
422
  0, // PostRAScheduler
423
  1, // CompleteModel
424
  3, // Processor ID
425
  nullptr, nullptr, 0, 0, // No instruction-level machine model.
426
  HexagonItinerariesV60};
427
428
// Sorted (by key) array of itineraries for CPU subtype.
429
extern const llvm_ks::SubtargetInfoKV HexagonProcSchedKV[] = {
430
  { "hexagonv4", (const void *)&HexagonModelV4 },
431
  { "hexagonv5", (const void *)&HexagonModelV4 },
432
  { "hexagonv55", (const void *)&HexagonModelV55 },
433
  { "hexagonv60", (const void *)&HexagonModelV60 }
434
};
435
#undef DBGFIELD
436
3.00k
static inline MCSubtargetInfo *createHexagonMCSubtargetInfoImpl(const Triple &TT, StringRef CPU, StringRef FS) {
437
3.00k
  return new MCSubtargetInfo(TT, CPU, FS, HexagonFeatureKV, HexagonSubTypeKV,
438
3.00k
          HexagonProcSchedKV);
439
3.00k
}
440
441
} // end llvm namespace
442
#endif // GET_SUBTARGETINFO_MC_DESC
443
444
445
#ifdef GET_SUBTARGETINFO_TARGET_DESC
446
#undef GET_SUBTARGETINFO_TARGET_DESC
447
#include "llvm/Support/Debug.h"
448
#include "llvm/Support/raw_ostream.h"
449
// ParseSubtargetFeatures - Parses features string setting specified
450
// subtarget options.
451
void llvm_ks::HexagonSubtarget::ParseSubtargetFeatures(StringRef CPU, StringRef FS) {
452
  DEBUG(dbgs() << "\nFeatures:" << FS);
453
  DEBUG(dbgs() << "\nCPU:" << CPU << "\n\n");
454
  InitMCProcessorInfo(CPU, FS);
455
  const FeatureBitset& Bits = getFeatureBits();
456
  if (Bits[Hexagon::ArchV4] && HexagonArchVersion < V4) HexagonArchVersion = V4;
457
  if (Bits[Hexagon::ArchV5] && HexagonArchVersion < V5) HexagonArchVersion = V5;
458
  if (Bits[Hexagon::ArchV55] && HexagonArchVersion < V55) HexagonArchVersion = V55;
459
  if (Bits[Hexagon::ArchV60] && HexagonArchVersion < V60) HexagonArchVersion = V60;
460
  if (Bits[Hexagon::ExtensionHVX]) UseHVXOps = true;
461
  if (Bits[Hexagon::ExtensionHVXDbl]) UseHVXDblOps = true;
462
}
463
#endif // GET_SUBTARGETINFO_TARGET_DESC