Dear All, Is it possible to write a llvm pass in OCaml? Is there any API such as runOnModule() in ModulePass, runOnFunction() in FunctionPass in OCaml? I have looked through the tutorial, http://llvm.org/docs/tutorial/OCamlLangImpl1.html, it looks like just a tutorial about "Implementing a language with LLVM" in Objective Caml. Thank you for your help. Best Regards, GUanhua
Gordon Henriksen
2008-Apr-30 23:50 UTC
[LLVMdev] Is it possible to write a llvm pass in OCaml?
On Apr 30, 2008, at 12:56, proguan wrote:> Is it possible to write a llvm pass in OCaml? Is there any API such > as runOnModule() in ModulePass, runOnFunction() in FunctionPass in > OCaml?This would be a welcome addition to the bindings if you're interested. Implementing this would require deriving some C++ "glue pass" from each of the abstract base classes in the pass hierarchy (e.g. GlueFunctionPass, GlueModulePass, GlueSCCPass), then implementing runOn* to to invoke a callback. Note also that while existent, the introspection and modification features of the bindings (both C and Ocaml) are immature. Additional bindings would be necessary for almost any analysis or transformation of the IR.> I have looked through the tutorial, http://llvm.org/docs/tutorial/OCamlLangImpl1.html > , it looks like just a tutorial about "Implementing a language with > LLVM" in Objective Caml.That's correct. At present, the bindings are heavily oriented toward authoring a front-end compiler. As a cautionary note, I would like to point out that the nature of the bindings will prevent you from fully utilizing Objective Caml and functional algorithms. The bindings reflect directly onto the C++ object model using opaque values. Therefore, it isn't possible to use pattern matches to conveniently deconstruct IR objects as you might in a pure Objective Caml program. Nor is it possible to write pure functional transformations upon the IR, since values are not garbage collected. As an example, the ocamlopt compiler uses algorithms that are infeasible with the bindings: a top-down pattern matching instruction selector based on mutually recursive matches. Rather, your transformation algorithms will have to be essentially imperative. To write purely functional transformation algorithms, it would be necessary to re-implement the IR in Objective Caml. — Gordon
Apparently Analagous Threads
- [LLVMdev] first two chapters for the ocaml bindings in svn
- [LLVMdev] first two chapters for the ocaml bindings in svn
- [PATCH] Disable caml-stubdom by default
- [LLVMdev] LLVMContext: Who Creates It?
- [LLVMdev] LoopPass doFinalization() called multiple times per program?