* 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:
- "fp-cast-overflow-workaround"="true". This attribute may be created by the
- clang option :option:`-ffp-cast-overflow-workaround`.
+ "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":
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.
+
+* 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
+
+ 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..
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
--------------------
- During this release ...
+* 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.
+
+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.
+* The SETCCE opcode has now been removed in favor of SETCCCARRY.
External Open Source Projects Using LLVM 7
==========================================