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