37#define GET_INSTRINFO_MC_DESC
38#define GET_INSTRINFO_MC_HELPERS
39#define ENABLE_INSTR_PREDICATE_VERIFIER
40#include "AArch64GenInstrInfo.inc"
42#define GET_SUBTARGETINFO_MC_DESC
43#include "AArch64GenSubtargetInfo.inc"
45#define GET_REGINFO_MC_DESC
46#include "AArch64GenRegisterInfo.inc"
50 InitAArch64MCInstrInfo(
X);
67 return createAArch64MCSubtargetInfoImpl(TT, CPU, CPU, FS);
76 {codeview::RegisterId::ARM64_W0, AArch64::W0},
77 {codeview::RegisterId::ARM64_W1, AArch64::W1},
78 {codeview::RegisterId::ARM64_W2, AArch64::W2},
79 {codeview::RegisterId::ARM64_W3, AArch64::W3},
80 {codeview::RegisterId::ARM64_W4, AArch64::W4},
81 {codeview::RegisterId::ARM64_W5, AArch64::W5},
82 {codeview::RegisterId::ARM64_W6, AArch64::W6},
83 {codeview::RegisterId::ARM64_W7, AArch64::W7},
84 {codeview::RegisterId::ARM64_W8, AArch64::W8},
85 {codeview::RegisterId::ARM64_W9, AArch64::W9},
86 {codeview::RegisterId::ARM64_W10, AArch64::W10},
87 {codeview::RegisterId::ARM64_W11, AArch64::W11},
88 {codeview::RegisterId::ARM64_W12, AArch64::W12},
89 {codeview::RegisterId::ARM64_W13, AArch64::W13},
90 {codeview::RegisterId::ARM64_W14, AArch64::W14},
91 {codeview::RegisterId::ARM64_W15, AArch64::W15},
92 {codeview::RegisterId::ARM64_W16, AArch64::W16},
93 {codeview::RegisterId::ARM64_W17, AArch64::W17},
94 {codeview::RegisterId::ARM64_W18, AArch64::W18},
95 {codeview::RegisterId::ARM64_W19, AArch64::W19},
96 {codeview::RegisterId::ARM64_W20, AArch64::W20},
97 {codeview::RegisterId::ARM64_W21, AArch64::W21},
98 {codeview::RegisterId::ARM64_W22, AArch64::W22},
99 {codeview::RegisterId::ARM64_W23, AArch64::W23},
100 {codeview::RegisterId::ARM64_W24, AArch64::W24},
101 {codeview::RegisterId::ARM64_W25, AArch64::W25},
102 {codeview::RegisterId::ARM64_W26, AArch64::W26},
103 {codeview::RegisterId::ARM64_W27, AArch64::W27},
104 {codeview::RegisterId::ARM64_W28, AArch64::W28},
105 {codeview::RegisterId::ARM64_W29, AArch64::W29},
106 {codeview::RegisterId::ARM64_W30, AArch64::W30},
107 {codeview::RegisterId::ARM64_WZR, AArch64::WZR},
108 {codeview::RegisterId::ARM64_X0, AArch64::X0},
109 {codeview::RegisterId::ARM64_X1, AArch64::X1},
110 {codeview::RegisterId::ARM64_X2, AArch64::X2},
111 {codeview::RegisterId::ARM64_X3, AArch64::X3},
112 {codeview::RegisterId::ARM64_X4, AArch64::X4},
113 {codeview::RegisterId::ARM64_X5, AArch64::X5},
114 {codeview::RegisterId::ARM64_X6, AArch64::X6},
115 {codeview::RegisterId::ARM64_X7, AArch64::X7},
116 {codeview::RegisterId::ARM64_X8, AArch64::X8},
117 {codeview::RegisterId::ARM64_X9, AArch64::X9},
118 {codeview::RegisterId::ARM64_X10, AArch64::X10},
119 {codeview::RegisterId::ARM64_X11, AArch64::X11},
120 {codeview::RegisterId::ARM64_X12, AArch64::X12},
121 {codeview::RegisterId::ARM64_X13, AArch64::X13},
122 {codeview::RegisterId::ARM64_X14, AArch64::X14},
123 {codeview::RegisterId::ARM64_X15, AArch64::X15},
124 {codeview::RegisterId::ARM64_X16, AArch64::X16},
125 {codeview::RegisterId::ARM64_X17, AArch64::X17},
126 {codeview::RegisterId::ARM64_X18, AArch64::X18},
127 {codeview::RegisterId::ARM64_X19, AArch64::X19},
128 {codeview::RegisterId::ARM64_X20, AArch64::X20},
129 {codeview::RegisterId::ARM64_X21, AArch64::X21},
130 {codeview::RegisterId::ARM64_X22, AArch64::X22},
131 {codeview::RegisterId::ARM64_X23, AArch64::X23},
132 {codeview::RegisterId::ARM64_X24, AArch64::X24},
133 {codeview::RegisterId::ARM64_X25, AArch64::X25},
134 {codeview::RegisterId::ARM64_X26, AArch64::X26},
135 {codeview::RegisterId::ARM64_X27, AArch64::X27},
136 {codeview::RegisterId::ARM64_X28, AArch64::X28},
137 {codeview::RegisterId::ARM64_FP, AArch64::FP},
138 {codeview::RegisterId::ARM64_LR, AArch64::LR},
139 {codeview::RegisterId::ARM64_SP, AArch64::SP},
140 {codeview::RegisterId::ARM64_ZR, AArch64::XZR},
141 {codeview::RegisterId::ARM64_NZCV, AArch64::NZCV},
142 {codeview::RegisterId::ARM64_S0, AArch64::S0},
143 {codeview::RegisterId::ARM64_S1, AArch64::S1},
144 {codeview::RegisterId::ARM64_S2, AArch64::S2},
145 {codeview::RegisterId::ARM64_S3, AArch64::S3},
146 {codeview::RegisterId::ARM64_S4, AArch64::S4},
147 {codeview::RegisterId::ARM64_S5, AArch64::S5},
148 {codeview::RegisterId::ARM64_S6, AArch64::S6},
149 {codeview::RegisterId::ARM64_S7, AArch64::S7},
150 {codeview::RegisterId::ARM64_S8, AArch64::S8},
151 {codeview::RegisterId::ARM64_S9, AArch64::S9},
152 {codeview::RegisterId::ARM64_S10, AArch64::S10},
153 {codeview::RegisterId::ARM64_S11, AArch64::S11},
154 {codeview::RegisterId::ARM64_S12, AArch64::S12},
155 {codeview::RegisterId::ARM64_S13, AArch64::S13},
156 {codeview::RegisterId::ARM64_S14, AArch64::S14},
157 {codeview::RegisterId::ARM64_S15, AArch64::S15},
158 {codeview::RegisterId::ARM64_S16, AArch64::S16},
159 {codeview::RegisterId::ARM64_S17, AArch64::S17},
160 {codeview::RegisterId::ARM64_S18, AArch64::S18},
161 {codeview::RegisterId::ARM64_S19, AArch64::S19},
162 {codeview::RegisterId::ARM64_S20, AArch64::S20},
163 {codeview::RegisterId::ARM64_S21, AArch64::S21},
164 {codeview::RegisterId::ARM64_S22, AArch64::S22},
165 {codeview::RegisterId::ARM64_S23, AArch64::S23},
166 {codeview::RegisterId::ARM64_S24, AArch64::S24},
167 {codeview::RegisterId::ARM64_S25, AArch64::S25},
168 {codeview::RegisterId::ARM64_S26, AArch64::S26},
169 {codeview::RegisterId::ARM64_S27, AArch64::S27},
170 {codeview::RegisterId::ARM64_S28, AArch64::S28},
171 {codeview::RegisterId::ARM64_S29, AArch64::S29},
172 {codeview::RegisterId::ARM64_S30, AArch64::S30},
173 {codeview::RegisterId::ARM64_S31, AArch64::S31},
174 {codeview::RegisterId::ARM64_D0, AArch64::D0},
175 {codeview::RegisterId::ARM64_D1, AArch64::D1},
176 {codeview::RegisterId::ARM64_D2, AArch64::D2},
177 {codeview::RegisterId::ARM64_D3, AArch64::D3},
178 {codeview::RegisterId::ARM64_D4, AArch64::D4},
179 {codeview::RegisterId::ARM64_D5, AArch64::D5},
180 {codeview::RegisterId::ARM64_D6, AArch64::D6},
181 {codeview::RegisterId::ARM64_D7, AArch64::D7},
182 {codeview::RegisterId::ARM64_D8, AArch64::D8},
183 {codeview::RegisterId::ARM64_D9, AArch64::D9},
184 {codeview::RegisterId::ARM64_D10, AArch64::D10},
185 {codeview::RegisterId::ARM64_D11, AArch64::D11},
186 {codeview::RegisterId::ARM64_D12, AArch64::D12},
187 {codeview::RegisterId::ARM64_D13, AArch64::D13},
188 {codeview::RegisterId::ARM64_D14, AArch64::D14},
189 {codeview::RegisterId::ARM64_D15, AArch64::D15},
190 {codeview::RegisterId::ARM64_D16, AArch64::D16},
191 {codeview::RegisterId::ARM64_D17, AArch64::D17},
192 {codeview::RegisterId::ARM64_D18, AArch64::D18},
193 {codeview::RegisterId::ARM64_D19, AArch64::D19},
194 {codeview::RegisterId::ARM64_D20, AArch64::D20},
195 {codeview::RegisterId::ARM64_D21, AArch64::D21},
196 {codeview::RegisterId::ARM64_D22, AArch64::D22},
197 {codeview::RegisterId::ARM64_D23, AArch64::D23},
198 {codeview::RegisterId::ARM64_D24, AArch64::D24},
199 {codeview::RegisterId::ARM64_D25, AArch64::D25},
200 {codeview::RegisterId::ARM64_D26, AArch64::D26},
201 {codeview::RegisterId::ARM64_D27, AArch64::D27},
202 {codeview::RegisterId::ARM64_D28, AArch64::D28},
203 {codeview::RegisterId::ARM64_D29, AArch64::D29},
204 {codeview::RegisterId::ARM64_D30, AArch64::D30},
205 {codeview::RegisterId::ARM64_D31, AArch64::D31},
206 {codeview::RegisterId::ARM64_Q0, AArch64::Q0},
207 {codeview::RegisterId::ARM64_Q1, AArch64::Q1},
208 {codeview::RegisterId::ARM64_Q2, AArch64::Q2},
209 {codeview::RegisterId::ARM64_Q3, AArch64::Q3},
210 {codeview::RegisterId::ARM64_Q4, AArch64::Q4},
211 {codeview::RegisterId::ARM64_Q5, AArch64::Q5},
212 {codeview::RegisterId::ARM64_Q6, AArch64::Q6},
213 {codeview::RegisterId::ARM64_Q7, AArch64::Q7},
214 {codeview::RegisterId::ARM64_Q8, AArch64::Q8},
215 {codeview::RegisterId::ARM64_Q9, AArch64::Q9},
216 {codeview::RegisterId::ARM64_Q10, AArch64::Q10},
217 {codeview::RegisterId::ARM64_Q11, AArch64::Q11},
218 {codeview::RegisterId::ARM64_Q12, AArch64::Q12},
219 {codeview::RegisterId::ARM64_Q13, AArch64::Q13},
220 {codeview::RegisterId::ARM64_Q14, AArch64::Q14},
221 {codeview::RegisterId::ARM64_Q15, AArch64::Q15},
222 {codeview::RegisterId::ARM64_Q16, AArch64::Q16},
223 {codeview::RegisterId::ARM64_Q17, AArch64::Q17},
224 {codeview::RegisterId::ARM64_Q18, AArch64::Q18},
225 {codeview::RegisterId::ARM64_Q19, AArch64::Q19},
226 {codeview::RegisterId::ARM64_Q20, AArch64::Q20},
227 {codeview::RegisterId::ARM64_Q21, AArch64::Q21},
228 {codeview::RegisterId::ARM64_Q22, AArch64::Q22},
229 {codeview::RegisterId::ARM64_Q23, AArch64::Q23},
230 {codeview::RegisterId::ARM64_Q24, AArch64::Q24},
231 {codeview::RegisterId::ARM64_Q25, AArch64::Q25},
232 {codeview::RegisterId::ARM64_Q26, AArch64::Q26},
233 {codeview::RegisterId::ARM64_Q27, AArch64::Q27},
234 {codeview::RegisterId::ARM64_Q28, AArch64::Q28},
235 {codeview::RegisterId::ARM64_Q29, AArch64::Q29},
236 {codeview::RegisterId::ARM64_Q30, AArch64::Q30},
237 {codeview::RegisterId::ARM64_Q31, AArch64::Q31},
238 {codeview::RegisterId::ARM64_B0, AArch64::B0},
239 {codeview::RegisterId::ARM64_B1, AArch64::B1},
240 {codeview::RegisterId::ARM64_B2, AArch64::B2},
241 {codeview::RegisterId::ARM64_B3, AArch64::B3},
242 {codeview::RegisterId::ARM64_B4, AArch64::B4},
243 {codeview::RegisterId::ARM64_B5, AArch64::B5},
244 {codeview::RegisterId::ARM64_B6, AArch64::B6},
245 {codeview::RegisterId::ARM64_B7, AArch64::B7},
246 {codeview::RegisterId::ARM64_B8, AArch64::B8},
247 {codeview::RegisterId::ARM64_B9, AArch64::B9},
248 {codeview::RegisterId::ARM64_B10, AArch64::B10},
249 {codeview::RegisterId::ARM64_B11, AArch64::B11},
250 {codeview::RegisterId::ARM64_B12, AArch64::B12},
251 {codeview::RegisterId::ARM64_B13, AArch64::B13},
252 {codeview::RegisterId::ARM64_B14, AArch64::B14},
253 {codeview::RegisterId::ARM64_B15, AArch64::B15},
254 {codeview::RegisterId::ARM64_B16, AArch64::B16},
255 {codeview::RegisterId::ARM64_B17, AArch64::B17},
256 {codeview::RegisterId::ARM64_B18, AArch64::B18},
257 {codeview::RegisterId::ARM64_B19, AArch64::B19},
258 {codeview::RegisterId::ARM64_B20, AArch64::B20},
259 {codeview::RegisterId::ARM64_B21, AArch64::B21},
260 {codeview::RegisterId::ARM64_B22, AArch64::B22},
261 {codeview::RegisterId::ARM64_B23, AArch64::B23},
262 {codeview::RegisterId::ARM64_B24, AArch64::B24},
263 {codeview::RegisterId::ARM64_B25, AArch64::B25},
264 {codeview::RegisterId::ARM64_B26, AArch64::B26},
265 {codeview::RegisterId::ARM64_B27, AArch64::B27},
266 {codeview::RegisterId::ARM64_B28, AArch64::B28},
267 {codeview::RegisterId::ARM64_B29, AArch64::B29},
268 {codeview::RegisterId::ARM64_B30, AArch64::B30},
269 {codeview::RegisterId::ARM64_B31, AArch64::B31},
270 {codeview::RegisterId::ARM64_H0, AArch64::H0},
271 {codeview::RegisterId::ARM64_H1, AArch64::H1},
272 {codeview::RegisterId::ARM64_H2, AArch64::H2},
273 {codeview::RegisterId::ARM64_H3, AArch64::H3},
274 {codeview::RegisterId::ARM64_H4, AArch64::H4},
275 {codeview::RegisterId::ARM64_H5, AArch64::H5},
276 {codeview::RegisterId::ARM64_H6, AArch64::H6},
277 {codeview::RegisterId::ARM64_H7, AArch64::H7},
278 {codeview::RegisterId::ARM64_H8, AArch64::H8},
279 {codeview::RegisterId::ARM64_H9, AArch64::H9},
280 {codeview::RegisterId::ARM64_H10, AArch64::H10},
281 {codeview::RegisterId::ARM64_H11, AArch64::H11},
282 {codeview::RegisterId::ARM64_H12, AArch64::H12},
283 {codeview::RegisterId::ARM64_H13, AArch64::H13},
284 {codeview::RegisterId::ARM64_H14, AArch64::H14},
285 {codeview::RegisterId::ARM64_H15, AArch64::H15},
286 {codeview::RegisterId::ARM64_H16, AArch64::H16},
287 {codeview::RegisterId::ARM64_H17, AArch64::H17},
288 {codeview::RegisterId::ARM64_H18, AArch64::H18},
289 {codeview::RegisterId::ARM64_H19, AArch64::H19},
290 {codeview::RegisterId::ARM64_H20, AArch64::H20},
291 {codeview::RegisterId::ARM64_H21, AArch64::H21},
292 {codeview::RegisterId::ARM64_H22, AArch64::H22},
293 {codeview::RegisterId::ARM64_H23, AArch64::H23},
294 {codeview::RegisterId::ARM64_H24, AArch64::H24},
295 {codeview::RegisterId::ARM64_H25, AArch64::H25},
296 {codeview::RegisterId::ARM64_H26, AArch64::H26},
297 {codeview::RegisterId::ARM64_H27, AArch64::H27},
298 {codeview::RegisterId::ARM64_H28, AArch64::H28},
299 {codeview::RegisterId::ARM64_H29, AArch64::H29},
300 {codeview::RegisterId::ARM64_H30, AArch64::H30},
301 {codeview::RegisterId::ARM64_H31, AArch64::H31},
303 for (
const auto &
I : RegMap)
304 MRI->mapLLVMRegToCVReg(
I.Reg,
static_cast<int>(
I.CVReg));
308 const auto &FPR16 = AArch64MCRegisterClasses[AArch64::FPR16RegClassID];
310 return Op.isReg() && FPR16.contains(
Op.getReg());
315 const auto &FPR128 = AArch64MCRegisterClasses[AArch64::FPR128RegClassID];
317 return Op.isReg() && FPR128.contains(
Op.getReg());
322 const auto &FPR128 = AArch64MCRegisterClasses[AArch64::FPR128RegClassID];
323 const auto &FPR64 = AArch64MCRegisterClasses[AArch64::FPR64RegClassID];
324 const auto &FPR32 = AArch64MCRegisterClasses[AArch64::FPR32RegClassID];
325 const auto &FPR16 = AArch64MCRegisterClasses[AArch64::FPR16RegClassID];
326 const auto &FPR8 = AArch64MCRegisterClasses[AArch64::FPR8RegClassID];
331 auto Reg =
Op.getReg();
332 return FPR128.contains(Reg) || FPR64.contains(Reg) || FPR32.contains(Reg) ||
333 FPR16.contains(Reg) || FPR8.contains(Reg);
341 InitAArch64MCRegisterInfo(
X, AArch64::LR);
362 unsigned Reg =
MRI.getDwarfRegNum(AArch64::SP,
true);
370 unsigned SyntaxVariant,
374 if (SyntaxVariant == 0)
376 if (SyntaxVariant == 1)
384 std::unique_ptr<MCObjectWriter> &&OW,
385 std::unique_ptr<MCCodeEmitter> &&
Emitter) {
408 else if (Inst.
getOpcode() == AArch64::ADRP)
419 APInt &Mask)
const override {
421 unsigned NumDefs =
Desc.getNumDefs();
422 unsigned NumImplicitDefs =
Desc.implicit_defs().size();
423 assert(
Mask.getBitWidth() == NumDefs + NumImplicitDefs &&
424 "Unexpected number of bits in the mask!");
433 MRI.getRegClass(AArch64::FPR128RegClassID);
452 for (
unsigned I = 0, E = NumDefs;
I < E; ++
I) {
454 if (ClearsSuperReg(
Op.getReg()))
458 for (
unsigned I = 0, E = NumImplicitDefs;
I < E; ++
I) {
460 if (ClearsSuperReg(Reg))
461 Mask.setBit(NumDefs +
I);
464 return Mask.getBoolValue();
467 std::vector<std::pair<uint64_t, uint64_t>>
471 std::vector<std::pair<uint64_t, uint64_t>>
Result;
477 if (Insn == 0xd503245f) {
482 if ((Insn & 0x9f000000) != 0x90000000)
486 (((Insn >> 29) & 3) << 12) + (((Insn >> 5) & 0x3ffff) << 14);
490 if (Insn2 >> 22 == 0x3e5) {
491 Imm += ((Insn2 >> 10) & 0xfff) << 3;
492 Result.push_back(std::make_pair(PltSectionVA + Byte, Imm));
503 return new AArch64MCInstrAnalysis(
Info);
unsigned const MachineRegisterInfo * MRI
static MCInstPrinter * createAArch64MCInstPrinter(const Triple &T, unsigned SyntaxVariant, const MCAsmInfo &MAI, const MCInstrInfo &MII, const MCRegisterInfo &MRI)
static MCSubtargetInfo * createAArch64MCSubtargetInfo(const Triple &TT, StringRef CPU, StringRef FS)
static MCRegisterInfo * createAArch64MCRegisterInfo(const Triple &Triple)
static MCStreamer * createMachOStreamer(MCContext &Ctx, std::unique_ptr< MCAsmBackend > &&TAB, std::unique_ptr< MCObjectWriter > &&OW, std::unique_ptr< MCCodeEmitter > &&Emitter)
LLVM_ABI LLVM_EXTERNAL_VISIBILITY void LLVMInitializeAArch64TargetMC()
static MCInstrInfo * createAArch64MCInstrInfo()
static MCInstrAnalysis * createAArch64InstrAnalysis(const MCInstrInfo *Info)
static MCAsmInfo * createAArch64MCAsmInfo(const MCRegisterInfo &MRI, const Triple &TheTriple, const MCTargetOptions &Options)
assert(UImm &&(UImm !=~static_cast< T >(0)) &&"Invalid immediate!")
Analysis containing CSE Info
#define LLVM_EXTERNAL_VISIBILITY
dxil DXContainer Global Emitter
static GCMetadataPrinterRegistry::Add< ErlangGCPrinter > X("erlang", "erlang-compatible garbage collector")
Class for arbitrary precision integers.
ArrayRef - Represent a constant reference to an array (0 or more elements consecutively in memory),...
size_t size() const
size - Get the array size.
This class represents an Operation in the Expression.
This class is intended to be used as a base class for asm properties and features specific to the tar...
void addInitialFrameState(const MCCFIInstruction &Inst)
static MCCFIInstruction cfiDefCfa(MCSymbol *L, unsigned Register, int64_t Offset, SMLoc Loc={})
.cfi_def_cfa defines a rule for computing CFA as: take address from Register and add Offset to it.
Context object for machine code objects.
This is an instance of a target assembly language printer that converts an MCInst to valid target ass...
Instances of this class represent a single low-level machine instruction.
unsigned getNumOperands() const
unsigned getOpcode() const
const MCOperand & getOperand(unsigned i) const
virtual std::vector< std::pair< uint64_t, uint64_t > > findPltEntries(uint64_t PltSectionVA, ArrayRef< uint8_t > PltContents, const MCSubtargetInfo &STI) const
Returns (PLT virtual address, GOT virtual address) pairs for PLT entries.
virtual bool evaluateBranch(const MCInst &Inst, uint64_t Addr, uint64_t Size, uint64_t &Target) const
Given a branch instruction try to get the address the branch targets.
virtual bool clearsSuperRegisters(const MCRegisterInfo &MRI, const MCInst &Inst, APInt &Writes) const
Returns true if at least one of the register writes performed by.
Describe properties that are true of each instruction in the target description file.
Interface to description of machine instruction set.
Instances of this class represent operands of the MCInst class.
MCRegisterClass - Base class of TargetRegisterClass.
bool contains(MCRegister Reg) const
contains - Return true if the specified register is included in this register class.
MCRegisterInfo base class - We assume that the target defines a static array of MCRegisterDesc object...
Wrapper class representing physical registers. Should be passed by value.
Streaming machine code generation interface.
Generic base class for all target subtargets.
StringRef - Represent a constant reference to a string, i.e.
constexpr bool empty() const
empty - Check if the string is empty.
Target - Wrapper for Target specific information.
Triple - Helper class for working with autoconf configuration names.
bool isOSBinFormatMachO() const
Tests whether the environment is MachO.
ArchType getArch() const
Get the parsed architecture type of this triple.
bool isOSBinFormatCOFF() const
Tests whether the OS uses the COFF binary format.
bool isOSBinFormatELF() const
Tests whether the OS uses the ELF binary format.
bool isWindowsMSVCEnvironment() const
Checks if the environment could be MSVC.
bool isHForm(const MCInst &MI, const MCInstrInfo *MCII)
void initLLVMToCVRegMapping(MCRegisterInfo *MRI)
bool isQForm(const MCInst &MI, const MCInstrInfo *MCII)
bool isFpOrNEON(const MCInst &MI, const MCInstrInfo *MCII)
LLVM_ABI StringRef resolveCPUAlias(StringRef CPU)
constexpr std::underlying_type_t< E > Mask()
Get a bitmask with 1s in all places up to the high-order bit of E's largest value.
Reg
All possible values of the reg field in the ModR/M byte.
uint32_t read32le(const void *P)
This is an optimization pass for GlobalISel generic memory operations.
MCStreamer * createAArch64ELFStreamer(const Triple &, MCContext &Context, std::unique_ptr< MCAsmBackend > &&TAB, std::unique_ptr< MCObjectWriter > &&OW, std::unique_ptr< MCCodeEmitter > &&Emitter)
MCTargetStreamer * createAArch64AsmTargetStreamer(MCStreamer &S, formatted_raw_ostream &OS, MCInstPrinter *InstPrint)
Target & getTheAArch64beTarget()
Target & getTheAArch64leTarget()
MCTargetStreamer * createAArch64NullTargetStreamer(MCStreamer &S)
bool any_of(R &&range, UnaryPredicate P)
Provide wrappers to std::any_of which take ranges instead of having to pass begin/end explicitly.
MCAsmBackend * createAArch64leAsmBackend(const Target &T, const MCSubtargetInfo &STI, const MCRegisterInfo &MRI, const MCTargetOptions &Options)
Target & getTheAArch64_32Target()
MCStreamer * createAArch64WinCOFFStreamer(MCContext &Context, std::unique_ptr< MCAsmBackend > &&TAB, std::unique_ptr< MCObjectWriter > &&OW, std::unique_ptr< MCCodeEmitter > &&Emitter)
Target & getTheARM64_32Target()
Target & getTheARM64Target()
DWARFExpression::Operation Op
MCAsmBackend * createAArch64beAsmBackend(const Target &T, const MCSubtargetInfo &STI, const MCRegisterInfo &MRI, const MCTargetOptions &Options)
MCTargetStreamer * createAArch64ObjectTargetStreamer(MCStreamer &S, const MCSubtargetInfo &STI)
MCCodeEmitter * createAArch64MCCodeEmitter(const MCInstrInfo &MCII, MCContext &Ctx)
LLVM_ABI void reportFatalUsageError(Error Err)
Report a fatal error that does not indicate a bug in LLVM.
Description of the encoding of one expression Op.
RegisterMCAsmInfoFn - Helper template for registering a target assembly info implementation.
static void RegisterMCRegInfo(Target &T, Target::MCRegInfoCtorFnTy Fn)
RegisterMCRegInfo - Register a MCRegisterInfo implementation for the given target.
static void RegisterMCAsmBackend(Target &T, Target::MCAsmBackendCtorTy Fn)
RegisterMCAsmBackend - Register a MCAsmBackend implementation for the given target.
static void RegisterMCCodeEmitter(Target &T, Target::MCCodeEmitterCtorTy Fn)
RegisterMCCodeEmitter - Register a MCCodeEmitter implementation for the given target.
static void RegisterMCSubtargetInfo(Target &T, Target::MCSubtargetInfoCtorFnTy Fn)
RegisterMCSubtargetInfo - Register a MCSubtargetInfo implementation for the given target.
static void RegisterObjectTargetStreamer(Target &T, Target::ObjectTargetStreamerCtorTy Fn)
static void RegisterMCInstrAnalysis(Target &T, Target::MCInstrAnalysisCtorFnTy Fn)
RegisterMCInstrAnalysis - Register a MCInstrAnalysis implementation for the given target.
static void RegisterELFStreamer(Target &T, Target::ELFStreamerCtorTy Fn)
static void RegisterNullTargetStreamer(Target &T, Target::NullTargetStreamerCtorTy Fn)
static void RegisterMCInstPrinter(Target &T, Target::MCInstPrinterCtorTy Fn)
RegisterMCInstPrinter - Register a MCInstPrinter implementation for the given target.
static void RegisterCOFFStreamer(Target &T, Target::COFFStreamerCtorTy Fn)
static void RegisterMCInstrInfo(Target &T, Target::MCInstrInfoCtorFnTy Fn)
RegisterMCInstrInfo - Register a MCInstrInfo implementation for the given target.
static void RegisterMachOStreamer(Target &T, Target::MachOStreamerCtorTy Fn)
static void RegisterAsmTargetStreamer(Target &T, Target::AsmTargetStreamerCtorTy Fn)