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