|
LLVM
4.0.0
|
GCStrategy describes a garbage collector algorithm's code generation requirements, and provides overridable hooks for those needs which cannot be abstractly described. More...
#include <GCStrategy.h>
Public Member Functions | |
| GCStrategy () | |
| virtual | ~GCStrategy () |
| const std::string & | getName () const |
| Return the name of the GC strategy. More... | |
| bool | customWriteBarrier () const |
| By default, write barriers are replaced with simple store instructions. More... | |
| bool | customReadBarrier () const |
| By default, read barriers are replaced with simple load instructions. More... | |
| bool | useStatepoints () const |
| Returns true if this strategy is expecting the use of gc.statepoints, and false otherwise. More... | |
Statepoint Specific Properties | |
| virtual Optional< bool > | isGCManagedPointer (const Type *Ty) const |
| If the type specified can be reliably distinguished, returns true for pointers to GC managed locations and false for pointers to non-GC managed locations. More... | |
GCRoot Specific Properties | |
These properties and overrides only apply to collector strategies using GCRoot. | |
| bool | needsSafePoints () const |
| True if safe points of any kind are required. More... | |
| bool | needsSafePoint (GC::PointKind Kind) const |
| True if the given kind of safe point is required. More... | |
| bool | customRoots () const |
| By default, roots are left for the code generator so it can generate a stack map. More... | |
| bool | initializeRoots () const |
| If set, gcroot intrinsics should initialize their allocas to null before the first use. More... | |
| bool | usesMetadata () const |
| If set, appropriate metadata tables must be emitted by the back-end (assembler, JIT, or otherwise). More... | |
Protected Attributes | |
| bool | UseStatepoints |
| unsigned | NeededSafePoints |
| Uses gc.statepoints as opposed to gc.roots, if set, none of the other options can be anything but their default values. More... | |
| bool | CustomReadBarriers |
| Default is to insert loads. More... | |
| bool | CustomWriteBarriers |
| Default is to insert stores. More... | |
| bool | CustomRoots |
| Default is to pass through to backend. More... | |
| bool | InitRoots |
| If set, roots are nulled during lowering. More... | |
| bool | UsesMetadata |
| If set, backend must emit metadata tables. More... | |
Friends | |
| class | GCModuleInfo |
GCStrategy describes a garbage collector algorithm's code generation requirements, and provides overridable hooks for those needs which cannot be abstractly described.
GCStrategy objects must be looked up through the Function. The objects themselves are owned by the Context and must be immutable.
Definition at line 78 of file GCStrategy.h.
| GCStrategy::GCStrategy | ( | ) |
Definition at line 21 of file GCStrategy.cpp.
|
inlinevirtual |
Definition at line 97 of file GCStrategy.h.
|
inline |
By default, read barriers are replaced with simple load instructions.
If true, you must provide a custom pass to lower calls to .gcread.
Definition at line 111 of file GCStrategy.h.
References CustomReadBarriers.
Referenced by NeedsDefaultLoweringPass().
|
inline |
By default, roots are left for the code generator so it can generate a stack map.
If true, you must provide a custom pass to lower calls to .gcroot.
Definition at line 148 of file GCStrategy.h.
References CustomRoots.
|
inline |
By default, write barriers are replaced with simple store instructions.
If true, you must provide a custom pass to lower calls to .gcwrite.
Definition at line 106 of file GCStrategy.h.
References CustomWriteBarriers.
Referenced by NeedsDefaultLoweringPass().
|
inline |
Return the name of the GC strategy.
This is the value of the collector name string specified on functions which use this strategy.
Definition at line 101 of file GCStrategy.h.
|
inline |
If set, gcroot intrinsics should initialize their allocas to null before the first use.
This is necessary for most GCs and is enabled by default.
Definition at line 153 of file GCStrategy.h.
References InitRoots.
Referenced by NeedsDefaultLoweringPass().
If the type specified can be reliably distinguished, returns true for pointers to GC managed locations and false for pointers to non-GC managed locations.
Note a GCStrategy can always return 'None' (i.e. an empty optional indicating it can't reliably distinguish.
Definition at line 124 of file GCStrategy.h.
References llvm::None.
Referenced by lowerStatepointMetaArgs().
|
inline |
True if the given kind of safe point is required.
By default, none are recorded.
Definition at line 141 of file GCStrategy.h.
References NeededSafePoints.
|
inline |
True if safe points of any kind are required.
By default, none are recorded.
Definition at line 137 of file GCStrategy.h.
References NeededSafePoints.
|
inline |
If set, appropriate metadata tables must be emitted by the back-end (assembler, JIT, or otherwise).
For statepoint, this method is currently unsupported. The stackmap information can be found in the StackMap section as described in the documentation.
Definition at line 159 of file GCStrategy.h.
References UsesMetadata.
|
inline |
Returns true if this strategy is expecting the use of gc.statepoints, and false otherwise.
Definition at line 115 of file GCStrategy.h.
References UseStatepoints.
Referenced by llvm::SelectionDAGBuilder::LowerStatepoint().
|
friend |
Definition at line 81 of file GCStrategy.h.
|
protected |
Default is to insert loads.
Definition at line 89 of file GCStrategy.h.
Referenced by customReadBarrier().
|
protected |
Default is to pass through to backend.
Definition at line 91 of file GCStrategy.h.
Referenced by customRoots().
|
protected |
Default is to insert stores.
Definition at line 90 of file GCStrategy.h.
Referenced by customWriteBarrier().
|
protected |
If set, roots are nulled during lowering.
Definition at line 92 of file GCStrategy.h.
Referenced by initializeRoots().
|
protected |
Uses gc.statepoints as opposed to gc.roots, if set, none of the other options can be anything but their default values.
Bitmask of required safe points.
Definition at line 88 of file GCStrategy.h.
Referenced by needsSafePoint(), and needsSafePoints().
|
protected |
If set, backend must emit metadata tables.
Definition at line 93 of file GCStrategy.h.
Referenced by usesMetadata().
|
protected |
Definition at line 84 of file GCStrategy.h.
Referenced by useStatepoints().
1.8.6