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
-mabi=ilp32, 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.
This commit is contained in:
Alexandre Oliva 2020-12-03 16:20:28 -03:00 committed by Alexandre Oliva
parent 44ac1ea0e2
commit 442b6fb7c0
2 changed files with 8 additions and 1 deletions

View File

@ -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;

View File

@ -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",