OSDN Git Service

* config/rs6000/rs6000.c (rs6000_binds_local_p): Return bool.
authoramodra <amodra@138bc75d-0d04-0410-961f-82ee72b054a4>
Mon, 9 Sep 2002 02:25:42 +0000 (02:25 +0000)
committeramodra <amodra@138bc75d-0d04-0410-961f-82ee72b054a4>
Mon, 9 Sep 2002 02:25:42 +0000 (02:25 +0000)
(function_ok_for_sibcall): Use binds_local_p.  Respect longcall
attributes.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@56961 138bc75d-0d04-0410-961f-82ee72b054a4

gcc/ChangeLog
gcc/config/rs6000/rs6000.c

index 5e0d2fe..649a39d 100644 (file)
@@ -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.
index 85d6dbe..dbdb008 100644 (file)
@@ -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);
 }