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

Helper struct to parse and store a memory address as base + index + offset. More...

#include "llvm/CodeGen/SelectionDAGAddressAnalysis.h"

Public Member Functions

 BaseIndexOffset ()=default
 
 BaseIndexOffset (SDValue Base, SDValue Index, bool IsIndexSignExt)
 
 BaseIndexOffset (SDValue Base, SDValue Index, int64_t Offset, bool IsIndexSignExt)
 
SDValue getBase ()
 
SDValue getBase () const
 
SDValue getIndex ()
 
SDValue getIndex () const
 
void addToOffset (int64_t VectorOff)
 
bool hasValidOffset () const
 
int64_t getOffset () const
 
bool equalBaseIndex (const BaseIndexOffset &Other, const SelectionDAG &DAG, int64_t &Off) const
 
bool equalBaseIndex (const BaseIndexOffset &Other, const SelectionDAG &DAG) const
 
bool contains (const SelectionDAG &DAG, int64_t BitSize, const BaseIndexOffset &Other, int64_t OtherBitSize, int64_t &BitOffset) const
 
bool contains (const SelectionDAG &DAG, int64_t BitSize, const BaseIndexOffset &Other, int64_t OtherBitSize) const
 
void print (raw_ostream &OS) const
 
void dump () const
 

Static Public Member Functions

static bool computeAliasing (const SDNode *Op0, const LocationSize NumBytes0, const SDNode *Op1, const LocationSize NumBytes1, const SelectionDAG &DAG, bool &IsAlias)
 
static BaseIndexOffset match (const SDNode *N, const SelectionDAG &DAG)
 Parses tree in N for base, index, offset addresses.
 

Detailed Description

Helper struct to parse and store a memory address as base + index + offset.

We ignore sign extensions when it is safe to do so. The following two expressions are not equivalent. To differentiate we need to store whether there was a sign extension involved in the index computation. (load (i64 add (i64 copyfromreg c) (i64 signextend (add (i8 load index) (i8 1)))) vs

(load (i64 add (i64 copyfromreg c) (i64 signextend (i32 add (i32 signextend (i8 load index)) (i32 1)))))

Definition at line 33 of file SelectionDAGAddressAnalysis.h.

Constructor & Destructor Documentation

◆ BaseIndexOffset() [1/3]

llvm::BaseIndexOffset::BaseIndexOffset ( )
default

◆ BaseIndexOffset() [2/3]

llvm::BaseIndexOffset::BaseIndexOffset ( SDValue  Base,
SDValue  Index,
bool  IsIndexSignExt 
)
inline

Definition at line 42 of file SelectionDAGAddressAnalysis.h.

◆ BaseIndexOffset() [3/3]

llvm::BaseIndexOffset::BaseIndexOffset ( SDValue  Base,
SDValue  Index,
int64_t  Offset,
bool  IsIndexSignExt 
)
inline

Definition at line 44 of file SelectionDAGAddressAnalysis.h.

Member Function Documentation

◆ addToOffset()

void llvm::BaseIndexOffset::addToOffset ( int64_t  VectorOff)
inline

◆ computeAliasing()

bool BaseIndexOffset::computeAliasing ( const SDNode Op0,
const LocationSize  NumBytes0,
const SDNode Op1,
const LocationSize  NumBytes1,
const SelectionDAG DAG,
bool IsAlias 
)
static

◆ contains() [1/2]

bool llvm::BaseIndexOffset::contains ( const SelectionDAG DAG,
int64_t  BitSize,
const BaseIndexOffset Other,
int64_t  OtherBitSize 
) const
inline

Definition at line 77 of file SelectionDAGAddressAnalysis.h.

References contains(), and llvm::Other.

◆ contains() [2/2]

bool BaseIndexOffset::contains ( const SelectionDAG DAG,
int64_t  BitSize,
const BaseIndexOffset Other,
int64_t  OtherBitSize,
int64_t &  BitOffset 
) const

◆ dump()

LLVM_DUMP_METHOD void BaseIndexOffset::dump ( ) const

Definition at line 316 of file SelectionDAGAddressAnalysis.cpp.

References llvm::dbgs(), and llvm::print().

◆ equalBaseIndex() [1/2]

bool llvm::BaseIndexOffset::equalBaseIndex ( const BaseIndexOffset Other,
const SelectionDAG DAG 
) const
inline

Definition at line 65 of file SelectionDAGAddressAnalysis.h.

References equalBaseIndex(), and llvm::Other.

◆ equalBaseIndex() [2/2]

bool BaseIndexOffset::equalBaseIndex ( const BaseIndexOffset Other,
const SelectionDAG DAG,
int64_t &  Off 
) const

◆ getBase() [1/2]

SDValue llvm::BaseIndexOffset::getBase ( )
inline

Definition at line 49 of file SelectionDAGAddressAnalysis.h.

References llvm::sampleprof::Base.

◆ getBase() [2/2]

SDValue llvm::BaseIndexOffset::getBase ( ) const
inline

Definition at line 50 of file SelectionDAGAddressAnalysis.h.

References llvm::sampleprof::Base.

◆ getIndex() [1/2]

SDValue llvm::BaseIndexOffset::getIndex ( )
inline

Definition at line 51 of file SelectionDAGAddressAnalysis.h.

◆ getIndex() [2/2]

SDValue llvm::BaseIndexOffset::getIndex ( ) const
inline

Definition at line 52 of file SelectionDAGAddressAnalysis.h.

◆ getOffset()

int64_t llvm::BaseIndexOffset::getOffset ( ) const
inline

◆ hasValidOffset()

bool llvm::BaseIndexOffset::hasValidOffset ( ) const
inline

◆ match()

BaseIndexOffset BaseIndexOffset::match ( const SDNode N,
const SelectionDAG DAG 
)
static

Parses tree in N for base, index, offset addresses.

Definition at line 301 of file SelectionDAGAddressAnalysis.cpp.

References matchLSNode(), and N.

Referenced by llvm::SelectionDAG::areNonVolatileConsecutiveLoads(), performCONCAT_VECTORSCombine(), and TryDistrubutionADDVecReduce().

◆ print()

void BaseIndexOffset::print ( raw_ostream OS) const

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