llvm-project/clang/utils
Erich Keane 3efe00206f Implement cpu_dispatch/cpu_specific Multiversioning
As documented here: https://software.intel.com/en-us/node/682969 and
https://software.intel.com/en-us/node/523346. cpu_dispatch multiversioning
is an ICC feature that provides for function multiversioning.

This feature is implemented with two attributes: First, cpu_specific,
which specifies the individual function versions. Second, cpu_dispatch,
which specifies the location of the resolver function and the list of
resolvable functions.

This is valuable since it provides a mechanism where the resolver's TU
can be specified in one location, and the individual implementions
each in their own translation units.

The goal of this patch is to be source-compatible with ICC, so this
implementation diverges from the ICC implementation in a few ways:
1- Linux x86/64 only: This implementation uses ifuncs in order to
properly dispatch functions. This is is a valuable performance benefit
over the ICC implementation. A future patch will be provided to enable
this feature on Windows, but it will obviously more closely fit ICC's
implementation.
2- CPU Identification functions: ICC uses a set of custom functions to identify
the feature list of the host processor. This patch uses the cpu_supports
functionality in order to better align with 'target' multiversioning.
1- cpu_dispatch function def/decl: ICC's cpu_dispatch requires that the function
marked cpu_dispatch be an empty definition. This patch supports that as well,
however declarations are also permitted, since the linker will solve the
issue of multiple emissions.

Differential Revision: https://reviews.llvm.org/D47474

llvm-svn: 337552
2018-07-20 14:13:28 +00:00
..
ABITest Add back the ABITest makefiles 2016-02-03 17:16:01 +00:00
CIndex
ClangVisualizers Improved Visual Studio visualization of OpaquePtr 2016-06-13 04:02:35 +00:00
TableGen Implement cpu_dispatch/cpu_specific Multiversioning 2018-07-20 14:13:28 +00:00
TestUtils
VtableTest Remove autoconf support 2016-01-26 21:30:40 +00:00
analyzer [analyzer] [tests] Pass clang executable path to prefix-less executor scripts. 2018-07-02 17:10:40 +00:00
check_cfc Fix typos in clang 2018-04-06 15:14:32 +00:00
hmaptool Re-apply: Add python tool to dump and construct header maps 2018-06-21 21:45:24 +00:00
perf-training [clang] Enable clang build with LLVM_BUILD_INSTRUMENTED without setting LLVM_PROFTDATA 2017-10-13 03:21:39 +00:00
valgrind
CaptureCmd
ClangDataFormat.py
CmpDriver
FindSpecRefs
FuzzTest
bash-autocomplete.sh [bash-completion] Fix tab separation on macOS 2018-05-24 16:25:40 +00:00
builtin-defines.c
clangdiag.py Fix typos in clang 2018-04-06 15:14:32 +00:00
find-unused-diagnostics.sh Unused diagnostics can occur in tblgen. 2018-01-25 15:57:22 +00:00
modfuzz.py Add simple, stupid, pattern-based fuzzer / reducer for modules bugs. I've 2016-06-27 19:43:46 +00:00
token-delta.py