[PATCH] D41837: Add Function multiversion to the release notes.
Hans Wennborg via cfe-commits
cfe-commits at lists.llvm.org
Wed Jan 17 04:47:20 PST 2018
Did this functionality land before the 6.0 branch, that is, should we
copy the release notes to the branch?
Thanks
Hans
On Tue, Jan 9, 2018 at 12:37 AM, Erich Keane via Phabricator
<reviews at reviews.llvm.org> wrote:
> This revision was automatically updated to reflect the committed changes.
> Closed by commit rC322043: Document attribute target multiversioning. (authored by erichkeane, committed by ).
>
> Changed prior to commit:
> https://reviews.llvm.org/D41837?vs=128982&id=128995#toc
>
> Repository:
> rC Clang
>
> https://reviews.llvm.org/D41837
>
> Files:
> docs/ReleaseNotes.rst
> include/clang/Basic/AttrDocs.td
>
>
> Index: docs/ReleaseNotes.rst
> ===================================================================
> --- docs/ReleaseNotes.rst
> +++ docs/ReleaseNotes.rst
> @@ -80,6 +80,12 @@
> Attribute Changes in Clang
> --------------------------
>
> +- Clang now supports function multiversioning with attribute 'target' on ELF
> + based x86/x86-64 environments by using indirect functions. This implementation
> + has a few minor limitations over the GCC implementation for the sake of AST
> + sanity, however it is otherwise compatible with existing code using this
> + feature for GCC. Consult the documentation for the target attribute for more
> + information.
> - ...
>
> Windows Support
> Index: include/clang/Basic/AttrDocs.td
> ===================================================================
> --- include/clang/Basic/AttrDocs.td
> +++ include/clang/Basic/AttrDocs.td
> @@ -1474,6 +1474,24 @@
> Example "subtarget features" from the x86 backend include: "mmx", "sse", "sse4.2",
> "avx", "xop" and largely correspond to the machine specific options handled by
> the front end.
> +
> +Additionally, this attribute supports function multiversioning for ELF based
> +x86/x86-64 targets, which can be used to create multiple implementations of the
> +same function that will be resolved at runtime based on the priority of their
> +``target`` attribute strings. A function is considered a multiversioned function
> +if either two declarations of the function have different ``target`` attribute
> + strings, or if it has a ``target`` attribute string of ``default``. For
> + example:
> +
> + .. code-block:: c++
> + __attribute__((target("arch=atom")))
> + void foo() {} // will be called on 'atom' processors.
> + __attribute__((target("default")))
> + void foo() {} // will be called on any other processors.
> +
> +All multiversioned functions must contain a ``default`` (fallback)
> +implementation, otherwise usages of the function are considered invalid.
> +Additionally, a function may not become multiversioned after its first use.
> }];
> }
>
>
>
More information about the cfe-commits
mailing list