llvm-6502/lib/Analysis
Owen Anderson 082bf2a977 Refactor code-size reduction estimation methods out of InlineCostAnalyzer and into CodeMetrics. They
don't use any InlineCostAnalyzer state, and are useful for other clients who don't necessarily want to use
all of InlineCostAnalyzer's logic, some of which is fairly inlining-specific.

No intended functionality change.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@113499 91177308-0d34-0410-b5e6-96231b3b80d8
2010-09-09 16:56:42 +00:00
..
IPA dead method. 2010-09-04 18:19:16 +00:00
AliasAnalysis.cpp Add a new experimental generalized dependence query interface to 2010-09-08 01:32:20 +00:00
AliasAnalysisCounter.cpp Reapply r110396, with fixes to appease the Linux buildbot gods. 2010-08-06 18:33:48 +00:00
AliasAnalysisEvaluator.cpp Reapply r110396, with fixes to appease the Linux buildbot gods. 2010-08-06 18:33:48 +00:00
AliasDebugger.cpp Reapply r110396, with fixes to appease the Linux buildbot gods. 2010-08-06 18:33:48 +00:00
AliasSetTracker.cpp Don't print two "0x" prefixes. Use a raw_ostream overload instead of llvm::format. 2010-08-30 14:46:53 +00:00
Analysis.cpp
BasicAliasAnalysis.cpp Add a new experimental generalized dependence query interface to 2010-09-08 01:32:20 +00:00
CaptureTracking.cpp simplify 2010-07-28 10:57:28 +00:00
CFGPrinter.cpp zap dead code. 2010-09-04 18:12:00 +00:00
CMakeLists.txt Fix CMake build 2010-08-03 02:38:20 +00:00
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 Reapply r110396, with fixes to appease the Linux buildbot gods. 2010-08-06 18:33:48 +00:00
InlineCost.cpp Refactor code-size reduction estimation methods out of InlineCostAnalyzer and into CodeMetrics. They 2010-09-09 16:56:42 +00:00
InstCount.cpp Revert r111082. No warnings for this common pattern. 2010-08-15 10:27:23 +00:00
InstructionSimplify.cpp
Interval.cpp
IntervalPartition.cpp Reapply r110396, with fixes to appease the Linux buildbot gods. 2010-08-06 18:33:48 +00:00
IVUsers.cpp stop forcing a noop AssemblyAnnotationWriter to silence #uses 2010-09-02 23:03:10 +00:00
LazyValueInfo.cpp Clean up some of the PassRegistry implementation, and pImpl-ize it to reduce #include clutter 2010-09-07 19:16:25 +00:00
LibCallAliasAnalysis.cpp Thread const correctness through a bunch of AliasAnalysis interfaces and 2010-08-03 21:48:53 +00:00
LibCallSemantics.cpp Thread const correctness through a bunch of AliasAnalysis interfaces and 2010-08-03 21:48:53 +00:00
Lint.cpp zap dead code. 2010-09-04 18:12:00 +00:00
LiveValues.cpp Reapply r110396, with fixes to appease the Linux buildbot gods. 2010-08-06 18:33:48 +00:00
Loads.cpp
LoopDependenceAnalysis.cpp
LoopInfo.cpp pull a simple method out of LICM into a new 2010-09-06 01:05:37 +00:00
LoopPass.cpp zap dead code. 2010-09-04 18:12:00 +00:00
Makefile
MemoryBuiltins.cpp
MemoryDependenceAnalysis.cpp cleanup some of the lifetime/invariant marker stuff, add a big fixme. 2010-09-06 03:58:04 +00:00
ModuleDebugInfoPrinter.cpp Reapply r110396, with fixes to appease the Linux buildbot gods. 2010-08-06 18:33:48 +00:00
PHITransAddr.cpp
PointerTracking.cpp Reapply r110396, with fixes to appease the Linux buildbot gods. 2010-08-06 18:33:48 +00:00
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 Reapply r110396, with fixes to appease the Linux buildbot gods. 2010-08-06 18:33:48 +00:00
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 Reapply r110396, with fixes to appease the Linux buildbot gods. 2010-08-06 18:33:48 +00:00
README.txt
RegionInfo.cpp RegionInfo: Do not assert if a BB is not part of the dominance tree. 2010-08-10 09:54:35 +00:00
RegionPrinter.cpp Reapply r110396, with fixes to appease the Linux buildbot gods. 2010-08-06 18:33:48 +00:00
ScalarEvolution.cpp Reapply r112432, now that the real problem is addressed. 2010-08-31 22:53:17 +00:00
ScalarEvolutionAliasAnalysis.cpp Reapply r110396, with fixes to appease the Linux buildbot gods. 2010-08-06 18:33:48 +00:00
ScalarEvolutionExpander.cpp Fix SCEVExpander::visitAddRecExpr so that it remembers the induction variable 2010-07-26 18:28:14 +00:00
ScalarEvolutionNormalization.cpp Disable the asserts that check that normalization is perfectly 2010-09-03 22:12:56 +00:00
SparsePropagation.cpp
Trace.cpp
TypeBasedAliasAnalysis.cpp Reapply r110396, with fixes to appease the Linux buildbot gods. 2010-08-06 18:33:48 +00:00
ValueTracking.cpp fix PR8063, a crash in globalopt in the malloc analysis code. 2010-09-05 17:20:46 +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))

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