LLVM API Documentation
#include <IVUsers.h>
Public Types | |
typedef ilist< IVStrideUse > ::iterator | iterator |
typedef ilist< IVStrideUse > ::const_iterator | const_iterator |
Public Member Functions | |
IVUsers () | |
Loop * | getLoop () const |
bool | AddUsersIfInteresting (Instruction *I) |
IVStrideUse & | AddUser (Instruction *User, Value *Operand) |
const SCEV * | getReplacementExpr (const IVStrideUse &IU) const |
const SCEV * | getExpr (const IVStrideUse &IU) const |
getExpr - Return the expression for the use. | |
const SCEV * | getStride (const IVStrideUse &IU, const Loop *L) const |
iterator | begin () |
iterator | end () |
const_iterator | begin () const |
const_iterator | end () const |
bool | empty () const |
bool | isIVUserOrOperand (Instruction *Inst) const |
void | print (raw_ostream &OS, const Module *=nullptr) const override |
void | dump () const |
dump - This method is used for debugging. | |
Static Public Attributes | |
static char | ID = 0 |
Protected Member Functions | |
bool | AddUsersImpl (Instruction *I, SmallPtrSetImpl< Loop * > &SimpleLoopNests) |
Friends | |
class | IVStrideUse |
typedef ilist<IVStrideUse>::iterator llvm::IVUsers::iterator |
IVUsers::IVUsers | ( | ) |
Definition at line 238 of file IVUsers.cpp.
References llvm::PassRegistry::getPassRegistry(), and llvm::initializeIVUsersPass().
IVStrideUse & IVUsers::AddUser | ( | Instruction * | User, |
Value * | Operand | ||
) |
Definition at line 233 of file IVUsers.cpp.
References llvm::iplist< NodeTy, Traits >::back(), IVStrideUse, and llvm::ilist< NodeTy >::push_back().
Referenced by AddUsersImpl().
AddUsersIfInteresting - Inspect the specified Instruction. If it is a reducible SCEV, recursively add its users to the IVUsesByStride set and return true. Otherwise, return false.
Definition at line 224 of file IVUsers.cpp.
References AddUsersImpl().
bool IVUsers::AddUsersImpl | ( | Instruction * | I, |
SmallPtrSetImpl< Loop * > & | SimpleLoopNests | ||
) | [protected] |
AddUsersImpl - Inspect the specified instruction. If it is a reducible SCEV, recursively add its users to the IVUsesByStride set and return true. Otherwise, return false.
Definition at line 114 of file IVUsers.cpp.
References AddUser(), llvm::SmallPtrSetImpl< PtrType >::count(), llvm::dbgs(), DEBUG, llvm::Denormalize, llvm::PHINode::getIncomingValueNumForOperand(), llvm::LoopInfo::getLoopFor(), llvm::Instruction::getParent(), llvm::ScalarEvolution::getSCEV(), llvm::Value::getType(), llvm::ScalarEvolution::getTypeSizeInBits(), llvm::SmallPtrSetImpl< PtrType >::insert(), isInteresting(), llvm::DataLayout::isLegalInteger(), llvm::isSafeToSpeculativelyExecute(), llvm::ScalarEvolution::isSCEVable(), isSimplifiedLoopNest(), llvm::NormalizeAutodetect, llvm::TargetOpcode::PHI, llvm::iplist< NodeTy, Traits >::pop_back(), llvm::TransformForPostIncUse(), and llvm::Value::uses().
Referenced by AddUsersIfInteresting().
iterator llvm::IVUsers::begin | ( | ) | [inline] |
Definition at line 162 of file IVUsers.h.
References llvm::iplist< NodeTy, Traits >::begin().
const_iterator llvm::IVUsers::begin | ( | ) | const [inline] |
Definition at line 164 of file IVUsers.h.
References llvm::iplist< NodeTy, Traits >::begin().
void IVUsers::dump | ( | ) | const |
dump - This method is used for debugging.
Reimplemented from llvm::Pass.
Definition at line 299 of file IVUsers.cpp.
References llvm::dbgs(), and print().
bool llvm::IVUsers::empty | ( | ) | const [inline] |
Definition at line 166 of file IVUsers.h.
References llvm::iplist< NodeTy, Traits >::empty().
iterator llvm::IVUsers::end | ( | ) | [inline] |
Definition at line 163 of file IVUsers.h.
References llvm::iplist< NodeTy, Traits >::end().
const_iterator llvm::IVUsers::end | ( | ) | const [inline] |
Definition at line 165 of file IVUsers.h.
References llvm::iplist< NodeTy, Traits >::end().
const SCEV * IVUsers::getExpr | ( | const IVStrideUse & | IU | ) | const |
getExpr - Return the expression for the use.
Definition at line 316 of file IVUsers.cpp.
References llvm::IVStrideUse::getOperandValToReplace(), llvm::IVStrideUse::getPostIncLoops(), getReplacementExpr(), llvm::IVStrideUse::getUser(), llvm::Normalize, and llvm::TransformForPostIncUse().
Referenced by getStride().
Loop* llvm::IVUsers::getLoop | ( | ) | const [inline] |
const SCEV * IVUsers::getReplacementExpr | ( | const IVStrideUse & | IU | ) | const |
getReplacementExpr - Return a SCEV expression which computes the value of the OperandValToReplace of the given IVStrideUse.
getReplacementExpr - Return a SCEV expression which computes the value of the OperandValToReplace.
Definition at line 311 of file IVUsers.cpp.
References llvm::IVStrideUse::getOperandValToReplace(), and llvm::ScalarEvolution::getSCEV().
const SCEV * IVUsers::getStride | ( | const IVStrideUse & | IU, |
const Loop * | L | ||
) | const |
Definition at line 342 of file IVUsers.cpp.
References findAddRecForLoop(), and getExpr().
bool llvm::IVUsers::isIVUserOrOperand | ( | Instruction * | Inst | ) | const [inline] |
Definition at line 168 of file IVUsers.h.
References llvm::SmallPtrSetImpl< PtrType >::count().
void IVUsers::print | ( | raw_ostream & | O, |
const Module * | M = nullptr |
||
) | const [override, virtual] |
print - Print out the internal state of the pass. This is called by Analyze to print out the contents of an analysis. Otherwise it is not necessary to implement this method. Beware that the module pointer MAY be null. This automatically forwards to a virtual function that does not provide the Module* in case the analysis doesn't need it it can just be ignored.
Reimplemented from llvm::Pass.
Definition at line 268 of file IVUsers.cpp.
References llvm::iplist< NodeTy, Traits >::begin(), llvm::iplist< NodeTy, Traits >::end(), llvm::ScalarEvolution::getBackedgeTakenCount(), llvm::LoopBase< BlockT, LoopT >::getHeader(), getReplacementExpr(), llvm::ScalarEvolution::hasLoopInvariantBackedgeTakenCount(), I, and llvm::Value::printAsOperand().
Referenced by dump().
friend class IVStrideUse [friend] |
char IVUsers::ID = 0 [static] |