| Gordon Henriksen | d930f91 | 2008-08-17 18:44:35 +0000 | [diff] [blame] | 1 | //===-- OcamlGC.cpp - Ocaml frametable GC strategy ------------------------===// | 
| Gordon Henriksen | bcef14d | 2008-08-17 12:56:54 +0000 | [diff] [blame] | 2 | // | 
|  | 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 Glushenkov | b2f9a73 | 2009-01-16 06:53:46 +0000 | [diff] [blame] | 12 | // | 
| Gordon Henriksen | d930f91 | 2008-08-17 18:44:35 +0000 | [diff] [blame] | 13 | // The frametable emitter is in OcamlGCPrinter.cpp. | 
| Gordon Henriksen | bcef14d | 2008-08-17 12:56:54 +0000 | [diff] [blame] | 14 | // | 
|  | 15 | //===----------------------------------------------------------------------===// | 
| Mikhail Glushenkov | b2f9a73 | 2009-01-16 06:53:46 +0000 | [diff] [blame] | 16 |  | 
| Gordon Henriksen | bcef14d | 2008-08-17 12:56:54 +0000 | [diff] [blame] | 17 | #include "llvm/CodeGen/GCs.h" | 
| Gordon Henriksen | bcef14d | 2008-08-17 12:56:54 +0000 | [diff] [blame] | 18 | #include "llvm/CodeGen/GCStrategy.h" | 
| Gordon Henriksen | bcef14d | 2008-08-17 12:56:54 +0000 | [diff] [blame] | 19 |  | 
|  | 20 | using namespace llvm; | 
|  | 21 |  | 
|  | 22 | namespace { | 
| Nick Lewycky | 02d5f77 | 2009-10-25 06:33:48 +0000 | [diff] [blame] | 23 | class OcamlGC : public GCStrategy { | 
| Gordon Henriksen | bcef14d | 2008-08-17 12:56:54 +0000 | [diff] [blame] | 24 | public: | 
| Gordon Henriksen | d930f91 | 2008-08-17 18:44:35 +0000 | [diff] [blame] | 25 | OcamlGC(); | 
| Gordon Henriksen | bcef14d | 2008-08-17 12:56:54 +0000 | [diff] [blame] | 26 | }; | 
| Gordon Henriksen | bcef14d | 2008-08-17 12:56:54 +0000 | [diff] [blame] | 27 | } | 
|  | 28 |  | 
| Gordon Henriksen | d930f91 | 2008-08-17 18:44:35 +0000 | [diff] [blame] | 29 | static GCRegistry::Add<OcamlGC> | 
|  | 30 | X("ocaml", "ocaml 3.10-compatible GC"); | 
| Gordon Henriksen | bcef14d | 2008-08-17 12:56:54 +0000 | [diff] [blame] | 31 |  | 
| Gordon Henriksen | d930f91 | 2008-08-17 18:44:35 +0000 | [diff] [blame] | 32 | void llvm::linkOcamlGC() { } | 
| Gordon Henriksen | bcef14d | 2008-08-17 12:56:54 +0000 | [diff] [blame] | 33 |  | 
| Gordon Henriksen | d930f91 | 2008-08-17 18:44:35 +0000 | [diff] [blame] | 34 | OcamlGC::OcamlGC() { | 
| Gordon Henriksen | bcef14d | 2008-08-17 12:56:54 +0000 | [diff] [blame] | 35 | NeededSafePoints = 1 << GC::PostCall; | 
|  | 36 | UsesMetadata = true; | 
|  | 37 | } |