OSDN Git Service

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