1e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liao//===-- OcamlGC.cpp - Ocaml frametable GC strategy ------------------------===//
2e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liao//
3e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liao//                     The LLVM Compiler Infrastructure
4e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liao//
5e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liao// This file is distributed under the University of Illinois Open Source
6e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liao// License. See LICENSE.TXT for details.
7e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liao//
8e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liao//===----------------------------------------------------------------------===//
9e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liao//
10e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liao// This file implements lowering for the llvm.gc* intrinsics compatible with
11e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liao// Objective Caml 3.10.0, which uses a liveness-accurate static stack map.
12e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liao//
13e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liao// The frametable emitter is in OcamlGCPrinter.cpp.
14e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liao//
15e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liao//===----------------------------------------------------------------------===//
16e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liao
17e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liao#include "llvm/CodeGen/GCs.h"
18e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liao#include "llvm/CodeGen/GCStrategy.h"
19e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liao
20e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liaousing namespace llvm;
21e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liao
22e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liaonamespace {
23e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liao  class OcamlGC : public GCStrategy {
24e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liao  public:
25e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liao    OcamlGC();
26e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liao  };
27e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liao}
28e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liao
29e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liaostatic GCRegistry::Add<OcamlGC>
30e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei LiaoX("ocaml", "ocaml 3.10-compatible GC");
31e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liao
32e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liaovoid llvm::linkOcamlGC() { }
33e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liao
34e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei LiaoOcamlGC::OcamlGC() {
35e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liao  NeededSafePoints = 1 << GC::PostCall;
36e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liao  UsesMetadata = true;
37e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liao}
38