LLVM  10.0.0svn
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
 
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

Referenced by match(), and matchLSNode().

◆ 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 BaseIndexOffset::contains ( const SelectionDAG DAG,
int64_t  BitSize,
const BaseIndexOffset Other,
int64_t  OtherBitSize,
int64_t &  BitOffset 
) const

◆ contains() [2/2]

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

Definition at line 72 of file SelectionDAGAddressAnalysis.h.

References computeAliasing(), contains(), dump(), match(), N, and print().

◆ dump()

LLVM_DUMP_METHOD void BaseIndexOffset::dump ( ) const

Definition at line 284 of file SelectionDAGAddressAnalysis.cpp.

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

Referenced by contains(), and ShrinkLoadReplaceStoreWithStore().

◆ equalBaseIndex() [1/2]

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

◆ equalBaseIndex() [2/2]

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

Definition at line 60 of file SelectionDAGAddressAnalysis.h.

References contains(), and equalBaseIndex().

◆ getBase() [1/2]

SDValue llvm::BaseIndexOffset::getBase ( )
inline

◆ getBase() [2/2]

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

Definition at line 49 of file SelectionDAGAddressAnalysis.h.

◆ getIndex() [1/2]

SDValue llvm::BaseIndexOffset::getIndex ( )
inline

Definition at line 50 of file SelectionDAGAddressAnalysis.h.

Referenced by computeAliasing().

◆ getIndex() [2/2]

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

Definition at line 51 of file SelectionDAGAddressAnalysis.h.

◆ hasValidOffset()

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

Definition at line 52 of file SelectionDAGAddressAnalysis.h.

References equalBaseIndex(), llvm::Optional< T >::hasValue(), and Other.

Referenced by equalBaseIndex().

◆ match()

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

◆ print()

void BaseIndexOffset::print ( raw_ostream OS) const

Definition at line 288 of file SelectionDAGAddressAnalysis.cpp.

References llvm::SDNode::print().

Referenced by contains(), and dump().


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