Changelog of @hackage/llvm-party 12.1.1

12.1.1 (2023.06.26)

  • Fix maintainer field

12.1.0 (2023.06.26)

  • Merge llvm-hs and llvm-hs-pure.
  • Fix the build
  • Add upper bounds to everything

llvm-hs changelog

12.0.0 (2021-03-19)

  • Update to LLVM 12.0
  • Remove OrcJIT V1 bindings and replace them with OrcJIT V2.

9.0.1 (2019-09-28)

  • Fix build with Clang on MacOS.
  • Expose LLVMOffsetOfElement as getOffsetOfElement.

9.0.0 (2019-09-06)

  • Support GHC 8.8
  • Update to LLVM 9.0
    • Note that this is the last LLVM release that supports the current OrcJIT APIs and llvm-hs does not yet have bindings for OrcJIT V2. If you are interested in working on that please get in touch. See https://github.com/llvm-hs/llvm-hs/issues/276 for more details.
    • The sanitizeAddresses field from MachineCodeOptions has been removed following a change in LLVM.
    • The MemorySanitizer now has two new options kernel and recover matching the options in LLVM.

8.1.0

  • Change withHostTargetMachine to accept the code model, relocation model, and optimization level as arguments. The old behaviour is available under the name withHostTargetMachineDefault.

8.0.0 (2019-03-10)

  • Upgrade to LLVM 8
  • It is now possible to define multiple variables with an empty name without causing a name collision. Variables with an empty name cannot be referenced. This fixes an issue caused by using IRBuilder’s extern helper.

7.0.1 (2018-09-29)

  • Support llvm-config executables named llvm-config-7 in addition to llvm-config-7.0 and llvm-config.

7.0.0 (2018-09-28)

  • Throw an EncodeException if a local variable is defined multiple times. This is consistent with llc which also forbids reusing variable names.
  • Update for LLVM 7.0:
    • The ORC JIT API has been changed to reflect the changes in LLVM itself. The test suite should give you a good idea of how to adapt your code but here is a summary:
      • There is now a separate ExecutionSession that tracks module handles.
      • SymbolResolver only has a single resolver function.
      • Creating an ObjectLinkingLayer requires a way to get the symbol resolver for a module.
      • Creating a CompileOnDemandLayer requires a way to set and get the symbol resolver for a module.

6.3.0 (2018-06-12)

  • findSymbol and findSymbolIn now return Either JITSymbolError JITSymbol if the JIT symbol has the error flag set or the address is 0. (This is consistent with how LLVM treats JIT symbols).
  • The return type of SymbolResolverFn has been changed to Either JITSymbolError JITSymbol. It is fine to return a 0 address in Right so existing resolvers can be adapted by wrapping the result in Right.
  • Fixed a bug where instructions were constant-folded during encoding. This caused problems since the API available on a Constant is not the same as the one on an Instruction (e.g., we cannot set metadata on a Constant).
  • Fix use-after-free in createObjectFile.
  • Add withObjectFile wrapper for createObjectFile and disposeObjectFile.
  • Add API for looking up symbols in the LinkingLayer.
  • Add LLVM.OrcJIT.CompileLayer and LLVM.OrcJIT.LinkingLayer modules that reexport the internal modules. The findSymbol/findSymbolIn methods that have previously been exported from LLVM.OrcJIT can now be found in LLVM.OrcJIT.CompileLayer.

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.1 (2018-05-06)

  • Fix the source distribution by adding missing files to extra-source-files.

6.1.0 (2018-05-05)

  • Remove the MetadataNodeReference constructor. References to metadata nodes are now encoded using the polymorphic MDRef type.
  • Add support for encoding and decoding debug metadata. Thanks to @xldenis who started that effort!
  • Drop support for GHC 7.10.
  • Support decoding/encoding of metadata in GlobalVariable and Function.
  • Fix check that the type of GlobalReference is correct in the presence of automatic renamings due to name collisions.
  • Extract LinkingLayer into a separate module.

6.0.0 (2018-03-06)

  • Support for LLVM 6.0, take a look at the changelog of llvm-hs-pure for details.
  • 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.
  • Enforce that Null is only used on pointer types. Existing uses of Null on arrays, structs and vector must be changed to the newly introduced AggregateZero.

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)

Bugfixes

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

Enhancements

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

4.0.1

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

llvm-hs-pure changelog

12.0.0 (2021-03-19)

  • Update to LLVM 12.0
  • Eliminate hard-coded assumption of 32-bit size_t
  • Add a runtime variant of the LLVM.AST.Constant.sizeof utility in LLVM.IRBuilder.Instruction.sizeof. The size of opaque structure types is unknown until link-time and therefore cannot be computed as a constant.
  • Handle type resolution through NamedTypeReference correctly: type resolution in LLVM depends on module state by design
  • Support the LLVM NoFree attribute
  • Add support for some more DWARF operators: DW_OP_bregx and DW_OP_push_object_address

9.1.0 (UNRELEASED)

  • IRBuilder: first emitted terminator (br, condBr, ret, ...) is only generated in final IR. This allows for greater composition of IR (and matches with LLVM semantics, since later instructions are unreachable).

9.0.0 (2019-09-06)

  • The functions in LLVM.IRBuilder.Constant no longer return a monadic context. To recover the previous behavior use pure. (Thanks to @jfaure)
  • LLVM.IRBuilder.Instruction.globalStringPtr returns a Constant instead of an Operand. (Thanks to @jfaure)
  • Fresh name generation in the IRBuilder should be significantly faster (Thanks to @luc-tielen)
  • Update to LLVM 9.0
    • The MainSubprogram constructor from DIFlag has been removed and a few new flags have been added.

8.0.0 (2019-03-10)

  • Upgrade to LLVM 8
  • Change type of value field in DITemplateValueParameter to Maybe Metadata to reflect that it can be null.

7.0.0 (2018-09-28)

  • Track type definitions in MonadModuleBuilder. This allows us to automatically resolve NamedTypeReferences in gep instructions. Note that type definitions must be defined before they are used (i.e. MonadFix will not behave correctly here).
  • Change the type of gep in the IRBuilder API to require a MonadModuleBuilder constraint.
  • Change the type of typedef in the IRBuilder API to return a NamedTypeReference to the newly defined type.
  • Update for LLVM 7.0:
    • Add isUnsigned field to DIEnumerator.
    • Change DISubrange to use the new DICount type instead of an Int64.
    • Merge checksum and checksumKind fields of DIFile into a checksum field of type Maybe ChecksumInfo.
    • Rename the variables field of DISubprogram to retainedNodes.

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)

Enhancements

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