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