llvm-6502/lib/Analysis
Chandler Carruth eb3d76da81 [Modules] Move ValueHandle into the IR library where Value itself lives.
Move the test for this class into the IR unittests as well.

This uncovers that ValueMap too is in the IR library. Ironically, the
unittest for ValueMap is useless in the Support library (honestly, so
was the ValueHandle test) and so it already lives in the IR unittests.
Mmmm, tasty layering.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@202821 91177308-0d34-0410-b5e6-96231b3b80d8
2014-03-04 11:17:44 +00:00
..
IPA [Modules] Move CallSite into the IR library where it belogs. It is 2014-03-04 11:01:28 +00:00
AliasAnalysis.cpp Make DataLayout a plain object, not a pass. 2014-02-25 17:30:31 +00:00
AliasAnalysisCounter.cpp Put the functionality for printing a value to a raw_ostream as an 2014-01-09 02:29:41 +00:00
AliasAnalysisEvaluator.cpp [Modules] Move InstIterator out of the Support library, where it had no 2014-03-04 10:30:26 +00:00
AliasDebugger.cpp
AliasSetTracker.cpp [Modules] Move InstIterator out of the Support library, where it had no 2014-03-04 10:30:26 +00:00
Analysis.cpp [cleanup] Re-sort all the includes with utils/sort_includes.py. 2014-03-04 10:07:28 +00:00
BasicAliasAnalysis.cpp [Modules] Move GetElementPtrTypeIterator into the IR library. As its 2014-03-04 10:40:04 +00:00
BlockFrequencyInfo.cpp BlockFrequencyInfo: Readded getEntryFreq. 2013-12-20 22:11:11 +00:00
BranchProbabilityInfo.cpp [block-freq] Teach branch probability how to return the edge weight in between a BasicBlock and one of its successors. 2013-12-14 02:24:25 +00:00
CaptureTracking.cpp [Modules] Move CallSite into the IR library where it belogs. It is 2014-03-04 11:01:28 +00:00
CFG.cpp Make succ_iterator a real random access iterator and clean up a couple of users. 2014-02-10 14:17:42 +00:00
CFGPrinter.cpp Replace the F_Binary flag with a F_Text one. 2014-02-24 18:20:12 +00:00
CMakeLists.txt [PM] Add a new "lazy" call graph analysis pass for the new pass manager. 2014-02-06 04:37:03 +00:00
CodeMetrics.cpp [Modules] Move CallSite into the IR library where it belogs. It is 2014-03-04 11:01:28 +00:00
ConstantFolding.cpp [Modules] Move GetElementPtrTypeIterator into the IR library. As its 2014-03-04 10:40:04 +00:00
CostModel.cpp [C++11] Replace llvm::tie with std::tie. 2014-03-02 13:30:33 +00:00
Delinearization.cpp [Modules] Move InstIterator out of the Support library, where it had no 2014-03-04 10:30:26 +00:00
DependenceAnalysis.cpp [Modules] Move InstIterator out of the Support library, where it had no 2014-03-04 10:30:26 +00:00
DominanceFrontier.cpp [PM] Split DominatorTree into a concrete analysis result object which 2014-01-13 13:07:17 +00:00
DomPrinter.cpp [PM] Split DominatorTree into a concrete analysis result object which 2014-01-13 13:07:17 +00:00
InstCount.cpp Move all of the header files which are involved in modelling the LLVM IR 2013-01-02 11:36:10 +00:00
InstructionSimplify.cpp [Modules] Move ValueHandle into the IR library where Value itself lives. 2014-03-04 11:17:44 +00:00
Interval.cpp
IntervalPartition.cpp
IVUsers.cpp Make DataLayout a plain object, not a pass. 2014-02-25 17:30:31 +00:00
LazyCallGraph.cpp [Modules] Move CallSite into the IR library where it belogs. It is 2014-03-04 11:01:28 +00:00
LazyValueInfo.cpp [Modules] Move ValueHandle into the IR library where Value itself lives. 2014-03-04 11:17:44 +00:00
LibCallAliasAnalysis.cpp
LibCallSemantics.cpp
Lint.cpp [Modules] Move CallSite into the IR library where it belogs. It is 2014-03-04 11:01:28 +00:00
LLVMBuild.txt
Loads.cpp
LoopInfo.cpp [C++11] Replace llvm::next and llvm::prior with std::next and std::prev. 2014-03-02 12:27:27 +00:00
LoopPass.cpp Constify the Optnone checks in IR passes. 2014-02-26 01:23:26 +00:00
Makefile
MemDepPrinter.cpp [Modules] Move CallSite into the IR library where it belogs. It is 2014-03-04 11:01:28 +00:00
MemoryBuiltins.cpp Update optimization passes to handle inalloca arguments 2014-01-28 02:38:36 +00:00
MemoryDependenceAnalysis.cpp [C++11] Replace llvm::next and llvm::prior with std::next and std::prev. 2014-03-02 12:27:27 +00:00
ModuleDebugInfoPrinter.cpp Put the functionality for printing a value to a raw_ostream as an 2014-01-09 02:29:41 +00:00
NoAliasAnalysis.cpp Make DataLayout a plain object, not a pass. 2014-02-25 17:30:31 +00:00
PHITransAddr.cpp Rename some member variables from TD to DL. 2014-02-18 15:33:12 +00:00
PostDominators.cpp [cleanup] Re-sort all the includes with utils/sort_includes.py. 2014-03-04 10:07:28 +00:00
PtrUseVisitor.cpp [C++11] Switch all uses of the llvm_move macro to use std::move 2014-03-02 04:08:41 +00:00
README.txt
RegionInfo.cpp [C++11] Add a basic block range view for RegionInfo 2014-03-03 13:00:39 +00:00
RegionPass.cpp [C++11] Add a basic block range view for RegionInfo 2014-03-03 13:00:39 +00:00
RegionPrinter.cpp [C++11] Add a basic block range view for RegionInfo 2014-03-03 13:00:39 +00:00
ScalarEvolution.cpp [Modules] Move GetElementPtrTypeIterator into the IR library. As its 2014-03-04 10:40:04 +00:00
ScalarEvolutionAliasAnalysis.cpp
ScalarEvolutionExpander.cpp [C++11] Replace llvm::next and llvm::prior with std::next and std::prev. 2014-03-02 12:27:27 +00:00
ScalarEvolutionNormalization.cpp [cleanup] Move the Dominators.h and Verifier.h headers into the IR 2014-01-13 09:26:24 +00:00
SparsePropagation.cpp
TargetTransformInfo.cpp [Modules] Move CallSite into the IR library where it belogs. It is 2014-03-04 11:01:28 +00:00
Trace.cpp Put the functionality for printing a value to a raw_ostream as an 2014-01-09 02:29:41 +00:00
TypeBasedAliasAnalysis.cpp
ValueTracking.cpp [Modules] Move the LLVM IR pattern match header into the IR library, it 2014-03-04 11:08:18 +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))

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