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