class GVNHoist

Declaration

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

Declared at: llvm/lib/Transforms/Scalar/GVNHoist.cpp:259

Member Variables

private GVNPass::ValueTable VN
private llvm::DominatorTree* DT
private llvm::PostDominatorTree* PDT
private llvm::AliasAnalysis* AA
private llvm::MemoryDependenceResults* MD
private llvm::MemorySSA* MSSA
private std::unique_ptr<MemorySSAUpdater> MSSAUpdater
private DenseMap<const llvm::Value*, unsigned int> DFSNumber
private llvm::BBSideEffectsSet BBSideEffects
private DenseSet<const llvm::BasicBlock*> HoistBarrier
private SmallVector<llvm::BasicBlock*, 32> IDFBlocks
private unsigned int NumFuncArgs
private const bool HoistingGeps = false

Method Overview

  • public GVNHoist(llvm::DominatorTree * DT, llvm::PostDominatorTree * PDT, llvm::AliasAnalysis * AA, llvm::MemoryDependenceResults * MD, llvm::MemorySSA * MSSA)
  • private bool allGepOperandsAvailable(const llvm::Instruction * I, const llvm::BasicBlock * HoistPt) const
  • private bool allOperandsAvailable(const llvm::Instruction * I, const llvm::BasicBlock * HoistPt) const
  • private void checkSafety(llvm::CHIArgs C, llvm::BasicBlock * BB, llvm::GVNHoist::InsKind K, SmallVectorImpl<llvm::CHIArg> & Safe)
  • private void computeInsertionPoints(const llvm::VNtoInsns & Map, llvm::HoistingPointList & HPL, llvm::GVNHoist::InsKind K)
  • private void fillChiArgs(llvm::BasicBlock * BB, llvm::OutValuesType & CHIBBs, llvm::GVNHoist::RenameStackType & RenameStack)
  • private void fillRenameStack(llvm::BasicBlock * BB, llvm::InValuesType & ValueBBs, llvm::GVNHoist::RenameStackType & RenameStack)
  • private void findHoistableCandidates(llvm::OutValuesType & CHIBBs, llvm::GVNHoist::InsKind K, llvm::HoistingPointList & HPL)
  • private bool firstInBB(const llvm::Instruction * I1, const llvm::Instruction * I2)
  • private bool hasEH(const llvm::BasicBlock * BB)
  • private bool hasEHOnPath(const llvm::BasicBlock * HoistPt, const llvm::BasicBlock * SrcBB, int & NBBsOnAllPaths)
  • private bool hasEHOrLoadsOnPath(const llvm::Instruction * NewPt, llvm::MemoryDef * Def, int & NBBsOnAllPaths)
  • private bool hasEHhelper(const llvm::BasicBlock * BB, const llvm::BasicBlock * SrcBB, int & NBBsOnAllPaths)
  • private bool hasMemoryUse(const llvm::Instruction * NewPt, llvm::MemoryDef * Def, const llvm::BasicBlock * BB)
  • private std::pair<unsigned int, unsigned int> hoist(llvm::HoistingPointList & HPL)
  • private std::pair<unsigned int, unsigned int> hoistExpressions(llvm::Function & F)
  • private void insertCHI(llvm::InValuesType & ValueBBs, llvm::OutValuesType & CHIBBs)
  • private bool makeGepOperandsAvailable(llvm::Instruction * Repl, llvm::BasicBlock * HoistPt, const llvm::SmallVecInsn & InstructionsToHoist) const
  • private void makeGepsAvailable(llvm::Instruction * Repl, llvm::BasicBlock * HoistPt, const llvm::SmallVecInsn & InstructionsToHoist, llvm::Instruction * Gep) const
  • private void raMPHIuw(llvm::MemoryUseOrDef * NewMemAcc)
  • public unsigned int rank(const llvm::Value * V) const
  • private unsigned int rauw(const llvm::SmallVecInsn & Candidates, llvm::Instruction * Repl, llvm::MemoryUseOrDef * NewMemAcc)
  • private unsigned int removeAndReplace(const llvm::SmallVecInsn & Candidates, llvm::Instruction * Repl, llvm::BasicBlock * DestBB, bool MoveAccess)
  • public bool run(llvm::Function & F)
  • private bool safeToHoistLdSt(const llvm::Instruction * NewPt, const llvm::Instruction * OldPt, llvm::MemoryUseOrDef * U, llvm::GVNHoist::InsKind K, int & NBBsOnAllPaths)
  • private bool safeToHoistScalar(const llvm::BasicBlock * HoistBB, const llvm::BasicBlock * BB, int & NBBsOnAllPaths)
  • private void updateAlignment(llvm::Instruction * I, llvm::Instruction * Repl)
  • private bool valueAnticipable(llvm::CHIArgs C, llvm::Instruction * TI) const

Methods

