varasm.c (incorporeal_function_p): New.

* varasm.c (incorporeal_function_p): New.
	(assemble_external): Use it as a filter.
	* config/mips/mips.c (mips_output_external): Don't check for builtin
	functions here.

From-SVN: r74368
This commit is contained in:
Richard Sandiford 2003-12-06 15:41:24 +00:00 committed by Richard Sandiford
parent e25c906af1
commit 9be6533af6
3 changed files with 36 additions and 4 deletions

View File

@ -1,3 +1,10 @@
2003-12-06 Richard Sandiford <rsandifo@redhat.com>
* varasm.c (incorporeal_function_p): New.
(assemble_external): Use it as a filter.
* config/mips/mips.c (mips_output_external): Don't check for builtin
functions here.
2003-12-06 Richard Earnshaw <reanrsha@arm.com>
* arm.md (IOR (COMPARISON) (AND)): New define_splits.

View File

@ -5574,9 +5574,7 @@ mips_output_external (FILE *file ATTRIBUTE_UNUSED, tree decl, const char *name)
extern_head = p;
}
if (TARGET_IRIX && mips_abi == ABI_32
&& TREE_CODE (decl) == FUNCTION_DECL
&& !DECL_BUILT_IN (decl))
if (TARGET_IRIX && mips_abi == ABI_32 && TREE_CODE (decl) == FUNCTION_DECL)
{
p = (struct extern_list *) ggc_alloc (sizeof (struct extern_list));
p->next = extern_head;

View File

@ -137,6 +137,9 @@ static HOST_WIDE_INT const_alias_set;
static const char *strip_reg_name (const char *);
static int contains_pointers_p (tree);
#ifdef ASM_OUTPUT_EXTERNAL
static bool incorporeal_function_p (tree);
#endif
static void decode_addr_const (tree, struct addr_const *);
static hashval_t const_desc_hash (const void *);
static int const_desc_eq (const void *, const void *);
@ -1599,6 +1602,29 @@ contains_pointers_p (tree type)
}
}
#ifdef ASM_OUTPUT_EXTERNAL
/* True if DECL is a function decl for which no out-of-line copy exists.
It is assumed that DECL's assembler name has been set. */
static bool
incorporeal_function_p (tree decl)
{
if (TREE_CODE (decl) == FUNCTION_DECL && DECL_BUILT_IN (decl))
{
const char *name;
if (DECL_BUILT_IN_CLASS (decl) == BUILT_IN_NORMAL
&& DECL_FUNCTION_CODE (decl) == BUILT_IN_ALLOCA)
return true;
name = IDENTIFIER_POINTER (DECL_ASSEMBLER_NAME (decl));
if (strncmp (name, "__builtin_", strlen ("__builtin_")) == 0)
return true;
}
return false;
}
#endif
/* Output something to declare an external symbol to the assembler.
(Most assemblers don't need this, so we normally output nothing.)
Do nothing if DECL is not external. */
@ -1619,7 +1645,8 @@ assemble_external (tree decl ATTRIBUTE_UNUSED)
rtx rtl = DECL_RTL (decl);
if (GET_CODE (rtl) == MEM && GET_CODE (XEXP (rtl, 0)) == SYMBOL_REF
&& ! SYMBOL_REF_USED (XEXP (rtl, 0)))
&& !SYMBOL_REF_USED (XEXP (rtl, 0))
&& !incorporeal_function_p (decl))
{
/* Some systems do require some output. */
SYMBOL_REF_USED (XEXP (rtl, 0)) = 1;