LLVM: lib/Target/AArch64/AArch64MCInstLower.cpp Source File (original) (raw)

1

2

3

4

5

6

7

8

9

10

11

12

13

33using namespace llvm;

35

37

40

44}

45

47 unsigned TargetFlags) const {

51

53 "Windows is the only supported COFF target");

54

55 bool IsIndirect =

57 if (!IsIndirect) {

58

59

60

61

65

67

69 "__os_arm64x_check_icall_cfg", "__os_arm64x_dispatch_call_no_redirect",

70 "__os_arm64x_check_icall"};

73

74 if (std::optionalstd::string MangledName =

77 if (!cast(GV)->hasMetadata("arm64ec_hasguestexit")) {

83 Ctx));

86 MangledSym,

89 }

90

92 return MangledSym;

93 }

94

96 }

97

99

103 isa(GV)) {

104

105

106

107

108

109

110

111

112

113

114

115 Name = "__imp_";

120

121 Name = "__imp_aux_";

123 Name = "__imp_";

125 Name = ".refptr.";

126 }

129

131

137

138 if (!StubSym.getPointer())

140 }

141

142 return MCSym;

143}

144

148}

149

152

153

161 else

162 llvm_unreachable("Unexpected target flags with MO_GOT on GV operand");

169 else

170 llvm_unreachable("Unexpected target flags with MO_TLS on GV operand");

171 } else {

177 }

183}

184

188

200 } else {

206 }

207 } else {

210 "unexpected external TLS symbol");

211

212

214 }

215 switch (Model) {

218 break;

221 break;

224 break;

226

227

228

229

234 break;

235 }

236 }

239 } else {

240

241

243 }

244

260

263

269

273

275}

276

280

287

290 } else {

292

298 }

299

308

309

310

311

317 }

318

324

327 "Invalid relocation requested");

329

331}

332

339

342}

343

347 default:

350

352 return false;

354 break;

356

357 return false;

360 break;

364 break;

367 break;

370 break;

373 break;

376 break;

379 break;

383 break;

384 }

385 return true;

386}

387

390

395 }

396

398 case AArch64::CATCHRET:

402 break;

403 case AArch64::CLEANUPRET:

407 break;

408 }

409}

cl::opt< bool > EnableAArch64ELFLocalDynamicTLSGeneration("aarch64-elf-ldtls-generation", cl::Hidden, cl::desc("Allow AArch64 Local Dynamic TLS code generation"), cl::init(false))

cl::opt< bool > EnableAArch64ELFLocalDynamicTLSGeneration

dxil pretty DXIL Metadata Pretty Printer

assert(ImpDefSCC.getReg()==AMDGPU::SCC &&ImpDefSCC.isDef())

AArch64FunctionInfo - This class is derived from MachineFunctionInfo and contains private AArch64-spe...

bool hasELFSignedGOT() const

static const AArch64MCExpr * create(const MCExpr *Expr, VariantKind Kind, MCContext &Ctx)

MCSymbol * GetExternalSymbolSymbol(const MachineOperand &MO) const

MCOperand lowerSymbolOperandCOFF(const MachineOperand &MO, MCSymbol *Sym) const

MCOperand LowerSymbolOperand(const MachineOperand &MO, MCSymbol *Sym) const

MCSymbol * GetGlobalValueSymbol(const GlobalValue *GV, unsigned TargetFlags) const

MCOperand lowerSymbolOperandELF(const MachineOperand &MO, MCSymbol *Sym) const

AArch64MCInstLower(MCContext &ctx, AsmPrinter &printer)

void Lower(const MachineInstr *MI, MCInst &OutMI) const

bool lowerOperand(const MachineOperand &MO, MCOperand &MCOp) const

MCSymbol * GetGlobalAddressSymbol(const MachineOperand &MO) const

MCOperand lowerSymbolOperandMachO(const MachineOperand &MO, MCSymbol *Sym) const

