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