|
| 1 | +# LLVM.jl release notes |
| 2 | + |
| 3 | + |
| 4 | +## In development: LLVM.jl v9.1 |
| 5 | + |
| 6 | +The most important feature of this release is the addition of documentation, both in the |
| 7 | +form of function docstrings, and an extensive manual. |
| 8 | + |
| 9 | +As part of the documentation writing effort, many minor issues or areas for improvement were |
| 10 | +identified, resulting in a large amount of minor, but breaking changes. For all of those, |
| 11 | +deprecations are in place, so this release is not technically breaking. However, it is |
| 12 | +strongly recommended to update your code to the new APIs as soon as possible, which can be |
| 13 | +done by testing your code with `--depwarn=error`. |
| 14 | + |
| 15 | +Technically beaking changes: |
| 16 | + |
| 17 | +- Metadata values attached using the `metadata` function [now need to |
| 18 | + be](https://github.com/maleadt/LLVM.jl/pull/476) a subtype of `MDNode`. This behavior |
| 19 | + was already expected by LLVM, but only triggered a crash using an assertions build. |
| 20 | +- Creating a `ThreadSafeModule` from a `Module` [now |
| 21 | + will](https://github.com/maleadt/LLVM.jl/pull/474) copy the source module into the active |
| 22 | + thread-safe context. This is a behavioural change, but is unlikely to affect any users. |
| 23 | + The previous behavior resulted in the wrong context being used, which could lead to |
| 24 | + crashes. |
| 25 | + |
| 26 | +Minor changes: |
| 27 | + |
| 28 | +- Branch instruction predicate getters [have been |
| 29 | + renamed](https://github.com/maleadt/LLVM.jl/pull/473) from `predicate_int` and |
| 30 | + `predicate_float` to simply `predicate`. The old names are deprecated. |
| 31 | +- Conversion of a `MDString` to a Julia string [is now |
| 32 | + implemented](https://github.com/maleadt/LLVM.jl/pull/470) using the `convert` method, |
| 33 | + rather than the `string` method. The old method is deprecated. |
| 34 | +- The `delete!` and `unsafe_delete!` methods [have been |
| 35 | + renamed](https://github.com/maleadt/LLVM.jl/pull/467) to `remove!` and `erase!` to more |
| 36 | + closely match LLVM's terminology. The old names are deprecated. |
| 37 | +- Copy constructors [have been deprecated](https://github.com/maleadt/LLVM.jl/pull/466) in |
| 38 | + favor of explicit `copy` methods. |
| 39 | +- Several publicly unused APIs that had been deprecated upstream, have been removed: |
| 40 | + [`GlobalContext`](https://github.com/maleadt/LLVM.jl/pull/463), |
| 41 | + [`ModuleProvider`](https://github.com/maleadt/LLVM.jl/pull/465), |
| 42 | + [`PassRegistry`](https://github.com/maleadt/LLVM.jl/pull/461). |
| 43 | + |
| 44 | +New features: |
| 45 | + |
| 46 | +- A `lookup` function [has been added](https://github.com/maleadt/LLVM.jl/pull/458) to |
| 47 | + enable extracting the address of a compiled function from an execution engine. This makes |
| 48 | + it possible to simply `ccall` a compiled function without having to deal with |
| 49 | + `GenericValue`s. |
| 50 | + |
| 51 | + |
| 52 | +## LLVM.jl v9.0 |
| 53 | + |
| 54 | +Major changes: |
| 55 | + |
| 56 | +- The `OperandBundle` API [was changed](https://github.com/maleadt/LLVM.jl/pull/437) to the |
| 57 | + upstream version, replacing `OperandBundleDef` and `OperandBundleUse` with |
| 58 | + `OperandBundle`, renaming `tag_name` to `tag` and removing `tag_id`. No deprecations are |
| 59 | + in place for this change. |
| 60 | +- The `SyncScope` API [was changed](https://github.com/maleadt/LLVM.jl/pull/443) to the |
| 61 | + upstream version, switching from string-based synchronization scope names to a |
| 62 | + `SyncScope` object, while adding `is_atomic` check and `syncscope`/`syncscope!` getters |
| 63 | + and setters for atomic instructions. Deprecations are in place for the old API. |
| 64 | + |
| 65 | +New features: |
| 66 | + |
| 67 | +- Support for LLVM 18 |
| 68 | +- An alias-analysis pipeline [can now be |
| 69 | + specified](https://github.com/maleadt/LLVM.jl/pull/439) using the `NewPMAAManager` API. |
| 70 | +- API wrappers [now come with](https://github.com/maleadt/LLVM.jl/pull/448) docstrings. |
| 71 | +- Functions [have been added](https://github.com/maleadt/LLVM.jl/pull/447) to move between |
| 72 | + blocks, instructions and functions without having to iterate using the parent. |
| 73 | + |
| 74 | + |
| 75 | +## LLVM.jl v8.1 |
| 76 | + |
| 77 | +Minor changes: |
| 78 | + |
| 79 | +- Support for Julia versions below v1.10 has been dropped. |
| 80 | + |
| 81 | +New features: |
| 82 | + |
| 83 | +- A [memory checker](https://github.com/maleadt/LLVM.jl/pull/420) has been added. Toggling |
| 84 | + the `memcheck` preference to `true` will enable LLVM.jl to detect missing disposes, use |
| 85 | + after frees, etc. |
| 86 | +- Support for `atomic_rmw!` with synchronizatin scopes [has been |
| 87 | + added](https://github.com/maleadt/LLVM.jl/pull/431) |
| 88 | + |
| 89 | + |
| 90 | +## LLVM.jl v8.0 |
| 91 | + |
| 92 | +Major changes: |
| 93 | + |
| 94 | +- The NewPM wrappers [have been overhauled](https://github.com/maleadt/LLVM.jl/pull/416) to |
| 95 | + be based on the upstream string-based interface, rather than maintaining various API |
| 96 | + extensions to expose the pass manager internals. There are no deprecations in place for |
| 97 | + this change. |
| 98 | + |
| 99 | + |
| 100 | +## LLVM.jl v7.2 |
| 101 | + |
| 102 | +Minor changes: |
| 103 | + |
| 104 | +- Metadata APIs [have been extended](https://github.com/maleadt/LLVM.jl/pull/414) to all |
| 105 | + value subtypes, making it possible to attach metadata to functions. |
| 106 | + |
| 107 | + |
| 108 | +## LLVM.jl v7.1 |
| 109 | + |
| 110 | +Minor changes: |
| 111 | + |
| 112 | +- The NewPM internalize pass [has been |
| 113 | + extended](https://github.com/maleadt/LLVM.jl/pull/409) to support a list of exported |
| 114 | + symbols. This makes it possible to switch GPUCompiler.jl to the new pass manager. |
| 115 | + |
| 116 | + |
| 117 | +## LLVM.jl v7.0 |
| 118 | + |
| 119 | +Major changes: |
| 120 | + |
| 121 | +- `LowerSIMDLoopPass` [was switched](https://github.com/maleadt/LLVM.jl/pull/398) to being a |
| 122 | + loop pass on Julia v1.10. This may require having to use a different pass manager. |
0 commit comments