class MemorySSA

Declaration

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

Description

Encapsulates MemorySSA, including all data associated with memory accesses.

Declared at: llvm/include/llvm/Analysis/MemorySSA.h:704

Method Overview

  • public MemorySSA(llvm::MemorySSA &&)
  • public MemorySSA(llvm::Function &, llvm::AliasAnalysis *, llvm::DominatorTree *)
  • protected llvm::MemoryUseOrDef * createDefinedAccess(llvm::Instruction *, llvm::MemoryAccess *, const llvm::MemoryUseOrDef * Template = nullptr, bool CreationMustSucceed = true)
  • public bool dominates(const llvm::MemoryAccess * A, const llvm::Use & B) const
  • public bool dominates(const llvm::MemoryAccess * A, const llvm::MemoryAccess * B) const
  • public void dump() const
  • public const llvm::MemorySSA::AccessList * getBlockAccesses(const llvm::BasicBlock * BB) const
  • public const llvm::MemorySSA::DefsList * getBlockDefs(const llvm::BasicBlock * BB) const
  • public inline llvm::MemoryAccess * getLiveOnEntryDef() const
  • public llvm::MemoryUseOrDef * getMemoryAccess(const llvm::Instruction * I) const
  • public llvm::MemoryPhi * getMemoryAccess(const llvm::BasicBlock * BB) const
  • public llvm::MemorySSAWalker * getSkipSelfWalker()
  • public llvm::MemorySSAWalker * getWalker()
  • protected llvm::MemorySSA::AccessList * getWritableBlockAccesses(const llvm::BasicBlock * BB) const
  • protected llvm::MemorySSA::DefsList * getWritableBlockDefs(const llvm::BasicBlock * BB) const
  • protected void insertIntoListsBefore(llvm::MemoryAccess *, const llvm::BasicBlock *, AccessList::iterator)
  • protected void insertIntoListsForBlock(llvm::MemoryAccess *, const llvm::BasicBlock *, llvm::MemorySSA::InsertionPlace)
  • public inline bool isLiveOnEntryDef(const llvm::MemoryAccess * MA) const
  • public bool locallyDominates(const llvm::MemoryAccess * A, const llvm::MemoryAccess * B) const
  • protected void moveTo(llvm::MemoryUseOrDef * What, llvm::BasicBlock * BB, AccessList::iterator Where)
  • protected void moveTo(llvm::MemoryAccess * What, llvm::BasicBlock * BB, llvm::MemorySSA::InsertionPlace Point)
  • public void print(llvm::raw_ostream &) const
  • protected void removeFromLists(llvm::MemoryAccess *, bool ShouldDelete = true)
  • protected void removeFromLookups(llvm::MemoryAccess *)
  • protected void renamePass(llvm::BasicBlock * BB, llvm::MemoryAccess * IncomingVal, SmallPtrSetImpl<llvm::BasicBlock *> & Visited)
  • protected void verifyDominationNumbers(const llvm::Function & F) const
  • public void verifyMemorySSA() const
  • protected void verifyOrderingDominationAndDefUses(llvm::Function & F) const
  • protected void verifyPrevDefInPhis(llvm::Function & F) const
  • public ~MemorySSA()

Methods

MemorySSA(llvm::MemorySSA&&)

Declared at: llvm/include/llvm/Analysis/MemorySSA.h:710

Parameters

llvm::MemorySSA&&

MemorySSA(llvm::Function&,
          llvm::AliasAnalysis*,
          llvm::DominatorTree*)

Declared at: llvm/include/llvm/Analysis/MemorySSA.h:706

Parameters

llvm::Function&
llvm::AliasAnalysis*
llvm::DominatorTree*

llvm::MemoryUseOrDef* createDefinedAccess(
    llvm::Instruction*,
    llvm::MemoryAccess*,
    const llvm::MemoryUseOrDef* Template =
        nullptr,
    bool CreationMustSucceed = true)

Declared at: llvm/include/llvm/Analysis/MemorySSA.h:832

Parameters

llvm::Instruction*
llvm::MemoryAccess*
const llvm::MemoryUseOrDef* Template = nullptr
bool CreationMustSucceed = true

bool dominates(const llvm::MemoryAccess* A,
               const llvm::Use& B) const

Description

Given a MemoryAccess and a Use, determine whether MemoryAccess \p A dominates Use \p B.

Declared at: llvm/include/llvm/Analysis/MemorySSA.h:781

Parameters

const llvm::MemoryAccess* A
const llvm::Use& B

bool dominates(const llvm::MemoryAccess* A,
               const llvm::MemoryAccess* B) const

Description

Given two memory accesses in potentially different blocks, determine whether MemoryAccess \p A dominates MemoryAccess \p B.

Declared at: llvm/include/llvm/Analysis/MemorySSA.h:777

Parameters

const llvm::MemoryAccess* A
const llvm::MemoryAccess* B

void dump() const

Declared at: llvm/include/llvm/Analysis/MemorySSA.h:729

const llvm::MemorySSA::AccessList*
getBlockAccesses(const llvm::BasicBlock* BB) const

Description

Return the list of MemoryAccess's for a given basic block. This list is not modifiable by the user.

Declared at: llvm/include/llvm/Analysis/MemorySSA.h:759

Parameters

const llvm::BasicBlock* BB

const llvm::MemorySSA::DefsList* getBlockDefs(
    const llvm::BasicBlock* BB) const

Description

Return the list of MemoryDef's and MemoryPhi's for a given basic block. This list is not modifiable by the user.

Declared at: llvm/include/llvm/Analysis/MemorySSA.h:767

Parameters

const llvm::BasicBlock* BB

inline llvm::MemoryAccess* getLiveOnEntryDef()
    const

