OSDN Git Service

fortran/
[pf3gnuchains/gcc-fork.git] / gcc / calls.c
1 /* Convert function calls to rtl insns, for GNU C compiler.
2    Copyright (C) 1989, 1992, 1993, 1994, 1995, 1996, 1997, 1998,
3    1999, 2000, 2001, 2002, 2003, 2004, 2005
4    Free Software Foundation, Inc.
5
6 This file is part of GCC.
7
8 GCC is free software; you can redistribute it and/or modify it under
9 the terms of the GNU General Public License as published by the Free
10 Software Foundation; either version 2, or (at your option) any later
11 version.
12
13 GCC is distributed in the hope that it will be useful, but WITHOUT ANY
14 WARRANTY; without even the implied warranty of MERCHANTABILITY or
15 FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
16 for more details.
17
18 You should have received a copy of the GNU General Public License
19 along with GCC; see the file COPYING.  If not, write to the Free
20 Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA
21 02110-1301, USA.  */
22
23 #include "config.h"
24 #include "system.h"
25 #include "coretypes.h"
26 #include "tm.h"
27 #include "rtl.h"
28 #include "tree.h"
29 #include "flags.h"
30 #include "expr.h"
31 #include "optabs.h"
32 #include "libfuncs.h"
33 #include "function.h"
34 #include "regs.h"
35 #include "toplev.h"
36 #include "output.h"
37 #include "tm_p.h"
38 #include "timevar.h"
39 #include "sbitmap.h"
40 #include "langhooks.h"
41 #include "target.h"
42 #include "cgraph.h"
43 #include "except.h"
44
45 /* Like PREFERRED_STACK_BOUNDARY but in units of bytes, not bits.  */
46 #define STACK_BYTES (PREFERRED_STACK_BOUNDARY / BITS_PER_UNIT)
47
48 /* Data structure and subroutines used within expand_call.  */
49
50 struct arg_data
51 {
52   /* Tree node for this argument.  */
53   tree tree_value;
54   /* Mode for value; TYPE_MODE unless promoted.  */
55   enum machine_mode mode;
56   /* Current RTL value for argument, or 0 if it isn't precomputed.  */
57   rtx value;
58   /* Initially-compute RTL value for argument; only for const functions.  */
59   rtx initial_value;
60   /* Register to pass this argument in, 0 if passed on stack, or an
61      PARALLEL if the arg is to be copied into multiple non-contiguous
62      registers.  */
63   rtx reg;
64   /* Register to pass this argument in when generating tail call sequence.
65      This is not the same register as for normal calls on machines with
66      register windows.  */
67   rtx tail_call_reg;
68   /* If REG is a PARALLEL, this is a copy of VALUE pulled into the correct
69      form for emit_group_move.  */
70   rtx parallel_value;
71   /* If REG was promoted from the actual mode of the argument expression,
72      indicates whether the promotion is sign- or zero-extended.  */
73   int unsignedp;
74   /* Number of bytes to put in registers.  0 means put the whole arg
75      in registers.  Also 0 if not passed in registers.  */
76   int partial;
77   /* Nonzero if argument must be passed on stack.
78      Note that some arguments may be passed on the stack
79      even though pass_on_stack is zero, just because FUNCTION_ARG says so.
80      pass_on_stack identifies arguments that *cannot* go in registers.  */
81   int pass_on_stack;
82   /* Some fields packaged up for locate_and_pad_parm.  */
83   struct locate_and_pad_arg_data locate;
84   /* Location on the stack at which parameter should be stored.  The store
85      has already been done if STACK == VALUE.  */
86   rtx stack;
87   /* Location on the stack of the start of this argument slot.  This can
88      differ from STACK if this arg pads downward.  This location is known
89      to be aligned to FUNCTION_ARG_BOUNDARY.  */
90   rtx stack_slot;
91   /* Place that this stack area has been saved, if needed.  */
92   rtx save_area;
93   /* If an argument's alignment does not permit direct copying into registers,
94      copy in smaller-sized pieces into pseudos.  These are stored in a
95      block pointed to by this field.  The next field says how many
96      word-sized pseudos we made.  */
97   rtx *aligned_regs;
98   int n_aligned_regs;
99 };
100
101 /* A vector of one char per byte of stack space.  A byte if nonzero if
102    the corresponding stack location has been used.
103    This vector is used to prevent a function call within an argument from
104    clobbering any stack already set up.  */
105 static char *stack_usage_map;
106
107 /* Size of STACK_USAGE_MAP.  */
108 static int highest_outgoing_arg_in_use;
109
110 /* A bitmap of virtual-incoming stack space.  Bit is set if the corresponding
111    stack location's tail call argument has been already stored into the stack.
112    This bitmap is used to prevent sibling call optimization if function tries
113    to use parent's incoming argument slots when they have been already
114    overwritten with tail call arguments.  */
115 static sbitmap stored_args_map;
116
117 /* stack_arg_under_construction is nonzero when an argument may be
118    initialized with a constructor call (including a C function that
119    returns a BLKmode struct) and expand_call must take special action
120    to make sure the object being constructed does not overlap the
121    argument list for the constructor call.  */
122 static int stack_arg_under_construction;
123
124 static void emit_call_1 (rtx, tree, tree, tree, HOST_WIDE_INT, HOST_WIDE_INT,
125                          HOST_WIDE_INT, rtx, rtx, int, rtx, int,
126                          CUMULATIVE_ARGS *);
127 static void precompute_register_parameters (int, struct arg_data *, int *);
128 static int store_one_arg (struct arg_data *, rtx, int, int, int);
129 static void store_unaligned_arguments_into_pseudos (struct arg_data *, int);
130 static int finalize_must_preallocate (int, int, struct arg_data *,
131                                       struct args_size *);
132 static void precompute_arguments (int, int, struct arg_data *);
133 static int compute_argument_block_size (int, struct args_size *, int);
134 static void initialize_argument_information (int, struct arg_data *,
135                                              struct args_size *, int, tree,
136                                              tree, CUMULATIVE_ARGS *, int,
137                                              rtx *, int *, int *, int *,
138                                              bool *, bool);
139 static void compute_argument_addresses (struct arg_data *, rtx, int);
140 static rtx rtx_for_function_call (tree, tree);
141 static void load_register_parameters (struct arg_data *, int, rtx *, int,
142                                       int, int *);
143 static rtx emit_library_call_value_1 (int, rtx, rtx, enum libcall_type,
144                                       enum machine_mode, int, va_list);
145 static int special_function_p (tree, int);
146 static int check_sibcall_argument_overlap_1 (rtx);
147 static int check_sibcall_argument_overlap (rtx, struct arg_data *, int);
148
149 static int combine_pending_stack_adjustment_and_call (int, struct args_size *,
150                                                       unsigned int);
151 static tree split_complex_values (tree);
152 static tree split_complex_types (tree);
153
154 #ifdef REG_PARM_STACK_SPACE
155 static rtx save_fixed_argument_area (int, rtx, int *, int *);
156 static void restore_fixed_argument_area (rtx, rtx, int, int);
157 #endif
158 \f
159 /* Force FUNEXP into a form suitable for the address of a CALL,
160    and return that as an rtx.  Also load the static chain register
161    if FNDECL is a nested function.
162
163    CALL_FUSAGE points to a variable holding the prospective
164    CALL_INSN_FUNCTION_USAGE information.  */
165
166 rtx
167 prepare_call_address (rtx funexp, rtx static_chain_value,
168                       rtx *call_fusage, int reg_parm_seen, int sibcallp)
169 {
170   /* Make a valid memory address and copy constants through pseudo-regs,
171      but not for a constant address if -fno-function-cse.  */
172   if (GET_CODE (funexp) != SYMBOL_REF)
173     /* If we are using registers for parameters, force the
174        function address into a register now.  */
175     funexp = ((SMALL_REGISTER_CLASSES && reg_parm_seen)
176               ? force_not_mem (memory_address (FUNCTION_MODE, funexp))
177               : memory_address (FUNCTION_MODE, funexp));
178   else if (! sibcallp)
179     {
180 #ifndef NO_FUNCTION_CSE
181       if (optimize && ! flag_no_function_cse)
182         funexp = force_reg (Pmode, funexp);
183 #endif
184     }
185
186   if (static_chain_value != 0)
187     {
188       static_chain_value = convert_memory_address (Pmode, static_chain_value);
189       emit_move_insn (static_chain_rtx, static_chain_value);
190
191       if (REG_P (static_chain_rtx))
192         use_reg (call_fusage, static_chain_rtx);
193     }
194
195   return funexp;
196 }
197
198 /* Generate instructions to call function FUNEXP,
199    and optionally pop the results.
200    The CALL_INSN is the first insn generated.
201
202    FNDECL is the declaration node of the function.  This is given to the
203    macro RETURN_POPS_ARGS to determine whether this function pops its own args.
204
205    FUNTYPE is the data type of the function.  This is given to the macro
206    RETURN_POPS_ARGS to determine whether this function pops its own args.
207    We used to allow an identifier for library functions, but that doesn't
208    work when the return type is an aggregate type and the calling convention
209    says that the pointer to this aggregate is to be popped by the callee.
210
211    STACK_SIZE is the number of bytes of arguments on the stack,
212    ROUNDED_STACK_SIZE is that number rounded up to
213    PREFERRED_STACK_BOUNDARY; zero if the size is variable.  This is
214    both to put into the call insn and to generate explicit popping
215    code if necessary.
216
217    STRUCT_VALUE_SIZE is the number of bytes wanted in a structure value.
218    It is zero if this call doesn't want a structure value.
219
220    NEXT_ARG_REG is the rtx that results from executing
221      FUNCTION_ARG (args_so_far, VOIDmode, void_type_node, 1)
222    just after all the args have had their registers assigned.
223    This could be whatever you like, but normally it is the first
224    arg-register beyond those used for args in this call,
225    or 0 if all the arg-registers are used in this call.
226    It is passed on to `gen_call' so you can put this info in the call insn.
227
228    VALREG is a hard register in which a value is returned,
229    or 0 if the call does not return a value.
230
231    OLD_INHIBIT_DEFER_POP is the value that `inhibit_defer_pop' had before
232    the args to this call were processed.
233    We restore `inhibit_defer_pop' to that value.
234
235    CALL_FUSAGE is either empty or an EXPR_LIST of USE expressions that
236    denote registers used by the called function.  */
237
238 static void
239 emit_call_1 (rtx funexp, tree fntree, tree fndecl ATTRIBUTE_UNUSED,
240              tree funtype ATTRIBUTE_UNUSED,
241              HOST_WIDE_INT stack_size ATTRIBUTE_UNUSED,
242              HOST_WIDE_INT rounded_stack_size,
243              HOST_WIDE_INT struct_value_size ATTRIBUTE_UNUSED,
244              rtx next_arg_reg ATTRIBUTE_UNUSED, rtx valreg,
245              int old_inhibit_defer_pop, rtx call_fusage, int ecf_flags,
246              CUMULATIVE_ARGS *args_so_far ATTRIBUTE_UNUSED)
247 {
248   rtx rounded_stack_size_rtx = GEN_INT (rounded_stack_size);
249   rtx call_insn;
250   int already_popped = 0;
251   HOST_WIDE_INT n_popped = RETURN_POPS_ARGS (fndecl, funtype, stack_size);
252 #if defined (HAVE_call) && defined (HAVE_call_value)
253   rtx struct_value_size_rtx;
254   struct_value_size_rtx = GEN_INT (struct_value_size);
255 #endif
256
257 #ifdef CALL_POPS_ARGS
258   n_popped += CALL_POPS_ARGS (* args_so_far);
259 #endif
260
261   /* Ensure address is valid.  SYMBOL_REF is already valid, so no need,
262      and we don't want to load it into a register as an optimization,
263      because prepare_call_address already did it if it should be done.  */
264   if (GET_CODE (funexp) != SYMBOL_REF)
265     funexp = memory_address (FUNCTION_MODE, funexp);
266
267 #if defined (HAVE_sibcall_pop) && defined (HAVE_sibcall_value_pop)
268   if ((ecf_flags & ECF_SIBCALL)
269       && HAVE_sibcall_pop && HAVE_sibcall_value_pop
270       && (n_popped > 0 || stack_size == 0))
271     {
272       rtx n_pop = GEN_INT (n_popped);
273       rtx pat;
274
275       /* If this subroutine pops its own args, record that in the call insn
276          if possible, for the sake of frame pointer elimination.  */
277
278       if (valreg)
279         pat = GEN_SIBCALL_VALUE_POP (valreg,
280                                      gen_rtx_MEM (FUNCTION_MODE, funexp),
281                                      rounded_stack_size_rtx, next_arg_reg,
282                                      n_pop);
283       else
284         pat = GEN_SIBCALL_POP (gen_rtx_MEM (FUNCTION_MODE, funexp),
285                                rounded_stack_size_rtx, next_arg_reg, n_pop);
286
287       emit_call_insn (pat);
288       already_popped = 1;
289     }
290   else
291 #endif
292
293 #if defined (HAVE_call_pop) && defined (HAVE_call_value_pop)
294   /* If the target has "call" or "call_value" insns, then prefer them
295      if no arguments are actually popped.  If the target does not have
296      "call" or "call_value" insns, then we must use the popping versions
297      even if the call has no arguments to pop.  */
298 #if defined (HAVE_call) && defined (HAVE_call_value)
299   if (HAVE_call && HAVE_call_value && HAVE_call_pop && HAVE_call_value_pop
300       && n_popped > 0 && ! (ecf_flags & ECF_SP_DEPRESSED))
301 #else
302   if (HAVE_call_pop && HAVE_call_value_pop)
303 #endif
304     {
305       rtx n_pop = GEN_INT (n_popped);
306       rtx pat;
307
308       /* If this subroutine pops its own args, record that in the call insn
309          if possible, for the sake of frame pointer elimination.  */
310
311       if (valreg)
312         pat = GEN_CALL_VALUE_POP (valreg,
313                                   gen_rtx_MEM (FUNCTION_MODE, funexp),
314                                   rounded_stack_size_rtx, next_arg_reg, n_pop);
315       else
316         pat = GEN_CALL_POP (gen_rtx_MEM (FUNCTION_MODE, funexp),
317                             rounded_stack_size_rtx, next_arg_reg, n_pop);
318
319       emit_call_insn (pat);
320       already_popped = 1;
321     }
322   else
323 #endif
324
325 #if defined (HAVE_sibcall) && defined (HAVE_sibcall_value)
326   if ((ecf_flags & ECF_SIBCALL)
327       && HAVE_sibcall && HAVE_sibcall_value)
328     {
329       if (valreg)
330         emit_call_insn (GEN_SIBCALL_VALUE (valreg,
331                                            gen_rtx_MEM (FUNCTION_MODE, funexp),
332                                            rounded_stack_size_rtx,
333                                            next_arg_reg, NULL_RTX));
334       else
335         emit_call_insn (GEN_SIBCALL (gen_rtx_MEM (FUNCTION_MODE, funexp),
336                                      rounded_stack_size_rtx, next_arg_reg,
337                                      struct_value_size_rtx));
338     }
339   else
340 #endif
341
342 #if defined (HAVE_call) && defined (HAVE_call_value)
343   if (HAVE_call && HAVE_call_value)
344     {
345       if (valreg)
346         emit_call_insn (GEN_CALL_VALUE (valreg,
347                                         gen_rtx_MEM (FUNCTION_MODE, funexp),
348                                         rounded_stack_size_rtx, next_arg_reg,
349                                         NULL_RTX));
350       else
351         emit_call_insn (GEN_CALL (gen_rtx_MEM (FUNCTION_MODE, funexp),
352                                   rounded_stack_size_rtx, next_arg_reg,
353                                   struct_value_size_rtx));
354     }
355   else
356 #endif
357     gcc_unreachable ();
358
359   /* Find the call we just emitted.  */
360   call_insn = last_call_insn ();
361
362   /* Mark memory as used for "pure" function call.  */
363   if (ecf_flags & ECF_PURE)
364     call_fusage
365       = gen_rtx_EXPR_LIST
366         (VOIDmode,
367          gen_rtx_USE (VOIDmode,
368                       gen_rtx_MEM (BLKmode, gen_rtx_SCRATCH (VOIDmode))),
369          call_fusage);
370
371   /* Put the register usage information there.  */
372   add_function_usage_to (call_insn, call_fusage);
373
374   /* If this is a const call, then set the insn's unchanging bit.  */
375   if (ecf_flags & (ECF_CONST | ECF_PURE))
376     CONST_OR_PURE_CALL_P (call_insn) = 1;
377
378   /* If this call can't throw, attach a REG_EH_REGION reg note to that
379      effect.  */
380   if (ecf_flags & ECF_NOTHROW)
381     REG_NOTES (call_insn) = gen_rtx_EXPR_LIST (REG_EH_REGION, const0_rtx,
382                                                REG_NOTES (call_insn));
383   else
384     {
385       int rn = lookup_stmt_eh_region (fntree);
386
387       /* If rn < 0, then either (1) tree-ssa not used or (2) doesn't
388          throw, which we already took care of.  */
389       if (rn > 0)
390         REG_NOTES (call_insn) = gen_rtx_EXPR_LIST (REG_EH_REGION, GEN_INT (rn),
391                                                    REG_NOTES (call_insn));
392       note_current_region_may_contain_throw ();
393     }
394
395   if (ecf_flags & ECF_NORETURN)
396     REG_NOTES (call_insn) = gen_rtx_EXPR_LIST (REG_NORETURN, const0_rtx,
397                                                REG_NOTES (call_insn));
398
399   if (ecf_flags & ECF_RETURNS_TWICE)
400     {
401       REG_NOTES (call_insn) = gen_rtx_EXPR_LIST (REG_SETJMP, const0_rtx,
402                                                  REG_NOTES (call_insn));
403       current_function_calls_setjmp = 1;
404     }
405
406   SIBLING_CALL_P (call_insn) = ((ecf_flags & ECF_SIBCALL) != 0);
407
408   /* Restore this now, so that we do defer pops for this call's args
409      if the context of the call as a whole permits.  */
410   inhibit_defer_pop = old_inhibit_defer_pop;
411
412   if (n_popped > 0)
413     {
414       if (!already_popped)
415         CALL_INSN_FUNCTION_USAGE (call_insn)
416           = gen_rtx_EXPR_LIST (VOIDmode,
417                                gen_rtx_CLOBBER (VOIDmode, stack_pointer_rtx),
418                                CALL_INSN_FUNCTION_USAGE (call_insn));
419       rounded_stack_size -= n_popped;
420       rounded_stack_size_rtx = GEN_INT (rounded_stack_size);
421       stack_pointer_delta -= n_popped;
422     }
423
424   if (!ACCUMULATE_OUTGOING_ARGS)
425     {
426       /* If returning from the subroutine does not automatically pop the args,
427          we need an instruction to pop them sooner or later.
428          Perhaps do it now; perhaps just record how much space to pop later.
429
430          If returning from the subroutine does pop the args, indicate that the
431          stack pointer will be changed.  */
432
433       if (rounded_stack_size != 0)
434         {
435           if (ecf_flags & (ECF_SP_DEPRESSED | ECF_NORETURN))
436             /* Just pretend we did the pop.  */
437             stack_pointer_delta -= rounded_stack_size;
438           else if (flag_defer_pop && inhibit_defer_pop == 0
439               && ! (ecf_flags & (ECF_CONST | ECF_PURE)))
440             pending_stack_adjust += rounded_stack_size;
441           else
442             adjust_stack (rounded_stack_size_rtx);
443         }
444     }
445   /* When we accumulate outgoing args, we must avoid any stack manipulations.
446      Restore the stack pointer to its original value now.  Usually
447      ACCUMULATE_OUTGOING_ARGS targets don't get here, but there are exceptions.
448      On  i386 ACCUMULATE_OUTGOING_ARGS can be enabled on demand, and
449      popping variants of functions exist as well.
450
451      ??? We may optimize similar to defer_pop above, but it is
452      probably not worthwhile.
453
454      ??? It will be worthwhile to enable combine_stack_adjustments even for
455      such machines.  */
456   else if (n_popped)
457     anti_adjust_stack (GEN_INT (n_popped));
458 }
459
460 /* Determine if the function identified by NAME and FNDECL is one with
461    special properties we wish to know about.
462
463    For example, if the function might return more than one time (setjmp), then
464    set RETURNS_TWICE to a nonzero value.
465
466    Similarly set NORETURN if the function is in the longjmp family.
467
468    Set MAY_BE_ALLOCA for any memory allocation function that might allocate
469    space from the stack such as alloca.  */
470
471 static int
472 special_function_p (tree fndecl, int flags)
473 {
474   if (fndecl && DECL_NAME (fndecl)
475       && IDENTIFIER_LENGTH (DECL_NAME (fndecl)) <= 17
476       /* Exclude functions not at the file scope, or not `extern',
477          since they are not the magic functions we would otherwise
478          think they are.
479          FIXME: this should be handled with attributes, not with this
480          hacky imitation of DECL_ASSEMBLER_NAME.  It's (also) wrong
481          because you can declare fork() inside a function if you
482          wish.  */
483       && (DECL_CONTEXT (fndecl) == NULL_TREE
484           || TREE_CODE (DECL_CONTEXT (fndecl)) == TRANSLATION_UNIT_DECL)
485       && TREE_PUBLIC (fndecl))
486     {
487       const char *name = IDENTIFIER_POINTER (DECL_NAME (fndecl));
488       const char *tname = name;
489
490       /* We assume that alloca will always be called by name.  It
491          makes no sense to pass it as a pointer-to-function to
492          anything that does not understand its behavior.  */
493       if (((IDENTIFIER_LENGTH (DECL_NAME (fndecl)) == 6
494             && name[0] == 'a'
495             && ! strcmp (name, "alloca"))
496            || (IDENTIFIER_LENGTH (DECL_NAME (fndecl)) == 16
497                && name[0] == '_'
498                && ! strcmp (name, "__builtin_alloca"))))
499         flags |= ECF_MAY_BE_ALLOCA;
500
501       /* Disregard prefix _, __ or __x.  */
502       if (name[0] == '_')
503         {
504           if (name[1] == '_' && name[2] == 'x')
505             tname += 3;
506           else if (name[1] == '_')
507             tname += 2;
508           else
509             tname += 1;
510         }
511
512       if (tname[0] == 's')
513         {
514           if ((tname[1] == 'e'
515                && (! strcmp (tname, "setjmp")
516                    || ! strcmp (tname, "setjmp_syscall")))
517               || (tname[1] == 'i'
518                   && ! strcmp (tname, "sigsetjmp"))
519               || (tname[1] == 'a'
520                   && ! strcmp (tname, "savectx")))
521             flags |= ECF_RETURNS_TWICE;
522
523           if (tname[1] == 'i'
524               && ! strcmp (tname, "siglongjmp"))
525             flags |= ECF_NORETURN;
526         }
527       else if ((tname[0] == 'q' && tname[1] == 's'
528                 && ! strcmp (tname, "qsetjmp"))
529                || (tname[0] == 'v' && tname[1] == 'f'
530                    && ! strcmp (tname, "vfork"))
531                || (tname[0] == 'g' && tname[1] == 'e'
532                    && !strcmp (tname, "getcontext")))
533         flags |= ECF_RETURNS_TWICE;
534
535       else if (tname[0] == 'l' && tname[1] == 'o'
536                && ! strcmp (tname, "longjmp"))
537         flags |= ECF_NORETURN;
538     }
539
540   return flags;
541 }
542
543 /* Return nonzero when FNDECL represents a call to setjmp.  */
544
545 int
546 setjmp_call_p (tree fndecl)
547 {
548   return special_function_p (fndecl, 0) & ECF_RETURNS_TWICE;
549 }
550
551 /* Return true when exp contains alloca call.  */
552 bool
553 alloca_call_p (tree exp)
554 {
555   if (TREE_CODE (exp) == CALL_EXPR
556       && TREE_CODE (TREE_OPERAND (exp, 0)) == ADDR_EXPR
557       && (TREE_CODE (TREE_OPERAND (TREE_OPERAND (exp, 0), 0))
558           == FUNCTION_DECL)
559       && (special_function_p (TREE_OPERAND (TREE_OPERAND (exp, 0), 0),
560                               0) & ECF_MAY_BE_ALLOCA))
561     return true;
562   return false;
563 }
564
565 /* Detect flags (function attributes) from the function decl or type node.  */
566
567 int
568 flags_from_decl_or_type (tree exp)
569 {
570   int flags = 0;
571   tree type = exp;
572
573   if (DECL_P (exp))
574     {
575       type = TREE_TYPE (exp);
576
577       /* The function exp may have the `malloc' attribute.  */
578       if (DECL_IS_MALLOC (exp))
579         flags |= ECF_MALLOC;
580
581       /* The function exp may have the `returns_twice' attribute.  */
582       if (DECL_IS_RETURNS_TWICE (exp))
583         flags |= ECF_RETURNS_TWICE;
584
585       /* The function exp may have the `pure' attribute.  */
586       if (DECL_IS_PURE (exp))
587         flags |= ECF_PURE;
588
589       if (DECL_IS_NOVOPS (exp))
590         flags |= ECF_NOVOPS;
591
592       if (TREE_NOTHROW (exp))
593         flags |= ECF_NOTHROW;
594
595       if (TREE_READONLY (exp) && ! TREE_THIS_VOLATILE (exp))
596         flags |= ECF_CONST;
597
598       flags = special_function_p (exp, flags);
599     }
600   else if (TYPE_P (exp) && TYPE_READONLY (exp) && ! TREE_THIS_VOLATILE (exp))
601     flags |= ECF_CONST;
602
603   if (TREE_THIS_VOLATILE (exp))
604     flags |= ECF_NORETURN;
605
606   /* Mark if the function returns with the stack pointer depressed.   We
607      cannot consider it pure or constant in that case.  */
608   if (TREE_CODE (type) == FUNCTION_TYPE && TYPE_RETURNS_STACK_DEPRESSED (type))
609     {
610       flags |= ECF_SP_DEPRESSED;
611       flags &= ~(ECF_PURE | ECF_CONST);
612     }
613
614   return flags;
615 }
616
617 /* Detect flags from a CALL_EXPR.  */
618
619 int
620 call_expr_flags (tree t)
621 {
622   int flags;
623   tree decl = get_callee_fndecl (t);
624
625   if (decl)
626     flags = flags_from_decl_or_type (decl);
627   else
628     {
629       t = TREE_TYPE (TREE_OPERAND (t, 0));
630       if (t && TREE_CODE (t) == POINTER_TYPE)
631         flags = flags_from_decl_or_type (TREE_TYPE (t));
632       else
633         flags = 0;
634     }
635
636   return flags;
637 }
638
639 /* Precompute all register parameters as described by ARGS, storing values
640    into fields within the ARGS array.
641
642    NUM_ACTUALS indicates the total number elements in the ARGS array.
643
644    Set REG_PARM_SEEN if we encounter a register parameter.  */
645
646 static void
647 precompute_register_parameters (int num_actuals, struct arg_data *args,
648                                 int *reg_parm_seen)
649 {
650   int i;
651
652   *reg_parm_seen = 0;
653
654   for (i = 0; i < num_actuals; i++)
655     if (args[i].reg != 0 && ! args[i].pass_on_stack)
656       {
657         *reg_parm_seen = 1;
658
659         if (args[i].value == 0)
660           {
661             push_temp_slots ();
662             args[i].value = expand_normal (args[i].tree_value);
663             preserve_temp_slots (args[i].value);
664             pop_temp_slots ();
665           }
666
667         /* If the value is a non-legitimate constant, force it into a
668            pseudo now.  TLS symbols sometimes need a call to resolve.  */
669         if (CONSTANT_P (args[i].value)
670             && !LEGITIMATE_CONSTANT_P (args[i].value))
671           args[i].value = force_reg (args[i].mode, args[i].value);
672
673         /* If we are to promote the function arg to a wider mode,
674            do it now.  */
675
676         if (args[i].mode != TYPE_MODE (TREE_TYPE (args[i].tree_value)))
677           args[i].value
678             = convert_modes (args[i].mode,
679                              TYPE_MODE (TREE_TYPE (args[i].tree_value)),
680                              args[i].value, args[i].unsignedp);
681
682         /* If we're going to have to load the value by parts, pull the
683            parts into pseudos.  The part extraction process can involve
684            non-trivial computation.  */
685         if (GET_CODE (args[i].reg) == PARALLEL)
686           {
687             tree type = TREE_TYPE (args[i].tree_value);
688             args[i].parallel_value
689               = emit_group_load_into_temps (args[i].reg, args[i].value,
690                                             type, int_size_in_bytes (type));
691           }
692
693         /* If the value is expensive, and we are inside an appropriately
694            short loop, put the value into a pseudo and then put the pseudo
695            into the hard reg.
696
697            For small register classes, also do this if this call uses
698            register parameters.  This is to avoid reload conflicts while
699            loading the parameters registers.  */
700
701         else if ((! (REG_P (args[i].value)
702                      || (GET_CODE (args[i].value) == SUBREG
703                          && REG_P (SUBREG_REG (args[i].value)))))
704                  && args[i].mode != BLKmode
705                  && rtx_cost (args[i].value, SET) > COSTS_N_INSNS (1)
706                  && ((SMALL_REGISTER_CLASSES && *reg_parm_seen)
707                      || optimize))
708           args[i].value = copy_to_mode_reg (args[i].mode, args[i].value);
709       }
710 }
711
712 #ifdef REG_PARM_STACK_SPACE
713
714   /* The argument list is the property of the called routine and it
715      may clobber it.  If the fixed area has been used for previous
716      parameters, we must save and restore it.  */
717
718 static rtx
719 save_fixed_argument_area (int reg_parm_stack_space, rtx argblock, int *low_to_save, int *high_to_save)
720 {
721   int low;
722   int high;
723
724   /* Compute the boundary of the area that needs to be saved, if any.  */
725   high = reg_parm_stack_space;
726 #ifdef ARGS_GROW_DOWNWARD
727   high += 1;
728 #endif
729   if (high > highest_outgoing_arg_in_use)
730     high = highest_outgoing_arg_in_use;
731
732   for (low = 0; low < high; low++)
733     if (stack_usage_map[low] != 0)
734       {
735         int num_to_save;
736         enum machine_mode save_mode;
737         int delta;
738         rtx stack_area;
739         rtx save_area;
740
741         while (stack_usage_map[--high] == 0)
742           ;
743
744         *low_to_save = low;
745         *high_to_save = high;
746
747         num_to_save = high - low + 1;
748         save_mode = mode_for_size (num_to_save * BITS_PER_UNIT, MODE_INT, 1);
749
750         /* If we don't have the required alignment, must do this
751            in BLKmode.  */
752         if ((low & (MIN (GET_MODE_SIZE (save_mode),
753                          BIGGEST_ALIGNMENT / UNITS_PER_WORD) - 1)))
754           save_mode = BLKmode;
755
756 #ifdef ARGS_GROW_DOWNWARD
757         delta = -high;
758 #else
759         delta = low;
760 #endif
761         stack_area = gen_rtx_MEM (save_mode,
762                                   memory_address (save_mode,
763                                                   plus_constant (argblock,
764                                                                  delta)));
765
766         set_mem_align (stack_area, PARM_BOUNDARY);
767         if (save_mode == BLKmode)
768           {
769             save_area = assign_stack_temp (BLKmode, num_to_save, 0);
770             emit_block_move (validize_mem (save_area), stack_area,
771                              GEN_INT (num_to_save), BLOCK_OP_CALL_PARM);
772           }
773         else
774           {
775             save_area = gen_reg_rtx (save_mode);
776             emit_move_insn (save_area, stack_area);
777           }
778
779         return save_area;
780       }
781
782   return NULL_RTX;
783 }
784
785 static void
786 restore_fixed_argument_area (rtx save_area, rtx argblock, int high_to_save, int low_to_save)
787 {
788   enum machine_mode save_mode = GET_MODE (save_area);
789   int delta;
790   rtx stack_area;
791
792 #ifdef ARGS_GROW_DOWNWARD
793   delta = -high_to_save;
794 #else
795   delta = low_to_save;
796 #endif
797   stack_area = gen_rtx_MEM (save_mode,
798                             memory_address (save_mode,
799                                             plus_constant (argblock, delta)));
800   set_mem_align (stack_area, PARM_BOUNDARY);
801
802   if (save_mode != BLKmode)
803     emit_move_insn (stack_area, save_area);
804   else
805     emit_block_move (stack_area, validize_mem (save_area),
806                      GEN_INT (high_to_save - low_to_save + 1),
807                      BLOCK_OP_CALL_PARM);
808 }
809 #endif /* REG_PARM_STACK_SPACE */
810
811 /* If any elements in ARGS refer to parameters that are to be passed in
812    registers, but not in memory, and whose alignment does not permit a
813    direct copy into registers.  Copy the values into a group of pseudos
814    which we will later copy into the appropriate hard registers.
815
816    Pseudos for each unaligned argument will be stored into the array
817    args[argnum].aligned_regs.  The caller is responsible for deallocating
818    the aligned_regs array if it is nonzero.  */
819
820 static void
821 store_unaligned_arguments_into_pseudos (struct arg_data *args, int num_actuals)
822 {
823   int i, j;
824
825   for (i = 0; i < num_actuals; i++)
826     if (args[i].reg != 0 && ! args[i].pass_on_stack
827         && args[i].mode == BLKmode
828         && (TYPE_ALIGN (TREE_TYPE (args[i].tree_value))
829             < (unsigned int) MIN (BIGGEST_ALIGNMENT, BITS_PER_WORD)))
830       {
831         int bytes = int_size_in_bytes (TREE_TYPE (args[i].tree_value));
832         int endian_correction = 0;
833
834         if (args[i].partial)
835           {
836             gcc_assert (args[i].partial % UNITS_PER_WORD == 0);
837             args[i].n_aligned_regs = args[i].partial / UNITS_PER_WORD;
838           }
839         else
840           {
841             args[i].n_aligned_regs
842               = (bytes + UNITS_PER_WORD - 1) / UNITS_PER_WORD;
843           }
844
845         args[i].aligned_regs = XNEWVEC (rtx, args[i].n_aligned_regs);
846
847         /* Structures smaller than a word are normally aligned to the
848            least significant byte.  On a BYTES_BIG_ENDIAN machine,
849            this means we must skip the empty high order bytes when
850            calculating the bit offset.  */
851         if (bytes < UNITS_PER_WORD
852 #ifdef BLOCK_REG_PADDING
853             && (BLOCK_REG_PADDING (args[i].mode,
854                                    TREE_TYPE (args[i].tree_value), 1)
855                 == downward)
856 #else
857             && BYTES_BIG_ENDIAN
858 #endif
859             )
860           endian_correction = BITS_PER_WORD - bytes * BITS_PER_UNIT;
861
862         for (j = 0; j < args[i].n_aligned_regs; j++)
863           {
864             rtx reg = gen_reg_rtx (word_mode);
865             rtx word = operand_subword_force (args[i].value, j, BLKmode);
866             int bitsize = MIN (bytes * BITS_PER_UNIT, BITS_PER_WORD);
867
868             args[i].aligned_regs[j] = reg;
869             word = extract_bit_field (word, bitsize, 0, 1, NULL_RTX,
870                                       word_mode, word_mode);
871
872             /* There is no need to restrict this code to loading items
873                in TYPE_ALIGN sized hunks.  The bitfield instructions can
874                load up entire word sized registers efficiently.
875
876                ??? This may not be needed anymore.
877                We use to emit a clobber here but that doesn't let later
878                passes optimize the instructions we emit.  By storing 0 into
879                the register later passes know the first AND to zero out the
880                bitfield being set in the register is unnecessary.  The store
881                of 0 will be deleted as will at least the first AND.  */
882
883             emit_move_insn (reg, const0_rtx);
884
885             bytes -= bitsize / BITS_PER_UNIT;
886             store_bit_field (reg, bitsize, endian_correction, word_mode,
887                              word);
888           }
889       }
890 }
891
892 /* Fill in ARGS_SIZE and ARGS array based on the parameters found in
893    ACTPARMS.
894
895    NUM_ACTUALS is the total number of parameters.
896
897    N_NAMED_ARGS is the total number of named arguments.
898
899    FNDECL is the tree code for the target of this call (if known)
900
901    ARGS_SO_FAR holds state needed by the target to know where to place
902    the next argument.
903
904    REG_PARM_STACK_SPACE is the number of bytes of stack space reserved
905    for arguments which are passed in registers.
906
907    OLD_STACK_LEVEL is a pointer to an rtx which olds the old stack level
908    and may be modified by this routine.
909
910    OLD_PENDING_ADJ, MUST_PREALLOCATE and FLAGS are pointers to integer
911    flags which may may be modified by this routine.
912
913    MAY_TAILCALL is cleared if we encounter an invisible pass-by-reference
914    that requires allocation of stack space.
915
916    CALL_FROM_THUNK_P is true if this call is the jump from a thunk to
917    the thunked-to function.  */
918
919 static void
920 initialize_argument_information (int num_actuals ATTRIBUTE_UNUSED,
921                                  struct arg_data *args,
922                                  struct args_size *args_size,
923                                  int n_named_args ATTRIBUTE_UNUSED,
924                                  tree actparms, tree fndecl,
925                                  CUMULATIVE_ARGS *args_so_far,
926                                  int reg_parm_stack_space,
927                                  rtx *old_stack_level, int *old_pending_adj,
928                                  int *must_preallocate, int *ecf_flags,
929                                  bool *may_tailcall, bool call_from_thunk_p)
930 {
931   /* 1 if scanning parms front to back, -1 if scanning back to front.  */
932   int inc;
933
934   /* Count arg position in order args appear.  */
935   int argpos;
936
937   int i;
938   tree p;
939
940   args_size->constant = 0;
941   args_size->var = 0;
942
943   /* In this loop, we consider args in the order they are written.
944      We fill up ARGS from the front or from the back if necessary
945      so that in any case the first arg to be pushed ends up at the front.  */
946
947   if (PUSH_ARGS_REVERSED)
948     {
949       i = num_actuals - 1, inc = -1;
950       /* In this case, must reverse order of args
951          so that we compute and push the last arg first.  */
952     }
953   else
954     {
955       i = 0, inc = 1;
956     }
957
958   /* I counts args in order (to be) pushed; ARGPOS counts in order written.  */
959   for (p = actparms, argpos = 0; p; p = TREE_CHAIN (p), i += inc, argpos++)
960     {
961       tree type = TREE_TYPE (TREE_VALUE (p));
962       int unsignedp;
963       enum machine_mode mode;
964
965       args[i].tree_value = TREE_VALUE (p);
966
967       /* Replace erroneous argument with constant zero.  */
968       if (type == error_mark_node || !COMPLETE_TYPE_P (type))
969         args[i].tree_value = integer_zero_node, type = integer_type_node;
970
971       /* If TYPE is a transparent union, pass things the way we would
972          pass the first field of the union.  We have already verified that
973          the modes are the same.  */
974       if (TREE_CODE (type) == UNION_TYPE && TYPE_TRANSPARENT_UNION (type))
975         type = TREE_TYPE (TYPE_FIELDS (type));
976
977       /* Decide where to pass this arg.
978
979          args[i].reg is nonzero if all or part is passed in registers.
980
981          args[i].partial is nonzero if part but not all is passed in registers,
982          and the exact value says how many bytes are passed in registers.
983
984          args[i].pass_on_stack is nonzero if the argument must at least be
985          computed on the stack.  It may then be loaded back into registers
986          if args[i].reg is nonzero.
987
988          These decisions are driven by the FUNCTION_... macros and must agree
989          with those made by function.c.  */
990
991       /* See if this argument should be passed by invisible reference.  */
992       if (pass_by_reference (args_so_far, TYPE_MODE (type),
993                              type, argpos < n_named_args))
994         {
995           bool callee_copies;
996           tree base;
997
998           callee_copies
999             = reference_callee_copied (args_so_far, TYPE_MODE (type),
1000                                        type, argpos < n_named_args);
1001
1002           /* If we're compiling a thunk, pass through invisible references
1003              instead of making a copy.  */
1004           if (call_from_thunk_p
1005               || (callee_copies
1006                   && !TREE_ADDRESSABLE (type)
1007                   && (base = get_base_address (args[i].tree_value))
1008                   && (!DECL_P (base) || MEM_P (DECL_RTL (base)))))
1009             {
1010               /* We can't use sibcalls if a callee-copied argument is
1011                  stored in the current function's frame.  */
1012               if (!call_from_thunk_p && DECL_P (base) && !TREE_STATIC (base))
1013                 *may_tailcall = false;
1014
1015               args[i].tree_value = build_fold_addr_expr (args[i].tree_value);
1016               type = TREE_TYPE (args[i].tree_value);
1017
1018               *ecf_flags &= ~(ECF_CONST | ECF_LIBCALL_BLOCK);
1019             }
1020           else
1021             {
1022               /* We make a copy of the object and pass the address to the
1023                  function being called.  */
1024               rtx copy;
1025
1026               if (!COMPLETE_TYPE_P (type)
1027                   || TREE_CODE (TYPE_SIZE (type)) != INTEGER_CST
1028                   || (flag_stack_check && ! STACK_CHECK_BUILTIN
1029                       && (0 < compare_tree_int (TYPE_SIZE_UNIT (type),
1030                                                 STACK_CHECK_MAX_VAR_SIZE))))
1031                 {
1032                   /* This is a variable-sized object.  Make space on the stack
1033                      for it.  */
1034                   rtx size_rtx = expr_size (TREE_VALUE (p));
1035
1036                   if (*old_stack_level == 0)
1037                     {
1038                       emit_stack_save (SAVE_BLOCK, old_stack_level, NULL_RTX);
1039                       *old_pending_adj = pending_stack_adjust;
1040                       pending_stack_adjust = 0;
1041                     }
1042
1043                   copy = gen_rtx_MEM (BLKmode,
1044                                       allocate_dynamic_stack_space
1045                                       (size_rtx, NULL_RTX, TYPE_ALIGN (type)));
1046                   set_mem_attributes (copy, type, 1);
1047                 }
1048               else
1049                 copy = assign_temp (type, 0, 1, 0);
1050
1051               store_expr (args[i].tree_value, copy, 0);
1052
1053               if (callee_copies)
1054                 *ecf_flags &= ~(ECF_CONST | ECF_LIBCALL_BLOCK);
1055               else
1056                 *ecf_flags &= ~(ECF_CONST | ECF_PURE | ECF_LIBCALL_BLOCK);
1057
1058               args[i].tree_value
1059                 = build_fold_addr_expr (make_tree (type, copy));
1060               type = TREE_TYPE (args[i].tree_value);
1061               *may_tailcall = false;
1062             }
1063         }
1064
1065       mode = TYPE_MODE (type);
1066       unsignedp = TYPE_UNSIGNED (type);
1067
1068       if (targetm.calls.promote_function_args (fndecl ? TREE_TYPE (fndecl) : 0))
1069         mode = promote_mode (type, mode, &unsignedp, 1);
1070
1071       args[i].unsignedp = unsignedp;
1072       args[i].mode = mode;
1073
1074       args[i].reg = FUNCTION_ARG (*args_so_far, mode, type,
1075                                   argpos < n_named_args);
1076 #ifdef FUNCTION_INCOMING_ARG
1077       /* If this is a sibling call and the machine has register windows, the
1078          register window has to be unwinded before calling the routine, so
1079          arguments have to go into the incoming registers.  */
1080       args[i].tail_call_reg = FUNCTION_INCOMING_ARG (*args_so_far, mode, type,
1081                                                      argpos < n_named_args);
1082 #else
1083       args[i].tail_call_reg = args[i].reg;
1084 #endif
1085
1086       if (args[i].reg)
1087         args[i].partial
1088           = targetm.calls.arg_partial_bytes (args_so_far, mode, type,
1089                                              argpos < n_named_args);
1090
1091       args[i].pass_on_stack = targetm.calls.must_pass_in_stack (mode, type);
1092
1093       /* If FUNCTION_ARG returned a (parallel [(expr_list (nil) ...) ...]),
1094          it means that we are to pass this arg in the register(s) designated
1095          by the PARALLEL, but also to pass it in the stack.  */
1096       if (args[i].reg && GET_CODE (args[i].reg) == PARALLEL
1097           && XEXP (XVECEXP (args[i].reg, 0, 0), 0) == 0)
1098         args[i].pass_on_stack = 1;
1099
1100       /* If this is an addressable type, we must preallocate the stack
1101          since we must evaluate the object into its final location.
1102
1103          If this is to be passed in both registers and the stack, it is simpler
1104          to preallocate.  */
1105       if (TREE_ADDRESSABLE (type)
1106           || (args[i].pass_on_stack && args[i].reg != 0))
1107         *must_preallocate = 1;
1108
1109       /* If this is an addressable type, we cannot pre-evaluate it.  Thus,
1110          we cannot consider this function call constant.  */
1111       if (TREE_ADDRESSABLE (type))
1112         *ecf_flags &= ~ECF_LIBCALL_BLOCK;
1113
1114       /* Compute the stack-size of this argument.  */
1115       if (args[i].reg == 0 || args[i].partial != 0
1116           || reg_parm_stack_space > 0
1117           || args[i].pass_on_stack)
1118         locate_and_pad_parm (mode, type,
1119 #ifdef STACK_PARMS_IN_REG_PARM_AREA
1120                              1,
1121 #else
1122                              args[i].reg != 0,
1123 #endif
1124                              args[i].pass_on_stack ? 0 : args[i].partial,
1125                              fndecl, args_size, &args[i].locate);
1126 #ifdef BLOCK_REG_PADDING
1127       else
1128         /* The argument is passed entirely in registers.  See at which
1129            end it should be padded.  */
1130         args[i].locate.where_pad =
1131           BLOCK_REG_PADDING (mode, type,
1132                              int_size_in_bytes (type) <= UNITS_PER_WORD);
1133 #endif
1134
1135       /* Update ARGS_SIZE, the total stack space for args so far.  */
1136
1137       args_size->constant += args[i].locate.size.constant;
1138       if (args[i].locate.size.var)
1139         ADD_PARM_SIZE (*args_size, args[i].locate.size.var);
1140
1141       /* Increment ARGS_SO_FAR, which has info about which arg-registers
1142          have been used, etc.  */
1143
1144       FUNCTION_ARG_ADVANCE (*args_so_far, TYPE_MODE (type), type,
1145                             argpos < n_named_args);
1146     }
1147 }
1148
1149 /* Update ARGS_SIZE to contain the total size for the argument block.
1150    Return the original constant component of the argument block's size.
1151
1152    REG_PARM_STACK_SPACE holds the number of bytes of stack space reserved
1153    for arguments passed in registers.  */
1154
1155 static int
1156 compute_argument_block_size (int reg_parm_stack_space,
1157                              struct args_size *args_size,
1158                              int preferred_stack_boundary ATTRIBUTE_UNUSED)
1159 {
1160   int unadjusted_args_size = args_size->constant;
1161
1162   /* For accumulate outgoing args mode we don't need to align, since the frame
1163      will be already aligned.  Align to STACK_BOUNDARY in order to prevent
1164      backends from generating misaligned frame sizes.  */
1165   if (ACCUMULATE_OUTGOING_ARGS && preferred_stack_boundary > STACK_BOUNDARY)
1166     preferred_stack_boundary = STACK_BOUNDARY;
1167
1168   /* Compute the actual size of the argument block required.  The variable
1169      and constant sizes must be combined, the size may have to be rounded,
1170      and there may be a minimum required size.  */
1171
1172   if (args_size->var)
1173     {
1174       args_size->var = ARGS_SIZE_TREE (*args_size);
1175       args_size->constant = 0;
1176
1177       preferred_stack_boundary /= BITS_PER_UNIT;
1178       if (preferred_stack_boundary > 1)
1179         {
1180           /* We don't handle this case yet.  To handle it correctly we have
1181              to add the delta, round and subtract the delta.
1182              Currently no machine description requires this support.  */
1183           gcc_assert (!(stack_pointer_delta & (preferred_stack_boundary - 1)));
1184           args_size->var = round_up (args_size->var, preferred_stack_boundary);
1185         }
1186
1187       if (reg_parm_stack_space > 0)
1188         {
1189           args_size->var
1190             = size_binop (MAX_EXPR, args_size->var,
1191                           ssize_int (reg_parm_stack_space));
1192
1193 #ifndef OUTGOING_REG_PARM_STACK_SPACE
1194           /* The area corresponding to register parameters is not to count in
1195              the size of the block we need.  So make the adjustment.  */
1196           args_size->var
1197             = size_binop (MINUS_EXPR, args_size->var,
1198                           ssize_int (reg_parm_stack_space));
1199 #endif
1200         }
1201     }
1202   else
1203     {
1204       preferred_stack_boundary /= BITS_PER_UNIT;
1205       if (preferred_stack_boundary < 1)
1206         preferred_stack_boundary = 1;
1207       args_size->constant = (((args_size->constant
1208                                + stack_pointer_delta
1209                                + preferred_stack_boundary - 1)
1210                               / preferred_stack_boundary
1211                               * preferred_stack_boundary)
1212                              - stack_pointer_delta);
1213
1214       args_size->constant = MAX (args_size->constant,
1215                                  reg_parm_stack_space);
1216
1217 #ifndef OUTGOING_REG_PARM_STACK_SPACE
1218       args_size->constant -= reg_parm_stack_space;
1219 #endif
1220     }
1221   return unadjusted_args_size;
1222 }
1223
1224 /* Precompute parameters as needed for a function call.
1225
1226    FLAGS is mask of ECF_* constants.
1227
1228    NUM_ACTUALS is the number of arguments.
1229
1230    ARGS is an array containing information for each argument; this
1231    routine fills in the INITIAL_VALUE and VALUE fields for each
1232    precomputed argument.  */
1233
1234 static void
1235 precompute_arguments (int flags, int num_actuals, struct arg_data *args)
1236 {
1237   int i;
1238
1239   /* If this is a libcall, then precompute all arguments so that we do not
1240      get extraneous instructions emitted as part of the libcall sequence.  */
1241   if ((flags & ECF_LIBCALL_BLOCK) == 0)
1242     return;
1243
1244   for (i = 0; i < num_actuals; i++)
1245     {
1246       enum machine_mode mode;
1247
1248       /* If this is an addressable type, we cannot pre-evaluate it.  */
1249       gcc_assert (!TREE_ADDRESSABLE (TREE_TYPE (args[i].tree_value)));
1250
1251       args[i].initial_value = args[i].value
1252         = expand_normal (args[i].tree_value);
1253
1254       mode = TYPE_MODE (TREE_TYPE (args[i].tree_value));
1255       if (mode != args[i].mode)
1256         {
1257           args[i].value
1258             = convert_modes (args[i].mode, mode,
1259                              args[i].value, args[i].unsignedp);
1260 #if defined(PROMOTE_FUNCTION_MODE) && !defined(PROMOTE_MODE)
1261           /* CSE will replace this only if it contains args[i].value
1262              pseudo, so convert it down to the declared mode using
1263              a SUBREG.  */
1264           if (REG_P (args[i].value)
1265               && GET_MODE_CLASS (args[i].mode) == MODE_INT)
1266             {
1267               args[i].initial_value
1268                 = gen_lowpart_SUBREG (mode, args[i].value);
1269               SUBREG_PROMOTED_VAR_P (args[i].initial_value) = 1;
1270               SUBREG_PROMOTED_UNSIGNED_SET (args[i].initial_value,
1271                                             args[i].unsignedp);
1272             }
1273 #endif
1274         }
1275     }
1276 }
1277
1278 /* Given the current state of MUST_PREALLOCATE and information about
1279    arguments to a function call in NUM_ACTUALS, ARGS and ARGS_SIZE,
1280    compute and return the final value for MUST_PREALLOCATE.  */
1281
1282 static int
1283 finalize_must_preallocate (int must_preallocate, int num_actuals, struct arg_data *args, struct args_size *args_size)
1284 {
1285   /* See if we have or want to preallocate stack space.
1286
1287      If we would have to push a partially-in-regs parm
1288      before other stack parms, preallocate stack space instead.
1289
1290      If the size of some parm is not a multiple of the required stack
1291      alignment, we must preallocate.
1292
1293      If the total size of arguments that would otherwise create a copy in
1294      a temporary (such as a CALL) is more than half the total argument list
1295      size, preallocation is faster.
1296
1297      Another reason to preallocate is if we have a machine (like the m88k)
1298      where stack alignment is required to be maintained between every
1299      pair of insns, not just when the call is made.  However, we assume here
1300      that such machines either do not have push insns (and hence preallocation
1301      would occur anyway) or the problem is taken care of with
1302      PUSH_ROUNDING.  */
1303
1304   if (! must_preallocate)
1305     {
1306       int partial_seen = 0;
1307       int copy_to_evaluate_size = 0;
1308       int i;
1309
1310       for (i = 0; i < num_actuals && ! must_preallocate; i++)
1311         {
1312           if (args[i].partial > 0 && ! args[i].pass_on_stack)
1313             partial_seen = 1;
1314           else if (partial_seen && args[i].reg == 0)
1315             must_preallocate = 1;
1316
1317           if (TYPE_MODE (TREE_TYPE (args[i].tree_value)) == BLKmode
1318               && (TREE_CODE (args[i].tree_value) == CALL_EXPR
1319                   || TREE_CODE (args[i].tree_value) == TARGET_EXPR
1320                   || TREE_CODE (args[i].tree_value) == COND_EXPR
1321                   || TREE_ADDRESSABLE (TREE_TYPE (args[i].tree_value))))
1322             copy_to_evaluate_size
1323               += int_size_in_bytes (TREE_TYPE (args[i].tree_value));
1324         }
1325
1326       if (copy_to_evaluate_size * 2 >= args_size->constant
1327           && args_size->constant > 0)
1328         must_preallocate = 1;
1329     }
1330   return must_preallocate;
1331 }
1332
1333 /* If we preallocated stack space, compute the address of each argument
1334    and store it into the ARGS array.
1335
1336    We need not ensure it is a valid memory address here; it will be
1337    validized when it is used.
1338
1339    ARGBLOCK is an rtx for the address of the outgoing arguments.  */
1340
1341 static void
1342 compute_argument_addresses (struct arg_data *args, rtx argblock, int num_actuals)
1343 {
1344   if (argblock)
1345     {
1346       rtx arg_reg = argblock;
1347       int i, arg_offset = 0;
1348
1349       if (GET_CODE (argblock) == PLUS)
1350         arg_reg = XEXP (argblock, 0), arg_offset = INTVAL (XEXP (argblock, 1));
1351
1352       for (i = 0; i < num_actuals; i++)
1353         {
1354           rtx offset = ARGS_SIZE_RTX (args[i].locate.offset);
1355           rtx slot_offset = ARGS_SIZE_RTX (args[i].locate.slot_offset);
1356           rtx addr;
1357           unsigned int align, boundary;
1358
1359           /* Skip this parm if it will not be passed on the stack.  */
1360           if (! args[i].pass_on_stack && args[i].reg != 0)
1361             continue;
1362
1363           if (GET_CODE (offset) == CONST_INT)
1364             addr = plus_constant (arg_reg, INTVAL (offset));
1365           else
1366             addr = gen_rtx_PLUS (Pmode, arg_reg, offset);
1367
1368           addr = plus_constant (addr, arg_offset);
1369           args[i].stack = gen_rtx_MEM (args[i].mode, addr);
1370           set_mem_attributes (args[i].stack,
1371                               TREE_TYPE (args[i].tree_value), 1);
1372           align = BITS_PER_UNIT;
1373           boundary = args[i].locate.boundary;
1374           if (args[i].locate.where_pad != downward)
1375             align = boundary;
1376           else if (GET_CODE (offset) == CONST_INT)
1377             {
1378               align = INTVAL (offset) * BITS_PER_UNIT | boundary;
1379               align = align & -align;
1380             }
1381           set_mem_align (args[i].stack, align);
1382
1383           if (GET_CODE (slot_offset) == CONST_INT)
1384             addr = plus_constant (arg_reg, INTVAL (slot_offset));
1385           else
1386             addr = gen_rtx_PLUS (Pmode, arg_reg, slot_offset);
1387
1388           addr = plus_constant (addr, arg_offset);
1389           args[i].stack_slot = gen_rtx_MEM (args[i].mode, addr);
1390           set_mem_attributes (args[i].stack_slot,
1391                               TREE_TYPE (args[i].tree_value), 1);
1392           set_mem_align (args[i].stack_slot, args[i].locate.boundary);
1393
1394           /* Function incoming arguments may overlap with sibling call
1395              outgoing arguments and we cannot allow reordering of reads
1396              from function arguments with stores to outgoing arguments
1397              of sibling calls.  */
1398           set_mem_alias_set (args[i].stack, 0);
1399           set_mem_alias_set (args[i].stack_slot, 0);
1400         }
1401     }
1402 }
1403
1404 /* Given a FNDECL and EXP, return an rtx suitable for use as a target address
1405    in a call instruction.
1406
1407    FNDECL is the tree node for the target function.  For an indirect call
1408    FNDECL will be NULL_TREE.
1409
1410    ADDR is the operand 0 of CALL_EXPR for this call.  */
1411
1412 static rtx
1413 rtx_for_function_call (tree fndecl, tree addr)
1414 {
1415   rtx funexp;
1416
1417   /* Get the function to call, in the form of RTL.  */
1418   if (fndecl)
1419     {
1420       /* If this is the first use of the function, see if we need to
1421          make an external definition for it.  */
1422       if (! TREE_USED (fndecl))
1423         {
1424           assemble_external (fndecl);
1425           TREE_USED (fndecl) = 1;
1426         }
1427
1428       /* Get a SYMBOL_REF rtx for the function address.  */
1429       funexp = XEXP (DECL_RTL (fndecl), 0);
1430     }
1431   else
1432     /* Generate an rtx (probably a pseudo-register) for the address.  */
1433     {
1434       push_temp_slots ();
1435       funexp = expand_normal (addr);
1436       pop_temp_slots ();        /* FUNEXP can't be BLKmode.  */
1437     }
1438   return funexp;
1439 }
1440
1441 /* Return true if and only if SIZE storage units (usually bytes)
1442    starting from address ADDR overlap with already clobbered argument
1443    area.  This function is used to determine if we should give up a
1444    sibcall.  */
1445
1446 static bool
1447 mem_overlaps_already_clobbered_arg_p (rtx addr, unsigned HOST_WIDE_INT size)
1448 {
1449   HOST_WIDE_INT i;
1450
1451   if (addr == current_function_internal_arg_pointer)
1452     i = 0;
1453   else if (GET_CODE (addr) == PLUS
1454            && (XEXP (addr, 0)
1455                == current_function_internal_arg_pointer)
1456            && GET_CODE (XEXP (addr, 1)) == CONST_INT)
1457     i = INTVAL (XEXP (addr, 1));
1458   else
1459     return false;
1460
1461 #ifdef ARGS_GROW_DOWNWARD
1462   i = -i - size;
1463 #endif
1464   if (size > 0)
1465     {
1466       unsigned HOST_WIDE_INT k;
1467
1468       for (k = 0; k < size; k++)
1469         if (i + k < stored_args_map->n_bits
1470             && TEST_BIT (stored_args_map, i + k))
1471           return true;
1472     }
1473
1474   return false;
1475 }
1476
1477 /* Do the register loads required for any wholly-register parms or any
1478    parms which are passed both on the stack and in a register.  Their
1479    expressions were already evaluated.
1480
1481    Mark all register-parms as living through the call, putting these USE
1482    insns in the CALL_INSN_FUNCTION_USAGE field.
1483
1484    When IS_SIBCALL, perform the check_sibcall_argument_overlap
1485    checking, setting *SIBCALL_FAILURE if appropriate.  */
1486
1487 static void
1488 load_register_parameters (struct arg_data *args, int num_actuals,
1489                           rtx *call_fusage, int flags, int is_sibcall,
1490                           int *sibcall_failure)
1491 {
1492   int i, j;
1493
1494   for (i = 0; i < num_actuals; i++)
1495     {
1496       rtx reg = ((flags & ECF_SIBCALL)
1497                  ? args[i].tail_call_reg : args[i].reg);
1498       if (reg)
1499         {
1500           int partial = args[i].partial;
1501           int nregs;
1502           int size = 0;
1503           rtx before_arg = get_last_insn ();
1504           /* Set non-negative if we must move a word at a time, even if
1505              just one word (e.g, partial == 4 && mode == DFmode).  Set
1506              to -1 if we just use a normal move insn.  This value can be
1507              zero if the argument is a zero size structure.  */
1508           nregs = -1;
1509           if (GET_CODE (reg) == PARALLEL)
1510             ;
1511           else if (partial)
1512             {
1513               gcc_assert (partial % UNITS_PER_WORD == 0);
1514               nregs = partial / UNITS_PER_WORD;
1515             }
1516           else if (TYPE_MODE (TREE_TYPE (args[i].tree_value)) == BLKmode)
1517             {
1518               size = int_size_in_bytes (TREE_TYPE (args[i].tree_value));
1519               nregs = (size + (UNITS_PER_WORD - 1)) / UNITS_PER_WORD;
1520             }
1521           else
1522             size = GET_MODE_SIZE (args[i].mode);
1523
1524           /* Handle calls that pass values in multiple non-contiguous
1525              locations.  The Irix 6 ABI has examples of this.  */
1526
1527           if (GET_CODE (reg) == PARALLEL)
1528             emit_group_move (reg, args[i].parallel_value);
1529
1530           /* If simple case, just do move.  If normal partial, store_one_arg
1531              has already loaded the register for us.  In all other cases,
1532              load the register(s) from memory.  */
1533
1534           else if (nregs == -1)
1535             {
1536               emit_move_insn (reg, args[i].value);
1537 #ifdef BLOCK_REG_PADDING
1538               /* Handle case where we have a value that needs shifting
1539                  up to the msb.  eg. a QImode value and we're padding
1540                  upward on a BYTES_BIG_ENDIAN machine.  */
1541               if (size < UNITS_PER_WORD
1542                   && (args[i].locate.where_pad
1543                       == (BYTES_BIG_ENDIAN ? upward : downward)))
1544                 {
1545                   rtx x;
1546                   int shift = (UNITS_PER_WORD - size) * BITS_PER_UNIT;
1547
1548                   /* Assigning REG here rather than a temp makes CALL_FUSAGE
1549                      report the whole reg as used.  Strictly speaking, the
1550                      call only uses SIZE bytes at the msb end, but it doesn't
1551                      seem worth generating rtl to say that.  */
1552                   reg = gen_rtx_REG (word_mode, REGNO (reg));
1553                   x = expand_shift (LSHIFT_EXPR, word_mode, reg,
1554                                     build_int_cst (NULL_TREE, shift),
1555                                     reg, 1);
1556                   if (x != reg)
1557                     emit_move_insn (reg, x);
1558                 }
1559 #endif
1560             }
1561
1562           /* If we have pre-computed the values to put in the registers in
1563              the case of non-aligned structures, copy them in now.  */
1564
1565           else if (args[i].n_aligned_regs != 0)
1566             for (j = 0; j < args[i].n_aligned_regs; j++)
1567               emit_move_insn (gen_rtx_REG (word_mode, REGNO (reg) + j),
1568                               args[i].aligned_regs[j]);
1569
1570           else if (partial == 0 || args[i].pass_on_stack)
1571             {
1572               rtx mem = validize_mem (args[i].value);
1573
1574               /* Check for overlap with already clobbered argument area.  */
1575               if (is_sibcall
1576                   && mem_overlaps_already_clobbered_arg_p (XEXP (args[i].value, 0),
1577                                                            size))
1578                 *sibcall_failure = 1;
1579
1580               /* Handle a BLKmode that needs shifting.  */
1581               if (nregs == 1 && size < UNITS_PER_WORD
1582 #ifdef BLOCK_REG_PADDING
1583                   && args[i].locate.where_pad == downward
1584 #else
1585                   && BYTES_BIG_ENDIAN
1586 #endif
1587                  )
1588                 {
1589                   rtx tem = operand_subword_force (mem, 0, args[i].mode);
1590                   rtx ri = gen_rtx_REG (word_mode, REGNO (reg));
1591                   rtx x = gen_reg_rtx (word_mode);
1592                   int shift = (UNITS_PER_WORD - size) * BITS_PER_UNIT;
1593                   enum tree_code dir = BYTES_BIG_ENDIAN ? RSHIFT_EXPR
1594                                                         : LSHIFT_EXPR;
1595
1596                   emit_move_insn (x, tem);
1597                   x = expand_shift (dir, word_mode, x,
1598                                     build_int_cst (NULL_TREE, shift),
1599                                     ri, 1);
1600                   if (x != ri)
1601                     emit_move_insn (ri, x);
1602                 }
1603               else
1604                 move_block_to_reg (REGNO (reg), mem, nregs, args[i].mode);
1605             }
1606
1607           /* When a parameter is a block, and perhaps in other cases, it is
1608              possible that it did a load from an argument slot that was
1609              already clobbered.  */
1610           if (is_sibcall
1611               && check_sibcall_argument_overlap (before_arg, &args[i], 0))
1612             *sibcall_failure = 1;
1613
1614           /* Handle calls that pass values in multiple non-contiguous
1615              locations.  The Irix 6 ABI has examples of this.  */
1616           if (GET_CODE (reg) == PARALLEL)
1617             use_group_regs (call_fusage, reg);
1618           else if (nregs == -1)
1619             use_reg (call_fusage, reg);
1620           else if (nregs > 0)
1621             use_regs (call_fusage, REGNO (reg), nregs);
1622         }
1623     }
1624 }
1625
1626 /* We need to pop PENDING_STACK_ADJUST bytes.  But, if the arguments
1627    wouldn't fill up an even multiple of PREFERRED_UNIT_STACK_BOUNDARY
1628    bytes, then we would need to push some additional bytes to pad the
1629    arguments.  So, we compute an adjust to the stack pointer for an
1630    amount that will leave the stack under-aligned by UNADJUSTED_ARGS_SIZE
1631    bytes.  Then, when the arguments are pushed the stack will be perfectly
1632    aligned.  ARGS_SIZE->CONSTANT is set to the number of bytes that should
1633    be popped after the call.  Returns the adjustment.  */
1634
1635 static int
1636 combine_pending_stack_adjustment_and_call (int unadjusted_args_size,
1637                                            struct args_size *args_size,
1638                                            unsigned int preferred_unit_stack_boundary)
1639 {
1640   /* The number of bytes to pop so that the stack will be
1641      under-aligned by UNADJUSTED_ARGS_SIZE bytes.  */
1642   HOST_WIDE_INT adjustment;
1643   /* The alignment of the stack after the arguments are pushed, if we
1644      just pushed the arguments without adjust the stack here.  */
1645   unsigned HOST_WIDE_INT unadjusted_alignment;
1646
1647   unadjusted_alignment
1648     = ((stack_pointer_delta + unadjusted_args_size)
1649        % preferred_unit_stack_boundary);
1650
1651   /* We want to get rid of as many of the PENDING_STACK_ADJUST bytes
1652      as possible -- leaving just enough left to cancel out the
1653      UNADJUSTED_ALIGNMENT.  In other words, we want to ensure that the
1654      PENDING_STACK_ADJUST is non-negative, and congruent to
1655      -UNADJUSTED_ALIGNMENT modulo the PREFERRED_UNIT_STACK_BOUNDARY.  */
1656
1657   /* Begin by trying to pop all the bytes.  */
1658   unadjusted_alignment
1659     = (unadjusted_alignment
1660        - (pending_stack_adjust % preferred_unit_stack_boundary));
1661   adjustment = pending_stack_adjust;
1662   /* Push enough additional bytes that the stack will be aligned
1663      after the arguments are pushed.  */
1664   if (preferred_unit_stack_boundary > 1)
1665     {
1666       if (unadjusted_alignment > 0)
1667         adjustment -= preferred_unit_stack_boundary - unadjusted_alignment;
1668       else
1669         adjustment += unadjusted_alignment;
1670     }
1671
1672   /* Now, sets ARGS_SIZE->CONSTANT so that we pop the right number of
1673      bytes after the call.  The right number is the entire
1674      PENDING_STACK_ADJUST less our ADJUSTMENT plus the amount required
1675      by the arguments in the first place.  */
1676   args_size->constant
1677     = pending_stack_adjust - adjustment + unadjusted_args_size;
1678
1679   return adjustment;
1680 }
1681
1682 /* Scan X expression if it does not dereference any argument slots
1683    we already clobbered by tail call arguments (as noted in stored_args_map
1684    bitmap).
1685    Return nonzero if X expression dereferences such argument slots,
1686    zero otherwise.  */
1687
1688 static int
1689 check_sibcall_argument_overlap_1 (rtx x)
1690 {
1691   RTX_CODE code;
1692   int i, j;
1693   const char *fmt;
1694
1695   if (x == NULL_RTX)
1696     return 0;
1697
1698   code = GET_CODE (x);
1699
1700   if (code == MEM)
1701     return mem_overlaps_already_clobbered_arg_p (XEXP (x, 0),
1702                                                  GET_MODE_SIZE (GET_MODE (x)));
1703
1704   /* Scan all subexpressions.  */
1705   fmt = GET_RTX_FORMAT (code);
1706   for (i = 0; i < GET_RTX_LENGTH (code); i++, fmt++)
1707     {
1708       if (*fmt == 'e')
1709         {
1710           if (check_sibcall_argument_overlap_1 (XEXP (x, i)))
1711             return 1;
1712         }
1713       else if (*fmt == 'E')
1714         {
1715           for (j = 0; j < XVECLEN (x, i); j++)
1716             if (check_sibcall_argument_overlap_1 (XVECEXP (x, i, j)))
1717               return 1;
1718         }
1719     }
1720   return 0;
1721 }
1722
1723 /* Scan sequence after INSN if it does not dereference any argument slots
1724    we already clobbered by tail call arguments (as noted in stored_args_map
1725    bitmap).  If MARK_STORED_ARGS_MAP, add stack slots for ARG to
1726    stored_args_map bitmap afterwards (when ARG is a register MARK_STORED_ARGS_MAP
1727    should be 0).  Return nonzero if sequence after INSN dereferences such argument
1728    slots, zero otherwise.  */
1729
1730 static int
1731 check_sibcall_argument_overlap (rtx insn, struct arg_data *arg, int mark_stored_args_map)
1732 {
1733   int low, high;
1734
1735   if (insn == NULL_RTX)
1736     insn = get_insns ();
1737   else
1738     insn = NEXT_INSN (insn);
1739
1740   for (; insn; insn = NEXT_INSN (insn))
1741     if (INSN_P (insn)
1742         && check_sibcall_argument_overlap_1 (PATTERN (insn)))
1743       break;
1744
1745   if (mark_stored_args_map)
1746     {
1747 #ifdef ARGS_GROW_DOWNWARD
1748       low = -arg->locate.slot_offset.constant - arg->locate.size.constant;
1749 #else
1750       low = arg->locate.slot_offset.constant;
1751 #endif
1752
1753       for (high = low + arg->locate.size.constant; low < high; low++)
1754         SET_BIT (stored_args_map, low);
1755     }
1756   return insn != NULL_RTX;
1757 }
1758
1759 /* Given that a function returns a value of mode MODE at the most
1760    significant end of hard register VALUE, shift VALUE left or right
1761    as specified by LEFT_P.  Return true if some action was needed.  */
1762
1763 bool
1764 shift_return_value (enum machine_mode mode, bool left_p, rtx value)
1765 {
1766   HOST_WIDE_INT shift;
1767
1768   gcc_assert (REG_P (value) && HARD_REGISTER_P (value));
1769   shift = GET_MODE_BITSIZE (GET_MODE (value)) - GET_MODE_BITSIZE (mode);
1770   if (shift == 0)
1771     return false;
1772
1773   /* Use ashr rather than lshr for right shifts.  This is for the benefit
1774      of the MIPS port, which requires SImode values to be sign-extended
1775      when stored in 64-bit registers.  */
1776   if (!force_expand_binop (GET_MODE (value), left_p ? ashl_optab : ashr_optab,
1777                            value, GEN_INT (shift), value, 1, OPTAB_WIDEN))
1778     gcc_unreachable ();
1779   return true;
1780 }
1781
1782 /* Generate all the code for a function call
1783    and return an rtx for its value.
1784    Store the value in TARGET (specified as an rtx) if convenient.
1785    If the value is stored in TARGET then TARGET is returned.
1786    If IGNORE is nonzero, then we ignore the value of the function call.  */
1787
1788 rtx
1789 expand_call (tree exp, rtx target, int ignore)
1790 {
1791   /* Nonzero if we are currently expanding a call.  */
1792   static int currently_expanding_call = 0;
1793
1794   /* List of actual parameters.  */
1795   tree actparms = TREE_OPERAND (exp, 1);
1796   /* RTX for the function to be called.  */
1797   rtx funexp;
1798   /* Sequence of insns to perform a normal "call".  */
1799   rtx normal_call_insns = NULL_RTX;
1800   /* Sequence of insns to perform a tail "call".  */
1801   rtx tail_call_insns = NULL_RTX;
1802   /* Data type of the function.  */
1803   tree funtype;
1804   tree type_arg_types;
1805   /* Declaration of the function being called,
1806      or 0 if the function is computed (not known by name).  */
1807   tree fndecl = 0;
1808   /* The type of the function being called.  */
1809   tree fntype;
1810   bool try_tail_call = CALL_EXPR_TAILCALL (exp);
1811   int pass;
1812
1813   /* Register in which non-BLKmode value will be returned,
1814      or 0 if no value or if value is BLKmode.  */
1815   rtx valreg;
1816   /* Address where we should return a BLKmode value;
1817      0 if value not BLKmode.  */
1818   rtx structure_value_addr = 0;
1819   /* Nonzero if that address is being passed by treating it as
1820      an extra, implicit first parameter.  Otherwise,
1821      it is passed by being copied directly into struct_value_rtx.  */
1822   int structure_value_addr_parm = 0;
1823   /* Size of aggregate value wanted, or zero if none wanted
1824      or if we are using the non-reentrant PCC calling convention
1825      or expecting the value in registers.  */
1826   HOST_WIDE_INT struct_value_size = 0;
1827   /* Nonzero if called function returns an aggregate in memory PCC style,
1828      by returning the address of where to find it.  */
1829   int pcc_struct_value = 0;
1830   rtx struct_value = 0;
1831
1832   /* Number of actual parameters in this call, including struct value addr.  */
1833   int num_actuals;
1834   /* Number of named args.  Args after this are anonymous ones
1835      and they must all go on the stack.  */
1836   int n_named_args;
1837
1838   /* Vector of information about each argument.
1839      Arguments are numbered in the order they will be pushed,
1840      not the order they are written.  */
1841   struct arg_data *args;
1842
1843   /* Total size in bytes of all the stack-parms scanned so far.  */
1844   struct args_size args_size;
1845   struct args_size adjusted_args_size;
1846   /* Size of arguments before any adjustments (such as rounding).  */
1847   int unadjusted_args_size;
1848   /* Data on reg parms scanned so far.  */
1849   CUMULATIVE_ARGS args_so_far;
1850   /* Nonzero if a reg parm has been scanned.  */
1851   int reg_parm_seen;
1852   /* Nonzero if this is an indirect function call.  */
1853
1854   /* Nonzero if we must avoid push-insns in the args for this call.
1855      If stack space is allocated for register parameters, but not by the
1856      caller, then it is preallocated in the fixed part of the stack frame.
1857      So the entire argument block must then be preallocated (i.e., we
1858      ignore PUSH_ROUNDING in that case).  */
1859
1860   int must_preallocate = !PUSH_ARGS;
1861
1862   /* Size of the stack reserved for parameter registers.  */
1863   int reg_parm_stack_space = 0;
1864
1865   /* Address of space preallocated for stack parms
1866      (on machines that lack push insns), or 0 if space not preallocated.  */
1867   rtx argblock = 0;
1868
1869   /* Mask of ECF_ flags.  */
1870   int flags = 0;
1871 #ifdef REG_PARM_STACK_SPACE
1872   /* Define the boundary of the register parm stack space that needs to be
1873      saved, if any.  */
1874   int low_to_save, high_to_save;
1875   rtx save_area = 0;            /* Place that it is saved */
1876 #endif
1877
1878   int initial_highest_arg_in_use = highest_outgoing_arg_in_use;
1879   char *initial_stack_usage_map = stack_usage_map;
1880   char *stack_usage_map_buf = NULL;
1881
1882   int old_stack_allocated;
1883
1884   /* State variables to track stack modifications.  */
1885   rtx old_stack_level = 0;
1886   int old_stack_arg_under_construction = 0;
1887   int old_pending_adj = 0;
1888   int old_inhibit_defer_pop = inhibit_defer_pop;
1889
1890   /* Some stack pointer alterations we make are performed via
1891      allocate_dynamic_stack_space. This modifies the stack_pointer_delta,
1892      which we then also need to save/restore along the way.  */
1893   int old_stack_pointer_delta = 0;
1894
1895   rtx call_fusage;
1896   tree p = TREE_OPERAND (exp, 0);
1897   tree addr = TREE_OPERAND (exp, 0);
1898   int i;
1899   /* The alignment of the stack, in bits.  */
1900   unsigned HOST_WIDE_INT preferred_stack_boundary;
1901   /* The alignment of the stack, in bytes.  */
1902   unsigned HOST_WIDE_INT preferred_unit_stack_boundary;
1903   /* The static chain value to use for this call.  */
1904   rtx static_chain_value;
1905   /* See if this is "nothrow" function call.  */
1906   if (TREE_NOTHROW (exp))
1907     flags |= ECF_NOTHROW;
1908
1909   /* See if we can find a DECL-node for the actual function, and get the
1910      function attributes (flags) from the function decl or type node.  */
1911   fndecl = get_callee_fndecl (exp);
1912   if (fndecl)
1913     {
1914       fntype = TREE_TYPE (fndecl);
1915       flags |= flags_from_decl_or_type (fndecl);
1916     }
1917   else
1918     {
1919       fntype = TREE_TYPE (TREE_TYPE (p));
1920       flags |= flags_from_decl_or_type (fntype);
1921     }
1922
1923   struct_value = targetm.calls.struct_value_rtx (fntype, 0);
1924
1925   /* Warn if this value is an aggregate type,
1926      regardless of which calling convention we are using for it.  */
1927   if (AGGREGATE_TYPE_P (TREE_TYPE (exp)))
1928     warning (OPT_Waggregate_return, "function call has aggregate value");
1929
1930   /* If the result of a pure or const function call is ignored (or void),
1931      and none of its arguments are volatile, we can avoid expanding the
1932      call and just evaluate the arguments for side-effects.  */
1933   if ((flags & (ECF_CONST | ECF_PURE))
1934       && (ignore || target == const0_rtx
1935           || TYPE_MODE (TREE_TYPE (exp)) == VOIDmode))
1936     {
1937       bool volatilep = false;
1938       tree arg;
1939
1940       for (arg = actparms; arg; arg = TREE_CHAIN (arg))
1941         if (TREE_THIS_VOLATILE (TREE_VALUE (arg)))
1942           {
1943             volatilep = true;
1944             break;
1945           }
1946
1947       if (! volatilep)
1948         {
1949           for (arg = actparms; arg; arg = TREE_CHAIN (arg))
1950             expand_expr (TREE_VALUE (arg), const0_rtx,
1951                          VOIDmode, EXPAND_NORMAL);
1952           return const0_rtx;
1953         }
1954     }
1955
1956 #ifdef REG_PARM_STACK_SPACE
1957   reg_parm_stack_space = REG_PARM_STACK_SPACE (fndecl);
1958 #endif
1959
1960 #ifndef OUTGOING_REG_PARM_STACK_SPACE
1961   if (reg_parm_stack_space > 0 && PUSH_ARGS)
1962     must_preallocate = 1;
1963 #endif
1964
1965   /* Set up a place to return a structure.  */
1966
1967   /* Cater to broken compilers.  */
1968   if (aggregate_value_p (exp, fndecl))
1969     {
1970       /* This call returns a big structure.  */
1971       flags &= ~(ECF_CONST | ECF_PURE | ECF_LIBCALL_BLOCK);
1972
1973 #ifdef PCC_STATIC_STRUCT_RETURN
1974       {
1975         pcc_struct_value = 1;
1976       }
1977 #else /* not PCC_STATIC_STRUCT_RETURN */
1978       {
1979         struct_value_size = int_size_in_bytes (TREE_TYPE (exp));
1980
1981         if (target && MEM_P (target) && CALL_EXPR_RETURN_SLOT_OPT (exp))
1982           structure_value_addr = XEXP (target, 0);
1983         else
1984           {
1985             /* For variable-sized objects, we must be called with a target
1986                specified.  If we were to allocate space on the stack here,
1987                we would have no way of knowing when to free it.  */
1988             rtx d = assign_temp (TREE_TYPE (exp), 0, 1, 1);
1989
1990             mark_temp_addr_taken (d);
1991             structure_value_addr = XEXP (d, 0);
1992             target = 0;
1993           }
1994       }
1995 #endif /* not PCC_STATIC_STRUCT_RETURN */
1996     }
1997
1998   /* Figure out the amount to which the stack should be aligned.  */
1999   preferred_stack_boundary = PREFERRED_STACK_BOUNDARY;
2000   if (fndecl)
2001     {
2002       struct cgraph_rtl_info *i = cgraph_rtl_info (fndecl);
2003       if (i && i->preferred_incoming_stack_boundary)
2004         preferred_stack_boundary = i->preferred_incoming_stack_boundary;
2005     }
2006
2007   /* Operand 0 is a pointer-to-function; get the type of the function.  */
2008   funtype = TREE_TYPE (addr);
2009   gcc_assert (POINTER_TYPE_P (funtype));
2010   funtype = TREE_TYPE (funtype);
2011
2012   /* Munge the tree to split complex arguments into their imaginary
2013      and real parts.  */
2014   if (targetm.calls.split_complex_arg)
2015     {
2016       type_arg_types = split_complex_types (TYPE_ARG_TYPES (funtype));
2017       actparms = split_complex_values (actparms);
2018     }
2019   else
2020     type_arg_types = TYPE_ARG_TYPES (funtype);
2021
2022   if (flags & ECF_MAY_BE_ALLOCA)
2023     current_function_calls_alloca = 1;
2024
2025   /* If struct_value_rtx is 0, it means pass the address
2026      as if it were an extra parameter.  */
2027   if (structure_value_addr && struct_value == 0)
2028     {
2029       /* If structure_value_addr is a REG other than
2030          virtual_outgoing_args_rtx, we can use always use it.  If it
2031          is not a REG, we must always copy it into a register.
2032          If it is virtual_outgoing_args_rtx, we must copy it to another
2033          register in some cases.  */
2034       rtx temp = (!REG_P (structure_value_addr)
2035                   || (ACCUMULATE_OUTGOING_ARGS
2036                       && stack_arg_under_construction
2037                       && structure_value_addr == virtual_outgoing_args_rtx)
2038                   ? copy_addr_to_reg (convert_memory_address
2039                                       (Pmode, structure_value_addr))
2040                   : structure_value_addr);
2041
2042       actparms
2043         = tree_cons (error_mark_node,
2044                      make_tree (build_pointer_type (TREE_TYPE (funtype)),
2045                                 temp),
2046                      actparms);
2047       structure_value_addr_parm = 1;
2048     }
2049
2050   /* Count the arguments and set NUM_ACTUALS.  */
2051   for (p = actparms, num_actuals = 0; p; p = TREE_CHAIN (p))
2052     num_actuals++;
2053
2054   /* Compute number of named args.
2055      First, do a raw count of the args for INIT_CUMULATIVE_ARGS.  */
2056
2057   if (type_arg_types != 0)
2058     n_named_args
2059       = (list_length (type_arg_types)
2060          /* Count the struct value address, if it is passed as a parm.  */
2061          + structure_value_addr_parm);
2062   else
2063     /* If we know nothing, treat all args as named.  */
2064     n_named_args = num_actuals;
2065
2066   /* Start updating where the next arg would go.
2067
2068      On some machines (such as the PA) indirect calls have a different
2069      calling convention than normal calls.  The fourth argument in
2070      INIT_CUMULATIVE_ARGS tells the backend if this is an indirect call
2071      or not.  */
2072   INIT_CUMULATIVE_ARGS (args_so_far, funtype, NULL_RTX, fndecl, n_named_args);
2073
2074   /* Now possibly adjust the number of named args.
2075      Normally, don't include the last named arg if anonymous args follow.
2076      We do include the last named arg if
2077      targetm.calls.strict_argument_naming() returns nonzero.
2078      (If no anonymous args follow, the result of list_length is actually
2079      one too large.  This is harmless.)
2080
2081      If targetm.calls.pretend_outgoing_varargs_named() returns
2082      nonzero, and targetm.calls.strict_argument_naming() returns zero,
2083      this machine will be able to place unnamed args that were passed
2084      in registers into the stack.  So treat all args as named.  This
2085      allows the insns emitting for a specific argument list to be
2086      independent of the function declaration.
2087
2088      If targetm.calls.pretend_outgoing_varargs_named() returns zero,
2089      we do not have any reliable way to pass unnamed args in
2090      registers, so we must force them into memory.  */
2091
2092   if (type_arg_types != 0
2093       && targetm.calls.strict_argument_naming (&args_so_far))
2094     ;
2095   else if (type_arg_types != 0
2096            && ! targetm.calls.pretend_outgoing_varargs_named (&args_so_far))
2097     /* Don't include the last named arg.  */
2098     --n_named_args;
2099   else
2100     /* Treat all args as named.  */
2101     n_named_args = num_actuals;
2102
2103   /* Make a vector to hold all the information about each arg.  */
2104   args = alloca (num_actuals * sizeof (struct arg_data));
2105   memset (args, 0, num_actuals * sizeof (struct arg_data));
2106
2107   /* Build up entries in the ARGS array, compute the size of the
2108      arguments into ARGS_SIZE, etc.  */
2109   initialize_argument_information (num_actuals, args, &args_size,
2110                                    n_named_args, actparms, fndecl,
2111                                    &args_so_far, reg_parm_stack_space,
2112                                    &old_stack_level, &old_pending_adj,
2113                                    &must_preallocate, &flags,
2114                                    &try_tail_call, CALL_FROM_THUNK_P (exp));
2115
2116   if (args_size.var)
2117     {
2118       /* If this function requires a variable-sized argument list, don't
2119          try to make a cse'able block for this call.  We may be able to
2120          do this eventually, but it is too complicated to keep track of
2121          what insns go in the cse'able block and which don't.  */
2122
2123       flags &= ~ECF_LIBCALL_BLOCK;
2124       must_preallocate = 1;
2125     }
2126
2127   /* Now make final decision about preallocating stack space.  */
2128   must_preallocate = finalize_must_preallocate (must_preallocate,
2129                                                 num_actuals, args,
2130                                                 &args_size);
2131
2132   /* If the structure value address will reference the stack pointer, we
2133      must stabilize it.  We don't need to do this if we know that we are
2134      not going to adjust the stack pointer in processing this call.  */
2135
2136   if (structure_value_addr
2137       && (reg_mentioned_p (virtual_stack_dynamic_rtx, structure_value_addr)
2138           || reg_mentioned_p (virtual_outgoing_args_rtx,
2139                               structure_value_addr))
2140       && (args_size.var
2141           || (!ACCUMULATE_OUTGOING_ARGS && args_size.constant)))
2142     structure_value_addr = copy_to_reg (structure_value_addr);
2143
2144   /* Tail calls can make things harder to debug, and we've traditionally
2145      pushed these optimizations into -O2.  Don't try if we're already
2146      expanding a call, as that means we're an argument.  Don't try if
2147      there's cleanups, as we know there's code to follow the call.  */
2148
2149   if (currently_expanding_call++ != 0
2150       || !flag_optimize_sibling_calls
2151       || args_size.var
2152       || lookup_stmt_eh_region (exp) >= 0)
2153     try_tail_call = 0;
2154
2155   /*  Rest of purposes for tail call optimizations to fail.  */
2156   if (
2157 #ifdef HAVE_sibcall_epilogue
2158       !HAVE_sibcall_epilogue
2159 #else
2160       1
2161 #endif
2162       || !try_tail_call
2163       /* Doing sibling call optimization needs some work, since
2164          structure_value_addr can be allocated on the stack.
2165          It does not seem worth the effort since few optimizable
2166          sibling calls will return a structure.  */
2167       || structure_value_addr != NULL_RTX
2168       /* Check whether the target is able to optimize the call
2169          into a sibcall.  */
2170       || !targetm.function_ok_for_sibcall (fndecl, exp)
2171       /* Functions that do not return exactly once may not be sibcall
2172          optimized.  */
2173       || (flags & (ECF_RETURNS_TWICE | ECF_NORETURN))
2174       || TYPE_VOLATILE (TREE_TYPE (TREE_TYPE (addr)))
2175       /* If the called function is nested in the current one, it might access
2176          some of the caller's arguments, but could clobber them beforehand if
2177          the argument areas are shared.  */
2178       || (fndecl && decl_function_context (fndecl) == current_function_decl)
2179       /* If this function requires more stack slots than the current
2180          function, we cannot change it into a sibling call.
2181          current_function_pretend_args_size is not part of the
2182          stack allocated by our caller.  */
2183       || args_size.constant > (current_function_args_size
2184                                - current_function_pretend_args_size)
2185       /* If the callee pops its own arguments, then it must pop exactly
2186          the same number of arguments as the current function.  */
2187       || (RETURN_POPS_ARGS (fndecl, funtype, args_size.constant)
2188           != RETURN_POPS_ARGS (current_function_decl,
2189                                TREE_TYPE (current_function_decl),
2190                                current_function_args_size))
2191       || !lang_hooks.decls.ok_for_sibcall (fndecl))
2192     try_tail_call = 0;
2193
2194   /* Ensure current function's preferred stack boundary is at least
2195      what we need.  We don't have to increase alignment for recursive
2196      functions.  */
2197   if (cfun->preferred_stack_boundary < preferred_stack_boundary
2198       && fndecl != current_function_decl)
2199     cfun->preferred_stack_boundary = preferred_stack_boundary;
2200   if (fndecl == current_function_decl)
2201     cfun->recursive_call_emit = true;
2202
2203   preferred_unit_stack_boundary = preferred_stack_boundary / BITS_PER_UNIT;
2204
2205   /* We want to make two insn chains; one for a sibling call, the other
2206      for a normal call.  We will select one of the two chains after
2207      initial RTL generation is complete.  */
2208   for (pass = try_tail_call ? 0 : 1; pass < 2; pass++)
2209     {
2210       int sibcall_failure = 0;
2211       /* We want to emit any pending stack adjustments before the tail
2212          recursion "call".  That way we know any adjustment after the tail
2213          recursion call can be ignored if we indeed use the tail
2214          call expansion.  */
2215       int save_pending_stack_adjust = 0;
2216       int save_stack_pointer_delta = 0;
2217       rtx insns;
2218       rtx before_call, next_arg_reg;
2219
2220       if (pass == 0)
2221         {
2222           /* State variables we need to save and restore between
2223              iterations.  */
2224           save_pending_stack_adjust = pending_stack_adjust;
2225           save_stack_pointer_delta = stack_pointer_delta;
2226         }
2227       if (pass)
2228         flags &= ~ECF_SIBCALL;
2229       else
2230         flags |= ECF_SIBCALL;
2231
2232       /* Other state variables that we must reinitialize each time
2233          through the loop (that are not initialized by the loop itself).  */
2234       argblock = 0;
2235       call_fusage = 0;
2236
2237       /* Start a new sequence for the normal call case.
2238
2239          From this point on, if the sibling call fails, we want to set
2240          sibcall_failure instead of continuing the loop.  */
2241       start_sequence ();
2242
2243       /* Don't let pending stack adjusts add up to too much.
2244          Also, do all pending adjustments now if there is any chance
2245          this might be a call to alloca or if we are expanding a sibling
2246          call sequence or if we are calling a function that is to return
2247          with stack pointer depressed.
2248          Also do the adjustments before a throwing call, otherwise
2249          exception handling can fail; PR 19225. */
2250       if (pending_stack_adjust >= 32
2251           || (pending_stack_adjust > 0
2252               && (flags & (ECF_MAY_BE_ALLOCA | ECF_SP_DEPRESSED)))
2253           || (pending_stack_adjust > 0
2254               && flag_exceptions && !(flags & ECF_NOTHROW))
2255           || pass == 0)
2256         do_pending_stack_adjust ();
2257
2258       /* When calling a const function, we must pop the stack args right away,
2259          so that the pop is deleted or moved with the call.  */
2260       if (pass && (flags & ECF_LIBCALL_BLOCK))
2261         NO_DEFER_POP;
2262
2263       /* Precompute any arguments as needed.  */
2264       if (pass)
2265         precompute_arguments (flags, num_actuals, args);
2266
2267       /* Now we are about to start emitting insns that can be deleted
2268          if a libcall is deleted.  */
2269       if (pass && (flags & (ECF_LIBCALL_BLOCK | ECF_MALLOC)))
2270         start_sequence ();
2271
2272       if (pass == 0 && cfun->stack_protect_guard)
2273         stack_protect_epilogue ();
2274
2275       adjusted_args_size = args_size;
2276       /* Compute the actual size of the argument block required.  The variable
2277          and constant sizes must be combined, the size may have to be rounded,
2278          and there may be a minimum required size.  When generating a sibcall
2279          pattern, do not round up, since we'll be re-using whatever space our
2280          caller provided.  */
2281       unadjusted_args_size
2282         = compute_argument_block_size (reg_parm_stack_space,
2283                                        &adjusted_args_size,
2284                                        (pass == 0 ? 0
2285                                         : preferred_stack_boundary));
2286
2287       old_stack_allocated = stack_pointer_delta - pending_stack_adjust;
2288
2289       /* The argument block when performing a sibling call is the
2290          incoming argument block.  */
2291       if (pass == 0)
2292         {
2293           argblock = virtual_incoming_args_rtx;
2294           argblock
2295 #ifdef STACK_GROWS_DOWNWARD
2296             = plus_constant (argblock, current_function_pretend_args_size);
2297 #else
2298             = plus_constant (argblock, -current_function_pretend_args_size);
2299 #endif
2300           stored_args_map = sbitmap_alloc (args_size.constant);
2301           sbitmap_zero (stored_args_map);
2302         }
2303
2304       /* If we have no actual push instructions, or shouldn't use them,
2305          make space for all args right now.  */
2306       else if (adjusted_args_size.var != 0)
2307         {
2308           if (old_stack_level == 0)
2309             {
2310               emit_stack_save (SAVE_BLOCK, &old_stack_level, NULL_RTX);
2311               old_stack_pointer_delta = stack_pointer_delta;
2312               old_pending_adj = pending_stack_adjust;
2313               pending_stack_adjust = 0;
2314               /* stack_arg_under_construction says whether a stack arg is
2315                  being constructed at the old stack level.  Pushing the stack
2316                  gets a clean outgoing argument block.  */
2317               old_stack_arg_under_construction = stack_arg_under_construction;
2318               stack_arg_under_construction = 0;
2319             }
2320           argblock = push_block (ARGS_SIZE_RTX (adjusted_args_size), 0, 0);
2321         }
2322       else
2323         {
2324           /* Note that we must go through the motions of allocating an argument
2325              block even if the size is zero because we may be storing args
2326              in the area reserved for register arguments, which may be part of
2327              the stack frame.  */
2328
2329           int needed = adjusted_args_size.constant;
2330
2331           /* Store the maximum argument space used.  It will be pushed by
2332              the prologue (if ACCUMULATE_OUTGOING_ARGS, or stack overflow
2333              checking).  */
2334
2335           if (needed > current_function_outgoing_args_size)
2336             current_function_outgoing_args_size = needed;
2337
2338           if (must_preallocate)
2339             {
2340               if (ACCUMULATE_OUTGOING_ARGS)
2341                 {
2342                   /* Since the stack pointer will never be pushed, it is
2343                      possible for the evaluation of a parm to clobber
2344                      something we have already written to the stack.
2345                      Since most function calls on RISC machines do not use
2346                      the stack, this is uncommon, but must work correctly.
2347
2348                      Therefore, we save any area of the stack that was already
2349                      written and that we are using.  Here we set up to do this
2350                      by making a new stack usage map from the old one.  The
2351                      actual save will be done by store_one_arg.
2352
2353                      Another approach might be to try to reorder the argument
2354                      evaluations to avoid this conflicting stack usage.  */
2355
2356 #ifndef OUTGOING_REG_PARM_STACK_SPACE
2357                   /* Since we will be writing into the entire argument area,
2358                      the map must be allocated for its entire size, not just
2359                      the part that is the responsibility of the caller.  */
2360                   needed += reg_parm_stack_space;
2361 #endif
2362
2363 #ifdef ARGS_GROW_DOWNWARD
2364                   highest_outgoing_arg_in_use = MAX (initial_highest_arg_in_use,
2365                                                      needed + 1);
2366 #else
2367                   highest_outgoing_arg_in_use = MAX (initial_highest_arg_in_use,
2368                                                      needed);
2369 #endif
2370                   if (stack_usage_map_buf)
2371                     free (stack_usage_map_buf);
2372                   stack_usage_map_buf = XNEWVEC (char, highest_outgoing_arg_in_use);
2373                   stack_usage_map = stack_usage_map_buf;
2374
2375                   if (initial_highest_arg_in_use)
2376                     memcpy (stack_usage_map, initial_stack_usage_map,
2377                             initial_highest_arg_in_use);
2378
2379                   if (initial_highest_arg_in_use != highest_outgoing_arg_in_use)
2380                     memset (&stack_usage_map[initial_highest_arg_in_use], 0,
2381                            (highest_outgoing_arg_in_use
2382                             - initial_highest_arg_in_use));
2383                   needed = 0;
2384
2385                   /* The address of the outgoing argument list must not be
2386                      copied to a register here, because argblock would be left
2387                      pointing to the wrong place after the call to
2388                      allocate_dynamic_stack_space below.  */
2389
2390                   argblock = virtual_outgoing_args_rtx;
2391                 }
2392               else
2393                 {
2394                   if (inhibit_defer_pop == 0)
2395                     {
2396                       /* Try to reuse some or all of the pending_stack_adjust
2397                          to get this space.  */
2398                       needed
2399                         = (combine_pending_stack_adjustment_and_call
2400                            (unadjusted_args_size,
2401                             &adjusted_args_size,
2402                             preferred_unit_stack_boundary));
2403
2404                       /* combine_pending_stack_adjustment_and_call computes
2405                          an adjustment before the arguments are allocated.
2406                          Account for them and see whether or not the stack
2407                          needs to go up or down.  */
2408                       needed = unadjusted_args_size - needed;
2409
2410                       if (needed < 0)
2411                         {
2412                           /* We're releasing stack space.  */
2413                           /* ??? We can avoid any adjustment at all if we're
2414                              already aligned.  FIXME.  */
2415                           pending_stack_adjust = -needed;
2416                           do_pending_stack_adjust ();
2417                           needed = 0;
2418                         }
2419                       else
2420                         /* We need to allocate space.  We'll do that in
2421                            push_block below.  */
2422                         pending_stack_adjust = 0;
2423                     }
2424
2425                   /* Special case this because overhead of `push_block' in
2426                      this case is non-trivial.  */
2427                   if (needed == 0)
2428                     argblock = virtual_outgoing_args_rtx;
2429                   else
2430                     {
2431                       argblock = push_block (GEN_INT (needed), 0, 0);
2432 #ifdef ARGS_GROW_DOWNWARD
2433                       argblock = plus_constant (argblock, needed);
2434 #endif
2435                     }
2436
2437                   /* We only really need to call `copy_to_reg' in the case
2438                      where push insns are going to be used to pass ARGBLOCK
2439                      to a function call in ARGS.  In that case, the stack
2440                      pointer changes value from the allocation point to the
2441                      call point, and hence the value of
2442                      VIRTUAL_OUTGOING_ARGS_RTX changes as well.  But might
2443                      as well always do it.  */
2444                   argblock = copy_to_reg (argblock);
2445                 }
2446             }
2447         }
2448
2449       if (ACCUMULATE_OUTGOING_ARGS)
2450         {
2451           /* The save/restore code in store_one_arg handles all
2452              cases except one: a constructor call (including a C
2453              function returning a BLKmode struct) to initialize
2454              an argument.  */
2455           if (stack_arg_under_construction)
2456             {
2457 #ifndef OUTGOING_REG_PARM_STACK_SPACE
2458               rtx push_size = GEN_INT (reg_parm_stack_space
2459                                        + adjusted_args_size.constant);
2460 #else
2461               rtx push_size = GEN_INT (adjusted_args_size.constant);
2462 #endif
2463               if (old_stack_level == 0)
2464                 {
2465                   emit_stack_save (SAVE_BLOCK, &old_stack_level,
2466                                    NULL_RTX);
2467                   old_stack_pointer_delta = stack_pointer_delta;
2468                   old_pending_adj = pending_stack_adjust;
2469                   pending_stack_adjust = 0;
2470                   /* stack_arg_under_construction says whether a stack
2471                      arg is being constructed at the old stack level.
2472                      Pushing the stack gets a clean outgoing argument
2473                      block.  */
2474                   old_stack_arg_under_construction
2475                     = stack_arg_under_construction;
2476                   stack_arg_under_construction = 0;
2477                   /* Make a new map for the new argument list.  */
2478                   if (stack_usage_map_buf)
2479                     free (stack_usage_map_buf);
2480                   stack_usage_map_buf = XNEWVEC (char, highest_outgoing_arg_in_use);
2481                   stack_usage_map = stack_usage_map_buf;
2482                   memset (stack_usage_map, 0, highest_outgoing_arg_in_use);
2483                   highest_outgoing_arg_in_use = 0;
2484                 }
2485               allocate_dynamic_stack_space (push_size, NULL_RTX,
2486                                             BITS_PER_UNIT);
2487             }
2488
2489           /* If argument evaluation might modify the stack pointer,
2490              copy the address of the argument list to a register.  */
2491           for (i = 0; i < num_actuals; i++)
2492             if (args[i].pass_on_stack)
2493               {
2494                 argblock = copy_addr_to_reg (argblock);
2495                 break;
2496               }
2497         }
2498
2499       compute_argument_addresses (args, argblock, num_actuals);
2500
2501       /* If we push args individually in reverse order, perform stack alignment
2502          before the first push (the last arg).  */
2503       if (PUSH_ARGS_REVERSED && argblock == 0
2504           && adjusted_args_size.constant != unadjusted_args_size)
2505         {
2506           /* When the stack adjustment is pending, we get better code
2507              by combining the adjustments.  */
2508           if (pending_stack_adjust
2509               && ! (flags & ECF_LIBCALL_BLOCK)
2510               && ! inhibit_defer_pop)
2511             {
2512               pending_stack_adjust
2513                 = (combine_pending_stack_adjustment_and_call
2514                    (unadjusted_args_size,
2515                     &adjusted_args_size,
2516                     preferred_unit_stack_boundary));
2517               do_pending_stack_adjust ();
2518             }
2519           else if (argblock == 0)
2520             anti_adjust_stack (GEN_INT (adjusted_args_size.constant
2521                                         - unadjusted_args_size));
2522         }
2523       /* Now that the stack is properly aligned, pops can't safely
2524          be deferred during the evaluation of the arguments.  */
2525       NO_DEFER_POP;
2526
2527       funexp = rtx_for_function_call (fndecl, addr);
2528
2529       /* Figure out the register where the value, if any, will come back.  */
2530       valreg = 0;
2531       if (TYPE_MODE (TREE_TYPE (exp)) != VOIDmode
2532           && ! structure_value_addr)
2533         {
2534           if (pcc_struct_value)
2535             valreg = hard_function_value (build_pointer_type (TREE_TYPE (exp)),
2536                                           fndecl, NULL, (pass == 0));
2537           else
2538             valreg = hard_function_value (TREE_TYPE (exp), fndecl, fntype,
2539                                           (pass == 0));
2540         }
2541
2542       /* Precompute all register parameters.  It isn't safe to compute anything
2543          once we have started filling any specific hard regs.  */
2544       precompute_register_parameters (num_actuals, args, &reg_parm_seen);
2545
2546       if (TREE_OPERAND (exp, 2))
2547         static_chain_value = expand_normal (TREE_OPERAND (exp, 2));
2548       else
2549         static_chain_value = 0;
2550
2551 #ifdef REG_PARM_STACK_SPACE
2552       /* Save the fixed argument area if it's part of the caller's frame and
2553          is clobbered by argument setup for this call.  */
2554       if (ACCUMULATE_OUTGOING_ARGS && pass)
2555         save_area = save_fixed_argument_area (reg_parm_stack_space, argblock,
2556                                               &low_to_save, &high_to_save);
2557 #endif
2558
2559       /* Now store (and compute if necessary) all non-register parms.
2560          These come before register parms, since they can require block-moves,
2561          which could clobber the registers used for register parms.
2562          Parms which have partial registers are not stored here,
2563          but we do preallocate space here if they want that.  */
2564
2565       for (i = 0; i < num_actuals; i++)
2566         if (args[i].reg == 0 || args[i].pass_on_stack)
2567           {
2568             rtx before_arg = get_last_insn ();
2569
2570             if (store_one_arg (&args[i], argblock, flags,
2571                                adjusted_args_size.var != 0,
2572                                reg_parm_stack_space)
2573                 || (pass == 0
2574                     && check_sibcall_argument_overlap (before_arg,
2575                                                        &args[i], 1)))
2576               sibcall_failure = 1;
2577
2578             if (flags & ECF_CONST
2579                 && args[i].stack
2580                 && args[i].value == args[i].stack)
2581               call_fusage = gen_rtx_EXPR_LIST (VOIDmode,
2582                                                gen_rtx_USE (VOIDmode,
2583                                                             args[i].value),
2584                                                call_fusage);
2585           }
2586
2587       /* If we have a parm that is passed in registers but not in memory
2588          and whose alignment does not permit a direct copy into registers,
2589          make a group of pseudos that correspond to each register that we
2590          will later fill.  */
2591       if (STRICT_ALIGNMENT)
2592         store_unaligned_arguments_into_pseudos (args, num_actuals);
2593
2594       /* Now store any partially-in-registers parm.
2595          This is the last place a block-move can happen.  */
2596       if (reg_parm_seen)
2597         for (i = 0; i < num_actuals; i++)
2598           if (args[i].partial != 0 && ! args[i].pass_on_stack)
2599             {
2600               rtx before_arg = get_last_insn ();
2601
2602               if (store_one_arg (&args[i], argblock, flags,
2603                                  adjusted_args_size.var != 0,
2604                                  reg_parm_stack_space)
2605                   || (pass == 0
2606                       && check_sibcall_argument_overlap (before_arg,
2607                                                          &args[i], 1)))
2608                 sibcall_failure = 1;
2609             }
2610
2611       /* If we pushed args in forward order, perform stack alignment
2612          after pushing the last arg.  */
2613       if (!PUSH_ARGS_REVERSED && argblock == 0)
2614         anti_adjust_stack (GEN_INT (adjusted_args_size.constant
2615                                     - unadjusted_args_size));
2616
2617       /* If register arguments require space on the stack and stack space
2618          was not preallocated, allocate stack space here for arguments
2619          passed in registers.  */
2620 #ifdef OUTGOING_REG_PARM_STACK_SPACE
2621       if (!ACCUMULATE_OUTGOING_ARGS
2622           && must_preallocate == 0 && reg_parm_stack_space > 0)
2623         anti_adjust_stack (GEN_INT (reg_parm_stack_space));
2624 #endif
2625
2626       /* Pass the function the address in which to return a
2627          structure value.  */
2628       if (pass != 0 && structure_value_addr && ! structure_value_addr_parm)
2629         {
2630           structure_value_addr
2631             = convert_memory_address (Pmode, structure_value_addr);
2632           emit_move_insn (struct_value,
2633                           force_reg (Pmode,
2634                                      force_operand (structure_value_addr,
2635                                                     NULL_RTX)));
2636
2637           if (REG_P (struct_value))
2638             use_reg (&call_fusage, struct_value);
2639         }
2640
2641       funexp = prepare_call_address (funexp, static_chain_value,
2642                                      &call_fusage, reg_parm_seen, pass == 0);
2643
2644       load_register_parameters (args, num_actuals, &call_fusage, flags,
2645                                 pass == 0, &sibcall_failure);
2646
2647       /* Save a pointer to the last insn before the call, so that we can
2648          later safely search backwards to find the CALL_INSN.  */
2649       before_call = get_last_insn ();
2650
2651       /* Set up next argument register.  For sibling calls on machines
2652          with register windows this should be the incoming register.  */
2653 #ifdef FUNCTION_INCOMING_ARG
2654       if (pass == 0)
2655         next_arg_reg = FUNCTION_INCOMING_ARG (args_so_far, VOIDmode,
2656                                               void_type_node, 1);
2657       else
2658 #endif
2659         next_arg_reg = FUNCTION_ARG (args_so_far, VOIDmode,
2660                                      void_type_node, 1);
2661
2662       /* All arguments and registers used for the call must be set up by
2663          now!  */
2664
2665       /* Stack must be properly aligned now.  */
2666       gcc_assert (!pass
2667                   || !(stack_pointer_delta % preferred_unit_stack_boundary));
2668
2669       /* Generate the actual call instruction.  */
2670       emit_call_1 (funexp, exp, fndecl, funtype, unadjusted_args_size,
2671                    adjusted_args_size.constant, struct_value_size,
2672                    next_arg_reg, valreg, old_inhibit_defer_pop, call_fusage,
2673                    flags, & args_so_far);
2674
2675       /* If a non-BLKmode value is returned at the most significant end
2676          of a register, shift the register right by the appropriate amount
2677          and update VALREG accordingly.  BLKmode values are handled by the
2678          group load/store machinery below.  */
2679       if (!structure_value_addr
2680           && !pcc_struct_value
2681           && TYPE_MODE (TREE_TYPE (exp)) != BLKmode
2682           && targetm.calls.return_in_msb (TREE_TYPE (exp)))
2683         {
2684           if (shift_return_value (TYPE_MODE (TREE_TYPE (exp)), false, valreg))
2685             sibcall_failure = 1;
2686           valreg = gen_rtx_REG (TYPE_MODE (TREE_TYPE (exp)), REGNO (valreg));
2687         }
2688
2689       /* If call is cse'able, make appropriate pair of reg-notes around it.
2690          Test valreg so we don't crash; may safely ignore `const'
2691          if return type is void.  Disable for PARALLEL return values, because
2692          we have no way to move such values into a pseudo register.  */
2693       if (pass && (flags & ECF_LIBCALL_BLOCK))
2694         {
2695           rtx insns;
2696           rtx insn;
2697           bool failed = valreg == 0 || GET_CODE (valreg) == PARALLEL;
2698
2699           insns = get_insns ();
2700
2701           /* Expansion of block moves possibly introduced a loop that may
2702              not appear inside libcall block.  */
2703           for (insn = insns; insn; insn = NEXT_INSN (insn))
2704             if (JUMP_P (insn))
2705               failed = true;
2706
2707           if (failed)
2708             {
2709               end_sequence ();
2710               emit_insn (insns);
2711             }
2712           else
2713             {
2714               rtx note = 0;
2715               rtx temp = gen_reg_rtx (GET_MODE (valreg));
2716
2717               /* Mark the return value as a pointer if needed.  */
2718               if (TREE_CODE (TREE_TYPE (exp)) == POINTER_TYPE)
2719                 mark_reg_pointer (temp,
2720                                   TYPE_ALIGN (TREE_TYPE (TREE_TYPE (exp))));
2721
2722               end_sequence ();
2723               if (flag_unsafe_math_optimizations
2724                   && fndecl
2725                   && DECL_BUILT_IN_CLASS (fndecl) == BUILT_IN_NORMAL
2726                   && (DECL_FUNCTION_CODE (fndecl) == BUILT_IN_SQRT
2727                       || DECL_FUNCTION_CODE (fndecl) == BUILT_IN_SQRTF
2728                       || DECL_FUNCTION_CODE (fndecl) == BUILT_IN_SQRTL))
2729                 note = gen_rtx_fmt_e (SQRT,
2730                                       GET_MODE (temp),
2731                                       args[0].initial_value);
2732               else
2733                 {
2734                   /* Construct an "equal form" for the value which
2735                      mentions all the arguments in order as well as
2736                      the function name.  */
2737                   for (i = 0; i < num_actuals; i++)
2738                     note = gen_rtx_EXPR_LIST (VOIDmode,
2739                                               args[i].initial_value, note);
2740                   note = gen_rtx_EXPR_LIST (VOIDmode, funexp, note);
2741
2742                   if (flags & ECF_PURE)
2743                     note = gen_rtx_EXPR_LIST (VOIDmode,
2744                         gen_rtx_USE (VOIDmode,
2745                                      gen_rtx_MEM (BLKmode,
2746                                                   gen_rtx_SCRATCH (VOIDmode))),
2747                         note);
2748                 }
2749               emit_libcall_block (insns, temp, valreg, note);
2750
2751               valreg = temp;
2752             }
2753         }
2754       else if (pass && (flags & ECF_MALLOC))
2755         {
2756           rtx temp = gen_reg_rtx (GET_MODE (valreg));
2757           rtx last, insns;
2758
2759           /* The return value from a malloc-like function is a pointer.  */
2760           if (TREE_CODE (TREE_TYPE (exp)) == POINTER_TYPE)
2761             mark_reg_pointer (temp, BIGGEST_ALIGNMENT);
2762
2763           emit_move_insn (temp, valreg);
2764
2765           /* The return value from a malloc-like function can not alias
2766              anything else.  */
2767           last = get_last_insn ();
2768           REG_NOTES (last) =
2769             gen_rtx_EXPR_LIST (REG_NOALIAS, temp, REG_NOTES (last));
2770
2771           /* Write out the sequence.  */
2772           insns = get_insns ();
2773           end_sequence ();
2774           emit_insn (insns);
2775           valreg = temp;
2776         }
2777
2778       /* For calls to `setjmp', etc., inform flow.c it should complain
2779          if nonvolatile values are live.  For functions that cannot return,
2780          inform flow that control does not fall through.  */
2781
2782       if ((flags & ECF_NORETURN) || pass == 0)
2783         {
2784           /* The barrier must be emitted
2785              immediately after the CALL_INSN.  Some ports emit more
2786              than just a CALL_INSN above, so we must search for it here.  */
2787
2788           rtx last = get_last_insn ();
2789           while (!CALL_P (last))
2790             {
2791               last = PREV_INSN (last);
2792               /* There was no CALL_INSN?  */
2793               gcc_assert (last != before_call);
2794             }
2795
2796           emit_barrier_after (last);
2797
2798           /* Stack adjustments after a noreturn call are dead code.
2799              However when NO_DEFER_POP is in effect, we must preserve
2800              stack_pointer_delta.  */
2801           if (inhibit_defer_pop == 0)
2802             {
2803               stack_pointer_delta = old_stack_allocated;
2804               pending_stack_adjust = 0;
2805             }
2806         }
2807
2808       /* If value type not void, return an rtx for the value.  */
2809
2810       if (TYPE_MODE (TREE_TYPE (exp)) == VOIDmode
2811           || ignore)
2812         target = const0_rtx;
2813       else if (structure_value_addr)
2814         {
2815           if (target == 0 || !MEM_P (target))
2816             {
2817               target
2818                 = gen_rtx_MEM (TYPE_MODE (TREE_TYPE (exp)),
2819                                memory_address (TYPE_MODE (TREE_TYPE (exp)),
2820                                                structure_value_addr));
2821               set_mem_attributes (target, exp, 1);
2822             }
2823         }
2824       else if (pcc_struct_value)
2825         {
2826           /* This is the special C++ case where we need to
2827              know what the true target was.  We take care to
2828              never use this value more than once in one expression.  */
2829           target = gen_rtx_MEM (TYPE_MODE (TREE_TYPE (exp)),
2830                                 copy_to_reg (valreg));
2831           set_mem_attributes (target, exp, 1);
2832         }
2833       /* Handle calls that return values in multiple non-contiguous locations.
2834          The Irix 6 ABI has examples of this.  */
2835       else if (GET_CODE (valreg) == PARALLEL)
2836         {
2837           if (target == 0)
2838             {
2839               /* This will only be assigned once, so it can be readonly.  */
2840               tree nt = build_qualified_type (TREE_TYPE (exp),
2841                                               (TYPE_QUALS (TREE_TYPE (exp))
2842                                                | TYPE_QUAL_CONST));
2843
2844               target = assign_temp (nt, 0, 1, 1);
2845             }
2846
2847           if (! rtx_equal_p (target, valreg))
2848             emit_group_store (target, valreg, TREE_TYPE (exp),
2849                               int_size_in_bytes (TREE_TYPE (exp)));
2850
2851           /* We can not support sibling calls for this case.  */
2852           sibcall_failure = 1;
2853         }
2854       else if (target
2855                && GET_MODE (target) == TYPE_MODE (TREE_TYPE (exp))
2856                && GET_MODE (target) == GET_MODE (valreg))
2857         {
2858           bool may_overlap = false;
2859
2860           /* We have to copy a return value in a CLASS_LIKELY_SPILLED hard
2861              reg to a plain register.  */
2862           if (REG_P (valreg)
2863               && HARD_REGISTER_P (valreg)
2864               && CLASS_LIKELY_SPILLED_P (REGNO_REG_CLASS (REGNO (valreg)))
2865               && !(REG_P (target) && !HARD_REGISTER_P (target)))
2866             valreg = copy_to_reg (valreg);
2867
2868           /* If TARGET is a MEM in the argument area, and we have
2869              saved part of the argument area, then we can't store
2870              directly into TARGET as it may get overwritten when we
2871              restore the argument save area below.  Don't work too
2872              hard though and simply force TARGET to a register if it
2873              is a MEM; the optimizer is quite likely to sort it out.  */
2874           if (ACCUMULATE_OUTGOING_ARGS && pass && MEM_P (target))
2875             for (i = 0; i < num_actuals; i++)
2876               if (args[i].save_area)
2877                 {
2878                   may_overlap = true;
2879                   break;
2880                 }
2881
2882           if (may_overlap)
2883             target = copy_to_reg (valreg);
2884           else
2885             {
2886               /* TARGET and VALREG cannot be equal at this point
2887                  because the latter would not have
2888                  REG_FUNCTION_VALUE_P true, while the former would if
2889                  it were referring to the same register.
2890
2891                  If they refer to the same register, this move will be
2892                  a no-op, except when function inlining is being
2893                  done.  */
2894               emit_move_insn (target, valreg);
2895
2896               /* If we are setting a MEM, this code must be executed.
2897                  Since it is emitted after the call insn, sibcall
2898                  optimization cannot be performed in that case.  */
2899               if (MEM_P (target))
2900                 sibcall_failure = 1;
2901             }
2902         }
2903       else if (TYPE_MODE (TREE_TYPE (exp)) == BLKmode)
2904         {
2905           target = copy_blkmode_from_reg (target, valreg, TREE_TYPE (exp));
2906
2907           /* We can not support sibling calls for this case.  */
2908           sibcall_failure = 1;
2909         }
2910       else
2911         target = copy_to_reg (valreg);
2912
2913       if (targetm.calls.promote_function_return(funtype))
2914         {
2915           /* If we promoted this return value, make the proper SUBREG.
2916              TARGET might be const0_rtx here, so be careful.  */
2917           if (REG_P (target)
2918               && TYPE_MODE (TREE_TYPE (exp)) != BLKmode
2919               && GET_MODE (target) != TYPE_MODE (TREE_TYPE (exp)))
2920             {
2921               tree type = TREE_TYPE (exp);
2922               int unsignedp = TYPE_UNSIGNED (type);
2923               int offset = 0;
2924               enum machine_mode pmode;
2925
2926               pmode = promote_mode (type, TYPE_MODE (type), &unsignedp, 1);
2927               /* If we don't promote as expected, something is wrong.  */
2928               gcc_assert (GET_MODE (target) == pmode);
2929
2930               if ((WORDS_BIG_ENDIAN || BYTES_BIG_ENDIAN)
2931                   && (GET_MODE_SIZE (GET_MODE (target))
2932                       > GET_MODE_SIZE (TYPE_MODE (type))))
2933                 {
2934                   offset = GET_MODE_SIZE (GET_MODE (target))
2935                     - GET_MODE_SIZE (TYPE_MODE (type));
2936                   if (! BYTES_BIG_ENDIAN)
2937                     offset = (offset / UNITS_PER_WORD) * UNITS_PER_WORD;
2938                   else if (! WORDS_BIG_ENDIAN)
2939                     offset %= UNITS_PER_WORD;
2940                 }
2941               target = gen_rtx_SUBREG (TYPE_MODE (type), target, offset);
2942               SUBREG_PROMOTED_VAR_P (target) = 1;
2943               SUBREG_PROMOTED_UNSIGNED_SET (target, unsignedp);
2944             }
2945         }
2946
2947       /* If size of args is variable or this was a constructor call for a stack
2948          argument, restore saved stack-pointer value.  */
2949
2950       if (old_stack_level && ! (flags & ECF_SP_DEPRESSED))
2951         {
2952           emit_stack_restore (SAVE_BLOCK, old_stack_level, NULL_RTX);
2953           stack_pointer_delta = old_stack_pointer_delta;
2954           pending_stack_adjust = old_pending_adj;
2955           old_stack_allocated = stack_pointer_delta - pending_stack_adjust;
2956           stack_arg_under_construction = old_stack_arg_under_construction;
2957           highest_outgoing_arg_in_use = initial_highest_arg_in_use;
2958           stack_usage_map = initial_stack_usage_map;
2959           sibcall_failure = 1;
2960         }
2961       else if (ACCUMULATE_OUTGOING_ARGS && pass)
2962         {
2963 #ifdef REG_PARM_STACK_SPACE
2964           if (save_area)
2965             restore_fixed_argument_area (save_area, argblock,
2966                                          high_to_save, low_to_save);
2967 #endif
2968
2969           /* If we saved any argument areas, restore them.  */
2970           for (i = 0; i < num_actuals; i++)
2971             if (args[i].save_area)
2972               {
2973                 enum machine_mode save_mode = GET_MODE (args[i].save_area);
2974                 rtx stack_area
2975                   = gen_rtx_MEM (save_mode,
2976                                  memory_address (save_mode,
2977                                                  XEXP (args[i].stack_slot, 0)));
2978
2979                 if (save_mode != BLKmode)
2980                   emit_move_insn (stack_area, args[i].save_area);
2981                 else
2982                   emit_block_move (stack_area, args[i].save_area,
2983                                    GEN_INT (args[i].locate.size.constant),
2984                                    BLOCK_OP_CALL_PARM);
2985               }
2986
2987           highest_outgoing_arg_in_use = initial_highest_arg_in_use;
2988           stack_usage_map = initial_stack_usage_map;
2989         }
2990
2991       /* If this was alloca, record the new stack level for nonlocal gotos.
2992          Check for the handler slots since we might not have a save area
2993          for non-local gotos.  */
2994
2995       if ((flags & ECF_MAY_BE_ALLOCA) && cfun->nonlocal_goto_save_area != 0)
2996         update_nonlocal_goto_save_area ();
2997
2998       /* Free up storage we no longer need.  */
2999       for (i = 0; i < num_actuals; ++i)
3000         if (args[i].aligned_regs)
3001           free (args[i].aligned_regs);
3002
3003       insns = get_insns ();
3004       end_sequence ();
3005
3006       if (pass == 0)
3007         {
3008           tail_call_insns = insns;
3009
3010           /* Restore the pending stack adjustment now that we have
3011              finished generating the sibling call sequence.  */
3012
3013           pending_stack_adjust = save_pending_stack_adjust;
3014           stack_pointer_delta = save_stack_pointer_delta;
3015
3016           /* Prepare arg structure for next iteration.  */
3017           for (i = 0; i < num_actuals; i++)
3018             {
3019               args[i].value = 0;
3020               args[i].aligned_regs = 0;
3021               args[i].stack = 0;
3022             }
3023
3024           sbitmap_free (stored_args_map);
3025         }
3026       else
3027         {
3028           normal_call_insns = insns;
3029
3030           /* Verify that we've deallocated all the stack we used.  */
3031           gcc_assert ((flags & ECF_NORETURN)
3032                       || (old_stack_allocated
3033                           == stack_pointer_delta - pending_stack_adjust));
3034         }
3035
3036       /* If something prevents making this a sibling call,
3037          zero out the sequence.  */
3038       if (sibcall_failure)
3039         tail_call_insns = NULL_RTX;
3040       else
3041         break;
3042     }
3043
3044   /* If tail call production succeeded, we need to remove REG_EQUIV notes on
3045      arguments too, as argument area is now clobbered by the call.  */
3046   if (tail_call_insns)
3047     {
3048       emit_insn (tail_call_insns);
3049       cfun->tail_call_emit = true;
3050     }
3051   else
3052     emit_insn (normal_call_insns);
3053
3054   currently_expanding_call--;
3055
3056   /* If this function returns with the stack pointer depressed, ensure
3057      this block saves and restores the stack pointer, show it was
3058      changed, and adjust for any outgoing arg space.  */
3059   if (flags & ECF_SP_DEPRESSED)
3060     {
3061       clear_pending_stack_adjust ();
3062       emit_insn (gen_rtx_CLOBBER (VOIDmode, stack_pointer_rtx));
3063       emit_move_insn (virtual_stack_dynamic_rtx, stack_pointer_rtx);
3064     }
3065
3066   if (stack_usage_map_buf)
3067     free (stack_usage_map_buf);
3068
3069   return target;
3070 }
3071
3072 /* A sibling call sequence invalidates any REG_EQUIV notes made for
3073    this function's incoming arguments.
3074
3075    At the start of RTL generation we know the only REG_EQUIV notes
3076    in the rtl chain are those for incoming arguments, so we can look
3077    for REG_EQUIV notes between the start of the function and the
3078    NOTE_INSN_FUNCTION_BEG.
3079
3080    This is (slight) overkill.  We could keep track of the highest
3081    argument we clobber and be more selective in removing notes, but it
3082    does not seem to be worth the effort.  */
3083
3084 void
3085 fixup_tail_calls (void)
3086 {
3087   rtx insn;
3088
3089   for (insn = get_insns (); insn; insn = NEXT_INSN (insn))
3090     {
3091       /* There are never REG_EQUIV notes for the incoming arguments
3092          after the NOTE_INSN_FUNCTION_BEG note, so stop if we see it.  */
3093       if (NOTE_P (insn)
3094           && NOTE_LINE_NUMBER (insn) == NOTE_INSN_FUNCTION_BEG)
3095         break;
3096
3097       while (1)
3098         {
3099           rtx note = find_reg_note (insn, REG_EQUIV, 0);
3100           if (note)
3101             {
3102               /* Remove the note and keep looking at the notes for
3103                  this insn.  */
3104               remove_note (insn, note);
3105               continue;
3106             }
3107           break;
3108         }
3109     }
3110 }
3111
3112 /* Traverse an argument list in VALUES and expand all complex
3113    arguments into their components.  */
3114 static tree
3115 split_complex_values (tree values)
3116 {
3117   tree p;
3118
3119   /* Before allocating memory, check for the common case of no complex.  */
3120   for (p = values; p; p = TREE_CHAIN (p))
3121     {
3122       tree type = TREE_TYPE (TREE_VALUE (p));
3123       if (type && TREE_CODE (type) == COMPLEX_TYPE
3124           && targetm.calls.split_complex_arg (type))
3125         goto found;
3126     }
3127   return values;
3128
3129  found:
3130   values = copy_list (values);
3131
3132   for (p = values; p; p = TREE_CHAIN (p))
3133     {
3134       tree complex_value = TREE_VALUE (p);
3135       tree complex_type;
3136
3137       complex_type = TREE_TYPE (complex_value);
3138       if (!complex_type)
3139         continue;
3140
3141       if (TREE_CODE (complex_type) == COMPLEX_TYPE
3142           && targetm.calls.split_complex_arg (complex_type))
3143         {
3144           tree subtype;
3145           tree real, imag, next;
3146
3147           subtype = TREE_TYPE (complex_type);
3148           complex_value = save_expr (complex_value);
3149           real = build1 (REALPART_EXPR, subtype, complex_value);
3150           imag = build1 (IMAGPART_EXPR, subtype, complex_value);
3151
3152           TREE_VALUE (p) = real;
3153           next = TREE_CHAIN (p);
3154           imag = build_tree_list (NULL_TREE, imag);
3155           TREE_CHAIN (p) = imag;
3156           TREE_CHAIN (imag) = next;
3157
3158           /* Skip the newly created node.  */
3159           p = TREE_CHAIN (p);
3160         }
3161     }
3162
3163   return values;
3164 }
3165
3166 /* Traverse a list of TYPES and expand all complex types into their
3167    components.  */
3168 static tree
3169 split_complex_types (tree types)
3170 {
3171   tree p;
3172
3173   /* Before allocating memory, check for the common case of no complex.  */
3174   for (p = types; p; p = TREE_CHAIN (p))
3175     {
3176       tree type = TREE_VALUE (p);
3177       if (TREE_CODE (type) == COMPLEX_TYPE
3178           && targetm.calls.split_complex_arg (type))
3179         goto found;
3180     }
3181   return types;
3182
3183  found:
3184   types = copy_list (types);
3185
3186   for (p = types; p; p = TREE_CHAIN (p))
3187     {
3188       tree complex_type = TREE_VALUE (p);
3189
3190       if (TREE_CODE (complex_type) == COMPLEX_TYPE
3191           && targetm.calls.split_complex_arg (complex_type))
3192         {
3193           tree next, imag;
3194
3195           /* Rewrite complex type with component type.  */
3196           TREE_VALUE (p) = TREE_TYPE (complex_type);
3197           next = TREE_CHAIN (p);
3198
3199           /* Add another component type for the imaginary part.  */
3200           imag = build_tree_list (NULL_TREE, TREE_VALUE (p));
3201           TREE_CHAIN (p) = imag;
3202           TREE_CHAIN (imag) = next;
3203
3204           /* Skip the newly created node.  */
3205           p = TREE_CHAIN (p);
3206         }
3207     }
3208
3209   return types;
3210 }
3211 \f
3212 /* Output a library call to function FUN (a SYMBOL_REF rtx).
3213    The RETVAL parameter specifies whether return value needs to be saved, other
3214    parameters are documented in the emit_library_call function below.  */
3215
3216 static rtx
3217 emit_library_call_value_1 (int retval, rtx orgfun, rtx value,
3218                            enum libcall_type fn_type,
3219                            enum machine_mode outmode, int nargs, va_list p)
3220 {
3221   /* Total size in bytes of all the stack-parms scanned so far.  */
3222   struct args_size args_size;
3223   /* Size of arguments before any adjustments (such as rounding).  */
3224   struct args_size original_args_size;
3225   int argnum;
3226   rtx fun;
3227   int inc;
3228   int count;
3229   rtx argblock = 0;
3230   CUMULATIVE_ARGS args_so_far;
3231   struct arg
3232   {
3233     rtx value;
3234     enum machine_mode mode;
3235     rtx reg;
3236     int partial;
3237     struct locate_and_pad_arg_data locate;
3238     rtx save_area;
3239   };
3240   struct arg *argvec;
3241   int old_inhibit_defer_pop = inhibit_defer_pop;
3242   rtx call_fusage = 0;
3243   rtx mem_value = 0;
3244   rtx valreg;
3245   int pcc_struct_value = 0;
3246   int struct_value_size = 0;
3247   int flags;
3248   int reg_parm_stack_space = 0;
3249   int needed;
3250   rtx before_call;
3251   tree tfom;                    /* type_for_mode (outmode, 0) */
3252
3253 #ifdef REG_PARM_STACK_SPACE
3254   /* Define the boundary of the register parm stack space that needs to be
3255      save, if any.  */
3256   int low_to_save, high_to_save;
3257   rtx save_area = 0;            /* Place that it is saved.  */
3258 #endif
3259
3260   /* Size of the stack reserved for parameter registers.  */
3261   int initial_highest_arg_in_use = highest_outgoing_arg_in_use;
3262   char *initial_stack_usage_map = stack_usage_map;
3263   char *stack_usage_map_buf = NULL;
3264
3265   rtx struct_value = targetm.calls.struct_value_rtx (0, 0);
3266
3267 #ifdef REG_PARM_STACK_SPACE
3268   reg_parm_stack_space = REG_PARM_STACK_SPACE ((tree) 0);
3269 #endif
3270
3271   /* By default, library functions can not throw.  */
3272   flags = ECF_NOTHROW;
3273
3274   switch (fn_type)
3275     {
3276     case LCT_NORMAL:
3277       break;
3278     case LCT_CONST:
3279       flags |= ECF_CONST;
3280       break;
3281     case LCT_PURE:
3282       flags |= ECF_PURE;
3283       break;
3284     case LCT_CONST_MAKE_BLOCK:
3285       flags |= ECF_CONST | ECF_LIBCALL_BLOCK;
3286       break;
3287     case LCT_PURE_MAKE_BLOCK:
3288       flags |= ECF_PURE | ECF_LIBCALL_BLOCK;
3289       break;
3290     case LCT_NORETURN:
3291       flags |= ECF_NORETURN;
3292       break;
3293     case LCT_THROW:
3294       flags = ECF_NORETURN;
3295       break;
3296     case LCT_RETURNS_TWICE:
3297       flags = ECF_RETURNS_TWICE;
3298       break;
3299     }
3300   fun = orgfun;
3301
3302   /* Ensure current function's preferred stack boundary is at least
3303      what we need.  */
3304   if (cfun->preferred_stack_boundary < PREFERRED_STACK_BOUNDARY)
3305     cfun->preferred_stack_boundary = PREFERRED_STACK_BOUNDARY;
3306
3307   /* If this kind of value comes back in memory,
3308      decide where in memory it should come back.  */
3309   if (outmode != VOIDmode)
3310     {
3311       tfom = lang_hooks.types.type_for_mode (outmode, 0);
3312       if (aggregate_value_p (tfom, 0))
3313         {
3314 #ifdef PCC_STATIC_STRUCT_RETURN
3315           rtx pointer_reg
3316             = hard_function_value (build_pointer_type (tfom), 0, 0, 0);
3317           mem_value = gen_rtx_MEM (outmode, pointer_reg);
3318           pcc_struct_value = 1;
3319           if (value == 0)
3320             value = gen_reg_rtx (outmode);
3321 #else /* not PCC_STATIC_STRUCT_RETURN */
3322           struct_value_size = GET_MODE_SIZE (outmode);
3323           if (value != 0 && MEM_P (value))
3324             mem_value = value;
3325           else
3326             mem_value = assign_temp (tfom, 0, 1, 1);
3327 #endif
3328           /* This call returns a big structure.  */
3329           flags &= ~(ECF_CONST | ECF_PURE | ECF_LIBCALL_BLOCK);
3330         }
3331     }
3332   else
3333     tfom = void_type_node;
3334
3335   /* ??? Unfinished: must pass the memory address as an argument.  */
3336
3337   /* Copy all the libcall-arguments out of the varargs data
3338      and into a vector ARGVEC.
3339
3340      Compute how to pass each argument.  We only support a very small subset
3341      of the full argument passing conventions to limit complexity here since
3342      library functions shouldn't have many args.  */
3343
3344   argvec = alloca ((nargs + 1) * sizeof (struct arg));
3345   memset (argvec, 0, (nargs + 1) * sizeof (struct arg));
3346
3347 #ifdef INIT_CUMULATIVE_LIBCALL_ARGS
3348   INIT_CUMULATIVE_LIBCALL_ARGS (args_so_far, outmode, fun);
3349 #else
3350   INIT_CUMULATIVE_ARGS (args_so_far, NULL_TREE, fun, 0, nargs);
3351 #endif
3352
3353   args_size.constant = 0;
3354   args_size.var = 0;
3355
3356   count = 0;
3357
3358   /* Now we are about to start emitting insns that can be deleted
3359      if a libcall is deleted.  */
3360   if (flags & ECF_LIBCALL_BLOCK)
3361     start_sequence ();
3362
3363   push_temp_slots ();
3364
3365   /* If there's a structure value address to be passed,
3366      either pass it in the special place, or pass it as an extra argument.  */
3367   if (mem_value && struct_value == 0 && ! pcc_struct_value)
3368     {
3369       rtx addr = XEXP (mem_value, 0);
3370
3371       nargs++;
3372
3373       /* Make sure it is a reasonable operand for a move or push insn.  */
3374       if (!REG_P (addr) && !MEM_P (addr)
3375           && ! (CONSTANT_P (addr) && LEGITIMATE_CONSTANT_P (addr)))
3376         addr = force_operand (addr, NULL_RTX);
3377
3378       argvec[count].value = addr;
3379       argvec[count].mode = Pmode;
3380       argvec[count].partial = 0;
3381
3382       argvec[count].reg = FUNCTION_ARG (args_so_far, Pmode, NULL_TREE, 1);
3383       gcc_assert (targetm.calls.arg_partial_bytes (&args_so_far, Pmode,
3384                                                    NULL_TREE, 1) == 0);
3385
3386       locate_and_pad_parm (Pmode, NULL_TREE,
3387 #ifdef STACK_PARMS_IN_REG_PARM_AREA
3388                            1,
3389 #else
3390                            argvec[count].reg != 0,
3391 #endif
3392                            0, NULL_TREE, &args_size, &argvec[count].locate);
3393
3394       if (argvec[count].reg == 0 || argvec[count].partial != 0
3395           || reg_parm_stack_space > 0)
3396         args_size.constant += argvec[count].locate.size.constant;
3397
3398       FUNCTION_ARG_ADVANCE (args_so_far, Pmode, (tree) 0, 1);
3399
3400       count++;
3401     }
3402
3403   for (; count < nargs; count++)
3404     {
3405       rtx val = va_arg (p, rtx);
3406       enum machine_mode mode = va_arg (p, enum machine_mode);
3407
3408       /* We cannot convert the arg value to the mode the library wants here;
3409          must do it earlier where we know the signedness of the arg.  */
3410       gcc_assert (mode != BLKmode
3411                   && (GET_MODE (val) == mode || GET_MODE (val) == VOIDmode));
3412
3413       /* Make sure it is a reasonable operand for a move or push insn.  */
3414       if (!REG_P (val) && !MEM_P (val)
3415           && ! (CONSTANT_P (val) && LEGITIMATE_CONSTANT_P (val)))
3416         val = force_operand (val, NULL_RTX);
3417
3418       if (pass_by_reference (&args_so_far, mode, NULL_TREE, 1))
3419         {
3420           rtx slot;
3421           int must_copy
3422             = !reference_callee_copied (&args_so_far, mode, NULL_TREE, 1);
3423
3424           /* loop.c won't look at CALL_INSN_FUNCTION_USAGE of const/pure
3425              functions, so we have to pretend this isn't such a function.  */
3426           if (flags & ECF_LIBCALL_BLOCK)
3427             {
3428               rtx insns = get_insns ();
3429               end_sequence ();
3430               emit_insn (insns);
3431             }
3432           flags &= ~(ECF_CONST | ECF_PURE | ECF_LIBCALL_BLOCK);
3433
3434           /* If this was a CONST function, it is now PURE since
3435              it now reads memory.  */
3436           if (flags & ECF_CONST)
3437             {
3438               flags &= ~ECF_CONST;
3439               flags |= ECF_PURE;
3440             }
3441
3442           if (GET_MODE (val) == MEM && !must_copy)
3443             slot = val;
3444           else
3445             {
3446               slot = assign_temp (lang_hooks.types.type_for_mode (mode, 0),
3447                                   0, 1, 1);
3448               emit_move_insn (slot, val);
3449             }
3450
3451           call_fusage = gen_rtx_EXPR_LIST (VOIDmode,
3452                                            gen_rtx_USE (VOIDmode, slot),
3453                                            call_fusage);
3454           if (must_copy)
3455             call_fusage = gen_rtx_EXPR_LIST (VOIDmode,
3456                                              gen_rtx_CLOBBER (VOIDmode,
3457                                                               slot),
3458                                              call_fusage);
3459
3460           mode = Pmode;
3461           val = force_operand (XEXP (slot, 0), NULL_RTX);
3462         }
3463
3464       argvec[count].value = val;
3465       argvec[count].mode = mode;
3466
3467       argvec[count].reg = FUNCTION_ARG (args_so_far, mode, NULL_TREE, 1);
3468
3469       argvec[count].partial
3470         = targetm.calls.arg_partial_bytes (&args_so_far, mode, NULL_TREE, 1);
3471
3472       locate_and_pad_parm (mode, NULL_TREE,
3473 #ifdef STACK_PARMS_IN_REG_PARM_AREA
3474                            1,
3475 #else
3476                            argvec[count].reg != 0,
3477 #endif
3478                            argvec[count].partial,
3479                            NULL_TREE, &args_size, &argvec[count].locate);
3480
3481       gcc_assert (!argvec[count].locate.size.var);
3482
3483       if (argvec[count].reg == 0 || argvec[count].partial != 0
3484           || reg_parm_stack_space > 0)
3485         args_size.constant += argvec[count].locate.size.constant;
3486
3487       FUNCTION_ARG_ADVANCE (args_so_far, mode, (tree) 0, 1);
3488     }
3489
3490   /* If this machine requires an external definition for library
3491      functions, write one out.  */
3492   assemble_external_libcall (fun);
3493
3494   original_args_size = args_size;
3495   args_size.constant = (((args_size.constant
3496                           + stack_pointer_delta
3497                           + STACK_BYTES - 1)
3498                           / STACK_BYTES
3499                           * STACK_BYTES)
3500                          - stack_pointer_delta);
3501
3502   args_size.constant = MAX (args_size.constant,
3503                             reg_parm_stack_space);
3504
3505 #ifndef OUTGOING_REG_PARM_STACK_SPACE
3506   args_size.constant -= reg_parm_stack_space;
3507 #endif
3508
3509   if (args_size.constant > current_function_outgoing_args_size)
3510     current_function_outgoing_args_size = args_size.constant;
3511
3512   if (ACCUMULATE_OUTGOING_ARGS)
3513     {
3514       /* Since the stack pointer will never be pushed, it is possible for
3515          the evaluation of a parm to clobber something we have already
3516          written to the stack.  Since most function calls on RISC machines
3517          do not use the stack, this is uncommon, but must work correctly.
3518
3519          Therefore, we save any area of the stack that was already written
3520          and that we are using.  Here we set up to do this by making a new
3521          stack usage map from the old one.
3522
3523          Another approach might be to try to reorder the argument
3524          evaluations to avoid this conflicting stack usage.  */
3525
3526       needed = args_size.constant;
3527
3528 #ifndef OUTGOING_REG_PARM_STACK_SPACE
3529       /* Since we will be writing into the entire argument area, the
3530          map must be allocated for its entire size, not just the part that
3531          is the responsibility of the caller.  */
3532       needed += reg_parm_stack_space;
3533 #endif
3534
3535 #ifdef ARGS_GROW_DOWNWARD
3536       highest_outgoing_arg_in_use = MAX (initial_highest_arg_in_use,
3537                                          needed + 1);
3538 #else
3539       highest_outgoing_arg_in_use = MAX (initial_highest_arg_in_use,
3540                                          needed);
3541 #endif
3542       stack_usage_map_buf = XNEWVEC (char, highest_outgoing_arg_in_use);
3543       stack_usage_map = stack_usage_map_buf;
3544
3545       if (initial_highest_arg_in_use)
3546         memcpy (stack_usage_map, initial_stack_usage_map,
3547                 initial_highest_arg_in_use);
3548
3549       if (initial_highest_arg_in_use != highest_outgoing_arg_in_use)
3550         memset (&stack_usage_map[initial_highest_arg_in_use], 0,
3551                highest_outgoing_arg_in_use - initial_highest_arg_in_use);
3552       needed = 0;
3553
3554       /* We must be careful to use virtual regs before they're instantiated,
3555          and real regs afterwards.  Loop optimization, for example, can create
3556          new libcalls after we've instantiated the virtual regs, and if we
3557          use virtuals anyway, they won't match the rtl patterns.  */
3558
3559       if (virtuals_instantiated)
3560         argblock = plus_constant (stack_pointer_rtx, STACK_POINTER_OFFSET);
3561       else
3562         argblock = virtual_outgoing_args_rtx;
3563     }
3564   else
3565     {
3566       if (!PUSH_ARGS)
3567         argblock = push_block (GEN_INT (args_size.constant), 0, 0);
3568     }
3569
3570   /* If we push args individually in reverse order, perform stack alignment
3571      before the first push (the last arg).  */
3572   if (argblock == 0 && PUSH_ARGS_REVERSED)
3573     anti_adjust_stack (GEN_INT (args_size.constant
3574                                 - original_args_size.constant));
3575
3576   if (PUSH_ARGS_REVERSED)
3577     {
3578       inc = -1;
3579       argnum = nargs - 1;
3580     }
3581   else
3582     {
3583       inc = 1;
3584       argnum = 0;
3585     }
3586
3587 #ifdef REG_PARM_STACK_SPACE
3588   if (ACCUMULATE_OUTGOING_ARGS)
3589     {
3590       /* The argument list is the property of the called routine and it
3591          may clobber it.  If the fixed area has been used for previous
3592          parameters, we must save and restore it.  */
3593       save_area = save_fixed_argument_area (reg_parm_stack_space, argblock,
3594                                             &low_to_save, &high_to_save);
3595     }
3596 #endif
3597
3598   /* Push the args that need to be pushed.  */
3599
3600   /* ARGNUM indexes the ARGVEC array in the order in which the arguments
3601      are to be pushed.  */
3602   for (count = 0; count < nargs; count++, argnum += inc)
3603     {
3604       enum machine_mode mode = argvec[argnum].mode;
3605       rtx val = argvec[argnum].value;
3606       rtx reg = argvec[argnum].reg;
3607       int partial = argvec[argnum].partial;
3608       int lower_bound = 0, upper_bound = 0, i;
3609
3610       if (! (reg != 0 && partial == 0))
3611         {
3612           if (ACCUMULATE_OUTGOING_ARGS)
3613             {
3614               /* If this is being stored into a pre-allocated, fixed-size,
3615                  stack area, save any previous data at that location.  */
3616
3617 #ifdef ARGS_GROW_DOWNWARD
3618               /* stack_slot is negative, but we want to index stack_usage_map
3619                  with positive values.  */
3620               upper_bound = -argvec[argnum].locate.offset.constant + 1;
3621               lower_bound = upper_bound - argvec[argnum].locate.size.constant;
3622 #else
3623               lower_bound = argvec[argnum].locate.offset.constant;
3624               upper_bound = lower_bound + argvec[argnum].locate.size.constant;
3625 #endif
3626
3627               i = lower_bound;
3628               /* Don't worry about things in the fixed argument area;
3629                  it has already been saved.  */
3630               if (i < reg_parm_stack_space)
3631                 i = reg_parm_stack_space;
3632               while (i < upper_bound && stack_usage_map[i] == 0)
3633                 i++;
3634
3635               if (i < upper_bound)
3636                 {
3637                   /* We need to make a save area.  */
3638                   unsigned int size
3639                     = argvec[argnum].locate.size.constant * BITS_PER_UNIT;
3640                   enum machine_mode save_mode
3641                     = mode_for_size (size, MODE_INT, 1);
3642                   rtx adr
3643                     = plus_constant (argblock,
3644                                      argvec[argnum].locate.offset.constant);
3645                   rtx stack_area
3646                     = gen_rtx_MEM (save_mode, memory_address (save_mode, adr));
3647
3648                   if (save_mode == BLKmode)
3649                     {
3650                       argvec[argnum].save_area
3651                         = assign_stack_temp (BLKmode,
3652                                              argvec[argnum].locate.size.constant,
3653                                              0);
3654
3655                       emit_block_move (validize_mem (argvec[argnum].save_area),
3656                                        stack_area,
3657                                        GEN_INT (argvec[argnum].locate.size.constant),
3658                                        BLOCK_OP_CALL_PARM);
3659                     }
3660                   else
3661                     {
3662                       argvec[argnum].save_area = gen_reg_rtx (save_mode);
3663
3664                       emit_move_insn (argvec[argnum].save_area, stack_area);
3665                     }
3666                 }
3667             }
3668
3669           emit_push_insn (val, mode, NULL_TREE, NULL_RTX, PARM_BOUNDARY,
3670                           partial, reg, 0, argblock,
3671                           GEN_INT (argvec[argnum].locate.offset.constant),
3672                           reg_parm_stack_space,
3673                           ARGS_SIZE_RTX (argvec[argnum].locate.alignment_pad));
3674
3675           /* Now mark the segment we just used.  */
3676           if (ACCUMULATE_OUTGOING_ARGS)
3677             for (i = lower_bound; i < upper_bound; i++)
3678               stack_usage_map[i] = 1;
3679
3680           NO_DEFER_POP;
3681
3682           if (flags & ECF_CONST)
3683             {
3684               rtx use;
3685
3686               /* Indicate argument access so that alias.c knows that these
3687                  values are live.  */
3688               if (argblock)
3689                 use = plus_constant (argblock,
3690                                      argvec[argnum].locate.offset.constant);
3691               else
3692                 /* When arguments are pushed, trying to tell alias.c where
3693                    exactly this argument is won't work, because the
3694                    auto-increment causes confusion.  So we merely indicate
3695                    that we access something with a known mode somewhere on
3696                    the stack.  */
3697                 use = gen_rtx_PLUS (Pmode, virtual_outgoing_args_rtx,
3698                                     gen_rtx_SCRATCH (Pmode));
3699               use = gen_rtx_MEM (argvec[argnum].mode, use);
3700               use = gen_rtx_USE (VOIDmode, use);
3701               call_fusage = gen_rtx_EXPR_LIST (VOIDmode, use, call_fusage);
3702             }
3703         }
3704     }
3705
3706   /* If we pushed args in forward order, perform stack alignment
3707      after pushing the last arg.  */
3708   if (argblock == 0 && !PUSH_ARGS_REVERSED)
3709     anti_adjust_stack (GEN_INT (args_size.constant
3710                                 - original_args_size.constant));
3711
3712   if (PUSH_ARGS_REVERSED)
3713     argnum = nargs - 1;
3714   else
3715     argnum = 0;
3716
3717   fun = prepare_call_address (fun, NULL, &call_fusage, 0, 0);
3718
3719   /* Now load any reg parms into their regs.  */
3720
3721   /* ARGNUM indexes the ARGVEC array in the order in which the arguments
3722      are to be pushed.  */
3723   for (count = 0; count < nargs; count++, argnum += inc)
3724     {
3725       enum machine_mode mode = argvec[argnum].mode;
3726       rtx val = argvec[argnum].value;
3727       rtx reg = argvec[argnum].reg;
3728       int partial = argvec[argnum].partial;
3729
3730       /* Handle calls that pass values in multiple non-contiguous
3731          locations.  The PA64 has examples of this for library calls.  */
3732       if (reg != 0 && GET_CODE (reg) == PARALLEL)
3733         emit_group_load (reg, val, NULL_TREE, GET_MODE_SIZE (mode));
3734       else if (reg != 0 && partial == 0)
3735         emit_move_insn (reg, val);
3736
3737       NO_DEFER_POP;
3738     }
3739
3740   /* Any regs containing parms remain in use through the call.  */
3741   for (count = 0; count < nargs; count++)
3742     {
3743       rtx reg = argvec[count].reg;
3744       if (reg != 0 && GET_CODE (reg) == PARALLEL)
3745         use_group_regs (&call_fusage, reg);
3746       else if (reg != 0)
3747         use_reg (&call_fusage, reg);
3748     }
3749
3750   /* Pass the function the address in which to return a structure value.  */
3751   if (mem_value != 0 && struct_value != 0 && ! pcc_struct_value)
3752     {
3753       emit_move_insn (struct_value,
3754                       force_reg (Pmode,
3755                                  force_operand (XEXP (mem_value, 0),
3756                                                 NULL_RTX)));
3757       if (REG_P (struct_value))
3758         use_reg (&call_fusage, struct_value);
3759     }
3760
3761   /* Don't allow popping to be deferred, since then
3762      cse'ing of library calls could delete a call and leave the pop.  */
3763   NO_DEFER_POP;
3764   valreg = (mem_value == 0 && outmode != VOIDmode
3765             ? hard_libcall_value (outmode) : NULL_RTX);
3766
3767   /* Stack must be properly aligned now.  */
3768   gcc_assert (!(stack_pointer_delta
3769                 & (PREFERRED_STACK_BOUNDARY / BITS_PER_UNIT - 1)));
3770
3771   before_call = get_last_insn ();
3772
3773   /* We pass the old value of inhibit_defer_pop + 1 to emit_call_1, which
3774      will set inhibit_defer_pop to that value.  */
3775   /* The return type is needed to decide how many bytes the function pops.
3776      Signedness plays no role in that, so for simplicity, we pretend it's
3777      always signed.  We also assume that the list of arguments passed has
3778      no impact, so we pretend it is unknown.  */
3779
3780   emit_call_1 (fun, NULL,
3781                get_identifier (XSTR (orgfun, 0)),
3782                build_function_type (tfom, NULL_TREE),
3783                original_args_size.constant, args_size.constant,
3784                struct_value_size,
3785                FUNCTION_ARG (args_so_far, VOIDmode, void_type_node, 1),
3786                valreg,
3787                old_inhibit_defer_pop + 1, call_fusage, flags, & args_so_far);
3788
3789   /* For calls to `setjmp', etc., inform flow.c it should complain
3790      if nonvolatile values are live.  For functions that cannot return,
3791      inform flow that control does not fall through.  */
3792
3793   if (flags & ECF_NORETURN)
3794     {
3795       /* The barrier note must be emitted
3796          immediately after the CALL_INSN.  Some ports emit more than
3797          just a CALL_INSN above, so we must search for it here.  */
3798
3799       rtx last = get_last_insn ();
3800       while (!CALL_P (last))
3801         {
3802           last = PREV_INSN (last);
3803           /* There was no CALL_INSN?  */
3804           gcc_assert (last != before_call);
3805         }
3806
3807       emit_barrier_after (last);
3808     }
3809
3810   /* Now restore inhibit_defer_pop to its actual original value.  */
3811   OK_DEFER_POP;
3812
3813   /* If call is cse'able, make appropriate pair of reg-notes around it.
3814      Test valreg so we don't crash; may safely ignore `const'
3815      if return type is void.  Disable for PARALLEL return values, because
3816      we have no way to move such values into a pseudo register.  */
3817   if (flags & ECF_LIBCALL_BLOCK)
3818     {
3819       rtx insns;
3820
3821       if (valreg == 0)
3822         {
3823           insns = get_insns ();
3824           end_sequence ();
3825           emit_insn (insns);
3826         }
3827       else
3828         {
3829           rtx note = 0;
3830           rtx temp;
3831           int i;
3832
3833           if (GET_CODE (valreg) == PARALLEL)
3834             {
3835               temp = gen_reg_rtx (outmode);
3836               emit_group_store (temp, valreg, NULL_TREE,
3837                                 GET_MODE_SIZE (outmode));
3838               valreg = temp;
3839             }
3840
3841           temp = gen_reg_rtx (GET_MODE (valreg));
3842
3843           /* Construct an "equal form" for the value which mentions all the
3844              arguments in order as well as the function name.  */
3845           for (i = 0; i < nargs; i++)
3846             note = gen_rtx_EXPR_LIST (VOIDmode, argvec[i].value, note);
3847           note = gen_rtx_EXPR_LIST (VOIDmode, fun, note);
3848
3849           insns = get_insns ();
3850           end_sequence ();
3851
3852           if (flags & ECF_PURE)
3853             note = gen_rtx_EXPR_LIST (VOIDmode,
3854                         gen_rtx_USE (VOIDmode,
3855                                      gen_rtx_MEM (BLKmode,
3856                                                   gen_rtx_SCRATCH (VOIDmode))),
3857                         note);
3858
3859           emit_libcall_block (insns, temp, valreg, note);
3860
3861           valreg = temp;
3862         }
3863     }
3864   pop_temp_slots ();
3865
3866   /* Copy the value to the right place.  */
3867   if (outmode != VOIDmode && retval)
3868     {
3869       if (mem_value)
3870         {
3871           if (value == 0)
3872             value = mem_value;
3873           if (value != mem_value)
3874             emit_move_insn (value, mem_value);
3875         }
3876       else if (GET_CODE (valreg) == PARALLEL)
3877         {
3878           if (value == 0)
3879             value = gen_reg_rtx (outmode);
3880           emit_group_store (value, valreg, NULL_TREE, GET_MODE_SIZE (outmode));
3881         }
3882       else if (value != 0)
3883         emit_move_insn (value, valreg);
3884       else
3885         value = valreg;
3886     }
3887
3888   if (ACCUMULATE_OUTGOING_ARGS)
3889     {
3890 #ifdef REG_PARM_STACK_SPACE
3891       if (save_area)
3892         restore_fixed_argument_area (save_area, argblock,
3893                                      high_to_save, low_to_save);
3894 #endif
3895
3896       /* If we saved any argument areas, restore them.  */
3897       for (count = 0; count < nargs; count++)
3898         if (argvec[count].save_area)
3899           {
3900             enum machine_mode save_mode = GET_MODE (argvec[count].save_area);
3901             rtx adr = plus_constant (argblock,
3902                                      argvec[count].locate.offset.constant);
3903             rtx stack_area = gen_rtx_MEM (save_mode,
3904                                           memory_address (save_mode, adr));
3905
3906             if (save_mode == BLKmode)
3907               emit_block_move (stack_area,
3908                                validize_mem (argvec[count].save_area),
3909                                GEN_INT (argvec[count].locate.size.constant),
3910                                BLOCK_OP_CALL_PARM);
3911             else
3912               emit_move_insn (stack_area, argvec[count].save_area);
3913           }
3914
3915       highest_outgoing_arg_in_use = initial_highest_arg_in_use;
3916       stack_usage_map = initial_stack_usage_map;
3917     }
3918
3919   if (stack_usage_map_buf)
3920     free (stack_usage_map_buf);
3921
3922   return value;
3923
3924 }
3925 \f
3926 /* Output a library call to function FUN (a SYMBOL_REF rtx)
3927    (emitting the queue unless NO_QUEUE is nonzero),
3928    for a value of mode OUTMODE,
3929    with NARGS different arguments, passed as alternating rtx values
3930    and machine_modes to convert them to.
3931
3932    FN_TYPE should be LCT_NORMAL for `normal' calls, LCT_CONST for `const'
3933    calls, LCT_PURE for `pure' calls, LCT_CONST_MAKE_BLOCK for `const' calls
3934    which should be enclosed in REG_LIBCALL/REG_RETVAL notes,
3935    LCT_PURE_MAKE_BLOCK for `purep' calls which should be enclosed in
3936    REG_LIBCALL/REG_RETVAL notes with extra (use (memory (scratch)),
3937    or other LCT_ value for other types of library calls.  */
3938
3939 void
3940 emit_library_call (rtx orgfun, enum libcall_type fn_type,
3941                    enum machine_mode outmode, int nargs, ...)
3942 {
3943   va_list p;
3944
3945   va_start (p, nargs);
3946   emit_library_call_value_1 (0, orgfun, NULL_RTX, fn_type, outmode, nargs, p);
3947   va_end (p);
3948 }
3949 \f
3950 /* Like emit_library_call except that an extra argument, VALUE,
3951    comes second and says where to store the result.
3952    (If VALUE is zero, this function chooses a convenient way
3953    to return the value.
3954
3955    This function returns an rtx for where the value is to be found.
3956    If VALUE is nonzero, VALUE is returned.  */
3957
3958 rtx
3959 emit_library_call_value (rtx orgfun, rtx value,
3960                          enum libcall_type fn_type,
3961                          enum machine_mode outmode, int nargs, ...)
3962 {
3963   rtx result;
3964   va_list p;
3965
3966   va_start (p, nargs);
3967   result = emit_library_call_value_1 (1, orgfun, value, fn_type, outmode,
3968                                       nargs, p);
3969   va_end (p);
3970
3971   return result;
3972 }
3973 \f
3974 /* Store a single argument for a function call
3975    into the register or memory area where it must be passed.
3976    *ARG describes the argument value and where to pass it.
3977
3978    ARGBLOCK is the address of the stack-block for all the arguments,
3979    or 0 on a machine where arguments are pushed individually.
3980
3981    MAY_BE_ALLOCA nonzero says this could be a call to `alloca'
3982    so must be careful about how the stack is used.
3983
3984    VARIABLE_SIZE nonzero says that this was a variable-sized outgoing
3985    argument stack.  This is used if ACCUMULATE_OUTGOING_ARGS to indicate
3986    that we need not worry about saving and restoring the stack.
3987
3988    FNDECL is the declaration of the function we are calling.
3989
3990    Return nonzero if this arg should cause sibcall failure,
3991    zero otherwise.  */
3992
3993 static int
3994 store_one_arg (struct arg_data *arg, rtx argblock, int flags,
3995                int variable_size ATTRIBUTE_UNUSED, int reg_parm_stack_space)
3996 {
3997   tree pval = arg->tree_value;
3998   rtx reg = 0;
3999   int partial = 0;
4000   int used = 0;
4001   int i, lower_bound = 0, upper_bound = 0;
4002   int sibcall_failure = 0;
4003
4004   if (TREE_CODE (pval) == ERROR_MARK)
4005     return 1;
4006
4007   /* Push a new temporary level for any temporaries we make for
4008      this argument.  */
4009   push_temp_slots ();
4010
4011   if (ACCUMULATE_OUTGOING_ARGS && !(flags & ECF_SIBCALL))
4012     {
4013       /* If this is being stored into a pre-allocated, fixed-size, stack area,
4014          save any previous data at that location.  */
4015       if (argblock && ! variable_size && arg->stack)
4016         {
4017 #ifdef ARGS_GROW_DOWNWARD
4018           /* stack_slot is negative, but we want to index stack_usage_map
4019              with positive values.  */
4020           if (GET_CODE (XEXP (arg->stack_slot, 0)) == PLUS)
4021             upper_bound = -INTVAL (XEXP (XEXP (arg->stack_slot, 0), 1)) + 1;
4022           else
4023             upper_bound = 0;
4024
4025           lower_bound = upper_bound - arg->locate.size.constant;
4026 #else
4027           if (GET_CODE (XEXP (arg->stack_slot, 0)) == PLUS)
4028             lower_bound = INTVAL (XEXP (XEXP (arg->stack_slot, 0), 1));
4029           else
4030             lower_bound = 0;
4031
4032           upper_bound = lower_bound + arg->locate.size.constant;
4033 #endif
4034
4035           i = lower_bound;
4036           /* Don't worry about things in the fixed argument area;
4037              it has already been saved.  */
4038           if (i < reg_parm_stack_space)
4039             i = reg_parm_stack_space;
4040           while (i < upper_bound && stack_usage_map[i] == 0)
4041             i++;
4042
4043           if (i < upper_bound)
4044             {
4045               /* We need to make a save area.  */
4046               unsigned int size = arg->locate.size.constant * BITS_PER_UNIT;
4047               enum machine_mode save_mode = mode_for_size (size, MODE_INT, 1);
4048               rtx adr = memory_address (save_mode, XEXP (arg->stack_slot, 0));
4049               rtx stack_area = gen_rtx_MEM (save_mode, adr);
4050
4051               if (save_mode == BLKmode)
4052                 {
4053                   tree ot = TREE_TYPE (arg->tree_value);
4054                   tree nt = build_qualified_type (ot, (TYPE_QUALS (ot)
4055                                                        | TYPE_QUAL_CONST));
4056
4057                   arg->save_area = assign_temp (nt, 0, 1, 1);
4058                   preserve_temp_slots (arg->save_area);
4059                   emit_block_move (validize_mem (arg->save_area), stack_area,
4060                                    expr_size (arg->tree_value),
4061                                    BLOCK_OP_CALL_PARM);
4062                 }
4063               else
4064                 {
4065                   arg->save_area = gen_reg_rtx (save_mode);
4066                   emit_move_insn (arg->save_area, stack_area);
4067                 }
4068             }
4069         }
4070     }
4071
4072   /* If this isn't going to be placed on both the stack and in registers,
4073      set up the register and number of words.  */
4074   if (! arg->pass_on_stack)
4075     {
4076       if (flags & ECF_SIBCALL)
4077         reg = arg->tail_call_reg;
4078       else
4079         reg = arg->reg;
4080       partial = arg->partial;
4081     }
4082
4083   /* Being passed entirely in a register.  We shouldn't be called in
4084      this case.  */
4085   gcc_assert (reg == 0 || partial != 0);
4086
4087   /* If this arg needs special alignment, don't load the registers
4088      here.  */
4089   if (arg->n_aligned_regs != 0)
4090     reg = 0;
4091
4092   /* If this is being passed partially in a register, we can't evaluate
4093      it directly into its stack slot.  Otherwise, we can.  */
4094   if (arg->value == 0)
4095     {
4096       /* stack_arg_under_construction is nonzero if a function argument is
4097          being evaluated directly into the outgoing argument list and
4098          expand_call must take special action to preserve the argument list
4099          if it is called recursively.
4100
4101          For scalar function arguments stack_usage_map is sufficient to
4102          determine which stack slots must be saved and restored.  Scalar
4103          arguments in general have pass_on_stack == 0.
4104
4105          If this argument is initialized by a function which takes the
4106          address of the argument (a C++ constructor or a C function
4107          returning a BLKmode structure), then stack_usage_map is
4108          insufficient and expand_call must push the stack around the
4109          function call.  Such arguments have pass_on_stack == 1.
4110
4111          Note that it is always safe to set stack_arg_under_construction,
4112          but this generates suboptimal code if set when not needed.  */
4113
4114       if (arg->pass_on_stack)
4115         stack_arg_under_construction++;
4116
4117       arg->value = expand_expr (pval,
4118                                 (partial
4119                                  || TYPE_MODE (TREE_TYPE (pval)) != arg->mode)
4120                                 ? NULL_RTX : arg->stack,
4121                                 VOIDmode, EXPAND_STACK_PARM);
4122
4123       /* If we are promoting object (or for any other reason) the mode
4124          doesn't agree, convert the mode.  */
4125
4126       if (arg->mode != TYPE_MODE (TREE_TYPE (pval)))
4127         arg->value = convert_modes (arg->mode, TYPE_MODE (TREE_TYPE (pval)),
4128                                     arg->value, arg->unsignedp);
4129
4130       if (arg->pass_on_stack)
4131         stack_arg_under_construction--;
4132     }
4133
4134   /* Check for overlap with already clobbered argument area.  */
4135   if ((flags & ECF_SIBCALL)
4136       && MEM_P (arg->value)
4137       && mem_overlaps_already_clobbered_arg_p (XEXP (arg->value, 0),
4138                                                arg->locate.size.constant))
4139     sibcall_failure = 1;
4140
4141   /* Don't allow anything left on stack from computation
4142      of argument to alloca.  */
4143   if (flags & ECF_MAY_BE_ALLOCA)
4144     do_pending_stack_adjust ();
4145
4146   if (arg->value == arg->stack)
4147     /* If the value is already in the stack slot, we are done.  */
4148     ;
4149   else if (arg->mode != BLKmode)
4150     {
4151       int size;
4152
4153       /* Argument is a scalar, not entirely passed in registers.
4154          (If part is passed in registers, arg->partial says how much
4155          and emit_push_insn will take care of putting it there.)
4156
4157          Push it, and if its size is less than the
4158          amount of space allocated to it,
4159          also bump stack pointer by the additional space.
4160          Note that in C the default argument promotions
4161          will prevent such mismatches.  */
4162
4163       size = GET_MODE_SIZE (arg->mode);
4164       /* Compute how much space the push instruction will push.
4165          On many machines, pushing a byte will advance the stack
4166          pointer by a halfword.  */
4167 #ifdef PUSH_ROUNDING
4168       size = PUSH_ROUNDING (size);
4169 #endif
4170       used = size;
4171
4172       /* Compute how much space the argument should get:
4173          round up to a multiple of the alignment for arguments.  */
4174       if (none != FUNCTION_ARG_PADDING (arg->mode, TREE_TYPE (pval)))
4175         used = (((size + PARM_BOUNDARY / BITS_PER_UNIT - 1)
4176                  / (PARM_BOUNDARY / BITS_PER_UNIT))
4177                 * (PARM_BOUNDARY / BITS_PER_UNIT));
4178
4179       /* This isn't already where we want it on the stack, so put it there.
4180          This can either be done with push or copy insns.  */
4181       emit_push_insn (arg->value, arg->mode, TREE_TYPE (pval), NULL_RTX,
4182                       PARM_BOUNDARY, partial, reg, used - size, argblock,
4183                       ARGS_SIZE_RTX (arg->locate.offset), reg_parm_stack_space,
4184                       ARGS_SIZE_RTX (arg->locate.alignment_pad));
4185
4186       /* Unless this is a partially-in-register argument, the argument is now
4187          in the stack.  */
4188       if (partial == 0)
4189         arg->value = arg->stack;
4190     }
4191   else
4192     {
4193       /* BLKmode, at least partly to be pushed.  */
4194
4195       unsigned int parm_align;
4196       int excess;
4197       rtx size_rtx;
4198
4199       /* Pushing a nonscalar.
4200          If part is passed in registers, PARTIAL says how much
4201          and emit_push_insn will take care of putting it there.  */
4202
4203       /* Round its size up to a multiple
4204          of the allocation unit for arguments.  */
4205
4206       if (arg->locate.size.var != 0)
4207         {
4208           excess = 0;
4209           size_rtx = ARGS_SIZE_RTX (arg->locate.size);
4210         }
4211       else
4212         {
4213           /* PUSH_ROUNDING has no effect on us, because emit_push_insn
4214              for BLKmode is careful to avoid it.  */
4215           excess = (arg->locate.size.constant
4216                     - int_size_in_bytes (TREE_TYPE (pval))
4217                     + partial);
4218           size_rtx = expand_expr (size_in_bytes (TREE_TYPE (pval)),
4219                                   NULL_RTX, TYPE_MODE (sizetype), 0);
4220         }
4221
4222       parm_align = arg->locate.boundary;
4223
4224       /* When an argument is padded down, the block is aligned to
4225          PARM_BOUNDARY, but the actual argument isn't.  */
4226       if (FUNCTION_ARG_PADDING (arg->mode, TREE_TYPE (pval)) == downward)
4227         {
4228           if (arg->locate.size.var)
4229             parm_align = BITS_PER_UNIT;
4230           else if (excess)
4231             {
4232               unsigned int excess_align = (excess & -excess) * BITS_PER_UNIT;
4233               parm_align = MIN (parm_align, excess_align);
4234             }
4235         }
4236
4237       if ((flags & ECF_SIBCALL) && MEM_P (arg->value))
4238         {
4239           /* emit_push_insn might not work properly if arg->value and
4240              argblock + arg->locate.offset areas overlap.  */
4241           rtx x = arg->value;
4242           int i = 0;
4243
4244           if (XEXP (x, 0) == current_function_internal_arg_pointer
4245               || (GET_CODE (XEXP (x, 0)) == PLUS
4246                   && XEXP (XEXP (x, 0), 0) ==
4247                      current_function_internal_arg_pointer
4248                   && GET_CODE (XEXP (XEXP (x, 0), 1)) == CONST_INT))
4249             {
4250               if (XEXP (x, 0) != current_function_internal_arg_pointer)
4251                 i = INTVAL (XEXP (XEXP (x, 0), 1));
4252
4253               /* expand_call should ensure this.  */
4254               gcc_assert (!arg->locate.offset.var
4255                           && GET_CODE (size_rtx) == CONST_INT);
4256
4257               if (arg->locate.offset.constant > i)
4258                 {
4259                   if (arg->locate.offset.constant < i + INTVAL (size_rtx))
4260                     sibcall_failure = 1;
4261                 }
4262               else if (arg->locate.offset.constant < i)
4263                 {
4264                   if (i < arg->locate.offset.constant + INTVAL (size_rtx))
4265                     sibcall_failure = 1;
4266                 }
4267             }
4268         }
4269
4270       emit_push_insn (arg->value, arg->mode, TREE_TYPE (pval), size_rtx,
4271                       parm_align, partial, reg, excess, argblock,
4272                       ARGS_SIZE_RTX (arg->locate.offset), reg_parm_stack_space,
4273                       ARGS_SIZE_RTX (arg->locate.alignment_pad));
4274
4275       /* Unless this is a partially-in-register argument, the argument is now
4276          in the stack.
4277
4278          ??? Unlike the case above, in which we want the actual
4279          address of the data, so that we can load it directly into a
4280          register, here we want the address of the stack slot, so that
4281          it's properly aligned for word-by-word copying or something
4282          like that.  It's not clear that this is always correct.  */
4283       if (partial == 0)
4284         arg->value = arg->stack_slot;
4285     }
4286
4287   if (arg->reg && GET_CODE (arg->reg) == PARALLEL)
4288     {
4289       tree type = TREE_TYPE (arg->tree_value);
4290       arg->parallel_value
4291         = emit_group_load_into_temps (arg->reg, arg->value, type,
4292                                       int_size_in_bytes (type));
4293     }
4294
4295   /* Mark all slots this store used.  */
4296   if (ACCUMULATE_OUTGOING_ARGS && !(flags & ECF_SIBCALL)
4297       && argblock && ! variable_size && arg->stack)
4298     for (i = lower_bound; i < upper_bound; i++)
4299       stack_usage_map[i] = 1;
4300
4301   /* Once we have pushed something, pops can't safely
4302      be deferred during the rest of the arguments.  */
4303   NO_DEFER_POP;
4304
4305   /* Free any temporary slots made in processing this argument.  Show
4306      that we might have taken the address of something and pushed that
4307      as an operand.  */
4308   preserve_temp_slots (NULL_RTX);
4309   free_temp_slots ();
4310   pop_temp_slots ();
4311
4312   return sibcall_failure;
4313 }
4314
4315 /* Nonzero if we do not know how to pass TYPE solely in registers.  */
4316
4317 bool
4318 must_pass_in_stack_var_size (enum machine_mode mode ATTRIBUTE_UNUSED,
4319                              tree type)
4320 {
4321   if (!type)
4322     return false;
4323
4324   /* If the type has variable size...  */
4325   if (TREE_CODE (TYPE_SIZE (type)) != INTEGER_CST)
4326     return true;
4327
4328   /* If the type is marked as addressable (it is required
4329      to be constructed into the stack)...  */
4330   if (TREE_ADDRESSABLE (type))
4331     return true;
4332
4333   return false;
4334 }
4335
4336 /* Another version of the TARGET_MUST_PASS_IN_STACK hook.  This one
4337    takes trailing padding of a structure into account.  */
4338 /* ??? Should be able to merge these two by examining BLOCK_REG_PADDING.  */
4339
4340 bool
4341 must_pass_in_stack_var_size_or_pad (enum machine_mode mode, tree type)
4342 {
4343   if (!type)
4344     return false;
4345
4346   /* If the type has variable size...  */
4347   if (TREE_CODE (TYPE_SIZE (type)) != INTEGER_CST)
4348     return true;
4349
4350   /* If the type is marked as addressable (it is required
4351      to be constructed into the stack)...  */
4352   if (TREE_ADDRESSABLE (type))
4353     return true;
4354
4355   /* If the padding and mode of the type is such that a copy into
4356      a register would put it into the wrong part of the register.  */
4357   if (mode == BLKmode
4358       && int_size_in_bytes (type) % (PARM_BOUNDARY / BITS_PER_UNIT)
4359       && (FUNCTION_ARG_PADDING (mode, type)
4360           == (BYTES_BIG_ENDIAN ? upward : downward)))
4361     return true;
4362
4363   return false;
4364 }