========================
-LLVM 5.0.0 Release Notes
+LLVM 7.0.0 Release Notes
========================
.. contents::
:local:
.. warning::
- These are in-progress notes for the upcoming LLVM 5 release. You may
- prefer the `LLVM 4 Release Notes <http://llvm.org/releases/4.0.0/docs
- /ReleaseNotes.html>`_.
+ These are in-progress notes for the upcoming LLVM 7 release.
+ Release notes for previous releases can be found on
+ `the Download Page <http://releases.llvm.org/download.html>`_.
Introduction
============
This document contains the release notes for the LLVM Compiler Infrastructure,
-release 5.0.0. Here we describe the status of LLVM, including major improvements
+release 7.0.0. 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 <http://llvm.org/releases/>`_.
functionality, or simply have a lot to talk about), see the `NOTE` below
for adding a new subsection.
-* ... next change ...
+* Libraries have been renamed from 7.0 to 7. This change also impacts
+ downstream libraries like lldb.
+
+* The LoopInstSimplify pass (-loop-instsimplify) has been removed.
+
+* Symbols starting with ``?`` are no longer mangled by LLVM when using the
+ Windows ``x`` or ``w`` IR mangling schemes.
+
+* A new tool named :doc:`llvm-exegesis <CommandGuide/llvm-exegesis>` has been
+ added. :program:`llvm-exegesis` automatically measures instruction scheduling
+ properties (latency/uops) and provides a principled way to edit scheduling
+ models.
+
+* A new tool named :doc:`llvm-mca <CommandGuide/llvm-mca>` has been added.
+ :program:`llvm-mca` is a static performance analysis tool that uses
+ information available in LLVM to statically predict the performance of
+ machine code for a specific CPU.
+
+* The optimization flag to merge constants (-fmerge-all-constants) is no longer
+ applied by default.
+
+* Optimization of floating-point casts is improved. This may cause surprising
+ results for code that is relying on the undefined behavior of overflowing
+ casts. The optimization can be disabled by specifying a function attribute:
+ "strict-float-cast-overflow"="false". This attribute may be created by the
+ clang option :option:`-fno-strict-float-cast-overflow`.
+ Code sanitizers can be used to detect affected patterns. The option for
+ detecting this problem alone is "-fsanitize=float-cast-overflow":
+
+.. code-block:: c
+
+ int main() {
+ float x = 4294967296.0f;
+ x = (float)((int)x);
+ printf("junk in the ftrunc: %f\n", x);
+ return 0;
+ }
+
+.. code-block:: bash
+
+ clang -O1 ftrunc.c -fsanitize=float-cast-overflow ; ./a.out
+ ftrunc.c:5:15: runtime error: 4.29497e+09 is outside the range of representable values of type 'int'
+ junk in the ftrunc: 0.000000
+
+* ``LLVM_ON_WIN32`` is no longer set by ``llvm/Config/config.h`` and
+ ``llvm/Config/llvm-config.h``. If you used this macro, use the compiler-set
+ ``_WIN32`` instead which is set exactly when ``LLVM_ON_WIN32`` used to be set.
+
+* Note..
.. NOTE
If you would like to document a larger change, then you can add a
Changes to the LLVM IR
----------------------
+* The signatures for the builtins @llvm.memcpy, @llvm.memmove, and @llvm.memset
+ have changed. Alignment is no longer an argument, and are instead conveyed as
+ parameter attributes.
+
+* invariant.group.barrier has been renamed to launder.invariant.group.
+
+* invariant.group metadata can now refer only empty metadata nodes.
+
Changes to the ARM Backend
--------------------------
Changes to the OCaml bindings
-----------------------------
- During this release ...
+* Remove ``add_bb_vectorize``.
+
+
+Changes to the C API
+--------------------
+
+* Remove ``LLVMAddBBVectorizePass``. The implementation was removed and the C
+ interface was made a deprecated no-op in LLVM 5. Use
+ ``LLVMAddSLPVectorizePass`` instead to get the supported SLP vectorizer.
-External Open Source Projects Using LLVM 5
+External Open Source Projects Using LLVM 7
==========================================
* A project...