llvm-6502/lib/IR
Chandler Carruth c49e7e6aee [PM] Add the preservation system to the new pass manager.
This adds a new set-like type which represents a set of preserved
analysis passes. The set is managed via the opaque PassT::ID() void*s.
The expected convenience templates for interacting with specific passes
are provided. It also supports a symbolic "all" state which is
represented by an invalid pointer in the set. This state is nicely
saturating as it comes up often. Finally, it supports intersection which
is used when finding the set of preserved passes after N different
transforms.

The pass API is then changed to return the preserved set rather than
a bool. This is much more self-documenting than the previous system.
Returning "none" is a conservatively correct solution just like
returning "true" from todays passes and not marking any passes as
preserved. Passes can also be dynamically preserved or not throughout
the run of the pass, and whatever gets returned is the binding state.
Finally, preserving "all" the passes is allowed for no-op transforms
that simply can't harm such things.

Finally, the analysis managers are changed to instead of blindly
invalidating all of the analyses, invalidate those which were not
preserved. This should rig up all of the basic preservation
functionality. This also correctly combines the preservation moving up
from one IR-layer to the another and the preservation aggregation across
N pass runs. Still to go is incrementally correct invalidation and
preservation across IR layers incrementally during N pass runs. That
will wait until we have a device for even exposing analyses across IR
layers.

While the core of this change is obvious, I'm not happy with the current
testing, so will improve it to cover at least some of the invalidation
that I can test easily in a subsequent commit.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@195241 91177308-0d34-0410-b5e6-96231b3b80d8
2013-11-20 11:31:50 +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 [weak vtables] Remove a bunch of weak vtables 2013-11-19 00:57:56 +00:00
Attributes.cpp [weak vtables] Remove a bunch of weak vtables 2013-11-19 00:57:56 +00:00
AutoUpgrade.cpp Add addrspacecast instruction. 2013-11-15 01:34:59 +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 Add addrspacecast instruction. 2013-11-15 01:34:59 +00:00
ConstantFold.h
Constants.cpp Add addrspacecast instruction. 2013-11-15 01:34:59 +00:00
ConstantsContext.h Revert "Give internal classes hidden visibility." 2013-09-11 18:05:11 +00:00
Core.cpp Expose the fence instruction via the C API. 2013-11-20 00:07:49 +00:00
DataLayout.cpp DataLayout: value initialize globals to avoid static construction. 2013-11-19 20:28:04 +00:00
DebugInfo.cpp Debug Info: fix typo in function name. 2013-11-17 19:35:03 +00:00
DebugLoc.cpp
DIBuilder.cpp DebugInfo: Simplify a few more explicit constructions, underconstrained types, and make DIType(MDNode*) explicit like all the other DI* node ctors. 2013-11-18 23:33:32 +00:00
Dominators.cpp
Function.cpp Enable variable arguments support for intrinsics. 2013-10-31 17:18:11 +00:00
GCOV.cpp llvm-cov: Added file checksum to gcno and gcda files. 2013-11-20 04:15:05 +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 Add static cast to unsigned char whenever a character classification function is called with a signed char argument, in order to avoid assertions in Windows Debug configuration. 2013-02-12 21:21:59 +00:00
Instruction.cpp Add addrspacecast instruction. 2013-11-15 01:34:59 +00:00
Instructions.cpp Add addrspacecast instruction. 2013-11-15 01:34:59 +00:00
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 Memory Dependence Analysis (not mem-dep test) take advantage of "invariant.load" metadata. 2013-03-06 17:48:48 +00:00
LLVMContextImpl.cpp Revert "Rename LLVMContext diagnostic handler types and functions." 2013-02-11 05:37:07 +00:00
LLVMContextImpl.h Implement function prefix data as an IR feature. 2013-09-16 01:08:15 +00:00
Makefile Actually update the CMake and Makefile builds correctly, and update the 2013-01-02 12:09:16 +00:00
Metadata.cpp [weak vtables] Remove a bunch of weak vtables 2013-11-19 00:57:56 +00:00
Module.cpp Use error_code in GVMaterializer. 2013-11-05 19:36:34 +00:00
Pass.cpp Enable *BasicBlockPass::createPrinterPass() 2013-02-08 23:37:41 +00:00
PassManager.cpp [PM] Add the preservation system to the new pass manager. 2013-11-20 11:31:50 +00:00
PassRegistry.cpp Use an RWMutex instead of a Mutex in PassRegistry. 2013-07-03 18:38:08 +00:00
PrintModulePass.cpp Enable *BasicBlockPass::createPrinterPass() 2013-02-08 23:37:41 +00:00
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 Fix Casting 2013-01-14 21:04:37 +00:00
User.cpp
Value.cpp Make it explicit that nulls are not allowed in names. 2013-11-19 21:12:39 +00:00
ValueSymbolTable.cpp
ValueTypes.cpp Add v4f16 to supported value types. 2013-10-03 03:29:21 +00:00
Verifier.cpp The 'optnone' attribute means don't inline anything into this function 2013-11-18 21:44:03 +00:00