OSDN Git Service

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