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
metadatafunction 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
ThreadSafeModulefrom aModulenow 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_intandpredicate_floatto simplypredicate. The old names are deprecated. - Conversion of a
MDStringto a Julia string is now implemented using theconvertmethod, rather than thestringmethod. 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
copymethods. - Several publicly unused APIs that had been deprecated upstream, have been removed:
GlobalContext,ModuleProvider,PassRegistry.
New features:
- A
lookupfunction has been added to enable extracting the address of a compiled function from an execution engine. This makes it possible to simplyccalla compiled function without having to deal withGenericValues. globalstring!andglobalstring_ptr!now supportaddrspaceandadd_nullarguments, similar to their C++ counterparts.
Major changes:
- The
OperandBundleAPI was changed to the upstream version, replacingOperandBundleDefandOperandBundleUsewithOperandBundle, renamingtag_nametotagand removingtag_id. No deprecations are in place for this change. - The
SyncScopeAPI was changed to the upstream version, switching from string-based synchronization scope names to aSyncScopeobject, while addingis_atomiccheck 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
NewPMAAManagerAPI. - 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
memcheckpreference totruewill 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:
LowerSIMDLoopPasswas switched to being a loop pass on Julia v1.10. This may require having to use a different pass manager.