33#define DEBUG_TYPE "hexagon-asm-backend"
36 (
"mno-fixup",
cl::desc(
"Disable fixing up resolved relocations for Hexagon"));
45 std::unique_ptr <MCInstrInfo> MCII;
46 std::unique_ptr <MCInst *> RelaxTarget;
48 unsigned MaxPacketSize;
62 HexagonAsmBackend(
const Target &
T,
const Triple &TT, uint8_t OSABI,
66 Extender(nullptr), MaxPacketSize(HexagonMCInstrInfo::
packetSize(CPU)) {}
68 std::unique_ptr<MCObjectTargetWriter>
69 createObjectTargetWriter()
const override {
73 void setExtender(MCContext &
Context)
const {
74 if (Extender ==
nullptr)
75 const_cast<HexagonAsmBackend *
>(
this)->Extender =
Context.createMCInst();
78 MCInst *takeExtender()
const {
79 assert(Extender !=
nullptr);
80 MCInst *
Result = Extender;
81 const_cast<HexagonAsmBackend *
>(
this)->Extender =
nullptr;
85 std::optional<MCFixupKind>
getFixupKind(StringRef Name)
const override {
86 unsigned Type = llvm::StringSwitch<unsigned>(Name)
87#define ELF_RELOC(X, Y) .Case(#X, Y)
88#include "llvm/BinaryFormat/ELFRelocs/Hexagon.def"
90 .Case(
"BFD_RELOC_NONE", ELF::R_HEX_NONE)
91 .Case(
"BFD_RELOC_8", ELF::R_HEX_8)
92 .Case(
"BFD_RELOC_16", ELF::R_HEX_16)
93 .Case(
"BFD_RELOC_32", ELF::R_HEX_32)
100 MCFixupKindInfo getFixupKindInfo(
MCFixupKind Kind)
const override {
107 {
"fixup_Hexagon_B22_PCREL", 0, 32, 0 },
108 {
"fixup_Hexagon_B15_PCREL", 0, 32, 0 },
109 {
"fixup_Hexagon_B7_PCREL", 0, 32, 0 },
110 {
"fixup_Hexagon_LO16", 0, 32, 0 },
111 {
"fixup_Hexagon_HI16", 0, 32, 0 },
112 {
"fixup_Hexagon_32", 0, 32, 0 },
113 {
"fixup_Hexagon_16", 0, 32, 0 },
114 {
"fixup_Hexagon_8", 0, 32, 0 },
115 {
"fixup_Hexagon_GPREL16_0", 0, 32, 0 },
116 {
"fixup_Hexagon_GPREL16_1", 0, 32, 0 },
117 {
"fixup_Hexagon_GPREL16_2", 0, 32, 0 },
118 {
"fixup_Hexagon_GPREL16_3", 0, 32, 0 },
119 {
"fixup_Hexagon_HL16", 0, 32, 0 },
120 {
"fixup_Hexagon_B13_PCREL", 0, 32, 0 },
121 {
"fixup_Hexagon_B9_PCREL", 0, 32, 0 },
122 {
"fixup_Hexagon_B32_PCREL_X", 0, 32, 0 },
123 {
"fixup_Hexagon_32_6_X", 0, 32, 0 },
124 {
"fixup_Hexagon_B22_PCREL_X", 0, 32, 0 },
125 {
"fixup_Hexagon_B15_PCREL_X", 0, 32, 0 },
126 {
"fixup_Hexagon_B13_PCREL_X", 0, 32, 0 },
127 {
"fixup_Hexagon_B9_PCREL_X", 0, 32, 0 },
128 {
"fixup_Hexagon_B7_PCREL_X", 0, 32, 0 },
129 {
"fixup_Hexagon_16_X", 0, 32, 0 },
130 {
"fixup_Hexagon_12_X", 0, 32, 0 },
131 {
"fixup_Hexagon_11_X", 0, 32, 0 },
132 {
"fixup_Hexagon_10_X", 0, 32, 0 },
133 {
"fixup_Hexagon_9_X", 0, 32, 0 },
134 {
"fixup_Hexagon_8_X", 0, 32, 0 },
135 {
"fixup_Hexagon_7_X", 0, 32, 0 },
136 {
"fixup_Hexagon_6_X", 0, 32, 0 },
137 {
"fixup_Hexagon_32_PCREL", 0, 32, 0 },
138 {
"fixup_Hexagon_COPY", 0, 32, 0 },
139 {
"fixup_Hexagon_GLOB_DAT", 0, 32, 0 },
140 {
"fixup_Hexagon_JMP_SLOT", 0, 32, 0 },
141 {
"fixup_Hexagon_RELATIVE", 0, 32, 0 },
142 {
"fixup_Hexagon_PLT_B22_PCREL", 0, 32, 0 },
143 {
"fixup_Hexagon_GOTREL_LO16", 0, 32, 0 },
144 {
"fixup_Hexagon_GOTREL_HI16", 0, 32, 0 },
145 {
"fixup_Hexagon_GOTREL_32", 0, 32, 0 },
146 {
"fixup_Hexagon_GOT_LO16", 0, 32, 0 },
147 {
"fixup_Hexagon_GOT_HI16", 0, 32, 0 },
148 {
"fixup_Hexagon_GOT_32", 0, 32, 0 },
149 {
"fixup_Hexagon_GOT_16", 0, 32, 0 },
150 {
"fixup_Hexagon_DTPMOD_32", 0, 32, 0 },
151 {
"fixup_Hexagon_DTPREL_LO16", 0, 32, 0 },
152 {
"fixup_Hexagon_DTPREL_HI16", 0, 32, 0 },
153 {
"fixup_Hexagon_DTPREL_32", 0, 32, 0 },
154 {
"fixup_Hexagon_DTPREL_16", 0, 32, 0 },
155 {
"fixup_Hexagon_GD_PLT_B22_PCREL",0, 32, 0 },
156 {
"fixup_Hexagon_LD_PLT_B22_PCREL",0, 32, 0 },
157 {
"fixup_Hexagon_GD_GOT_LO16", 0, 32, 0 },
158 {
"fixup_Hexagon_GD_GOT_HI16", 0, 32, 0 },
159 {
"fixup_Hexagon_GD_GOT_32", 0, 32, 0 },
160 {
"fixup_Hexagon_GD_GOT_16", 0, 32, 0 },
161 {
"fixup_Hexagon_LD_GOT_LO16", 0, 32, 0 },
162 {
"fixup_Hexagon_LD_GOT_HI16", 0, 32, 0 },
163 {
"fixup_Hexagon_LD_GOT_32", 0, 32, 0 },
164 {
"fixup_Hexagon_LD_GOT_16", 0, 32, 0 },
165 {
"fixup_Hexagon_IE_LO16", 0, 32, 0 },
166 {
"fixup_Hexagon_IE_HI16", 0, 32, 0 },
167 {
"fixup_Hexagon_IE_32", 0, 32, 0 },
168 {
"fixup_Hexagon_IE_16", 0, 32, 0 },
169 {
"fixup_Hexagon_IE_GOT_LO16", 0, 32, 0 },
170 {
"fixup_Hexagon_IE_GOT_HI16", 0, 32, 0 },
171 {
"fixup_Hexagon_IE_GOT_32", 0, 32, 0 },
172 {
"fixup_Hexagon_IE_GOT_16", 0, 32, 0 },
173 {
"fixup_Hexagon_TPREL_LO16", 0, 32, 0 },
174 {
"fixup_Hexagon_TPREL_HI16", 0, 32, 0 },
175 {
"fixup_Hexagon_TPREL_32", 0, 32, 0 },
176 {
"fixup_Hexagon_TPREL_16", 0, 32, 0 },
177 {
"fixup_Hexagon_6_PCREL_X", 0, 32, 0 },
178 {
"fixup_Hexagon_GOTREL_32_6_X", 0, 32, 0 },
179 {
"fixup_Hexagon_GOTREL_16_X", 0, 32, 0 },
180 {
"fixup_Hexagon_GOTREL_11_X", 0, 32, 0 },
181 {
"fixup_Hexagon_GOT_32_6_X", 0, 32, 0 },
182 {
"fixup_Hexagon_GOT_16_X", 0, 32, 0 },
183 {
"fixup_Hexagon_GOT_11_X", 0, 32, 0 },
184 {
"fixup_Hexagon_DTPREL_32_6_X", 0, 32, 0 },
185 {
"fixup_Hexagon_DTPREL_16_X", 0, 32, 0 },
186 {
"fixup_Hexagon_DTPREL_11_X", 0, 32, 0 },
187 {
"fixup_Hexagon_GD_GOT_32_6_X", 0, 32, 0 },
188 {
"fixup_Hexagon_GD_GOT_16_X", 0, 32, 0 },
189 {
"fixup_Hexagon_GD_GOT_11_X", 0, 32, 0 },
190 {
"fixup_Hexagon_LD_GOT_32_6_X", 0, 32, 0 },
191 {
"fixup_Hexagon_LD_GOT_16_X", 0, 32, 0 },
192 {
"fixup_Hexagon_LD_GOT_11_X", 0, 32, 0 },
193 {
"fixup_Hexagon_IE_32_6_X", 0, 32, 0 },
194 {
"fixup_Hexagon_IE_16_X", 0, 32, 0 },
195 {
"fixup_Hexagon_IE_GOT_32_6_X", 0, 32, 0 },
196 {
"fixup_Hexagon_IE_GOT_16_X", 0, 32, 0 },
197 {
"fixup_Hexagon_IE_GOT_11_X", 0, 32, 0 },
198 {
"fixup_Hexagon_TPREL_32_6_X", 0, 32, 0 },
199 {
"fixup_Hexagon_TPREL_16_X", 0, 32, 0 },
200 {
"fixup_Hexagon_TPREL_11_X", 0, 32, 0 },
201 {
"fixup_Hexagon_GD_PLT_B22_PCREL_X", 0, 32, 0 },
202 {
"fixup_Hexagon_GD_PLT_B32_PCREL_X", 0, 32, 0 },
203 {
"fixup_Hexagon_LD_PLT_B22_PCREL_X", 0, 32, 0 },
204 {
"fixup_Hexagon_LD_PLT_B32_PCREL_X", 0, 32, 0 },
218 switch(
Fixup.getKind()) {
372 switch((
unsigned)Kind) {
401 void HandleFixupError(
const int bits,
const int align_bits,
402 const int64_t FixupValue,
const char *fixupStr)
const {
407 std::stringstream errStr;
408 errStr <<
"\nError: value " <<
414 " when resolving " <<
420 void applyFixup(
const MCFragment &,
const MCFixup &,
const MCValue &,
421 uint8_t *
Data, uint64_t FixupValue,
bool IsResolved)
override;
423 bool isInstRelaxable(MCInst
const &HMI)
const {
425 bool Relaxable =
false;
436 MCOperand
const &Operand =
446 const MCSubtargetInfo &STI)
const override {
448 RelaxedMCB.setOpcode(Opcode);
449 RelaxedMCB.setOperands(Operands);
455 bool fixupNeedsRelaxationAdvanced(
const MCFragment &
F,
const MCFixup &
Fixup,
456 const MCValue &, uint64_t
Value,
457 bool Resolved)
const override {
458 MCInst
const &MCB = RelaxedMCB;
461 *RelaxTarget =
nullptr;
464 bool Relaxable = isInstRelaxable(MCI);
465 if (Relaxable ==
false)
469 switch (
Fixup.getKind()) {
494 int64_t sValue =
Value;
497 switch ((
unsigned)Kind) {
515 bool isFarAway = -maxValue > sValue || sValue > maxValue - 1;
529 void relaxInstruction(MCInst &Inst,
530 const MCSubtargetInfo &STI)
const override {
532 "Hexagon relaxInstruction only works on bundles");
540 MCInst &CrntHMI =
const_cast<MCInst &
>(*
I.getInst());
543 if (*RelaxTarget == &CrntHMI) {
546 "No room to insert extender for relaxation");
548 MCInst *HMIx = takeExtender();
553 *RelaxTarget =
nullptr;
559 Inst = std::move(Res);
561 assert(Update &&
"Didn't find relaxation target");
564 bool writeNopData(raw_ostream &OS, uint64_t
Count,
565 const MCSubtargetInfo *STI)
const override {
566 static const uint32_t Nopcode = 0x7f000000,
567 ParseIn = 0x00004000,
568 ParseEnd = 0x0000c000;
571 LLVM_DEBUG(
dbgs() <<
"Alignment not a multiple of the instruction size:"
588 bool finishLayout()
const override {
590 for (MCSection &Sec : *Asm) {
592 for (MCFragment &
F : Sec)
594 for (
size_t J = 0,
E = Frags.
size(); J !=
E; ++J) {
595 switch (Frags[J]->getKind()) {
599 auto Size =
Asm->computeFragmentSize(*Frags[J]);
602 switch (Frags[K]->getKind()) {
612 auto &RF = *Frags[
K];
623 Asm->symbols(), [&RF, &Inst, Asm = Asm](MCSymbol
const &sym) {
625 const bool HasOffset = Asm->getSymbolOffset(sym, Offset);
626 const unsigned PacketSizeBytes =
627 HexagonMCInstrInfo::bundleSize(Inst) *
629 const bool OffsetPastSym =
630 Offset <= Asm->getFragmentOffset(RF) + PacketSizeBytes;
631 return !sym.isVariable() && Offset != 0 && HasOffset &&
634 if (WouldTraverseLabel) {
641 MCInst *Nop =
Context.createMCInst();
645 if (!HexagonMCChecker(
647 *
Context.getRegisterInfo(),
false)
657 ReplaceInstruction(
Asm->getEmitter(), RF, Inst);
675 uint64_t FixupValue,
bool IsResolved) {
678 maybeAddReloc(
F,
Fixup, Target, FixupValue, IsResolved);
693 "Invalid fixup offset!");
698 int sValue = (int)
Value;
700 switch ((
unsigned)Kind) {
706 HandleFixupError(7, 2, (int64_t)FixupValue,
"B7_PCREL");
709 InstMask = 0x00001f18;
710 Reloc = (((
Value >> 2) & 0x1f) << 8) |
711 ((
Value & 0x3) << 3);
716 HandleFixupError(9, 2, (int64_t)FixupValue,
"B9_PCREL");
719 InstMask = 0x003000fe;
720 Reloc = (((
Value >> 7) & 0x3) << 20) |
721 ((
Value & 0x7f) << 1);
727 if (!(
isIntN(13, sValue)))
728 HandleFixupError(13, 2, (int64_t)FixupValue,
"B13_PCREL");
731 InstMask = 0x00202ffe;
732 Reloc = (((
Value >> 12) & 0x1) << 21) |
733 (((
Value >> 11) & 0x1) << 13) |
734 ((
Value & 0x7ff) << 1);
738 if (!(
isIntN(15, sValue)))
739 HandleFixupError(15, 2, (int64_t)FixupValue,
"B15_PCREL");
742 InstMask = 0x00df20fe;
743 Reloc = (((
Value >> 13) & 0x3) << 22) |
744 (((
Value >> 8) & 0x1f) << 16) |
745 (((
Value >> 7) & 0x1) << 13) |
746 ((
Value & 0x7f) << 1);
750 if (!(
isIntN(22, sValue)))
751 HandleFixupError(22, 2, (int64_t)FixupValue,
"B22_PCREL");
754 InstMask = 0x01ff3ffe;
755 Reloc = (((
Value >> 13) & 0x1ff) << 16) |
756 ((
Value & 0x1fff) << 1);
760 InstMask = 0x0fff3fff;
761 Reloc = (((
Value >> 14) & 0xfff) << 16) |
769 InstMask = 0xffffffff;
774 LLVM_DEBUG(
dbgs() <<
"Name=" << getFixupKindInfo(Kind).Name <<
"("
775 << (
unsigned)Kind <<
")\n");
777 uint32_t OldData = 0;
for (
unsigned i = 0; i < NumBytes; i++) OldData |=
778 (InstAddr[i] << (i * 8)) & (0xff << (i * 8));
781 <<
": Size=" <<
F.getSize() <<
": OInst=0x";
787 for (
unsigned i = 0; i < NumBytes; i++) {
788 InstAddr[i] &= uint8_t(~InstMask >> (i * 8)) & 0xff;
789 InstAddr[i] |= uint8_t(Reloc >> (i * 8)) & 0xff;
793 for (
unsigned i = 0; i < NumBytes; i++) NewData |=
794 (InstAddr[i] << (i * 8)) & (0xff << (i * 8));
807 return new HexagonAsmBackend(
T, TT, OSABI, CPUString);
static unsigned getFixupKindNumBytes(unsigned Kind)
The number of bytes the fixup may change.
static uint64_t adjustFixupValue(const MCFixup &Fixup, const MCValue &Target, uint64_t Value, MCContext &Ctx, const Triple &TheTriple, bool IsResolved)
static bool shouldForceRelocation(const MCFixup &Fixup)
assert(UImm &&(UImm !=~static_cast< T >(0)) &&"Invalid immediate!")
static GCRegistry::Add< CoreCLRGC > E("coreclr", "CoreCLR-compatible GC")
static cl::opt< bool > DisableFixup("mno-fixup", cl::desc("Disable fixing up resolved relocations for Hexagon"))
Definition for classes that emit Hexagon machine code from MCInsts.
#define HEXAGON_INSTR_SIZE
#define HEXAGON_PACKET_SIZE
PowerPC TLS Dynamic Call Fixup
This file implements the StringSwitch template, which mimics a switch() statement whose cases are str...
static MCInstrInfo * createMCInstrInfo()
static APInt getSignedMaxValue(unsigned numBits)
Gets maximum signed value of APInt for a specific bit width.
static APInt getSignedMinValue(unsigned numBits)
Gets minimum signed value of APInt for a specific bit width.
int64_t getSExtValue() const
Get sign extended value.
Generic interface to target specific assembler backends.
virtual MCFixupKindInfo getFixupKindInfo(MCFixupKind Kind) const
Get information on a fixup kind.
MCCodeEmitter - Generic instruction encoding interface.
Encode information on a single operation to perform on a byte sequence (e.g., an encoded instruction)...
LLVM_ABI void setVarFixups(ArrayRef< MCFixup > Fixups)
LLVM_ABI void setVarContents(ArrayRef< char > Contents)
const MCSubtargetInfo * getSubtargetInfo() const
Retrieve the MCSubTargetInfo in effect when the instruction was encoded.
MutableArrayRef< MCFixup > getVarFixups()
void setInst(const MCInst &Inst)
Instances of this class represent a single low-level machine instruction.
unsigned getOpcode() const
void addOperand(const MCOperand Op)
void setOpcode(unsigned Op)
const MCOperand & getOperand(unsigned i) const
bool isBranch() const
Returns true if this is a conditional, unconditional, or indirect branch.
static MCOperand createImm(int64_t Val)
const MCExpr * getExpr() const
static MCOperand createInst(const MCInst *Val)
MCRegisterInfo base class - We assume that the target defines a static array of MCRegisterDesc object...
Generic base class for all target subtargets.
const Triple & getTargetTriple() const
SmallString - A SmallString is just a SmallVector with methods and accessors that make it work better...
void push_back(const T &Elt)
This is a 'vector' (really, a variable-sized array), optimized for the case when the array is small.
StringRef - Represent a constant reference to a string, i.e.
Target - Wrapper for Target specific information.
Triple - Helper class for working with autoconf configuration names.
raw_ostream & write_hex(unsigned long long N)
Output N in hexadecimal, without any prefix or padding.
#define llvm_unreachable(msg)
Marks that the current location is not supposed to be reachable.
size_t bundleSize(MCInst const &MCI)
unsigned short getExtendableOp(MCInstrInfo const &MCII, MCInst const &MCI)
bool mustNotExtend(MCExpr const &Expr)
MCInstrDesc const & getDesc(MCInstrInfo const &MCII, MCInst const &MCI)
iterator_range< Hexagon::PacketIterator > bundleInstructions(MCInstrInfo const &MCII, MCInst const &MCI)
bool isBundle(MCInst const &MCI)
bool isExtendable(MCInstrInfo const &MCII, MCInst const &MCI)
unsigned getType(MCInstrInfo const &MCII, MCInst const &MCI)
Return the Hexagon ISA class for the insn.
MCInst const & instruction(MCInst const &MCB, size_t Index)
MCOperand const & getExtendableOperand(MCInstrInfo const &MCII, MCInst const &MCI)
unsigned packetSize(StringRef CPU)
MCInst deriveExtender(MCInstrInfo const &MCII, MCInst const &Inst, MCOperand const &MO)
StringRef selectHexagonCPU(StringRef CPU)
@ fixup_Hexagon_LD_PLT_B32_PCREL_X
@ fixup_Hexagon_GPREL16_3
@ fixup_Hexagon_GD_GOT_HI16
@ fixup_Hexagon_IE_GOT_16_X
@ fixup_Hexagon_LD_PLT_B22_PCREL
@ fixup_Hexagon_TPREL_32_6_X
@ fixup_Hexagon_TPREL_16_X
@ fixup_Hexagon_B7_PCREL_X
@ fixup_Hexagon_B13_PCREL
@ fixup_Hexagon_DTPREL_HI16
@ fixup_Hexagon_DTPMOD_32
@ fixup_Hexagon_IE_GOT_LO16
@ fixup_Hexagon_LD_PLT_B22_PCREL_X
@ fixup_Hexagon_GD_GOT_32_6_X
@ fixup_Hexagon_LD_GOT_HI16
@ fixup_Hexagon_B13_PCREL_X
@ fixup_Hexagon_GOTREL_HI16
@ fixup_Hexagon_IE_GOT_32_6_X
@ fixup_Hexagon_GD_GOT_16
@ fixup_Hexagon_PLT_B22_PCREL
@ fixup_Hexagon_B32_PCREL_X
@ fixup_Hexagon_GD_GOT_16_X
@ fixup_Hexagon_GD_GOT_11_X
@ fixup_Hexagon_DTPREL_32_6_X
@ fixup_Hexagon_GD_GOT_LO16
@ fixup_Hexagon_GD_PLT_B32_PCREL_X
@ fixup_Hexagon_DTPREL_16
@ fixup_Hexagon_DTPREL_11_X
@ fixup_Hexagon_GPREL16_2
@ fixup_Hexagon_GPREL16_1
@ fixup_Hexagon_DTPREL_32
@ fixup_Hexagon_GOTREL_32
@ fixup_Hexagon_DTPREL_LO16
@ fixup_Hexagon_LD_GOT_16_X
@ fixup_Hexagon_B15_PCREL
@ fixup_Hexagon_LD_GOT_16
@ fixup_Hexagon_GPREL16_0
@ fixup_Hexagon_6_PCREL_X
@ fixup_Hexagon_GD_GOT_32
@ fixup_Hexagon_GD_PLT_B22_PCREL_X
@ fixup_Hexagon_GD_PLT_B22_PCREL
@ fixup_Hexagon_IE_GOT_32
@ fixup_Hexagon_B22_PCREL
@ fixup_Hexagon_TPREL_LO16
@ fixup_Hexagon_TPREL_HI16
@ fixup_Hexagon_LD_GOT_32_6_X
@ fixup_Hexagon_IE_GOT_16
@ fixup_Hexagon_LD_GOT_LO16
@ fixup_Hexagon_TPREL_11_X
@ fixup_Hexagon_GOTREL_LO16
@ fixup_Hexagon_IE_GOT_HI16
@ fixup_Hexagon_GOT_32_6_X
@ fixup_Hexagon_LD_GOT_11_X
@ fixup_Hexagon_GOTREL_11_X
@ fixup_Hexagon_DTPREL_16_X
@ fixup_Hexagon_B15_PCREL_X
@ fixup_Hexagon_B22_PCREL_X
@ fixup_Hexagon_IE_32_6_X
@ fixup_Hexagon_IE_GOT_11_X
@ fixup_Hexagon_LD_GOT_32
@ fixup_Hexagon_GOTREL_32_6_X
@ fixup_Hexagon_B9_PCREL_X
@ fixup_Hexagon_GOTREL_16_X
VE::Fixups getFixupKind(uint8_t S)
Error applyFixup(LinkGraph &G, Block &B, const Edge &E, const ArmConfig &ArmCfg)
Apply fixup expression for edge to block content.
Context & getContext() const
void write(void *memory, value_type value, endianness endian)
Write a value to memory with a particular endianness.
This is an optimization pass for GlobalISel generic memory operations.
FunctionAddr VTableAddr Value
bool HexagonMCShuffle(MCContext &Context, bool ReportErrors, MCInstrInfo const &MCII, MCSubtargetInfo const &STI, MCInst &MCB)
std::unique_ptr< MCObjectTargetWriter > createHexagonELFObjectWriter(uint8_t OSABI, StringRef CPU)
bool any_of(R &&range, UnaryPredicate P)
Provide wrappers to std::any_of which take ranges instead of having to pass begin/end explicitly.
uint16_t MCFixupKind
Extensible enumeration to represent the type of a fixup.
MCAsmBackend * createHexagonAsmBackend(const Target &T, const MCSubtargetInfo &STI, const MCRegisterInfo &MRI, const MCTargetOptions &Options)
LLVM_ABI raw_ostream & dbgs()
dbgs() - This returns a reference to a raw_ostream for debugging messages.
FunctionAddr VTableAddr Count
class LLVM_GSL_OWNER SmallVector
Forward declaration of SmallVector so that calculateSmallVectorDefaultInlinedElements can reference s...
@ FirstLiteralRelocationKind
@ FK_Data_1
A one-byte fixup.
@ FK_Data_4
A four-byte fixup.
@ FK_Data_2
A two-byte fixup.
FunctionAddr VTableAddr uintptr_t uintptr_t Data
ArrayRef(const T &OneElt) -> ArrayRef< T >
constexpr bool isIntN(unsigned N, int64_t x)
Checks if an signed integer fits into the given (dynamic) bit width.