]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
re PR middle-end/12769 (-mlongcall doesn't convert all calls to long calls for builti...
authorAlan Modra <amodra@bigpond.net.au>
Sat, 27 Nov 2004 01:18:25 +0000 (01:18 +0000)
committerAlan Modra <amodra@gcc.gnu.org>
Sat, 27 Nov 2004 01:18:25 +0000 (11:48 +1030)
PR target/12769
* config/rs6000/rs6000.c (init_cumulative_args): Set call_cookie
from rs6000_default_long_calls for libcalls.

From-SVN: r91364

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

index faf78cc481f9eb803af7bb856ccfd0359b7c3909..bbfd8f5efcd53c853bb1d584957b53c657000843 100644 (file)
@@ -1,3 +1,9 @@
+2004-11-27  Alan Modra  <amodra@bigpond.net.au>
+
+       PR target/12769
+       * config/rs6000/rs6000.c (init_cumulative_args): Set call_cookie
+       from rs6000_default_long_calls for libcalls.
+
 2004-11-25  Richard Henderson  <rth@redhat.com>
 
        PR c++/6764
index 3931373736b0c120a3d593ca3850c73a48969aa3..ff30609d30f891272d6873b1bfbc1d35cd6876ed 100644 (file)
@@ -150,7 +150,8 @@ static int rs6000_sr_alias_set;
 /* Call distance, overridden by -mlongcall and #pragma longcall(1).
    The only place that looks at this is rs6000_set_default_type_attributes;
    everywhere else should rely on the presence or absence of a longcall
-   attribute on the function declaration.  */
+   attribute on the function declaration.  Exception: init_cumulative_args
+   looks at it too, for libcalls.  */
 int rs6000_default_long_calls;
 const char *rs6000_longcall_switch;
 
@@ -2910,10 +2911,11 @@ init_cumulative_args (cum, fntype, libname, incoming, libcall)
   cum->orig_nargs = cum->nargs_prototype;
 
   /* Check for a longcall attribute.  */
-  if (fntype
-      && lookup_attribute ("longcall", TYPE_ATTRIBUTES (fntype))
-      && !lookup_attribute ("shortcall", TYPE_ATTRIBUTES (fntype)))
-    cum->call_cookie = CALL_LONG;
+  if ((!fntype && rs6000_default_long_calls)
+      || (fntype
+         && lookup_attribute ("longcall", TYPE_ATTRIBUTES (fntype))
+         && !lookup_attribute ("shortcall", TYPE_ATTRIBUTES (fntype))))
+    cum->call_cookie |= CALL_LONG;
 
   if (TARGET_DEBUG_ARG)
     {