General purpose LLVM bindings http://github.com/llvm-hs/llvm-hs/

Latest on Hackage:9.0.1

See all snapshots llvm-hs appears in

BSD-3-Clause licensed by Anthony Cowley, Stephen Diehl, Moritz Kiefer, Benjamin S. Scarlet
Maintained by Anthony Cowley, Stephen Diehl, Moritz Kiefer

Module documentation for 5.1.3

This version can be pinned in stack with:llvm-hs-5.1.3@sha256:d00b43e278056cab6017f4dbce3dfe4f26873e97838caf060d3c5691cd7f1d65,8892

llvm-hs is a set of Haskell bindings for LLVM http://llvm.org/. Unlike other current Haskell bindings, it uses an ADT to represent LLVM IR (http://llvm.org/docs/LangRef.html), and so offers two advantages: it handles almost all of the stateful complexities of using the LLVM API to build IR; and it supports moving IR not only from Haskell into LLVM C++ objects, but the other direction - from LLVM C++ into Haskell.


5.1.3 (2018-01-06)

  • Add bindings to loadLibraryPermamently and getSymbolAddressInProcess.

5.1.2 (2017-12-19)

  • Reupload of 5.1.1 since Hackage broke during the original upload.

5.1.1 (2017-12-16)

  • Fix argument order in LLVM_Hs_CreateTargetMachine. This affects withTargetMachine and withHostTargetMachine.
  • Add support for MCTargetOptions.

5.1.0 (2017-10-12)


  • Set target options in withTargetMachine. Previously the options passed there were simply ignored.
  • Fix decoding of constant vectors.
  • Fix decoding of function attributes in calls.


  • Support for more target options.
  • Suport string attributes as parameter attributes.
  • Support more calling conventions.
  • Support NoTail TailCallKind.

5.0.0 (2017-09-07)

  • Support for LLVM 5.0

    We only give a summary of the changes affecting the public API of llvm-hs here. Please refer to the official release notes for LLVM 5.0 for an overview of all changes in LLVM 5.0.

    • The X86_64_Win64 calling convention is now called Win64.
    • There is a new Speculatable function attribute.
    • The CrossThread synchronization scope has been removed. There is now a new System synchronization scope.
    • The OrcJIT-API now operates on individual modules instead of sets of modules.
    • The lessPreciseFloatingPointMultiplyAddOption field has been removed from the target options.
    • The compressDebugSections option field is now of type DebugCompressionType instead of Bool.
    • The BasicBlockVectorize pass has been removed. You should use SuperwordLevelParallelismVectorize instead.
  • Throw ‘EncodeException’ when the type supplied in a ‘GlobalReference’ does not match the type of the expression.

  • Throw ‘EncodeException’ when the result of instructions returning void is named using ‘:=’.

4.2.0 (2017-06-20)

  • Revamp OrcJIT API
    • The user facing API is now exposed using LLVM.OrcJIT.
    • All user facing functions have been documented.
    • In addition the bracket-style API, there are now new* and dispose* functions making it easier to ingegrate OrcJIT in custom monad transformer stacks.
    • There is a new CompileLayer typeclass which abstracts over the various compile layers in OrcJIT.
  • Support QuickCheck 2.10

4.1.0 (2017-05-17)

  • Switch most of the API from String to ByteString.
  • Switch from ExceptT to using exceptions. See LLVM.Exception for an overview of the exceptions potentially thrown.


  • Fix linking of system libraries

4.0.0 (initial release, changes in comparison to llvm-general)

  • Move modules from LLVM.General* to LLVM.*
  • Support for LLVM 4.0
  • Improved support for LLVM’s exception handling instructions
  • -fshared-llvm is now supported on windows (thanks to @RyanGLScott)
  • Default to -fshared-llvm
  • Expose LLVM.Internal.* modules.