class NaryReassociatePass
Declaration
class NaryReassociatePass : public PassInfoMixin { /* full declaration omitted */ };
Description
A CRTP mix-in to automatically provide informational APIs needed for passes. This provides some boilerplate for types that are passes.
Declared at: llvm/include/llvm/Transforms/Scalar/NaryReassociate.h:102
Inherits from: PassInfoMixin
Member Variables
- private llvm::AssumptionCache* AC
- private const llvm::DataLayout* DL
- private llvm::DominatorTree* DT
- private llvm::ScalarEvolution* SE
- private llvm::TargetLibraryInfo* TLI
- private llvm::TargetTransformInfo* TTI
- private DenseMap<const llvm::SCEV*, SmallVector<llvm::WeakTrackingVH, 2>> SeenExprs
Method Overview
- private bool doOneIteration(llvm::Function & F)
- private llvm::Instruction * findClosestMatchingDominator(const llvm::SCEV * CandidateExpr, llvm::Instruction * Dominatee)
- private const llvm::SCEV * getBinarySCEV(llvm::BinaryOperator * I, const llvm::SCEV * LHS, const llvm::SCEV * RHS)
- private template <typename PredT>llvm::Instruction * matchAndReassociateMinOrMax(llvm::Instruction * I, const llvm::SCEV *& OrigSCEV)
- private bool matchTernaryOp(llvm::BinaryOperator * I, llvm::Value * V, llvm::Value *& Op1, llvm::Value *& Op2)
- private bool requiresSignExtension(llvm::Value * Index, llvm::GetElementPtrInst * GEP)
- public llvm::PreservedAnalyses run(llvm::Function & F, llvm::FunctionAnalysisManager & AM)
- public bool runImpl(llvm::Function & F, llvm::AssumptionCache * AC_, llvm::DominatorTree * DT_, llvm::ScalarEvolution * SE_, llvm::TargetLibraryInfo * TLI_, llvm::TargetTransformInfo * TTI_)
- private llvm::Instruction * tryReassociate(llvm::Instruction * I, const llvm::SCEV *& OrigSCEV)
- private llvm::Instruction * tryReassociateBinaryOp(llvm::BinaryOperator * I)
- private llvm::Instruction * tryReassociateBinaryOp(llvm::Value * LHS, llvm::Value * RHS, llvm::BinaryOperator * I)
- private llvm::Instruction * tryReassociateGEP(llvm::GetElementPtrInst * GEP)
- private llvm::GetElementPtrInst * tryReassociateGEPAtIndex(llvm::GetElementPtrInst * GEP, unsigned int I, llvm::Type * IndexedType)
- private llvm::GetElementPtrInst * tryReassociateGEPAtIndex(llvm::GetElementPtrInst * GEP, unsigned int I, llvm::Value * LHS, llvm::Value * RHS, llvm::Type * IndexedType)
- private template <typename MaxMinT>llvm::Value * tryReassociateMinOrMax(llvm::Instruction * I, MaxMinT MaxMinMatch, llvm::Value * LHS, llvm::Value * RHS)
- private llvm::Instruction * tryReassociatedBinaryOp(const llvm::SCEV * LHS, llvm::Value * RHS, llvm::BinaryOperator * I)
Methods
¶bool doOneIteration(llvm::Function& F)
bool doOneIteration(llvm::Function& F)
Declared at: llvm/include/llvm/Transforms/Scalar/NaryReassociate.h:114
Parameters
¶llvm::Instruction* findClosestMatchingDominator(
const llvm::SCEV* CandidateExpr,
llvm::Instruction* Dominatee)
llvm::Instruction* findClosestMatchingDominator(
const llvm::SCEV* CandidateExpr,
llvm::Instruction* Dominatee)
Declared at: llvm/include/llvm/Transforms/Scalar/NaryReassociate.h:158
Parameters
- const llvm::SCEV* CandidateExpr
- llvm::Instruction* Dominatee
¶const llvm::SCEV* getBinarySCEV(
llvm::BinaryOperator* I,
const llvm::SCEV* LHS,
const llvm::SCEV* RHS)
const llvm::SCEV* getBinarySCEV(
llvm::BinaryOperator* I,
const llvm::SCEV* LHS,
const llvm::SCEV* RHS)
Declared at: llvm/include/llvm/Transforms/Scalar/NaryReassociate.h:153
Parameters
- llvm::BinaryOperator* I
- const llvm::SCEV* LHS
- const llvm::SCEV* RHS
¶template <typename PredT>
llvm::Instruction* matchAndReassociateMinOrMax(
llvm::Instruction* I,
const llvm::SCEV*& OrigSCEV)
template <typename PredT>
llvm::Instruction* matchAndReassociateMinOrMax(
llvm::Instruction* I,
const llvm::SCEV*& OrigSCEV)
Declared at: llvm/include/llvm/Transforms/Scalar/NaryReassociate.h:166
Templates
- PredT
Parameters
- llvm::Instruction* I
- const llvm::SCEV*& OrigSCEV
¶bool matchTernaryOp(llvm::BinaryOperator* I,
llvm::Value* V,
llvm::Value*& Op1,
llvm::Value*& Op2)
bool matchTernaryOp(llvm::BinaryOperator* I,
llvm::Value* V,
llvm::Value*& Op1,
llvm::Value*& Op2)
Declared at: llvm/include/llvm/Transforms/Scalar/NaryReassociate.h:150
Parameters
- llvm::BinaryOperator* I
- llvm::Value* V
- llvm::Value*& Op1
- llvm::Value*& Op2
¶bool requiresSignExtension(
llvm::Value* Index,
llvm::GetElementPtrInst* GEP)
bool requiresSignExtension(
llvm::Value* Index,
llvm::GetElementPtrInst* GEP)
Declared at: llvm/include/llvm/Transforms/Scalar/NaryReassociate.h:178
Parameters
- llvm::Value* Index
- llvm::GetElementPtrInst* GEP
¶llvm::PreservedAnalyses run(
llvm::Function& F,
llvm::FunctionAnalysisManager& AM)
llvm::PreservedAnalyses run(
llvm::Function& F,
llvm::FunctionAnalysisManager& AM)
Declared at: llvm/include/llvm/Transforms/Scalar/NaryReassociate.h:104
Parameters
¶bool runImpl(llvm::Function& F,
llvm::AssumptionCache* AC_,
llvm::DominatorTree* DT_,
llvm::ScalarEvolution* SE_,
llvm::TargetLibraryInfo* TLI_,
llvm::TargetTransformInfo* TTI_)
bool runImpl(llvm::Function& F,
llvm::AssumptionCache* AC_,
llvm::DominatorTree* DT_,
llvm::ScalarEvolution* SE_,
llvm::TargetLibraryInfo* TLI_,
llvm::TargetTransformInfo* TTI_)
Declared at: llvm/include/llvm/Transforms/Scalar/NaryReassociate.h:107
Parameters
- llvm::Function& F
- llvm::AssumptionCache* AC_
- llvm::DominatorTree* DT_
- llvm::ScalarEvolution* SE_
- llvm::TargetLibraryInfo* TLI_
- llvm::TargetTransformInfo* TTI_
¶llvm::Instruction* tryReassociate(
llvm::Instruction* I,
const llvm::SCEV*& OrigSCEV)
llvm::Instruction* tryReassociate(
llvm::Instruction* I,
const llvm::SCEV*& OrigSCEV)
Declared at: llvm/include/llvm/Transforms/Scalar/NaryReassociate.h:117
Parameters
- llvm::Instruction* I
- const llvm::SCEV*& OrigSCEV
¶llvm::Instruction* tryReassociateBinaryOp(
llvm::BinaryOperator* I)
llvm::Instruction* tryReassociateBinaryOp(
llvm::BinaryOperator* I)
Declared at: llvm/include/llvm/Transforms/Scalar/NaryReassociate.h:139
Parameters
¶llvm::Instruction* tryReassociateBinaryOp(
llvm::Value* LHS,
llvm::Value* RHS,
llvm::BinaryOperator* I)
llvm::Instruction* tryReassociateBinaryOp(
llvm::Value* LHS,
llvm::Value* RHS,
llvm::BinaryOperator* I)
Declared at: llvm/include/llvm/Transforms/Scalar/NaryReassociate.h:143
Parameters
- llvm::Value* LHS
- llvm::Value* RHS
- llvm::BinaryOperator* I
¶llvm::Instruction* tryReassociateGEP(
llvm::GetElementPtrInst* GEP)
llvm::Instruction* tryReassociateGEP(
llvm::GetElementPtrInst* GEP)
Declared at: llvm/include/llvm/Transforms/Scalar/NaryReassociate.h:120
Parameters
¶llvm::GetElementPtrInst* tryReassociateGEPAtIndex(
llvm::GetElementPtrInst* GEP,
unsigned int I,
llvm::Type* IndexedType)
llvm::GetElementPtrInst* tryReassociateGEPAtIndex(
llvm::GetElementPtrInst* GEP,
unsigned int I,
llvm::Type* IndexedType)
Declared at: llvm/include/llvm/Transforms/Scalar/NaryReassociate.h:129
Parameters
- llvm::GetElementPtrInst* GEP
- unsigned int I
- llvm::Type* IndexedType
¶llvm::GetElementPtrInst* tryReassociateGEPAtIndex(
llvm::GetElementPtrInst* GEP,
unsigned int I,
llvm::Value* LHS,
llvm::Value* RHS,
llvm::Type* IndexedType)
llvm::GetElementPtrInst* tryReassociateGEPAtIndex(
llvm::GetElementPtrInst* GEP,
unsigned int I,
llvm::Value* LHS,
llvm::Value* RHS,
llvm::Type* IndexedType)
Declared at: llvm/include/llvm/Transforms/Scalar/NaryReassociate.h:134
Parameters
- llvm::GetElementPtrInst* GEP
- unsigned int I
- llvm::Value* LHS
- llvm::Value* RHS
- llvm::Type* IndexedType
¶template <typename MaxMinT>
llvm::Value* tryReassociateMinOrMax(
llvm::Instruction* I,
MaxMinT MaxMinMatch,
llvm::Value* LHS,
llvm::Value* RHS)
template <typename MaxMinT>
llvm::Value* tryReassociateMinOrMax(
llvm::Instruction* I,
MaxMinT MaxMinMatch,
llvm::Value* LHS,
llvm::Value* RHS)
Declared at: llvm/include/llvm/Transforms/Scalar/NaryReassociate.h:171
Templates
- MaxMinT
Parameters
- llvm::Instruction* I
- MaxMinT MaxMinMatch
- llvm::Value* LHS
- llvm::Value* RHS
¶llvm::Instruction* tryReassociatedBinaryOp(
const llvm::SCEV* LHS,
llvm::Value* RHS,
llvm::BinaryOperator* I)
llvm::Instruction* tryReassociatedBinaryOp(
const llvm::SCEV* LHS,
llvm::Value* RHS,
llvm::BinaryOperator* I)
Declared at: llvm/include/llvm/Transforms/Scalar/NaryReassociate.h:146
Parameters
- const llvm::SCEV* LHS
- llvm::Value* RHS
- llvm::BinaryOperator* I