llvm-6502/lib/Analysis
Owen Anderson 6cd2075549 In the default address space, any GEP off of null results in a trap value if you try to load it. Thus,
any load in the default address space that completes implies that the base value that it GEP'd from
was not null.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@112015 91177308-0d34-0410-b5e6-96231b3b80d8
2010-08-25 01:16:47 +00:00
..
IPA Now that PassInfo and Pass::ID have been separated, move the rest of the passes over to the new registration API. 2010-08-23 17:52:01 +00:00
AliasAnalysis.cpp
AliasAnalysisCounter.cpp
AliasAnalysisEvaluator.cpp
AliasDebugger.cpp
AliasSetTracker.cpp
Analysis.cpp
BasicAliasAnalysis.cpp refix PR1143 by making basicaa analyze zexts of indices aggresively, 2010-08-18 23:09:49 +00:00
CaptureTracking.cpp
CFGPrinter.cpp Now that PassInfo and Pass::ID have been separated, move the rest of the passes over to the new registration API. 2010-08-23 17:52:01 +00:00
CMakeLists.txt
ConstantFolding.cpp
DbgInfoPrinter.cpp Convert DbgInfoPrinter to use errs() instead of outs(). 2010-08-20 18:03:05 +00:00
DebugInfo.cpp Let FE use derived types for DW_TAG_friend. 2010-08-23 23:16:25 +00:00
DomPrinter.cpp
InlineCost.cpp
InstCount.cpp Revert r111082. No warnings for this common pattern. 2010-08-15 10:27:23 +00:00
InstructionSimplify.cpp
Interval.cpp
IntervalPartition.cpp
IVUsers.cpp Tweak IVUsers' concept of "interesting" to exclude add recurrences 2010-08-17 22:50:37 +00:00
LazyValueInfo.cpp In the default address space, any GEP off of null results in a trap value if you try to load it. Thus, 2010-08-25 01:16:47 +00:00
LibCallAliasAnalysis.cpp
LibCallSemantics.cpp
Lint.cpp Revert r111058, the lint check for indirectbr successors that aren't 2010-08-16 14:39:19 +00:00
LiveValues.cpp
Loads.cpp
LoopDependenceAnalysis.cpp
LoopInfo.cpp
LoopPass.cpp Revert r111199; it breaks -debug-pass=Structure output. 2010-08-19 01:29:07 +00:00
Makefile
MemoryBuiltins.cpp
MemoryDependenceAnalysis.cpp
ModuleDebugInfoPrinter.cpp
PHITransAddr.cpp
PointerTracking.cpp
PostDominators.cpp
ProfileEstimatorPass.cpp Now that PassInfo and Pass::ID have been separated, move the rest of the passes over to the new registration API. 2010-08-23 17:52:01 +00:00
ProfileInfo.cpp
ProfileInfoLoader.cpp
ProfileInfoLoaderPass.cpp Now that PassInfo and Pass::ID have been separated, move the rest of the passes over to the new registration API. 2010-08-23 17:52:01 +00:00
ProfileVerifierPass.cpp
README.txt
RegionInfo.cpp
RegionPrinter.cpp
ScalarEvolution.cpp To create a copy of a SmallVector with an element removed from the 2010-08-16 16:57:24 +00:00
ScalarEvolutionAliasAnalysis.cpp
ScalarEvolutionExpander.cpp
ScalarEvolutionNormalization.cpp
SparsePropagation.cpp
Trace.cpp
TypeBasedAliasAnalysis.cpp
ValueTracking.cpp move gep decomposition out of ValueTracking into BasicAA. The form of 2010-08-18 22:07:29 +00:00

Analysis Opportunities:

//===---------------------------------------------------------------------===//

In test/Transforms/LoopStrengthReduce/quadradic-exit-value.ll, the
ScalarEvolution expression for %r is this:

  {1,+,3,+,2}<loop>

Outside the loop, this could be evaluated simply as (%n * %n), however
ScalarEvolution currently evaluates it as

  (-2 + (2 * (trunc i65 (((zext i64 (-2 + %n) to i65) * (zext i64 (-1 + %n) to i65)) /u 2) to i64)) + (3 * %n))

In addition to being much more complicated, it involves i65 arithmetic,
which is very inefficient when expanded into code.

//===---------------------------------------------------------------------===//

In formatValue in test/CodeGen/X86/lsr-delayed-fold.ll,

ScalarEvolution is forming this expression:

((trunc i64 (-1 * %arg5) to i32) + (trunc i64 %arg5 to i32) + (-1 * (trunc i64 undef to i32)))

This could be folded to

(-1 * (trunc i64 undef to i32))

//===---------------------------------------------------------------------===//