mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2024-11-24 19:52:54 +01:00
90a71c8d58
Methods `computeExitLimitFromCondCached` and `computeExitLimitFromCondImpl` take true and false branches as parameters and only use them for asserts and for identifying whether true/false branch belongs to the loop (which can be done once earlier). This fact complicates generalization of exit limit computation logic on guards because the guards don't have blocks to which they go in case of failure explicitly. The motivation of this patch is that currently this part of SCEV knows nothing about guards and only works with explicit branches. As result, it fails to prove that a loop for (i = 0; i < 100; i++) guard(i < 10); exits after 10th iteration, while in the equivalent example for (i = 0; i < 100; i++) if (i >= 10) break; SCEV easily proves this fact. We are going to change it in near future, and this is why we need to make these methods operate on more abstract level. This patch refactors this code to get rid of these parameters as meaningless and prepare ground for teaching these methods to work with guards as well as they work with explicit branching instructions. Differential Revision: https://reviews.llvm.org/D44419 llvm-svn: 327615 |
||
---|---|---|
.. | ||
AliasAnalysis.h | ||
AliasAnalysisEvaluator.h | ||
AliasSetTracker.h | ||
AssumptionCache.h | ||
BasicAliasAnalysis.h | ||
BlockFrequencyInfo.h | ||
BlockFrequencyInfoImpl.h | ||
BranchProbabilityInfo.h | ||
CallGraph.h | ||
CallGraphSCCPass.h | ||
CallPrinter.h | ||
CaptureTracking.h | ||
CFG.h | ||
CFGPrinter.h | ||
CFLAliasAnalysisUtils.h | ||
CFLAndersAliasAnalysis.h | ||
CFLSteensAliasAnalysis.h | ||
CGSCCPassManager.h | ||
CmpInstAnalysis.h | ||
CodeMetrics.h | ||
ConstantFolding.h | ||
DemandedBits.h | ||
DependenceAnalysis.h | ||
DivergenceAnalysis.h | ||
DominanceFrontier.h | ||
DominanceFrontierImpl.h | ||
DomPrinter.h | ||
DOTGraphTraitsPass.h | ||
EHPersonalities.h | ||
GlobalsModRef.h | ||
IndirectCallPromotionAnalysis.h | ||
IndirectCallSiteVisitor.h | ||
InlineCost.h | ||
InstructionSimplify.h | ||
Interval.h | ||
IntervalIterator.h | ||
IntervalPartition.h | ||
IteratedDominanceFrontier.h | ||
IVUsers.h | ||
LazyBlockFrequencyInfo.h | ||
LazyBranchProbabilityInfo.h | ||
LazyCallGraph.h | ||
LazyValueInfo.h | ||
Lint.h | ||
Loads.h | ||
LoopAccessAnalysis.h | ||
LoopAnalysisManager.h | ||
LoopInfo.h | ||
LoopInfoImpl.h | ||
LoopIterator.h | ||
LoopPass.h | ||
LoopUnrollAnalyzer.h | ||
MemoryBuiltins.h | ||
MemoryDependenceAnalysis.h | ||
MemoryLocation.h | ||
MemorySSA.h | ||
MemorySSAUpdater.h | ||
ModuleSummaryAnalysis.h | ||
ObjCARCAliasAnalysis.h | ||
ObjCARCAnalysisUtils.h | ||
ObjCARCInstKind.h | ||
ObjectUtils.h | ||
OptimizationRemarkEmitter.h | ||
OrderedBasicBlock.h | ||
Passes.h | ||
PHITransAddr.h | ||
PostDominators.h | ||
ProfileSummaryInfo.h | ||
PtrUseVisitor.h | ||
RegionInfo.h | ||
RegionInfoImpl.h | ||
RegionIterator.h | ||
RegionPass.h | ||
RegionPrinter.h | ||
ScalarEvolution.h | ||
ScalarEvolutionAliasAnalysis.h | ||
ScalarEvolutionExpander.h | ||
ScalarEvolutionExpressions.h | ||
ScalarEvolutionNormalization.h | ||
ScopedNoAliasAA.h | ||
SparsePropagation.h | ||
SyntheticCountsUtils.h | ||
TargetFolder.h | ||
TargetLibraryInfo.def | ||
TargetLibraryInfo.h | ||
TargetTransformInfo.h | ||
TargetTransformInfoImpl.h | ||
Trace.h | ||
TypeBasedAliasAnalysis.h | ||
TypeMetadataUtils.h | ||
ValueLattice.h | ||
ValueLatticeUtils.h | ||
ValueTracking.h | ||
VectorUtils.h |