PR tree-optimization/50802
[official-gcc.git] / gcc / calls.c
blob316f1481ca0b68a58e57f19835a9e527d1605690
1 /* Convert function calls to rtl insns, for GNU C compiler.
2 Copyright (C) 1989, 1992, 1993, 1994, 1995, 1996, 1997, 1998,
3 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010,
4 2011 Free Software Foundation, Inc.
6 This file is part of GCC.
8 GCC is free software; you can redistribute it and/or modify it under
9 the terms of the GNU General Public License as published by the Free
10 Software Foundation; either version 3, or (at your option) any later
11 version.
13 GCC is distributed in the hope that it will be useful, but WITHOUT ANY
14 WARRANTY; without even the implied warranty of MERCHANTABILITY or
15 FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
16 for more details.
18 You should have received a copy of the GNU General Public License
19 along with GCC; see the file COPYING3. If not see
20 <http://www.gnu.org/licenses/>. */
22 #include "config.h"
23 #include "system.h"
24 #include "coretypes.h"
25 #include "tm.h"
26 #include "rtl.h"
27 #include "tree.h"
28 #include "gimple.h"
29 #include "flags.h"
30 #include "expr.h"
31 #include "optabs.h"
32 #include "libfuncs.h"
33 #include "function.h"
34 #include "regs.h"
35 #include "diagnostic-core.h"
36 #include "output.h"
37 #include "tm_p.h"
38 #include "timevar.h"
39 #include "sbitmap.h"
40 #include "langhooks.h"
41 #include "target.h"
42 #include "cgraph.h"
43 #include "except.h"
44 #include "dbgcnt.h"
45 #include "tree-flow.h"
47 /* Like PREFERRED_STACK_BOUNDARY but in units of bytes, not bits. */
48 #define STACK_BYTES (PREFERRED_STACK_BOUNDARY / BITS_PER_UNIT)
50 /* Data structure and subroutines used within expand_call. */
52 struct arg_data
54 /* Tree node for this argument. */
55 tree tree_value;
56 /* Mode for value; TYPE_MODE unless promoted. */
57 enum machine_mode mode;
58 /* Current RTL value for argument, or 0 if it isn't precomputed. */
59 rtx value;
60 /* Initially-compute RTL value for argument; only for const functions. */
61 rtx initial_value;
62 /* Register to pass this argument in, 0 if passed on stack, or an
63 PARALLEL if the arg is to be copied into multiple non-contiguous
64 registers. */
65 rtx reg;
66 /* Register to pass this argument in when generating tail call sequence.
67 This is not the same register as for normal calls on machines with
68 register windows. */
69 rtx tail_call_reg;
70 /* If REG is a PARALLEL, this is a copy of VALUE pulled into the correct
71 form for emit_group_move. */
72 rtx parallel_value;
73 /* If REG was promoted from the actual mode of the argument expression,
74 indicates whether the promotion is sign- or zero-extended. */
75 int unsignedp;
76 /* Number of bytes to put in registers. 0 means put the whole arg
77 in registers. Also 0 if not passed in registers. */
78 int partial;
79 /* Nonzero if argument must be passed on stack.
80 Note that some arguments may be passed on the stack
81 even though pass_on_stack is zero, just because FUNCTION_ARG says so.
82 pass_on_stack identifies arguments that *cannot* go in registers. */
83 int pass_on_stack;
84 /* Some fields packaged up for locate_and_pad_parm. */
85 struct locate_and_pad_arg_data locate;
86 /* Location on the stack at which parameter should be stored. The store
87 has already been done if STACK == VALUE. */
88 rtx stack;
89 /* Location on the stack of the start of this argument slot. This can
90 differ from STACK if this arg pads downward. This location is known
91 to be aligned to TARGET_FUNCTION_ARG_BOUNDARY. */
92 rtx stack_slot;
93 /* Place that this stack area has been saved, if needed. */
94 rtx save_area;
95 /* If an argument's alignment does not permit direct copying into registers,
96 copy in smaller-sized pieces into pseudos. These are stored in a
97 block pointed to by this field. The next field says how many
98 word-sized pseudos we made. */
99 rtx *aligned_regs;
100 int n_aligned_regs;
103 /* A vector of one char per byte of stack space. A byte if nonzero if
104 the corresponding stack location has been used.
105 This vector is used to prevent a function call within an argument from
106 clobbering any stack already set up. */
107 static char *stack_usage_map;
109 /* Size of STACK_USAGE_MAP. */
110 static int highest_outgoing_arg_in_use;
112 /* A bitmap of virtual-incoming stack space. Bit is set if the corresponding
113 stack location's tail call argument has been already stored into the stack.
114 This bitmap is used to prevent sibling call optimization if function tries
115 to use parent's incoming argument slots when they have been already
116 overwritten with tail call arguments. */
117 static sbitmap stored_args_map;
119 /* stack_arg_under_construction is nonzero when an argument may be
120 initialized with a constructor call (including a C function that
121 returns a BLKmode struct) and expand_call must take special action
122 to make sure the object being constructed does not overlap the
123 argument list for the constructor call. */
124 static int stack_arg_under_construction;
126 static void emit_call_1 (rtx, tree, tree, tree, HOST_WIDE_INT, HOST_WIDE_INT,
127 HOST_WIDE_INT, rtx, rtx, int, rtx, int,
128 cumulative_args_t);
129 static void precompute_register_parameters (int, struct arg_data *, int *);
130 static int store_one_arg (struct arg_data *, rtx, int, int, int);
131 static void store_unaligned_arguments_into_pseudos (struct arg_data *, int);
132 static int finalize_must_preallocate (int, int, struct arg_data *,
133 struct args_size *);
134 static void precompute_arguments (int, struct arg_data *);
135 static int compute_argument_block_size (int, struct args_size *, tree, tree, int);
136 static void initialize_argument_information (int, struct arg_data *,
137 struct args_size *, int,
138 tree, tree,
139 tree, tree, cumulative_args_t, int,
140 rtx *, int *, int *, int *,
141 bool *, bool);
142 static void compute_argument_addresses (struct arg_data *, rtx, int);
143 static rtx rtx_for_function_call (tree, tree);
144 static void load_register_parameters (struct arg_data *, int, rtx *, int,
145 int, int *);
146 static rtx emit_library_call_value_1 (int, rtx, rtx, enum libcall_type,
147 enum machine_mode, int, va_list);
148 static int special_function_p (const_tree, int);
149 static int check_sibcall_argument_overlap_1 (rtx);
150 static int check_sibcall_argument_overlap (rtx, struct arg_data *, int);
152 static int combine_pending_stack_adjustment_and_call (int, struct args_size *,
153 unsigned int);
154 static tree split_complex_types (tree);
156 #ifdef REG_PARM_STACK_SPACE
157 static rtx save_fixed_argument_area (int, rtx, int *, int *);
158 static void restore_fixed_argument_area (rtx, rtx, int, int);
159 #endif
161 /* Force FUNEXP into a form suitable for the address of a CALL,
162 and return that as an rtx. Also load the static chain register
163 if FNDECL is a nested function.
165 CALL_FUSAGE points to a variable holding the prospective
166 CALL_INSN_FUNCTION_USAGE information. */
169 prepare_call_address (tree fndecl, rtx funexp, rtx static_chain_value,
170 rtx *call_fusage, int reg_parm_seen, int sibcallp)
172 /* Make a valid memory address and copy constants through pseudo-regs,
173 but not for a constant address if -fno-function-cse. */
174 if (GET_CODE (funexp) != SYMBOL_REF)
175 /* If we are using registers for parameters, force the
176 function address into a register now. */
177 funexp = ((reg_parm_seen
178 && targetm.small_register_classes_for_mode_p (FUNCTION_MODE))
179 ? force_not_mem (memory_address (FUNCTION_MODE, funexp))
180 : memory_address (FUNCTION_MODE, funexp));
181 else if (! sibcallp)
183 #ifndef NO_FUNCTION_CSE
184 if (optimize && ! flag_no_function_cse)
185 funexp = force_reg (Pmode, funexp);
186 #endif
189 if (static_chain_value != 0)
191 rtx chain;
193 gcc_assert (fndecl);
194 chain = targetm.calls.static_chain (fndecl, false);
195 static_chain_value = convert_memory_address (Pmode, static_chain_value);
197 emit_move_insn (chain, static_chain_value);
198 if (REG_P (chain))
199 use_reg (call_fusage, chain);
202 return funexp;
205 /* Generate instructions to call function FUNEXP,
206 and optionally pop the results.
207 The CALL_INSN is the first insn generated.
209 FNDECL is the declaration node of the function. This is given to the
210 hook TARGET_RETURN_POPS_ARGS to determine whether this function pops
211 its own args.
213 FUNTYPE is the data type of the function. This is given to the hook
214 TARGET_RETURN_POPS_ARGS to determine whether this function pops its
215 own args. We used to allow an identifier for library functions, but
216 that doesn't work when the return type is an aggregate type and the
217 calling convention says that the pointer to this aggregate is to be
218 popped by the callee.
220 STACK_SIZE is the number of bytes of arguments on the stack,
221 ROUNDED_STACK_SIZE is that number rounded up to
222 PREFERRED_STACK_BOUNDARY; zero if the size is variable. This is
223 both to put into the call insn and to generate explicit popping
224 code if necessary.
226 STRUCT_VALUE_SIZE is the number of bytes wanted in a structure value.
227 It is zero if this call doesn't want a structure value.
229 NEXT_ARG_REG is the rtx that results from executing
230 targetm.calls.function_arg (&args_so_far, VOIDmode, void_type_node, true)
231 just after all the args have had their registers assigned.
232 This could be whatever you like, but normally it is the first
233 arg-register beyond those used for args in this call,
234 or 0 if all the arg-registers are used in this call.
235 It is passed on to `gen_call' so you can put this info in the call insn.
237 VALREG is a hard register in which a value is returned,
238 or 0 if the call does not return a value.
240 OLD_INHIBIT_DEFER_POP is the value that `inhibit_defer_pop' had before
241 the args to this call were processed.
242 We restore `inhibit_defer_pop' to that value.
244 CALL_FUSAGE is either empty or an EXPR_LIST of USE expressions that
245 denote registers used by the called function. */
247 static void
248 emit_call_1 (rtx funexp, tree fntree ATTRIBUTE_UNUSED, tree fndecl ATTRIBUTE_UNUSED,
249 tree funtype ATTRIBUTE_UNUSED,
250 HOST_WIDE_INT stack_size ATTRIBUTE_UNUSED,
251 HOST_WIDE_INT rounded_stack_size,
252 HOST_WIDE_INT struct_value_size ATTRIBUTE_UNUSED,
253 rtx next_arg_reg ATTRIBUTE_UNUSED, rtx valreg,
254 int old_inhibit_defer_pop, rtx call_fusage, int ecf_flags,
255 cumulative_args_t args_so_far ATTRIBUTE_UNUSED)
257 rtx rounded_stack_size_rtx = GEN_INT (rounded_stack_size);
258 rtx call_insn, call, funmem;
259 int already_popped = 0;
260 HOST_WIDE_INT n_popped
261 = targetm.calls.return_pops_args (fndecl, funtype, stack_size);
263 #ifdef CALL_POPS_ARGS
264 n_popped += CALL_POPS_ARGS (*get_cumulative_args (args_so_far));
265 #endif
267 /* Ensure address is valid. SYMBOL_REF is already valid, so no need,
268 and we don't want to load it into a register as an optimization,
269 because prepare_call_address already did it if it should be done. */
270 if (GET_CODE (funexp) != SYMBOL_REF)
271 funexp = memory_address (FUNCTION_MODE, funexp);
273 funmem = gen_rtx_MEM (FUNCTION_MODE, funexp);
274 if (fndecl && TREE_CODE (fndecl) == FUNCTION_DECL)
276 tree t = fndecl;
278 /* Although a built-in FUNCTION_DECL and its non-__builtin
279 counterpart compare equal and get a shared mem_attrs, they
280 produce different dump output in compare-debug compilations,
281 if an entry gets garbage collected in one compilation, then
282 adds a different (but equivalent) entry, while the other
283 doesn't run the garbage collector at the same spot and then
284 shares the mem_attr with the equivalent entry. */
285 if (DECL_BUILT_IN_CLASS (t) == BUILT_IN_NORMAL)
287 tree t2 = builtin_decl_explicit (DECL_FUNCTION_CODE (t));
288 if (t2)
289 t = t2;
292 set_mem_expr (funmem, t);
294 else if (fntree)
295 set_mem_expr (funmem, build_simple_mem_ref (CALL_EXPR_FN (fntree)));
297 #if defined (HAVE_sibcall_pop) && defined (HAVE_sibcall_value_pop)
298 if ((ecf_flags & ECF_SIBCALL)
299 && HAVE_sibcall_pop && HAVE_sibcall_value_pop
300 && (n_popped > 0 || stack_size == 0))
302 rtx n_pop = GEN_INT (n_popped);
303 rtx pat;
305 /* If this subroutine pops its own args, record that in the call insn
306 if possible, for the sake of frame pointer elimination. */
308 if (valreg)
309 pat = GEN_SIBCALL_VALUE_POP (valreg, funmem, rounded_stack_size_rtx,
310 next_arg_reg, n_pop);
311 else
312 pat = GEN_SIBCALL_POP (funmem, rounded_stack_size_rtx, next_arg_reg,
313 n_pop);
315 emit_call_insn (pat);
316 already_popped = 1;
318 else
319 #endif
321 #if defined (HAVE_call_pop) && defined (HAVE_call_value_pop)
322 /* If the target has "call" or "call_value" insns, then prefer them
323 if no arguments are actually popped. If the target does not have
324 "call" or "call_value" insns, then we must use the popping versions
325 even if the call has no arguments to pop. */
326 #if defined (HAVE_call) && defined (HAVE_call_value)
327 if (HAVE_call && HAVE_call_value && HAVE_call_pop && HAVE_call_value_pop
328 && n_popped > 0)
329 #else
330 if (HAVE_call_pop && HAVE_call_value_pop)
331 #endif
333 rtx n_pop = GEN_INT (n_popped);
334 rtx pat;
336 /* If this subroutine pops its own args, record that in the call insn
337 if possible, for the sake of frame pointer elimination. */
339 if (valreg)
340 pat = GEN_CALL_VALUE_POP (valreg, funmem, rounded_stack_size_rtx,
341 next_arg_reg, n_pop);
342 else
343 pat = GEN_CALL_POP (funmem, rounded_stack_size_rtx, next_arg_reg,
344 n_pop);
346 emit_call_insn (pat);
347 already_popped = 1;
349 else
350 #endif
352 #if defined (HAVE_sibcall) && defined (HAVE_sibcall_value)
353 if ((ecf_flags & ECF_SIBCALL)
354 && HAVE_sibcall && HAVE_sibcall_value)
356 if (valreg)
357 emit_call_insn (GEN_SIBCALL_VALUE (valreg, funmem,
358 rounded_stack_size_rtx,
359 next_arg_reg, NULL_RTX));
360 else
361 emit_call_insn (GEN_SIBCALL (funmem, rounded_stack_size_rtx,
362 next_arg_reg,
363 GEN_INT (struct_value_size)));
365 else
366 #endif
368 #if defined (HAVE_call) && defined (HAVE_call_value)
369 if (HAVE_call && HAVE_call_value)
371 if (valreg)
372 emit_call_insn (GEN_CALL_VALUE (valreg, funmem, rounded_stack_size_rtx,
373 next_arg_reg, NULL_RTX));
374 else
375 emit_call_insn (GEN_CALL (funmem, rounded_stack_size_rtx, next_arg_reg,
376 GEN_INT (struct_value_size)));
378 else
379 #endif
380 gcc_unreachable ();
382 /* Find the call we just emitted. */
383 call_insn = last_call_insn ();
385 /* Some target create a fresh MEM instead of reusing the one provided
386 above. Set its MEM_EXPR. */
387 call = PATTERN (call_insn);
388 if (GET_CODE (call) == PARALLEL)
389 call = XVECEXP (call, 0, 0);
390 if (GET_CODE (call) == SET)
391 call = SET_SRC (call);
392 if (GET_CODE (call) == CALL
393 && MEM_P (XEXP (call, 0))
394 && MEM_EXPR (XEXP (call, 0)) == NULL_TREE
395 && MEM_EXPR (funmem) != NULL_TREE)
396 set_mem_expr (XEXP (call, 0), MEM_EXPR (funmem));
398 /* Put the register usage information there. */
399 add_function_usage_to (call_insn, call_fusage);
401 /* If this is a const call, then set the insn's unchanging bit. */
402 if (ecf_flags & ECF_CONST)
403 RTL_CONST_CALL_P (call_insn) = 1;
405 /* If this is a pure call, then set the insn's unchanging bit. */
406 if (ecf_flags & ECF_PURE)
407 RTL_PURE_CALL_P (call_insn) = 1;
409 /* If this is a const call, then set the insn's unchanging bit. */
410 if (ecf_flags & ECF_LOOPING_CONST_OR_PURE)
411 RTL_LOOPING_CONST_OR_PURE_CALL_P (call_insn) = 1;
413 /* Create a nothrow REG_EH_REGION note, if needed. */
414 make_reg_eh_region_note (call_insn, ecf_flags, 0);
416 if (ecf_flags & ECF_NORETURN)
417 add_reg_note (call_insn, REG_NORETURN, const0_rtx);
419 if (ecf_flags & ECF_RETURNS_TWICE)
421 add_reg_note (call_insn, REG_SETJMP, const0_rtx);
422 cfun->calls_setjmp = 1;
425 SIBLING_CALL_P (call_insn) = ((ecf_flags & ECF_SIBCALL) != 0);
427 /* Restore this now, so that we do defer pops for this call's args
428 if the context of the call as a whole permits. */
429 inhibit_defer_pop = old_inhibit_defer_pop;
431 if (n_popped > 0)
433 if (!already_popped)
434 CALL_INSN_FUNCTION_USAGE (call_insn)
435 = gen_rtx_EXPR_LIST (VOIDmode,
436 gen_rtx_CLOBBER (VOIDmode, stack_pointer_rtx),
437 CALL_INSN_FUNCTION_USAGE (call_insn));
438 rounded_stack_size -= n_popped;
439 rounded_stack_size_rtx = GEN_INT (rounded_stack_size);
440 stack_pointer_delta -= n_popped;
442 add_reg_note (call_insn, REG_ARGS_SIZE, GEN_INT (stack_pointer_delta));
444 /* If popup is needed, stack realign must use DRAP */
445 if (SUPPORTS_STACK_ALIGNMENT)
446 crtl->need_drap = true;
449 if (!ACCUMULATE_OUTGOING_ARGS)
451 /* If returning from the subroutine does not automatically pop the args,
452 we need an instruction to pop them sooner or later.
453 Perhaps do it now; perhaps just record how much space to pop later.
455 If returning from the subroutine does pop the args, indicate that the
456 stack pointer will be changed. */
458 if (rounded_stack_size != 0)
460 if (ecf_flags & ECF_NORETURN)
461 /* Just pretend we did the pop. */
462 stack_pointer_delta -= rounded_stack_size;
463 else if (flag_defer_pop && inhibit_defer_pop == 0
464 && ! (ecf_flags & (ECF_CONST | ECF_PURE)))
465 pending_stack_adjust += rounded_stack_size;
466 else
467 adjust_stack (rounded_stack_size_rtx);
470 /* When we accumulate outgoing args, we must avoid any stack manipulations.
471 Restore the stack pointer to its original value now. Usually
472 ACCUMULATE_OUTGOING_ARGS targets don't get here, but there are exceptions.
473 On i386 ACCUMULATE_OUTGOING_ARGS can be enabled on demand, and
474 popping variants of functions exist as well.
476 ??? We may optimize similar to defer_pop above, but it is
477 probably not worthwhile.
479 ??? It will be worthwhile to enable combine_stack_adjustments even for
480 such machines. */
481 else if (n_popped)
482 anti_adjust_stack (GEN_INT (n_popped));
485 /* Determine if the function identified by NAME and FNDECL is one with
486 special properties we wish to know about.
488 For example, if the function might return more than one time (setjmp), then
489 set RETURNS_TWICE to a nonzero value.
491 Similarly set NORETURN if the function is in the longjmp family.
493 Set MAY_BE_ALLOCA for any memory allocation function that might allocate
494 space from the stack such as alloca. */
496 static int
497 special_function_p (const_tree fndecl, int flags)
499 if (fndecl && DECL_NAME (fndecl)
500 && IDENTIFIER_LENGTH (DECL_NAME (fndecl)) <= 17
501 /* Exclude functions not at the file scope, or not `extern',
502 since they are not the magic functions we would otherwise
503 think they are.
504 FIXME: this should be handled with attributes, not with this
505 hacky imitation of DECL_ASSEMBLER_NAME. It's (also) wrong
506 because you can declare fork() inside a function if you
507 wish. */
508 && (DECL_CONTEXT (fndecl) == NULL_TREE
509 || TREE_CODE (DECL_CONTEXT (fndecl)) == TRANSLATION_UNIT_DECL)
510 && TREE_PUBLIC (fndecl))
512 const char *name = IDENTIFIER_POINTER (DECL_NAME (fndecl));
513 const char *tname = name;
515 /* We assume that alloca will always be called by name. It
516 makes no sense to pass it as a pointer-to-function to
517 anything that does not understand its behavior. */
518 if (((IDENTIFIER_LENGTH (DECL_NAME (fndecl)) == 6
519 && name[0] == 'a'
520 && ! strcmp (name, "alloca"))
521 || (IDENTIFIER_LENGTH (DECL_NAME (fndecl)) == 16
522 && name[0] == '_'
523 && ! strcmp (name, "__builtin_alloca"))))
524 flags |= ECF_MAY_BE_ALLOCA;
526 /* Disregard prefix _, __, __x or __builtin_. */
527 if (name[0] == '_')
529 if (name[1] == '_'
530 && name[2] == 'b'
531 && !strncmp (name + 3, "uiltin_", 7))
532 tname += 10;
533 else if (name[1] == '_' && name[2] == 'x')
534 tname += 3;
535 else if (name[1] == '_')
536 tname += 2;
537 else
538 tname += 1;
541 if (tname[0] == 's')
543 if ((tname[1] == 'e'
544 && (! strcmp (tname, "setjmp")
545 || ! strcmp (tname, "setjmp_syscall")))
546 || (tname[1] == 'i'
547 && ! strcmp (tname, "sigsetjmp"))
548 || (tname[1] == 'a'
549 && ! strcmp (tname, "savectx")))
550 flags |= ECF_RETURNS_TWICE;
552 if (tname[1] == 'i'
553 && ! strcmp (tname, "siglongjmp"))
554 flags |= ECF_NORETURN;
556 else if ((tname[0] == 'q' && tname[1] == 's'
557 && ! strcmp (tname, "qsetjmp"))
558 || (tname[0] == 'v' && tname[1] == 'f'
559 && ! strcmp (tname, "vfork"))
560 || (tname[0] == 'g' && tname[1] == 'e'
561 && !strcmp (tname, "getcontext")))
562 flags |= ECF_RETURNS_TWICE;
564 else if (tname[0] == 'l' && tname[1] == 'o'
565 && ! strcmp (tname, "longjmp"))
566 flags |= ECF_NORETURN;
569 return flags;
572 /* Return nonzero when FNDECL represents a call to setjmp. */
575 setjmp_call_p (const_tree fndecl)
577 if (DECL_IS_RETURNS_TWICE (fndecl))
578 return ECF_RETURNS_TWICE;
579 return special_function_p (fndecl, 0) & ECF_RETURNS_TWICE;
583 /* Return true if STMT is an alloca call. */
585 bool
586 gimple_alloca_call_p (const_gimple stmt)
588 tree fndecl;
590 if (!is_gimple_call (stmt))
591 return false;
593 fndecl = gimple_call_fndecl (stmt);
594 if (fndecl && (special_function_p (fndecl, 0) & ECF_MAY_BE_ALLOCA))
595 return true;
597 return false;
600 /* Return true when exp contains alloca call. */
602 bool
603 alloca_call_p (const_tree exp)
605 if (TREE_CODE (exp) == CALL_EXPR
606 && TREE_CODE (CALL_EXPR_FN (exp)) == ADDR_EXPR
607 && (TREE_CODE (TREE_OPERAND (CALL_EXPR_FN (exp), 0)) == FUNCTION_DECL)
608 && (special_function_p (TREE_OPERAND (CALL_EXPR_FN (exp), 0), 0)
609 & ECF_MAY_BE_ALLOCA))
610 return true;
611 return false;
614 /* Return TRUE if FNDECL is either a TM builtin or a TM cloned
615 function. Return FALSE otherwise. */
617 static bool
618 is_tm_builtin (const_tree fndecl)
620 if (fndecl == NULL)
621 return false;
623 if (decl_is_tm_clone (fndecl))
624 return true;
626 if (DECL_BUILT_IN_CLASS (fndecl) == BUILT_IN_NORMAL)
628 switch (DECL_FUNCTION_CODE (fndecl))
630 case BUILT_IN_TM_COMMIT:
631 case BUILT_IN_TM_COMMIT_EH:
632 case BUILT_IN_TM_ABORT:
633 case BUILT_IN_TM_IRREVOCABLE:
634 case BUILT_IN_TM_GETTMCLONE_IRR:
635 case BUILT_IN_TM_MEMCPY:
636 case BUILT_IN_TM_MEMMOVE:
637 case BUILT_IN_TM_MEMSET:
638 CASE_BUILT_IN_TM_STORE (1):
639 CASE_BUILT_IN_TM_STORE (2):
640 CASE_BUILT_IN_TM_STORE (4):
641 CASE_BUILT_IN_TM_STORE (8):
642 CASE_BUILT_IN_TM_STORE (FLOAT):
643 CASE_BUILT_IN_TM_STORE (DOUBLE):
644 CASE_BUILT_IN_TM_STORE (LDOUBLE):
645 CASE_BUILT_IN_TM_STORE (M64):
646 CASE_BUILT_IN_TM_STORE (M128):
647 CASE_BUILT_IN_TM_STORE (M256):
648 CASE_BUILT_IN_TM_LOAD (1):
649 CASE_BUILT_IN_TM_LOAD (2):
650 CASE_BUILT_IN_TM_LOAD (4):
651 CASE_BUILT_IN_TM_LOAD (8):
652 CASE_BUILT_IN_TM_LOAD (FLOAT):
653 CASE_BUILT_IN_TM_LOAD (DOUBLE):
654 CASE_BUILT_IN_TM_LOAD (LDOUBLE):
655 CASE_BUILT_IN_TM_LOAD (M64):
656 CASE_BUILT_IN_TM_LOAD (M128):
657 CASE_BUILT_IN_TM_LOAD (M256):
658 case BUILT_IN_TM_LOG:
659 case BUILT_IN_TM_LOG_1:
660 case BUILT_IN_TM_LOG_2:
661 case BUILT_IN_TM_LOG_4:
662 case BUILT_IN_TM_LOG_8:
663 case BUILT_IN_TM_LOG_FLOAT:
664 case BUILT_IN_TM_LOG_DOUBLE:
665 case BUILT_IN_TM_LOG_LDOUBLE:
666 case BUILT_IN_TM_LOG_M64:
667 case BUILT_IN_TM_LOG_M128:
668 case BUILT_IN_TM_LOG_M256:
669 return true;
670 default:
671 break;
674 return false;
677 /* Detect flags (function attributes) from the function decl or type node. */
680 flags_from_decl_or_type (const_tree exp)
682 int flags = 0;
684 if (DECL_P (exp))
686 /* The function exp may have the `malloc' attribute. */
687 if (DECL_IS_MALLOC (exp))
688 flags |= ECF_MALLOC;
690 /* The function exp may have the `returns_twice' attribute. */
691 if (DECL_IS_RETURNS_TWICE (exp))
692 flags |= ECF_RETURNS_TWICE;
694 /* Process the pure and const attributes. */
695 if (TREE_READONLY (exp))
696 flags |= ECF_CONST;
697 if (DECL_PURE_P (exp))
698 flags |= ECF_PURE;
699 if (DECL_LOOPING_CONST_OR_PURE_P (exp))
700 flags |= ECF_LOOPING_CONST_OR_PURE;
702 if (DECL_IS_NOVOPS (exp))
703 flags |= ECF_NOVOPS;
704 if (lookup_attribute ("leaf", DECL_ATTRIBUTES (exp)))
705 flags |= ECF_LEAF;
707 if (TREE_NOTHROW (exp))
708 flags |= ECF_NOTHROW;
710 if (flag_tm)
712 if (is_tm_builtin (exp))
713 flags |= ECF_TM_BUILTIN;
714 else if ((flags & ECF_CONST) != 0
715 || lookup_attribute ("transaction_pure",
716 TYPE_ATTRIBUTES (TREE_TYPE (exp))))
717 flags |= ECF_TM_PURE;
720 flags = special_function_p (exp, flags);
722 else if (TYPE_P (exp))
724 if (TYPE_READONLY (exp))
725 flags |= ECF_CONST;
727 if (flag_tm
728 && ((flags & ECF_CONST) != 0
729 || lookup_attribute ("transaction_pure", TYPE_ATTRIBUTES (exp))))
730 flags |= ECF_TM_PURE;
733 if (TREE_THIS_VOLATILE (exp))
735 flags |= ECF_NORETURN;
736 if (flags & (ECF_CONST|ECF_PURE))
737 flags |= ECF_LOOPING_CONST_OR_PURE;
740 return flags;
743 /* Detect flags from a CALL_EXPR. */
746 call_expr_flags (const_tree t)
748 int flags;
749 tree decl = get_callee_fndecl (t);
751 if (decl)
752 flags = flags_from_decl_or_type (decl);
753 else
755 t = TREE_TYPE (CALL_EXPR_FN (t));
756 if (t && TREE_CODE (t) == POINTER_TYPE)
757 flags = flags_from_decl_or_type (TREE_TYPE (t));
758 else
759 flags = 0;
762 return flags;
765 /* Precompute all register parameters as described by ARGS, storing values
766 into fields within the ARGS array.
768 NUM_ACTUALS indicates the total number elements in the ARGS array.
770 Set REG_PARM_SEEN if we encounter a register parameter. */
772 static void
773 precompute_register_parameters (int num_actuals, struct arg_data *args,
774 int *reg_parm_seen)
776 int i;
778 *reg_parm_seen = 0;
780 for (i = 0; i < num_actuals; i++)
781 if (args[i].reg != 0 && ! args[i].pass_on_stack)
783 *reg_parm_seen = 1;
785 if (args[i].value == 0)
787 push_temp_slots ();
788 args[i].value = expand_normal (args[i].tree_value);
789 preserve_temp_slots (args[i].value);
790 pop_temp_slots ();
793 /* If we are to promote the function arg to a wider mode,
794 do it now. */
796 if (args[i].mode != TYPE_MODE (TREE_TYPE (args[i].tree_value)))
797 args[i].value
798 = convert_modes (args[i].mode,
799 TYPE_MODE (TREE_TYPE (args[i].tree_value)),
800 args[i].value, args[i].unsignedp);
802 /* If the value is a non-legitimate constant, force it into a
803 pseudo now. TLS symbols sometimes need a call to resolve. */
804 if (CONSTANT_P (args[i].value)
805 && !targetm.legitimate_constant_p (args[i].mode, args[i].value))
806 args[i].value = force_reg (args[i].mode, args[i].value);
808 /* If we're going to have to load the value by parts, pull the
809 parts into pseudos. The part extraction process can involve
810 non-trivial computation. */
811 if (GET_CODE (args[i].reg) == PARALLEL)
813 tree type = TREE_TYPE (args[i].tree_value);
814 args[i].parallel_value
815 = emit_group_load_into_temps (args[i].reg, args[i].value,
816 type, int_size_in_bytes (type));
819 /* If the value is expensive, and we are inside an appropriately
820 short loop, put the value into a pseudo and then put the pseudo
821 into the hard reg.
823 For small register classes, also do this if this call uses
824 register parameters. This is to avoid reload conflicts while
825 loading the parameters registers. */
827 else if ((! (REG_P (args[i].value)
828 || (GET_CODE (args[i].value) == SUBREG
829 && REG_P (SUBREG_REG (args[i].value)))))
830 && args[i].mode != BLKmode
831 && set_src_cost (args[i].value, optimize_insn_for_speed_p ())
832 > COSTS_N_INSNS (1)
833 && ((*reg_parm_seen
834 && targetm.small_register_classes_for_mode_p (args[i].mode))
835 || optimize))
836 args[i].value = copy_to_mode_reg (args[i].mode, args[i].value);
840 #ifdef REG_PARM_STACK_SPACE
842 /* The argument list is the property of the called routine and it
843 may clobber it. If the fixed area has been used for previous
844 parameters, we must save and restore it. */
846 static rtx
847 save_fixed_argument_area (int reg_parm_stack_space, rtx argblock, int *low_to_save, int *high_to_save)
849 int low;
850 int high;
852 /* Compute the boundary of the area that needs to be saved, if any. */
853 high = reg_parm_stack_space;
854 #ifdef ARGS_GROW_DOWNWARD
855 high += 1;
856 #endif
857 if (high > highest_outgoing_arg_in_use)
858 high = highest_outgoing_arg_in_use;
860 for (low = 0; low < high; low++)
861 if (stack_usage_map[low] != 0)
863 int num_to_save;
864 enum machine_mode save_mode;
865 int delta;
866 rtx stack_area;
867 rtx save_area;
869 while (stack_usage_map[--high] == 0)
872 *low_to_save = low;
873 *high_to_save = high;
875 num_to_save = high - low + 1;
876 save_mode = mode_for_size (num_to_save * BITS_PER_UNIT, MODE_INT, 1);
878 /* If we don't have the required alignment, must do this
879 in BLKmode. */
880 if ((low & (MIN (GET_MODE_SIZE (save_mode),
881 BIGGEST_ALIGNMENT / UNITS_PER_WORD) - 1)))
882 save_mode = BLKmode;
884 #ifdef ARGS_GROW_DOWNWARD
885 delta = -high;
886 #else
887 delta = low;
888 #endif
889 stack_area = gen_rtx_MEM (save_mode,
890 memory_address (save_mode,
891 plus_constant (argblock,
892 delta)));
894 set_mem_align (stack_area, PARM_BOUNDARY);
895 if (save_mode == BLKmode)
897 save_area = assign_stack_temp (BLKmode, num_to_save, 0);
898 emit_block_move (validize_mem (save_area), stack_area,
899 GEN_INT (num_to_save), BLOCK_OP_CALL_PARM);
901 else
903 save_area = gen_reg_rtx (save_mode);
904 emit_move_insn (save_area, stack_area);
907 return save_area;
910 return NULL_RTX;
913 static void
914 restore_fixed_argument_area (rtx save_area, rtx argblock, int high_to_save, int low_to_save)
916 enum machine_mode save_mode = GET_MODE (save_area);
917 int delta;
918 rtx stack_area;
920 #ifdef ARGS_GROW_DOWNWARD
921 delta = -high_to_save;
922 #else
923 delta = low_to_save;
924 #endif
925 stack_area = gen_rtx_MEM (save_mode,
926 memory_address (save_mode,
927 plus_constant (argblock, delta)));
928 set_mem_align (stack_area, PARM_BOUNDARY);
930 if (save_mode != BLKmode)
931 emit_move_insn (stack_area, save_area);
932 else
933 emit_block_move (stack_area, validize_mem (save_area),
934 GEN_INT (high_to_save - low_to_save + 1),
935 BLOCK_OP_CALL_PARM);
937 #endif /* REG_PARM_STACK_SPACE */
939 /* If any elements in ARGS refer to parameters that are to be passed in
940 registers, but not in memory, and whose alignment does not permit a
941 direct copy into registers. Copy the values into a group of pseudos
942 which we will later copy into the appropriate hard registers.
944 Pseudos for each unaligned argument will be stored into the array
945 args[argnum].aligned_regs. The caller is responsible for deallocating
946 the aligned_regs array if it is nonzero. */
948 static void
949 store_unaligned_arguments_into_pseudos (struct arg_data *args, int num_actuals)
951 int i, j;
953 for (i = 0; i < num_actuals; i++)
954 if (args[i].reg != 0 && ! args[i].pass_on_stack
955 && args[i].mode == BLKmode
956 && MEM_P (args[i].value)
957 && (MEM_ALIGN (args[i].value)
958 < (unsigned int) MIN (BIGGEST_ALIGNMENT, BITS_PER_WORD)))
960 int bytes = int_size_in_bytes (TREE_TYPE (args[i].tree_value));
961 int endian_correction = 0;
963 if (args[i].partial)
965 gcc_assert (args[i].partial % UNITS_PER_WORD == 0);
966 args[i].n_aligned_regs = args[i].partial / UNITS_PER_WORD;
968 else
970 args[i].n_aligned_regs
971 = (bytes + UNITS_PER_WORD - 1) / UNITS_PER_WORD;
974 args[i].aligned_regs = XNEWVEC (rtx, args[i].n_aligned_regs);
976 /* Structures smaller than a word are normally aligned to the
977 least significant byte. On a BYTES_BIG_ENDIAN machine,
978 this means we must skip the empty high order bytes when
979 calculating the bit offset. */
980 if (bytes < UNITS_PER_WORD
981 #ifdef BLOCK_REG_PADDING
982 && (BLOCK_REG_PADDING (args[i].mode,
983 TREE_TYPE (args[i].tree_value), 1)
984 == downward)
985 #else
986 && BYTES_BIG_ENDIAN
987 #endif
989 endian_correction = BITS_PER_WORD - bytes * BITS_PER_UNIT;
991 for (j = 0; j < args[i].n_aligned_regs; j++)
993 rtx reg = gen_reg_rtx (word_mode);
994 rtx word = operand_subword_force (args[i].value, j, BLKmode);
995 int bitsize = MIN (bytes * BITS_PER_UNIT, BITS_PER_WORD);
997 args[i].aligned_regs[j] = reg;
998 word = extract_bit_field (word, bitsize, 0, 1, false, NULL_RTX,
999 word_mode, word_mode);
1001 /* There is no need to restrict this code to loading items
1002 in TYPE_ALIGN sized hunks. The bitfield instructions can
1003 load up entire word sized registers efficiently.
1005 ??? This may not be needed anymore.
1006 We use to emit a clobber here but that doesn't let later
1007 passes optimize the instructions we emit. By storing 0 into
1008 the register later passes know the first AND to zero out the
1009 bitfield being set in the register is unnecessary. The store
1010 of 0 will be deleted as will at least the first AND. */
1012 emit_move_insn (reg, const0_rtx);
1014 bytes -= bitsize / BITS_PER_UNIT;
1015 store_bit_field (reg, bitsize, endian_correction, 0, 0,
1016 word_mode, word);
1021 /* Fill in ARGS_SIZE and ARGS array based on the parameters found in
1022 CALL_EXPR EXP.
1024 NUM_ACTUALS is the total number of parameters.
1026 N_NAMED_ARGS is the total number of named arguments.
1028 STRUCT_VALUE_ADDR_VALUE is the implicit argument for a struct return
1029 value, or null.
1031 FNDECL is the tree code for the target of this call (if known)
1033 ARGS_SO_FAR holds state needed by the target to know where to place
1034 the next argument.
1036 REG_PARM_STACK_SPACE is the number of bytes of stack space reserved
1037 for arguments which are passed in registers.
1039 OLD_STACK_LEVEL is a pointer to an rtx which olds the old stack level
1040 and may be modified by this routine.
1042 OLD_PENDING_ADJ, MUST_PREALLOCATE and FLAGS are pointers to integer
1043 flags which may may be modified by this routine.
1045 MAY_TAILCALL is cleared if we encounter an invisible pass-by-reference
1046 that requires allocation of stack space.
1048 CALL_FROM_THUNK_P is true if this call is the jump from a thunk to
1049 the thunked-to function. */
1051 static void
1052 initialize_argument_information (int num_actuals ATTRIBUTE_UNUSED,
1053 struct arg_data *args,
1054 struct args_size *args_size,
1055 int n_named_args ATTRIBUTE_UNUSED,
1056 tree exp, tree struct_value_addr_value,
1057 tree fndecl, tree fntype,
1058 cumulative_args_t args_so_far,
1059 int reg_parm_stack_space,
1060 rtx *old_stack_level, int *old_pending_adj,
1061 int *must_preallocate, int *ecf_flags,
1062 bool *may_tailcall, bool call_from_thunk_p)
1064 CUMULATIVE_ARGS *args_so_far_pnt = get_cumulative_args (args_so_far);
1065 location_t loc = EXPR_LOCATION (exp);
1066 /* 1 if scanning parms front to back, -1 if scanning back to front. */
1067 int inc;
1069 /* Count arg position in order args appear. */
1070 int argpos;
1072 int i;
1074 args_size->constant = 0;
1075 args_size->var = 0;
1077 /* In this loop, we consider args in the order they are written.
1078 We fill up ARGS from the front or from the back if necessary
1079 so that in any case the first arg to be pushed ends up at the front. */
1081 if (PUSH_ARGS_REVERSED)
1083 i = num_actuals - 1, inc = -1;
1084 /* In this case, must reverse order of args
1085 so that we compute and push the last arg first. */
1087 else
1089 i = 0, inc = 1;
1092 /* First fill in the actual arguments in the ARGS array, splitting
1093 complex arguments if necessary. */
1095 int j = i;
1096 call_expr_arg_iterator iter;
1097 tree arg;
1099 if (struct_value_addr_value)
1101 args[j].tree_value = struct_value_addr_value;
1102 j += inc;
1104 FOR_EACH_CALL_EXPR_ARG (arg, iter, exp)
1106 tree argtype = TREE_TYPE (arg);
1107 if (targetm.calls.split_complex_arg
1108 && argtype
1109 && TREE_CODE (argtype) == COMPLEX_TYPE
1110 && targetm.calls.split_complex_arg (argtype))
1112 tree subtype = TREE_TYPE (argtype);
1113 args[j].tree_value = build1 (REALPART_EXPR, subtype, arg);
1114 j += inc;
1115 args[j].tree_value = build1 (IMAGPART_EXPR, subtype, arg);
1117 else
1118 args[j].tree_value = arg;
1119 j += inc;
1123 /* I counts args in order (to be) pushed; ARGPOS counts in order written. */
1124 for (argpos = 0; argpos < num_actuals; i += inc, argpos++)
1126 tree type = TREE_TYPE (args[i].tree_value);
1127 int unsignedp;
1128 enum machine_mode mode;
1130 /* Replace erroneous argument with constant zero. */
1131 if (type == error_mark_node || !COMPLETE_TYPE_P (type))
1132 args[i].tree_value = integer_zero_node, type = integer_type_node;
1134 /* If TYPE is a transparent union or record, pass things the way
1135 we would pass the first field of the union or record. We have
1136 already verified that the modes are the same. */
1137 if ((TREE_CODE (type) == UNION_TYPE || TREE_CODE (type) == RECORD_TYPE)
1138 && TYPE_TRANSPARENT_AGGR (type))
1139 type = TREE_TYPE (first_field (type));
1141 /* Decide where to pass this arg.
1143 args[i].reg is nonzero if all or part is passed in registers.
1145 args[i].partial is nonzero if part but not all is passed in registers,
1146 and the exact value says how many bytes are passed in registers.
1148 args[i].pass_on_stack is nonzero if the argument must at least be
1149 computed on the stack. It may then be loaded back into registers
1150 if args[i].reg is nonzero.
1152 These decisions are driven by the FUNCTION_... macros and must agree
1153 with those made by function.c. */
1155 /* See if this argument should be passed by invisible reference. */
1156 if (pass_by_reference (args_so_far_pnt, TYPE_MODE (type),
1157 type, argpos < n_named_args))
1159 bool callee_copies;
1160 tree base;
1162 callee_copies
1163 = reference_callee_copied (args_so_far_pnt, TYPE_MODE (type),
1164 type, argpos < n_named_args);
1166 /* If we're compiling a thunk, pass through invisible references
1167 instead of making a copy. */
1168 if (call_from_thunk_p
1169 || (callee_copies
1170 && !TREE_ADDRESSABLE (type)
1171 && (base = get_base_address (args[i].tree_value))
1172 && TREE_CODE (base) != SSA_NAME
1173 && (!DECL_P (base) || MEM_P (DECL_RTL (base)))))
1175 mark_addressable (args[i].tree_value);
1177 /* We can't use sibcalls if a callee-copied argument is
1178 stored in the current function's frame. */
1179 if (!call_from_thunk_p && DECL_P (base) && !TREE_STATIC (base))
1180 *may_tailcall = false;
1182 args[i].tree_value = build_fold_addr_expr_loc (loc,
1183 args[i].tree_value);
1184 type = TREE_TYPE (args[i].tree_value);
1186 if (*ecf_flags & ECF_CONST)
1187 *ecf_flags &= ~(ECF_CONST | ECF_LOOPING_CONST_OR_PURE);
1189 else
1191 /* We make a copy of the object and pass the address to the
1192 function being called. */
1193 rtx copy;
1195 if (!COMPLETE_TYPE_P (type)
1196 || TREE_CODE (TYPE_SIZE_UNIT (type)) != INTEGER_CST
1197 || (flag_stack_check == GENERIC_STACK_CHECK
1198 && compare_tree_int (TYPE_SIZE_UNIT (type),
1199 STACK_CHECK_MAX_VAR_SIZE) > 0))
1201 /* This is a variable-sized object. Make space on the stack
1202 for it. */
1203 rtx size_rtx = expr_size (args[i].tree_value);
1205 if (*old_stack_level == 0)
1207 emit_stack_save (SAVE_BLOCK, old_stack_level);
1208 *old_pending_adj = pending_stack_adjust;
1209 pending_stack_adjust = 0;
1212 /* We can pass TRUE as the 4th argument because we just
1213 saved the stack pointer and will restore it right after
1214 the call. */
1215 copy = allocate_dynamic_stack_space (size_rtx,
1216 TYPE_ALIGN (type),
1217 TYPE_ALIGN (type),
1218 true);
1219 copy = gen_rtx_MEM (BLKmode, copy);
1220 set_mem_attributes (copy, type, 1);
1222 else
1223 copy = assign_temp (type, 0, 1, 0);
1225 store_expr (args[i].tree_value, copy, 0, false);
1227 /* Just change the const function to pure and then let
1228 the next test clear the pure based on
1229 callee_copies. */
1230 if (*ecf_flags & ECF_CONST)
1232 *ecf_flags &= ~ECF_CONST;
1233 *ecf_flags |= ECF_PURE;
1236 if (!callee_copies && *ecf_flags & ECF_PURE)
1237 *ecf_flags &= ~(ECF_PURE | ECF_LOOPING_CONST_OR_PURE);
1239 args[i].tree_value
1240 = build_fold_addr_expr_loc (loc, make_tree (type, copy));
1241 type = TREE_TYPE (args[i].tree_value);
1242 *may_tailcall = false;
1246 unsignedp = TYPE_UNSIGNED (type);
1247 mode = promote_function_mode (type, TYPE_MODE (type), &unsignedp,
1248 fndecl ? TREE_TYPE (fndecl) : fntype, 0);
1250 args[i].unsignedp = unsignedp;
1251 args[i].mode = mode;
1253 args[i].reg = targetm.calls.function_arg (args_so_far, mode, type,
1254 argpos < n_named_args);
1256 /* If this is a sibling call and the machine has register windows, the
1257 register window has to be unwinded before calling the routine, so
1258 arguments have to go into the incoming registers. */
1259 if (targetm.calls.function_incoming_arg != targetm.calls.function_arg)
1260 args[i].tail_call_reg
1261 = targetm.calls.function_incoming_arg (args_so_far, mode, type,
1262 argpos < n_named_args);
1263 else
1264 args[i].tail_call_reg = args[i].reg;
1266 if (args[i].reg)
1267 args[i].partial
1268 = targetm.calls.arg_partial_bytes (args_so_far, mode, type,
1269 argpos < n_named_args);
1271 args[i].pass_on_stack = targetm.calls.must_pass_in_stack (mode, type);
1273 /* If FUNCTION_ARG returned a (parallel [(expr_list (nil) ...) ...]),
1274 it means that we are to pass this arg in the register(s) designated
1275 by the PARALLEL, but also to pass it in the stack. */
1276 if (args[i].reg && GET_CODE (args[i].reg) == PARALLEL
1277 && XEXP (XVECEXP (args[i].reg, 0, 0), 0) == 0)
1278 args[i].pass_on_stack = 1;
1280 /* If this is an addressable type, we must preallocate the stack
1281 since we must evaluate the object into its final location.
1283 If this is to be passed in both registers and the stack, it is simpler
1284 to preallocate. */
1285 if (TREE_ADDRESSABLE (type)
1286 || (args[i].pass_on_stack && args[i].reg != 0))
1287 *must_preallocate = 1;
1289 /* Compute the stack-size of this argument. */
1290 if (args[i].reg == 0 || args[i].partial != 0
1291 || reg_parm_stack_space > 0
1292 || args[i].pass_on_stack)
1293 locate_and_pad_parm (mode, type,
1294 #ifdef STACK_PARMS_IN_REG_PARM_AREA
1296 #else
1297 args[i].reg != 0,
1298 #endif
1299 args[i].pass_on_stack ? 0 : args[i].partial,
1300 fndecl, args_size, &args[i].locate);
1301 #ifdef BLOCK_REG_PADDING
1302 else
1303 /* The argument is passed entirely in registers. See at which
1304 end it should be padded. */
1305 args[i].locate.where_pad =
1306 BLOCK_REG_PADDING (mode, type,
1307 int_size_in_bytes (type) <= UNITS_PER_WORD);
1308 #endif
1310 /* Update ARGS_SIZE, the total stack space for args so far. */
1312 args_size->constant += args[i].locate.size.constant;
1313 if (args[i].locate.size.var)
1314 ADD_PARM_SIZE (*args_size, args[i].locate.size.var);
1316 /* Increment ARGS_SO_FAR, which has info about which arg-registers
1317 have been used, etc. */
1319 targetm.calls.function_arg_advance (args_so_far, TYPE_MODE (type),
1320 type, argpos < n_named_args);
1324 /* Update ARGS_SIZE to contain the total size for the argument block.
1325 Return the original constant component of the argument block's size.
1327 REG_PARM_STACK_SPACE holds the number of bytes of stack space reserved
1328 for arguments passed in registers. */
1330 static int
1331 compute_argument_block_size (int reg_parm_stack_space,
1332 struct args_size *args_size,
1333 tree fndecl ATTRIBUTE_UNUSED,
1334 tree fntype ATTRIBUTE_UNUSED,
1335 int preferred_stack_boundary ATTRIBUTE_UNUSED)
1337 int unadjusted_args_size = args_size->constant;
1339 /* For accumulate outgoing args mode we don't need to align, since the frame
1340 will be already aligned. Align to STACK_BOUNDARY in order to prevent
1341 backends from generating misaligned frame sizes. */
1342 if (ACCUMULATE_OUTGOING_ARGS && preferred_stack_boundary > STACK_BOUNDARY)
1343 preferred_stack_boundary = STACK_BOUNDARY;
1345 /* Compute the actual size of the argument block required. The variable
1346 and constant sizes must be combined, the size may have to be rounded,
1347 and there may be a minimum required size. */
1349 if (args_size->var)
1351 args_size->var = ARGS_SIZE_TREE (*args_size);
1352 args_size->constant = 0;
1354 preferred_stack_boundary /= BITS_PER_UNIT;
1355 if (preferred_stack_boundary > 1)
1357 /* We don't handle this case yet. To handle it correctly we have
1358 to add the delta, round and subtract the delta.
1359 Currently no machine description requires this support. */
1360 gcc_assert (!(stack_pointer_delta & (preferred_stack_boundary - 1)));
1361 args_size->var = round_up (args_size->var, preferred_stack_boundary);
1364 if (reg_parm_stack_space > 0)
1366 args_size->var
1367 = size_binop (MAX_EXPR, args_size->var,
1368 ssize_int (reg_parm_stack_space));
1370 /* The area corresponding to register parameters is not to count in
1371 the size of the block we need. So make the adjustment. */
1372 if (! OUTGOING_REG_PARM_STACK_SPACE ((!fndecl ? fntype : TREE_TYPE (fndecl))))
1373 args_size->var
1374 = size_binop (MINUS_EXPR, args_size->var,
1375 ssize_int (reg_parm_stack_space));
1378 else
1380 preferred_stack_boundary /= BITS_PER_UNIT;
1381 if (preferred_stack_boundary < 1)
1382 preferred_stack_boundary = 1;
1383 args_size->constant = (((args_size->constant
1384 + stack_pointer_delta
1385 + preferred_stack_boundary - 1)
1386 / preferred_stack_boundary
1387 * preferred_stack_boundary)
1388 - stack_pointer_delta);
1390 args_size->constant = MAX (args_size->constant,
1391 reg_parm_stack_space);
1393 if (! OUTGOING_REG_PARM_STACK_SPACE ((!fndecl ? fntype : TREE_TYPE (fndecl))))
1394 args_size->constant -= reg_parm_stack_space;
1396 return unadjusted_args_size;
1399 /* Precompute parameters as needed for a function call.
1401 FLAGS is mask of ECF_* constants.
1403 NUM_ACTUALS is the number of arguments.
1405 ARGS is an array containing information for each argument; this
1406 routine fills in the INITIAL_VALUE and VALUE fields for each
1407 precomputed argument. */
1409 static void
1410 precompute_arguments (int num_actuals, struct arg_data *args)
1412 int i;
1414 /* If this is a libcall, then precompute all arguments so that we do not
1415 get extraneous instructions emitted as part of the libcall sequence. */
1417 /* If we preallocated the stack space, and some arguments must be passed
1418 on the stack, then we must precompute any parameter which contains a
1419 function call which will store arguments on the stack.
1420 Otherwise, evaluating the parameter may clobber previous parameters
1421 which have already been stored into the stack. (we have code to avoid
1422 such case by saving the outgoing stack arguments, but it results in
1423 worse code) */
1424 if (!ACCUMULATE_OUTGOING_ARGS)
1425 return;
1427 for (i = 0; i < num_actuals; i++)
1429 tree type;
1430 enum machine_mode mode;
1432 if (TREE_CODE (args[i].tree_value) != CALL_EXPR)
1433 continue;
1435 /* If this is an addressable type, we cannot pre-evaluate it. */
1436 type = TREE_TYPE (args[i].tree_value);
1437 gcc_assert (!TREE_ADDRESSABLE (type));
1439 args[i].initial_value = args[i].value
1440 = expand_normal (args[i].tree_value);
1442 mode = TYPE_MODE (type);
1443 if (mode != args[i].mode)
1445 int unsignedp = args[i].unsignedp;
1446 args[i].value
1447 = convert_modes (args[i].mode, mode,
1448 args[i].value, args[i].unsignedp);
1450 /* CSE will replace this only if it contains args[i].value
1451 pseudo, so convert it down to the declared mode using
1452 a SUBREG. */
1453 if (REG_P (args[i].value)
1454 && GET_MODE_CLASS (args[i].mode) == MODE_INT
1455 && promote_mode (type, mode, &unsignedp) != args[i].mode)
1457 args[i].initial_value
1458 = gen_lowpart_SUBREG (mode, args[i].value);
1459 SUBREG_PROMOTED_VAR_P (args[i].initial_value) = 1;
1460 SUBREG_PROMOTED_UNSIGNED_SET (args[i].initial_value,
1461 args[i].unsignedp);
1467 /* Given the current state of MUST_PREALLOCATE and information about
1468 arguments to a function call in NUM_ACTUALS, ARGS and ARGS_SIZE,
1469 compute and return the final value for MUST_PREALLOCATE. */
1471 static int
1472 finalize_must_preallocate (int must_preallocate, int num_actuals,
1473 struct arg_data *args, struct args_size *args_size)
1475 /* See if we have or want to preallocate stack space.
1477 If we would have to push a partially-in-regs parm
1478 before other stack parms, preallocate stack space instead.
1480 If the size of some parm is not a multiple of the required stack
1481 alignment, we must preallocate.
1483 If the total size of arguments that would otherwise create a copy in
1484 a temporary (such as a CALL) is more than half the total argument list
1485 size, preallocation is faster.
1487 Another reason to preallocate is if we have a machine (like the m88k)
1488 where stack alignment is required to be maintained between every
1489 pair of insns, not just when the call is made. However, we assume here
1490 that such machines either do not have push insns (and hence preallocation
1491 would occur anyway) or the problem is taken care of with
1492 PUSH_ROUNDING. */
1494 if (! must_preallocate)
1496 int partial_seen = 0;
1497 int copy_to_evaluate_size = 0;
1498 int i;
1500 for (i = 0; i < num_actuals && ! must_preallocate; i++)
1502 if (args[i].partial > 0 && ! args[i].pass_on_stack)
1503 partial_seen = 1;
1504 else if (partial_seen && args[i].reg == 0)
1505 must_preallocate = 1;
1507 if (TYPE_MODE (TREE_TYPE (args[i].tree_value)) == BLKmode
1508 && (TREE_CODE (args[i].tree_value) == CALL_EXPR
1509 || TREE_CODE (args[i].tree_value) == TARGET_EXPR
1510 || TREE_CODE (args[i].tree_value) == COND_EXPR
1511 || TREE_ADDRESSABLE (TREE_TYPE (args[i].tree_value))))
1512 copy_to_evaluate_size
1513 += int_size_in_bytes (TREE_TYPE (args[i].tree_value));
1516 if (copy_to_evaluate_size * 2 >= args_size->constant
1517 && args_size->constant > 0)
1518 must_preallocate = 1;
1520 return must_preallocate;
1523 /* If we preallocated stack space, compute the address of each argument
1524 and store it into the ARGS array.
1526 We need not ensure it is a valid memory address here; it will be
1527 validized when it is used.
1529 ARGBLOCK is an rtx for the address of the outgoing arguments. */
1531 static void
1532 compute_argument_addresses (struct arg_data *args, rtx argblock, int num_actuals)
1534 if (argblock)
1536 rtx arg_reg = argblock;
1537 int i, arg_offset = 0;
1539 if (GET_CODE (argblock) == PLUS)
1540 arg_reg = XEXP (argblock, 0), arg_offset = INTVAL (XEXP (argblock, 1));
1542 for (i = 0; i < num_actuals; i++)
1544 rtx offset = ARGS_SIZE_RTX (args[i].locate.offset);
1545 rtx slot_offset = ARGS_SIZE_RTX (args[i].locate.slot_offset);
1546 rtx addr;
1547 unsigned int align, boundary;
1548 unsigned int units_on_stack = 0;
1549 enum machine_mode partial_mode = VOIDmode;
1551 /* Skip this parm if it will not be passed on the stack. */
1552 if (! args[i].pass_on_stack
1553 && args[i].reg != 0
1554 && args[i].partial == 0)
1555 continue;
1557 if (CONST_INT_P (offset))
1558 addr = plus_constant (arg_reg, INTVAL (offset));
1559 else
1560 addr = gen_rtx_PLUS (Pmode, arg_reg, offset);
1562 addr = plus_constant (addr, arg_offset);
1564 if (args[i].partial != 0)
1566 /* Only part of the parameter is being passed on the stack.
1567 Generate a simple memory reference of the correct size. */
1568 units_on_stack = args[i].locate.size.constant;
1569 partial_mode = mode_for_size (units_on_stack * BITS_PER_UNIT,
1570 MODE_INT, 1);
1571 args[i].stack = gen_rtx_MEM (partial_mode, addr);
1572 set_mem_size (args[i].stack, units_on_stack);
1574 else
1576 args[i].stack = gen_rtx_MEM (args[i].mode, addr);
1577 set_mem_attributes (args[i].stack,
1578 TREE_TYPE (args[i].tree_value), 1);
1580 align = BITS_PER_UNIT;
1581 boundary = args[i].locate.boundary;
1582 if (args[i].locate.where_pad != downward)
1583 align = boundary;
1584 else if (CONST_INT_P (offset))
1586 align = INTVAL (offset) * BITS_PER_UNIT | boundary;
1587 align = align & -align;
1589 set_mem_align (args[i].stack, align);
1591 if (CONST_INT_P (slot_offset))
1592 addr = plus_constant (arg_reg, INTVAL (slot_offset));
1593 else
1594 addr = gen_rtx_PLUS (Pmode, arg_reg, slot_offset);
1596 addr = plus_constant (addr, arg_offset);
1598 if (args[i].partial != 0)
1600 /* Only part of the parameter is being passed on the stack.
1601 Generate a simple memory reference of the correct size.
1603 args[i].stack_slot = gen_rtx_MEM (partial_mode, addr);
1604 set_mem_size (args[i].stack_slot, units_on_stack);
1606 else
1608 args[i].stack_slot = gen_rtx_MEM (args[i].mode, addr);
1609 set_mem_attributes (args[i].stack_slot,
1610 TREE_TYPE (args[i].tree_value), 1);
1612 set_mem_align (args[i].stack_slot, args[i].locate.boundary);
1614 /* Function incoming arguments may overlap with sibling call
1615 outgoing arguments and we cannot allow reordering of reads
1616 from function arguments with stores to outgoing arguments
1617 of sibling calls. */
1618 set_mem_alias_set (args[i].stack, 0);
1619 set_mem_alias_set (args[i].stack_slot, 0);
1624 /* Given a FNDECL and EXP, return an rtx suitable for use as a target address
1625 in a call instruction.
1627 FNDECL is the tree node for the target function. For an indirect call
1628 FNDECL will be NULL_TREE.
1630 ADDR is the operand 0 of CALL_EXPR for this call. */
1632 static rtx
1633 rtx_for_function_call (tree fndecl, tree addr)
1635 rtx funexp;
1637 /* Get the function to call, in the form of RTL. */
1638 if (fndecl)
1640 /* If this is the first use of the function, see if we need to
1641 make an external definition for it. */
1642 if (!TREE_USED (fndecl) && fndecl != current_function_decl)
1644 assemble_external (fndecl);
1645 TREE_USED (fndecl) = 1;
1648 /* Get a SYMBOL_REF rtx for the function address. */
1649 funexp = XEXP (DECL_RTL (fndecl), 0);
1651 else
1652 /* Generate an rtx (probably a pseudo-register) for the address. */
1654 push_temp_slots ();
1655 funexp = expand_normal (addr);
1656 pop_temp_slots (); /* FUNEXP can't be BLKmode. */
1658 return funexp;
1661 /* Return true if and only if SIZE storage units (usually bytes)
1662 starting from address ADDR overlap with already clobbered argument
1663 area. This function is used to determine if we should give up a
1664 sibcall. */
1666 static bool
1667 mem_overlaps_already_clobbered_arg_p (rtx addr, unsigned HOST_WIDE_INT size)
1669 HOST_WIDE_INT i;
1671 if (sbitmap_empty_p (stored_args_map))
1672 return false;
1673 if (addr == crtl->args.internal_arg_pointer)
1674 i = 0;
1675 else if (GET_CODE (addr) == PLUS
1676 && XEXP (addr, 0) == crtl->args.internal_arg_pointer
1677 && CONST_INT_P (XEXP (addr, 1)))
1678 i = INTVAL (XEXP (addr, 1));
1679 /* Return true for arg pointer based indexed addressing. */
1680 else if (GET_CODE (addr) == PLUS
1681 && (XEXP (addr, 0) == crtl->args.internal_arg_pointer
1682 || XEXP (addr, 1) == crtl->args.internal_arg_pointer))
1683 return true;
1684 /* If the address comes in a register, we have no idea of its origin so
1685 give up and conservatively return true. */
1686 else if (REG_P(addr))
1687 return true;
1688 else
1689 return false;
1691 #ifdef ARGS_GROW_DOWNWARD
1692 i = -i - size;
1693 #endif
1694 if (size > 0)
1696 unsigned HOST_WIDE_INT k;
1698 for (k = 0; k < size; k++)
1699 if (i + k < stored_args_map->n_bits
1700 && TEST_BIT (stored_args_map, i + k))
1701 return true;
1704 return false;
1707 /* Do the register loads required for any wholly-register parms or any
1708 parms which are passed both on the stack and in a register. Their
1709 expressions were already evaluated.
1711 Mark all register-parms as living through the call, putting these USE
1712 insns in the CALL_INSN_FUNCTION_USAGE field.
1714 When IS_SIBCALL, perform the check_sibcall_argument_overlap
1715 checking, setting *SIBCALL_FAILURE if appropriate. */
1717 static void
1718 load_register_parameters (struct arg_data *args, int num_actuals,
1719 rtx *call_fusage, int flags, int is_sibcall,
1720 int *sibcall_failure)
1722 int i, j;
1724 for (i = 0; i < num_actuals; i++)
1726 rtx reg = ((flags & ECF_SIBCALL)
1727 ? args[i].tail_call_reg : args[i].reg);
1728 if (reg)
1730 int partial = args[i].partial;
1731 int nregs;
1732 int size = 0;
1733 rtx before_arg = get_last_insn ();
1734 /* Set non-negative if we must move a word at a time, even if
1735 just one word (e.g, partial == 4 && mode == DFmode). Set
1736 to -1 if we just use a normal move insn. This value can be
1737 zero if the argument is a zero size structure. */
1738 nregs = -1;
1739 if (GET_CODE (reg) == PARALLEL)
1741 else if (partial)
1743 gcc_assert (partial % UNITS_PER_WORD == 0);
1744 nregs = partial / UNITS_PER_WORD;
1746 else if (TYPE_MODE (TREE_TYPE (args[i].tree_value)) == BLKmode)
1748 size = int_size_in_bytes (TREE_TYPE (args[i].tree_value));
1749 nregs = (size + (UNITS_PER_WORD - 1)) / UNITS_PER_WORD;
1751 else
1752 size = GET_MODE_SIZE (args[i].mode);
1754 /* Handle calls that pass values in multiple non-contiguous
1755 locations. The Irix 6 ABI has examples of this. */
1757 if (GET_CODE (reg) == PARALLEL)
1758 emit_group_move (reg, args[i].parallel_value);
1760 /* If simple case, just do move. If normal partial, store_one_arg
1761 has already loaded the register for us. In all other cases,
1762 load the register(s) from memory. */
1764 else if (nregs == -1)
1766 emit_move_insn (reg, args[i].value);
1767 #ifdef BLOCK_REG_PADDING
1768 /* Handle case where we have a value that needs shifting
1769 up to the msb. eg. a QImode value and we're padding
1770 upward on a BYTES_BIG_ENDIAN machine. */
1771 if (size < UNITS_PER_WORD
1772 && (args[i].locate.where_pad
1773 == (BYTES_BIG_ENDIAN ? upward : downward)))
1775 rtx x;
1776 int shift = (UNITS_PER_WORD - size) * BITS_PER_UNIT;
1778 /* Assigning REG here rather than a temp makes CALL_FUSAGE
1779 report the whole reg as used. Strictly speaking, the
1780 call only uses SIZE bytes at the msb end, but it doesn't
1781 seem worth generating rtl to say that. */
1782 reg = gen_rtx_REG (word_mode, REGNO (reg));
1783 x = expand_shift (LSHIFT_EXPR, word_mode, reg, shift, reg, 1);
1784 if (x != reg)
1785 emit_move_insn (reg, x);
1787 #endif
1790 /* If we have pre-computed the values to put in the registers in
1791 the case of non-aligned structures, copy them in now. */
1793 else if (args[i].n_aligned_regs != 0)
1794 for (j = 0; j < args[i].n_aligned_regs; j++)
1795 emit_move_insn (gen_rtx_REG (word_mode, REGNO (reg) + j),
1796 args[i].aligned_regs[j]);
1798 else if (partial == 0 || args[i].pass_on_stack)
1800 rtx mem = validize_mem (args[i].value);
1802 /* Check for overlap with already clobbered argument area,
1803 providing that this has non-zero size. */
1804 if (is_sibcall
1805 && (size == 0
1806 || mem_overlaps_already_clobbered_arg_p
1807 (XEXP (args[i].value, 0), size)))
1808 *sibcall_failure = 1;
1810 /* Handle a BLKmode that needs shifting. */
1811 if (nregs == 1 && size < UNITS_PER_WORD
1812 #ifdef BLOCK_REG_PADDING
1813 && args[i].locate.where_pad == downward
1814 #else
1815 && BYTES_BIG_ENDIAN
1816 #endif
1819 rtx tem = operand_subword_force (mem, 0, args[i].mode);
1820 rtx ri = gen_rtx_REG (word_mode, REGNO (reg));
1821 rtx x = gen_reg_rtx (word_mode);
1822 int shift = (UNITS_PER_WORD - size) * BITS_PER_UNIT;
1823 enum tree_code dir = BYTES_BIG_ENDIAN ? RSHIFT_EXPR
1824 : LSHIFT_EXPR;
1826 emit_move_insn (x, tem);
1827 x = expand_shift (dir, word_mode, x, shift, ri, 1);
1828 if (x != ri)
1829 emit_move_insn (ri, x);
1831 else
1832 move_block_to_reg (REGNO (reg), mem, nregs, args[i].mode);
1835 /* When a parameter is a block, and perhaps in other cases, it is
1836 possible that it did a load from an argument slot that was
1837 already clobbered. */
1838 if (is_sibcall
1839 && check_sibcall_argument_overlap (before_arg, &args[i], 0))
1840 *sibcall_failure = 1;
1842 /* Handle calls that pass values in multiple non-contiguous
1843 locations. The Irix 6 ABI has examples of this. */
1844 if (GET_CODE (reg) == PARALLEL)
1845 use_group_regs (call_fusage, reg);
1846 else if (nregs == -1)
1847 use_reg_mode (call_fusage, reg,
1848 TYPE_MODE (TREE_TYPE (args[i].tree_value)));
1849 else if (nregs > 0)
1850 use_regs (call_fusage, REGNO (reg), nregs);
1855 /* We need to pop PENDING_STACK_ADJUST bytes. But, if the arguments
1856 wouldn't fill up an even multiple of PREFERRED_UNIT_STACK_BOUNDARY
1857 bytes, then we would need to push some additional bytes to pad the
1858 arguments. So, we compute an adjust to the stack pointer for an
1859 amount that will leave the stack under-aligned by UNADJUSTED_ARGS_SIZE
1860 bytes. Then, when the arguments are pushed the stack will be perfectly
1861 aligned. ARGS_SIZE->CONSTANT is set to the number of bytes that should
1862 be popped after the call. Returns the adjustment. */
1864 static int
1865 combine_pending_stack_adjustment_and_call (int unadjusted_args_size,
1866 struct args_size *args_size,
1867 unsigned int preferred_unit_stack_boundary)
1869 /* The number of bytes to pop so that the stack will be
1870 under-aligned by UNADJUSTED_ARGS_SIZE bytes. */
1871 HOST_WIDE_INT adjustment;
1872 /* The alignment of the stack after the arguments are pushed, if we
1873 just pushed the arguments without adjust the stack here. */
1874 unsigned HOST_WIDE_INT unadjusted_alignment;
1876 unadjusted_alignment
1877 = ((stack_pointer_delta + unadjusted_args_size)
1878 % preferred_unit_stack_boundary);
1880 /* We want to get rid of as many of the PENDING_STACK_ADJUST bytes
1881 as possible -- leaving just enough left to cancel out the
1882 UNADJUSTED_ALIGNMENT. In other words, we want to ensure that the
1883 PENDING_STACK_ADJUST is non-negative, and congruent to
1884 -UNADJUSTED_ALIGNMENT modulo the PREFERRED_UNIT_STACK_BOUNDARY. */
1886 /* Begin by trying to pop all the bytes. */
1887 unadjusted_alignment
1888 = (unadjusted_alignment
1889 - (pending_stack_adjust % preferred_unit_stack_boundary));
1890 adjustment = pending_stack_adjust;
1891 /* Push enough additional bytes that the stack will be aligned
1892 after the arguments are pushed. */
1893 if (preferred_unit_stack_boundary > 1)
1895 if (unadjusted_alignment > 0)
1896 adjustment -= preferred_unit_stack_boundary - unadjusted_alignment;
1897 else
1898 adjustment += unadjusted_alignment;
1901 /* Now, sets ARGS_SIZE->CONSTANT so that we pop the right number of
1902 bytes after the call. The right number is the entire
1903 PENDING_STACK_ADJUST less our ADJUSTMENT plus the amount required
1904 by the arguments in the first place. */
1905 args_size->constant
1906 = pending_stack_adjust - adjustment + unadjusted_args_size;
1908 return adjustment;
1911 /* Scan X expression if it does not dereference any argument slots
1912 we already clobbered by tail call arguments (as noted in stored_args_map
1913 bitmap).
1914 Return nonzero if X expression dereferences such argument slots,
1915 zero otherwise. */
1917 static int
1918 check_sibcall_argument_overlap_1 (rtx x)
1920 RTX_CODE code;
1921 int i, j;
1922 const char *fmt;
1924 if (x == NULL_RTX)
1925 return 0;
1927 code = GET_CODE (x);
1929 /* We need not check the operands of the CALL expression itself. */
1930 if (code == CALL)
1931 return 0;
1933 if (code == MEM)
1934 return mem_overlaps_already_clobbered_arg_p (XEXP (x, 0),
1935 GET_MODE_SIZE (GET_MODE (x)));
1937 /* Scan all subexpressions. */
1938 fmt = GET_RTX_FORMAT (code);
1939 for (i = 0; i < GET_RTX_LENGTH (code); i++, fmt++)
1941 if (*fmt == 'e')
1943 if (check_sibcall_argument_overlap_1 (XEXP (x, i)))
1944 return 1;
1946 else if (*fmt == 'E')
1948 for (j = 0; j < XVECLEN (x, i); j++)
1949 if (check_sibcall_argument_overlap_1 (XVECEXP (x, i, j)))
1950 return 1;
1953 return 0;
1956 /* Scan sequence after INSN if it does not dereference any argument slots
1957 we already clobbered by tail call arguments (as noted in stored_args_map
1958 bitmap). If MARK_STORED_ARGS_MAP, add stack slots for ARG to
1959 stored_args_map bitmap afterwards (when ARG is a register MARK_STORED_ARGS_MAP
1960 should be 0). Return nonzero if sequence after INSN dereferences such argument
1961 slots, zero otherwise. */
1963 static int
1964 check_sibcall_argument_overlap (rtx insn, struct arg_data *arg, int mark_stored_args_map)
1966 int low, high;
1968 if (insn == NULL_RTX)
1969 insn = get_insns ();
1970 else
1971 insn = NEXT_INSN (insn);
1973 for (; insn; insn = NEXT_INSN (insn))
1974 if (INSN_P (insn)
1975 && check_sibcall_argument_overlap_1 (PATTERN (insn)))
1976 break;
1978 if (mark_stored_args_map)
1980 #ifdef ARGS_GROW_DOWNWARD
1981 low = -arg->locate.slot_offset.constant - arg->locate.size.constant;
1982 #else
1983 low = arg->locate.slot_offset.constant;
1984 #endif
1986 for (high = low + arg->locate.size.constant; low < high; low++)
1987 SET_BIT (stored_args_map, low);
1989 return insn != NULL_RTX;
1992 /* Given that a function returns a value of mode MODE at the most
1993 significant end of hard register VALUE, shift VALUE left or right
1994 as specified by LEFT_P. Return true if some action was needed. */
1996 bool
1997 shift_return_value (enum machine_mode mode, bool left_p, rtx value)
1999 HOST_WIDE_INT shift;
2001 gcc_assert (REG_P (value) && HARD_REGISTER_P (value));
2002 shift = GET_MODE_BITSIZE (GET_MODE (value)) - GET_MODE_BITSIZE (mode);
2003 if (shift == 0)
2004 return false;
2006 /* Use ashr rather than lshr for right shifts. This is for the benefit
2007 of the MIPS port, which requires SImode values to be sign-extended
2008 when stored in 64-bit registers. */
2009 if (!force_expand_binop (GET_MODE (value), left_p ? ashl_optab : ashr_optab,
2010 value, GEN_INT (shift), value, 1, OPTAB_WIDEN))
2011 gcc_unreachable ();
2012 return true;
2015 /* If X is a likely-spilled register value, copy it to a pseudo
2016 register and return that register. Return X otherwise. */
2018 static rtx
2019 avoid_likely_spilled_reg (rtx x)
2021 rtx new_rtx;
2023 if (REG_P (x)
2024 && HARD_REGISTER_P (x)
2025 && targetm.class_likely_spilled_p (REGNO_REG_CLASS (REGNO (x))))
2027 /* Make sure that we generate a REG rather than a CONCAT.
2028 Moves into CONCATs can need nontrivial instructions,
2029 and the whole point of this function is to avoid
2030 using the hard register directly in such a situation. */
2031 generating_concat_p = 0;
2032 new_rtx = gen_reg_rtx (GET_MODE (x));
2033 generating_concat_p = 1;
2034 emit_move_insn (new_rtx, x);
2035 return new_rtx;
2037 return x;
2040 /* Generate all the code for a CALL_EXPR exp
2041 and return an rtx for its value.
2042 Store the value in TARGET (specified as an rtx) if convenient.
2043 If the value is stored in TARGET then TARGET is returned.
2044 If IGNORE is nonzero, then we ignore the value of the function call. */
2047 expand_call (tree exp, rtx target, int ignore)
2049 /* Nonzero if we are currently expanding a call. */
2050 static int currently_expanding_call = 0;
2052 /* RTX for the function to be called. */
2053 rtx funexp;
2054 /* Sequence of insns to perform a normal "call". */
2055 rtx normal_call_insns = NULL_RTX;
2056 /* Sequence of insns to perform a tail "call". */
2057 rtx tail_call_insns = NULL_RTX;
2058 /* Data type of the function. */
2059 tree funtype;
2060 tree type_arg_types;
2061 tree rettype;
2062 /* Declaration of the function being called,
2063 or 0 if the function is computed (not known by name). */
2064 tree fndecl = 0;
2065 /* The type of the function being called. */
2066 tree fntype;
2067 bool try_tail_call = CALL_EXPR_TAILCALL (exp);
2068 int pass;
2070 /* Register in which non-BLKmode value will be returned,
2071 or 0 if no value or if value is BLKmode. */
2072 rtx valreg;
2073 /* Address where we should return a BLKmode value;
2074 0 if value not BLKmode. */
2075 rtx structure_value_addr = 0;
2076 /* Nonzero if that address is being passed by treating it as
2077 an extra, implicit first parameter. Otherwise,
2078 it is passed by being copied directly into struct_value_rtx. */
2079 int structure_value_addr_parm = 0;
2080 /* Holds the value of implicit argument for the struct value. */
2081 tree structure_value_addr_value = NULL_TREE;
2082 /* Size of aggregate value wanted, or zero if none wanted
2083 or if we are using the non-reentrant PCC calling convention
2084 or expecting the value in registers. */
2085 HOST_WIDE_INT struct_value_size = 0;
2086 /* Nonzero if called function returns an aggregate in memory PCC style,
2087 by returning the address of where to find it. */
2088 int pcc_struct_value = 0;
2089 rtx struct_value = 0;
2091 /* Number of actual parameters in this call, including struct value addr. */
2092 int num_actuals;
2093 /* Number of named args. Args after this are anonymous ones
2094 and they must all go on the stack. */
2095 int n_named_args;
2096 /* Number of complex actual arguments that need to be split. */
2097 int num_complex_actuals = 0;
2099 /* Vector of information about each argument.
2100 Arguments are numbered in the order they will be pushed,
2101 not the order they are written. */
2102 struct arg_data *args;
2104 /* Total size in bytes of all the stack-parms scanned so far. */
2105 struct args_size args_size;
2106 struct args_size adjusted_args_size;
2107 /* Size of arguments before any adjustments (such as rounding). */
2108 int unadjusted_args_size;
2109 /* Data on reg parms scanned so far. */
2110 CUMULATIVE_ARGS args_so_far_v;
2111 cumulative_args_t args_so_far;
2112 /* Nonzero if a reg parm has been scanned. */
2113 int reg_parm_seen;
2114 /* Nonzero if this is an indirect function call. */
2116 /* Nonzero if we must avoid push-insns in the args for this call.
2117 If stack space is allocated for register parameters, but not by the
2118 caller, then it is preallocated in the fixed part of the stack frame.
2119 So the entire argument block must then be preallocated (i.e., we
2120 ignore PUSH_ROUNDING in that case). */
2122 int must_preallocate = !PUSH_ARGS;
2124 /* Size of the stack reserved for parameter registers. */
2125 int reg_parm_stack_space = 0;
2127 /* Address of space preallocated for stack parms
2128 (on machines that lack push insns), or 0 if space not preallocated. */
2129 rtx argblock = 0;
2131 /* Mask of ECF_ flags. */
2132 int flags = 0;
2133 #ifdef REG_PARM_STACK_SPACE
2134 /* Define the boundary of the register parm stack space that needs to be
2135 saved, if any. */
2136 int low_to_save, high_to_save;
2137 rtx save_area = 0; /* Place that it is saved */
2138 #endif
2140 int initial_highest_arg_in_use = highest_outgoing_arg_in_use;
2141 char *initial_stack_usage_map = stack_usage_map;
2142 char *stack_usage_map_buf = NULL;
2144 int old_stack_allocated;
2146 /* State variables to track stack modifications. */
2147 rtx old_stack_level = 0;
2148 int old_stack_arg_under_construction = 0;
2149 int old_pending_adj = 0;
2150 int old_inhibit_defer_pop = inhibit_defer_pop;
2152 /* Some stack pointer alterations we make are performed via
2153 allocate_dynamic_stack_space. This modifies the stack_pointer_delta,
2154 which we then also need to save/restore along the way. */
2155 int old_stack_pointer_delta = 0;
2157 rtx call_fusage;
2158 tree addr = CALL_EXPR_FN (exp);
2159 int i;
2160 /* The alignment of the stack, in bits. */
2161 unsigned HOST_WIDE_INT preferred_stack_boundary;
2162 /* The alignment of the stack, in bytes. */
2163 unsigned HOST_WIDE_INT preferred_unit_stack_boundary;
2164 /* The static chain value to use for this call. */
2165 rtx static_chain_value;
2166 /* See if this is "nothrow" function call. */
2167 if (TREE_NOTHROW (exp))
2168 flags |= ECF_NOTHROW;
2170 /* See if we can find a DECL-node for the actual function, and get the
2171 function attributes (flags) from the function decl or type node. */
2172 fndecl = get_callee_fndecl (exp);
2173 if (fndecl)
2175 fntype = TREE_TYPE (fndecl);
2176 flags |= flags_from_decl_or_type (fndecl);
2178 else
2180 fntype = TREE_TYPE (TREE_TYPE (addr));
2181 flags |= flags_from_decl_or_type (fntype);
2183 rettype = TREE_TYPE (exp);
2185 struct_value = targetm.calls.struct_value_rtx (fntype, 0);
2187 /* Warn if this value is an aggregate type,
2188 regardless of which calling convention we are using for it. */
2189 if (AGGREGATE_TYPE_P (rettype))
2190 warning (OPT_Waggregate_return, "function call has aggregate value");
2192 /* If the result of a non looping pure or const function call is
2193 ignored (or void), and none of its arguments are volatile, we can
2194 avoid expanding the call and just evaluate the arguments for
2195 side-effects. */
2196 if ((flags & (ECF_CONST | ECF_PURE))
2197 && (!(flags & ECF_LOOPING_CONST_OR_PURE))
2198 && (ignore || target == const0_rtx
2199 || TYPE_MODE (rettype) == VOIDmode))
2201 bool volatilep = false;
2202 tree arg;
2203 call_expr_arg_iterator iter;
2205 FOR_EACH_CALL_EXPR_ARG (arg, iter, exp)
2206 if (TREE_THIS_VOLATILE (arg))
2208 volatilep = true;
2209 break;
2212 if (! volatilep)
2214 FOR_EACH_CALL_EXPR_ARG (arg, iter, exp)
2215 expand_expr (arg, const0_rtx, VOIDmode, EXPAND_NORMAL);
2216 return const0_rtx;
2220 #ifdef REG_PARM_STACK_SPACE
2221 reg_parm_stack_space = REG_PARM_STACK_SPACE (!fndecl ? fntype : fndecl);
2222 #endif
2224 if (! OUTGOING_REG_PARM_STACK_SPACE ((!fndecl ? fntype : TREE_TYPE (fndecl)))
2225 && reg_parm_stack_space > 0 && PUSH_ARGS)
2226 must_preallocate = 1;
2228 /* Set up a place to return a structure. */
2230 /* Cater to broken compilers. */
2231 if (aggregate_value_p (exp, fntype))
2233 /* This call returns a big structure. */
2234 flags &= ~(ECF_CONST | ECF_PURE | ECF_LOOPING_CONST_OR_PURE);
2236 #ifdef PCC_STATIC_STRUCT_RETURN
2238 pcc_struct_value = 1;
2240 #else /* not PCC_STATIC_STRUCT_RETURN */
2242 struct_value_size = int_size_in_bytes (rettype);
2244 if (target && MEM_P (target) && CALL_EXPR_RETURN_SLOT_OPT (exp))
2245 structure_value_addr = XEXP (target, 0);
2246 else
2248 /* For variable-sized objects, we must be called with a target
2249 specified. If we were to allocate space on the stack here,
2250 we would have no way of knowing when to free it. */
2251 rtx d = assign_temp (rettype, 0, 1, 1);
2253 mark_temp_addr_taken (d);
2254 structure_value_addr = XEXP (d, 0);
2255 target = 0;
2258 #endif /* not PCC_STATIC_STRUCT_RETURN */
2261 /* Figure out the amount to which the stack should be aligned. */
2262 preferred_stack_boundary = PREFERRED_STACK_BOUNDARY;
2263 if (fndecl)
2265 struct cgraph_rtl_info *i = cgraph_rtl_info (fndecl);
2266 /* Without automatic stack alignment, we can't increase preferred
2267 stack boundary. With automatic stack alignment, it is
2268 unnecessary since unless we can guarantee that all callers will
2269 align the outgoing stack properly, callee has to align its
2270 stack anyway. */
2271 if (i
2272 && i->preferred_incoming_stack_boundary
2273 && i->preferred_incoming_stack_boundary < preferred_stack_boundary)
2274 preferred_stack_boundary = i->preferred_incoming_stack_boundary;
2277 /* Operand 0 is a pointer-to-function; get the type of the function. */
2278 funtype = TREE_TYPE (addr);
2279 gcc_assert (POINTER_TYPE_P (funtype));
2280 funtype = TREE_TYPE (funtype);
2282 /* Count whether there are actual complex arguments that need to be split
2283 into their real and imaginary parts. Munge the type_arg_types
2284 appropriately here as well. */
2285 if (targetm.calls.split_complex_arg)
2287 call_expr_arg_iterator iter;
2288 tree arg;
2289 FOR_EACH_CALL_EXPR_ARG (arg, iter, exp)
2291 tree type = TREE_TYPE (arg);
2292 if (type && TREE_CODE (type) == COMPLEX_TYPE
2293 && targetm.calls.split_complex_arg (type))
2294 num_complex_actuals++;
2296 type_arg_types = split_complex_types (TYPE_ARG_TYPES (funtype));
2298 else
2299 type_arg_types = TYPE_ARG_TYPES (funtype);
2301 if (flags & ECF_MAY_BE_ALLOCA)
2302 cfun->calls_alloca = 1;
2304 /* If struct_value_rtx is 0, it means pass the address
2305 as if it were an extra parameter. Put the argument expression
2306 in structure_value_addr_value. */
2307 if (structure_value_addr && struct_value == 0)
2309 /* If structure_value_addr is a REG other than
2310 virtual_outgoing_args_rtx, we can use always use it. If it
2311 is not a REG, we must always copy it into a register.
2312 If it is virtual_outgoing_args_rtx, we must copy it to another
2313 register in some cases. */
2314 rtx temp = (!REG_P (structure_value_addr)
2315 || (ACCUMULATE_OUTGOING_ARGS
2316 && stack_arg_under_construction
2317 && structure_value_addr == virtual_outgoing_args_rtx)
2318 ? copy_addr_to_reg (convert_memory_address
2319 (Pmode, structure_value_addr))
2320 : structure_value_addr);
2322 structure_value_addr_value =
2323 make_tree (build_pointer_type (TREE_TYPE (funtype)), temp);
2324 structure_value_addr_parm = 1;
2327 /* Count the arguments and set NUM_ACTUALS. */
2328 num_actuals =
2329 call_expr_nargs (exp) + num_complex_actuals + structure_value_addr_parm;
2331 /* Compute number of named args.
2332 First, do a raw count of the args for INIT_CUMULATIVE_ARGS. */
2334 if (type_arg_types != 0)
2335 n_named_args
2336 = (list_length (type_arg_types)
2337 /* Count the struct value address, if it is passed as a parm. */
2338 + structure_value_addr_parm);
2339 else
2340 /* If we know nothing, treat all args as named. */
2341 n_named_args = num_actuals;
2343 /* Start updating where the next arg would go.
2345 On some machines (such as the PA) indirect calls have a different
2346 calling convention than normal calls. The fourth argument in
2347 INIT_CUMULATIVE_ARGS tells the backend if this is an indirect call
2348 or not. */
2349 INIT_CUMULATIVE_ARGS (args_so_far_v, funtype, NULL_RTX, fndecl, n_named_args);
2350 args_so_far = pack_cumulative_args (&args_so_far_v);
2352 /* Now possibly adjust the number of named args.
2353 Normally, don't include the last named arg if anonymous args follow.
2354 We do include the last named arg if
2355 targetm.calls.strict_argument_naming() returns nonzero.
2356 (If no anonymous args follow, the result of list_length is actually
2357 one too large. This is harmless.)
2359 If targetm.calls.pretend_outgoing_varargs_named() returns
2360 nonzero, and targetm.calls.strict_argument_naming() returns zero,
2361 this machine will be able to place unnamed args that were passed
2362 in registers into the stack. So treat all args as named. This
2363 allows the insns emitting for a specific argument list to be
2364 independent of the function declaration.
2366 If targetm.calls.pretend_outgoing_varargs_named() returns zero,
2367 we do not have any reliable way to pass unnamed args in
2368 registers, so we must force them into memory. */
2370 if (type_arg_types != 0
2371 && targetm.calls.strict_argument_naming (args_so_far))
2373 else if (type_arg_types != 0
2374 && ! targetm.calls.pretend_outgoing_varargs_named (args_so_far))
2375 /* Don't include the last named arg. */
2376 --n_named_args;
2377 else
2378 /* Treat all args as named. */
2379 n_named_args = num_actuals;
2381 /* Make a vector to hold all the information about each arg. */
2382 args = XALLOCAVEC (struct arg_data, num_actuals);
2383 memset (args, 0, num_actuals * sizeof (struct arg_data));
2385 /* Build up entries in the ARGS array, compute the size of the
2386 arguments into ARGS_SIZE, etc. */
2387 initialize_argument_information (num_actuals, args, &args_size,
2388 n_named_args, exp,
2389 structure_value_addr_value, fndecl, fntype,
2390 args_so_far, reg_parm_stack_space,
2391 &old_stack_level, &old_pending_adj,
2392 &must_preallocate, &flags,
2393 &try_tail_call, CALL_FROM_THUNK_P (exp));
2395 if (args_size.var)
2396 must_preallocate = 1;
2398 /* Now make final decision about preallocating stack space. */
2399 must_preallocate = finalize_must_preallocate (must_preallocate,
2400 num_actuals, args,
2401 &args_size);
2403 /* If the structure value address will reference the stack pointer, we
2404 must stabilize it. We don't need to do this if we know that we are
2405 not going to adjust the stack pointer in processing this call. */
2407 if (structure_value_addr
2408 && (reg_mentioned_p (virtual_stack_dynamic_rtx, structure_value_addr)
2409 || reg_mentioned_p (virtual_outgoing_args_rtx,
2410 structure_value_addr))
2411 && (args_size.var
2412 || (!ACCUMULATE_OUTGOING_ARGS && args_size.constant)))
2413 structure_value_addr = copy_to_reg (structure_value_addr);
2415 /* Tail calls can make things harder to debug, and we've traditionally
2416 pushed these optimizations into -O2. Don't try if we're already
2417 expanding a call, as that means we're an argument. Don't try if
2418 there's cleanups, as we know there's code to follow the call. */
2420 if (currently_expanding_call++ != 0
2421 || !flag_optimize_sibling_calls
2422 || args_size.var
2423 || dbg_cnt (tail_call) == false)
2424 try_tail_call = 0;
2426 /* Rest of purposes for tail call optimizations to fail. */
2427 if (
2428 #ifdef HAVE_sibcall_epilogue
2429 !HAVE_sibcall_epilogue
2430 #else
2432 #endif
2433 || !try_tail_call
2434 /* Doing sibling call optimization needs some work, since
2435 structure_value_addr can be allocated on the stack.
2436 It does not seem worth the effort since few optimizable
2437 sibling calls will return a structure. */
2438 || structure_value_addr != NULL_RTX
2439 #ifdef REG_PARM_STACK_SPACE
2440 /* If outgoing reg parm stack space changes, we can not do sibcall. */
2441 || (OUTGOING_REG_PARM_STACK_SPACE (funtype)
2442 != OUTGOING_REG_PARM_STACK_SPACE (TREE_TYPE (current_function_decl)))
2443 || (reg_parm_stack_space != REG_PARM_STACK_SPACE (fndecl))
2444 #endif
2445 /* Check whether the target is able to optimize the call
2446 into a sibcall. */
2447 || !targetm.function_ok_for_sibcall (fndecl, exp)
2448 /* Functions that do not return exactly once may not be sibcall
2449 optimized. */
2450 || (flags & (ECF_RETURNS_TWICE | ECF_NORETURN))
2451 || TYPE_VOLATILE (TREE_TYPE (TREE_TYPE (addr)))
2452 /* If the called function is nested in the current one, it might access
2453 some of the caller's arguments, but could clobber them beforehand if
2454 the argument areas are shared. */
2455 || (fndecl && decl_function_context (fndecl) == current_function_decl)
2456 /* If this function requires more stack slots than the current
2457 function, we cannot change it into a sibling call.
2458 crtl->args.pretend_args_size is not part of the
2459 stack allocated by our caller. */
2460 || args_size.constant > (crtl->args.size
2461 - crtl->args.pretend_args_size)
2462 /* If the callee pops its own arguments, then it must pop exactly
2463 the same number of arguments as the current function. */
2464 || (targetm.calls.return_pops_args (fndecl, funtype, args_size.constant)
2465 != targetm.calls.return_pops_args (current_function_decl,
2466 TREE_TYPE (current_function_decl),
2467 crtl->args.size))
2468 || !lang_hooks.decls.ok_for_sibcall (fndecl))
2469 try_tail_call = 0;
2471 /* Check if caller and callee disagree in promotion of function
2472 return value. */
2473 if (try_tail_call)
2475 enum machine_mode caller_mode, caller_promoted_mode;
2476 enum machine_mode callee_mode, callee_promoted_mode;
2477 int caller_unsignedp, callee_unsignedp;
2478 tree caller_res = DECL_RESULT (current_function_decl);
2480 caller_unsignedp = TYPE_UNSIGNED (TREE_TYPE (caller_res));
2481 caller_mode = DECL_MODE (caller_res);
2482 callee_unsignedp = TYPE_UNSIGNED (TREE_TYPE (funtype));
2483 callee_mode = TYPE_MODE (TREE_TYPE (funtype));
2484 caller_promoted_mode
2485 = promote_function_mode (TREE_TYPE (caller_res), caller_mode,
2486 &caller_unsignedp,
2487 TREE_TYPE (current_function_decl), 1);
2488 callee_promoted_mode
2489 = promote_function_mode (TREE_TYPE (funtype), callee_mode,
2490 &callee_unsignedp,
2491 funtype, 1);
2492 if (caller_mode != VOIDmode
2493 && (caller_promoted_mode != callee_promoted_mode
2494 || ((caller_mode != caller_promoted_mode
2495 || callee_mode != callee_promoted_mode)
2496 && (caller_unsignedp != callee_unsignedp
2497 || GET_MODE_BITSIZE (caller_mode)
2498 < GET_MODE_BITSIZE (callee_mode)))))
2499 try_tail_call = 0;
2502 /* Ensure current function's preferred stack boundary is at least
2503 what we need. Stack alignment may also increase preferred stack
2504 boundary. */
2505 if (crtl->preferred_stack_boundary < preferred_stack_boundary)
2506 crtl->preferred_stack_boundary = preferred_stack_boundary;
2507 else
2508 preferred_stack_boundary = crtl->preferred_stack_boundary;
2510 preferred_unit_stack_boundary = preferred_stack_boundary / BITS_PER_UNIT;
2512 /* We want to make two insn chains; one for a sibling call, the other
2513 for a normal call. We will select one of the two chains after
2514 initial RTL generation is complete. */
2515 for (pass = try_tail_call ? 0 : 1; pass < 2; pass++)
2517 int sibcall_failure = 0;
2518 /* We want to emit any pending stack adjustments before the tail
2519 recursion "call". That way we know any adjustment after the tail
2520 recursion call can be ignored if we indeed use the tail
2521 call expansion. */
2522 int save_pending_stack_adjust = 0;
2523 int save_stack_pointer_delta = 0;
2524 rtx insns;
2525 rtx before_call, next_arg_reg, after_args;
2527 if (pass == 0)
2529 /* State variables we need to save and restore between
2530 iterations. */
2531 save_pending_stack_adjust = pending_stack_adjust;
2532 save_stack_pointer_delta = stack_pointer_delta;
2534 if (pass)
2535 flags &= ~ECF_SIBCALL;
2536 else
2537 flags |= ECF_SIBCALL;
2539 /* Other state variables that we must reinitialize each time
2540 through the loop (that are not initialized by the loop itself). */
2541 argblock = 0;
2542 call_fusage = 0;
2544 /* Start a new sequence for the normal call case.
2546 From this point on, if the sibling call fails, we want to set
2547 sibcall_failure instead of continuing the loop. */
2548 start_sequence ();
2550 /* Don't let pending stack adjusts add up to too much.
2551 Also, do all pending adjustments now if there is any chance
2552 this might be a call to alloca or if we are expanding a sibling
2553 call sequence.
2554 Also do the adjustments before a throwing call, otherwise
2555 exception handling can fail; PR 19225. */
2556 if (pending_stack_adjust >= 32
2557 || (pending_stack_adjust > 0
2558 && (flags & ECF_MAY_BE_ALLOCA))
2559 || (pending_stack_adjust > 0
2560 && flag_exceptions && !(flags & ECF_NOTHROW))
2561 || pass == 0)
2562 do_pending_stack_adjust ();
2564 /* Precompute any arguments as needed. */
2565 if (pass)
2566 precompute_arguments (num_actuals, args);
2568 /* Now we are about to start emitting insns that can be deleted
2569 if a libcall is deleted. */
2570 if (pass && (flags & ECF_MALLOC))
2571 start_sequence ();
2573 if (pass == 0 && crtl->stack_protect_guard)
2574 stack_protect_epilogue ();
2576 adjusted_args_size = args_size;
2577 /* Compute the actual size of the argument block required. The variable
2578 and constant sizes must be combined, the size may have to be rounded,
2579 and there may be a minimum required size. When generating a sibcall
2580 pattern, do not round up, since we'll be re-using whatever space our
2581 caller provided. */
2582 unadjusted_args_size
2583 = compute_argument_block_size (reg_parm_stack_space,
2584 &adjusted_args_size,
2585 fndecl, fntype,
2586 (pass == 0 ? 0
2587 : preferred_stack_boundary));
2589 old_stack_allocated = stack_pointer_delta - pending_stack_adjust;
2591 /* The argument block when performing a sibling call is the
2592 incoming argument block. */
2593 if (pass == 0)
2595 argblock = crtl->args.internal_arg_pointer;
2596 argblock
2597 #ifdef STACK_GROWS_DOWNWARD
2598 = plus_constant (argblock, crtl->args.pretend_args_size);
2599 #else
2600 = plus_constant (argblock, -crtl->args.pretend_args_size);
2601 #endif
2602 stored_args_map = sbitmap_alloc (args_size.constant);
2603 sbitmap_zero (stored_args_map);
2606 /* If we have no actual push instructions, or shouldn't use them,
2607 make space for all args right now. */
2608 else if (adjusted_args_size.var != 0)
2610 if (old_stack_level == 0)
2612 emit_stack_save (SAVE_BLOCK, &old_stack_level);
2613 old_stack_pointer_delta = stack_pointer_delta;
2614 old_pending_adj = pending_stack_adjust;
2615 pending_stack_adjust = 0;
2616 /* stack_arg_under_construction says whether a stack arg is
2617 being constructed at the old stack level. Pushing the stack
2618 gets a clean outgoing argument block. */
2619 old_stack_arg_under_construction = stack_arg_under_construction;
2620 stack_arg_under_construction = 0;
2622 argblock = push_block (ARGS_SIZE_RTX (adjusted_args_size), 0, 0);
2623 if (flag_stack_usage_info)
2624 current_function_has_unbounded_dynamic_stack_size = 1;
2626 else
2628 /* Note that we must go through the motions of allocating an argument
2629 block even if the size is zero because we may be storing args
2630 in the area reserved for register arguments, which may be part of
2631 the stack frame. */
2633 int needed = adjusted_args_size.constant;
2635 /* Store the maximum argument space used. It will be pushed by
2636 the prologue (if ACCUMULATE_OUTGOING_ARGS, or stack overflow
2637 checking). */
2639 if (needed > crtl->outgoing_args_size)
2640 crtl->outgoing_args_size = needed;
2642 if (must_preallocate)
2644 if (ACCUMULATE_OUTGOING_ARGS)
2646 /* Since the stack pointer will never be pushed, it is
2647 possible for the evaluation of a parm to clobber
2648 something we have already written to the stack.
2649 Since most function calls on RISC machines do not use
2650 the stack, this is uncommon, but must work correctly.
2652 Therefore, we save any area of the stack that was already
2653 written and that we are using. Here we set up to do this
2654 by making a new stack usage map from the old one. The
2655 actual save will be done by store_one_arg.
2657 Another approach might be to try to reorder the argument
2658 evaluations to avoid this conflicting stack usage. */
2660 /* Since we will be writing into the entire argument area,
2661 the map must be allocated for its entire size, not just
2662 the part that is the responsibility of the caller. */
2663 if (! OUTGOING_REG_PARM_STACK_SPACE ((!fndecl ? fntype : TREE_TYPE (fndecl))))
2664 needed += reg_parm_stack_space;
2666 #ifdef ARGS_GROW_DOWNWARD
2667 highest_outgoing_arg_in_use = MAX (initial_highest_arg_in_use,
2668 needed + 1);
2669 #else
2670 highest_outgoing_arg_in_use = MAX (initial_highest_arg_in_use,
2671 needed);
2672 #endif
2673 free (stack_usage_map_buf);
2674 stack_usage_map_buf = XNEWVEC (char, highest_outgoing_arg_in_use);
2675 stack_usage_map = stack_usage_map_buf;
2677 if (initial_highest_arg_in_use)
2678 memcpy (stack_usage_map, initial_stack_usage_map,
2679 initial_highest_arg_in_use);
2681 if (initial_highest_arg_in_use != highest_outgoing_arg_in_use)
2682 memset (&stack_usage_map[initial_highest_arg_in_use], 0,
2683 (highest_outgoing_arg_in_use
2684 - initial_highest_arg_in_use));
2685 needed = 0;
2687 /* The address of the outgoing argument list must not be
2688 copied to a register here, because argblock would be left
2689 pointing to the wrong place after the call to
2690 allocate_dynamic_stack_space below. */
2692 argblock = virtual_outgoing_args_rtx;
2694 else
2696 if (inhibit_defer_pop == 0)
2698 /* Try to reuse some or all of the pending_stack_adjust
2699 to get this space. */
2700 needed
2701 = (combine_pending_stack_adjustment_and_call
2702 (unadjusted_args_size,
2703 &adjusted_args_size,
2704 preferred_unit_stack_boundary));
2706 /* combine_pending_stack_adjustment_and_call computes
2707 an adjustment before the arguments are allocated.
2708 Account for them and see whether or not the stack
2709 needs to go up or down. */
2710 needed = unadjusted_args_size - needed;
2712 if (needed < 0)
2714 /* We're releasing stack space. */
2715 /* ??? We can avoid any adjustment at all if we're
2716 already aligned. FIXME. */
2717 pending_stack_adjust = -needed;
2718 do_pending_stack_adjust ();
2719 needed = 0;
2721 else
2722 /* We need to allocate space. We'll do that in
2723 push_block below. */
2724 pending_stack_adjust = 0;
2727 /* Special case this because overhead of `push_block' in
2728 this case is non-trivial. */
2729 if (needed == 0)
2730 argblock = virtual_outgoing_args_rtx;
2731 else
2733 argblock = push_block (GEN_INT (needed), 0, 0);
2734 #ifdef ARGS_GROW_DOWNWARD
2735 argblock = plus_constant (argblock, needed);
2736 #endif
2739 /* We only really need to call `copy_to_reg' in the case
2740 where push insns are going to be used to pass ARGBLOCK
2741 to a function call in ARGS. In that case, the stack
2742 pointer changes value from the allocation point to the
2743 call point, and hence the value of
2744 VIRTUAL_OUTGOING_ARGS_RTX changes as well. But might
2745 as well always do it. */
2746 argblock = copy_to_reg (argblock);
2751 if (ACCUMULATE_OUTGOING_ARGS)
2753 /* The save/restore code in store_one_arg handles all
2754 cases except one: a constructor call (including a C
2755 function returning a BLKmode struct) to initialize
2756 an argument. */
2757 if (stack_arg_under_construction)
2759 rtx push_size
2760 = GEN_INT (adjusted_args_size.constant
2761 + (OUTGOING_REG_PARM_STACK_SPACE ((!fndecl ? fntype
2762 : TREE_TYPE (fndecl))) ? 0
2763 : reg_parm_stack_space));
2764 if (old_stack_level == 0)
2766 emit_stack_save (SAVE_BLOCK, &old_stack_level);
2767 old_stack_pointer_delta = stack_pointer_delta;
2768 old_pending_adj = pending_stack_adjust;
2769 pending_stack_adjust = 0;
2770 /* stack_arg_under_construction says whether a stack
2771 arg is being constructed at the old stack level.
2772 Pushing the stack gets a clean outgoing argument
2773 block. */
2774 old_stack_arg_under_construction
2775 = stack_arg_under_construction;
2776 stack_arg_under_construction = 0;
2777 /* Make a new map for the new argument list. */
2778 free (stack_usage_map_buf);
2779 stack_usage_map_buf = XCNEWVEC (char, highest_outgoing_arg_in_use);
2780 stack_usage_map = stack_usage_map_buf;
2781 highest_outgoing_arg_in_use = 0;
2783 /* We can pass TRUE as the 4th argument because we just
2784 saved the stack pointer and will restore it right after
2785 the call. */
2786 allocate_dynamic_stack_space (push_size, 0,
2787 BIGGEST_ALIGNMENT, true);
2790 /* If argument evaluation might modify the stack pointer,
2791 copy the address of the argument list to a register. */
2792 for (i = 0; i < num_actuals; i++)
2793 if (args[i].pass_on_stack)
2795 argblock = copy_addr_to_reg (argblock);
2796 break;
2800 compute_argument_addresses (args, argblock, num_actuals);
2802 /* If we push args individually in reverse order, perform stack alignment
2803 before the first push (the last arg). */
2804 if (PUSH_ARGS_REVERSED && argblock == 0
2805 && adjusted_args_size.constant != unadjusted_args_size)
2807 /* When the stack adjustment is pending, we get better code
2808 by combining the adjustments. */
2809 if (pending_stack_adjust
2810 && ! inhibit_defer_pop)
2812 pending_stack_adjust
2813 = (combine_pending_stack_adjustment_and_call
2814 (unadjusted_args_size,
2815 &adjusted_args_size,
2816 preferred_unit_stack_boundary));
2817 do_pending_stack_adjust ();
2819 else if (argblock == 0)
2820 anti_adjust_stack (GEN_INT (adjusted_args_size.constant
2821 - unadjusted_args_size));
2823 /* Now that the stack is properly aligned, pops can't safely
2824 be deferred during the evaluation of the arguments. */
2825 NO_DEFER_POP;
2827 /* Record the maximum pushed stack space size. We need to delay
2828 doing it this far to take into account the optimization done
2829 by combine_pending_stack_adjustment_and_call. */
2830 if (flag_stack_usage_info
2831 && !ACCUMULATE_OUTGOING_ARGS
2832 && pass
2833 && adjusted_args_size.var == 0)
2835 int pushed = adjusted_args_size.constant + pending_stack_adjust;
2836 if (pushed > current_function_pushed_stack_size)
2837 current_function_pushed_stack_size = pushed;
2840 funexp = rtx_for_function_call (fndecl, addr);
2842 /* Figure out the register where the value, if any, will come back. */
2843 valreg = 0;
2844 if (TYPE_MODE (rettype) != VOIDmode
2845 && ! structure_value_addr)
2847 if (pcc_struct_value)
2848 valreg = hard_function_value (build_pointer_type (rettype),
2849 fndecl, NULL, (pass == 0));
2850 else
2851 valreg = hard_function_value (rettype, fndecl, fntype,
2852 (pass == 0));
2854 /* If VALREG is a PARALLEL whose first member has a zero
2855 offset, use that. This is for targets such as m68k that
2856 return the same value in multiple places. */
2857 if (GET_CODE (valreg) == PARALLEL)
2859 rtx elem = XVECEXP (valreg, 0, 0);
2860 rtx where = XEXP (elem, 0);
2861 rtx offset = XEXP (elem, 1);
2862 if (offset == const0_rtx
2863 && GET_MODE (where) == GET_MODE (valreg))
2864 valreg = where;
2868 /* Precompute all register parameters. It isn't safe to compute anything
2869 once we have started filling any specific hard regs. */
2870 precompute_register_parameters (num_actuals, args, &reg_parm_seen);
2872 if (CALL_EXPR_STATIC_CHAIN (exp))
2873 static_chain_value = expand_normal (CALL_EXPR_STATIC_CHAIN (exp));
2874 else
2875 static_chain_value = 0;
2877 #ifdef REG_PARM_STACK_SPACE
2878 /* Save the fixed argument area if it's part of the caller's frame and
2879 is clobbered by argument setup for this call. */
2880 if (ACCUMULATE_OUTGOING_ARGS && pass)
2881 save_area = save_fixed_argument_area (reg_parm_stack_space, argblock,
2882 &low_to_save, &high_to_save);
2883 #endif
2885 /* Now store (and compute if necessary) all non-register parms.
2886 These come before register parms, since they can require block-moves,
2887 which could clobber the registers used for register parms.
2888 Parms which have partial registers are not stored here,
2889 but we do preallocate space here if they want that. */
2891 for (i = 0; i < num_actuals; i++)
2893 if (args[i].reg == 0 || args[i].pass_on_stack)
2895 rtx before_arg = get_last_insn ();
2897 if (store_one_arg (&args[i], argblock, flags,
2898 adjusted_args_size.var != 0,
2899 reg_parm_stack_space)
2900 || (pass == 0
2901 && check_sibcall_argument_overlap (before_arg,
2902 &args[i], 1)))
2903 sibcall_failure = 1;
2906 if (args[i].stack)
2907 call_fusage
2908 = gen_rtx_EXPR_LIST (TYPE_MODE (TREE_TYPE (args[i].tree_value)),
2909 gen_rtx_USE (VOIDmode, args[i].stack),
2910 call_fusage);
2913 /* If we have a parm that is passed in registers but not in memory
2914 and whose alignment does not permit a direct copy into registers,
2915 make a group of pseudos that correspond to each register that we
2916 will later fill. */
2917 if (STRICT_ALIGNMENT)
2918 store_unaligned_arguments_into_pseudos (args, num_actuals);
2920 /* Now store any partially-in-registers parm.
2921 This is the last place a block-move can happen. */
2922 if (reg_parm_seen)
2923 for (i = 0; i < num_actuals; i++)
2924 if (args[i].partial != 0 && ! args[i].pass_on_stack)
2926 rtx before_arg = get_last_insn ();
2928 if (store_one_arg (&args[i], argblock, flags,
2929 adjusted_args_size.var != 0,
2930 reg_parm_stack_space)
2931 || (pass == 0
2932 && check_sibcall_argument_overlap (before_arg,
2933 &args[i], 1)))
2934 sibcall_failure = 1;
2937 /* If we pushed args in forward order, perform stack alignment
2938 after pushing the last arg. */
2939 if (!PUSH_ARGS_REVERSED && argblock == 0)
2940 anti_adjust_stack (GEN_INT (adjusted_args_size.constant
2941 - unadjusted_args_size));
2943 /* If register arguments require space on the stack and stack space
2944 was not preallocated, allocate stack space here for arguments
2945 passed in registers. */
2946 if (OUTGOING_REG_PARM_STACK_SPACE ((!fndecl ? fntype : TREE_TYPE (fndecl)))
2947 && !ACCUMULATE_OUTGOING_ARGS
2948 && must_preallocate == 0 && reg_parm_stack_space > 0)
2949 anti_adjust_stack (GEN_INT (reg_parm_stack_space));
2951 /* Pass the function the address in which to return a
2952 structure value. */
2953 if (pass != 0 && structure_value_addr && ! structure_value_addr_parm)
2955 structure_value_addr
2956 = convert_memory_address (Pmode, structure_value_addr);
2957 emit_move_insn (struct_value,
2958 force_reg (Pmode,
2959 force_operand (structure_value_addr,
2960 NULL_RTX)));
2962 if (REG_P (struct_value))
2963 use_reg (&call_fusage, struct_value);
2966 after_args = get_last_insn ();
2967 funexp = prepare_call_address (fndecl, funexp, static_chain_value,
2968 &call_fusage, reg_parm_seen, pass == 0);
2970 load_register_parameters (args, num_actuals, &call_fusage, flags,
2971 pass == 0, &sibcall_failure);
2973 /* Save a pointer to the last insn before the call, so that we can
2974 later safely search backwards to find the CALL_INSN. */
2975 before_call = get_last_insn ();
2977 /* Set up next argument register. For sibling calls on machines
2978 with register windows this should be the incoming register. */
2979 if (pass == 0)
2980 next_arg_reg = targetm.calls.function_incoming_arg (args_so_far,
2981 VOIDmode,
2982 void_type_node,
2983 true);
2984 else
2985 next_arg_reg = targetm.calls.function_arg (args_so_far,
2986 VOIDmode, void_type_node,
2987 true);
2989 /* All arguments and registers used for the call must be set up by
2990 now! */
2992 /* Stack must be properly aligned now. */
2993 gcc_assert (!pass
2994 || !(stack_pointer_delta % preferred_unit_stack_boundary));
2996 /* Generate the actual call instruction. */
2997 emit_call_1 (funexp, exp, fndecl, funtype, unadjusted_args_size,
2998 adjusted_args_size.constant, struct_value_size,
2999 next_arg_reg, valreg, old_inhibit_defer_pop, call_fusage,
3000 flags, args_so_far);
3002 /* If the call setup or the call itself overlaps with anything
3003 of the argument setup we probably clobbered our call address.
3004 In that case we can't do sibcalls. */
3005 if (pass == 0
3006 && check_sibcall_argument_overlap (after_args, 0, 0))
3007 sibcall_failure = 1;
3009 /* If a non-BLKmode value is returned at the most significant end
3010 of a register, shift the register right by the appropriate amount
3011 and update VALREG accordingly. BLKmode values are handled by the
3012 group load/store machinery below. */
3013 if (!structure_value_addr
3014 && !pcc_struct_value
3015 && TYPE_MODE (rettype) != BLKmode
3016 && targetm.calls.return_in_msb (rettype))
3018 if (shift_return_value (TYPE_MODE (rettype), false, valreg))
3019 sibcall_failure = 1;
3020 valreg = gen_rtx_REG (TYPE_MODE (rettype), REGNO (valreg));
3023 if (pass && (flags & ECF_MALLOC))
3025 rtx temp = gen_reg_rtx (GET_MODE (valreg));
3026 rtx last, insns;
3028 /* The return value from a malloc-like function is a pointer. */
3029 if (TREE_CODE (rettype) == POINTER_TYPE)
3030 mark_reg_pointer (temp, BIGGEST_ALIGNMENT);
3032 emit_move_insn (temp, valreg);
3034 /* The return value from a malloc-like function can not alias
3035 anything else. */
3036 last = get_last_insn ();
3037 add_reg_note (last, REG_NOALIAS, temp);
3039 /* Write out the sequence. */
3040 insns = get_insns ();
3041 end_sequence ();
3042 emit_insn (insns);
3043 valreg = temp;
3046 /* For calls to `setjmp', etc., inform
3047 function.c:setjmp_warnings that it should complain if
3048 nonvolatile values are live. For functions that cannot
3049 return, inform flow that control does not fall through. */
3051 if ((flags & ECF_NORETURN) || pass == 0)
3053 /* The barrier must be emitted
3054 immediately after the CALL_INSN. Some ports emit more
3055 than just a CALL_INSN above, so we must search for it here. */
3057 rtx last = get_last_insn ();
3058 while (!CALL_P (last))
3060 last = PREV_INSN (last);
3061 /* There was no CALL_INSN? */
3062 gcc_assert (last != before_call);
3065 emit_barrier_after (last);
3067 /* Stack adjustments after a noreturn call are dead code.
3068 However when NO_DEFER_POP is in effect, we must preserve
3069 stack_pointer_delta. */
3070 if (inhibit_defer_pop == 0)
3072 stack_pointer_delta = old_stack_allocated;
3073 pending_stack_adjust = 0;
3077 /* If value type not void, return an rtx for the value. */
3079 if (TYPE_MODE (rettype) == VOIDmode
3080 || ignore)
3081 target = const0_rtx;
3082 else if (structure_value_addr)
3084 if (target == 0 || !MEM_P (target))
3086 target
3087 = gen_rtx_MEM (TYPE_MODE (rettype),
3088 memory_address (TYPE_MODE (rettype),
3089 structure_value_addr));
3090 set_mem_attributes (target, rettype, 1);
3093 else if (pcc_struct_value)
3095 /* This is the special C++ case where we need to
3096 know what the true target was. We take care to
3097 never use this value more than once in one expression. */
3098 target = gen_rtx_MEM (TYPE_MODE (rettype),
3099 copy_to_reg (valreg));
3100 set_mem_attributes (target, rettype, 1);
3102 /* Handle calls that return values in multiple non-contiguous locations.
3103 The Irix 6 ABI has examples of this. */
3104 else if (GET_CODE (valreg) == PARALLEL)
3106 if (target == 0)
3108 /* This will only be assigned once, so it can be readonly. */
3109 tree nt = build_qualified_type (rettype,
3110 (TYPE_QUALS (rettype)
3111 | TYPE_QUAL_CONST));
3113 target = assign_temp (nt, 0, 1, 1);
3116 if (! rtx_equal_p (target, valreg))
3117 emit_group_store (target, valreg, rettype,
3118 int_size_in_bytes (rettype));
3120 /* We can not support sibling calls for this case. */
3121 sibcall_failure = 1;
3123 else if (target
3124 && GET_MODE (target) == TYPE_MODE (rettype)
3125 && GET_MODE (target) == GET_MODE (valreg))
3127 bool may_overlap = false;
3129 /* We have to copy a return value in a CLASS_LIKELY_SPILLED hard
3130 reg to a plain register. */
3131 if (!REG_P (target) || HARD_REGISTER_P (target))
3132 valreg = avoid_likely_spilled_reg (valreg);
3134 /* If TARGET is a MEM in the argument area, and we have
3135 saved part of the argument area, then we can't store
3136 directly into TARGET as it may get overwritten when we
3137 restore the argument save area below. Don't work too
3138 hard though and simply force TARGET to a register if it
3139 is a MEM; the optimizer is quite likely to sort it out. */
3140 if (ACCUMULATE_OUTGOING_ARGS && pass && MEM_P (target))
3141 for (i = 0; i < num_actuals; i++)
3142 if (args[i].save_area)
3144 may_overlap = true;
3145 break;
3148 if (may_overlap)
3149 target = copy_to_reg (valreg);
3150 else
3152 /* TARGET and VALREG cannot be equal at this point
3153 because the latter would not have
3154 REG_FUNCTION_VALUE_P true, while the former would if
3155 it were referring to the same register.
3157 If they refer to the same register, this move will be
3158 a no-op, except when function inlining is being
3159 done. */
3160 emit_move_insn (target, valreg);
3162 /* If we are setting a MEM, this code must be executed.
3163 Since it is emitted after the call insn, sibcall
3164 optimization cannot be performed in that case. */
3165 if (MEM_P (target))
3166 sibcall_failure = 1;
3169 else if (TYPE_MODE (rettype) == BLKmode)
3171 rtx val = valreg;
3172 if (GET_MODE (val) != BLKmode)
3173 val = avoid_likely_spilled_reg (val);
3174 target = copy_blkmode_from_reg (target, val, rettype);
3176 /* We can not support sibling calls for this case. */
3177 sibcall_failure = 1;
3179 else
3180 target = copy_to_reg (avoid_likely_spilled_reg (valreg));
3182 /* If we promoted this return value, make the proper SUBREG.
3183 TARGET might be const0_rtx here, so be careful. */
3184 if (REG_P (target)
3185 && TYPE_MODE (rettype) != BLKmode
3186 && GET_MODE (target) != TYPE_MODE (rettype))
3188 tree type = rettype;
3189 int unsignedp = TYPE_UNSIGNED (type);
3190 int offset = 0;
3191 enum machine_mode pmode;
3193 /* Ensure we promote as expected, and get the new unsignedness. */
3194 pmode = promote_function_mode (type, TYPE_MODE (type), &unsignedp,
3195 funtype, 1);
3196 gcc_assert (GET_MODE (target) == pmode);
3198 if ((WORDS_BIG_ENDIAN || BYTES_BIG_ENDIAN)
3199 && (GET_MODE_SIZE (GET_MODE (target))
3200 > GET_MODE_SIZE (TYPE_MODE (type))))
3202 offset = GET_MODE_SIZE (GET_MODE (target))
3203 - GET_MODE_SIZE (TYPE_MODE (type));
3204 if (! BYTES_BIG_ENDIAN)
3205 offset = (offset / UNITS_PER_WORD) * UNITS_PER_WORD;
3206 else if (! WORDS_BIG_ENDIAN)
3207 offset %= UNITS_PER_WORD;
3210 target = gen_rtx_SUBREG (TYPE_MODE (type), target, offset);
3211 SUBREG_PROMOTED_VAR_P (target) = 1;
3212 SUBREG_PROMOTED_UNSIGNED_SET (target, unsignedp);
3215 /* If size of args is variable or this was a constructor call for a stack
3216 argument, restore saved stack-pointer value. */
3218 if (old_stack_level)
3220 rtx prev = get_last_insn ();
3222 emit_stack_restore (SAVE_BLOCK, old_stack_level);
3223 stack_pointer_delta = old_stack_pointer_delta;
3225 fixup_args_size_notes (prev, get_last_insn (), stack_pointer_delta);
3227 pending_stack_adjust = old_pending_adj;
3228 old_stack_allocated = stack_pointer_delta - pending_stack_adjust;
3229 stack_arg_under_construction = old_stack_arg_under_construction;
3230 highest_outgoing_arg_in_use = initial_highest_arg_in_use;
3231 stack_usage_map = initial_stack_usage_map;
3232 sibcall_failure = 1;
3234 else if (ACCUMULATE_OUTGOING_ARGS && pass)
3236 #ifdef REG_PARM_STACK_SPACE
3237 if (save_area)
3238 restore_fixed_argument_area (save_area, argblock,
3239 high_to_save, low_to_save);
3240 #endif
3242 /* If we saved any argument areas, restore them. */
3243 for (i = 0; i < num_actuals; i++)
3244 if (args[i].save_area)
3246 enum machine_mode save_mode = GET_MODE (args[i].save_area);
3247 rtx stack_area
3248 = gen_rtx_MEM (save_mode,
3249 memory_address (save_mode,
3250 XEXP (args[i].stack_slot, 0)));
3252 if (save_mode != BLKmode)
3253 emit_move_insn (stack_area, args[i].save_area);
3254 else
3255 emit_block_move (stack_area, args[i].save_area,
3256 GEN_INT (args[i].locate.size.constant),
3257 BLOCK_OP_CALL_PARM);
3260 highest_outgoing_arg_in_use = initial_highest_arg_in_use;
3261 stack_usage_map = initial_stack_usage_map;
3264 /* If this was alloca, record the new stack level for nonlocal gotos.
3265 Check for the handler slots since we might not have a save area
3266 for non-local gotos. */
3268 if ((flags & ECF_MAY_BE_ALLOCA) && cfun->nonlocal_goto_save_area != 0)
3269 update_nonlocal_goto_save_area ();
3271 /* Free up storage we no longer need. */
3272 for (i = 0; i < num_actuals; ++i)
3273 free (args[i].aligned_regs);
3275 insns = get_insns ();
3276 end_sequence ();
3278 if (pass == 0)
3280 tail_call_insns = insns;
3282 /* Restore the pending stack adjustment now that we have
3283 finished generating the sibling call sequence. */
3285 pending_stack_adjust = save_pending_stack_adjust;
3286 stack_pointer_delta = save_stack_pointer_delta;
3288 /* Prepare arg structure for next iteration. */
3289 for (i = 0; i < num_actuals; i++)
3291 args[i].value = 0;
3292 args[i].aligned_regs = 0;
3293 args[i].stack = 0;
3296 sbitmap_free (stored_args_map);
3298 else
3300 normal_call_insns = insns;
3302 /* Verify that we've deallocated all the stack we used. */
3303 gcc_assert ((flags & ECF_NORETURN)
3304 || (old_stack_allocated
3305 == stack_pointer_delta - pending_stack_adjust));
3308 /* If something prevents making this a sibling call,
3309 zero out the sequence. */
3310 if (sibcall_failure)
3311 tail_call_insns = NULL_RTX;
3312 else
3313 break;
3316 /* If tail call production succeeded, we need to remove REG_EQUIV notes on
3317 arguments too, as argument area is now clobbered by the call. */
3318 if (tail_call_insns)
3320 emit_insn (tail_call_insns);
3321 crtl->tail_call_emit = true;
3323 else
3324 emit_insn (normal_call_insns);
3326 currently_expanding_call--;
3328 free (stack_usage_map_buf);
3330 return target;
3333 /* A sibling call sequence invalidates any REG_EQUIV notes made for
3334 this function's incoming arguments.
3336 At the start of RTL generation we know the only REG_EQUIV notes
3337 in the rtl chain are those for incoming arguments, so we can look
3338 for REG_EQUIV notes between the start of the function and the
3339 NOTE_INSN_FUNCTION_BEG.
3341 This is (slight) overkill. We could keep track of the highest
3342 argument we clobber and be more selective in removing notes, but it
3343 does not seem to be worth the effort. */
3345 void
3346 fixup_tail_calls (void)
3348 rtx insn;
3350 for (insn = get_insns (); insn; insn = NEXT_INSN (insn))
3352 rtx note;
3354 /* There are never REG_EQUIV notes for the incoming arguments
3355 after the NOTE_INSN_FUNCTION_BEG note, so stop if we see it. */
3356 if (NOTE_P (insn)
3357 && NOTE_KIND (insn) == NOTE_INSN_FUNCTION_BEG)
3358 break;
3360 note = find_reg_note (insn, REG_EQUIV, 0);
3361 if (note)
3362 remove_note (insn, note);
3363 note = find_reg_note (insn, REG_EQUIV, 0);
3364 gcc_assert (!note);
3368 /* Traverse a list of TYPES and expand all complex types into their
3369 components. */
3370 static tree
3371 split_complex_types (tree types)
3373 tree p;
3375 /* Before allocating memory, check for the common case of no complex. */
3376 for (p = types; p; p = TREE_CHAIN (p))
3378 tree type = TREE_VALUE (p);
3379 if (TREE_CODE (type) == COMPLEX_TYPE
3380 && targetm.calls.split_complex_arg (type))
3381 goto found;
3383 return types;
3385 found:
3386 types = copy_list (types);
3388 for (p = types; p; p = TREE_CHAIN (p))
3390 tree complex_type = TREE_VALUE (p);
3392 if (TREE_CODE (complex_type) == COMPLEX_TYPE
3393 && targetm.calls.split_complex_arg (complex_type))
3395 tree next, imag;
3397 /* Rewrite complex type with component type. */
3398 TREE_VALUE (p) = TREE_TYPE (complex_type);
3399 next = TREE_CHAIN (p);
3401 /* Add another component type for the imaginary part. */
3402 imag = build_tree_list (NULL_TREE, TREE_VALUE (p));
3403 TREE_CHAIN (p) = imag;
3404 TREE_CHAIN (imag) = next;
3406 /* Skip the newly created node. */
3407 p = TREE_CHAIN (p);
3411 return types;
3414 /* Output a library call to function FUN (a SYMBOL_REF rtx).
3415 The RETVAL parameter specifies whether return value needs to be saved, other
3416 parameters are documented in the emit_library_call function below. */
3418 static rtx
3419 emit_library_call_value_1 (int retval, rtx orgfun, rtx value,
3420 enum libcall_type fn_type,
3421 enum machine_mode outmode, int nargs, va_list p)
3423 /* Total size in bytes of all the stack-parms scanned so far. */
3424 struct args_size args_size;
3425 /* Size of arguments before any adjustments (such as rounding). */
3426 struct args_size original_args_size;
3427 int argnum;
3428 rtx fun;
3429 /* Todo, choose the correct decl type of orgfun. Sadly this information
3430 isn't present here, so we default to native calling abi here. */
3431 tree fndecl ATTRIBUTE_UNUSED = NULL_TREE; /* library calls default to host calling abi ? */
3432 tree fntype ATTRIBUTE_UNUSED = NULL_TREE; /* library calls default to host calling abi ? */
3433 int inc;
3434 int count;
3435 rtx argblock = 0;
3436 CUMULATIVE_ARGS args_so_far_v;
3437 cumulative_args_t args_so_far;
3438 struct arg
3440 rtx value;
3441 enum machine_mode mode;
3442 rtx reg;
3443 int partial;
3444 struct locate_and_pad_arg_data locate;
3445 rtx save_area;
3447 struct arg *argvec;
3448 int old_inhibit_defer_pop = inhibit_defer_pop;
3449 rtx call_fusage = 0;
3450 rtx mem_value = 0;
3451 rtx valreg;
3452 int pcc_struct_value = 0;
3453 int struct_value_size = 0;
3454 int flags;
3455 int reg_parm_stack_space = 0;
3456 int needed;
3457 rtx before_call;
3458 tree tfom; /* type_for_mode (outmode, 0) */
3460 #ifdef REG_PARM_STACK_SPACE
3461 /* Define the boundary of the register parm stack space that needs to be
3462 save, if any. */
3463 int low_to_save = 0, high_to_save = 0;
3464 rtx save_area = 0; /* Place that it is saved. */
3465 #endif
3467 /* Size of the stack reserved for parameter registers. */
3468 int initial_highest_arg_in_use = highest_outgoing_arg_in_use;
3469 char *initial_stack_usage_map = stack_usage_map;
3470 char *stack_usage_map_buf = NULL;
3472 rtx struct_value = targetm.calls.struct_value_rtx (0, 0);
3474 #ifdef REG_PARM_STACK_SPACE
3475 reg_parm_stack_space = REG_PARM_STACK_SPACE ((tree) 0);
3476 #endif
3478 /* By default, library functions can not throw. */
3479 flags = ECF_NOTHROW;
3481 switch (fn_type)
3483 case LCT_NORMAL:
3484 break;
3485 case LCT_CONST:
3486 flags |= ECF_CONST;
3487 break;
3488 case LCT_PURE:
3489 flags |= ECF_PURE;
3490 break;
3491 case LCT_NORETURN:
3492 flags |= ECF_NORETURN;
3493 break;
3494 case LCT_THROW:
3495 flags = ECF_NORETURN;
3496 break;
3497 case LCT_RETURNS_TWICE:
3498 flags = ECF_RETURNS_TWICE;
3499 break;
3501 fun = orgfun;
3503 /* Ensure current function's preferred stack boundary is at least
3504 what we need. */
3505 if (crtl->preferred_stack_boundary < PREFERRED_STACK_BOUNDARY)
3506 crtl->preferred_stack_boundary = PREFERRED_STACK_BOUNDARY;
3508 /* If this kind of value comes back in memory,
3509 decide where in memory it should come back. */
3510 if (outmode != VOIDmode)
3512 tfom = lang_hooks.types.type_for_mode (outmode, 0);
3513 if (aggregate_value_p (tfom, 0))
3515 #ifdef PCC_STATIC_STRUCT_RETURN
3516 rtx pointer_reg
3517 = hard_function_value (build_pointer_type (tfom), 0, 0, 0);
3518 mem_value = gen_rtx_MEM (outmode, pointer_reg);
3519 pcc_struct_value = 1;
3520 if (value == 0)
3521 value = gen_reg_rtx (outmode);
3522 #else /* not PCC_STATIC_STRUCT_RETURN */
3523 struct_value_size = GET_MODE_SIZE (outmode);
3524 if (value != 0 && MEM_P (value))
3525 mem_value = value;
3526 else
3527 mem_value = assign_temp (tfom, 0, 1, 1);
3528 #endif
3529 /* This call returns a big structure. */
3530 flags &= ~(ECF_CONST | ECF_PURE | ECF_LOOPING_CONST_OR_PURE);
3533 else
3534 tfom = void_type_node;
3536 /* ??? Unfinished: must pass the memory address as an argument. */
3538 /* Copy all the libcall-arguments out of the varargs data
3539 and into a vector ARGVEC.
3541 Compute how to pass each argument. We only support a very small subset
3542 of the full argument passing conventions to limit complexity here since
3543 library functions shouldn't have many args. */
3545 argvec = XALLOCAVEC (struct arg, nargs + 1);
3546 memset (argvec, 0, (nargs + 1) * sizeof (struct arg));
3548 #ifdef INIT_CUMULATIVE_LIBCALL_ARGS
3549 INIT_CUMULATIVE_LIBCALL_ARGS (args_so_far_v, outmode, fun);
3550 #else
3551 INIT_CUMULATIVE_ARGS (args_so_far_v, NULL_TREE, fun, 0, nargs);
3552 #endif
3553 args_so_far = pack_cumulative_args (&args_so_far_v);
3555 args_size.constant = 0;
3556 args_size.var = 0;
3558 count = 0;
3560 push_temp_slots ();
3562 /* If there's a structure value address to be passed,
3563 either pass it in the special place, or pass it as an extra argument. */
3564 if (mem_value && struct_value == 0 && ! pcc_struct_value)
3566 rtx addr = XEXP (mem_value, 0);
3568 nargs++;
3570 /* Make sure it is a reasonable operand for a move or push insn. */
3571 if (!REG_P (addr) && !MEM_P (addr)
3572 && !(CONSTANT_P (addr)
3573 && targetm.legitimate_constant_p (Pmode, addr)))
3574 addr = force_operand (addr, NULL_RTX);
3576 argvec[count].value = addr;
3577 argvec[count].mode = Pmode;
3578 argvec[count].partial = 0;
3580 argvec[count].reg = targetm.calls.function_arg (args_so_far,
3581 Pmode, NULL_TREE, true);
3582 gcc_assert (targetm.calls.arg_partial_bytes (args_so_far, Pmode,
3583 NULL_TREE, 1) == 0);
3585 locate_and_pad_parm (Pmode, NULL_TREE,
3586 #ifdef STACK_PARMS_IN_REG_PARM_AREA
3588 #else
3589 argvec[count].reg != 0,
3590 #endif
3591 0, NULL_TREE, &args_size, &argvec[count].locate);
3593 if (argvec[count].reg == 0 || argvec[count].partial != 0
3594 || reg_parm_stack_space > 0)
3595 args_size.constant += argvec[count].locate.size.constant;
3597 targetm.calls.function_arg_advance (args_so_far, Pmode, (tree) 0, true);
3599 count++;
3602 for (; count < nargs; count++)
3604 rtx val = va_arg (p, rtx);
3605 enum machine_mode mode = (enum machine_mode) va_arg (p, int);
3606 int unsigned_p = 0;
3608 /* We cannot convert the arg value to the mode the library wants here;
3609 must do it earlier where we know the signedness of the arg. */
3610 gcc_assert (mode != BLKmode
3611 && (GET_MODE (val) == mode || GET_MODE (val) == VOIDmode));
3613 /* Make sure it is a reasonable operand for a move or push insn. */
3614 if (!REG_P (val) && !MEM_P (val)
3615 && !(CONSTANT_P (val) && targetm.legitimate_constant_p (mode, val)))
3616 val = force_operand (val, NULL_RTX);
3618 if (pass_by_reference (&args_so_far_v, mode, NULL_TREE, 1))
3620 rtx slot;
3621 int must_copy
3622 = !reference_callee_copied (&args_so_far_v, mode, NULL_TREE, 1);
3624 /* If this was a CONST function, it is now PURE since it now
3625 reads memory. */
3626 if (flags & ECF_CONST)
3628 flags &= ~ECF_CONST;
3629 flags |= ECF_PURE;
3632 if (MEM_P (val) && !must_copy)
3634 tree val_expr = MEM_EXPR (val);
3635 if (val_expr)
3636 mark_addressable (val_expr);
3637 slot = val;
3639 else
3641 slot = assign_temp (lang_hooks.types.type_for_mode (mode, 0),
3642 0, 1, 1);
3643 emit_move_insn (slot, val);
3646 call_fusage = gen_rtx_EXPR_LIST (VOIDmode,
3647 gen_rtx_USE (VOIDmode, slot),
3648 call_fusage);
3649 if (must_copy)
3650 call_fusage = gen_rtx_EXPR_LIST (VOIDmode,
3651 gen_rtx_CLOBBER (VOIDmode,
3652 slot),
3653 call_fusage);
3655 mode = Pmode;
3656 val = force_operand (XEXP (slot, 0), NULL_RTX);
3659 mode = promote_function_mode (NULL_TREE, mode, &unsigned_p, NULL_TREE, 0);
3660 argvec[count].mode = mode;
3661 argvec[count].value = convert_modes (mode, GET_MODE (val), val, unsigned_p);
3662 argvec[count].reg = targetm.calls.function_arg (args_so_far, mode,
3663 NULL_TREE, true);
3665 argvec[count].partial
3666 = targetm.calls.arg_partial_bytes (args_so_far, mode, NULL_TREE, 1);
3668 if (argvec[count].reg == 0
3669 || argvec[count].partial != 0
3670 || reg_parm_stack_space > 0)
3672 locate_and_pad_parm (mode, NULL_TREE,
3673 #ifdef STACK_PARMS_IN_REG_PARM_AREA
3675 #else
3676 argvec[count].reg != 0,
3677 #endif
3678 argvec[count].partial,
3679 NULL_TREE, &args_size, &argvec[count].locate);
3680 args_size.constant += argvec[count].locate.size.constant;
3681 gcc_assert (!argvec[count].locate.size.var);
3683 #ifdef BLOCK_REG_PADDING
3684 else
3685 /* The argument is passed entirely in registers. See at which
3686 end it should be padded. */
3687 argvec[count].locate.where_pad =
3688 BLOCK_REG_PADDING (mode, NULL_TREE,
3689 GET_MODE_SIZE (mode) <= UNITS_PER_WORD);
3690 #endif
3692 targetm.calls.function_arg_advance (args_so_far, mode, (tree) 0, true);
3695 /* If this machine requires an external definition for library
3696 functions, write one out. */
3697 assemble_external_libcall (fun);
3699 original_args_size = args_size;
3700 args_size.constant = (((args_size.constant
3701 + stack_pointer_delta
3702 + STACK_BYTES - 1)
3703 / STACK_BYTES
3704 * STACK_BYTES)
3705 - stack_pointer_delta);
3707 args_size.constant = MAX (args_size.constant,
3708 reg_parm_stack_space);
3710 if (! OUTGOING_REG_PARM_STACK_SPACE ((!fndecl ? fntype : TREE_TYPE (fndecl))))
3711 args_size.constant -= reg_parm_stack_space;
3713 if (args_size.constant > crtl->outgoing_args_size)
3714 crtl->outgoing_args_size = args_size.constant;
3716 if (flag_stack_usage_info && !ACCUMULATE_OUTGOING_ARGS)
3718 int pushed = args_size.constant + pending_stack_adjust;
3719 if (pushed > current_function_pushed_stack_size)
3720 current_function_pushed_stack_size = pushed;
3723 if (ACCUMULATE_OUTGOING_ARGS)
3725 /* Since the stack pointer will never be pushed, it is possible for
3726 the evaluation of a parm to clobber something we have already
3727 written to the stack. Since most function calls on RISC machines
3728 do not use the stack, this is uncommon, but must work correctly.
3730 Therefore, we save any area of the stack that was already written
3731 and that we are using. Here we set up to do this by making a new
3732 stack usage map from the old one.
3734 Another approach might be to try to reorder the argument
3735 evaluations to avoid this conflicting stack usage. */
3737 needed = args_size.constant;
3739 /* Since we will be writing into the entire argument area, the
3740 map must be allocated for its entire size, not just the part that
3741 is the responsibility of the caller. */
3742 if (! OUTGOING_REG_PARM_STACK_SPACE ((!fndecl ? fntype : TREE_TYPE (fndecl))))
3743 needed += reg_parm_stack_space;
3745 #ifdef ARGS_GROW_DOWNWARD
3746 highest_outgoing_arg_in_use = MAX (initial_highest_arg_in_use,
3747 needed + 1);
3748 #else
3749 highest_outgoing_arg_in_use = MAX (initial_highest_arg_in_use,
3750 needed);
3751 #endif
3752 stack_usage_map_buf = XNEWVEC (char, highest_outgoing_arg_in_use);
3753 stack_usage_map = stack_usage_map_buf;
3755 if (initial_highest_arg_in_use)
3756 memcpy (stack_usage_map, initial_stack_usage_map,
3757 initial_highest_arg_in_use);
3759 if (initial_highest_arg_in_use != highest_outgoing_arg_in_use)
3760 memset (&stack_usage_map[initial_highest_arg_in_use], 0,
3761 highest_outgoing_arg_in_use - initial_highest_arg_in_use);
3762 needed = 0;
3764 /* We must be careful to use virtual regs before they're instantiated,
3765 and real regs afterwards. Loop optimization, for example, can create
3766 new libcalls after we've instantiated the virtual regs, and if we
3767 use virtuals anyway, they won't match the rtl patterns. */
3769 if (virtuals_instantiated)
3770 argblock = plus_constant (stack_pointer_rtx, STACK_POINTER_OFFSET);
3771 else
3772 argblock = virtual_outgoing_args_rtx;
3774 else
3776 if (!PUSH_ARGS)
3777 argblock = push_block (GEN_INT (args_size.constant), 0, 0);
3780 /* If we push args individually in reverse order, perform stack alignment
3781 before the first push (the last arg). */
3782 if (argblock == 0 && PUSH_ARGS_REVERSED)
3783 anti_adjust_stack (GEN_INT (args_size.constant
3784 - original_args_size.constant));
3786 if (PUSH_ARGS_REVERSED)
3788 inc = -1;
3789 argnum = nargs - 1;
3791 else
3793 inc = 1;
3794 argnum = 0;
3797 #ifdef REG_PARM_STACK_SPACE
3798 if (ACCUMULATE_OUTGOING_ARGS)
3800 /* The argument list is the property of the called routine and it
3801 may clobber it. If the fixed area has been used for previous
3802 parameters, we must save and restore it. */
3803 save_area = save_fixed_argument_area (reg_parm_stack_space, argblock,
3804 &low_to_save, &high_to_save);
3806 #endif
3808 /* Push the args that need to be pushed. */
3810 /* ARGNUM indexes the ARGVEC array in the order in which the arguments
3811 are to be pushed. */
3812 for (count = 0; count < nargs; count++, argnum += inc)
3814 enum machine_mode mode = argvec[argnum].mode;
3815 rtx val = argvec[argnum].value;
3816 rtx reg = argvec[argnum].reg;
3817 int partial = argvec[argnum].partial;
3818 unsigned int parm_align = argvec[argnum].locate.boundary;
3819 int lower_bound = 0, upper_bound = 0, i;
3821 if (! (reg != 0 && partial == 0))
3823 rtx use;
3825 if (ACCUMULATE_OUTGOING_ARGS)
3827 /* If this is being stored into a pre-allocated, fixed-size,
3828 stack area, save any previous data at that location. */
3830 #ifdef ARGS_GROW_DOWNWARD
3831 /* stack_slot is negative, but we want to index stack_usage_map
3832 with positive values. */
3833 upper_bound = -argvec[argnum].locate.slot_offset.constant + 1;
3834 lower_bound = upper_bound - argvec[argnum].locate.size.constant;
3835 #else
3836 lower_bound = argvec[argnum].locate.slot_offset.constant;
3837 upper_bound = lower_bound + argvec[argnum].locate.size.constant;
3838 #endif
3840 i = lower_bound;
3841 /* Don't worry about things in the fixed argument area;
3842 it has already been saved. */
3843 if (i < reg_parm_stack_space)
3844 i = reg_parm_stack_space;
3845 while (i < upper_bound && stack_usage_map[i] == 0)
3846 i++;
3848 if (i < upper_bound)
3850 /* We need to make a save area. */
3851 unsigned int size
3852 = argvec[argnum].locate.size.constant * BITS_PER_UNIT;
3853 enum machine_mode save_mode
3854 = mode_for_size (size, MODE_INT, 1);
3855 rtx adr
3856 = plus_constant (argblock,
3857 argvec[argnum].locate.offset.constant);
3858 rtx stack_area
3859 = gen_rtx_MEM (save_mode, memory_address (save_mode, adr));
3861 if (save_mode == BLKmode)
3863 argvec[argnum].save_area
3864 = assign_stack_temp (BLKmode,
3865 argvec[argnum].locate.size.constant,
3868 emit_block_move (validize_mem (argvec[argnum].save_area),
3869 stack_area,
3870 GEN_INT (argvec[argnum].locate.size.constant),
3871 BLOCK_OP_CALL_PARM);
3873 else
3875 argvec[argnum].save_area = gen_reg_rtx (save_mode);
3877 emit_move_insn (argvec[argnum].save_area, stack_area);
3882 emit_push_insn (val, mode, NULL_TREE, NULL_RTX, parm_align,
3883 partial, reg, 0, argblock,
3884 GEN_INT (argvec[argnum].locate.offset.constant),
3885 reg_parm_stack_space,
3886 ARGS_SIZE_RTX (argvec[argnum].locate.alignment_pad));
3888 /* Now mark the segment we just used. */
3889 if (ACCUMULATE_OUTGOING_ARGS)
3890 for (i = lower_bound; i < upper_bound; i++)
3891 stack_usage_map[i] = 1;
3893 NO_DEFER_POP;
3895 /* Indicate argument access so that alias.c knows that these
3896 values are live. */
3897 if (argblock)
3898 use = plus_constant (argblock,
3899 argvec[argnum].locate.offset.constant);
3900 else
3901 /* When arguments are pushed, trying to tell alias.c where
3902 exactly this argument is won't work, because the
3903 auto-increment causes confusion. So we merely indicate
3904 that we access something with a known mode somewhere on
3905 the stack. */
3906 use = gen_rtx_PLUS (Pmode, virtual_outgoing_args_rtx,
3907 gen_rtx_SCRATCH (Pmode));
3908 use = gen_rtx_MEM (argvec[argnum].mode, use);
3909 use = gen_rtx_USE (VOIDmode, use);
3910 call_fusage = gen_rtx_EXPR_LIST (VOIDmode, use, call_fusage);
3914 /* If we pushed args in forward order, perform stack alignment
3915 after pushing the last arg. */
3916 if (argblock == 0 && !PUSH_ARGS_REVERSED)
3917 anti_adjust_stack (GEN_INT (args_size.constant
3918 - original_args_size.constant));
3920 if (PUSH_ARGS_REVERSED)
3921 argnum = nargs - 1;
3922 else
3923 argnum = 0;
3925 fun = prepare_call_address (NULL, fun, NULL, &call_fusage, 0, 0);
3927 /* Now load any reg parms into their regs. */
3929 /* ARGNUM indexes the ARGVEC array in the order in which the arguments
3930 are to be pushed. */
3931 for (count = 0; count < nargs; count++, argnum += inc)
3933 enum machine_mode mode = argvec[argnum].mode;
3934 rtx val = argvec[argnum].value;
3935 rtx reg = argvec[argnum].reg;
3936 int partial = argvec[argnum].partial;
3937 #ifdef BLOCK_REG_PADDING
3938 int size = 0;
3939 #endif
3941 /* Handle calls that pass values in multiple non-contiguous
3942 locations. The PA64 has examples of this for library calls. */
3943 if (reg != 0 && GET_CODE (reg) == PARALLEL)
3944 emit_group_load (reg, val, NULL_TREE, GET_MODE_SIZE (mode));
3945 else if (reg != 0 && partial == 0)
3947 emit_move_insn (reg, val);
3948 #ifdef BLOCK_REG_PADDING
3949 size = GET_MODE_SIZE (argvec[argnum].mode);
3951 /* Copied from load_register_parameters. */
3953 /* Handle case where we have a value that needs shifting
3954 up to the msb. eg. a QImode value and we're padding
3955 upward on a BYTES_BIG_ENDIAN machine. */
3956 if (size < UNITS_PER_WORD
3957 && (argvec[argnum].locate.where_pad
3958 == (BYTES_BIG_ENDIAN ? upward : downward)))
3960 rtx x;
3961 int shift = (UNITS_PER_WORD - size) * BITS_PER_UNIT;
3963 /* Assigning REG here rather than a temp makes CALL_FUSAGE
3964 report the whole reg as used. Strictly speaking, the
3965 call only uses SIZE bytes at the msb end, but it doesn't
3966 seem worth generating rtl to say that. */
3967 reg = gen_rtx_REG (word_mode, REGNO (reg));
3968 x = expand_shift (LSHIFT_EXPR, word_mode, reg, shift, reg, 1);
3969 if (x != reg)
3970 emit_move_insn (reg, x);
3972 #endif
3975 NO_DEFER_POP;
3978 /* Any regs containing parms remain in use through the call. */
3979 for (count = 0; count < nargs; count++)
3981 rtx reg = argvec[count].reg;
3982 if (reg != 0 && GET_CODE (reg) == PARALLEL)
3983 use_group_regs (&call_fusage, reg);
3984 else if (reg != 0)
3986 int partial = argvec[count].partial;
3987 if (partial)
3989 int nregs;
3990 gcc_assert (partial % UNITS_PER_WORD == 0);
3991 nregs = partial / UNITS_PER_WORD;
3992 use_regs (&call_fusage, REGNO (reg), nregs);
3994 else
3995 use_reg (&call_fusage, reg);
3999 /* Pass the function the address in which to return a structure value. */
4000 if (mem_value != 0 && struct_value != 0 && ! pcc_struct_value)
4002 emit_move_insn (struct_value,
4003 force_reg (Pmode,
4004 force_operand (XEXP (mem_value, 0),
4005 NULL_RTX)));
4006 if (REG_P (struct_value))
4007 use_reg (&call_fusage, struct_value);
4010 /* Don't allow popping to be deferred, since then
4011 cse'ing of library calls could delete a call and leave the pop. */
4012 NO_DEFER_POP;
4013 valreg = (mem_value == 0 && outmode != VOIDmode
4014 ? hard_libcall_value (outmode, orgfun) : NULL_RTX);
4016 /* Stack must be properly aligned now. */
4017 gcc_assert (!(stack_pointer_delta
4018 & (PREFERRED_STACK_BOUNDARY / BITS_PER_UNIT - 1)));
4020 before_call = get_last_insn ();
4022 /* We pass the old value of inhibit_defer_pop + 1 to emit_call_1, which
4023 will set inhibit_defer_pop to that value. */
4024 /* The return type is needed to decide how many bytes the function pops.
4025 Signedness plays no role in that, so for simplicity, we pretend it's
4026 always signed. We also assume that the list of arguments passed has
4027 no impact, so we pretend it is unknown. */
4029 emit_call_1 (fun, NULL,
4030 get_identifier (XSTR (orgfun, 0)),
4031 build_function_type (tfom, NULL_TREE),
4032 original_args_size.constant, args_size.constant,
4033 struct_value_size,
4034 targetm.calls.function_arg (args_so_far,
4035 VOIDmode, void_type_node, true),
4036 valreg,
4037 old_inhibit_defer_pop + 1, call_fusage, flags, args_so_far);
4039 /* Right-shift returned value if necessary. */
4040 if (!pcc_struct_value
4041 && TYPE_MODE (tfom) != BLKmode
4042 && targetm.calls.return_in_msb (tfom))
4044 shift_return_value (TYPE_MODE (tfom), false, valreg);
4045 valreg = gen_rtx_REG (TYPE_MODE (tfom), REGNO (valreg));
4048 /* For calls to `setjmp', etc., inform function.c:setjmp_warnings
4049 that it should complain if nonvolatile values are live. For
4050 functions that cannot return, inform flow that control does not
4051 fall through. */
4053 if (flags & ECF_NORETURN)
4055 /* The barrier note must be emitted
4056 immediately after the CALL_INSN. Some ports emit more than
4057 just a CALL_INSN above, so we must search for it here. */
4059 rtx last = get_last_insn ();
4060 while (!CALL_P (last))
4062 last = PREV_INSN (last);
4063 /* There was no CALL_INSN? */
4064 gcc_assert (last != before_call);
4067 emit_barrier_after (last);
4070 /* Now restore inhibit_defer_pop to its actual original value. */
4071 OK_DEFER_POP;
4073 pop_temp_slots ();
4075 /* Copy the value to the right place. */
4076 if (outmode != VOIDmode && retval)
4078 if (mem_value)
4080 if (value == 0)
4081 value = mem_value;
4082 if (value != mem_value)
4083 emit_move_insn (value, mem_value);
4085 else if (GET_CODE (valreg) == PARALLEL)
4087 if (value == 0)
4088 value = gen_reg_rtx (outmode);
4089 emit_group_store (value, valreg, NULL_TREE, GET_MODE_SIZE (outmode));
4091 else
4093 /* Convert to the proper mode if a promotion has been active. */
4094 if (GET_MODE (valreg) != outmode)
4096 int unsignedp = TYPE_UNSIGNED (tfom);
4098 gcc_assert (promote_function_mode (tfom, outmode, &unsignedp,
4099 fndecl ? TREE_TYPE (fndecl) : fntype, 1)
4100 == GET_MODE (valreg));
4101 valreg = convert_modes (outmode, GET_MODE (valreg), valreg, 0);
4104 if (value != 0)
4105 emit_move_insn (value, valreg);
4106 else
4107 value = valreg;
4111 if (ACCUMULATE_OUTGOING_ARGS)
4113 #ifdef REG_PARM_STACK_SPACE
4114 if (save_area)
4115 restore_fixed_argument_area (save_area, argblock,
4116 high_to_save, low_to_save);
4117 #endif
4119 /* If we saved any argument areas, restore them. */
4120 for (count = 0; count < nargs; count++)
4121 if (argvec[count].save_area)
4123 enum machine_mode save_mode = GET_MODE (argvec[count].save_area);
4124 rtx adr = plus_constant (argblock,
4125 argvec[count].locate.offset.constant);
4126 rtx stack_area = gen_rtx_MEM (save_mode,
4127 memory_address (save_mode, adr));
4129 if (save_mode == BLKmode)
4130 emit_block_move (stack_area,
4131 validize_mem (argvec[count].save_area),
4132 GEN_INT (argvec[count].locate.size.constant),
4133 BLOCK_OP_CALL_PARM);
4134 else
4135 emit_move_insn (stack_area, argvec[count].save_area);
4138 highest_outgoing_arg_in_use = initial_highest_arg_in_use;
4139 stack_usage_map = initial_stack_usage_map;
4142 free (stack_usage_map_buf);
4144 return value;
4148 /* Output a library call to function FUN (a SYMBOL_REF rtx)
4149 (emitting the queue unless NO_QUEUE is nonzero),
4150 for a value of mode OUTMODE,
4151 with NARGS different arguments, passed as alternating rtx values
4152 and machine_modes to convert them to.
4154 FN_TYPE should be LCT_NORMAL for `normal' calls, LCT_CONST for
4155 `const' calls, LCT_PURE for `pure' calls, or other LCT_ value for
4156 other types of library calls. */
4158 void
4159 emit_library_call (rtx orgfun, enum libcall_type fn_type,
4160 enum machine_mode outmode, int nargs, ...)
4162 va_list p;
4164 va_start (p, nargs);
4165 emit_library_call_value_1 (0, orgfun, NULL_RTX, fn_type, outmode, nargs, p);
4166 va_end (p);
4169 /* Like emit_library_call except that an extra argument, VALUE,
4170 comes second and says where to store the result.
4171 (If VALUE is zero, this function chooses a convenient way
4172 to return the value.
4174 This function returns an rtx for where the value is to be found.
4175 If VALUE is nonzero, VALUE is returned. */
4178 emit_library_call_value (rtx orgfun, rtx value,
4179 enum libcall_type fn_type,
4180 enum machine_mode outmode, int nargs, ...)
4182 rtx result;
4183 va_list p;
4185 va_start (p, nargs);
4186 result = emit_library_call_value_1 (1, orgfun, value, fn_type, outmode,
4187 nargs, p);
4188 va_end (p);
4190 return result;
4193 /* Store a single argument for a function call
4194 into the register or memory area where it must be passed.
4195 *ARG describes the argument value and where to pass it.
4197 ARGBLOCK is the address of the stack-block for all the arguments,
4198 or 0 on a machine where arguments are pushed individually.
4200 MAY_BE_ALLOCA nonzero says this could be a call to `alloca'
4201 so must be careful about how the stack is used.
4203 VARIABLE_SIZE nonzero says that this was a variable-sized outgoing
4204 argument stack. This is used if ACCUMULATE_OUTGOING_ARGS to indicate
4205 that we need not worry about saving and restoring the stack.
4207 FNDECL is the declaration of the function we are calling.
4209 Return nonzero if this arg should cause sibcall failure,
4210 zero otherwise. */
4212 static int
4213 store_one_arg (struct arg_data *arg, rtx argblock, int flags,
4214 int variable_size ATTRIBUTE_UNUSED, int reg_parm_stack_space)
4216 tree pval = arg->tree_value;
4217 rtx reg = 0;
4218 int partial = 0;
4219 int used = 0;
4220 int i, lower_bound = 0, upper_bound = 0;
4221 int sibcall_failure = 0;
4223 if (TREE_CODE (pval) == ERROR_MARK)
4224 return 1;
4226 /* Push a new temporary level for any temporaries we make for
4227 this argument. */
4228 push_temp_slots ();
4230 if (ACCUMULATE_OUTGOING_ARGS && !(flags & ECF_SIBCALL))
4232 /* If this is being stored into a pre-allocated, fixed-size, stack area,
4233 save any previous data at that location. */
4234 if (argblock && ! variable_size && arg->stack)
4236 #ifdef ARGS_GROW_DOWNWARD
4237 /* stack_slot is negative, but we want to index stack_usage_map
4238 with positive values. */
4239 if (GET_CODE (XEXP (arg->stack_slot, 0)) == PLUS)
4240 upper_bound = -INTVAL (XEXP (XEXP (arg->stack_slot, 0), 1)) + 1;
4241 else
4242 upper_bound = 0;
4244 lower_bound = upper_bound - arg->locate.size.constant;
4245 #else
4246 if (GET_CODE (XEXP (arg->stack_slot, 0)) == PLUS)
4247 lower_bound = INTVAL (XEXP (XEXP (arg->stack_slot, 0), 1));
4248 else
4249 lower_bound = 0;
4251 upper_bound = lower_bound + arg->locate.size.constant;
4252 #endif
4254 i = lower_bound;
4255 /* Don't worry about things in the fixed argument area;
4256 it has already been saved. */
4257 if (i < reg_parm_stack_space)
4258 i = reg_parm_stack_space;
4259 while (i < upper_bound && stack_usage_map[i] == 0)
4260 i++;
4262 if (i < upper_bound)
4264 /* We need to make a save area. */
4265 unsigned int size = arg->locate.size.constant * BITS_PER_UNIT;
4266 enum machine_mode save_mode = mode_for_size (size, MODE_INT, 1);
4267 rtx adr = memory_address (save_mode, XEXP (arg->stack_slot, 0));
4268 rtx stack_area = gen_rtx_MEM (save_mode, adr);
4270 if (save_mode == BLKmode)
4272 tree ot = TREE_TYPE (arg->tree_value);
4273 tree nt = build_qualified_type (ot, (TYPE_QUALS (ot)
4274 | TYPE_QUAL_CONST));
4276 arg->save_area = assign_temp (nt, 0, 1, 1);
4277 preserve_temp_slots (arg->save_area);
4278 emit_block_move (validize_mem (arg->save_area), stack_area,
4279 GEN_INT (arg->locate.size.constant),
4280 BLOCK_OP_CALL_PARM);
4282 else
4284 arg->save_area = gen_reg_rtx (save_mode);
4285 emit_move_insn (arg->save_area, stack_area);
4291 /* If this isn't going to be placed on both the stack and in registers,
4292 set up the register and number of words. */
4293 if (! arg->pass_on_stack)
4295 if (flags & ECF_SIBCALL)
4296 reg = arg->tail_call_reg;
4297 else
4298 reg = arg->reg;
4299 partial = arg->partial;
4302 /* Being passed entirely in a register. We shouldn't be called in
4303 this case. */
4304 gcc_assert (reg == 0 || partial != 0);
4306 /* If this arg needs special alignment, don't load the registers
4307 here. */
4308 if (arg->n_aligned_regs != 0)
4309 reg = 0;
4311 /* If this is being passed partially in a register, we can't evaluate
4312 it directly into its stack slot. Otherwise, we can. */
4313 if (arg->value == 0)
4315 /* stack_arg_under_construction is nonzero if a function argument is
4316 being evaluated directly into the outgoing argument list and
4317 expand_call must take special action to preserve the argument list
4318 if it is called recursively.
4320 For scalar function arguments stack_usage_map is sufficient to
4321 determine which stack slots must be saved and restored. Scalar
4322 arguments in general have pass_on_stack == 0.
4324 If this argument is initialized by a function which takes the
4325 address of the argument (a C++ constructor or a C function
4326 returning a BLKmode structure), then stack_usage_map is
4327 insufficient and expand_call must push the stack around the
4328 function call. Such arguments have pass_on_stack == 1.
4330 Note that it is always safe to set stack_arg_under_construction,
4331 but this generates suboptimal code if set when not needed. */
4333 if (arg->pass_on_stack)
4334 stack_arg_under_construction++;
4336 arg->value = expand_expr (pval,
4337 (partial
4338 || TYPE_MODE (TREE_TYPE (pval)) != arg->mode)
4339 ? NULL_RTX : arg->stack,
4340 VOIDmode, EXPAND_STACK_PARM);
4342 /* If we are promoting object (or for any other reason) the mode
4343 doesn't agree, convert the mode. */
4345 if (arg->mode != TYPE_MODE (TREE_TYPE (pval)))
4346 arg->value = convert_modes (arg->mode, TYPE_MODE (TREE_TYPE (pval)),
4347 arg->value, arg->unsignedp);
4349 if (arg->pass_on_stack)
4350 stack_arg_under_construction--;
4353 /* Check for overlap with already clobbered argument area. */
4354 if ((flags & ECF_SIBCALL)
4355 && MEM_P (arg->value)
4356 && mem_overlaps_already_clobbered_arg_p (XEXP (arg->value, 0),
4357 arg->locate.size.constant))
4358 sibcall_failure = 1;
4360 /* Don't allow anything left on stack from computation
4361 of argument to alloca. */
4362 if (flags & ECF_MAY_BE_ALLOCA)
4363 do_pending_stack_adjust ();
4365 if (arg->value == arg->stack)
4366 /* If the value is already in the stack slot, we are done. */
4368 else if (arg->mode != BLKmode)
4370 int size;
4371 unsigned int parm_align;
4373 /* Argument is a scalar, not entirely passed in registers.
4374 (If part is passed in registers, arg->partial says how much
4375 and emit_push_insn will take care of putting it there.)
4377 Push it, and if its size is less than the
4378 amount of space allocated to it,
4379 also bump stack pointer by the additional space.
4380 Note that in C the default argument promotions
4381 will prevent such mismatches. */
4383 size = GET_MODE_SIZE (arg->mode);
4384 /* Compute how much space the push instruction will push.
4385 On many machines, pushing a byte will advance the stack
4386 pointer by a halfword. */
4387 #ifdef PUSH_ROUNDING
4388 size = PUSH_ROUNDING (size);
4389 #endif
4390 used = size;
4392 /* Compute how much space the argument should get:
4393 round up to a multiple of the alignment for arguments. */
4394 if (none != FUNCTION_ARG_PADDING (arg->mode, TREE_TYPE (pval)))
4395 used = (((size + PARM_BOUNDARY / BITS_PER_UNIT - 1)
4396 / (PARM_BOUNDARY / BITS_PER_UNIT))
4397 * (PARM_BOUNDARY / BITS_PER_UNIT));
4399 /* Compute the alignment of the pushed argument. */
4400 parm_align = arg->locate.boundary;
4401 if (FUNCTION_ARG_PADDING (arg->mode, TREE_TYPE (pval)) == downward)
4403 int pad = used - size;
4404 if (pad)
4406 unsigned int pad_align = (pad & -pad) * BITS_PER_UNIT;
4407 parm_align = MIN (parm_align, pad_align);
4411 /* This isn't already where we want it on the stack, so put it there.
4412 This can either be done with push or copy insns. */
4413 emit_push_insn (arg->value, arg->mode, TREE_TYPE (pval), NULL_RTX,
4414 parm_align, partial, reg, used - size, argblock,
4415 ARGS_SIZE_RTX (arg->locate.offset), reg_parm_stack_space,
4416 ARGS_SIZE_RTX (arg->locate.alignment_pad));
4418 /* Unless this is a partially-in-register argument, the argument is now
4419 in the stack. */
4420 if (partial == 0)
4421 arg->value = arg->stack;
4423 else
4425 /* BLKmode, at least partly to be pushed. */
4427 unsigned int parm_align;
4428 int excess;
4429 rtx size_rtx;
4431 /* Pushing a nonscalar.
4432 If part is passed in registers, PARTIAL says how much
4433 and emit_push_insn will take care of putting it there. */
4435 /* Round its size up to a multiple
4436 of the allocation unit for arguments. */
4438 if (arg->locate.size.var != 0)
4440 excess = 0;
4441 size_rtx = ARGS_SIZE_RTX (arg->locate.size);
4443 else
4445 /* PUSH_ROUNDING has no effect on us, because emit_push_insn
4446 for BLKmode is careful to avoid it. */
4447 excess = (arg->locate.size.constant
4448 - int_size_in_bytes (TREE_TYPE (pval))
4449 + partial);
4450 size_rtx = expand_expr (size_in_bytes (TREE_TYPE (pval)),
4451 NULL_RTX, TYPE_MODE (sizetype),
4452 EXPAND_NORMAL);
4455 parm_align = arg->locate.boundary;
4457 /* When an argument is padded down, the block is aligned to
4458 PARM_BOUNDARY, but the actual argument isn't. */
4459 if (FUNCTION_ARG_PADDING (arg->mode, TREE_TYPE (pval)) == downward)
4461 if (arg->locate.size.var)
4462 parm_align = BITS_PER_UNIT;
4463 else if (excess)
4465 unsigned int excess_align = (excess & -excess) * BITS_PER_UNIT;
4466 parm_align = MIN (parm_align, excess_align);
4470 if ((flags & ECF_SIBCALL) && MEM_P (arg->value))
4472 /* emit_push_insn might not work properly if arg->value and
4473 argblock + arg->locate.offset areas overlap. */
4474 rtx x = arg->value;
4475 int i = 0;
4477 if (XEXP (x, 0) == crtl->args.internal_arg_pointer
4478 || (GET_CODE (XEXP (x, 0)) == PLUS
4479 && XEXP (XEXP (x, 0), 0) ==
4480 crtl->args.internal_arg_pointer
4481 && CONST_INT_P (XEXP (XEXP (x, 0), 1))))
4483 if (XEXP (x, 0) != crtl->args.internal_arg_pointer)
4484 i = INTVAL (XEXP (XEXP (x, 0), 1));
4486 /* expand_call should ensure this. */
4487 gcc_assert (!arg->locate.offset.var
4488 && arg->locate.size.var == 0
4489 && CONST_INT_P (size_rtx));
4491 if (arg->locate.offset.constant > i)
4493 if (arg->locate.offset.constant < i + INTVAL (size_rtx))
4494 sibcall_failure = 1;
4496 else if (arg->locate.offset.constant < i)
4498 /* Use arg->locate.size.constant instead of size_rtx
4499 because we only care about the part of the argument
4500 on the stack. */
4501 if (i < (arg->locate.offset.constant
4502 + arg->locate.size.constant))
4503 sibcall_failure = 1;
4505 else
4507 /* Even though they appear to be at the same location,
4508 if part of the outgoing argument is in registers,
4509 they aren't really at the same location. Check for
4510 this by making sure that the incoming size is the
4511 same as the outgoing size. */
4512 if (arg->locate.size.constant != INTVAL (size_rtx))
4513 sibcall_failure = 1;
4518 emit_push_insn (arg->value, arg->mode, TREE_TYPE (pval), size_rtx,
4519 parm_align, partial, reg, excess, argblock,
4520 ARGS_SIZE_RTX (arg->locate.offset), reg_parm_stack_space,
4521 ARGS_SIZE_RTX (arg->locate.alignment_pad));
4523 /* Unless this is a partially-in-register argument, the argument is now
4524 in the stack.
4526 ??? Unlike the case above, in which we want the actual
4527 address of the data, so that we can load it directly into a
4528 register, here we want the address of the stack slot, so that
4529 it's properly aligned for word-by-word copying or something
4530 like that. It's not clear that this is always correct. */
4531 if (partial == 0)
4532 arg->value = arg->stack_slot;
4535 if (arg->reg && GET_CODE (arg->reg) == PARALLEL)
4537 tree type = TREE_TYPE (arg->tree_value);
4538 arg->parallel_value
4539 = emit_group_load_into_temps (arg->reg, arg->value, type,
4540 int_size_in_bytes (type));
4543 /* Mark all slots this store used. */
4544 if (ACCUMULATE_OUTGOING_ARGS && !(flags & ECF_SIBCALL)
4545 && argblock && ! variable_size && arg->stack)
4546 for (i = lower_bound; i < upper_bound; i++)
4547 stack_usage_map[i] = 1;
4549 /* Once we have pushed something, pops can't safely
4550 be deferred during the rest of the arguments. */
4551 NO_DEFER_POP;
4553 /* Free any temporary slots made in processing this argument. Show
4554 that we might have taken the address of something and pushed that
4555 as an operand. */
4556 preserve_temp_slots (NULL_RTX);
4557 free_temp_slots ();
4558 pop_temp_slots ();
4560 return sibcall_failure;
4563 /* Nonzero if we do not know how to pass TYPE solely in registers. */
4565 bool
4566 must_pass_in_stack_var_size (enum machine_mode mode ATTRIBUTE_UNUSED,
4567 const_tree type)
4569 if (!type)
4570 return false;
4572 /* If the type has variable size... */
4573 if (TREE_CODE (TYPE_SIZE (type)) != INTEGER_CST)
4574 return true;
4576 /* If the type is marked as addressable (it is required
4577 to be constructed into the stack)... */
4578 if (TREE_ADDRESSABLE (type))
4579 return true;
4581 return false;
4584 /* Another version of the TARGET_MUST_PASS_IN_STACK hook. This one
4585 takes trailing padding of a structure into account. */
4586 /* ??? Should be able to merge these two by examining BLOCK_REG_PADDING. */
4588 bool
4589 must_pass_in_stack_var_size_or_pad (enum machine_mode mode, const_tree type)
4591 if (!type)
4592 return false;
4594 /* If the type has variable size... */
4595 if (TREE_CODE (TYPE_SIZE (type)) != INTEGER_CST)
4596 return true;
4598 /* If the type is marked as addressable (it is required
4599 to be constructed into the stack)... */
4600 if (TREE_ADDRESSABLE (type))
4601 return true;
4603 /* If the padding and mode of the type is such that a copy into
4604 a register would put it into the wrong part of the register. */
4605 if (mode == BLKmode
4606 && int_size_in_bytes (type) % (PARM_BOUNDARY / BITS_PER_UNIT)
4607 && (FUNCTION_ARG_PADDING (mode, type)
4608 == (BYTES_BIG_ENDIAN ? upward : downward)))
4609 return true;
4611 return false;