GVNHoist(llvm::DominatorTree* DT,
         llvm::PostDominatorTree* PDT,
         llvm::AliasAnalysis* AA,
         llvm::MemoryDependenceResults* MD,
         llvm::MemorySSA* MSSA)

Declared at: llvm/lib/Transforms/Scalar/GVNHoist.cpp:261

Parameters

llvm::DominatorTree* DT
llvm::PostDominatorTree* PDT
llvm::AliasAnalysis* AA
llvm::MemoryDependenceResults* MD
llvm::MemorySSA* MSSA

bool allGepOperandsAvailable(
    const llvm::Instruction* I,
    const llvm::BasicBlock* HoistPt) const

Declared at: llvm/lib/Transforms/Scalar/GVNHoist.cpp:487

Parameters

const llvm::Instruction* I
const llvm::BasicBlock* HoistPt

bool allOperandsAvailable(
    const llvm::Instruction* I,
    const llvm::BasicBlock* HoistPt) const

Declared at: llvm/lib/Transforms/Scalar/GVNHoist.cpp:483

Parameters

const llvm::Instruction* I
const llvm::BasicBlock* HoistPt

void checkSafety(
    llvm::CHIArgs C,
    llvm::BasicBlock* BB,
    llvm::GVNHoist::InsKind K,
    SmallVectorImpl<llvm::CHIArg>& Safe)

Declared at: llvm/lib/Transforms/Scalar/GVNHoist.cpp:361

Parameters

llvm::CHIArgs C
llvm::BasicBlock* BB
llvm::GVNHoist::InsKind K
SmallVectorImpl<llvm::CHIArg>& Safe

void computeInsertionPoints(
    const llvm::VNtoInsns& Map,
    llvm::HoistingPointList& HPL,
    llvm::GVNHoist::InsKind K)

Declared at: llvm/lib/Transforms/Scalar/GVNHoist.cpp:405

Parameters

const llvm::VNtoInsns& Map
llvm::HoistingPointList& HPL
llvm::GVNHoist::InsKind K

void fillChiArgs(
    llvm::BasicBlock* BB,
    llvm::OutValuesType& CHIBBs,
    llvm::GVNHoist::RenameStackType& RenameStack)

Declared at: llvm/lib/Transforms/Scalar/GVNHoist.cpp:370

Parameters

llvm::BasicBlock* BB
llvm::OutValuesType& CHIBBs
llvm::GVNHoist::RenameStackType& RenameStack

void fillRenameStack(
    llvm::BasicBlock* BB,
    llvm::InValuesType& ValueBBs,
    llvm::GVNHoist::RenameStackType& RenameStack)

Declared at: llvm/lib/Transforms/Scalar/GVNHoist.cpp:367

Parameters

llvm::BasicBlock* BB
llvm::InValuesType& ValueBBs
llvm::GVNHoist::RenameStackType& RenameStack

void findHoistableCandidates(
    llvm::OutValuesType& CHIBBs,
    llvm::GVNHoist::InsKind K,
    llvm::HoistingPointList& HPL)

Declared at: llvm/lib/Transforms/Scalar/GVNHoist.cpp:400

Parameters

llvm::OutValuesType& CHIBBs
llvm::GVNHoist::InsKind K
llvm::HoistingPointList& HPL

bool firstInBB(const llvm::Instruction* I1,
               const llvm::Instruction* I2)

Declared at: llvm/lib/Transforms/Scalar/GVNHoist.cpp:299

Parameters

const llvm::Instruction* I1
const llvm::Instruction* I2

bool hasEH(const llvm::BasicBlock* BB)

Declared at: llvm/lib/Transforms/Scalar/GVNHoist.cpp:296

Parameters

const llvm::BasicBlock* BB

bool hasEHOnPath(const llvm::BasicBlock* HoistPt,
                 const llvm::BasicBlock* SrcBB,
                 int& NBBsOnAllPaths)

Declared at: llvm/lib/Transforms/Scalar/GVNHoist.cpp:328

Parameters

const llvm::BasicBlock* HoistPt
const llvm::BasicBlock* SrcBB
int& NBBsOnAllPaths

bool hasEHOrLoadsOnPath(
    const llvm::Instruction* NewPt,
    llvm::MemoryDef* Def,
    int& NBBsOnAllPaths)

Declared at: llvm/lib/Transforms/Scalar/GVNHoist.cpp:321

Parameters

const llvm::Instruction* NewPt
llvm::MemoryDef* Def
int& NBBsOnAllPaths

bool hasEHhelper(const llvm::BasicBlock* BB,
                 const llvm::BasicBlock* SrcBB,
                 int& NBBsOnAllPaths)

Declared at: llvm/lib/Transforms/Scalar/GVNHoist.cpp:311

Parameters

const llvm::BasicBlock* BB
const llvm::BasicBlock* SrcBB
int& NBBsOnAllPaths

