[llvm] r225366 - Add a missing file from 225365

Philip Reames listmail at philipreames.com
Wed Jan 7 11:13:28 PST 2015


Author: reames
Date: Wed Jan  7 13:13:28 2015
New Revision: 225366

URL: http://llvm.org/viewvc/llvm-project?rev=225366&view=rev
Log:
Add a missing file from 225365


Added:
    llvm/trunk/lib/CodeGen/StatepointExampleGC.cpp

Added: llvm/trunk/lib/CodeGen/StatepointExampleGC.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/StatepointExampleGC.cpp?rev=225366&view=auto
==============================================================================
--- llvm/trunk/lib/CodeGen/StatepointExampleGC.cpp (added)
+++ llvm/trunk/lib/CodeGen/StatepointExampleGC.cpp Wed Jan  7 13:13:28 2015
@@ -0,0 +1,54 @@
+//===-- StatepointDefaultGC.cpp - The default statepoint GC strategy ------===//
+//
+//                     The LLVM Compiler Infrastructure
+//
+// This file is distributed under the University of Illinois Open Source
+// License. See LICENSE.TXT for details.
+//
+//===----------------------------------------------------------------------===//
+//
+// This file contains a GCStrategy which serves as an example for the usage
+// of a statepoint based lowering strategy.  This GCStrategy is intended to
+// suitable as a default implementation usable with any collector which can
+// consume the standard stackmap format generated by statepoints, uses the
+// default addrespace to distinguish between gc managed and non-gc managed
+// pointers, and has reasonable relocation semantics.  
+//
+//===----------------------------------------------------------------------===//
+
+#include "llvm/CodeGen/GCStrategy.h"
+#include "llvm/IR/Value.h"
+#include "llvm/IR/DerivedTypes.h"
+
+using namespace llvm;
+
+namespace {
+class StatepointGC : public GCStrategy {
+public:
+  StatepointGC() {
+    UseStatepoints = true;
+    // These options are all gc.root specific, we specify them so that the
+    // gc.root lowering code doesn't run.
+    InitRoots = false;
+    NeededSafePoints = 0;
+    UsesMetadata = false;
+    CustomRoots = false;
+    CustomSafePoints = false;
+  }
+  Optional<bool> isGCManagedPointer(const Value *V) const override {
+    // Method is only valid on pointer typed values.
+    PointerType *PT = cast<PointerType>(V->getType());
+    // For the sake of this example GC, we arbitrarily pick addrspace(1) as our
+    // GC managed heap.  We know that a pointer into this heap needs to be
+    // updated and that no other pointer does.
+    return (1 == PT->getAddressSpace());
+  }
+};
+}
+
+static GCRegistry::Add<StatepointGC>
+X("statepoint-example", "an example strategy for statepoint");
+
+namespace llvm {
+void linkStatepointExampleGC() {}
+}





More information about the llvm-commits mailing list