OSDN Git Service

Release note for DWARF v5 support
[android-x86/external-llvm.git] / docs / ReleaseNotes.rst
index 54f2d53..58fb882 100644 (file)
@@ -1,21 +1,21 @@
-======================
-LLVM 3.9 Release Notes
-======================
+========================
+LLVM 7.0.0 Release Notes
+========================
 
 .. contents::
     :local:
 
 .. warning::
-   These are in-progress notes for the upcoming LLVM 3.9 release.  You may
-   prefer the `LLVM 3.8 Release Notes <http://llvm.org/releases/3.8.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.9.  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/>`_.
@@ -33,55 +33,89 @@ page <http://llvm.org/releases/>`_.
 
 Non-comprehensive list of changes in this release
 =================================================
-* The LLVMContext gains a new runtime check (see
-  LLVMContext::discardValueNames()) that can be set to discard Value names
-  (other than GlobalValue). This is intended to be used in release builds by
-  clients that are interested in saving CPU/memory as much as possible.
+.. 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
+   point (e.g. maybe you would like to give an example of the
+   functionality, or simply have a lot to talk about), see the `NOTE` below
+   for adding a new subsection.
 
-* There is no longer a "global context" available in LLVM, except for the C API.
+* Libraries have been renamed from 7.0 to 7. This change also impacts
+  downstream libraries like lldb.
 
-* .. note about autoconf build having been removed.
+* The LoopInstSimplify pass (-loop-instsimplify) has been removed.
 
-* .. note about C API functions LLVMParseBitcode,
-   LLVMParseBitcodeInContext, LLVMGetBitcodeModuleInContext and
-   LLVMGetBitcodeModule having been removed. LLVMGetTargetMachineData has been
-   removed (use LLVMGetDataLayout instead).
+* Symbols starting with ``?`` are no longer mangled by LLVM when using the
+  Windows ``x`` or ``w`` IR mangling schemes.
 
-* The C API function LLVMLinkModules has been removed.
+* 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.
 
-* The C API function LLVMAddTargetData has been removed.
+* 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 C API function LLVMGetDataLayout is deprecated
-  in favor of LLVMGetDataLayoutStr.
+* The optimization flag to merge constants (-fmerge-all-constants) is no longer
+  applied by default.
 
-* The C API enum LLVMAttribute and associated API is deprecated in favor of
-  the new LLVMAttributeRef API. The deprecated functions are
-  LLVMAddFunctionAttr, LLVMAddTargetDependentFunctionAttr,
-  LLVMRemoveFunctionAttr, LLVMGetFunctionAttr, LLVMAddAttribute,
-  LLVMRemoveAttribute, LLVMGetAttribute, LLVMAddInstrAttribute,
-  LLVMRemoveInstrAttribute and LLVMSetInstrParamAlignment.
+* 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 ``-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":
 
-* ``TargetFrameLowering::eliminateCallFramePseudoInstr`` now returns an
-  iterator to the next instruction instead of ``void``. Targets that previously
-  did ``MBB.erase(I); return;`` now probably want ``return MBB.erase(I);``.
+.. code-block:: c
 
-* ``SelectionDAGISel::Select`` now returns ``void``. Out of tree targets will
-  need to be updated to replace the argument node and remove any dead nodes in
-  cases where they currently return an ``SDNode *`` from this interface.
+    int main() {
+      float x = 4294967296.0f;
+      x = (float)((int)x);
+      printf("junk in the ftrunc: %f\n", x);
+      return 0;
+    }
 
-* Introduction of ThinLTO: [FIXME: needs to be documented more extensively in
-  /docs/ ; ping Mehdi/Teresa before the release if not done]
+.. code-block:: bash
 
-* Raised the minimum required CMake version to 3.4.3.
+    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
 
-.. 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
-   point (e.g. maybe you would like to give an example of the
-   functionality, or simply have a lot to talk about), see the `NOTE` below
-   for adding a new subsection.
+* ``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.
+
+* The ``DEBUG`` macro has been renamed to ``LLVM_DEBUG``, the interface remains
+  the same.  If you used this macro you need to migrate to the new one.
+  You should also clang-format your code to make it easier to integrate future
+  changes locally.  This can be done with the following bash commands:
+
+.. code-block:: bash
 
