class BaseIndexOffset

Declaration

class BaseIndexOffset { /* full declaration omitted */ };

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)))))

Declared at: llvm/include/llvm/CodeGen/SelectionDAGAddressAnalysis.h:32

Member Variables

private llvm::SDValue Base
private llvm::SDValue Index
private Optional<int64_t> Offset
private bool IsIndexSignExt = false

Method Overview

  • public BaseIndexOffset(llvm::SDValue Base, llvm::SDValue Index, bool IsIndexSignExt)
  • public BaseIndexOffset(llvm::SDValue Base, llvm::SDValue Index, int64_t Offset, bool IsIndexSignExt)
  • public BaseIndexOffset()
  • public static bool computeAliasing(const llvm::SDNode * Op0, const Optional<int64_t> NumBytes0, const llvm::SDNode * Op1, const Optional<int64_t> NumBytes1, const llvm::SelectionDAG & DAG, bool & IsAlias)
  • public bool contains(const llvm::SelectionDAG & DAG, int64_t BitSize, const llvm::BaseIndexOffset & Other, int64_t OtherBitSize) const
  • public bool contains(const llvm::SelectionDAG & DAG, int64_t BitSize, const llvm::BaseIndexOffset & Other, int64_t OtherBitSize, int64_t & BitOffset) const
  • public void dump() const
  • public bool equalBaseIndex(const llvm::BaseIndexOffset & Other, const llvm::SelectionDAG & DAG, int64_t & Off) const
  • public bool equalBaseIndex(const llvm::BaseIndexOffset & Other, const llvm::SelectionDAG & DAG) const
  • public llvm::SDValue getBase() const
  • public llvm::SDValue getBase()
  • public llvm::SDValue getIndex() const
  • public llvm::SDValue getIndex()
  • public int64_t getOffset() const
  • public bool hasValidOffset() const
  • public static llvm::BaseIndexOffset match(const llvm::SDNode * N, const llvm::SelectionDAG & DAG)
  • public void print(llvm::raw_ostream & OS) const

Methods

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

Declared at: llvm/include/llvm/CodeGen/SelectionDAGAddressAnalysis.h:41

Parameters

llvm::SDValue Base
llvm::SDValue Index
bool IsIndexSignExt

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

Declared at: llvm/include/llvm/CodeGen/SelectionDAGAddressAnalysis.h:43

Parameters

llvm::SDValue Base
llvm::SDValue Index
int64_t Offset
bool IsIndexSignExt

BaseIndexOffset()

Declared at: llvm/include/llvm/CodeGen/SelectionDAGAddressAnalysis.h:40

static bool computeAliasing(
    const llvm::SDNode* Op0,
    const Optional<int64_t> NumBytes0,
    const llvm::SDNode* Op1,
    const Optional<int64_t> NumBytes1,
    const llvm::SelectionDAG& DAG,
    bool& IsAlias)

Declared at: llvm/include/llvm/CodeGen/SelectionDAGAddressAnalysis.h:81

Parameters

const llvm::SDNode* Op0
const Optional<int64_t> NumBytes0
const llvm::SDNode* Op1
const Optional<int64_t> NumBytes1
const llvm::SelectionDAG& DAG
bool& IsAlias

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

Declared at: llvm/include/llvm/CodeGen/SelectionDAGAddressAnalysis.h:73

Parameters

const llvm::SelectionDAG& DAG
int64_t BitSize
const llvm::BaseIndexOffset& Other
int64_t OtherBitSize

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

Declared at: llvm/include/llvm/CodeGen/SelectionDAGAddressAnalysis.h:69

Parameters

const llvm::SelectionDAG& DAG
int64_t BitSize
const llvm::BaseIndexOffset& Other
int64_t OtherBitSize
int64_t& BitOffset

void dump() const

Declared at: llvm/include/llvm/CodeGen/SelectionDAGAddressAnalysis.h:91

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

Declared at: llvm/include/llvm/CodeGen/SelectionDAGAddressAnalysis.h:58

Parameters

const llvm::BaseIndexOffset& Other
const llvm::SelectionDAG& DAG
int64_t& Off

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

Declared at: llvm/include/llvm/CodeGen/SelectionDAGAddressAnalysis.h:61

Parameters

const llvm::BaseIndexOffset& Other
const llvm::SelectionDAG& DAG

llvm::SDValue getBase() const

Declared at: llvm/include/llvm/CodeGen/SelectionDAGAddressAnalysis.h:49

llvm::SDValue getBase()

Declared at: llvm/include/llvm/CodeGen/SelectionDAGAddressAnalysis.h:48

llvm::SDValue getIndex() const

Declared at: llvm/include/llvm/CodeGen/SelectionDAGAddressAnalysis.h:51

llvm::SDValue getIndex()

Declared at: llvm/include/llvm/CodeGen/SelectionDAGAddressAnalysis.h:50

int64_t getOffset() const

Declared at: llvm/include/llvm/CodeGen/SelectionDAGAddressAnalysis.h:53

bool hasValidOffset() const

Declared at: llvm/include/llvm/CodeGen/SelectionDAGAddressAnalysis.h:52

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

Description

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

Declared at: llvm/include/llvm/CodeGen/SelectionDAGAddressAnalysis.h:88

Parameters

const llvm::SDNode* N
const llvm::SelectionDAG& DAG

void print(llvm::raw_ostream& OS) const

Declared at: llvm/include/llvm/CodeGen/SelectionDAGAddressAnalysis.h:90

Parameters

llvm::raw_ostream& OS