llvm-hs-pure is a set of pure Haskell types and functions for interacting with LLVM http://llvm.org/. It includes an ADT to represent LLVM IR (http://llvm.org/docs/LangRef.html). The llvm-hs package builds on this one with FFI bindings to LLVM, but llvm-hs-pure does not require LLVM to be available.


6.2.1 (2018-06-12)

  • Fix type of shuffleVector in the IRBuilder API.

6.2.0 (2018-05-08)

  • Remove field prefixes from DIDerivedType, DIBasicType and DISubroutineType to make the API consistent with the other debug metadata types.
  • Change the type of the scope fields in DIModule and DINamespace to Maybe (MDRef DIScope) to reflect that they can be optional.

6.1.0 (2018-05-05)

  • IRBuilder: Ensure that automatically generated block labels are assigned smaller identifiers than the instructions following them. This is only important when you use llvm-hs-pretty. llvm-hs does not care about the order of identifiers assigned to unnamed values.
  • IRBuilder: add currentBlock which returns name of the currently active block.
  • Remove the MetadataNodeReference constructor. References to metadata nodes are now encoded using the polymorphic MDRef type.
  • Add debug metadata to the AST in LLVM.AST.Operand. Thanks to @xldenis who started that effort!
  • Drop support for GHC 7.10.
  • Add metadata field to GlobalVariable and Function.

6.0.0 (2018-03-06)

  • Support for LLVM 6.0
    • Add StrictFP and SanitizeHWAddress function attributes.
    • Remove UnsafeAlgebra constructor from FastMathFlags.
    • Add allowReassoc, allowContract and approxFunc fields to FastMathFlags.
    • Remove NoFastMathFlags constructor since it is equivalent to setting all fields in the FastMathFlags record to False. Existing uses of NoFastMathFlags can be replaced by the noFastMathFlags value.
  • Add AggregateZero for zero-initializing structs, arrays and vectors. Previously Null was used for null pointers as well as zero-inializing aggregates. The new behavior reflects LLVM’s internal representation and the C++-API. Existing uses of Null on non-pointer types must be changed to AggregateZero.
  • Fix recursive function calls in the IRBuilder API.

5.1.2 (2018-01-06)

  • Fixes and enhancements to the IRBuilder
    • sdiv and udiv no longer default to exact.
    • Fix type of global references.
    • Add more instructions.

5.1.1 (2017-12-16)

  • Add a completely new API for building modules in a monadic style similar to the IRBuilder provided by LLVM’s C++ API. The modules can be found in LLVM.IRBuilder. An example can be found in the readme and in the test suite.
  • Add an API for getting the type of LLVM values in LLVM.AST.Typed. This is primarily intended to be used in other libraries that build upon llvm-hs-pure such as llvm-hs-pretty.

5.1.0 (2017-10-12)


  • 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-pure 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.

4.1.0 (2017-05-17)

  • Switch AST to ByteString/ShortByteString reflecting LLVM’s use of C-style strings.
  • preferredAlignment is now a Word32 instead of Maybe Word32. To recover the old behavior set it to the same value as abiAlignment.
  • GlobalAlias now expects the element type of a pointer type instead of the pointer type itself. The address space is passed separately via the addrSpace field. This makes GlobalAlias consistent with GlobalVariable.
  • The FloatingPointType constructor now takes a FloatingPointType argument instead of a width and a FloatingPointFormat to more closely match the LLVM IR language reference.
  • The IsString instance of Name now throws an error on non-ASCII strings instead of silently discarding the upper bytes. There is also a new mkName function with the same behavior for easier discoverability. Non-ASCII names need to be encoded using an arbitrary encoding to to a ShortByteString which can then be used as a Name.

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.