Declared at: llvm/include/llvm/Analysis/MemorySSA.h:743

llvm::MemoryUseOrDef* getMemoryAccess(
    const llvm::Instruction* I) const

Description

Given a memory Mod/Ref'ing instruction, get the MemorySSA access associated with it. If passed a basic block gets the memory phi node that exists for that block, if there is one. Otherwise, this will get a MemoryUseOrDef.

Declared at: llvm/include/llvm/Analysis/MemorySSA.h:721

Parameters

const llvm::Instruction* I

llvm::MemoryPhi* getMemoryAccess(
    const llvm::BasicBlock* BB) const

Declared at: llvm/include/llvm/Analysis/MemorySSA.h:725

Parameters

const llvm::BasicBlock* BB

llvm::MemorySSAWalker* getSkipSelfWalker()

Declared at: llvm/include/llvm/Analysis/MemorySSA.h:715

llvm::MemorySSAWalker* getWalker()

Declared at: llvm/include/llvm/Analysis/MemorySSA.h:714

llvm::MemorySSA::AccessList*
getWritableBlockAccesses(
    const llvm::BasicBlock* BB) const

Declared at: llvm/include/llvm/Analysis/MemorySSA.h:802

Parameters

const llvm::BasicBlock* BB

llvm::MemorySSA::DefsList* getWritableBlockDefs(
    const llvm::BasicBlock* BB) const

Declared at: llvm/include/llvm/Analysis/MemorySSA.h:808

Parameters

const llvm::BasicBlock* BB

void insertIntoListsBefore(
    llvm::MemoryAccess*,
    const llvm::BasicBlock*,
    AccessList::iterator)

Declared at: llvm/include/llvm/Analysis/MemorySSA.h:830

Parameters

llvm::MemoryAccess*
const llvm::BasicBlock*
AccessList::iterator

void insertIntoListsForBlock(
    llvm::MemoryAccess*,
    const llvm::BasicBlock*,
    llvm::MemorySSA::InsertionPlace)

Declared at: llvm/include/llvm/Analysis/MemorySSA.h:828

Parameters

llvm::MemoryAccess*
const llvm::BasicBlock*
llvm::MemorySSA::InsertionPlace

inline bool isLiveOnEntryDef(
    const llvm::MemoryAccess* MA) const

Description

Return true if \p MA represents the live on entry value Loads and stores from pointer arguments and other global values may be defined by memory operations that do not occur in the current function, so they may be live on entry to the function. MemorySSA represents such memory state by the live on entry definition, which is guaranteed to occur before any other memory access in the function.

Declared at: llvm/include/llvm/Analysis/MemorySSA.h:739

Parameters

const llvm::MemoryAccess* MA

bool locallyDominates(
    const llvm::MemoryAccess* A,
    const llvm::MemoryAccess* B) const

Description

Given two memory accesses in the same basic block, determine whether MemoryAccess \p A dominates MemoryAccess \p B.

Declared at: llvm/include/llvm/Analysis/MemorySSA.h:773

Parameters

const llvm::MemoryAccess* A
const llvm::MemoryAccess* B

void moveTo(llvm::MemoryUseOrDef* What,
            llvm::BasicBlock* BB,
            AccessList::iterator Where)

Declared at: llvm/include/llvm/Analysis/MemorySSA.h:817

Parameters

llvm::MemoryUseOrDef* What
llvm::BasicBlock* BB
AccessList::iterator Where

void moveTo(llvm::MemoryAccess* What,
            llvm::BasicBlock* BB,
            llvm::MemorySSA::InsertionPlace Point)

Declared at: llvm/include/llvm/Analysis/MemorySSA.h:818

Parameters

llvm::MemoryAccess* What
llvm::BasicBlock* BB
llvm::MemorySSA::InsertionPlace Point

void print(llvm::raw_ostream&) const

Declared at: llvm/include/llvm/Analysis/MemorySSA.h:730

Parameters

llvm::raw_ostream&

void removeFromLists(llvm::MemoryAccess*,
                     bool ShouldDelete = true)

Declared at: llvm/include/llvm/Analysis/MemorySSA.h:827

Parameters

llvm::MemoryAccess*
bool ShouldDelete = true

void removeFromLookups(llvm::MemoryAccess*)

Declared at: llvm/include/llvm/Analysis/MemorySSA.h:826

Parameters

llvm::MemoryAccess*

void renamePass(
    llvm::BasicBlock* BB,
    llvm::MemoryAccess* IncomingVal,
    SmallPtrSetImpl<llvm::BasicBlock*>& Visited)

Declared at: llvm/include/llvm/Analysis/MemorySSA.h:821

Parameters

llvm::BasicBlock* BB
llvm::MemoryAccess* IncomingVal
SmallPtrSetImpl<llvm::BasicBlock*>& Visited

void verifyDominationNumbers(
    const llvm::Function& F) const

Declared at: llvm/include/llvm/Analysis/MemorySSA.h:798

Parameters

const llvm::Function& F

void verifyMemorySSA() const

Description

Verify that MemorySSA is self consistent (IE definitions dominate all uses, uses appear in the right places). This is used by unit tests.

Declared at: llvm/include/llvm/Analysis/MemorySSA.h:785

void verifyOrderingDominationAndDefUses(
    llvm::Function& F) const

Declared at: llvm/include/llvm/Analysis/MemorySSA.h:797

Parameters

llvm::Function& F

void verifyPrevDefInPhis(llvm::Function& F) const

Declared at: llvm/include/llvm/Analysis/MemorySSA.h:799

Parameters

llvm::Function& F

~MemorySSA()

Declared at: llvm/include/llvm/Analysis/MemorySSA.h:712