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