This class is intended to be used as a driving class for all asm writers.

const TargetLoweringObjectFile & getObjFileLowering() const

Return information about object file lowering.

MCSymbol * getSymbol(const GlobalValue *GV) const

TargetMachine & TM

Target machine description.

virtual MCSymbol * GetCPISymbol(unsigned CPID) const

Return the symbol for the specified constant pool entry.

MCSymbol * GetJTISymbol(unsigned JTID, bool isLinkerPrivate=false) const

Return the symbol for the specified jump table entry.

MCSymbol * getSymbolPreferLocal(const GlobalValue &GV) const

Similar to getSymbol() but preferred for references.

MachineModuleInfo * MMI

This is a pointer to the current MachineModuleInfo.

MCSymbol * GetExternalSymbolSymbol(Twine Sym) const

Return the MCSymbol for the specified ExternalSymbol.

std::unique_ptr< MCStreamer > OutStreamer

This is the MCStreamer object for the file we are generating.

MCSymbol * GetBlockAddressSymbol(const BlockAddress *BA) const

Return the MCSymbol used to satisfy BlockAddress uses of the specified basic block.

bool hasExternalLinkage() const

static const MCBinaryExpr * createAdd(const MCExpr *LHS, const MCExpr *RHS, MCContext &Ctx)

static const MCConstantExpr * create(int64_t Value, MCContext &Ctx, bool PrintInHex=false, unsigned SizeInBytes=0)

Context object for machine code objects.

MCSymbol * getOrCreateSymbol(const Twine &Name)

Lookup the symbol inside with the specified Name.

Base class for the full range of assembler expressions which are needed for parsing.

Instances of this class represent a single low-level machine instruction.

unsigned getOpcode() const

void addOperand(const MCOperand Op)

void setOpcode(unsigned Op)

Instances of this class represent operands of the MCInst class.

static MCOperand createExpr(const MCExpr *Val)

static MCOperand createReg(MCRegister Reg)

static MCOperand createImm(int64_t Val)

static const MCSymbolRefExpr * create(const MCSymbol *Symbol, MCContext &Ctx)

MCSymbol - Instances of this class represent a symbol name in the MC file, and MCSymbols are created ...

StringRef getName() const

getName - Get the symbol name.

MCSymbol * getSymbol() const

Return the MCSymbol for this basic block.

const MachineFunction * getParent() const

Return the MachineFunction containing this basic block.

Ty * getInfo()

getInfo - Keep track of various per-function pieces of information for backends that would like to do...

Representation of each machine instruction.

const MachineBasicBlock * getParent() const

MachineModuleInfoCOFF - This is a MachineModuleInfoImpl implementation for COFF targets.

StubValueTy & getGVStubEntry(MCSymbol *Sym)

Ty & getObjFileInfo()

Keep track of various per-module pieces of information for backends that would like to do so.

MachineOperand class - Representation of each machine instruction operand.

const GlobalValue * getGlobal() const

MachineBasicBlock * getMBB() const

bool isSymbol() const

isSymbol - Tests if this is a MO_ExternalSymbol operand.

bool isJTI() const

isJTI - Tests if this is a MO_JumpTableIndex operand.

const BlockAddress * getBlockAddress() const

MachineInstr * getParent()

getParent - Return the instruction that this operand belongs to.

unsigned getTargetFlags() const

bool isGlobal() const

isGlobal - Tests if this is a MO_GlobalAddress operand.

MachineOperandType getType() const

getType - Returns the MachineOperandType for this operand.

const char * getSymbolName() const

Register getReg() const

getReg - Returns the register number.

MCSymbol * getMCSymbol() const

@ MO_Immediate

Immediate operand.

@ MO_ConstantPoolIndex

Address of indexed Constant in Constant Pool.

@ MO_MCSymbol

MCSymbol reference (for debug/eh info)

@ MO_GlobalAddress

