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