Skip to content

Commit

Permalink
Add release notes.
Browse files Browse the repository at this point in the history
[skip ci]
  • Loading branch information
maleadt committed Sep 6, 2024
1 parent 0eab4eb commit 514966f
Show file tree
Hide file tree
Showing 2 changed files with 123 additions and 1 deletion.
122 changes: 122 additions & 0 deletions NEWS.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,122 @@
# LLVM.jl release notes


## In development: LLVM.jl v9.1

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, so this release is not technically breaking. 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:

- Metadata values attached using the `metadata` function [now need to
be](https://github.com/maleadt/LLVM.jl/pull/476) a subtype of `MDNode`. This behavior
was already expected by LLVM, but only triggered a crash using an assertions build.
- Creating a `ThreadSafeModule` from a `Module` [now
will](https://github.com/maleadt/LLVM.jl/pull/474) 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:

- Branch instruction predicate getters [have been
renamed](https://github.com/maleadt/LLVM.jl/pull/473) from `predicate_int` and
`predicate_float` to simply `predicate`. The old names are deprecated.
- Conversion of a `MDString` to a Julia string [is now
implemented](https://github.com/maleadt/LLVM.jl/pull/470) using the `convert` method,
rather than the `string` method. The old method is deprecated.
- The `delete!` and `unsafe_delete!` methods [have been
renamed](https://github.com/maleadt/LLVM.jl/pull/467) to `remove!` and `erase!` to more
closely match LLVM's terminology. The old names are deprecated.
- Copy constructors [have been deprecated](https://github.com/maleadt/LLVM.jl/pull/466) in
favor of explicit `copy` methods.
- Several publicly unused APIs that had been deprecated upstream, have been removed:
[`GlobalContext`](https://github.com/maleadt/LLVM.jl/pull/463),
[`ModuleProvider`](https://github.com/maleadt/LLVM.jl/pull/465),
[`PassRegistry`](https://github.com/maleadt/LLVM.jl/pull/461).

New features:

- A `lookup` function [has been added](https://github.com/maleadt/LLVM.jl/pull/458) to
enable extracting the address of a compiled function from an execution engine. This makes
it possible to simply `ccall` a compiled function without having to deal with
`GenericValue`s.


## LLVM.jl v9.0

Major changes:

- The `OperandBundle` API [was changed](https://github.com/maleadt/LLVM.jl/pull/437) to the
upstream version, replacing `OperandBundleDef` and `OperandBundleUse` with
`OperandBundle`, renaming `tag_name` to `tag` and removing `tag_id`. No deprecations are
in place for this change.
- The `SyncScope` API [was changed](https://github.com/maleadt/LLVM.jl/pull/443) to the
upstream version, switching from string-based synchronization scope names to a
`SyncScope` object, while adding `is_atomic` check and `syncscope`/`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](https://github.com/maleadt/LLVM.jl/pull/439) using the `NewPMAAManager` API.
- API wrappers [now come with](https://github.com/maleadt/LLVM.jl/pull/448) docstrings.
- Functions [have been added](https://github.com/maleadt/LLVM.jl/pull/447) to move between
blocks, instructions and functions without having to iterate using the parent.


## LLVM.jl v8.1

Minor changes:

- Support for Julia versions below v1.10 has been dropped.

New features:

- A [memory checker](https://github.com/maleadt/LLVM.jl/pull/420) has been added. Toggling
the `memcheck` preference to `true` will enable LLVM.jl to detect missing disposes, use
after frees, etc.
- Support for `atomic_rmw!` with synchronizatin scopes [has been
added](https://github.com/maleadt/LLVM.jl/pull/431)


## LLVM.jl v8.0

Major changes:

- The NewPM wrappers [have been overhauled](https://github.com/maleadt/LLVM.jl/pull/416) 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.


## LLVM.jl v7.2

Minor changes:

- Metadata APIs [have been extended](https://github.com/maleadt/LLVM.jl/pull/414) to all
value subtypes, making it possible to attach metadata to functions.


## LLVM.jl v7.1

Minor changes:

- The NewPM internalize pass [has been
extended](https://github.com/maleadt/LLVM.jl/pull/409) to support a list of exported
symbols. This makes it possible to switch GPUCompiler.jl to the new pass manager.


## LLVM.jl v7.0

Major changes:

- `LowerSIMDLoopPass` [was switched](https://github.com/maleadt/LLVM.jl/pull/398) to being a
loop pass on Julia v1.10. This may require having to use a different pass manager.
2 changes: 1 addition & 1 deletion Project.toml
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
name = "LLVM"
uuid = "929cbde3-209d-540e-8aea-75f648917ca0"
version = "9.0.0"
version = "9.1.0"

[deps]
CEnum = "fa961155-64e5-5f13-b03f-caf6b980ea82"
Expand Down

0 comments on commit 514966f

Please sign in to comment.