[LLVMdev] Is it possible to write a llvm pass in OCaml?
gordonhenriksen at mac.com
Wed Apr 30 16:50:20 PDT 2008
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
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.
More information about the llvm-dev