Run DCE after a LoopFlatten test to reduce spurious output [nfc]
[llvm-project.git] / llvm / docs / ReleaseNotes.rst
blob25817e6e1d7f4137c53b739014de09309cd386f9
1 ============================
2 LLVM |release| Release Notes
3 ============================
5 .. contents::
6     :local:
8 .. only:: PreRelease
10   .. warning::
11      These are in-progress notes for the upcoming LLVM |version| release.
12      Release notes for previous releases can be found on
13      `the Download Page <https://releases.llvm.org/download.html>`_.
16 Introduction
17 ============
19 This document contains the release notes for the LLVM Compiler Infrastructure,
20 release |release|.  Here we describe the status of LLVM, including major improvements
21 from the previous release, improvements in various subprojects of LLVM, and
22 some of the current users of the code.  All LLVM releases may be downloaded
23 from the `LLVM releases web site <https://llvm.org/releases/>`_.
25 For more information about LLVM, including information about the latest
26 release, please check out the `main LLVM web site <https://llvm.org/>`_.  If you
27 have questions or comments, the `Discourse forums
28 <https://discourse.llvm.org>`_ is a good place to ask
29 them.
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 `releases
34 page <https://llvm.org/releases/>`_.
36 Non-comprehensive list of changes in this release
37 =================================================
38 .. NOTE
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 `NOTE` below
43    for adding a new subsection.
45 * ...
47 Update on required toolchains to build LLVM
48 -------------------------------------------
50 Changes to the LLVM IR
51 ----------------------
53 * The `llvm.stacksave` and `llvm.stackrestore` intrinsics now use
54   an overloaded pointer type to support non-0 address spaces.
55 * The constant expression variants of the following instructions have been
56   removed:
58   * ``and``
59   * ``or``
61 * Added `llvm.exp10` intrinsic.
63 Changes to LLVM infrastructure
64 ------------------------------
66 Changes to building LLVM
67 ------------------------
69 Changes to TableGen
70 -------------------
72 * Added constructs for debugging TableGen files:
74   * `dump` keyword to dump messages to standard error, see
75      https://github.com/llvm/llvm-project/pull/68793.
76   * `!repr` bang operator to inspect the content of values, see
77      https://github.com/llvm/llvm-project/pull/68716.
79 Changes to Interprocedural Optimizations
80 ----------------------------------------
82 Changes to the AArch64 Backend
83 ------------------------------
85 Changes to the AMDGPU Backend
86 -----------------------------
88 * `llvm.sqrt.f32` is now lowered correctly. Use `llvm.amdgcn.sqrt.f32`
89   for raw instruction access.
91 * Implemented `llvm.stacksave` and `llvm.stackrestore` intrinsics.
93 * Implemented :ref:`llvm.get.rounding <int_get_rounding>`
95 Changes to the ARM Backend
96 --------------------------
98 Changes to the AVR Backend
99 --------------------------
101 Changes to the DirectX Backend
102 ------------------------------
104 Changes to the Hexagon Backend
105 ------------------------------
107 Changes to the LoongArch Backend
108 --------------------------------
110 Changes to the MIPS Backend
111 ---------------------------
113 Changes to the PowerPC Backend
114 ------------------------------
116 Changes to the RISC-V Backend
117 -----------------------------
119 * The Zfa extension version was upgraded to 1.0 and is no longer experimental.
120 * Zihintntl extension version was upgraded to 1.0 and is no longer experimental.
122 Changes to the WebAssembly Backend
123 ----------------------------------
125 Changes to the Windows Target
126 -----------------------------
128 * The LLVM filesystem class ``UniqueID`` and function ``equivalent()``
129   no longer determine that distinct different path names for the same
130   hard linked file actually are equal. This is an intentional tradeoff in a
131   bug fix, where the bug used to cause distinct files to be considered
132   equivalent on some file systems. This change fixed the issues
133   https://github.com/llvm/llvm-project/issues/61401 and
134   https://github.com/llvm/llvm-project/issues/22079.
136 Changes to the X86 Backend
137 --------------------------
139 * The ``i128`` type now matches GCC and clang's ``__int128`` type. This mainly
140   benefits external projects such as Rust which aim to be binary compatible
141   with C, but also fixes code generation where LLVM already assumed that the
142   type matched and called into libgcc helper functions.
143 * Support ISA of ``USER_MSR``.
144 * Support ISA of ``AVX10.1-256`` and ``AVX10.1-512``.
145 * ``-mcpu=pantherlake`` and ``-mcpu=clearwaterforest`` are now supported.
147 Changes to the OCaml bindings
148 -----------------------------
150 Changes to the Python bindings
151 ------------------------------
153 * The python bindings have been removed.
156 Changes to the C API
157 --------------------
159 * Added ``LLVMGetTailCallKind`` and ``LLVMSetTailCallKind`` to
160   allow getting and setting ``tail``, ``musttail``, and ``notail``
161   attributes on call instructions.
162 * The following functions for creating constant expressions have been removed,
163   because the underlying constant expressions are no longer supported. Instead,
164   an instruction should be created using the ``LLVMBuildXYZ`` APIs, which will
165   constant fold the operands if possible and create an instruction otherwise:
167   * ``LLVMConstAnd``
168   * ``LLVMConstOr``
170 * Added ``LLVMCreateTargetMachineWithOptions``, along with helper functions for
171   an opaque option structure, as an alternative to ``LLVMCreateTargetMachine``.
172   The option structure exposes an additional setting (i.e., the target ABI) and
173   provides default values for unspecified settings.
175 Changes to the CodeGen infrastructure
176 -------------------------------------
178 * ``PrologEpilogInserter`` no longer supports register scavenging
179   during forwards frame index elimination. Targets should use
180   backwards frame index elimination instead.
182 * ``RegScavenger`` no longer supports forwards register
183   scavenging. Clients should use backwards register scavenging
184   instead, which is preferred because it does not depend on accurate
185   kill flags.
187 Changes to the Metadata Info
188 ---------------------------------
190 Changes to the Debug Info
191 ---------------------------------
193 Changes to the LLVM tools
194 ---------------------------------
196 * llvm-symbolizer now treats invalid input as an address for which source
197   information is not found.
198 * llvm-readelf now supports ``--extra-sym-info`` (``-X``) to display extra
199   information (section name) when showing symbols.
201 * ``llvm-nm`` now supports the ``--line-numbers`` (``-l``) option to use
202   debugging information to print symbols' filenames and line numbers.
204 * llvm-symbolizer and llvm-addr2line now support addresses specified as symbol names.
206 Changes to LLDB
207 ---------------------------------
209 * Methods in SBHostOS related to threads have had their implementations
210   removed. These methods will return a value indicating failure.
211 * ``SBType::FindDirectNestedType`` function is added. It's useful
212   for formatters to quickly find directly nested type when it's known
213   where to search for it, avoiding more expensive global search via
214   ``SBTarget::FindFirstType``.
215 * ``lldb-vscode`` was renamed to ``lldb-dap`` and and its installation
216   instructions have been updated to reflect this. The underlying functionality
217   remains unchanged.
218 * The ``mte_ctrl`` register can now be read from AArch64 Linux core files.
220 * LLDB now supports debugging the Scalable Matrix Extension (SME) on AArch64
221   Linux for both running processes and core files. For details refer to the
222   `AArch64 Linux documentation <https://lldb.llvm.org/use/aarch64-linux.html>`_.
224 Changes to Sanitizers
225 ---------------------
226 * HWASan now defaults to detecting use-after-scope bugs.
228 Other Changes
229 -------------
231 * The ``Flags`` field of ``llvm::opt::Option`` has been split into ``Flags``
232   and ``Visibility`` to simplify option sharing between various drivers (such
233   as ``clang``, ``clang-cl``, or ``flang``) that rely on Clang's Options.td.
234   Overloads of ``llvm::opt::OptTable`` that use ``FlagsToInclude`` have been
235   deprecated. There is a script and instructions on how to resolve conflicts -
236   see https://reviews.llvm.org/D157150 and https://reviews.llvm.org/D157151 for
237   details.
239 * On Linux, FreeBSD, and NetBSD, setting the environment variable
240   ``LLVM_ENABLE_SYMBOLIZER_MARKUP`` causes tools to print stacktraces using
241   :doc:`Symbolizer Markup <SymbolizerMarkupFormat>`.
242   This works even if the tools have no embedded symbol information (i.e. are
243   fully stripped); :doc:`llvm-symbolizer <CommandGuide/llvm-symbolizer>` can
244   symbolize the markup afterwards using ``debuginfod``.
246 External Open Source Projects Using LLVM 15
247 ===========================================
249 * A project...
251 Additional Information
252 ======================
254 A wide variety of additional information is available on the `LLVM web page
255 <https://llvm.org/>`_, in particular in the `documentation
256 <https://llvm.org/docs/>`_ section.  The web page also contains versions of the
257 API documentation which is up-to-date with the Git version of the source
258 code.  You can access versions of these documents specific to this release by
259 going into the ``llvm/docs/`` directory in the LLVM tree.
261 If you have any questions or comments about LLVM, please feel free to contact
262 us via the `Discourse forums <https://discourse.llvm.org>`_.