mirror of
https://github.com/RPCS3/llvm.git
synced 2026-07-21 19:25:26 -04:00
ad5750369c
git-svn-id: https://llvm.org/svn/llvm-project/llvm/branches/release_38@262542 91177308-0d34-0410-b5e6-96231b3b80d8
304 lines
13 KiB
ReStructuredText
304 lines
13 KiB
ReStructuredText
======================
|
|
LLVM 3.8 Release Notes
|
|
======================
|
|
|
|
.. contents::
|
|
:local:
|
|
|
|
|
|
Introduction
|
|
============
|
|
|
|
This document contains the release notes for the LLVM Compiler Infrastructure,
|
|
release 3.8. 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.llvm.org/mailman/listinfo/llvm-dev>`_ is a good place to send
|
|
them.
|
|
|
|
Non-comprehensive list of changes in this release
|
|
=================================================
|
|
* With this release, the minimum Windows version required for running LLVM is
|
|
Windows 7. Earlier versions, including Windows Vista and XP are no longer
|
|
supported.
|
|
|
|
* With this release, the autoconf build system is deprecated. It will be removed
|
|
in the 3.9 release. Please migrate to using CMake. For more information see:
|
|
`Building LLVM with CMake <CMake.html>`_
|
|
|
|
* We have documented our C API stability guarantees for both development and
|
|
release branches, as well as documented how to extend the C API. Please see
|
|
the `developer documentation <DeveloperPolicy.html#c-api-changes>`_ for more
|
|
information.
|
|
|
|
* The C API function ``LLVMLinkModules`` is deprecated. It will be removed in the
|
|
3.9 release. Please migrate to ``LLVMLinkModules2``. Unlike the old function the
|
|
new one
|
|
|
|
* Doesn't take an unused parameter.
|
|
* Destroys the source instead of only damaging it.
|
|
* Does not record a message. Use the diagnostic handler instead.
|
|
|
|
* The C API functions ``LLVMParseBitcode``, ``LLVMParseBitcodeInContext``,
|
|
``LLVMGetBitcodeModuleInContext`` and ``LLVMGetBitcodeModule`` have been deprecated.
|
|
They will be removed in 3.9. Please migrate to the versions with a 2 suffix.
|
|
Unlike the old ones the new ones do not record a diagnostic message. Use
|
|
the diagnostic handler instead.
|
|
|
|
* The deprecated C APIs ``LLVMGetBitcodeModuleProviderInContext`` and
|
|
``LLVMGetBitcodeModuleProvider`` have been removed.
|
|
|
|
* The deprecated C APIs ``LLVMCreateExecutionEngine``, ``LLVMCreateInterpreter``,
|
|
``LLVMCreateJITCompiler``, ``LLVMAddModuleProvider`` and ``LLVMRemoveModuleProvider``
|
|
have been removed.
|
|
|
|
* With this release, the C API headers have been reorganized to improve build
|
|
time. Type specific declarations have been moved to Type.h, and error
|
|
handling routines have been moved to ErrorHandling.h. Both are included in
|
|
Core.h so nothing should change for projects directly including the headers,
|
|
but transitive dependencies may be affected.
|
|
|
|
* llvm-ar now supports thin archives.
|
|
|
|
* llvm doesn't produce ``.data.rel.ro.local`` or ``.data.rel`` sections anymore.
|
|
|
|
* Aliases to ``available_externally`` globals are now rejected by the verifier.
|
|
|
|
* The IR Linker has been split into ``IRMover`` that moves bits from one module to
|
|
another and Linker proper that decides what to link.
|
|
|
|
* Support for dematerializing has been dropped.
|
|
|
|
* ``RegisterScheduler::setDefault`` was removed. Targets that used to call into the
|
|
command line parser to set the ``DAGScheduler``, and that don't have enough
|
|
control with ``setSchedulingPreference``, should look into overriding the
|
|
``SubTargetHook`` "``getDAGScheduler()``".
|
|
|
|
* ``ilist_iterator<T>`` no longer has implicit conversions to and from ``T*``,
|
|
since ``ilist_iterator<T>`` may be pointing at the sentinel (which is usually
|
|
not of type ``T`` at all). To convert from an iterator ``I`` to a pointer,
|
|
use ``&*I``; to convert from a pointer ``P`` to an iterator, use
|
|
``P->getIterator()``. Alternatively, explicit conversions via
|
|
``static_cast<T>(U)`` are still available.
|
|
|
|
* ``ilist_node<T>::getNextNode()`` and ``ilist_node<T>::getPrevNode()`` now
|
|
fail at compile time when the node cannot access its parent list.
|
|
Previously, when the sentinel was was an ``ilist_half_node<T>``, this API
|
|
could return the sentinel instead of ``nullptr``. Frustrated callers should
|
|
be updated to use ``iplist<T>::getNextNode(T*)`` instead. Alternatively, if
|
|
the node ``N`` is guaranteed not to be the last in the list, it is safe to
|
|
call ``&*++N->getIterator()`` directly.
|
|
|
|
* The `Kaleidoscope tutorials <tutorial/index.html>`_ have been updated to use
|
|
the ORC JIT APIs.
|
|
|
|
* ORC now has a basic set of C bindings.
|
|
|
|
* Optional support for linking clang and the LLVM tools with a single libLLVM
|
|
shared library. To enable this, pass ``-DLLVM_LINK_LLVM_DYLIB=ON`` to CMake.
|
|
See `Building LLVM with CMake`_ for more details.
|
|
|
|
* The optimization to move the prologue and epilogue of functions in colder
|
|
code path (shrink-wrapping) is now enabled by default.
|
|
|
|
* A new target-independent gcc-compatible emulated Thread Local Storage mode
|
|
is added. When ``-femultated-tls`` flag is used, all accesses to TLS
|
|
variables are converted to calls to ``__emutls_get_address`` in the runtime
|
|
library.
|
|
|
|
* MSVC-compatible exception handling has been completely overhauled. New
|
|
instructions have been introduced to facilitate this:
|
|
`New exception handling instructions <ExceptionHandling.html#new-exception-handling-instructions>`_.
|
|
While we have done our best to test this feature thoroughly, it would
|
|
not be completely surprising if there were a few lingering issues that
|
|
early adopters might bump into.
|
|
|
|
|
|
Changes to the ARM Backends
|
|
---------------------------
|
|
|
|
During this release the AArch64 target has:
|
|
|
|
* Added support for more sanitizers (MSAN, TSAN) and made them compatible with
|
|
all VMA kernel configurations (currently tested on 39 and 42 bits).
|
|
* Gained initial LLD support in the new ELF back-end
|
|
* Extended the Load/Store optimiser and cleaned up some of the bad decisions
|
|
made earlier.
|
|
* Expanded LLDB support, including watchpoints, native building, Renderscript,
|
|
LLDB-server, debugging 32-bit applications.
|
|
* Added support for the ``Exynos M1`` chip.
|
|
|
|
During this release the ARM target has:
|
|
|
|
* Gained massive performance improvements on embedded benchmarks due to finally
|
|
running the stride vectorizer in full form, incrementing the performance gains
|
|
that we already had in the previous releases with limited stride vectorization.
|
|
* Expanded LLDB support, including watchpoints, unwind tables
|
|
* Extended the Load/Store optimiser and cleaned up some of the bad decisions
|
|
made earlier.
|
|
* Simplified code generation for global variable addresses in ELF, resulting in
|
|
a significant (4% in Chromium) reduction in code size.
|
|
* Gained some additional code size improvements, though there's still a long road
|
|
ahead, especially for older cores.
|
|
* Added some EABI floating point comparison functions to Compiler-RT
|
|
* Added support for Windows+GNU triple, ``+features`` in ``-mcpu``/``-march`` options.
|
|
|
|
|
|
Changes to the MIPS Target
|
|
--------------------------
|
|
|
|
During this release the MIPS target has:
|
|
|
|
* Significantly extended support for the Integrated Assembler. See below for
|
|
more information
|
|
* Added support for the ``P5600`` processor.
|
|
* Added support for the ``interrupt`` attribute for MIPS32R2 and later. This
|
|
attribute will generate a function which can be used as a interrupt handler
|
|
on bare metal MIPS targets using the static relocation model.
|
|
* Added support for the ``ERETNC`` instruction found in MIPS32R5 and later.
|
|
* Added support for OpenCL. See http://portablecl.org/.
|
|
|
|
* Address spaces 1 to 255 are now reserved for software use and conversions
|
|
between them are no-op casts.
|
|
|
|
* Removed the ``mips16`` value for the ``-mcpu`` option since it is an :abbr:`ASE
|
|
(Application Specific Extension)` and not a processor. If you were using this,
|
|
please specify another CPU and use ``-mips16`` to enable MIPS16.
|
|
* Removed ``copy_u.w`` from 32-bit MSA and ``copy_u.d`` from 64-bit MSA since
|
|
they have been removed from the MSA specification due to forward compatibility
|
|
issues. For example, 32-bit MSA code containing ``copy_u.w`` would behave
|
|
differently on a 64-bit processor supporting MSA. The corresponding intrinsics
|
|
are still available and may expand to ``copy_s.[wd]`` where this is
|
|
appropriate for forward compatibility purposes.
|
|
* Relaxed the ``-mnan`` option to allow ``-mnan=2008`` on MIPS32R2/MIPS64R2 for
|
|
compatibility with GCC.
|
|
* Made MIPS64R6 the default CPU for 64-bit Android triples.
|
|
|
|
The MIPS target has also fixed various bugs including the following notable
|
|
fixes:
|
|
|
|
* Fixed reversed operands on ``mthi``/``mtlo`` in the DSP :abbr:`ASE
|
|
(Application Specific Extension)`.
|
|
* The code generator no longer uses ``jal`` for calls to absolute immediate
|
|
addresses.
|
|
* Disabled fast instruction selection on MIPS32R6 and MIPS64R6 since this is not
|
|
yet supported.
|
|
* Corrected addend for ``R_MIPS_HI16`` and ``R_MIPS_PCHI16`` in MCJIT
|
|
* The code generator no longer crashes when handling subregisters of an 64-bit
|
|
FPU register with undefined value.
|
|
* The code generator no longer attempts to use ``$zero`` for operands that do
|
|
not permit ``$zero``.
|
|
* Corrected the opcode used for ``ll``/``sc`` when using MIPS32R6/MIPS64R6 and
|
|
the Integrated Assembler.
|
|
* Added support for atomic load and atomic store.
|
|
* Corrected debug info when dynamically re-aligning the stack.
|
|
|
|
We have made a large number of improvements to the integrated assembler for
|
|
MIPS. In this release, the integrated assembler isn't quite production-ready
|
|
since there are a few known issues related to bare-metal support, checking
|
|
immediates on instructions, and the N32/N64 ABI's. However, the current support
|
|
should be sufficient for many users of the O32 ABI, particularly those targeting
|
|
MIPS32 on Linux or bare-metal MIPS32.
|
|
|
|
If you would like to try the integrated assembler, please use
|
|
``-fintegrated-as``.
|
|
|
|
Changes to the PowerPC Target
|
|
-----------------------------
|
|
|
|
There are numerous improvements to the PowerPC target in this release:
|
|
|
|
* Shrink wrapping optimization has been enabled for PowerPC Little Endian
|
|
|
|
* Direct move instructions are used when converting scalars to vectors
|
|
|
|
* Thread Sanitizer (TSAN) is now supported for PowerPC
|
|
|
|
* New MI peephole pass to clean up redundant XXPERMDI instructions
|
|
|
|
* Add branch hints to highly biased branch instructions (code reaching
|
|
unreachable terminators and exceptional control flow constructs)
|
|
|
|
* Promote boolean return values to integer to prevent excessive usage of
|
|
condition registers
|
|
|
|
* Additional vector APIs for vector comparisons and vector merges have been
|
|
added to altivec.h
|
|
|
|
* Many bugs have been identified and fixed
|
|
|
|
|
|
Changes to the X86 Target
|
|
-----------------------------
|
|
|
|
* TLS is enabled for Cygwin as emutls.
|
|
|
|
* Smaller code for materializing 32-bit 1 and -1 constants at ``-Os``.
|
|
|
|
* More efficient code for wide integer compares. (E.g. 64-bit compares
|
|
on 32-bit targets.)
|
|
|
|
* Tail call support for ``thiscall``, ``stdcall``, ``vectorcall``, and
|
|
``fastcall`` functions.
|
|
|
|
Changes to the Hexagon Target
|
|
-----------------------------
|
|
|
|
In addition to general code size and performance improvements, Hexagon target
|
|
now has basic support for Hexagon V60 architecture and Hexagon Vector
|
|
Extensions (HVX).
|
|
|
|
Changes to the AVR Target
|
|
-------------------------
|
|
|
|
Slightly less than half of the AVR backend has been merged in at this point. It is still
|
|
missing a number large parts which cause it to be unusable, but is well on the
|
|
road to being completely merged and workable.
|
|
|
|
Changes to the OCaml bindings
|
|
-----------------------------
|
|
|
|
* The ocaml function link_modules has been replaced with link_modules' which
|
|
uses LLVMLinkModules2.
|
|
|
|
|
|
External Open Source Projects Using LLVM 3.8
|
|
============================================
|
|
|
|
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.8.
|
|
|
|
LDC - the LLVM-based D compiler
|
|
-------------------------------
|
|
|
|
`D <http://dlang.org>`_ is a language with C-like syntax and static typing. It
|
|
pragmatically combines efficiency, control, and modeling power, with safety and
|
|
programmer productivity. D supports powerful concepts like Compile-Time Function
|
|
Execution (CTFE) and Template Meta-Programming, provides an innovative approach
|
|
to concurrency and offers many classical paradigms.
|
|
|
|
`LDC <http://wiki.dlang.org/LDC>`_ uses the frontend from the reference compiler
|
|
combined with LLVM as backend to produce efficient native code. LDC targets
|
|
x86/x86_64 systems like Linux, OS X and Windows and also PowerPC (32/64 bit)
|
|
and ARM. Ports to other architectures like AArch64 and MIPS64 are underway.
|
|
|
|
|
|
Additional Information
|
|
======================
|
|
|
|
A wide variety of additional information is available on the `LLVM web page
|
|
<http://llvm.org/>`_, in particular in the `documentation
|
|
<http://llvm.org/docs/>`_ section. The web page also contains versions of the
|
|
API documentation which is up-to-date with the Subversion version of the source
|
|
code. You can access versions of these documents specific to this release by
|
|
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>`_.
|