mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2024-11-25 20:23:11 +01:00
068181fb4a
This patch extends applyLoopGuards to detect a single-cond range check idiom that InstCombine generates. It extends applyLoopGuards to detect conditions of the form (-C1 + X < C2). InstCombine will create this form when combining two checks of the form (X u< C2 + C1) and (X >=u C1). In practice, this enables us to correctly compute a tight trip count bounds for code as in the function below. InstCombine will fold the minimum iteration check created by LoopRotate with the user check (< 8). void unsigned_check(short *pred, unsigned width) { if (width < 8) { for (int x = 0; x < width; x++) pred[x] = pred[x] * pred[x]; } } As a consequence, LLVM creates dead vector loops for the code above, e.g. see https://godbolt.org/z/cb8eTcqET https://alive2.llvm.org/ce/z/SHHW4d Reviewed By: nikic Differential Revision: https://reviews.llvm.org/D104741 |
||
---|---|---|
.. | ||
AliasSet | ||
AssumptionCache | ||
BasicAA | ||
BlockFrequencyInfo | ||
BranchProbabilityInfo | ||
CallGraph | ||
CFLAliasAnalysis | ||
CostModel | ||
DDG | ||
Delinearization | ||
DemandedBits | ||
DependenceAnalysis | ||
DivergenceAnalysis | ||
DominanceFrontier | ||
Dominators | ||
FunctionPropertiesAnalysis | ||
GlobalsModRef | ||
IRSimilarityIdentifier | ||
IVUsers | ||
LazyCallGraph | ||
LazyValueAnalysis | ||
LegacyDivergenceAnalysis | ||
Lint | ||
LoopAccessAnalysis | ||
LoopCacheAnalysis/PowerPC | ||
LoopInfo | ||
LoopNestAnalysis | ||
MemoryDependenceAnalysis | ||
MemorySSA | ||
MustExecute | ||
PhiValues | ||
PostDominators | ||
ProfileSummary | ||
RegionInfo | ||
ScalarEvolution | ||
ScopedNoAliasAA | ||
StackSafetyAnalysis | ||
TypeBasedAliasAnalysis | ||
ValueTracking | ||
alias-analysis-uses.ll |