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