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.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.
comments powered byDisqus