1=========================
2LLVM 13.0.0 Release Notes
3=========================
4
5.. contents::
6    :local:
7
8.. warning::
9   These are in-progress notes for the upcoming LLVM 13 release.
10   Release notes for previous releases can be found on
11   `the Download Page <https://releases.llvm.org/download.html>`_.
12
13
14Introduction
15============
16
17This document contains the release notes for the LLVM Compiler Infrastructure,
18release 13.0.0.  Here we describe the status of LLVM, including major improvements
19from the previous release, improvements in various subprojects of LLVM, and
20some of the current users of the code.  All LLVM releases may be downloaded
21from the `LLVM releases web site <https://llvm.org/releases/>`_.
22
23For more information about LLVM, including information about the latest
24release, please check out the `main LLVM web site <https://llvm.org/>`_.  If you
25have questions or comments, the `LLVM Developer's Mailing List
26<https://lists.llvm.org/mailman/listinfo/llvm-dev>`_ is a good place to send
27them.
28
29Note that if you are reading this file from a Git checkout or the main
30LLVM web page, this document applies to the *next* release, not the current
31one.  To see the release notes for a specific release, please see the `releases
32page <https://llvm.org/releases/>`_.
33
34Non-comprehensive list of changes in this release
35=================================================
36.. NOTE
37   For small 1-3 sentence descriptions, just add an entry at the end of
38   this list. If your description won't fit comfortably in one bullet
39   point (e.g. maybe you would like to give an example of the
40   functionality, or simply have a lot to talk about), see the `NOTE` below
41   for adding a new subsection.
42
43
44.. NOTE
45   If you would like to document a larger change, then you can add a
46   subsection about it right here. You can copy the following boilerplate
47   and un-indent it (the indentation causes it to be inside this comment).
48
49   Special New Feature
50   -------------------
51
52   Makes programs 10x faster by doing Special New Thing.
53
54* Windows Control-flow Enforcement Technology: the ``-ehcontguard`` option now
55  emits valid unwind entrypoints which are validated when the context is being
56  set during exception handling.
57
58* Flang is now included in the binary packages released by LLVM.
59
60* The debuginfo-test project has been renamed cross-project-tests and is now
61  intended for testing components from multiple projects, not just debug
62  information. The new "cross-project-tests" name replaces "debuginfo-test" in
63  LLVM_ENABLE_PROJECTS, and a new check-cross-project-tests target has been
64  added for running all tests in the project. The pre-existing check-debuginfo-
65  test target remains for running just the debug information tests.
66  (`D95339 <https://reviews.llvm.org/D95339>`_ and
67  `D96513 <https://reviews.llvm.org/D96513>`_)
68
69Changes to the LLVM IR
70----------------------
71
72* The ``inalloca`` attribute now has a mandatory type field, similar
73  to ``byval`` and ``sret``.
74
75* The opaque pointer type ``ptr`` has been introduced. It is still in the
76  process of being worked on and should not be used yet.
77
78* Using the legacy pass manager for the optimization pipeline is deprecated and
79  will be removed after LLVM 14. In the meantime, only minimal effort will be
80  made to maintain the legacy pass manager for the optimization pipeline.
81
82Changes to building LLVM
83------------------------
84
85* The build system now supports building multiple distributions, so that you can
86  e.g. have one distribution containing just tools and another for libraries (to
87  enable development). See :ref:`Multi-distribution configurations` for details.
88
89Changes to TableGen
90-------------------
91
92Changes to the AArch64 Backend
93------------------------------
94
95* Introduced assembly support for Armv9-A's Realm Management Extension (RME)
96  and Scalable Matrix Extension (SME).
97
98* Produce proper cross-section relative relocations on COFF
99
100* Fixed the calling convention on Windows for variadic functions involving
101  floats in the fixed arguments
102
103Changes to the ARM Backend
104--------------------------
105
106* Produce proper cross-section relative relocations on COFF
107
108Changes to the MIPS Target
109--------------------------
110
111During this release ...
112
113Changes to the Hexagon Target
114-----------------------------
115
116* The Hexagon target now supports V68/HVX ISA.
117
118Changes to the PowerPC Target
119-----------------------------
120
121During this release ...
122
123Changes to the X86 Target
124-------------------------
125
126During this release ...
127
128Changes to the AMDGPU Target
129-----------------------------
130
131During this release ...
132
133Changes to the AVR Target
134-----------------------------
135
136During this release ...
137
138Changes to the WebAssembly Target
139---------------------------------
140
141During this release ...
142
143Changes to the OCaml bindings
144-----------------------------
145
146
147Changes to the C API
148--------------------
149
150* The C API functions ``LLVMGetAlignment`` and ``LLVMSetAlignment`` now allow
151  changing alignment on atomicrmw and cmpxchg instructions
152
153* A new entry ``LLVMDIArgListMetadataKind`` was added to the
154  ``LLVMMetadataKind`` enum, representing DIArgLists
155  (`D88175 <https://reviews.llvm.org/D88175>`_)
156
157* Type attributes have been added to LLVM-C, introducing
158  LLVMCreateTypeAttribute, LLVMGetTypeAttributeValue and LLVMIsTypeAttribute.
159  (`D977763' <https://reviews.llvm.org/D97763>`_)
160
161* The ``LTO_API_VERSION`` was bumped to 28, introducing a new function
162  ``lto_set_debug_options`` for parsing LTO debug options
163  (`D92611 <https://reviews.llvm.org/D92611>`_)
164
165* ``LLVMJITTargetSymbolFlags`` was renamed to ``LLVMJITSymbolTargetFlags``
166  (`rG8d718a0bff73af066675a6258c01307937c33cf9
167  <https://reviews.llvm.org/rG8d718a0bff73af066675a6258c01307937c33cf9>`_)
168
169* The C API received support for creating custom ORCv2 MaterializationUnits and
170  APIs to retrieve an LLJIT instance's linking layers. An ABI breaking change
171  for ``LLVMOrcAbsoluteSymbols`` was introduced to make it consistent with
172  ``LLVMOrcCreateCustomMaterializationUnit``.
173  (`rGc8fc5e3ba942057d6c4cdcd1faeae69a28e7b671
174  <https://reviews.llvm.org/rGc8fc5e3ba942057d6c4cdcd1faeae69a28e7b671>`_)
175
176* The C API received support for adding ORCv2 object buffers directly to an object
177  layer. (`rG7b73cd684a8d5fb44d34064200f10e2723085c33
178  <https://reviews.llvm.org/rG7b73cd684a8d5fb44d34064200f10e2723085c33>`_)
179
180* A breaking change to ``LLVMGetInlineAsm`` was introduced, adding a ninth
181  argument ``LLVMBool CanThrow`` (`D95745 <https://reviews.llvm.org/D95745>`_)
182
183* The C API received support for calling into the new pass manager.
184  (`D102136 <https://reviews.llvm.org/D102136>`_)
185
186* The C API function ``LLVMIntrinsicCopyOverloadedName`` has been deprecated.
187  Please migrate to ``LLVMIntrinsicCopyOverloadedName2`` which takes an extra
188  module argument and which also handles unnamed types.
189  (`D99173 <https://reviews.llvm.org/D99173>`_)
190
191* The C API received support for dumping objects from ORCv2
192  (`rGcec8e69f01c3374cb38c6683058381b96fab8f89
193  <https://reviews.llvm.org/rGcec8e69f01c3374cb38c6683058381b96fab8f89>`_)
194
195* A breaking change to ``LLVMOrcObjectTransformLayerTransformFunction`` was
196  introduced, changing the order of the function pointer's arguments.
197  (`rG8962c68ad007a525f9daa987c99eda57e0d0069a
198  <https://reviews.llvm.org/rG8962c68ad007a525f9daa987c99eda57e0d0069a>`_)
199
200* The C API received support for accessing utilities from the LLJIT
201  ``IRTransformLayer`` and ``ThreadSafeModule`` classes. (`D103855
202  <https://reviews.llvm.org/D103855>`_)
203
204* The C API received support for creating lazy-export MaterializationUnits
205  (`D104672 <https://reviews.llvm.org/D104672>`_)
206
207* The C API function ``LLVMPassBuilderOptionsSetCoroutines`` was removed because
208  couroutine passes have been enabled by default. (`D105877
209  <https://reviews.llvm.org/D105877>`_)
210
211* ``comdat noduplicates`` was renamed to ``comdat nodeduplicate`` and as a
212  result, ``LLVMNoDuplicatesComdatSelectionKind`` was renamed to
213  ``LLVMNoDeduplicateComdatSelectionKind``. (`D106319
214  <https://reviews.llvm.org/D106319>`_)
215
216Changes to the Go bindings
217--------------------------
218
219
220Changes to the FastISel infrastructure
221--------------------------------------
222
223* FastISel no longer tracks killed registers, and instead leaves this to the
224  register allocator. This means that ``hasTrivialKill()`` is removed, as well
225  as the ``OpNIsKill`` parameters to the ``fastEmit_*()`` family of functions.
226
227Changes to the DAG infrastructure
228---------------------------------
229
230
231Changes to the Debug Info
232---------------------------------
233
234During this release ...
235
236Changes to the LLVM tools
237---------------------------------
238
239* The options ``--build-id-link-{dir,input,output}`` have been deleted.
240  (`D96310 <https://reviews.llvm.org/D96310>`_)
241
242* Support for in-order processors has been added to ``llvm-mca``.
243  (`D94928 <https://reviews.llvm.org/D94928>`_)
244
245* llvm-objdump supports ``-M {att,intel}`` now.
246  ``--x86-asm-syntax`` is a deprecated internal option which will be removed in LLVM 14.0.0.
247  (`D101695 <https://reviews.llvm.org/D101695>`_)
248
249* The llvm-readobj short aliases ``-s`` (previously ``--sections``) and ``-t``
250  (previously ``--syms``) have been changed to ``--syms`` and
251  ``--section-details`` respectively, to match llvm-readelf.
252  (`D105055 <https://reviews.llvm.org/D105055>`_)
253
254* The llvm-nm short aliases ``-M`` (``--print-armap``), ``-U``
255  (``--defined-only``), and ``-W`` (``--no-weak``) are now deprecated.
256  Use the long form versions instead.
257  The alias ``--just-symbol-name`` is now deprecated in favor of
258  ``--format=just-symbols`` and ``-j``.
259  (`D105330 <https://reviews.llvm.org/D105330>`_)
260
261* In lli the default JIT engine switched from MCJIT (``-jit-kind=mcjit``) to ORC (``-jit-kind=orc``).
262  (`D98931 <https://reviews.llvm.org/D98931>`_)
263
264* llvm-rc got support for invoking Clang to preprocess its input.
265  (`D100755 <https://reviews.llvm.org/D100755>`_)
266
267* llvm-rc got a GNU windres compatible frontend, llvm-windres.
268  (`D100756 <https://reviews.llvm.org/D100756>`_)
269
270* llvm-ml has improved compatibility with MS ml.exe, managing to assemble
271  more asm files.
272
273Changes to LLDB
274---------------------------------
275
276* LLDB executable is now included in pre-built LLVM binaries.
277
278* LLDB now includes full featured support for AArch64 SVE register access.
279
280* LLDB now supports AArch64 Pointer Authentication, allowing stack unwind with signed return address.
281
282* LLDB now supports debugging programs on AArch64 Linux that use memory tagging (MTE).
283* Added ``memory tag read`` and ``memory tag write`` commands.
284* The ``memory region`` command will note when a region has memory tagging enabled.
285* Synchronous and asynchronous tag faults are recognised.
286* Synchronous tag faults have memory tag annotations in addition to the usual fault address.
287
288Changes to Sanitizers
289---------------------
290
291External Open Source Projects Using LLVM 13
292===========================================
293
294* A project...
295
296Additional Information
297======================
298
299A wide variety of additional information is available on the `LLVM web page
300<https://llvm.org/>`_, in particular in the `documentation
301<https://llvm.org/docs/>`_ section.  The web page also contains versions of the
302API documentation which is up-to-date with the Git version of the source
303code.  You can access versions of these documents specific to this release by
304going into the ``llvm/docs/`` directory in the LLVM tree.
305
306If you have any questions or comments about LLVM, please feel free to contact
307us via the `mailing lists <https://llvm.org/docs/#mailing-lists>`_.
308