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