1========================= 2LLVM 11.0.0 Release Notes 3========================= 4 5.. contents:: 6 :local: 7 8.. warning:: 9 These are in-progress notes for the upcoming LLVM 11 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 11.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 45 46.. NOTE 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 and un-indent it (the indentation causes it to be inside this comment). 50 51 Special New Feature 52 ------------------- 53 54 Makes programs 10x faster by doing Special New Thing. 55 56 57Changes to the LLVM IR 58---------------------- 59 60* The callsite attribute `vector-function-abi-variant 61 <https://llvm.org/docs/LangRef.html#call-site-attributes>`_ has been 62 added to describe the mapping between scalar functions and vector 63 functions, to enable vectorization of call sites. The information 64 provided by the attribute is interfaced via the API provided by the 65 ``VFDatabase`` class. 66 67* `dereferenceable` attributes and metadata on pointers no longer imply 68 anything about the alignment of the pointer in question. Previously, some 69 optimizations would make assumptions based on the type of the pointer. This 70 behavior was undocumented. To preserve optimizations, frontends may need to 71 be updated to generate appropriate `align` attributes and metadata. 72 73* The DIModule metadata is extended to contain file and line number 74 information. This information is used to represent Fortran modules debug 75 info at IR level. 76 77Changes to building LLVM 78------------------------ 79 80Changes to the ARM Backend 81-------------------------- 82 83During this release ... 84 85* Implemented C-language intrinsics for the full Arm v8.1-M MVE instruction 86 set. ``<arm_mve.h>`` now supports the complete API defined in the Arm C 87 Language Extensions. 88 89* Added support for assembly for the optional Custom Datapath Extension (CDE) 90 for Arm M-profile targets. 91 92* Implemented C-language intrinsics ``<arm_cde.h>`` for the CDE instruction set. 93 94* Clang now defaults to ``-fomit-frame-pointer`` when targeting non-Android 95 Linux for arm and thumb when optimizations are enabled. Users that were 96 previously not specifying a value and relying on the implicit compiler 97 default may wish to specify ``-fno-omit-frame-pointer`` to get the old 98 behavior. This improves compatibility with GCC. 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 117* Functions with the probe-stack attribute set to "inline-asm" are now protected 118 against stack clash without the need of a third-party probing function and 119 with limited impact on performance. 120* -x86-enable-old-knl-abi command line switch has been removed. v32i16/v64i8 121 vectors are always passed in ZMM register when avx512f is enabled and avx512bw 122 is disabled. 123* Vectors larger than 512 bits with i16 or i8 elements will be passed in 124 multiple ZMM registers when avx512f is enabled. Previously this required 125 avx512bw otherwise they would split into multiple YMM registers. This means 126 vXi16/vXi8 vectors are consistently treated the same as 127 vXi32/vXi64/vXf64/vXf32 vectors of the same total width. 128 129Changes to the AMDGPU Target 130----------------------------- 131 132* The backend default denormal handling mode has been switched to on 133 for all targets for all compute function types. Frontends wishing to 134 retain the old behavior should explicitly request f32 denormal 135 flushing. 136 137Changes to the AVR Target 138----------------------------- 139 140* Moved from an experimental backend to an official backend. AVR support is now 141 included by default in all LLVM builds and releases and is available under 142 the "avr-unknown-unknown" target triple. 143 144Changes to the WebAssembly Target 145--------------------------------- 146 147* Programs which don't have a "main" function, called "reactors" are now 148 properly supported, with a new `-mexec-model=reactor` flag. Programs which 149 previously used `-Wl,--no-entry` to avoid having a main function should 150 switch to this new flag, so that static initialization is properly 151 performed. 152 153* `__attribute__((visibility("protected")))` now evokes a warning, as 154 WebAssembly does not support "protected" visibility. 155 156Changes to the OCaml bindings 157----------------------------- 158 159 160 161Changes to the C API 162-------------------- 163 164 165Changes to the Go bindings 166-------------------------- 167 168 169Changes to the DAG infrastructure 170--------------------------------- 171 172 173Changes to the Debug Info 174--------------------------------- 175 176* LLVM now supports the debug entry values (DW_OP_entry_value) production for 177 the x86, ARM, and AArch64 targets by default. Other targets can use 178 the utility by using the experimental option ("-debug-entry-values"). 179 This is a debug info feature that allows debuggers to recover the value of 180 optimized-out parameters by going up a stack frame and interpreting the values 181 passed to the callee. The feature improves the debugging user experience when 182 debugging optimized code. 183 184Changes to the LLVM tools 185--------------------------------- 186 187* Added an option (--show-section-sizes) to llvm-dwarfdump to show the sizes 188 of all debug sections within a file. 189 190* llvm-nm now implements the flag ``--special-syms`` and will filter out special 191 symbols, i.e. mapping symbols on ARM and AArch64, by default. This matches 192 the GNU nm behavior. 193 194Changes to LLDB 195=============== 196 197External Open Source Projects Using LLVM 11 198=========================================== 199 200* A project... 201 202 203Additional Information 204====================== 205 206A wide variety of additional information is available on the `LLVM web page 207<https://llvm.org/>`_, in particular in the `documentation 208<https://llvm.org/docs/>`_ section. The web page also contains versions of the 209API documentation which is up-to-date with the Git version of the source 210code. You can access versions of these documents specific to this release by 211going into the ``llvm/docs/`` directory in the LLVM tree. 212 213If you have any questions or comments about LLVM, please feel free to contact 214us via the `mailing lists <https://llvm.org/docs/#mailing-lists>`_. 215