General purpose LLVM bindings


Version on this page:5.1.3@rev:1
LTS Haskell 18.28:9.0.1
Stackage Nightly 2021-06-14:9.0.1
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
This version can be pinned in stack with:llvm-hs-5.1.3@sha256:d00b43e278056cab6017f4dbce3dfe4f26873e97838caf060d3c5691cd7f1d65,8892

Module documentation for 5.1.3

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.