OSDN Git Service

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