OSDN Git Service

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