Address of a global value.

@ MO_RegisterMask

Mask of preserved registers.

@ MO_BlockAddress

Address of a basic block.

@ MO_MachineBasicBlock

MachineBasicBlock reference.

@ MO_Register

Register operand.

@ MO_ExternalSymbol

Name of external global symbol.

@ MO_JumpTableIndex

Address of indexed Jump Table for switch.

int64_t getOffset() const

Return the offset from the symbol in this operand.

PointerIntPair - This class implements a pair of a pointer and small integer.

SmallString - A SmallString is just a SmallVector with methods and accessors that make it work better...

A wrapper around a string literal that serves as a proxy for constructing global tables of StringRefs...

StringRef - Represent a constant reference to a string, i.e.

Mangler & getMangler() const

TLSModel::Model getTLSModel(const GlobalValue *GV) const

Returns the TLS model which should be used for the given global variable.

const Triple & getTargetTriple() const

void getNameWithPrefix(SmallVectorImpl< char > &Name, const GlobalValue *GV, Mangler &Mang, bool MayAlwaysUsePrivate=false) const

Triple - Helper class for working with autoconf configuration names.

bool isOSBinFormatMachO() const

Tests whether the environment is MachO.

bool isOSBinFormatCOFF() const

Tests whether the OS uses the COFF binary format.

bool isOSWindows() const

Tests whether the OS is Windows.

bool isWindowsArm64EC() const

bool isOSBinFormatELF() const

Tests whether the OS uses the ELF binary format.

#define llvm_unreachable(msg)

Marks that the current location is not supposed to be reachable.

@ MO_DLLIMPORT

MO_DLLIMPORT - On a symbol operand, this represents that the reference to the symbol is for an import...

@ MO_NC

MO_NC - Indicates whether the linker is expected to check the symbol reference for overflow.

@ MO_G1

MO_G1 - A symbol operand with this flag (granule 1) represents the bits 16-31 of a 64-bit address,...

@ MO_S

MO_S - Indicates that the bits of the symbol operand represented by MO_G0 etc are signed.

@ MO_PAGEOFF

MO_PAGEOFF - A symbol operand with this flag represents the offset of that symbol within a 4K page.

@ MO_GOT

MO_GOT - This flag indicates that a symbol operand represents the address of the GOT entry for the sy...

@ MO_PREL

MO_PREL - Indicates that the bits of the symbol operand represented by MO_G0 etc are PC relative.

@ MO_G0

MO_G0 - A symbol operand with this flag (granule 0) represents the bits 0-15 of a 64-bit address,...

@ MO_ARM64EC_CALLMANGLE

MO_ARM64EC_CALLMANGLE - Operand refers to the Arm64EC-mangled version of a symbol,...

@ MO_PAGE

MO_PAGE - A symbol operand with this flag represents the pc-relative offset of the 4K page containing...

@ MO_HI12

MO_HI12 - This flag indicates that a symbol operand represents the bits 13-24 of a 64-bit address,...

@ MO_TLS

MO_TLS - Indicates that the operand being accessed is some kind of thread-local symbol.

@ MO_G2

MO_G2 - A symbol operand with this flag (granule 2) represents the bits 32-47 of a 64-bit address,...

@ MO_G3

MO_G3 - A symbol operand with this flag (granule 3) represents the high 16-bits of a 64-bit address,...

@ MO_COFFSTUB

MO_COFFSTUB - On a symbol operand "FOO", this indicates that the reference is actually to the "....

This is an optimization pass for GlobalISel generic memory operations.

std::optional< std::string > getArm64ECMangledFunctionName(StringRef Name)

Returns the ARM64EC mangled function name unless the input is already mangled.

bool is_contained(R &&Range, const E &Element)

Returns true if Element is found in Range.

@ MCSA_Global

.type _foo, @gnu_unique_object

@ MCSA_WeakAntiDep

.weak_anti_dep (COFF)