LLVM 20.0.0git
|
#include "Target/AArch64/MCTargetDesc/AArch64MCExpr.h"
Public Types | |
enum | VariantKind { VK_ABS = 0x001 , VK_SABS = 0x002 , VK_PREL = 0x003 , VK_GOT = 0x004 , VK_DTPREL = 0x005 , VK_GOTTPREL = 0x006 , VK_TPREL = 0x007 , VK_TLSDESC = 0x008 , VK_SECREL = 0x009 , VK_AUTH = 0x00a , VK_AUTHADDR = 0x00b , VK_SymLocBits = 0x00f , VK_PAGE = 0x010 , VK_PAGEOFF = 0x020 , VK_HI12 = 0x030 , VK_G0 = 0x040 , VK_G1 = 0x050 , VK_G2 = 0x060 , VK_G3 = 0x070 , VK_LO15 = 0x080 , VK_AddressFragBits = 0x0f0 , VK_NC = 0x100 , VK_CALL = VK_ABS , VK_ABS_PAGE = VK_ABS | VK_PAGE , VK_ABS_PAGE_NC = VK_ABS | VK_PAGE | VK_NC , VK_ABS_G3 = VK_ABS | VK_G3 , VK_ABS_G2 = VK_ABS | VK_G2 , VK_ABS_G2_S = VK_SABS | VK_G2 , VK_ABS_G2_NC = VK_ABS | VK_G2 | VK_NC , VK_ABS_G1 = VK_ABS | VK_G1 , VK_ABS_G1_S = VK_SABS | VK_G1 , VK_ABS_G1_NC = VK_ABS | VK_G1 | VK_NC , VK_ABS_G0 = VK_ABS | VK_G0 , VK_ABS_G0_S = VK_SABS | VK_G0 , VK_ABS_G0_NC = VK_ABS | VK_G0 | VK_NC , VK_LO12 = VK_ABS | VK_PAGEOFF | VK_NC , VK_PREL_G3 = VK_PREL | VK_G3 , VK_PREL_G2 = VK_PREL | VK_G2 , VK_PREL_G2_NC = VK_PREL | VK_G2 | VK_NC , VK_PREL_G1 = VK_PREL | VK_G1 , VK_PREL_G1_NC = VK_PREL | VK_G1 | VK_NC , VK_PREL_G0 = VK_PREL | VK_G0 , VK_PREL_G0_NC = VK_PREL | VK_G0 | VK_NC , VK_GOT_LO12 = VK_GOT | VK_PAGEOFF | VK_NC , VK_GOT_PAGE = VK_GOT | VK_PAGE , VK_GOT_PAGE_LO15 = VK_GOT | VK_LO15 | VK_NC , VK_DTPREL_G2 = VK_DTPREL | VK_G2 , VK_DTPREL_G1 = VK_DTPREL | VK_G1 , VK_DTPREL_G1_NC = VK_DTPREL | VK_G1 | VK_NC , VK_DTPREL_G0 = VK_DTPREL | VK_G0 , VK_DTPREL_G0_NC = VK_DTPREL | VK_G0 | VK_NC , VK_DTPREL_HI12 = VK_DTPREL | VK_HI12 , VK_DTPREL_LO12 = VK_DTPREL | VK_PAGEOFF , VK_DTPREL_LO12_NC = VK_DTPREL | VK_PAGEOFF | VK_NC , VK_GOTTPREL_PAGE = VK_GOTTPREL | VK_PAGE , VK_GOTTPREL_LO12_NC = VK_GOTTPREL | VK_PAGEOFF | VK_NC , VK_GOTTPREL_G1 = VK_GOTTPREL | VK_G1 , VK_GOTTPREL_G0_NC = VK_GOTTPREL | VK_G0 | VK_NC , VK_TPREL_G2 = VK_TPREL | VK_G2 , VK_TPREL_G1 = VK_TPREL | VK_G1 , VK_TPREL_G1_NC = VK_TPREL | VK_G1 | VK_NC , VK_TPREL_G0 = VK_TPREL | VK_G0 , VK_TPREL_G0_NC = VK_TPREL | VK_G0 | VK_NC , VK_TPREL_HI12 = VK_TPREL | VK_HI12 , VK_TPREL_LO12 = VK_TPREL | VK_PAGEOFF , VK_TPREL_LO12_NC = VK_TPREL | VK_PAGEOFF | VK_NC , VK_TLSDESC_LO12 = VK_TLSDESC | VK_PAGEOFF , VK_TLSDESC_PAGE = VK_TLSDESC | VK_PAGE , VK_SECREL_LO12 = VK_SECREL | VK_PAGEOFF , VK_SECREL_HI12 = VK_SECREL | VK_HI12 , VK_INVALID = 0xfff } |
Public Types inherited from llvm::MCExpr | |
enum | ExprKind : uint8_t { Binary , Constant , SymbolRef , Unary , Target } |
Public Member Functions | |
StringRef | getVariantKindName () const |
Convert the variant kind into an ELF-appropriate modifier (e.g. | |
void | printImpl (raw_ostream &OS, const MCAsmInfo *MAI) const override |
void | visitUsedExpr (MCStreamer &Streamer) const override |
MCFragment * | findAssociatedFragment () const override |
bool | evaluateAsRelocatableImpl (MCValue &Res, const MCAssembler *Asm, const MCFixup *Fixup) const override |
void | fixELFSymbolsInTLSFixups (MCAssembler &Asm) const override |
Accessors | |
VariantKind | getKind () const |
Get the kind of this expression. | |
const MCExpr * | getSubExpr () const |
Get the expression this modifier applies to. | |
Public Member Functions inherited from llvm::MCTargetExpr | |
virtual void | printImpl (raw_ostream &OS, const MCAsmInfo *MAI) const =0 |
virtual bool | evaluateAsRelocatableImpl (MCValue &Res, const MCAssembler *Asm, const MCFixup *Fixup) const =0 |
virtual bool | isEqualTo (const MCExpr *x) const |
virtual bool | inlineAssignedExpr () const |
virtual void | visitUsedExpr (MCStreamer &Streamer) const =0 |
virtual MCFragment * | findAssociatedFragment () const =0 |
virtual void | fixELFSymbolsInTLSFixups (MCAssembler &) const =0 |
Public Member Functions inherited from llvm::MCExpr | |
MCExpr (const MCExpr &)=delete | |
MCExpr & | operator= (const MCExpr &)=delete |
ExprKind | getKind () const |
SMLoc | getLoc () const |
void | print (raw_ostream &OS, const MCAsmInfo *MAI, bool InParens=false) const |
void | dump () const |
bool | evaluateAsAbsolute (int64_t &Res, const MCAssembler &Asm, const SectionAddrMap &Addrs) const |
Try to evaluate the expression to an absolute value. | |
bool | evaluateAsAbsolute (int64_t &Res) const |
bool | evaluateAsAbsolute (int64_t &Res, const MCAssembler &Asm) const |
bool | evaluateAsAbsolute (int64_t &Res, const MCAssembler *Asm) const |
bool | evaluateKnownAbsolute (int64_t &Res, const MCAssembler &Asm) const |
Aggressive variant of evaluateAsRelocatable when relocations are unavailable (e.g. | |
bool | evaluateAsRelocatable (MCValue &Res, const MCAssembler *Asm, const MCFixup *Fixup) const |
Try to evaluate the expression to a relocatable value, i.e. | |
bool | evaluateAsValue (MCValue &Res, const MCAssembler &Asm) const |
Try to evaluate the expression to the form (a - b + constant) where neither a nor b are variables. | |
MCFragment * | findAssociatedFragment () const |
Find the "associated section" for this expression, which is currently defined as the absolute section for constants, or otherwise the section associated with the first defined symbol in the expression. | |
Static Public Member Functions | |
static bool | classof (const MCExpr *E) |
Construction | |
static const AArch64MCExpr * | create (const MCExpr *Expr, VariantKind Kind, MCContext &Ctx) |
VariantKind information extractors. | |
static VariantKind | getSymbolLoc (VariantKind Kind) |
static VariantKind | getAddressFrag (VariantKind Kind) |
static bool | isNotChecked (VariantKind Kind) |
Static Public Member Functions inherited from llvm::MCTargetExpr | |
static bool | classof (const MCExpr *E) |
Protected Member Functions | |
AArch64MCExpr (const MCExpr *Expr, VariantKind Kind) | |
Protected Member Functions inherited from llvm::MCTargetExpr | |
MCTargetExpr () | |
virtual | ~MCTargetExpr ()=default |
Protected Member Functions inherited from llvm::MCExpr | |
MCExpr (ExprKind Kind, SMLoc Loc, unsigned SubclassData=0) | |
bool | evaluateAsRelocatableImpl (MCValue &Res, const MCAssembler *Asm, const MCFixup *Fixup, const SectionAddrMap *Addrs, bool InSet) const |
unsigned | getSubclassData () const |
Definition at line 24 of file AArch64MCExpr.h.
Definition at line 26 of file AArch64MCExpr.h.
|
inlineexplicitprotected |
Definition at line 124 of file AArch64MCExpr.h.
Definition at line 175 of file AArch64MCExpr.h.
References E, and llvm::MCExpr::Target.
|
static |
Definition at line 27 of file AArch64MCExpr.cpp.
Referenced by llvm::AArch64MCInstLower::lowerSymbolOperandCOFF(), and llvm::AArch64MCInstLower::lowerSymbolOperandELF().
|
overridevirtual |
Implements llvm::MCTargetExpr.
Reimplemented in llvm::AArch64AuthMCExpr.
Definition at line 103 of file AArch64MCExpr.cpp.
References llvm::MCExpr::evaluateAsRelocatable(), Fixup, llvm::MCValue::get(), llvm::MCValue::getConstant(), getKind(), getSubExpr(), llvm::MCValue::getSymA(), and llvm::MCValue::getSymB().
|
overridevirtual |
Implements llvm::MCTargetExpr.
Reimplemented in llvm::AArch64AuthMCExpr.
Definition at line 99 of file AArch64MCExpr.cpp.
References llvm_unreachable.
|
overridevirtual |
Implements llvm::MCTargetExpr.
Definition at line 144 of file AArch64MCExpr.cpp.
References fixELFSymbolsInTLSFixupsImpl(), getSubExpr(), getSymbolLoc(), VK_DTPREL, VK_GOTTPREL, VK_TLSDESC, and VK_TPREL.
|
inlinestatic |
Definition at line 152 of file AArch64MCExpr.h.
References VK_AddressFragBits.
Referenced by adjustFixupValue().
|
inline |
Get the kind of this expression.
Definition at line 139 of file AArch64MCExpr.h.
Referenced by evaluateAsRelocatableImpl(), llvm::AArch64AuthMCExpr::evaluateAsRelocatableImpl(), getVariantKindName(), and llvm::AArch64AuthMCExpr::hasAddressDiversity().
Get the expression this modifier applies to.
Definition at line 142 of file AArch64MCExpr.h.
Referenced by evaluateAsRelocatableImpl(), llvm::AArch64AuthMCExpr::evaluateAsRelocatableImpl(), fixELFSymbolsInTLSFixups(), llvm::AArch64AuthMCExpr::printImpl(), visitUsedExpr(), and llvm::AArch64AuthMCExpr::visitUsedExpr().
|
inlinestatic |
Definition at line 148 of file AArch64MCExpr.h.
References VK_SymLocBits.
Referenced by adjustFixupValue(), and fixELFSymbolsInTLSFixups().
StringRef AArch64MCExpr::getVariantKindName | ( | ) | const |
Convert the variant kind into an ELF-appropriate modifier (e.g.
":got:", ":lo12:").
Definition at line 32 of file AArch64MCExpr.cpp.
References getKind(), llvm_unreachable, VK_ABS_G0, VK_ABS_G0_NC, VK_ABS_G0_S, VK_ABS_G1, VK_ABS_G1_NC, VK_ABS_G1_S, VK_ABS_G2, VK_ABS_G2_NC, VK_ABS_G2_S, VK_ABS_G3, VK_ABS_PAGE, VK_ABS_PAGE_NC, VK_CALL, VK_DTPREL_G0, VK_DTPREL_G0_NC, VK_DTPREL_G1, VK_DTPREL_G1_NC, VK_DTPREL_G2, VK_DTPREL_HI12, VK_DTPREL_LO12, VK_DTPREL_LO12_NC, VK_GOT, VK_GOT_LO12, VK_GOT_PAGE, VK_GOT_PAGE_LO15, VK_GOTTPREL, VK_GOTTPREL_G0_NC, VK_GOTTPREL_G1, VK_GOTTPREL_LO12_NC, VK_GOTTPREL_PAGE, VK_LO12, VK_PREL_G0, VK_PREL_G0_NC, VK_PREL_G1, VK_PREL_G1_NC, VK_PREL_G2, VK_PREL_G2_NC, VK_PREL_G3, VK_SECREL_HI12, VK_SECREL_LO12, VK_TLSDESC, VK_TLSDESC_LO12, VK_TLSDESC_PAGE, VK_TPREL_G0, VK_TPREL_G0_NC, VK_TPREL_G1, VK_TPREL_G1_NC, VK_TPREL_G2, VK_TPREL_HI12, VK_TPREL_LO12, and VK_TPREL_LO12_NC.
Referenced by printImpl().
|
inlinestatic |
Definition at line 156 of file AArch64MCExpr.h.
References VK_NC.
|
overridevirtual |
Implements llvm::MCTargetExpr.
Reimplemented in llvm::AArch64AuthMCExpr.
Definition at line 90 of file AArch64MCExpr.cpp.
References getVariantKindName(), OS, and llvm::MCExpr::print().
|
overridevirtual |
Implements llvm::MCTargetExpr.
Reimplemented in llvm::AArch64AuthMCExpr.
Definition at line 95 of file AArch64MCExpr.cpp.
References getSubExpr(), and llvm::MCStreamer::visitUsedExpr().