aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlan Modra <amodra@bigpond.net.au>2002-09-09 02:25:42 +0000
committerAlan Modra <amodra@gcc.gnu.org>2002-09-09 11:55:42 +0930
commit2bcc50d0ead9495a1618d03c302463c655e85b35 (patch)
tree95d51a332e3f9506b5471d7b1573592efec12f58
parent2515a7ea11c910e67c859c96d42d1846367df3f0 (diff)
downloadgcc-2bcc50d0ead9495a1618d03c302463c655e85b35.zip
gcc-2bcc50d0ead9495a1618d03c302463c655e85b35.tar.gz
gcc-2bcc50d0ead9495a1618d03c302463c655e85b35.tar.bz2
rs6000.c (rs6000_binds_local_p): Return bool.
* config/rs6000/rs6000.c (rs6000_binds_local_p): Return bool. (function_ok_for_sibcall): Use binds_local_p. Respect longcall attributes. From-SVN: r56961
-rw-r--r--gcc/ChangeLog6
-rw-r--r--gcc/config/rs6000/rs6000.c18
2 files changed, 18 insertions, 6 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 5e0d2fe..649a39d 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,9 @@
+2002-09-09 Alan Modra <amodra@bigpond.net.au>
+
+ * config/rs6000/rs6000.c (rs6000_binds_local_p): Return bool.
+ (function_ok_for_sibcall): Use binds_local_p. Respect longcall
+ attributes.
+
2002-09-08 Kaveh R. Ghazi <ghazi@caip.rutgers.edu>
* fr30.c (fr30_print_operand): Fix bug in output of CONST_DOUBLE.
diff --git a/gcc/config/rs6000/rs6000.c b/gcc/config/rs6000/rs6000.c
index 85d6dbe..dbdb008 100644
--- a/gcc/config/rs6000/rs6000.c
+++ b/gcc/config/rs6000/rs6000.c
@@ -222,7 +222,7 @@ static const char * rs6000_xcoff_strip_name_encoding PARAMS ((const char *));
#endif
static void rs6000_xcoff_encode_section_info PARAMS ((tree, int))
ATTRIBUTE_UNUSED;
-static void rs6000_binds_local_p PARAMS ((tree));
+static bool rs6000_binds_local_p PARAMS ((tree));
static int rs6000_adjust_cost PARAMS ((rtx, rtx, rtx, int));
static int rs6000_adjust_priority PARAMS ((rtx, int));
static int rs6000_issue_rate PARAMS ((void));
@@ -9503,8 +9503,14 @@ function_ok_for_sibcall (fndecl)
}
}
if (DEFAULT_ABI == ABI_DARWIN
- || (TREE_ASM_WRITTEN (fndecl) && !flag_pic) || !TREE_PUBLIC (fndecl))
- return 1;
+ || (*targetm.binds_local_p) (fndecl))
+ {
+ tree attr_list = TYPE_ATTRIBUTES (TREE_TYPE (fndecl));
+
+ if (!lookup_attribute ("longcall", attr_list)
+ || lookup_attribute ("shortcall", attr_list))
+ return 1;
+ }
}
return 0;
}
@@ -13207,13 +13213,13 @@ rs6000_xcoff_encode_section_info (decl, first)
/* Cross-module name binding. For AIX and PPC64 Linux, which always are
PIC, use private copy of flag_pic. */
-static void
+static bool
rs6000_binds_local_p (decl)
tree decl;
{
if (DEFAULT_ABI == ABI_AIX)
- default_binds_local_p_1 (decl, rs6000_flag_pic);
+ return default_binds_local_p_1 (decl, rs6000_flag_pic);
else
- default_binds_local_p_1 (decl, flag_pic);
+ return default_binds_local_p_1 (decl, flag_pic);
}