LLVM 20.0.0git
Namespaces | Macros | Functions
MCExpr.cpp File Reference
#include "llvm/MC/MCExpr.h"
#include "llvm/ADT/Statistic.h"
#include "llvm/ADT/StringSwitch.h"
#include "llvm/Config/llvm-config.h"
#include "llvm/MC/MCAsmBackend.h"
#include "llvm/MC/MCAsmInfo.h"
#include "llvm/MC/MCAssembler.h"
#include "llvm/MC/MCContext.h"
#include "llvm/MC/MCObjectWriter.h"
#include "llvm/MC/MCSymbol.h"
#include "llvm/MC/MCValue.h"
#include "llvm/Support/Casting.h"
#include "llvm/Support/Compiler.h"
#include "llvm/Support/Debug.h"
#include "llvm/Support/ErrorHandling.h"
#include "llvm/Support/raw_ostream.h"
#include <cassert>
#include <cstdint>

Go to the source code of this file.

Namespaces

namespace  stats
 

Macros

#define DEBUG_TYPE   "mcexpr"
 

Functions

static void AttemptToFoldSymbolOffsetDifference (const MCAssembler *Asm, const SectionAddrMap *Addrs, bool InSet, const MCSymbolRefExpr *&A, const MCSymbolRefExpr *&B, int64_t &Addend)
 Helper method for.
 
static bool evaluateSymbolicAdd (const MCAssembler *Asm, const SectionAddrMap *Addrs, bool InSet, const MCValue &LHS, const MCValue &RHS, MCValue &Res)
 Evaluate the result of an add between (conceptually) two MCValues.
 
static bool canExpand (const MCSymbol &Sym, bool InSet)
 

Macro Definition Documentation

◆ DEBUG_TYPE

#define DEBUG_TYPE   "mcexpr"

Definition at line 30 of file MCExpr.cpp.

Function Documentation

◆ AttemptToFoldSymbolOffsetDifference()

static void AttemptToFoldSymbolOffsetDifference ( const MCAssembler Asm,
const SectionAddrMap Addrs,
bool  InSet,
const MCSymbolRefExpr *&  A,
const MCSymbolRefExpr *&  B,
int64_t &  Addend 
)
static

◆ canExpand()

static bool canExpand ( const MCSymbol Sym,
bool  InSet 
)
static

Definition at line 828 of file MCExpr.cpp.

References Sym, and llvm::MCSymbolRefExpr::VK_WEAKREF.

Referenced by llvm::MCExpr::evaluateAsRelocatableImpl().

◆ evaluateSymbolicAdd()

static bool evaluateSymbolicAdd ( const MCAssembler Asm,
const SectionAddrMap Addrs,
bool  InSet,
const MCValue LHS,
const MCValue RHS,
MCValue Res 
)
static

Evaluate the result of an add between (conceptually) two MCValues.

This routine conceptually attempts to construct an MCValue: Result = (Result_A - Result_B + Result_Cst) from two MCValue's LHS and RHS where Result = LHS + RHS and Result = (LHS_A - LHS_B + LHS_Cst) + (RHS_A - RHS_B + RHS_Cst).

This routine attempts to aggressively fold the operands such that the result is representable in an MCValue, but may not always succeed.

Returns
True on success, false if the result is not representable in an MCValue. NOTE: It is really important to have both the Asm and Layout arguments. They might look redundant, but this function can be used before layout is done (see the object streamer for example) and having the Asm argument lets us avoid relaxations early.

Definition at line 764 of file MCExpr.cpp.

References A, AttemptToFoldSymbolOffsetDifference(), B, llvm::MCValue::get(), LHS, and RHS.

Referenced by llvm::MCExpr::evaluateAsRelocatableImpl().