/// anything but their default values.
unsigned NeededSafePoints = 0; ///< Bitmask of required safe points.
- bool CustomRoots = false; ///< Default is to pass through to backend.
bool UsesMetadata = false; ///< If set, backend must emit metadata tables.
public:
return (NeededSafePoints & 1 << Kind) != 0;
}
- /// 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 \@llvm.gcroot.
- bool customRoots() const { return CustomRoots; }
-
/// 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
ErlangGC() {
NeededSafePoints = 1 << GC::PostCall;
UsesMetadata = true;
- CustomRoots = false;
}
};
/// while introducing only minor runtime overhead.
class ShadowStackGC : public GCStrategy {
public:
- ShadowStackGC() {
- CustomRoots = true;
- }
+ ShadowStackGC() {}
};
/// A GCStrategy which serves as an example for the usage of a statepoint based
// gc.root lowering code doesn't run.
NeededSafePoints = 0;
UsesMetadata = false;
- CustomRoots = false;
}
Optional<bool> isGCManagedPointer(const Type *Ty) const override {
// gc.root lowering code doesn't run.
NeededSafePoints = 0;
UsesMetadata = false;
- CustomRoots = false;
}
Optional<bool> isGCManagedPointer(const Type *Ty) const override {