========================
-LLVM 4.0.0 Release Notes
+LLVM 7.0.0 Release Notes
========================
.. contents::
:local:
.. warning::
- These are in-progress notes for the upcoming LLVM 4.0.0 release. You may
- prefer the `LLVM 3.9 Release Notes <http://llvm.org/releases/3.9.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 4.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/>`_.
Non-comprehensive list of changes in this release
=================================================
-* The C API functions LLVMAddFunctionAttr, LLVMGetFunctionAttr,
- LLVMRemoveFunctionAttr, LLVMAddAttribute, LLVMRemoveAttribute,
- LLVMGetAttribute, LLVMAddInstrAttribute and
- LLVMRemoveInstrAttribute have been removed.
-
-* The C API enum LLVMAttribute has been deleted.
-
.. 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
functionality, or simply have a lot to talk about), see the `NOTE` below
for adding a new subsection.
-* The definition and uses of LLVM_ATRIBUTE_UNUSED_RESULT in the LLVM source
- were replaced with LLVM_NODISCARD, which matches the C++17 [[nodiscard]]
- semantics rather than gcc's __attribute__((warn_unused_result)).
+* 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
-* Minimum compiler version to build has been raised to GCC 4.8 and VS 2015.
+ 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
-* ... next change ...
+* ``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
--------------------------
During this release ...
+Changes to the AVR Target
+-----------------------------
+
+ During this release ...
+
Changes to the OCaml bindings
-----------------------------
-* The attribute API was completely overhauled, following the changes
- to the C API.
+* 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 4.0.0
-==============================================
+External Open Source Projects Using LLVM 7
+==========================================
* A project...