bool hasMemoryUse(const llvm::Instruction* NewPt,
                  llvm::MemoryDef* Def,
                  const llvm::BasicBlock* BB)

Declared at: llvm/lib/Transforms/Scalar/GVNHoist.cpp:308

Parameters

const llvm::Instruction* NewPt
llvm::MemoryDef* Def
const llvm::BasicBlock* BB

std::pair<unsigned int, unsigned int> hoist(
    llvm::HoistingPointList& HPL)

Declared at: llvm/lib/Transforms/Scalar/GVNHoist.cpp:515

Parameters

llvm::HoistingPointList& HPL

std::pair<unsigned int, unsigned int>
hoistExpressions(llvm::Function& F)

Declared at: llvm/lib/Transforms/Scalar/GVNHoist.cpp:519

Parameters

llvm::Function& F

void insertCHI(llvm::InValuesType& ValueBBs,
               llvm::OutValuesType& CHIBBs)

Declared at: llvm/lib/Transforms/Scalar/GVNHoist.cpp:377

Parameters

llvm::InValuesType& ValueBBs
llvm::OutValuesType& CHIBBs

bool makeGepOperandsAvailable(
    llvm::Instruction* Repl,
    llvm::BasicBlock* HoistPt,
    const llvm::SmallVecInsn& InstructionsToHoist)
    const

Declared at: llvm/lib/Transforms/Scalar/GVNHoist.cpp:512

Parameters

llvm::Instruction* Repl
llvm::BasicBlock* HoistPt
const llvm::SmallVecInsn& InstructionsToHoist

void makeGepsAvailable(
    llvm::Instruction* Repl,
    llvm::BasicBlock* HoistPt,
    const llvm::SmallVecInsn& InstructionsToHoist,
    llvm::Instruction* Gep) const

Declared at: llvm/lib/Transforms/Scalar/GVNHoist.cpp:491

Parameters

llvm::Instruction* Repl
llvm::BasicBlock* HoistPt
const llvm::SmallVecInsn& InstructionsToHoist
llvm::Instruction* Gep

void raMPHIuw(llvm::MemoryUseOrDef* NewMemAcc)

Declared at: llvm/lib/Transforms/Scalar/GVNHoist.cpp:503

Parameters

llvm::MemoryUseOrDef* NewMemAcc

unsigned int rank(const llvm::Value* V) const

Declared at: llvm/lib/Transforms/Scalar/GVNHoist.cpp:276

Parameters

const llvm::Value* V

unsigned int rauw(
    const llvm::SmallVecInsn& Candidates,
    llvm::Instruction* Repl,
    llvm::MemoryUseOrDef* NewMemAcc)

Declared at: llvm/lib/Transforms/Scalar/GVNHoist.cpp:499

Parameters

const llvm::SmallVecInsn& Candidates
llvm::Instruction* Repl
llvm::MemoryUseOrDef* NewMemAcc

unsigned int removeAndReplace(
    const llvm::SmallVecInsn& Candidates,
    llvm::Instruction* Repl,
    llvm::BasicBlock* DestBB,
    bool MoveAccess)

Declared at: llvm/lib/Transforms/Scalar/GVNHoist.cpp:506

Parameters

const llvm::SmallVecInsn& Candidates
llvm::Instruction* Repl
llvm::BasicBlock* DestBB
bool MoveAccess

bool run(llvm::Function& F)

Declared at: llvm/lib/Transforms/Scalar/GVNHoist.cpp:268

Parameters

llvm::Function& F

bool safeToHoistLdSt(
    const llvm::Instruction* NewPt,
    const llvm::Instruction* OldPt,
    llvm::MemoryUseOrDef* U,
    llvm::GVNHoist::InsKind K,
    int& NBBsOnAllPaths)

Declared at: llvm/lib/Transforms/Scalar/GVNHoist.cpp:333

Parameters

const llvm::Instruction* NewPt
const llvm::Instruction* OldPt
llvm::MemoryUseOrDef* U
llvm::GVNHoist::InsKind K
int& NBBsOnAllPaths

bool safeToHoistScalar(
    const llvm::BasicBlock* HoistBB,
    const llvm::BasicBlock* BB,
    int& NBBsOnAllPaths)

Declared at: llvm/lib/Transforms/Scalar/GVNHoist.cpp:338

Parameters

const llvm::BasicBlock* HoistBB
const llvm::BasicBlock* BB
int& NBBsOnAllPaths

void updateAlignment(llvm::Instruction* I,
                     llvm::Instruction* Repl)

Declared at: llvm/lib/Transforms/Scalar/GVNHoist.cpp:495

Parameters

llvm::Instruction* I
llvm::Instruction* Repl

bool valueAnticipable(llvm::CHIArgs C,
                      llvm::Instruction* TI) const

Declared at: llvm/lib/Transforms/Scalar/GVNHoist.cpp:357

Parameters

llvm::CHIArgs C
llvm::Instruction* TI