llvm-6502/lib/Analysis
Richard Osborne 544533301e Don't infer whether a value is captured in the current function from the
'nocapture' attribute.

The nocapture attribute only specifies that no copies are made that
outlive the function. This isn't the same as there being no copies at all.
This fixes PR14045.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@167381 91177308-0d34-0410-b5e6-96231b3b80d8
2012-11-05 10:48:24 +00:00
..
IPA
AliasAnalysis.cpp
AliasAnalysisCounter.cpp
AliasAnalysisEvaluator.cpp
AliasDebugger.cpp
AliasSetTracker.cpp
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 Don't infer whether a value is captured in the current function from the 2012-11-05 10:48:24 +00:00
BlockFrequencyInfo.cpp
BranchProbabilityInfo.cpp
CaptureTracking.cpp
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 ConstantFolding.cpp: Whitespace. 2012-11-05 00:11:11 +00:00
CostModel.cpp CostModel: add support for Vector Insert and Extract. 2012-11-02 22:31:56 +00:00
DbgInfoPrinter.cpp
DependenceAnalysis.cpp Fix a couple of comment typos. 2012-10-31 11:25:32 +00:00
DominanceFrontier.cpp
DomPrinter.cpp
InlineCost.cpp Revert the majority of the next patch in the address space series: 2012-11-01 09:14:31 +00:00
InstCount.cpp
InstructionSimplify.cpp Revert the majority of the next patch in the address space series: 2012-11-01 09:14:31 +00:00
Interval.cpp
IntervalPartition.cpp
IVUsers.cpp
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 Revert the series of commits starting with r166578 which introduced the 2012-11-01 08:07:29 +00:00
LLVMBuild.txt
Loads.cpp
LoopInfo.cpp
LoopPass.cpp
Makefile
MemDepPrinter.cpp
MemoryBuiltins.cpp Revert the series of commits starting with r166578 which introduced the 2012-11-01 08:07:29 +00:00
MemoryDependenceAnalysis.cpp
ModuleDebugInfoPrinter.cpp
NoAliasAnalysis.cpp
PathNumbering.cpp
PathProfileInfo.cpp
PathProfileVerifier.cpp
PHITransAddr.cpp
PostDominators.cpp
ProfileDataLoader.cpp Remove code to saturate profile counts. 2012-10-29 17:27:39 +00:00
ProfileDataLoaderPass.cpp
ProfileEstimatorPass.cpp
ProfileInfo.cpp
ProfileInfoLoader.cpp
ProfileInfoLoaderPass.cpp
ProfileVerifierPass.cpp
README.txt
RegionInfo.cpp
RegionPass.cpp
RegionPrinter.cpp
ScalarEvolution.cpp Revert the series of commits starting with r166578 which introduced the 2012-11-01 08:07:29 +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
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))

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