Changelog for llvm-party-12.1.0
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
asgetOffsetOfElement
.
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 fromMachineCodeOptions
has been removed following a change in LLVM. - The
MemorySanitizer
now has two new optionskernel
andrecover
matching the options in LLVM.
- Note that this is the last LLVM release that supports the current
OrcJIT APIs and
8.1.0
- Change
withHostTargetMachine
to accept the code model, relocation model, and optimization level as arguments. The old behaviour is available under the namewithHostTargetMachineDefault
.
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 tollvm-config-7.0
andllvm-config
.
7.0.0 (2018-09-28)
- Throw an
EncodeException
if a local variable is defined multiple times. This is consistent withllc
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.
- There is now a separate
- 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:
6.3.0 (2018-06-12)
findSymbol
andfindSymbolIn
now returnEither 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 toEither JITSymbolError JITSymbol
. It is fine to return a 0 address inRight
so existing resolvers can be adapted by wrapping the result inRight
. - 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 forcreateObjectFile
anddisposeObjectFile
. - Add API for looking up symbols in the
LinkingLayer
. - Add
LLVM.OrcJIT.CompileLayer
andLLVM.OrcJIT.LinkingLayer
modules that reexport the internal modules. ThefindSymbol/findSymbolIn
methods that have previously been exported fromLLVM.OrcJIT
can now be found inLLVM.OrcJIT.CompileLayer
.
6.2.0 (2018-05-08)
- Remove field prefixes from
DIDerivedType
,DIBasicType
andDISubroutineType
to make the API consistent with the other debug metadata types. - Change the type of the scope fields in
DIModule
andDINamespace
toMaybe (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 polymorphicMDRef
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
andFunction
. - 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. PreviouslyNull
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 ofNull
on arrays, structs and vector must be changed to the newly introducedAggregateZero
.
5.1.3 (2018-01-06)
- Add bindings to
loadLibraryPermamently
andgetSymbolAddressInProcess
.
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 affectswithTargetMachine
andwithHostTargetMachine
. - 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 calledWin64
. - There is a new
Speculatable
function attribute. - The
CrossThread
synchronization scope has been removed. There is now a newSystem
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 typeDebugCompressionType
instead ofBool
. - The
BasicBlockVectorize
pass has been removed. You should useSuperwordLevelParallelismVectorize
instead.
- The
-
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*
anddispose*
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 inOrcJIT
.
- The user facing API is now exposed using
- Support QuickCheck 2.10
4.1.0 (2017-05-17)
- Switch most of the API from
String
toByteString
. - 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*
toLLVM.*
- 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 inLLVM.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
andDW_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 usepure
. (Thanks to @jfaure) LLVM.IRBuilder.Instruction.globalStringPtr
returns aConstant
instead of anOperand
. (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 fromDIFlag
has been removed and a few new flags have been added.
- The
8.0.0 (2019-03-10)
- Upgrade to LLVM 8
- Change type of
value
field inDITemplateValueParameter
toMaybe Metadata
to reflect that it can be null.
7.0.0 (2018-09-28)
- Track type definitions in
MonadModuleBuilder
. This allows us to automatically resolveNamedTypeReference
s ingep
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 theIRBuilder
API to require aMonadModuleBuilder
constraint. - Change the type of
typedef
in theIRBuilder
API to return aNamedTypeReference
to the newly defined type. - Update for LLVM 7.0:
- Add
isUnsigned
field toDIEnumerator
. - Change
DISubrange
to use the newDICount
type instead of anInt64
. - Merge
checksum
andchecksumKind
fields ofDIFile
into achecksum
field of typeMaybe ChecksumInfo
. - Rename the
variables
field ofDISubprogram
toretainedNodes
.
- Add
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
andDISubroutineType
to make the API consistent with the other debug metadata types. - Change the type of the scope fields in
DIModule
andDINamespace
toMaybe (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 polymorphicMDRef
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 toGlobalVariable
andFunction
.
6.0.0 (2018-03-06)
- Support for LLVM 6.0
- Add
StrictFP
andSanitizeHWAddress
function attributes. - Remove
UnsafeAlgebra
constructor fromFastMathFlags
. - Add
allowReassoc
,allowContract
andapproxFunc
fields toFastMathFlags
. - Remove
NoFastMathFlags
constructor since it is equivalent to setting all fields in theFastMathFlags
record toFalse
. Existing uses ofNoFastMathFlags
can be replaced by thenoFastMathFlags
value.
- Add
- Add
AggregateZero
for zero-initializing structs, arrays and vectors. PreviouslyNull
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 ofNull
on non-pointer types must be changed toAggregateZero
. - Fix recursive function calls in the
IRBuilder
API.
5.1.2 (2018-01-06)
- Fixes and enhancements to the IRBuilder
sdiv
andudiv
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 uponllvm-hs-pure
such asllvm-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 calledWin64
. - There is a new
Speculatable
function attribute. - The
CrossThread
synchronization scope has been removed. There is now a newSystem
synchronization scope.
- The
4.1.0 (2017-05-17)
- Switch AST to
ByteString
/ShortByteString
reflecting LLVM’s use of C-style strings. preferredAlignment
is now aWord32
instead ofMaybe 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 theaddrSpace
field. This makesGlobalAlias
consistent withGlobalVariable
.- The
FloatingPointType
constructor now takes aFloatingPointType
argument instead of a width and aFloatingPointFormat
to more closely match the LLVM IR language reference. - The
IsString
instance ofName
now throws an error on non-ASCII strings instead of silently discarding the upper bytes. There is also a newmkName
function with the same behavior for easier discoverability. Non-ASCII names need to be encoded using an arbitrary encoding to to aShortByteString
which can then be used as aName
.
4.0.0 (initial release, changes in comparison to llvm-general)
- Move modules from
LLVM.General*
toLLVM.*
- 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.