mirror of
git://gcc.gnu.org/git/gcc.git
synced 2025-04-13 18:30:59 +08:00
re PR middle-end/12769 (-mlongcall doesn't convert all calls to long calls for builtin functions)
PR target/12769 * config/rs6000/rs6000.c (init_cumulative_args): Set call_cookie from rs6000_default_long_calls for libcalls. From-SVN: r91362
This commit is contained in:
parent
360e353587
commit
3eb4e360ee
@ -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-26 Richard Kenner <kenner@vlsi1.ultra.nyu.edu>
|
||||
|
||||
* expmed.c (extract_bit_field): When extracting from non-integer mode,
|
||||
|
@ -278,7 +278,8 @@ static GTY(()) 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;
|
||||
|
||||
@ -4699,10 +4700,11 @@ init_cumulative_args (CUMULATIVE_ARGS *cum, tree fntype,
|
||||
cum->nargs_prototype = n_named_args;
|
||||
|
||||
/* 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)
|
||||
{
|
||||
|
Loading…
x
Reference in New Issue
Block a user