LLVM 19.0.0git
Public Types | Public Member Functions | Static Public Member Functions | Protected Member Functions | List of all members
llvm::AArch64MCExpr Class Reference

#include "Target/AArch64/MCTargetDesc/AArch64MCExpr.h"

Inheritance diagram for llvm::AArch64MCExpr:
Inheritance graph
[legend]

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
 
MCFragmentfindAssociatedFragment () const override
 
bool evaluateAsRelocatableImpl (MCValue &Res, const MCAsmLayout *Layout, const MCFixup *Fixup) const override
 
void fixELFSymbolsInTLSFixups (MCAssembler &Asm) const override
 
Accessors
VariantKind getKind () const
 Get the kind of this expression.
 
const MCExprgetSubExpr () 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 MCAsmLayout *Layout, const MCFixup *Fixup) const =0
 
virtual bool isEqualTo (const MCExpr *x) const
 
virtual bool inlineAssignedExpr () const
 
virtual void visitUsedExpr (MCStreamer &Streamer) const =0
 
virtual MCFragmentfindAssociatedFragment () const =0
 
virtual void fixELFSymbolsInTLSFixups (MCAssembler &) const =0
 
- Public Member Functions inherited from llvm::MCExpr
 MCExpr (const MCExpr &)=delete
 
MCExproperator= (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 MCAsmLayout &Layout, 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 evaluateAsAbsolute (int64_t &Res, const MCAsmLayout &Layout) const
 
bool evaluateKnownAbsolute (int64_t &Res, const MCAsmLayout &Layout) const
 
bool evaluateAsRelocatable (MCValue &Res, const MCAsmLayout *Layout, const MCFixup *Fixup) const
 Try to evaluate the expression to a relocatable value, i.e.
 
bool evaluateAsValue (MCValue &Res, const MCAsmLayout &Layout) const
 Try to evaluate the expression to the form (a - b + constant) where neither a nor b are variables.
 
MCFragmentfindAssociatedFragment () 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 AArch64MCExprcreate (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 MCAsmLayout *Layout, const MCFixup *Fixup, const SectionAddrMap *Addrs, bool InSet) const
 
unsigned getSubclassData () const
 

Detailed Description

Definition at line 24 of file AArch64MCExpr.h.

Member Enumeration Documentation

◆ VariantKind

Enumerator
VK_ABS 
VK_SABS 
VK_PREL 
VK_GOT 
VK_DTPREL 
VK_GOTTPREL 
VK_TPREL 
VK_TLSDESC 
VK_SECREL 
VK_AUTH 
VK_AUTHADDR 
VK_SymLocBits 
VK_PAGE 
VK_PAGEOFF 
VK_HI12 
VK_G0 
VK_G1 
VK_G2 
VK_G3 
VK_LO15 
VK_AddressFragBits 
VK_NC 
VK_CALL 
VK_ABS_PAGE 
VK_ABS_PAGE_NC 
VK_ABS_G3 
VK_ABS_G2 
VK_ABS_G2_S 
VK_ABS_G2_NC 
VK_ABS_G1 
VK_ABS_G1_S 
VK_ABS_G1_NC 
VK_ABS_G0 
VK_ABS_G0_S 
VK_ABS_G0_NC 
VK_LO12 
VK_PREL_G3 
VK_PREL_G2 
VK_PREL_G2_NC 
VK_PREL_G1 
VK_PREL_G1_NC 
VK_PREL_G0 
VK_PREL_G0_NC 
VK_GOT_LO12 
VK_GOT_PAGE 
VK_GOT_PAGE_LO15 
VK_DTPREL_G2 
VK_DTPREL_G1 
VK_DTPREL_G1_NC 
VK_DTPREL_G0 
VK_DTPREL_G0_NC 
VK_DTPREL_HI12 
VK_DTPREL_LO12 
VK_DTPREL_LO12_NC 
VK_GOTTPREL_PAGE 
VK_GOTTPREL_LO12_NC 
VK_GOTTPREL_G1 
VK_GOTTPREL_G0_NC 
VK_TPREL_G2 
VK_TPREL_G1 
VK_TPREL_G1_NC 
VK_TPREL_G0 
VK_TPREL_G0_NC 
VK_TPREL_HI12 
VK_TPREL_LO12 
VK_TPREL_LO12_NC 
VK_TLSDESC_LO12 
VK_TLSDESC_PAGE 
VK_SECREL_LO12 
VK_SECREL_HI12 
VK_INVALID 

Definition at line 26 of file AArch64MCExpr.h.

Constructor & Destructor Documentation

◆ AArch64MCExpr()

llvm::AArch64MCExpr::AArch64MCExpr ( const MCExpr Expr,
VariantKind  Kind 
)
inlineexplicitprotected

Definition at line 124 of file AArch64MCExpr.h.

Member Function Documentation

◆ classof()

static bool llvm::AArch64MCExpr::classof ( const MCExpr E)
inlinestatic

Definition at line 175 of file AArch64MCExpr.h.

References E, and llvm::MCExpr::Target.

◆ create()

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

◆ evaluateAsRelocatableImpl()

bool AArch64MCExpr::evaluateAsRelocatableImpl ( MCValue Res,
const MCAsmLayout Layout,
const MCFixup Fixup 
) const
overridevirtual

◆ findAssociatedFragment()

MCFragment * AArch64MCExpr::findAssociatedFragment ( ) const
overridevirtual

Implements llvm::MCTargetExpr.

Reimplemented in llvm::AArch64AuthMCExpr.

Definition at line 99 of file AArch64MCExpr.cpp.

References llvm_unreachable.

◆ fixELFSymbolsInTLSFixups()

void AArch64MCExpr::fixELFSymbolsInTLSFixups ( MCAssembler Asm) const
overridevirtual

◆ getAddressFrag()

static VariantKind llvm::AArch64MCExpr::getAddressFrag ( VariantKind  Kind)
inlinestatic

Definition at line 152 of file AArch64MCExpr.h.

References VK_AddressFragBits.

Referenced by adjustFixupValue().

◆ getKind()

VariantKind llvm::AArch64MCExpr::getKind ( ) const
inline

◆ getSubExpr()

const MCExpr * llvm::AArch64MCExpr::getSubExpr ( ) const
inline

◆ getSymbolLoc()

static VariantKind llvm::AArch64MCExpr::getSymbolLoc ( VariantKind  Kind)
inlinestatic

Definition at line 148 of file AArch64MCExpr.h.

References VK_SymLocBits.

Referenced by adjustFixupValue(), and fixELFSymbolsInTLSFixups().

◆ getVariantKindName()

StringRef AArch64MCExpr::getVariantKindName ( ) const

◆ isNotChecked()

static bool llvm::AArch64MCExpr::isNotChecked ( VariantKind  Kind)
inlinestatic

Definition at line 156 of file AArch64MCExpr.h.

References VK_NC.

◆ printImpl()

void AArch64MCExpr::printImpl ( raw_ostream OS,
const MCAsmInfo MAI 
) const
overridevirtual

Implements llvm::MCTargetExpr.

Reimplemented in llvm::AArch64AuthMCExpr.

Definition at line 90 of file AArch64MCExpr.cpp.

References getVariantKindName(), OS, and llvm::MCExpr::print().

◆ visitUsedExpr()

void AArch64MCExpr::visitUsedExpr ( MCStreamer Streamer) const
overridevirtual

Implements llvm::MCTargetExpr.

Reimplemented in llvm::AArch64AuthMCExpr.

Definition at line 95 of file AArch64MCExpr.cpp.

References getSubExpr(), and llvm::MCStreamer::visitUsedExpr().


The documentation for this class was generated from the following files: