LLVM 20.0.0git
Public Types | Public Member Functions | Protected Member Functions | List of all members
llvm::MCExpr Class Reference

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

#include "llvm/MC/MCExpr.h"

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

Public Types

enum  ExprKind : uint8_t {
  Binary , Constant , SymbolRef , Unary ,
  Target
}
 

Public Member Functions

 MCExpr (const MCExpr &)=delete
 
MCExproperator= (const MCExpr &)=delete
 
Accessors
ExprKind getKind () const
 
SMLoc getLoc () const
 
Utility Methods
void print (raw_ostream &OS, const MCAsmInfo *MAI, bool InParens=false) const
 
void dump () const
 
bool isSymbolUsedInExpression (const MCSymbol *Sym) const
 Returns whether the given symbol is used anywhere in the expression or subexpressions.
 
Expression Evaluation
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.
 
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.
 

Protected Member Functions

 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
 

Detailed Description

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

Definition at line 34 of file MCExpr.h.

Member Enumeration Documentation

◆ ExprKind

Enumerator
Binary 

Binary expressions.

Constant 

Constant expressions.

SymbolRef 

References to labels and assigned expressions.

Unary 

Unary expressions.

Target 

Target specific expression.

Definition at line 36 of file MCExpr.h.

Constructor & Destructor Documentation

◆ MCExpr() [1/2]

llvm::MCExpr::MCExpr ( ExprKind  Kind,
SMLoc  Loc,
unsigned  SubclassData = 0 
)
inlineexplicitprotected

Definition at line 59 of file MCExpr.h.

References assert().

◆ MCExpr() [2/2]

llvm::MCExpr::MCExpr ( const MCExpr )
delete

Member Function Documentation

◆ dump()

LLVM_DUMP_METHOD void MCExpr::dump ( ) const

Definition at line 174 of file MCExpr.cpp.

References llvm::dbgs().

◆ evaluateAsAbsolute() [1/4]

bool MCExpr::evaluateAsAbsolute ( int64_t &  Res) const

Definition at line 577 of file MCExpr.cpp.

◆ evaluateAsAbsolute() [2/4]

bool MCExpr::evaluateAsAbsolute ( int64_t &  Res,
const MCAssembler Asm 
) const

Definition at line 588 of file MCExpr.cpp.

◆ evaluateAsAbsolute() [3/4]

bool MCExpr::evaluateAsAbsolute ( int64_t &  Res,
const MCAssembler Asm,
const SectionAddrMap Addrs 
) const

Try to evaluate the expression to an absolute value.

Parameters
Res- The absolute value, if evaluation succeeds.
Returns
- True on success.

Definition at line 581 of file MCExpr.cpp.

Referenced by targetOpKnownBitsMapHelper().

◆ evaluateAsAbsolute() [4/4]

bool MCExpr::evaluateAsAbsolute ( int64_t &  Res,
const MCAssembler Asm 
) const

Definition at line 592 of file MCExpr.cpp.

◆ evaluateAsRelocatable()

bool MCExpr::evaluateAsRelocatable ( MCValue Res,
const MCAssembler Asm,
const MCFixup Fixup 
) const

◆ evaluateAsRelocatableImpl()

bool MCExpr::evaluateAsRelocatableImpl ( MCValue Res,
const MCAssembler Asm,
const MCFixup Fixup,
const SectionAddrMap Addrs,
bool  InSet 
) const
protected

◆ evaluateAsValue()

bool MCExpr::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.

This is a more aggressive variant of evaluateAsRelocatable. The intended use is for when relocations are not available, like the .size directive.

Definition at line 824 of file MCExpr.cpp.

References evaluateAsRelocatableImpl().

Referenced by llvm::MCAssembler::computeFragmentSize(), llvm::MCAssembler::getBaseSymbol(), and getSymbolOffsetImpl().

◆ evaluateKnownAbsolute()

bool MCExpr::evaluateKnownAbsolute ( int64_t &  Res,
const MCAssembler Asm 
) const

Aggressive variant of evaluateAsRelocatable when relocations are unavailable (e.g.

.fill). Expects callers to handle errors when true is returned.

Definition at line 596 of file MCExpr.cpp.

Referenced by computeLabelDiff(), llvm::LoongArchAsmBackend::relaxDwarfCFA(), llvm::RISCVAsmBackend::relaxDwarfCFA(), llvm::LoongArchAsmBackend::relaxDwarfLineAddr(), llvm::RISCVAsmBackend::relaxDwarfLineAddr(), llvm::LoongArchAsmBackend::relaxLEB128(), and llvm::RISCVAsmBackend::relaxLEB128().

◆ findAssociatedFragment()

MCFragment * MCExpr::findAssociatedFragment ( ) const

◆ getKind()

ExprKind llvm::MCExpr::getKind ( ) const
inline

◆ getLoc()

SMLoc llvm::MCExpr::getLoc ( ) const
inline

◆ getSubclassData()

unsigned llvm::MCExpr::getSubclassData ( ) const
inlineprotected

◆ isSymbolUsedInExpression()

bool MCExpr::isSymbolUsedInExpression ( const MCSymbol Sym) const

◆ operator=()

MCExpr & llvm::MCExpr::operator= ( const MCExpr )
delete

◆ print()

void MCExpr::print ( raw_ostream OS,
const MCAsmInfo MAI,
bool  InParens = false 
) const

Definition at line 40 of file MCExpr.cpp.

References llvm::MCBinaryExpr::Add, llvm::MCBinaryExpr::And, llvm::MCBinaryExpr::AShr, Binary, Constant, llvm::MCBinaryExpr::Div, llvm::MCBinaryExpr::EQ, llvm::format(), getKind(), llvm::MCSymbolRefExpr::getKind(), llvm::MCBinaryExpr::getLHS(), llvm::MCUnaryExpr::getOpcode(), llvm::MCBinaryExpr::getOpcode(), llvm::MCBinaryExpr::getRHS(), llvm::MCUnaryExpr::getSubExpr(), llvm::MCSymbolRefExpr::getSymbol(), llvm::MCSymbolRefExpr::getVariantKindName(), llvm::MCBinaryExpr::GT, llvm::MCBinaryExpr::GTE, llvm::MCBinaryExpr::LAnd, llvm_unreachable, llvm::MCUnaryExpr::LNot, llvm::MCBinaryExpr::LOr, llvm::MCBinaryExpr::LShr, llvm::MCBinaryExpr::LT, llvm::MCBinaryExpr::LTE, llvm::MCUnaryExpr::Minus, llvm::MCBinaryExpr::Mod, llvm::MCBinaryExpr::Mul, llvm::MCBinaryExpr::NE, llvm::MCUnaryExpr::Not, llvm::MCBinaryExpr::Or, llvm::MCBinaryExpr::OrNot, OS, llvm::MCUnaryExpr::Plus, print(), llvm::MCBinaryExpr::Shl, llvm::MCBinaryExpr::Sub, Sym, SymbolRef, Target, Unary, llvm::MCAsmInfo::useParensForDollarSignNames(), llvm::MCAsmInfo::useParensForSymbolVariant(), llvm::Twine::utohexstr(), llvm::MCSymbolRefExpr::VK_None, and llvm::MCBinaryExpr::Xor.

Referenced by print(), llvm::AArch64InstPrinter::printAddSubImm(), llvm::ARMInstPrinter::printAdrLabelOperand(), llvm::AMDGPU::printAMDGPUMCExpr(), llvm::AArch64InstPrinter::printAMIndexedWB(), llvm::CSKYInstPrinter::printConstpool(), llvm::CSKYInstPrinter::printDataSymbol(), llvm::AArch64MCExpr::printImpl(), llvm::AArch64AuthMCExpr::printImpl(), llvm::ARMMCExpr::printImpl(), llvm::AVRMCExpr::printImpl(), llvm::CSKYMCExpr::printImpl(), llvm::HexagonMCExpr::printImpl(), llvm::LanaiMCExpr::printImpl(), llvm::LoongArchMCExpr::printImpl(), llvm::MipsMCExpr::printImpl(), llvm::NVPTXGenericMCSymbolRefExpr::printImpl(), llvm::PPCMCExpr::printImpl(), llvm::RISCVMCExpr::printImpl(), llvm::SparcMCExpr::printImpl(), llvm::SystemZMCExpr::printImpl(), llvm::VEMCExpr::printImpl(), llvm::XtensaMCExpr::printImpl(), llvm::X86IntelInstPrinter::printMemOffset(), llvm::X86ATTInstPrinter::printMemOffset(), printMemoryImmediateOffset(), llvm::X86IntelInstPrinter::printMemReference(), llvm::X86ATTInstPrinter::printMemReference(), llvm::SparcInstPrinter::printOperand(), llvm::VEInstPrinter::printOperand(), llvm::ARMInstPrinter::printOperand(), llvm::CSKYInstPrinter::printOperand(), llvm::RISCVInstPrinter::printOperand(), printOperand(), llvm::SystemZInstPrinterCommon::printOperand(), llvm::SystemZInstPrinterCommon::printPCRelOperand(), llvm::ARMInstPrinter::printThumbLdrLabelOperand(), llvm::PPCInstPrinter::printTLSCall(), and llvm::AArch64InstPrinter::printUImm12Offset().


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