2008-09-22 01:08:49 +00:00
|
|
|
add_llvm_library(LLVMAnalysis
|
|
|
|
AliasAnalysis.cpp
|
|
|
|
AliasAnalysisCounter.cpp
|
|
|
|
AliasAnalysisEvaluator.cpp
|
|
|
|
AliasDebugger.cpp
|
|
|
|
AliasSetTracker.cpp
|
|
|
|
Analysis.cpp
|
|
|
|
BasicAliasAnalysis.cpp
|
2011-07-25 19:25:40 +00:00
|
|
|
BlockFrequencyInfo.cpp
|
2011-06-04 01:16:30 +00:00
|
|
|
BranchProbabilityInfo.cpp
|
2013-07-27 01:25:51 +00:00
|
|
|
CFG.cpp
|
2008-09-22 01:08:49 +00:00
|
|
|
CFGPrinter.cpp
|
2009-07-15 21:08:16 +00:00
|
|
|
CaptureTracking.cpp
|
2012-11-02 21:48:17 +00:00
|
|
|
CostModel.cpp
|
2012-03-16 05:51:52 +00:00
|
|
|
CodeMetrics.cpp
|
2008-09-22 01:08:49 +00:00
|
|
|
ConstantFolding.cpp
|
2013-11-12 22:47:20 +00:00
|
|
|
Delinearization.cpp
|
dependence analysis
Patch from Preston Briggs <preston.briggs@gmail.com>.
This is an updated version of the dependence-analysis patch, including an MIV
test based on Banerjee's inequalities.
It's a fairly complete implementation of the paper
Practical Dependence Testing
Gina Goff, Ken Kennedy, and Chau-Wen Tseng
PLDI 1991
It cannot yet propagate constraints between coupled RDIV subscripts (discussed
in Section 5.3.2 of the paper).
It's organized as a FunctionPass with a single entry point that supports testing
for dependence between two instructions in a function. If there's no dependence,
it returns null. If there's a dependence, it returns a pointer to a Dependence
which can be queried about details (what kind of dependence, is it loop
independent, direction and distance vector entries, etc). I haven't included
every imaginable feature, but there's a good selection that should be adequate
for supporting many loop transformations. Of course, it can be extended as
necessary.
Included in the patch file are many test cases, commented with C code showing
the loops and array references.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@165708 91177308-0d34-0410-b5e6-96231b3b80d8
2012-10-11 07:32:34 +00:00
|
|
|
DependenceAnalysis.cpp
|
2009-10-18 04:10:40 +00:00
|
|
|
DomPrinter.cpp
|
2011-03-01 00:02:51 +00:00
|
|
|
DominanceFrontier.cpp
|
2009-07-15 21:08:16 +00:00
|
|
|
IVUsers.cpp
|
2008-09-22 01:08:49 +00:00
|
|
|
InstCount.cpp
|
2009-11-09 22:57:59 +00:00
|
|
|
InstructionSimplify.cpp
|
2008-09-22 01:08:49 +00:00
|
|
|
Interval.cpp
|
|
|
|
IntervalPartition.cpp
|
2014-02-06 04:37:03 +00:00
|
|
|
LazyCallGraph.cpp
|
2009-11-11 00:22:30 +00:00
|
|
|
LazyValueInfo.cpp
|
2008-09-22 01:08:49 +00:00
|
|
|
LibCallAliasAnalysis.cpp
|
|
|
|
LibCallSemantics.cpp
|
2010-04-08 18:52:18 +00:00
|
|
|
Lint.cpp
|
2010-05-28 16:19:17 +00:00
|
|
|
Loads.cpp
|
2008-09-22 01:08:49 +00:00
|
|
|
LoopInfo.cpp
|
|
|
|
LoopPass.cpp
|
2010-09-16 23:06:18 +00:00
|
|
|
MemDepPrinter.cpp
|
2009-10-27 20:05:49 +00:00
|
|
|
MemoryBuiltins.cpp
|
2008-09-22 01:08:49 +00:00
|
|
|
MemoryDependenceAnalysis.cpp
|
2010-05-07 16:22:32 +00:00
|
|
|
ModuleDebugInfoPrinter.cpp
|
2011-03-01 00:02:51 +00:00
|
|
|
NoAliasAnalysis.cpp
|
|
|
|
PHITransAddr.cpp
|
2008-09-22 01:08:49 +00:00
|
|
|
PostDominators.cpp
|
Add a new visitor for walking the uses of a pointer value.
This visitor provides infrastructure for recursively traversing the
use-graph of a pointer-producing instruction like an alloca or a malloc.
It maintains a worklist of uses to visit, so it can handle very deep
recursions. It automatically looks through instructions which simply
translate one pointer to another (bitcasts and GEPs). It tracks the
offset relative to the original pointer as long as that offset remains
constant and exposes it during the visit as an APInt offset. Finally, it
performs conservative escape analysis.
However, currently it has some limitations that should be addressed
going forward:
1) It doesn't handle vectors of pointers.
2) It doesn't provide a cheaper visitor when the constant offset
tracking isn't needed.
3) It doesn't support non-instruction pointer values.
The current functionality is exactly what is required to implement the
SROA pointer-use visitors in terms of this one, rather than in terms of
their own ad-hoc base visitor, which was always very poorly specified.
SROA has been converted to use this, and the code there deleted which
this utility now provides.
Technically speaking, using this new visitor allows SROA to handle a few
more cases than it previously did. It is now more aggressive in ignoring
chains of instructions which look like they would defeat SROA, but in
fact do not because they never result in a read or write of memory.
While this is "neat", it shouldn't be interesting for real programs as
any such chains should have been removed by others passes long before we
get to SROA. As a consequence, I've not added any tests for these
features -- it shouldn't be part of SROA's contract to perform such
heroics.
The goal is to extend the functionality of this visitor going forward,
and re-use it from passes like ASan that can benefit from doing
a detailed walk of the uses of a pointer.
Thanks to Ben Kramer for the code review rounds and lots of help
reviewing and debugging this patch.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@169728 91177308-0d34-0410-b5e6-96231b3b80d8
2012-12-10 08:28:39 +00:00
|
|
|
PtrUseVisitor.cpp
|
2010-07-22 07:46:31 +00:00
|
|
|
RegionInfo.cpp
|
2010-10-20 01:54:44 +00:00
|
|
|
RegionPass.cpp
|
2010-07-22 07:46:31 +00:00
|
|
|
RegionPrinter.cpp
|
2008-09-22 01:08:49 +00:00
|
|
|
ScalarEvolution.cpp
|
2009-08-26 16:33:57 +00:00
|
|
|
ScalarEvolutionAliasAnalysis.cpp
|
2008-09-22 01:08:49 +00:00
|
|
|
ScalarEvolutionExpander.cpp
|
2010-04-07 23:01:37 +00:00
|
|
|
ScalarEvolutionNormalization.cpp
|
2008-09-22 01:08:49 +00:00
|
|
|
SparsePropagation.cpp
|
2013-01-07 03:08:10 +00:00
|
|
|
TargetTransformInfo.cpp
|
2008-09-22 01:08:49 +00:00
|
|
|
Trace.cpp
|
2010-08-03 02:38:20 +00:00
|
|
|
TypeBasedAliasAnalysis.cpp
|
2008-09-22 01:08:49 +00:00
|
|
|
ValueTracking.cpp
|
|
|
|
)
|
2011-02-18 22:06:14 +00:00
|
|
|
|
2012-06-24 13:32:01 +00:00
|
|
|
add_dependencies(LLVMAnalysis intrinsics_gen)
|
|
|
|
|
2011-02-18 22:06:14 +00:00
|
|
|
add_subdirectory(IPA)
|