llvm-6502/lib/Analysis
Chandler Carruth 426c2bf5cd Revert the majority of the next patch in the address space series:
r165941: Resubmit the changes to llvm core to update the functions to
         support different pointer sizes on a per address space basis.

Despite this commit log, this change primarily changed stuff outside of
VMCore, and those changes do not carry any tests for correctness (or
even plausibility), and we have consistently found questionable or flat
out incorrect cases in these changes. Most of them are probably correct,
but we need to devise a system that makes it more clear when we have
handled the address space concerns correctly, and ideally each pass that
gets updated would receive an accompanying test case that exercises that
pass specificaly w.r.t. alternate address spaces.

However, from this commit, I have retained the new C API entry points.
Those were an orthogonal change that probably should have been split
apart, but they seem entirely good.

In several places the changes were very obvious cleanups with no actual
multiple address space code added; these I have not reverted when
I spotted them.

In a few other places there were merge conflicts due to a cleaner
solution being implemented later, often not using address spaces at all.
In those cases, I've preserved the new code which isn't address space
dependent.

This is part of my ongoing effort to clean out the partial address space
code which carries high risk and low test coverage, and not likely to be
finished before the 3.2 release looms closer. Duncan and I would both
like to see the above issues addressed before we return to these
changes.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@167222 91177308-0d34-0410-b5e6-96231b3b80d8
2012-11-01 09:14:31 +00:00
..
IPA Now that invoke of an intrinsic is possible (for the llvm.do.nothing intrinsic) 2012-09-26 17:16:01 +00:00
AliasAnalysis.cpp Use the attribute enums to query if a parameter has an attribute. 2012-10-09 21:38:14 +00:00
AliasAnalysisCounter.cpp Persuade GCC that there is nothing worth warning about here (there isn't). 2012-02-05 14:20:11 +00:00
AliasAnalysisEvaluator.cpp Remove unnecessary default cases in switches that cover all enum values. 2012-01-10 16:47:17 +00:00
AliasDebugger.cpp
AliasSetTracker.cpp Move TargetData to DataLayout. 2012-10-08 16:38:25 +00:00
Analysis.cpp Remove LoopDependenceAnalysis. 2012-10-26 20:25:01 +00:00
BasicAliasAnalysis.cpp Revert the majority of the next patch in the address space series: 2012-11-01 09:14:31 +00:00
BlockFrequencyInfo.cpp Add some constantness to BranchProbabilityInfo and BlockFrequnencyInfo. 2011-12-20 20:03:10 +00:00
BranchProbabilityInfo.cpp BranchProb: modify the definition of an edge in BranchProbabilityInfo to handle 2012-08-24 18:14:27 +00:00
CaptureTracking.cpp Give CaptureTracker::shouldExplore a base implementation. Most users want to do 2012-10-08 22:12:48 +00:00
CFGPrinter.cpp
CMakeLists.txt Remove LoopDependenceAnalysis. 2012-10-26 20:25:01 +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 Revert the majority of the next patch in the address space series: 2012-11-01 09:14:31 +00:00
DbgInfoPrinter.cpp Move lib/Analysis/DebugInfo.cpp to lib/VMCore/DebugInfo.cpp and 2012-06-28 00:05:13 +00:00
DependenceAnalysis.cpp Fix a couple of comment typos. 2012-10-31 11:25:32 +00:00
DominanceFrontier.cpp Release build: guard dump functions with 2012-09-12 05:06:18 +00:00
DomPrinter.cpp remove the blank line from previous ci. 2012-02-04 03:18:47 +00:00
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 Revert 'Fix a typo 'iff' => 'if''. iff is an abreviation of if and only if. See: http://en.wikipedia.org/wiki/If_and_only_if Commit 164767 2012-09-27 10:14:43 +00:00
IntervalPartition.cpp
IVUsers.cpp Move TargetData to DataLayout. 2012-10-08 16:38:25 +00:00
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 LLVMBuild: Introduce a common section which currently has a list of the 2011-12-12 22:45:54 +00:00
Loads.cpp Move TargetData to DataLayout. 2012-10-08 16:38:25 +00:00
LoopInfo.cpp Release build: guard dump functions with 2012-09-12 05:06:18 +00:00
LoopPass.cpp Enable the new LoopInfo algorithm by default. 2012-06-26 04:11:38 +00:00
Makefile
MemDepPrinter.cpp Mark some static arrays as const. 2012-05-24 06:35:32 +00:00
MemoryBuiltins.cpp Revert the series of commits starting with r166578 which introduced the 2012-11-01 08:07:29 +00:00
MemoryDependenceAnalysis.cpp Ignore unreachable blocks when doing memory dependence analysis on non-local 2012-10-23 18:37:11 +00:00
ModuleDebugInfoPrinter.cpp Move lib/Analysis/DebugInfo.cpp to lib/VMCore/DebugInfo.cpp and 2012-06-28 00:05:13 +00:00
NoAliasAnalysis.cpp Move TargetData to DataLayout. 2012-10-08 16:38:25 +00:00
PathNumbering.cpp Move llvm/Support/TypeBuilder.h -> llvm/TypeBuilder.h. This completes 2012-07-15 23:45:24 +00:00
PathProfileInfo.cpp
PathProfileVerifier.cpp
PHITransAddr.cpp Release build: guard dump functions with 2012-09-12 05:06:18 +00:00
PostDominators.cpp
ProfileDataLoader.cpp Remove code to saturate profile counts. 2012-10-29 17:27:39 +00:00
ProfileDataLoaderPass.cpp Cleanups due to feedback. No functionality change. Patch by Alistair. 2012-08-31 05:18:31 +00:00
ProfileEstimatorPass.cpp Fix floating-point divide by zero, in a case where the value was not going to be used anyway. 2012-08-24 00:31:45 +00:00
ProfileInfo.cpp Profile: set branch weight metadata with data generated from profiling. 2012-08-28 22:21:25 +00:00
ProfileInfoLoader.cpp Remove unused private member variables uncovered by the recent changes to clang's -Wunused-private-field. 2012-07-20 22:05:57 +00:00
ProfileInfoLoaderPass.cpp Round 2 of dead private variable removal. 2012-06-06 19:47:08 +00:00
ProfileVerifierPass.cpp Move code into anonymous namespaces. 2011-11-26 23:01:57 +00:00
README.txt
RegionInfo.cpp Release build: guard dump functions with 2012-09-12 05:06:18 +00:00
RegionPass.cpp Remove the the block_node_iterator of Region, replace it by the block_iterator. 2012-08-27 13:49:24 +00:00
RegionPrinter.cpp Rename the Region::block_iterator to Region::block_node_iterator, and 2012-05-04 20:55:23 +00:00
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 More dead code removal (using -Wunreachable-code) 2012-01-20 21:51:11 +00:00
SparsePropagation.cpp Taken into account Duncan's comments for r149481 dated by 2nd Feb 2012: 2012-03-08 07:06:20 +00:00
Trace.cpp Release build: guard dump functions with 2012-09-12 05:06:18 +00:00
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))

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