llvm-6502/lib/Analysis
Jakob Stoklund Olesen f7477470d3 Try to keep the cached inliner costs around for a bit longer for big functions.
The Caller cost info would be reset everytime a callee was inlined. If the
caller has lots of calls and there is some mutual recursion going on, the
caller cost info could be calculated many times.

This patch reduces inliner runtime from 240s to 0.5s for a function with 20000
small function calls.

This is a more conservative version of r98089 that doesn't break the clang
test CodeGenCXX/temp-order.cpp. That test relies on rather extreme inlining
for constant folding.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@98099 91177308-0d34-0410-b5e6-96231b3b80d8
2010-03-09 23:02:17 +00:00
..
IPA Update CMake build. 2010-03-01 19:42:47 +00:00
AliasAnalysis.cpp Partially address a README by having functionattrs consider calls to 2010-01-06 08:45:52 +00:00
AliasAnalysisCounter.cpp Fix a missing newline in debug output. 2010-03-01 17:42:55 +00:00
AliasAnalysisEvaluator.cpp There are two ways of checking for a given type, for example isa<PointerType>(T) 2010-02-16 11:11:14 +00:00
AliasDebugger.cpp adopt getAdjustedAnalysisPointer in a few more passes. 2010-01-20 20:09:02 +00:00
AliasSetTracker.cpp Change dbgs() back to errs() as Chris requested. 2009-12-23 22:49:57 +00:00
Analysis.cpp "In order to ease automatic bindings generation, it would be helpful if boolean values were distinguishable from integers. The attached patch introduces "typedef int LLVMBool;", and uses LLVMBool instead of int throughout the C API, wherever a boolean value is called for." 2010-01-09 22:27:07 +00:00
BasicAliasAnalysis.cpp There are two ways of checking for a given type, for example isa<PointerType>(T) 2010-02-16 11:11:14 +00:00
CaptureTracking.cpp There are two ways of checking for a given type, for example isa<PointerType>(T) 2010-02-16 11:11:14 +00:00
CFGPrinter.cpp Remove includes of Support/Compiler.h that are no longer needed after the 2009-10-25 06:57:41 +00:00
CMakeLists.txt add to cmake 2009-12-04 04:15:36 +00:00
ConstantFolding.cpp Remove the code which constant-folded ptrtoint(inttoptr(x)+c) to 2010-02-23 16:35:41 +00:00
DbgInfoPrinter.cpp Remove dead debug info intrinsics. 2010-01-05 01:10:40 +00:00
DebugInfo.cpp Start using DIFile. See updated SourceLevelDebugging.html for more information. 2010-03-09 00:44:10 +00:00
DomPrinter.cpp Create Generic DOTGraphTraits Printer/Viewer 2010-01-16 10:56:41 +00:00
InlineCost.cpp Try to keep the cached inliner costs around for a bit longer for big functions. 2010-03-09 23:02:17 +00:00
InstCount.cpp Change dbgs() back to errs() as Chris requested. 2009-12-23 23:29:28 +00:00
InstructionSimplify.cpp fix incorrect folding of icmp with undef, PR6481. 2010-03-03 19:46:03 +00:00
Interval.cpp Change Pass::print to take a raw ostream instead of std::ostream, 2009-08-23 06:03:38 +00:00
IntervalPartition.cpp Change Pass::print to take a raw ostream instead of std::ostream, 2009-08-23 06:03:38 +00:00
IVUsers.cpp Spelling fixes. 2010-03-01 17:49:51 +00:00
LazyValueInfo.cpp Convert debug messages to use dbgs(). Generally this means 2009-12-23 20:43:58 +00:00
LibCallAliasAnalysis.cpp LibCallAliasAnalysis doesn't use TargetData. 2009-07-31 20:56:29 +00:00
LibCallSemantics.cpp Remove Value::getNameLen 2009-07-26 08:34:35 +00:00
LiveValues.cpp Fix "the the" and similar typos. 2010-02-10 16:03:48 +00:00
LoopDependenceAnalysis.cpp Convert debug messages to use dbgs(). Generally this means 2009-12-23 20:52:41 +00:00
LoopInfo.cpp Make isLCSSA ignore uses in blocks not reachable from the entry block, 2010-03-09 01:53:33 +00:00
LoopPass.cpp eliminate a bunch more unneeded dynamic_cast's. 2010-01-22 05:37:10 +00:00
Makefile make -fno-rtti the default unless a directory builds with REQUIRES_RTTI. 2010-01-24 20:43:08 +00:00
MemoryBuiltins.cpp Fix "the the" and similar typos. 2010-02-10 16:03:48 +00:00
MemoryDependenceAnalysis.cpp Reapply r97010, the speculative revert failed. 2010-02-24 08:48:04 +00:00
PHITransAddr.cpp Reapply r97010, the speculative revert failed. 2010-02-24 08:48:04 +00:00
PointerTracking.cpp There are two ways of checking for a given type, for example isa<PointerType>(T) 2010-02-16 11:11:14 +00:00
PostDominators.cpp Convert debug messages to use dbgs(). Generally this means 2009-12-23 21:16:54 +00:00
ProfileEstimatorPass.cpp adopt getAdjustedAnalysisPointer in a few more passes. 2010-01-20 20:09:02 +00:00
ProfileInfo.cpp adopt getAdjustedAnalysisPointer in a few more passes. 2010-01-20 20:09:02 +00:00
ProfileInfoLoader.cpp Reapplied r81355 with the problems fixed. 2009-09-16 11:35:50 +00:00
ProfileInfoLoaderPass.cpp adopt getAdjustedAnalysisPointer in a few more passes. 2010-01-20 20:09:02 +00:00
ProfileVerifierPass.cpp Convert debug messages to use dbgs(). Generally this means 2009-12-23 22:10:20 +00:00
README.txt Create a README.txt for lib/Analysis, and add an entry. 2009-09-28 18:38:53 +00:00
ScalarEvolution.cpp Spelling fixes. 2010-03-01 17:49:51 +00:00
ScalarEvolutionAliasAnalysis.cpp Add a comment. 2010-03-01 17:56:04 +00:00
ScalarEvolutionExpander.cpp Another place where debug info affected codegen. 2010-03-09 01:08:11 +00:00
SparsePropagation.cpp Convert debug messages to use dbgs(). Generally this means 2009-12-23 22:28:01 +00:00
Trace.cpp Convert debug messages to use dbgs(). Generally this means 2009-12-23 22:35:10 +00:00
ValueTracking.cpp Move GetStringLength and helper from SimplifyLibCalls to ValueTracking. 2010-03-05 06:58:57 +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.

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