llvm-6502/lib/Analysis
Andrew Trick cbf24b4e58 Move the implementation of LoopInfo into LoopInfoImpl.h.
The implementation only needs inclusion from LoopInfo.cpp and
MachineLoopInfo.cpp. Clients of the interface should only include the
interface. This makes the interface readable and speeds up rebuilds
after modifying the implementation.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@158787 91177308-0d34-0410-b5e6-96231b3b80d8
2012-06-20 03:42:09 +00:00
..
IPA Handle intrinsics in GlobalsModRef. Fixes pr12351. 2012-03-28 21:31:24 +00:00
AliasAnalysis.cpp Move the capture analysis from MemoryDependencyAnalysis to a more general place 2012-05-14 20:35:04 +00:00
AliasAnalysisCounter.cpp
AliasAnalysisEvaluator.cpp
AliasDebugger.cpp
AliasSetTracker.cpp
Analysis.cpp
BasicAliasAnalysis.cpp Duncan pointed out that if the alignment isn't explicitly specified, it defaults to the ABI alignment. Given that, make this code a bit more aggressive in such cases. 2012-02-27 23:16:46 +00:00
BlockFrequencyInfo.cpp
BranchProbabilityInfo.cpp
CaptureTracking.cpp Fix intendation. 2012-05-10 23:38:07 +00:00
CFGPrinter.cpp
CMakeLists.txt Pull the implementation of the code metrics out of the inline cost 2012-03-16 05:51:52 +00:00
CodeMetrics.cpp A pile of long over-due refactorings here. There are some very, *very* 2012-05-04 00:58:03 +00:00
ConstantFolding.cpp Reapply r155682, making constant folding more consistent, with a fix to work 2012-04-27 17:50:22 +00:00
DbgInfoPrinter.cpp
DebugInfo.cpp Actually support DW_TAG_rvalue_reference_type that we were trying 2012-05-19 01:36:37 +00:00
DIBuilder.cpp Add support for enum forward declarations. 2012-06-01 00:22:32 +00:00
DominanceFrontier.cpp
DomPrinter.cpp
InlineCost.cpp Fix typos found by http://github.com/lyda/misspell-check 2012-06-02 10:20:22 +00:00
InstCount.cpp
InstructionSimplify.cpp Remove extraneous ';'. 2012-05-17 20:27:58 +00:00
Interval.cpp
IntervalPartition.cpp
IVUsers.cpp Cleanup IVUsers::addUsersIfInteresting. 2012-03-22 17:47:33 +00:00
LazyValueInfo.cpp allow LazyValueInfo::getEdgeValue() to reason about multiple edges from the same switch instruction by doing union of ranges (which may still be conservative, but it's more aggressive than before) 2012-05-18 21:02:10 +00:00
LibCallAliasAnalysis.cpp
LibCallSemantics.cpp
Lint.cpp Always compute all the bits in ComputeMaskedBits. 2012-04-04 12:51:34 +00:00
LLVMBuild.txt
Loads.cpp enhance jump threading to preserve TBAA information when PRE'ing loads, 2012-03-13 18:07:41 +00:00
LoopDependenceAnalysis.cpp
LoopInfo.cpp Move the implementation of LoopInfo into LoopInfoImpl.h. 2012-06-20 03:42:09 +00:00
LoopPass.cpp Take out the debug info probe stuff. It's making some changes to 2012-03-23 03:54:05 +00:00
Makefile
MemDepPrinter.cpp Mark some static arrays as const. 2012-05-24 06:35:32 +00:00
MemoryBuiltins.cpp remove calls to calloc if the allocated memory is not used (it was already being done for malloc) 2012-05-03 22:08:19 +00:00
MemoryDependenceAnalysis.cpp Fix typos found by http://github.com/lyda/misspell-check 2012-06-02 10:20:22 +00:00
ModuleDebugInfoPrinter.cpp
NoAliasAnalysis.cpp
PathNumbering.cpp
PathProfileInfo.cpp
PathProfileVerifier.cpp
PHITransAddr.cpp Uniformize the InstructionSimplify interface by ensuring that all routines 2012-03-13 11:42:19 +00:00
PostDominators.cpp
ProfileEstimatorPass.cpp
ProfileInfo.cpp
ProfileInfoLoader.cpp Round 2 of dead private variable removal. 2012-06-06 19:47:08 +00:00
ProfileInfoLoaderPass.cpp Round 2 of dead private variable removal. 2012-06-06 19:47:08 +00:00
ProfileVerifierPass.cpp
README.txt
RegionInfo.cpp Rename the Region::block_iterator to Region::block_node_iterator, and 2012-05-04 20:55:23 +00:00
RegionPass.cpp Rename the Region::block_iterator to Region::block_node_iterator, and 2012-05-04 20:55:23 +00:00
RegionPrinter.cpp Rename the Region::block_iterator to Region::block_node_iterator, and 2012-05-04 20:55:23 +00:00
ScalarEvolution.cpp Fix typos found by http://github.com/lyda/misspell-check 2012-06-02 10:20:22 +00:00
ScalarEvolutionAliasAnalysis.cpp
ScalarEvolutionExpander.cpp LSR fix: add a missing phi check during IV hoisting. 2012-05-22 17:39:59 +00:00
ScalarEvolutionNormalization.cpp
SparsePropagation.cpp Taken into account Duncan's comments for r149481 dated by 2nd Feb 2012: 2012-03-08 07:06:20 +00:00
Trace.cpp
TypeBasedAliasAnalysis.cpp
ValueTracking.cpp Teach DeadStoreElimination to eliminate exit-block stores with phi addresses. 2012-05-10 18:57:38 +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))

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