https://gcc.gnu.org/bugzilla/show_bug.cgi?id=99216

--- Comment #7 from CVS Commits <cvs-commit at gcc dot gnu.org> ---
The master branch has been updated by Alex Coplan <acop...@gcc.gnu.org>:

https://gcc.gnu.org/g:e4005cf8717abe8c949f840c707e02e6c394c2e7

commit r11-7890-ge4005cf8717abe8c949f840c707e02e6c394c2e7
Author: Alex Coplan <alex.cop...@arm.com>
Date:   Mon Mar 29 12:18:19 2021 +0100

    aarch64: Fix SVE ACLE builtins with LTO [PR99216]

    As discussed in the PR, we currently have two different numbering
    schemes for SVE builtins: one for C, and one for C++. This is
    problematic for LTO, where we end up getting confused about which
    intrinsic we're talking about. This patch inserts placeholders into the
    registered_functions vector to ensure that there is a consistent
    numbering scheme for both C and C++.

    We use integer_zero_node as a placeholder node instead of building a
    function decl. This is safe because the node is only returned by the
    TARGET_BUILTIN_DECL hook, which (on AArch64) is only used for validation
    when builtin decls are streamed into lto1.

    gcc/ChangeLog:

            PR target/99216
            * config/aarch64/aarch64-sve-builtins.cc
            (function_builder::add_function): Add placeholder_p argument, use
            placeholder decls if this is set.
            (function_builder::add_unique_function): Instead of conditionally
adding
            direct overloads, unconditionally add either a direct overload or a
            placeholder.
            (function_builder::add_overloaded_function): Set placeholder_p if
we're
            using C++ overloads. Use the obstack for string storage instead
            of relying on the tree nodes.
            (function_builder::add_overloaded_functions): Don't return early
for
            m_direct_overloads: we need to add placeholders.
            * config/aarch64/aarch64-sve-builtins.h
            (function_builder::add_function): Add placeholder_p argument.

    gcc/testsuite/ChangeLog:

            PR target/99216
            * g++.target/aarch64/sve/pr99216.C: New test.

Reply via email to