-======================
-LLVM 3.6 Release Notes
-======================
+========================
+LLVM 7.0.0 Release Notes
+========================
.. contents::
:local:
.. warning::
- These are in-progress notes for the upcoming LLVM 3.6 release. You may
- prefer the `LLVM 3.5 Release Notes <http://llvm.org/releases/3.5.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 3.6. 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/>`_.
For more information about LLVM, including information about the latest
release, please check out the `main LLVM web site <http://llvm.org/>`_. If you
have questions or comments, the `LLVM Developer's Mailing List
-<http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev>`_ is a good place to send
+<http://lists.llvm.org/mailman/listinfo/llvm-dev>`_ is a good place to send
them.
Note that if you are reading this file from a Subversion checkout or the main
Non-comprehensive list of changes in this release
=================================================
-
.. 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.
-* Support for AuroraUX has been removed.
+* 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":
-* Added support for a `native object file-based bitcode wrapper format
- <BitCodeFormat.html#native-object-file>`_.
+.. code-block:: c
-* ... next change ...
+ 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
Makes programs 10x faster by doing Special New Thing.
-Prefix data rework
-------------------
+Changes to the LLVM IR
+----------------------
-The semantics of the ``prefix`` attribute have been changed. Users
-that want the previous ``prefix`` semantics should instead use
-``prologue``. To motivate this change, let's examine the primary
-usecases that these attributes aim to serve,
+* 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.
- 1. Code sanitization metadata (e.g. Clang's undefined behavior
- sanitizer)
+* invariant.group.barrier has been renamed to launder.invariant.group.
- 2. Function hot-patching: Enable the user to insert ``nop`` operations
- at the beginning of the function which can later be safely replaced
- with a call to some instrumentation facility.
+* invariant.group metadata can now refer only empty metadata nodes.
- 3. Language runtime metadata: Allow a compiler to insert data for
- use by the runtime during execution. GHC is one example of a
- compiler that needs this functionality for its
- tables-next-to-code functionality.
+Changes to the ARM Backend
+--------------------------
-Previously ``prefix`` served cases (1) and (2) quite well by allowing the user
-to introduce arbitrary data at the entrypoint but before the function
-body. Case (3), however, was poorly handled by this approach as it
-required that prefix data was valid executable code.
+ During this release ...
-In this release the concept of prefix data has been redefined to be
-data which occurs immediately before the function entrypoint (i.e. the
-symbol address). Since prefix data now occurs before the function
-entrypoint, there is no need for the data to be valid code.
-The previous notion of prefix data now goes under the name "prologue
-data" to emphasize its duality with the function epilogue.
+Changes to the MIPS Target
+--------------------------
-The intention here is to handle cases (1) and (2) with prologue data and
-case (3) with prefix data. See the language reference for further details
-on the semantics of these attributes.
+ During this release ...
-This refactoring arose out of discussions_ with Reid Kleckner in
-response to a proposal to introduce the notion of symbol offsets to
-enable handling of case (3).
-.. _discussions: http://lists.cs.uiuc.edu/pipermail/llvmdev/2014-May/073235.html
+Changes to the PowerPC Target
+-----------------------------
+ During this release ...
-Changes to the ARM Backend
---------------------------
+Changes to the X86 Target
+-------------------------
During this release ...
+Changes to the AMDGPU Target
+-----------------------------
-Changes to the MIPS Target
---------------------------
+ During this release ...
-During this release ...
+Changes to the AVR Target
+-----------------------------
-Changes to the PowerPC Target
+ During this release ...
+
+Changes to the OCaml bindings
-----------------------------
-During this release ...
+* Remove ``add_bb_vectorize``.
-External Open Source Projects Using LLVM 3.6
-============================================
-An exciting aspect of LLVM is that it is used as an enabling technology for
-a lot of other language and tools projects. This section lists some of the
-projects that have already been updated to work with LLVM 3.6.
+Changes to the C API
+--------------------
-* A project
+* 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 7
+==========================================
+
+* A project...
Additional Information
If you have any questions or comments about LLVM, please feel free to contact
us via the `mailing lists <http://llvm.org/docs/#maillist>`_.
-