|
LLVM 22.0.0git
|
#include "llvm/Analysis/IVUsers.h"#include "llvm/Analysis/AssumptionCache.h"#include "llvm/Analysis/CodeMetrics.h"#include "llvm/Analysis/LoopAnalysisManager.h"#include "llvm/Analysis/LoopInfo.h"#include "llvm/Analysis/LoopPass.h"#include "llvm/Analysis/ScalarEvolutionExpressions.h"#include "llvm/Analysis/ValueTracking.h"#include "llvm/Config/llvm-config.h"#include "llvm/IR/DataLayout.h"#include "llvm/IR/Dominators.h"#include "llvm/IR/Instructions.h"#include "llvm/IR/Module.h"#include "llvm/InitializePasses.h"#include "llvm/Support/Debug.h"#include "llvm/Support/raw_ostream.h"Go to the source code of this file.
Macros | |
| #define | DEBUG_TYPE "iv-users" |
Functions | |
| INITIALIZE_PASS_BEGIN (IVUsersWrapperPass, "iv-users", "Induction Variable Users", false, true) INITIALIZE_PASS_END(IVUsersWrapperPass | |
| static bool | isInteresting (const SCEV *S, const Instruction *I, const Loop *L, ScalarEvolution *SE, LoopInfo *LI) |
| isInteresting - Test whether the given expression is "interesting" when used by the given expression, within the context of analyzing the given loop. | |
| static bool | IVUseShouldUsePostIncValue (Instruction *User, Value *Operand, const Loop *L, DominatorTree *DT) |
| IVUseShouldUsePostIncValue - We have discovered a "User" of an IV expression and now we need to decide whether the user should use the preinc or post-inc value. | |
| static const SCEVAddRecExpr * | findAddRecForLoop (const SCEV *S, const Loop *L) |
Variables | |
| iv | users |
| iv Induction Variable | Users |
| iv Induction Variable | false |
| #define DEBUG_TYPE "iv-users" |
Definition at line 32 of file IVUsers.cpp.
Definition at line 339 of file IVUsers.cpp.
References llvm::Add, llvm::dyn_cast(), and findAddRecForLoop().
Referenced by findAddRecForLoop(), and llvm::IVUsers::getStride().
| INITIALIZE_PASS_BEGIN | ( | IVUsersWrapperPass | , |
| "iv-users" | , | ||
| "Induction Variable Users" | , | ||
| false | , | ||
| true | ) |
References INITIALIZE_PASS_DEPENDENCY.
|
static |
isInteresting - Test whether the given expression is "interesting" when used by the given expression, within the context of analyzing the given loop.
Definition at line 56 of file IVUsers.cpp.
References llvm::Add, llvm::dyn_cast(), llvm::LoopInfoBase< BlockT, LoopT >::getLoopFor(), llvm::ScalarEvolution::getSCEVAtScope(), I, and isInteresting().
Referenced by llvm::IVUsers::AddUsersIfInteresting(), llvm::ChangeReporter< IRUnitT >::handleIRAfterPass(), isInteresting(), llvm::PrintCrashIRInstrumentation::registerCallbacks(), llvm::ChangeReporter< IRUnitT >::saveIRBeforePass(), and shouldConvertOrWithNoCommonBitsToAdd().
|
static |
IVUseShouldUsePostIncValue - We have discovered a "User" of an IV expression and now we need to decide whether the user should use the preinc or post-inc value.
If this user should use the post-inc version of the IV, return true.
Choosing wrong here can break dominance properties (if we choose to use the post-inc value when we cannot) or it can end up adding extra live-ranges to the loop, resulting in reg-reg copies (if we use the pre-inc value when we should use the post-inc value).
Definition at line 97 of file IVUsers.cpp.
References llvm::DominatorTree::dominates(), llvm::dyn_cast(), llvm::PHINode::getIncomingBlock(), llvm::PHINode::getIncomingValue(), and llvm::PHINode::getNumIncomingValues().
Referenced by llvm::IVUsers::AddUsersIfInteresting().
| iv Induction Variable false |
Definition at line 49 of file IVUsers.cpp.
| iv Induction Variable Users |
Definition at line 48 of file IVUsers.cpp.
Referenced by collectUsersRecursively(), createOutlinedFunction(), llvm::DemotePHIToStack(), llvm::findDefsUsedOutsideOfLoop(), llvm::ScalarEvolution::forgetBlockAndLoopDispositions(), insertTrivialPHIs(), isAllocSiteRemovable(), isPossibleIndirectCallTarget(), isProfitableChain(), legalizeAndOptimizeInductions(), locateDestination(), llvm::slpvectorizer::BoUpSLP::reorderBottomToTop(), replaceWithConstant(), llvm::CoroAnnotationElidePass::run(), sink(), llvm::MachineRegisterInfo::updateDbgUsersToReg(), and llvm::InstCombinerImpl::visitAllocSite().
| iv users |
Definition at line 48 of file IVUsers.cpp.
Referenced by computeFunctionSummary(), llvm::AnyCoroIdInst::getCoroAlloc(), llvm::AnyCoroIdInst::getCoroBegin(), llvm::GCStatepointInst::getGCRelocates(), llvm::SelectionDAG::getStackArgumentTokenFactor(), llvm::isInlineViable(), and llvm::VPBlendRecipe::onlyFirstLaneUsed().