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)
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
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
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)
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)
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)
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)
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)
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)
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)
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)
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)
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)
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)
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)
std::pair<unsigned int, unsigned int> hoist(
llvm::HoistingPointList& HPL)
Declared at: llvm/lib/Transforms/Scalar/GVNHoist.cpp:515
Parameters
¶std::pair<unsigned int, unsigned int>
hoistExpressions(llvm::Function& F)
std::pair<unsigned int, unsigned int>
hoistExpressions(llvm::Function& F)
Declared at: llvm/lib/Transforms/Scalar/GVNHoist.cpp:519
Parameters
¶void insertCHI(llvm::InValuesType& ValueBBs,
llvm::OutValuesType& CHIBBs)
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
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
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)
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
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)
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)
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)
bool run(llvm::Function& F)
Declared at: llvm/lib/Transforms/Scalar/GVNHoist.cpp:268
Parameters
¶bool safeToHoistLdSt(
const llvm::Instruction* NewPt,
const llvm::Instruction* OldPt,
llvm::MemoryUseOrDef* U,
llvm::GVNHoist::InsKind K,
int& NBBsOnAllPaths)
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)
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)
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
bool valueAnticipable(llvm::CHIArgs C,
llvm::Instruction* TI) const
Declared at: llvm/lib/Transforms/Scalar/GVNHoist.cpp:357