1========================= 2LLVM 12.0.0 Release Notes 3========================= 4 5.. contents:: 6 :local: 7 8.. warning:: 9 These are in-progress notes for the upcoming LLVM 12 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 12.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* The ConstantPropagation pass was removed. Users should use the InstSimplify 44 pass instead. 45 46 47.. NOTE 48 If you would like to document a larger change, then you can add a 49 subsection about it right here. You can copy the following boilerplate 50 and un-indent it (the indentation causes it to be inside this comment). 51 52 Special New Feature 53 ------------------- 54 55 Makes programs 10x faster by doing Special New Thing. 56 57 58Changes to the LLVM IR 59---------------------- 60 61* ... 62 63* Added the ``byref`` attribute to better represent argument passing 64 for the `amdgpu_kernel` calling convention. 65 66* Added type parameter to the ``sret`` attribute to continue work on 67 removing pointer element types. 68 69* The ``llvm.experimental.vector.reduce`` family of intrinsics have been renamed 70 to drop the "experimental" from the name, reflecting their now fully supported 71 status in the IR. 72 73 74Changes to building LLVM 75------------------------ 76 77* The internal ``llvm-build`` Python script and the associated ``LLVMBuild.txt`` 78 files used to describe the LLVM component structure have been removed and 79 replaced by a pure ``CMake`` approach, where each component stores extra 80 properties in the created targets. These properties are processed once all 81 components are defined to resolve library dependencies and produce the header 82 expected by llvm-config. 83 84Changes to TableGen 85------------------- 86 87* The new "TableGen Programmer's Reference" replaces the "TableGen Language 88 Introduction" and "TableGen Language Reference" documents. 89 90* The syntax for specifying an integer range in a range list has changed. 91 The old syntax used a hyphen in the range (e.g., ``{0-9}``). The new syntax 92 uses the "`...`" range punctuation (e.g., ``{0...9}``). The hyphen syntax 93 is deprecated. 94 95Changes to the ARM Backend 96-------------------------- 97 98During this release ... 99 100Changes to the MIPS Target 101-------------------------- 102 103During this release ... 104 105 106Changes to the PowerPC Target 107----------------------------- 108 109During this release ... 110 111Changes to the X86 Target 112------------------------- 113 114During this release ... 115 116* The 'mpx' feature was removed from the backend. It had been removed from clang 117 frontend in 10.0. Mention of the 'mpx' feature in an IR file will print a 118 message to stderr, but IR should still compile. 119* Support for ``-march=alderlake``, ``-march=sapphirerapids``, 120 ``-march=znver3`` and ``-march=x86-64-v[234]`` has been added. 121* The assembler now has support for {disp32} and {disp8} pseudo prefixes for 122 controlling displacement size for memory operands and jump displacements. The 123 assembler also supports the .d32 and .d8 mnemonic suffixes to do the same. 124* A new function attribute "tune-cpu" has been added to support -mtune like gcc. 125 This allows microarchitectural optimizations to be applied independent from 126 the "target-cpu" attribute or TargetMachine CPU which will be used to select 127 Instruction Set. If the attribute is not present, the tune CPU will follow 128 the target CPU. 129* Support for ``HRESET`` instructions has been added. 130* Support for ``UINTR`` instructions has been added. 131* Support for ``AVXVNNI`` instructions has been added. 132 133Changes to the AMDGPU Target 134----------------------------- 135 136During this release ... 137 138* The new ``byref`` attribute is now the preferred method for 139 representing aggregate kernel arguments. 140 141Changes to the AVR Target 142----------------------------- 143 144During this release ... 145 146Changes to the WebAssembly Target 147--------------------------------- 148 149During this release ... 150 151Changes to the OCaml bindings 152----------------------------- 153 154 155Changes to the C API 156-------------------- 157 158 159Changes to the Go bindings 160-------------------------- 161 162 163Changes to the DAG infrastructure 164--------------------------------- 165 166 167Changes to the Debug Info 168--------------------------------- 169 170During this release ... 171 172Changes to the LLVM tools 173--------------------------------- 174 175* llvm-readobj and llvm-readelf behavior has changed to report an error when 176 executed with no input files instead of reading an input from stdin. 177 Reading from stdin can still be achieved by specifying `-` as an input file. 178 179Changes to LLDB 180--------------------------------- 181 182Changes to Sanitizers 183--------------------- 184 185The integer sanitizer `-fsanitize=integer` now has a new sanitizer: 186`-fsanitize=unsigned-shift-base`. It's not undefined behavior for an unsigned 187left shift to overflow (i.e. to shift bits out), but it has been the source of 188bugs and exploits in certain codebases in the past. 189 190External Open Source Projects Using LLVM 12 191=========================================== 192 193* A project... 194 195Additional Information 196====================== 197 198A wide variety of additional information is available on the `LLVM web page 199<https://llvm.org/>`_, in particular in the `documentation 200<https://llvm.org/docs/>`_ section. The web page also contains versions of the 201API documentation which is up-to-date with the Git version of the source 202code. You can access versions of these documents specific to this release by 203going into the ``llvm/docs/`` directory in the LLVM tree. 204 205If you have any questions or comments about LLVM, please feel free to contact 206us via the `mailing lists <https://llvm.org/docs/#mailing-lists>`_. 207