From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: by sourceware.org (Postfix, from userid 2140) id DA4163850415; Thu, 3 Dec 2020 14:06:05 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org DA4163850415 Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit From: Alexandre Oliva To: gcc-cvs@gcc.gnu.org Subject: [gcc(refs/users/aoliva/heads/testme)] fix __builtin___clear_cache overrider fallout X-Act-Checkin: gcc X-Git-Author: Alexandre Oliva X-Git-Refname: refs/users/aoliva/heads/testme X-Git-Oldrev: c05ece92c6153289fd6055e31e791e59b8ac4121 X-Git-Newrev: 1f23042e4f7be22ed26970c5eafd37ef3c5a5ea5 Message-Id: <20201203140605.DA4163850415@sourceware.org> Date: Thu, 3 Dec 2020 14:06:05 +0000 (GMT) X-BeenThere: gcc-cvs@gcc.gnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Gcc-cvs mailing list List-Unsubscribe: , List-Archive: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 03 Dec 2020 14:06:06 -0000 https://gcc.gnu.org/g:1f23042e4f7be22ed26970c5eafd37ef3c5a5ea5 commit 1f23042e4f7be22ed26970c5eafd37ef3c5a5ea5 Author: Alexandre Oliva Date: Thu Dec 3 10:51:43 2020 -0300 fix __builtin___clear_cache overrider fallout Machines that had CLEAR_CACHE_INSN and that would thus issue calls to __clear_cache with the default call expander, would fail on languages that did not set up the __clear_cache builtin. This patch arranges for all languages to set up this builtin. Machines or multilibs that had ptr_mode != Pmode, such as aarch64 with -milp32, would fail the RTL mode test of the arguments passed to __clear_cache, because we'd insist on ptr_mode. This patch arranges for Pmode to be accepted as well. for gcc/ChangeLog * tree.c (build_common_builtin_nodes): Declare __builtin___clear_cache for all languages. * builtins.c (maybe_emit_call_builtin___clear_cache): Accept Pmode arguments. Diff: --- gcc/builtins.c | 3 ++- gcc/tree.c | 6 ++++++ 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/gcc/builtins.c b/gcc/builtins.c index ecc12e69c14..cd30de8bfb0 100644 --- a/gcc/builtins.c +++ b/gcc/builtins.c @@ -7793,7 +7793,8 @@ default_emit_call_builtin___clear_cache (rtx begin, rtx end) void maybe_emit_call_builtin___clear_cache (rtx begin, rtx end) { - if (GET_MODE (begin) != ptr_mode || GET_MODE (end) != ptr_mode) + if ((GET_MODE (begin) != ptr_mode && GET_MODE (begin) != Pmode) + || (GET_MODE (end) != ptr_mode && GET_MODE (end) != Pmode)) { error ("both arguments to %<__builtin___clear_cache%> must be pointers"); return; diff --git a/gcc/tree.c b/gcc/tree.c index 52a145dd018..72311005f57 100644 --- a/gcc/tree.c +++ b/gcc/tree.c @@ -10733,6 +10733,12 @@ build_common_builtin_nodes (void) ftype = build_function_type_list (void_type_node, ptr_type_node, ptr_type_node, NULL_TREE); + if (!builtin_decl_explicit_p (BUILT_IN_CLEAR_CACHE)) + local_define_builtin ("__builtin___clear_cache", ftype, + BUILT_IN_CLEAR_CACHE, + "__builtin___clear_cache", + ECF_NOTHROW); + local_define_builtin ("__builtin_nonlocal_goto", ftype, BUILT_IN_NONLOCAL_GOTO, "__builtin_nonlocal_goto",