mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2024-09-10 22:55:57 +00:00
void f(int* begin, int* end) { std::fill(begin, end, 0); } which turns into a != exit expression where one pointer is strided and (thanks to step #1) known to not overflow, and the other is loop invariant. The observation here is that, though the IV is strided by 4 in this case, that the IV *has* to become equal to the end value. It cannot "miss" the end value by stepping over it, because if it did, the strided IV expression would eventually wrap around. Handle this by turning A != B into "A-B != 0" where the A-B part is known to be NUW. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@123131 91177308-0d34-0410-b5e6-96231b3b80d8 |
||
---|---|---|
.. | ||
AliasAnalysis.h | ||
AliasSetTracker.h | ||
CallGraph.h | ||
CaptureTracking.h | ||
CFGPrinter.h | ||
CodeMetrics.h | ||
ConstantFolding.h | ||
ConstantsScanner.h | ||
DebugInfo.h | ||
DIBuilder.h | ||
DominanceFrontier.h | ||
DominatorInternals.h | ||
Dominators.h | ||
DomPrinter.h | ||
DOTGraphTraitsPass.h | ||
FindUsedTypes.h | ||
InlineCost.h | ||
InstructionSimplify.h | ||
Interval.h | ||
IntervalIterator.h | ||
IntervalPartition.h | ||
IVUsers.h | ||
LazyValueInfo.h | ||
LibCallAliasAnalysis.h | ||
LibCallSemantics.h | ||
Lint.h | ||
LiveValues.h | ||
Loads.h | ||
LoopDependenceAnalysis.h | ||
LoopInfo.h | ||
LoopPass.h | ||
MemoryBuiltins.h | ||
MemoryDependenceAnalysis.h | ||
Passes.h | ||
PHITransAddr.h | ||
PostDominators.h | ||
ProfileInfo.h | ||
ProfileInfoLoader.h | ||
ProfileInfoTypes.h | ||
RegionInfo.h | ||
RegionIterator.h | ||
RegionPass.h | ||
RegionPrinter.h | ||
ScalarEvolution.h | ||
ScalarEvolutionExpander.h | ||
ScalarEvolutionExpressions.h | ||
ScalarEvolutionNormalization.h | ||
SparsePropagation.h | ||
Trace.h | ||
ValueTracking.h | ||
Verifier.h |