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