LLVM  14.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
 
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 Optional< int64_t > NumBytes0, const SDNode *Op1, const Optional< int64_t > NumBytes1, const SelectionDAG &DAG, bool &IsAlias)
 
static BaseIndexOffset match (const SDNode *N, const SelectionDAG &DAG)
 Parses tree in N for base, index, offset addresses. More...
 

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 32 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 41 of file SelectionDAGAddressAnalysis.h.

◆ BaseIndexOffset() [3/3]

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

Definition at line 43 of file SelectionDAGAddressAnalysis.h.

Member Function Documentation

◆ computeAliasing()

bool BaseIndexOffset::computeAliasing ( const SDNode Op0,
const Optional< int64_t >  NumBytes0,
const SDNode Op1,
const Optional< int64_t >  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 73 of file SelectionDAGAddressAnalysis.h.

References contains(), and 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 311 of file SelectionDAGAddressAnalysis.cpp.

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

◆ equalBaseIndex() [1/2]

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

Definition at line 61 of file SelectionDAGAddressAnalysis.h.

References equalBaseIndex(), and 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 48 of file SelectionDAGAddressAnalysis.h.

References llvm::sampleprof::Base.

◆ getBase() [2/2]

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

Definition at line 49 of file SelectionDAGAddressAnalysis.h.

References llvm::sampleprof::Base.

◆ getIndex() [1/2]

SDValue llvm::BaseIndexOffset::getIndex ( )
inline

Definition at line 50 of file SelectionDAGAddressAnalysis.h.

References Index.

◆ getIndex() [2/2]

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

Definition at line 51 of file SelectionDAGAddressAnalysis.h.

References Index.

◆ 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 296 of file SelectionDAGAddressAnalysis.cpp.

References matchLSNode(), and N.

◆ print()

void BaseIndexOffset::print ( raw_ostream OS) const

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