|
| 1 | +<!-- This document is written in Markdown and uses extra directives provided by |
| 2 | +MyST (https://myst-parser.readthedocs.io/en/latest/). --> |
| 3 | + |
| 4 | +LLVM {{env.config.release}} Release Notes |
| 5 | +========================================= |
| 6 | + |
| 7 | +```{contents} |
| 8 | +``` |
| 9 | + |
| 10 | +````{only} PreRelease |
| 11 | +```{warning} These are in-progress notes for the upcoming LLVM {{env.config.release}} |
| 12 | + release. Release notes for previous releases can be found on |
| 13 | + [the Download Page](https://releases.llvm.org/download.html). |
| 14 | +``` |
| 15 | +```` |
| 16 | + |
| 17 | +Introduction |
| 18 | +============ |
| 19 | + |
| 20 | +This document contains the release notes for the LLVM Compiler Infrastructure, |
| 21 | +release {{env.config.release}}. Here we describe the status of LLVM, including |
| 22 | +major improvements from the previous release, improvements in various subprojects |
| 23 | +of LLVM, and some of the current users of the code. All LLVM releases may be |
| 24 | +downloaded from the [LLVM releases web site](https://llvm.org/releases/). |
| 25 | + |
| 26 | +For more information about LLVM, including information about the latest |
| 27 | +release, please check out the [main LLVM web site](https://llvm.org/). If you |
| 28 | +have questions or comments, the [Discourse forums](https://discourse.llvm.org) |
| 29 | +is a good place to ask them. |
| 30 | + |
| 31 | +Note that if you are reading this file from a Git checkout or the main |
| 32 | +LLVM web page, this document applies to the *next* release, not the current |
| 33 | +one. To see the release notes for a specific release, please see the |
| 34 | +[releases page](https://llvm.org/releases/). |
| 35 | + |
| 36 | +Non-comprehensive list of changes in this release |
| 37 | +================================================= |
| 38 | + |
| 39 | +<!-- For small 1-3 sentence descriptions, just add an entry at the end of |
| 40 | +this list. If your description won't fit comfortably in one bullet |
| 41 | +point (e.g. maybe you would like to give an example of the |
| 42 | +functionality, or simply have a lot to talk about), see the comment below |
| 43 | +for adding a new subsection. --> |
| 44 | + |
| 45 | +* ... |
| 46 | + |
| 47 | +<!-- If you would like to document a larger change, then you can add a |
| 48 | +subsection about it right here. You can copy the following boilerplate: |
| 49 | +
|
| 50 | +Special New Feature |
| 51 | +------------------- |
| 52 | +
|
| 53 | +Makes programs 10x faster by doing Special New Thing. |
| 54 | +--> |
| 55 | + |
| 56 | +Changes to the LLVM IR |
| 57 | +---------------------- |
| 58 | + |
| 59 | +* The `x86_mmx` IR type has been removed. It will be translated to |
| 60 | + the standard vector type `<1 x i64>` in bitcode upgrade. |
| 61 | +* Renamed `llvm.experimental.stepvector` intrinsic to `llvm.stepvector`. |
| 62 | + |
| 63 | +* Added `usub_cond` and `usub_sat` operations to `atomicrmw`. |
| 64 | + |
| 65 | +* Remove the following intrinsics which can be replaced with a `bitcast`: |
| 66 | + |
| 67 | + * `llvm.nvvm.bitcast.f2i` |
| 68 | + * `llvm.nvvm.bitcast.i2f` |
| 69 | + * `llvm.nvvm.bitcast.d2ll` |
| 70 | + * `llvm.nvvm.bitcast.ll2d` |
| 71 | + |
| 72 | +* Remove the following intrinsics which can be replaced with a funnel-shift: |
| 73 | + |
| 74 | + * `llvm.nvvm.rotate.b32` |
| 75 | + * `llvm.nvvm.rotate.right.b64` |
| 76 | + * `llvm.nvvm.rotate.b64` |
| 77 | + |
| 78 | +* Remove the following intrinsics which can be replaced with an |
| 79 | + `addrspacecast`: |
| 80 | + |
| 81 | + * `llvm.nvvm.ptr.gen.to.global` |
| 82 | + * `llvm.nvvm.ptr.gen.to.shared` |
| 83 | + * `llvm.nvvm.ptr.gen.to.constant` |
| 84 | + * `llvm.nvvm.ptr.gen.to.local` |
| 85 | + * `llvm.nvvm.ptr.global.to.gen` |
| 86 | + * `llvm.nvvm.ptr.shared.to.gen` |
| 87 | + * `llvm.nvvm.ptr.constant.to.gen` |
| 88 | + * `llvm.nvvm.ptr.local.to.gen` |
| 89 | + |
| 90 | +Changes to LLVM infrastructure |
| 91 | +------------------------------ |
| 92 | + |
| 93 | +Changes to building LLVM |
| 94 | +------------------------ |
| 95 | + |
| 96 | +Changes to TableGen |
| 97 | +------------------- |
| 98 | + |
| 99 | +Changes to Interprocedural Optimizations |
| 100 | +---------------------------------------- |
| 101 | + |
| 102 | +Changes to the AArch64 Backend |
| 103 | +------------------------------ |
| 104 | + |
| 105 | +* `.balign N, 0`, `.p2align N, 0`, `.align N, 0` in code sections will now fill |
| 106 | + the required alignment space with a sequence of `0x0` bytes (the requested |
| 107 | + fill value) rather than NOPs. |
| 108 | + |
| 109 | +Changes to the AMDGPU Backend |
| 110 | +----------------------------- |
| 111 | + |
| 112 | +* Removed `llvm.amdgcn.flat.atomic.fadd` and |
| 113 | + `llvm.amdgcn.global.atomic.fadd` intrinsics. Users should use the |
| 114 | + {ref}`atomicrmw <i_atomicrmw>` instruction with `fadd` and |
| 115 | + addrspace(0) or addrspace(1) instead. |
| 116 | + |
| 117 | +Changes to the ARM Backend |
| 118 | +-------------------------- |
| 119 | + |
| 120 | +* `.balign N, 0`, `.p2align N, 0`, `.align N, 0` in code sections will now fill |
| 121 | + the required alignment space with a sequence of `0x0` bytes (the requested |
| 122 | + fill value) rather than NOPs. |
| 123 | + |
| 124 | +Changes to the AVR Backend |
| 125 | +-------------------------- |
| 126 | + |
| 127 | +Changes to the DirectX Backend |
| 128 | +------------------------------ |
| 129 | + |
| 130 | +Changes to the Hexagon Backend |
| 131 | +------------------------------ |
| 132 | + |
| 133 | +Changes to the LoongArch Backend |
| 134 | +-------------------------------- |
| 135 | + |
| 136 | +Changes to the MIPS Backend |
| 137 | +--------------------------- |
| 138 | + |
| 139 | +Changes to the PowerPC Backend |
| 140 | +------------------------------ |
| 141 | + |
| 142 | +Changes to the RISC-V Backend |
| 143 | +----------------------------- |
| 144 | + |
| 145 | +* `.balign N, 0`, `.p2align N, 0`, `.align N, 0` in code sections will now fill |
| 146 | + the required alignment space with a sequence of `0x0` bytes (the requested |
| 147 | + fill value) rather than NOPs. |
| 148 | +* Added Syntacore SCR4 and SCR5 CPUs: `-mcpu=syntacore-scr4/5-rv32/64` |
| 149 | +* `-mcpu=sifive-p470` was added. |
| 150 | +* Added Hazard3 CPU as taped out for RP2350: `-mcpu=rp2350-hazard3` (32-bit |
| 151 | + only). |
| 152 | +* Fixed length vector support using RVV instructions now requires VLEN>=64. This |
| 153 | + means Zve32x and Zve32f will also require Zvl64b. The prior support was |
| 154 | + largely untested. |
| 155 | +* The `Zvbc32e` and `Zvkgs` extensions are now supported experimentally. |
| 156 | +* Added `Smctr` and `Ssctr` extensions. |
| 157 | +* `-mcpu=syntacore-scr7` was added. |
| 158 | +* The `Zacas` extension is no longer marked as experimental. |
| 159 | + |
| 160 | +Changes to the WebAssembly Backend |
| 161 | +---------------------------------- |
| 162 | + |
| 163 | +Changes to the Windows Target |
| 164 | +----------------------------- |
| 165 | + |
| 166 | +Changes to the X86 Backend |
| 167 | +-------------------------- |
| 168 | + |
| 169 | +* `.balign N, 0x90`, `.p2align N, 0x90`, and `.align N, 0x90` in code sections |
| 170 | + now fill the required alignment space with repeating `0x90` bytes, rather than |
| 171 | + using optimised NOP filling. Optimised NOP filling fills the space with NOP |
| 172 | + instructions of various widths, not just those that use the `0x90` byte |
| 173 | + encoding. To use optimised NOP filling in a code section, leave off the |
| 174 | + "fillval" argument, i.e. `.balign N`, `.p2align N` or `.align N` respectively. |
| 175 | + |
| 176 | +* Due to the removal of the `x86_mmx` IR type, functions with |
| 177 | + `x86_mmx` arguments or return values will use a different, |
| 178 | + incompatible, calling convention ABI. Such functions are not |
| 179 | + generally seen in the wild (Clang never generates them!), so this is |
| 180 | + not expected to result in real-world compatibility problems. |
| 181 | + |
| 182 | +* Support ISA of `AVX10.2-256` and `AVX10.2-512`. |
| 183 | + |
| 184 | +Changes to the OCaml bindings |
| 185 | +----------------------------- |
| 186 | + |
| 187 | +Changes to the Python bindings |
| 188 | +------------------------------ |
| 189 | + |
| 190 | +Changes to the C API |
| 191 | +-------------------- |
| 192 | + |
| 193 | +* The following symbols are deleted due to the removal of the `x86_mmx` IR type: |
| 194 | + |
| 195 | + * `LLVMX86_MMXTypeKind` |
| 196 | + * `LLVMX86MMXTypeInContext` |
| 197 | + * `LLVMX86MMXType` |
| 198 | + |
| 199 | + * The following functions are added to further support non-null-terminated strings: |
| 200 | + |
| 201 | + * `LLVMGetNamedFunctionWithLength` |
| 202 | + * `LLVMGetNamedGlobalWithLength` |
| 203 | + |
| 204 | +* The following functions are added to access the `LLVMContextRef` associated |
| 205 | + with `LLVMValueRef` and `LLVMBuilderRef` objects: |
| 206 | + |
| 207 | + * `LLVMGetValueContext` |
| 208 | + * `LLVMGetBuilderContext` |
| 209 | + |
| 210 | +* The new pass manager can now be invoked with a custom alias analysis pipeline, using |
| 211 | + the `LLVMPassBuilderOptionsSetAAPipeline` function. |
| 212 | + |
| 213 | +* It is now also possible to run the new pass manager on a single function, by calling |
| 214 | + `LLVMRunPassesOnFunction` instead of `LLVMRunPasses`. |
| 215 | + |
| 216 | +* Support for creating instructions with custom synchronization scopes has been added: |
| 217 | + |
| 218 | + * `LLVMGetSyncScopeID` to map a synchronization scope name to an ID. |
| 219 | + * `LLVMBuildFenceSyncScope`, `LLVMBuildAtomicRMWSyncScope` and |
| 220 | + `LLVMBuildAtomicCmpXchgSyncScope` versions of the existing builder functions |
| 221 | + with an additional synchronization scope ID parameter. |
| 222 | + * `LLVMGetAtomicSyncScopeID` and `LLVMSetAtomicSyncScopeID` to get and set the |
| 223 | + synchronization scope of any atomic instruction. |
| 224 | + * `LLVMIsAtomic` to check if an instruction is atomic, for use with the above functions. |
| 225 | + Because of backwards compatibility, `LLVMIsAtomicSingleThread` and |
| 226 | + `LLVMSetAtomicSingleThread` continue to work with any instruction type. |
| 227 | + |
| 228 | +* The `LLVMSetPersonalityFn` and `LLVMSetInitializer` APIs now support clearing the |
| 229 | + personality function and initializer respectively by passing a null pointer. |
| 230 | + |
| 231 | +* The following functions are added to allow iterating over debug records attached to |
| 232 | + instructions: |
| 233 | + |
| 234 | + * `LLVMGetFirstDbgRecord` |
| 235 | + * `LLVMGetLastDbgRecord` |
| 236 | + * `LLVMGetNextDbgRecord` |
| 237 | + * `LLVMGetPreviousDbgRecord` |
| 238 | + |
| 239 | +* Added `LLVMAtomicRMWBinOpUSubCond` and `LLVMAtomicRMWBinOpUSubSat` to `LLVMAtomicRMWBinOp` enum for AtomicRMW instructions. |
| 240 | + |
| 241 | +Changes to the CodeGen infrastructure |
| 242 | +------------------------------------- |
| 243 | + |
| 244 | +Changes to the Metadata Info |
| 245 | +--------------------------------- |
| 246 | + |
| 247 | +Changes to the Debug Info |
| 248 | +--------------------------------- |
| 249 | + |
| 250 | +Changes to the LLVM tools |
| 251 | +--------------------------------- |
| 252 | + |
| 253 | +Changes to LLDB |
| 254 | +--------------------------------- |
| 255 | + |
| 256 | +Changes to BOLT |
| 257 | +--------------------------------- |
| 258 | + |
| 259 | +Changes to Sanitizers |
| 260 | +--------------------- |
| 261 | + |
| 262 | +Other Changes |
| 263 | +------------- |
| 264 | + |
| 265 | +External Open Source Projects Using LLVM {{env.config.release}} |
| 266 | +=============================================================== |
| 267 | + |
| 268 | +* A project... |
| 269 | + |
| 270 | +Additional Information |
| 271 | +====================== |
| 272 | + |
| 273 | +A wide variety of additional information is available on the |
| 274 | +[LLVM web page](https://llvm.org/), in particular in the |
| 275 | +[documentation](https://llvm.org/docs/) section. The web page also contains |
| 276 | +versions of the API documentation which is up-to-date with the Git version of |
| 277 | +the source code. You can access versions of these documents specific to this |
| 278 | +release by going into the `llvm/docs/` directory in the LLVM tree. |
| 279 | + |
| 280 | +If you have any questions or comments about LLVM, please feel free to contact |
| 281 | +us via the [Discourse forums](https://discourse.llvm.org). |
0 commit comments