llvm-6502/lib/IR
Chandler Carruth f348c9782c Introduce an AnalysisManager which is like a pass manager but with a lot
more smarts in it. This is where most of the interesting logic that used
to live in the implicit-scheduling-hackery of the old pass manager will
live.

Like the previous commits, note that this is a very early prototype!
I expect substantial changes before this is ready to use.

The core of the design is the following:

- We have an AnalysisManager which can be used across a series of
  passes over a module.
- The code setting up a pass pipeline registers the analyses available
  with the manager.
- Individual transform passes can check than an analysis manager
  provides the analyses they require in order to fail-fast.
- There is *no* implicit registration or scheduling.
- Analysis passes are different from other passes: they produce an
  analysis result that is cached and made available via the analysis
  manager.
- Cached results are invalidated automatically by the pass managers.
- When a transform pass requests an analysis result, either the analysis
  is run to produce the result or a cached result is provided.

There are a few aspects of this design that I *know* will change in
subsequent commits:
- Currently there is no "preservation" system, that needs to be added.
- All of the analysis management should move up to the analysis library.
- The analysis management needs to support at least SCC passes. Maybe
  loop passes. Living in the analysis library will facilitate this.
- Need support for analyses which are *both* module and function passes.
- Need support for pro-actively running module analyses to have cached
  results within a function pass manager.
- Need a clear design for "immutable" passes.
- Need support for requesting cached results when available and not
  re-running the pass even if that would be necessary.
- Need more thorough testing of all of this infrastructure.

There are other aspects that I view as open questions I'm hoping to
resolve as I iterate a bit on the infrastructure, and especially as
I start writing actual passes against this.
- Should we have separate management layers for function, module, and
  SCC analyses? I think "yes", but I'm not yet ready to switch the code.
  Adding SCC support will likely resolve this definitively.
- How should the 'require' functionality work? Should *that* be the only
  way to request results to ensure that passes always require things?
- How should preservation work?
- Probably some other things I'm forgetting. =]

Look forward to more patches in shorter order now that this is in place.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@194538 91177308-0d34-0410-b5e6-96231b3b80d8
2013-11-13 01:12:08 +00:00
..
AsmWriter.cpp Print new JavaScript calling conventions symbolically. 2013-11-11 22:40:22 +00:00
AsmWriter.h Revert "Give internal classes hidden visibility." 2013-09-11 18:05:11 +00:00
AttributeImpl.h Revert "Give internal classes hidden visibility." 2013-09-11 18:05:11 +00:00
Attributes.cpp
AutoUpgrade.cpp Remove x86_sse42_crc32_64_8 intrinsic. It has no functional difference from x86_sse42_crc32_32_8 and was not mapped to a clang builtin. I'm not even sure why this form of the instruction is even called out explicitly in the docs. Also add AutoUpgrade support to convert it into the other intrinsic with appropriate trunc and zext. 2013-10-15 05:20:47 +00:00
BasicBlock.cpp
CMakeLists.txt Introduce an AnalysisManager which is like a pass manager but with a lot 2013-11-13 01:12:08 +00:00
ConstantFold.cpp IR: Refactor GEP range checks, reuse them for other parts of folding 2013-11-10 01:36:22 +00:00
ConstantFold.h
Constants.cpp
ConstantsContext.h Revert "Give internal classes hidden visibility." 2013-09-11 18:05:11 +00:00
Core.cpp [llvm-c] Implement LLVMPrintValueToString 2013-11-06 09:21:01 +00:00
DataLayout.cpp MemCpyOptimizer: Use max legal int size instead of pointer size 2013-09-16 22:43:16 +00:00
DebugInfo.cpp Remove ^M from the file. 2013-11-08 08:13:15 +00:00
DebugLoc.cpp
DIBuilder.cpp Add an assert that we have a scope that matters for methods 2013-10-15 23:31:36 +00:00
Dominators.cpp
Function.cpp Enable variable arguments support for intrinsics. 2013-10-31 17:18:11 +00:00
GCOV.cpp Revert "llvm-cov: Added command-line option to change dir." 2013-11-05 01:56:29 +00:00
Globals.cpp Revert r193251 : Use address-taken to disambiguate global variable and indirect memops. 2013-10-27 03:08:44 +00:00
GVMaterializer.cpp
InlineAsm.cpp
Instruction.cpp
Instructions.cpp
IntrinsicInst.cpp
IRBuilder.cpp
LeakDetector.cpp
LeaksContext.h Revert "Give internal classes hidden visibility." 2013-09-11 18:05:11 +00:00
LegacyPassManager.cpp Move the old pass manager infrastructure into a legacy namespace and 2013-11-09 12:26:54 +00:00
LLVMBuild.txt
LLVMContext.cpp
LLVMContextImpl.cpp
LLVMContextImpl.h Implement function prefix data as an IR feature. 2013-09-16 01:08:15 +00:00
Makefile
Metadata.cpp
Module.cpp Use error_code in GVMaterializer. 2013-11-05 19:36:34 +00:00
Pass.cpp
PassManager.cpp Introduce an AnalysisManager which is like a pass manager but with a lot 2013-11-13 01:12:08 +00:00
PassRegistry.cpp
PrintModulePass.cpp
SymbolTableListTraitsImpl.h
Type.cpp Simplify code. No functionality change. 2013-11-11 14:54:34 +00:00
TypeFinder.cpp TypeFinder: prefer iterative algorithm to keep stack usage low. 2013-10-16 04:10:06 +00:00
Use.cpp
User.cpp
Value.cpp
ValueSymbolTable.cpp
ValueTypes.cpp Add v4f16 to supported value types. 2013-10-03 03:29:21 +00:00
Verifier.cpp Remove linkonce_odr_auto_hide. 2013-11-01 17:09:14 +00:00