| ============================ |
| LLVM |release| Release Notes |
| ============================ |
| |
| .. contents:: |
| :local: |
| |
| .. only:: PreRelease |
| |
| .. warning:: |
| These are in-progress notes for the upcoming LLVM |version| release. |
| Release notes for previous releases can be found on |
| `the Download Page <https://releases.llvm.org/download.html>`_. |
| |
| |
| Introduction |
| ============ |
| |
| This document contains the release notes for the LLVM Compiler Infrastructure, |
| release |release|. Here we describe the status of LLVM, including major improvements |
| from the previous release, improvements in various subprojects of LLVM, and |
| some of the current users of the code. All LLVM releases may be downloaded |
| from the `LLVM releases web site <https://llvm.org/releases/>`_. |
| |
| For more information about LLVM, including information about the latest |
| release, please check out the `main LLVM web site <https://llvm.org/>`_. If you |
| have questions or comments, the `Discourse forums |
| <https://discourse.llvm.org>`_ is a good place to ask |
| them. |
| |
| Note that if you are reading this file from a Git checkout or the main |
| LLVM web page, this document applies to the *next* release, not the current |
| one. To see the release notes for a specific release, please see the `releases |
| page <https://llvm.org/releases/>`_. |
| |
| Non-comprehensive list of changes in this release |
| ================================================= |
| .. NOTE |
| For small 1-3 sentence descriptions, just add an entry at the end of |
| this list. If your description won't fit comfortably in one bullet |
| point (e.g. maybe you would like to give an example of the |
| functionality, or simply have a lot to talk about), see the `NOTE` below |
| for adding a new subsection. |
| |
| * ... |
| |
| Update on required toolchains to build LLVM |
| ------------------------------------------- |
| |
| Changes to the LLVM IR |
| ---------------------- |
| |
| * The `llvm.stacksave` and `llvm.stackrestore` intrinsics now use |
| an overloaded pointer type to support non-0 address spaces. |
| * The constant expression variants of the following instructions have been |
| removed: |
| |
| * ``and`` |
| * ``or`` |
| * ``lshr`` |
| * ``ashr`` |
| * ``zext`` |
| * ``sext`` |
| * ``fptrunc`` |
| * ``fpext`` |
| * ``fptoui`` |
| * ``fptosi`` |
| * ``uitofp`` |
| * ``sitofp`` |
| |
| * Added `llvm.exp10` intrinsic. |
| |
| Changes to LLVM infrastructure |
| ------------------------------ |
| |
| Changes to building LLVM |
| ------------------------ |
| |
| Changes to TableGen |
| ------------------- |
| |
| * Added constructs for debugging TableGen files: |
| |
| * `dump` keyword to dump messages to standard error, see |
| https://github.com/llvm/llvm-project/pull/68793. |
| * `!repr` bang operator to inspect the content of values, see |
| https://github.com/llvm/llvm-project/pull/68716. |
| |
| Changes to Interprocedural Optimizations |
| ---------------------------------------- |
| |
| Changes to the AArch64 Backend |
| ------------------------------ |
| |
| Changes to the AMDGPU Backend |
| ----------------------------- |
| |
| * `llvm.sqrt.f32` is now lowered correctly. Use `llvm.amdgcn.sqrt.f32` |
| for raw instruction access. |
| |
| * Implemented `llvm.stacksave` and `llvm.stackrestore` intrinsics. |
| |
| * Implemented :ref:`llvm.get.rounding <int_get_rounding>` |
| |
| * Added support for Cortex-A520, Cortex-A720 and Cortex-X4 CPUs. |
| |
| Changes to the ARM Backend |
| -------------------------- |
| |
| Changes to the AVR Backend |
| -------------------------- |
| |
| Changes to the DirectX Backend |
| ------------------------------ |
| |
| Changes to the Hexagon Backend |
| ------------------------------ |
| |
| Changes to the LoongArch Backend |
| -------------------------------- |
| |
| Changes to the MIPS Backend |
| --------------------------- |
| |
| Changes to the PowerPC Backend |
| ------------------------------ |
| |
| Changes to the RISC-V Backend |
| ----------------------------- |
| |
| * The Zfa extension version was upgraded to 1.0 and is no longer experimental. |
| * Zihintntl extension version was upgraded to 1.0 and is no longer experimental. |
| * Intrinsics were added for Zk*, Zbb, and Zbc. See https://github.com/riscv-non-isa/riscv-c-api-doc/blob/master/riscv-c-api.md#scalar-bit-manipulation-extension-intrinsics |
| |
| Changes to the WebAssembly Backend |
| ---------------------------------- |
| |
| Changes to the Windows Target |
| ----------------------------- |
| |
| * The LLVM filesystem class ``UniqueID`` and function ``equivalent()`` |
| no longer determine that distinct different path names for the same |
| hard linked file actually are equal. This is an intentional tradeoff in a |
| bug fix, where the bug used to cause distinct files to be considered |
| equivalent on some file systems. This change fixed the issues |
| https://github.com/llvm/llvm-project/issues/61401 and |
| https://github.com/llvm/llvm-project/issues/22079. |
| |
| Changes to the X86 Backend |
| -------------------------- |
| |
| * The ``i128`` type now matches GCC and clang's ``__int128`` type. This mainly |
| benefits external projects such as Rust which aim to be binary compatible |
| with C, but also fixes code generation where LLVM already assumed that the |
| type matched and called into libgcc helper functions. |
| * Support ISA of ``USER_MSR``. |
| * Support ISA of ``AVX10.1-256`` and ``AVX10.1-512``. |
| * ``-mcpu=pantherlake`` and ``-mcpu=clearwaterforest`` are now supported. |
| * ``-mapxf`` is supported. |
| |
| Changes to the OCaml bindings |
| ----------------------------- |
| |
| Changes to the Python bindings |
| ------------------------------ |
| |
| * The python bindings have been removed. |
| |
| |
| Changes to the C API |
| -------------------- |
| |
| * Added ``LLVMGetTailCallKind`` and ``LLVMSetTailCallKind`` to |
| allow getting and setting ``tail``, ``musttail``, and ``notail`` |
| attributes on call instructions. |
| * The following functions for creating constant expressions have been removed, |
| because the underlying constant expressions are no longer supported. Instead, |
| an instruction should be created using the ``LLVMBuildXYZ`` APIs, which will |
| constant fold the operands if possible and create an instruction otherwise: |
| |
| * ``LLVMConstAnd`` |
| * ``LLVMConstOr`` |
| * ``LLVMConstLShr`` |
| * ``LLVMConstAShr`` |
| * ``LLVMConstZExt`` |
| * ``LLVMConstSExt`` |
| * ``LLVMConstZExtOrBitCast`` |
| * ``LLVMConstSExtOrBitCast`` |
| * ``LLVMConstIntCast`` |
| * ``LLVMConstFPTrunc`` |
| * ``LLVMConstFPExt`` |
| * ``LLVMConstFPToUI`` |
| * ``LLVMConstFPToSI`` |
| * ``LLVMConstUIToFP`` |
| * ``LLVMConstSIToFP`` |
| * ``LLVMConstFPCast`` |
| |
| * Added ``LLVMCreateTargetMachineWithOptions``, along with helper functions for |
| an opaque option structure, as an alternative to ``LLVMCreateTargetMachine``. |
| The option structure exposes an additional setting (i.e., the target ABI) and |
| provides default values for unspecified settings. |
| |
| * Added ``LLVMGetNNeg`` and ``LLVMSetNNeg`` for setting/getting the new nneg flag |
| on zext instructions |
| |
| Changes to the CodeGen infrastructure |
| ------------------------------------- |
| |
| * A new debug type ``isel-dump`` is added to show only the SelectionDAG dumps |
| after each ISel phase (i.e. ``-debug-only=isel-dump``). This new debug type |
| can be filtered by function names using ``-filter-print-funcs=<function names>``, |
| the same flag used to filter IR dumps after each Pass. Note that the existing |
| ``-debug-only=isel`` will take precedence over the new behavior and |
| print SelectionDAG dumps of every single function regardless of |
| ``-filter-print-funcs``'s values. |
| |
| * ``PrologEpilogInserter`` no longer supports register scavenging |
| during forwards frame index elimination. Targets should use |
| backwards frame index elimination instead. |
| |
| * ``RegScavenger`` no longer supports forwards register |
| scavenging. Clients should use backwards register scavenging |
| instead, which is preferred because it does not depend on accurate |
| kill flags. |
| |
| Changes to the Metadata Info |
| --------------------------------- |
| * Added a new loop metadata `!{!"llvm.loop.align", i32 64}` |
| |
| Changes to the Debug Info |
| --------------------------------- |
| |
| Changes to the LLVM tools |
| --------------------------------- |
| |
| * llvm-symbolizer now treats invalid input as an address for which source |
| information is not found. |
| * llvm-readelf now supports ``--extra-sym-info`` (``-X``) to display extra |
| information (section name) when showing symbols. |
| |
| * ``llvm-nm`` now supports the ``--line-numbers`` (``-l``) option to use |
| debugging information to print symbols' filenames and line numbers. |
| |
| * llvm-symbolizer and llvm-addr2line now support addresses specified as symbol names. |
| |
| Changes to LLDB |
| --------------------------------- |
| |
| * ``SBWatchpoint::GetHardwareIndex`` is deprecated and now returns -1 |
| to indicate the index is unavailable. |
| * Methods in SBHostOS related to threads have had their implementations |
| removed. These methods will return a value indicating failure. |
| * ``SBType::FindDirectNestedType`` function is added. It's useful |
| for formatters to quickly find directly nested type when it's known |
| where to search for it, avoiding more expensive global search via |
| ``SBTarget::FindFirstType``. |
| * ``lldb-vscode`` was renamed to ``lldb-dap`` and and its installation |
| instructions have been updated to reflect this. The underlying functionality |
| remains unchanged. |
| * The ``mte_ctrl`` register can now be read from AArch64 Linux core files. |
| * LLDB on AArch64 Linux now supports debugging the Scalable Matrix Extension |
| (SME) and Scalable Matrix Extension 2 (SME2) for both live processes and core |
| files. For details refer to the |
| `AArch64 Linux documentation <https://lldb.llvm.org/use/aarch64-linux.html>`_. |
| * LLDB now supports symbol and binary acquisition automatically using the |
| DEBUFINFOD protocol. The standard mechanism of specifying DEBUFINOD servers in |
| the ``DEBUGINFOD_URLS`` environment variable is used by default. In addition, |
| users can specify servers to request symbols from using the LLDB setting |
| ``plugin.symbol-locator.debuginfod.server_urls``, override or adding to the |
| environment variable. |
| |
| |
| * When running on AArch64 Linux, ``lldb-server`` now provides register |
| field information for the following registers: ``cpsr``, ``fpcr``, |
| ``fpsr``, ``svcr`` and ``mte_ctrl``. :: |
| |
| (lldb) register read cpsr |
| cpsr = 0x80001000 |
| = (N = 1, Z = 0, C = 0, V = 0, SS = 0, IL = 0, <...> |
| |
| This is only available when ``lldb`` is built with XML support. |
| Where possible the CPU's capabilities are used to decide which |
| fields are present, however this is not always possible or entirely |
| accurate. If in doubt, refer to the numerical value. |
| |
| Changes to Sanitizers |
| --------------------- |
| * HWASan now defaults to detecting use-after-scope bugs. |
| |
| Other Changes |
| ------------- |
| |
| * The ``Flags`` field of ``llvm::opt::Option`` has been split into ``Flags`` |
| and ``Visibility`` to simplify option sharing between various drivers (such |
| as ``clang``, ``clang-cl``, or ``flang``) that rely on Clang's Options.td. |
| Overloads of ``llvm::opt::OptTable`` that use ``FlagsToInclude`` have been |
| deprecated. There is a script and instructions on how to resolve conflicts - |
| see https://reviews.llvm.org/D157150 and https://reviews.llvm.org/D157151 for |
| details. |
| |
| * On Linux, FreeBSD, and NetBSD, setting the environment variable |
| ``LLVM_ENABLE_SYMBOLIZER_MARKUP`` causes tools to print stacktraces using |
| :doc:`Symbolizer Markup <SymbolizerMarkupFormat>`. |
| This works even if the tools have no embedded symbol information (i.e. are |
| fully stripped); :doc:`llvm-symbolizer <CommandGuide/llvm-symbolizer>` can |
| symbolize the markup afterwards using ``debuginfod``. |
| |
| External Open Source Projects Using LLVM 15 |
| =========================================== |
| |
| * A project... |
| |
| Additional Information |
| ====================== |
| |
| A wide variety of additional information is available on the `LLVM web page |
| <https://llvm.org/>`_, in particular in the `documentation |
| <https://llvm.org/docs/>`_ section. The web page also contains versions of the |
| API documentation which is up-to-date with the Git version of the source |
| code. You can access versions of these documents specific to this release by |
| going into the ``llvm/docs/`` directory in the LLVM tree. |
| |
| If you have any questions or comments about LLVM, please feel free to contact |
| us via the `Discourse forums <https://discourse.llvm.org>`_. |