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