The most important feature of this release is the addition of documentation, both in the form of function docstrings, and an extensive manual.
As part of the documentation writing effort, many minor issues or areas for improvement were
identified, resulting in a large amount of minor, but breaking changes. For all of those,
deprecations are in place. However, it is strongly recommended to update your code to the
new APIs as soon as possible, which can be done by testing your code with --depwarn=error
.
Technically beaking changes (unlikely to affect any users):
- Metadata values attached using the
metadata
function now need to be a subtype ofMDNode
. This behavior was already expected by LLVM, but only triggered a crash using an assertions build. - Creating a
ThreadSafeModule
from aModule
now will copy the source module into the active thread-safe context. This is a behavioural change, but is unlikely to affect any users. The previous behavior resulted in the wrong context being used, which could lead to crashes.
Minor changes (breaking changes with deprecations):
- Branch instruction predicate getters have been
renamed from
predicate_int
andpredicate_float
to simplypredicate
. The old names are deprecated. - Conversion of a
MDString
to a Julia string is now implemented using theconvert
method, rather than thestring
method. The old method is deprecated. - The
delete!
andunsafe_delete!
methods have been renamed toremove!
anderase!
to more closely match LLVM's terminology. The old names are deprecated. - Copy constructors have been deprecated in
favor of explicit
copy
methods. - Several publicly unused APIs that had been deprecated upstream, have been removed:
GlobalContext
,ModuleProvider
,PassRegistry
.
New features:
- A
lookup
function has been added to enable extracting the address of a compiled function from an execution engine. This makes it possible to simplyccall
a compiled function without having to deal withGenericValue
s. globalstring!
andglobalstring_ptr!
now supportaddrspace
andadd_null
arguments, similar to their C++ counterparts.
Major changes:
- The
OperandBundle
API was changed to the upstream version, replacingOperandBundleDef
andOperandBundleUse
withOperandBundle
, renamingtag_name
totag
and removingtag_id
. No deprecations are in place for this change. - The
SyncScope
API was changed to the upstream version, switching from string-based synchronization scope names to aSyncScope
object, while addingis_atomic
check andsyncscope
/syncscope!
getters and setters for atomic instructions. Deprecations are in place for the old API.
New features:
- Support for LLVM 18
- An alias-analysis pipeline can now be
specified using the
NewPMAAManager
API. - API wrappers now come with docstrings.
- Functions have been added to move between blocks, instructions and functions without having to iterate using the parent.
Minor changes:
- Support for Julia versions below v1.10 has been dropped.
New features:
- A memory checker has been added. Toggling
the
memcheck
preference totrue
will enable LLVM.jl to detect missing disposes, use after frees, etc. - Support for
atomic_rmw!
with synchronizatin scopes has been added
Major changes:
- The NewPM wrappers have been overhauled to be based on the upstream string-based interface, rather than maintaining various API extensions to expose the pass manager internals. There are no deprecations in place for this change.
Minor changes:
- Metadata APIs have been extended to all value subtypes, making it possible to attach metadata to functions.
Minor changes:
- The NewPM internalize pass has been extended to support a list of exported symbols. This makes it possible to switch GPUCompiler.jl to the new pass manager.
Major changes:
LowerSIMDLoopPass
was switched to being a loop pass on Julia v1.10. This may require having to use a different pass manager.