llvm-6502/lib/Analysis
Duncan Sands 7c422ac216 Partially address a README by having functionattrs consider calls to
memcpy, memset and other intrinsics that only access their arguments
to be readnone if the intrinsic's arguments all point to local memory.
This improves the testcase in the README to readonly, but it could in
theory be made readnone, however this would involve more sophisticated
analysis that looks through the memcpy.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@92829 91177308-0d34-0410-b5e6-96231b3b80d8
2010-01-06 08:45:52 +00:00
..
IPA Change dbgs() back to errs() for assert messages as Chris requested. 2009-12-23 23:14:41 +00:00
AliasAnalysis.cpp Partially address a README by having functionattrs consider calls to 2010-01-06 08:45:52 +00:00
AliasAnalysisCounter.cpp Change dbgs() back to errs() as Chris requested. 2009-12-23 22:49:57 +00:00
AliasAnalysisEvaluator.cpp Change dbgs() back to errs() as Chris requested. 2009-12-23 22:49:57 +00:00
AliasDebugger.cpp
AliasSetTracker.cpp Change dbgs() back to errs() as Chris requested. 2009-12-23 22:49:57 +00:00
Analysis.cpp
BasicAliasAnalysis.cpp
CaptureTracking.cpp Reuse the Threshold value to size these containers because it's 2009-12-09 18:48:53 +00:00
CFGPrinter.cpp
CMakeLists.txt add to cmake 2009-12-04 04:15:36 +00:00
ConstantFolding.cpp constant fold nasty constant expressions formed by llvm-gcc, 2010-01-02 01:22:23 +00:00
DbgInfoPrinter.cpp Remove dead debug info intrinsics. 2010-01-05 01:10:40 +00:00
DebugInfo.cpp Convert a ton of simple integer type equality tests to the new predicate. 2010-01-05 20:07:06 +00:00
DomPrinter.cpp
InlineCost.cpp
InstCount.cpp Change dbgs() back to errs() as Chris requested. 2009-12-23 23:29:28 +00:00
InstructionSimplify.cpp
Interval.cpp
IntervalPartition.cpp
IVUsers.cpp Convert debug messages to use dbgs(). Generally this means 2009-12-23 20:20:46 +00:00
LazyValueInfo.cpp Convert debug messages to use dbgs(). Generally this means 2009-12-23 20:43:58 +00:00
LibCallAliasAnalysis.cpp
LibCallSemantics.cpp
LiveValues.cpp
LoopDependenceAnalysis.cpp Convert debug messages to use dbgs(). Generally this means 2009-12-23 20:52:41 +00:00
LoopInfo.cpp Restore dump() methods to Loop and MachineLoop. 2010-01-05 21:08:02 +00:00
LoopPass.cpp
Makefile
MemoryBuiltins.cpp
MemoryDependenceAnalysis.cpp The phi translated pointer can be computed when returning a partially cached result 2009-12-22 04:25:02 +00:00
PHITransAddr.cpp Change dbgs() back to errs() as Chris requested. 2009-12-23 23:27:15 +00:00
PointerTracking.cpp
PostDominators.cpp Convert debug messages to use dbgs(). Generally this means 2009-12-23 21:16:54 +00:00
ProfileEstimatorPass.cpp Convert debug messages to use dbgs(). Generally this means 2009-12-23 21:27:29 +00:00
ProfileInfo.cpp Change dbgs() back to errs() for assert messages as Chris requested. 2009-12-23 22:59:29 +00:00
ProfileInfoLoader.cpp
ProfileInfoLoaderPass.cpp Change dbgs() back to errs() for assert messages as Chris requested. 2009-12-23 23:00:50 +00:00
ProfileVerifierPass.cpp Convert debug messages to use dbgs(). Generally this means 2009-12-23 22:10:20 +00:00
README.txt
ScalarEvolution.cpp Remove dump routine and the associated Debug.h from a header. Patch up 2009-12-23 22:58:38 +00:00
ScalarEvolutionAliasAnalysis.cpp
ScalarEvolutionExpander.cpp Fix a comment typo. 2009-12-04 01:33:04 +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 remaining stuff to the isInteger predicate. 2010-01-05 21:05:54 +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.

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