-* ... next change ...
+    git grep -l 'DEBUG' | xargs perl -pi -e 's/\bDEBUG\s?\(/LLVM_DEBUG(/g'
+    git diff -U0 master | ../clang/tools/clang-format/clang-format-diff.py -i -p1 -style LLVM
+
+* Early support for UBsan, X-Ray instrumentation and libFuzzer (x86 and x86_64) for OpenBSD. Support for MSan
+  (x86_64), X-Ray instrumentation and libFuzzer (x86 and x86_64) for FreeBSD.
+
+* ``SmallVector<T, 0>`` shrank from ``sizeof(void*) * 4 + sizeof(T)`` to
+  ``sizeof(void*) + sizeof(unsigned) * 2``, smaller than ``std::vector<T>`` on
+  64-bit platforms.  The maximum capacity is now restricted to ``UINT32_MAX``.
+  Since SmallVector doesn't have the exception-safety pessimizations some
+  implementations saddle std::vector with and is better at using ``realloc``,
+  it's now a better choice even on the heap (although when TinyPtrVector works,
+  it's even smaller).
+
+* Preliminary/experimental support for DWARF v5 debugging information,
+  including the new .debug_names accelerator table. DWARF emitted at ``-O0``
+  should be fully DWARF v5 compliant. Type units and split DWARF are known
+  not to be compliant, and higher optimization levels will still emit some
+  information in v4 format.
+
+* Note..
 
 .. NOTE
    If you would like to document a larger change, then you can add a
@@ -96,19 +130,13 @@ Non-comprehensive list of changes in this release
 Changes to the LLVM IR
 ----------------------
 
-* New intrinsics ``llvm.masked.load``, ``llvm.masked.store``,
-  ``llvm.masked.gather`` and ``llvm.masked.scatter`` were introduced to the
-  LLVM IR to allow selective memory access for vector data types.
+* 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.
 
-Changes to LLVM's IPO model
----------------------------
+* invariant.group.barrier has been renamed to launder.invariant.group.
 
-LLVM no longer does inter-procedural analysis and optimization (except
-inlining) on functions with comdat linkage.  Doing IPO over such
-functions is unsound because the implementation the linker chooses at
-link-time may be differently optimized than the one what was visible
-during optimization, and may have arbitrarily different observable
-behavior.  See `PR26774 <http://llvm.org/PR26774>`_ for more details.
+* invariant.group metadata can now refer only empty metadata nodes.
 
 Changes to the ARM Backend
 --------------------------
@@ -125,47 +153,49 @@ Changes to the MIPS Target
 Changes to the PowerPC Target
 -----------------------------
 
- Moved some optimizations from O3 to O2 (D18562)
-
-* Enable sibling call optimization on ppc64 ELFv1/ELFv2 abi
+ During this release ...
 
 Changes to the X86 Target
 -------------------------
 
-* LLVM now supports the Intel CPU codenamed Skylake Server with AVX-512
-  extensions using ``-march=skylake-avx512``. The switch enables the
-  ISA extensions AVX-512{F, CD, VL, BW, DQ}.
-
-* LLVM now supports the Intel CPU codenamed Knights Landing with AVX-512
-  extensions using ``-march=knl``. The switch enables the ISA extensions
-  AVX-512{F, CD, ER, PF}.
+ During this release ...
 
 Changes to the AMDGPU Target
 -----------------------------
 
- * Mesa 11.0.x is no longer supported
+ During this release ...
+
+Changes to the AVR Target
+-----------------------------
 
+ During this release ...
 
 Changes to the OCaml bindings
 -----------------------------
 
- During this release ...
+* Remove ``add_bb_vectorize``.
+
 
-Support for attribute 'notail' has been added
----------------------------------------------
+Changes to the C API
+--------------------
 
-This marker prevents optimization passes from adding 'tail' or
-'musttail' markers to a call. It is used to prevent tail call
-optimization from being performed on the call.
+* 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 3.9
-============================================
+Changes to the DAG infrastructure
+---------------------------------
+* ADDC/ADDE/SUBC/SUBE are now deprecated and will default to expand. Backends
+  that wish to continue to use these opcodes should explicitely request so
+  using ``setOperationAction`` in their ``TargetLowering``. New backends
+  should use UADDO/ADDCARRY/USUBO/SUBCARRY instead of the deprecated opcodes.
 
-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.9.
+* The SETCCE opcode has now been removed in favor of SETCCCARRY.
 
-* A project
+External Open Source Projects Using LLVM 7
+==========================================
+
+* A project...
 
 
 Additional Information
@@ -180,4 +210,3 @@ going into the ``llvm/docs/`` directory in the LLVM tree.
 
 If you have any questions or comments about LLVM, please feel free to contact
 us via the `mailing lists <http://llvm.org/docs/#maillist>`_.
-