]> Gitweb @ Texas Instruments - Open Source Git Repositories - git.TI.com/gitweb - opencl/llvm.git/blob - lib/CodeGen/StatepointExampleGC.cpp
5460c1e7da1a4ff8f4e440cf981bc3b4106c24c9
[opencl/llvm.git] / lib / CodeGen / StatepointExampleGC.cpp
1 //===-- StatepointDefaultGC.cpp - The default statepoint GC strategy ------===//
2 //
3 //                     The LLVM Compiler Infrastructure
4 //
5 // This file is distributed under the University of Illinois Open Source
6 // License. See LICENSE.TXT for details.
7 //
8 //===----------------------------------------------------------------------===//
9 //
10 // This file contains a GCStrategy which serves as an example for the usage
11 // of a statepoint based lowering strategy.  This GCStrategy is intended to
12 // suitable as a default implementation usable with any collector which can
13 // consume the standard stackmap format generated by statepoints, uses the
14 // default addrespace to distinguish between gc managed and non-gc managed
15 // pointers, and has reasonable relocation semantics.  
16 //
17 //===----------------------------------------------------------------------===//
19 #include "llvm/CodeGen/GCStrategy.h"
20 #include "llvm/IR/Value.h"
21 #include "llvm/IR/DerivedTypes.h"
23 using namespace llvm;
25 namespace {
26 class StatepointGC : public GCStrategy {
27 public:
28   StatepointGC() {
29     UseStatepoints = true;
30     // These options are all gc.root specific, we specify them so that the
31     // gc.root lowering code doesn't run.
32     InitRoots = false;
33     NeededSafePoints = 0;
34     UsesMetadata = false;
35     CustomRoots = false;
36     CustomSafePoints = false;
37   }
38   Optional<bool> isGCManagedPointer(const Value *V) const override {
39     // Method is only valid on pointer typed values.
40     PointerType *PT = cast<PointerType>(V->getType());
41     // For the sake of this example GC, we arbitrarily pick addrspace(1) as our
42     // GC managed heap.  We know that a pointer into this heap needs to be
43     // updated and that no other pointer does.
44     return (1 == PT->getAddressSpace());
45   }
46 };
47 }
49 static GCRegistry::Add<StatepointGC>
50 X("statepoint-example", "an example strategy for statepoint");
52 namespace llvm {
53 void linkStatepointExampleGC() {}
54 }