blob: f7bc9f3d31dd2b7447d18f64ef51b5b683c6394e [file] [log] [blame]
Gordon Henriksen5eca0752008-08-17 18:44:35 +00001//===-- OcamlGC.cpp - Ocaml frametable GC strategy ------------------------===//
Gordon Henriksen5a29c9e2008-08-17 12:56:54 +00002//
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 implements lowering for the llvm.gc* intrinsics compatible with
11// Objective Caml 3.10.0, which uses a liveness-accurate static stack map.
Mikhail Glushenkov5c1799b2009-01-16 06:53:46 +000012//
Gordon Henriksen5eca0752008-08-17 18:44:35 +000013// The frametable emitter is in OcamlGCPrinter.cpp.
Gordon Henriksen5a29c9e2008-08-17 12:56:54 +000014//
15//===----------------------------------------------------------------------===//
Mikhail Glushenkov5c1799b2009-01-16 06:53:46 +000016
Gordon Henriksen5a29c9e2008-08-17 12:56:54 +000017#include "llvm/CodeGen/GCs.h"
Gordon Henriksen5a29c9e2008-08-17 12:56:54 +000018#include "llvm/CodeGen/GCStrategy.h"
Mikhail Glushenkov2388a582009-01-16 07:02:28 +000019#include "llvm/Support/Compiler.h"
Gordon Henriksen5a29c9e2008-08-17 12:56:54 +000020
21using namespace llvm;
22
23namespace {
Gordon Henriksen5eca0752008-08-17 18:44:35 +000024 class VISIBILITY_HIDDEN OcamlGC : public GCStrategy {
Gordon Henriksen5a29c9e2008-08-17 12:56:54 +000025 public:
Gordon Henriksen5eca0752008-08-17 18:44:35 +000026 OcamlGC();
Gordon Henriksen5a29c9e2008-08-17 12:56:54 +000027 };
Gordon Henriksen5a29c9e2008-08-17 12:56:54 +000028}
29
Gordon Henriksen5eca0752008-08-17 18:44:35 +000030static GCRegistry::Add<OcamlGC>
31X("ocaml", "ocaml 3.10-compatible GC");
Gordon Henriksen5a29c9e2008-08-17 12:56:54 +000032
Gordon Henriksen5eca0752008-08-17 18:44:35 +000033void llvm::linkOcamlGC() { }
Gordon Henriksen5a29c9e2008-08-17 12:56:54 +000034
Gordon Henriksen5eca0752008-08-17 18:44:35 +000035OcamlGC::OcamlGC() {
Gordon Henriksen5a29c9e2008-08-17 12:56:54 +000036 NeededSafePoints = 1 << GC::PostCall;
37 UsesMetadata = true;
38}