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