llvm-6502/lib/Analysis
Chandler Carruth 84bcf93e0f Move the InstVisitor utility into VMCore where it belongs. It heavily
depends on the IR infrastructure, there is no sense in it being off in
Support land.

This is in preparation to start working to expand InstVisitor into more
special-purpose visitors that are still generic and can be re-used
across different passes. The expansion will go into the Analylis tree
though as nothing in VMCore needs it.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@168972 91177308-0d34-0410-b5e6-96231b3b80d8
2012-11-30 03:08:41 +00:00
..
IPA Add doInitialization and doFinalization methods to ModulePass's, to allow them to be re-initialized and reused on multiple Module's. 2012-11-15 00:14:15 +00:00
AliasAnalysis.cpp Use the attribute enums to query if a parameter has an attribute. 2012-10-09 21:38:14 +00:00
AliasAnalysisCounter.cpp
AliasAnalysisEvaluator.cpp
AliasDebugger.cpp
AliasSetTracker.cpp Move TargetData to DataLayout. 2012-10-08 16:38:25 +00:00
Analysis.cpp Add a cost model analysis that allows us to estimate the cost of IR-level instructions. 2012-11-02 21:48:17 +00:00
BasicAliasAnalysis.cpp Phi speculation improvement for BasicAA 2012-11-17 02:33:15 +00:00
BlockFrequencyInfo.cpp
BranchProbabilityInfo.cpp BranchProb: modify the definition of an edge in BranchProbabilityInfo to handle 2012-08-24 18:14:27 +00:00
CaptureTracking.cpp Give CaptureTracker::shouldExplore a base implementation. Most users want to do 2012-10-08 22:12:48 +00:00
CFGPrinter.cpp
CMakeLists.txt Add a cost model analysis that allows us to estimate the cost of IR-level instructions. 2012-11-02 21:48:17 +00:00
CodeMetrics.cpp Revert the majority of the next patch in the address space series: 2012-11-01 09:14:31 +00:00
ConstantFolding.cpp llvm/ConstantFolding.cpp: Make ReadDataFromGlobal() and FoldReinterpretLoadFromConstPtr() Big-endian-aware. 2012-11-08 20:34:25 +00:00
CostModel.cpp CostModel: add support for Vector Insert and Extract. 2012-11-02 22:31:56 +00:00
DbgInfoPrinter.cpp Move lib/Analysis/DebugInfo.cpp to lib/VMCore/DebugInfo.cpp and 2012-06-28 00:05:13 +00:00
DependenceAnalysis.cpp Modified dump() to provide a little 2012-11-30 00:44:47 +00:00
DominanceFrontier.cpp Release build: guard dump functions with 2012-09-12 05:06:18 +00:00
DomPrinter.cpp
InlineCost.cpp Move the InstVisitor utility into VMCore where it belongs. It heavily 2012-11-30 03:08:41 +00:00
InstCount.cpp Move the InstVisitor utility into VMCore where it belongs. It heavily 2012-11-30 03:08:41 +00:00
InstructionSimplify.cpp Fast-math optimization: fold multiply by zero 2012-11-27 00:46:26 +00:00
Interval.cpp Revert 'Fix a typo 'iff' => 'if''. iff is an abreviation of if and only if. See: http://en.wikipedia.org/wiki/If_and_only_if Commit 164767 2012-09-27 10:14:43 +00:00
IntervalPartition.cpp
IVUsers.cpp Move TargetData to DataLayout. 2012-10-08 16:38:25 +00:00
LazyValueInfo.cpp Hoist out some work done inside a loop doing a linear scan over all 2012-10-26 04:43:47 +00:00
LibCallAliasAnalysis.cpp
LibCallSemantics.cpp
Lint.cpp Move the InstVisitor utility into VMCore where it belongs. It heavily 2012-11-30 03:08:41 +00:00
LLVMBuild.txt
Loads.cpp Move TargetData to DataLayout. 2012-10-08 16:38:25 +00:00
LoopInfo.cpp Release build: guard dump functions with 2012-09-12 05:06:18 +00:00
LoopPass.cpp Enable the new LoopInfo algorithm by default. 2012-06-26 04:11:38 +00:00
Makefile
MemDepPrinter.cpp Mark some static arrays as const. 2012-05-24 06:35:32 +00:00
MemoryBuiltins.cpp Revert the series of commits starting with r166578 which introduced the 2012-11-01 08:07:29 +00:00
MemoryDependenceAnalysis.cpp Ignore unreachable blocks when doing memory dependence analysis on non-local 2012-10-23 18:37:11 +00:00
ModuleDebugInfoPrinter.cpp Move lib/Analysis/DebugInfo.cpp to lib/VMCore/DebugInfo.cpp and 2012-06-28 00:05:13 +00:00
NoAliasAnalysis.cpp Move TargetData to DataLayout. 2012-10-08 16:38:25 +00:00
PathNumbering.cpp Move llvm/Support/TypeBuilder.h -> llvm/TypeBuilder.h. This completes 2012-07-15 23:45:24 +00:00
PathProfileInfo.cpp
PathProfileVerifier.cpp
PHITransAddr.cpp Release build: guard dump functions with 2012-09-12 05:06:18 +00:00
PostDominators.cpp
ProfileDataLoader.cpp Remove code to saturate profile counts. 2012-10-29 17:27:39 +00:00
ProfileDataLoaderPass.cpp Cleanups due to feedback. No functionality change. Patch by Alistair. 2012-08-31 05:18:31 +00:00
ProfileEstimatorPass.cpp Fix floating-point divide by zero, in a case where the value was not going to be used anyway. 2012-08-24 00:31:45 +00:00
ProfileInfo.cpp Profile: set branch weight metadata with data generated from profiling. 2012-08-28 22:21:25 +00:00
ProfileInfoLoader.cpp Remove unused private member variables uncovered by the recent changes to clang's -Wunused-private-field. 2012-07-20 22:05:57 +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 Release build: guard dump functions with 2012-09-12 05:06:18 +00:00
RegionPass.cpp Remove the the block_node_iterator of Region, replace it by the block_iterator. 2012-08-27 13:49:24 +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 Follow up to 168711: It's safe to base this analysis on the found compare, just return the value for the right predicate. 2012-11-29 19:07:57 +00:00
ScalarEvolutionAliasAnalysis.cpp
ScalarEvolutionExpander.cpp Revert the series of commits starting with r166578 which introduced the 2012-11-01 08:07:29 +00:00
ScalarEvolutionNormalization.cpp
SparsePropagation.cpp
Trace.cpp Release build: guard dump functions with 2012-09-12 05:06:18 +00:00
TypeBasedAliasAnalysis.cpp
ValueTracking.cpp Revert the majority of the next patch in the address space series: 2012-11-01 09:14:31 +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))

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