llvm-6502/lib/Analysis
Evan Cheng 586f69a118 - Teach LSR to avoid changing cmp iv stride if it will create an immediate that
cannot be folded into target cmp instruction.
- Avoid a phase ordering issue where early cmp optimization would prevent the
  later count-to-zero optimization.
- Add missing checks which could cause LSR to reuse stride that does not have
  users.
- Fix a bug in count-to-zero optimization code which failed to find the pre-inc
  iv's phi node.
- Remove, tighten, loosen some incorrect checks disable valid transformations.
- Quite a bit of code clean up.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@86969 91177308-0d34-0410-b5e6-96231b3b80d8
2009-11-12 07:35:05 +00:00
..
IPA Fix DenseMap iterator constness. 2009-11-10 01:02:17 +00:00
AliasAnalysis.cpp Remove AllocationInst. Since MallocInst went away, AllocaInst is the only subclass of AllocationInst, so it no longer is necessary. 2009-10-23 21:09:37 +00:00
AliasAnalysisCounter.cpp Remove includes of Support/Compiler.h that are no longer needed after the 2009-10-25 06:57:41 +00:00
AliasAnalysisEvaluator.cpp Remove includes of Support/Compiler.h that are no longer needed after the 2009-10-25 06:57:41 +00:00
AliasDebugger.cpp Remove includes of Support/Compiler.h that are no longer needed after the 2009-10-25 06:57:41 +00:00
AliasSetTracker.cpp remove unneeded checks of isFreeCall 2009-11-03 05:35:19 +00:00
Analysis.cpp Tidy #includes. 2009-08-11 16:02:12 +00:00
BasicAliasAnalysis.cpp Default-addressspace null pointers don't alias anything. This allows 2009-11-09 19:29:11 +00:00
CaptureTracking.cpp remove a check of isFreeCall: the argument to free is already nocapture so the generic call code works fine. 2009-11-03 05:34:51 +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 Stub out a new lazy value info pass, which will eventually 2009-11-11 00:22:30 +00:00
ConstantFolding.cpp fix ConstantFoldCompareInstOperands to take the LHS/RHS as 2009-11-09 23:06:58 +00:00
DbgInfoPrinter.cpp Remove VISIBILITY_HIDDEN from class/struct found inside anonymous namespaces. 2009-10-25 06:33:48 +00:00
DebugInfo.cpp Do not use StringRef in DebugInfo interface. 2009-11-12 00:50:58 +00:00
DomPrinter.cpp fix the other issue with ID's, hopefully really fixing the linux build. 2009-10-18 04:58:34 +00:00
InlineCost.cpp Add a missing closing parenthesis, and tweak to fit in 80 2009-11-01 19:12:43 +00:00
InstCount.cpp Remove FreeInst. 2009-10-26 23:43:48 +00:00
InstructionSimplify.cpp move some generally useful functions out of jump threading 2009-11-10 22:26:15 +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 - Teach LSR to avoid changing cmp iv stride if it will create an immediate that 2009-11-12 07:35:05 +00:00
LazyValueInfo.cpp various fixes to the lattice transfer functions. 2009-11-12 04:57:13 +00:00
LibCallAliasAnalysis.cpp
LibCallSemantics.cpp
LiveValues.cpp remove redundant foward declaration. This function is already in 2009-11-11 00:21:21 +00:00
LoopDependenceAnalysis.cpp remove a few dead insertion methods. 2009-08-24 02:39:26 +00:00
LoopInfo.cpp Minor tidiness fixes. 2009-11-09 18:19:43 +00:00
LoopPass.cpp Fix this debug output to handle the case where the loop has been deleted. 2009-09-28 15:40:01 +00:00
Makefile
MemoryBuiltins.cpp Update computeArraySize() to use ComputeMultiple() to determine the array size associated with a malloc; also extend PerformHeapAllocSRoA() to check if the optimized malloc's arg had its highest bit set, so that it is safe for ComputeMultiple() to look through sext instructions while determining the optimized malloc's array size 2009-11-10 08:32:25 +00:00
MemoryDependenceAnalysis.cpp Treat lifetime begin/end markers as allocations/frees respectively for the 2009-10-28 07:05:35 +00:00
PointerTracking.cpp remove a bunch of extraneous LLVMContext arguments 2009-11-06 04:27:31 +00:00
PostDominators.cpp Change Pass::print to take a raw ostream instead of std::ostream, 2009-08-23 06:03:38 +00:00
ProfileEstimatorPass.cpp Remove VISIBILITY_HIDDEN from class/struct found inside anonymous namespaces. 2009-10-25 06:33:48 +00:00
ProfileInfo.cpp Remove includes of Support/Compiler.h that are no longer needed after the 2009-10-25 06:57:41 +00:00
ProfileInfoLoader.cpp Reapplied r81355 with the problems fixed. 2009-09-16 11:35:50 +00:00
ProfileInfoLoaderPass.cpp Apply fix for PR5135, Credit to Andreas Neustifter. 2009-11-02 02:55:39 +00:00
ProfileVerifierPass.cpp Apply fix for PR5135, Credit to Andreas Neustifter. 2009-11-02 02:55:39 +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 Pass the (optional) TargetData object to ConstantFoldInstOperands 2009-11-09 23:34:17 +00:00
ScalarEvolutionAliasAnalysis.cpp Make ScalarEvolutionAliasAnalysis slightly more aggressive, by making an 2009-10-31 14:32:25 +00:00
ScalarEvolutionExpander.cpp Introduce and use convenience methods for getting pointer types 2009-10-06 15:40:36 +00:00
SparsePropagation.cpp rename indbr -> indirectbr to appease the residents of #llvm. 2009-10-28 00:19:10 +00:00
Trace.cpp eliminate the "Value" printing methods that print to a std::ostream. 2009-08-23 04:37:46 +00:00
ValueTracking.cpp Add ComputeMultiple() analysis function that recursively determines if a Value V is a multiple of unsigned Base 2009-11-10 08:28:35 +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.

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