1477de3a7859104d7c41a36628169e13e524e980aYiannis Tsiouris//===-- ErlangGC.cpp - Erlang/OTP GC strategy -------------------*- C++ -*-===// 2477de3a7859104d7c41a36628169e13e524e980aYiannis Tsiouris// 3477de3a7859104d7c41a36628169e13e524e980aYiannis Tsiouris// The LLVM Compiler Infrastructure 4477de3a7859104d7c41a36628169e13e524e980aYiannis Tsiouris// 5477de3a7859104d7c41a36628169e13e524e980aYiannis Tsiouris// This file is distributed under the University of Illinois Open Source 6477de3a7859104d7c41a36628169e13e524e980aYiannis Tsiouris// License. See LICENSE.TXT for details. 7477de3a7859104d7c41a36628169e13e524e980aYiannis Tsiouris// 8477de3a7859104d7c41a36628169e13e524e980aYiannis Tsiouris//===----------------------------------------------------------------------===// 9477de3a7859104d7c41a36628169e13e524e980aYiannis Tsiouris// 10477de3a7859104d7c41a36628169e13e524e980aYiannis Tsiouris// This file implements the Erlang/OTP runtime-compatible garbage collector 11477de3a7859104d7c41a36628169e13e524e980aYiannis Tsiouris// (e.g. defines safe points, root initialization etc.) 12477de3a7859104d7c41a36628169e13e524e980aYiannis Tsiouris// 13477de3a7859104d7c41a36628169e13e524e980aYiannis Tsiouris// The frametable emitter is in ErlangGCPrinter.cpp. 14477de3a7859104d7c41a36628169e13e524e980aYiannis Tsiouris// 15477de3a7859104d7c41a36628169e13e524e980aYiannis Tsiouris//===----------------------------------------------------------------------===// 16477de3a7859104d7c41a36628169e13e524e980aYiannis Tsiouris 17477de3a7859104d7c41a36628169e13e524e980aYiannis Tsiouris#include "llvm/CodeGen/GCs.h" 18477de3a7859104d7c41a36628169e13e524e980aYiannis Tsiouris#include "llvm/CodeGen/GCStrategy.h" 19477de3a7859104d7c41a36628169e13e524e980aYiannis Tsiouris#include "llvm/CodeGen/MachineInstrBuilder.h" 20477de3a7859104d7c41a36628169e13e524e980aYiannis Tsiouris#include "llvm/MC/MCContext.h" 21477de3a7859104d7c41a36628169e13e524e980aYiannis Tsiouris#include "llvm/MC/MCSymbol.h" 22477de3a7859104d7c41a36628169e13e524e980aYiannis Tsiouris#include "llvm/Target/TargetInstrInfo.h" 23477de3a7859104d7c41a36628169e13e524e980aYiannis Tsiouris#include "llvm/Target/TargetMachine.h" 2437ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines#include "llvm/Target/TargetSubtargetInfo.h" 25477de3a7859104d7c41a36628169e13e524e980aYiannis Tsiouris 26477de3a7859104d7c41a36628169e13e524e980aYiannis Tsiourisusing namespace llvm; 27477de3a7859104d7c41a36628169e13e524e980aYiannis Tsiouris 28477de3a7859104d7c41a36628169e13e524e980aYiannis Tsiourisnamespace { 29477de3a7859104d7c41a36628169e13e524e980aYiannis Tsiouris 30ebe69fe11e48d322045d5949c83283927a0d790bStephen Hinesclass ErlangGC : public GCStrategy { 31ebe69fe11e48d322045d5949c83283927a0d790bStephen Hinespublic: 32ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines ErlangGC(); 33ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines}; 34477de3a7859104d7c41a36628169e13e524e980aYiannis Tsiouris} 35477de3a7859104d7c41a36628169e13e524e980aYiannis Tsiouris 36ebe69fe11e48d322045d5949c83283927a0d790bStephen Hinesstatic GCRegistry::Add<ErlangGC> X("erlang", 37ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines "erlang-compatible garbage collector"); 38477de3a7859104d7c41a36628169e13e524e980aYiannis Tsiouris 39ebe69fe11e48d322045d5949c83283927a0d790bStephen Hinesvoid llvm::linkErlangGC() {} 40477de3a7859104d7c41a36628169e13e524e980aYiannis Tsiouris 41477de3a7859104d7c41a36628169e13e524e980aYiannis TsiourisErlangGC::ErlangGC() { 42477de3a7859104d7c41a36628169e13e524e980aYiannis Tsiouris InitRoots = false; 43477de3a7859104d7c41a36628169e13e524e980aYiannis Tsiouris NeededSafePoints = 1 << GC::PostCall; 44477de3a7859104d7c41a36628169e13e524e980aYiannis Tsiouris UsesMetadata = true; 45477de3a7859104d7c41a36628169e13e524e980aYiannis Tsiouris CustomRoots = false; 46477de3a7859104d7c41a36628169e13e524e980aYiannis Tsiouris} 47