re PR target/34930 (ICE in instantiate_virtual_regs_in_insn with vector splat load)
[gcc.git] / gcc / function.c
1 /* Expands front end tree to back end RTL for GCC.
2 Copyright (C) 1987, 1988, 1989, 1991, 1992, 1993, 1994, 1995, 1996, 1997,
3 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008
4 Free Software Foundation, Inc.
5
6 This file is part of GCC.
7
8 GCC is free software; you can redistribute it and/or modify it under
9 the terms of the GNU General Public License as published by the Free
10 Software Foundation; either version 3, or (at your option) any later
11 version.
12
13 GCC is distributed in the hope that it will be useful, but WITHOUT ANY
14 WARRANTY; without even the implied warranty of MERCHANTABILITY or
15 FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
16 for more details.
17
18 You should have received a copy of the GNU General Public License
19 along with GCC; see the file COPYING3. If not see
20 <http://www.gnu.org/licenses/>. */
21
22 /* This file handles the generation of rtl code from tree structure
23 at the level of the function as a whole.
24 It creates the rtl expressions for parameters and auto variables
25 and has full responsibility for allocating stack slots.
26
27 `expand_function_start' is called at the beginning of a function,
28 before the function body is parsed, and `expand_function_end' is
29 called after parsing the body.
30
31 Call `assign_stack_local' to allocate a stack slot for a local variable.
32 This is usually done during the RTL generation for the function body,
33 but it can also be done in the reload pass when a pseudo-register does
34 not get a hard register. */
35
36 #include "config.h"
37 #include "system.h"
38 #include "coretypes.h"
39 #include "tm.h"
40 #include "rtl.h"
41 #include "tree.h"
42 #include "flags.h"
43 #include "except.h"
44 #include "function.h"
45 #include "expr.h"
46 #include "optabs.h"
47 #include "libfuncs.h"
48 #include "regs.h"
49 #include "hard-reg-set.h"
50 #include "insn-config.h"
51 #include "recog.h"
52 #include "output.h"
53 #include "basic-block.h"
54 #include "toplev.h"
55 #include "hashtab.h"
56 #include "ggc.h"
57 #include "tm_p.h"
58 #include "integrate.h"
59 #include "langhooks.h"
60 #include "target.h"
61 #include "cfglayout.h"
62 #include "tree-gimple.h"
63 #include "tree-pass.h"
64 #include "predict.h"
65 #include "df.h"
66 #include "timevar.h"
67 #include "vecprim.h"
68
69 /* So we can assign to cfun in this file. */
70 #undef cfun
71
72 #ifndef LOCAL_ALIGNMENT
73 #define LOCAL_ALIGNMENT(TYPE, ALIGNMENT) ALIGNMENT
74 #endif
75
76 #ifndef STACK_ALIGNMENT_NEEDED
77 #define STACK_ALIGNMENT_NEEDED 1
78 #endif
79
80 #define STACK_BYTES (STACK_BOUNDARY / BITS_PER_UNIT)
81
82 /* Some systems use __main in a way incompatible with its use in gcc, in these
83 cases use the macros NAME__MAIN to give a quoted symbol and SYMBOL__MAIN to
84 give the same symbol without quotes for an alternative entry point. You
85 must define both, or neither. */
86 #ifndef NAME__MAIN
87 #define NAME__MAIN "__main"
88 #endif
89
90 /* Round a value to the lowest integer less than it that is a multiple of
91 the required alignment. Avoid using division in case the value is
92 negative. Assume the alignment is a power of two. */
93 #define FLOOR_ROUND(VALUE,ALIGN) ((VALUE) & ~((ALIGN) - 1))
94
95 /* Similar, but round to the next highest integer that meets the
96 alignment. */
97 #define CEIL_ROUND(VALUE,ALIGN) (((VALUE) + (ALIGN) - 1) & ~((ALIGN)- 1))
98
99 /* Nonzero if function being compiled doesn't contain any calls
100 (ignoring the prologue and epilogue). This is set prior to
101 local register allocation and is valid for the remaining
102 compiler passes. */
103 int current_function_is_leaf;
104
105 /* Nonzero if function being compiled doesn't modify the stack pointer
106 (ignoring the prologue and epilogue). This is only valid after
107 pass_stack_ptr_mod has run. */
108 int current_function_sp_is_unchanging;
109
110 /* Nonzero if the function being compiled is a leaf function which only
111 uses leaf registers. This is valid after reload (specifically after
112 sched2) and is useful only if the port defines LEAF_REGISTERS. */
113 int current_function_uses_only_leaf_regs;
114
115 /* Nonzero once virtual register instantiation has been done.
116 assign_stack_local uses frame_pointer_rtx when this is nonzero.
117 calls.c:emit_library_call_value_1 uses it to set up
118 post-instantiation libcalls. */
119 int virtuals_instantiated;
120
121 /* Assign unique numbers to labels generated for profiling, debugging, etc. */
122 static GTY(()) int funcdef_no;
123
124 /* These variables hold pointers to functions to create and destroy
125 target specific, per-function data structures. */
126 struct machine_function * (*init_machine_status) (void);
127
128 /* The currently compiled function. */
129 struct function *cfun = 0;
130
131 /* These arrays record the INSN_UIDs of the prologue and epilogue insns. */
132 static VEC(int,heap) *prologue;
133 static VEC(int,heap) *epilogue;
134
135 /* Array of INSN_UIDs to hold the INSN_UIDs for each sibcall epilogue
136 in this function. */
137 static VEC(int,heap) *sibcall_epilogue;
138 \f
139 /* In order to evaluate some expressions, such as function calls returning
140 structures in memory, we need to temporarily allocate stack locations.
141 We record each allocated temporary in the following structure.
142
143 Associated with each temporary slot is a nesting level. When we pop up
144 one level, all temporaries associated with the previous level are freed.
145 Normally, all temporaries are freed after the execution of the statement
146 in which they were created. However, if we are inside a ({...}) grouping,
147 the result may be in a temporary and hence must be preserved. If the
148 result could be in a temporary, we preserve it if we can determine which
149 one it is in. If we cannot determine which temporary may contain the
150 result, all temporaries are preserved. A temporary is preserved by
151 pretending it was allocated at the previous nesting level.
152
153 Automatic variables are also assigned temporary slots, at the nesting
154 level where they are defined. They are marked a "kept" so that
155 free_temp_slots will not free them. */
156
157 struct temp_slot GTY(())
158 {
159 /* Points to next temporary slot. */
160 struct temp_slot *next;
161 /* Points to previous temporary slot. */
162 struct temp_slot *prev;
163
164 /* The rtx to used to reference the slot. */
165 rtx slot;
166 /* The rtx used to represent the address if not the address of the
167 slot above. May be an EXPR_LIST if multiple addresses exist. */
168 rtx address;
169 /* The alignment (in bits) of the slot. */
170 unsigned int align;
171 /* The size, in units, of the slot. */
172 HOST_WIDE_INT size;
173 /* The type of the object in the slot, or zero if it doesn't correspond
174 to a type. We use this to determine whether a slot can be reused.
175 It can be reused if objects of the type of the new slot will always
176 conflict with objects of the type of the old slot. */
177 tree type;
178 /* Nonzero if this temporary is currently in use. */
179 char in_use;
180 /* Nonzero if this temporary has its address taken. */
181 char addr_taken;
182 /* Nesting level at which this slot is being used. */
183 int level;
184 /* Nonzero if this should survive a call to free_temp_slots. */
185 int keep;
186 /* The offset of the slot from the frame_pointer, including extra space
187 for alignment. This info is for combine_temp_slots. */
188 HOST_WIDE_INT base_offset;
189 /* The size of the slot, including extra space for alignment. This
190 info is for combine_temp_slots. */
191 HOST_WIDE_INT full_size;
192 };
193 \f
194 /* Forward declarations. */
195
196 static rtx assign_stack_local_1 (enum machine_mode, HOST_WIDE_INT, int,
197 struct function *);
198 static struct temp_slot *find_temp_slot_from_address (rtx);
199 static void pad_to_arg_alignment (struct args_size *, int, struct args_size *);
200 static void pad_below (struct args_size *, enum machine_mode, tree);
201 static void reorder_blocks_1 (rtx, tree, VEC(tree,heap) **);
202 static int all_blocks (tree, tree *);
203 static tree *get_block_vector (tree, int *);
204 extern tree debug_find_var_in_block_tree (tree, tree);
205 /* We always define `record_insns' even if it's not used so that we
206 can always export `prologue_epilogue_contains'. */
207 static void record_insns (rtx, VEC(int,heap) **) ATTRIBUTE_UNUSED;
208 static int contains (const_rtx, VEC(int,heap) **);
209 #ifdef HAVE_return
210 static void emit_return_into_block (basic_block);
211 #endif
212 #if defined(HAVE_epilogue) && defined(INCOMING_RETURN_ADDR_RTX)
213 static rtx keep_stack_depressed (rtx);
214 #endif
215 static void prepare_function_start (void);
216 static void do_clobber_return_reg (rtx, void *);
217 static void do_use_return_reg (rtx, void *);
218 static void set_insn_locators (rtx, int) ATTRIBUTE_UNUSED;
219 \f
220 /* Pointer to chain of `struct function' for containing functions. */
221 struct function *outer_function_chain;
222
223 /* Given a function decl for a containing function,
224 return the `struct function' for it. */
225
226 struct function *
227 find_function_data (tree decl)
228 {
229 struct function *p;
230
231 for (p = outer_function_chain; p; p = p->outer)
232 if (p->decl == decl)
233 return p;
234
235 gcc_unreachable ();
236 }
237
238 /* Save the current context for compilation of a nested function.
239 This is called from language-specific code. The caller should use
240 the enter_nested langhook to save any language-specific state,
241 since this function knows only about language-independent
242 variables. */
243
244 void
245 push_function_context_to (tree context ATTRIBUTE_UNUSED)
246 {
247 struct function *p;
248
249 if (cfun == 0)
250 allocate_struct_function (NULL, false);
251 p = cfun;
252
253 p->outer = outer_function_chain;
254 outer_function_chain = p;
255
256 lang_hooks.function.enter_nested (p);
257
258 set_cfun (NULL);
259 }
260
261 void
262 push_function_context (void)
263 {
264 push_function_context_to (current_function_decl);
265 }
266
267 /* Restore the last saved context, at the end of a nested function.
268 This function is called from language-specific code. */
269
270 void
271 pop_function_context_from (tree context ATTRIBUTE_UNUSED)
272 {
273 struct function *p = outer_function_chain;
274
275 set_cfun (p);
276 outer_function_chain = p->outer;
277
278 current_function_decl = p->decl;
279
280 lang_hooks.function.leave_nested (p);
281
282 /* Reset variables that have known state during rtx generation. */
283 virtuals_instantiated = 0;
284 generating_concat_p = 1;
285 }
286
287 void
288 pop_function_context (void)
289 {
290 pop_function_context_from (current_function_decl);
291 }
292
293 /* Clear out all parts of the state in F that can safely be discarded
294 after the function has been parsed, but not compiled, to let
295 garbage collection reclaim the memory. */
296
297 void
298 free_after_parsing (struct function *f)
299 {
300 /* f->expr->forced_labels is used by code generation. */
301 /* f->emit->regno_reg_rtx is used by code generation. */
302 /* f->varasm is used by code generation. */
303 /* f->eh->eh_return_stub_label is used by code generation. */
304
305 lang_hooks.function.final (f);
306 }
307
308 /* Clear out all parts of the state in F that can safely be discarded
309 after the function has been compiled, to let garbage collection
310 reclaim the memory. */
311
312 void
313 free_after_compilation (struct function *f)
314 {
315 VEC_free (int, heap, prologue);
316 VEC_free (int, heap, epilogue);
317 VEC_free (int, heap, sibcall_epilogue);
318
319 f->eh = NULL;
320 f->expr = NULL;
321 f->emit = NULL;
322 f->varasm = NULL;
323 f->machine = NULL;
324 f->cfg = NULL;
325
326 f->x_avail_temp_slots = NULL;
327 f->x_used_temp_slots = NULL;
328 f->arg_offset_rtx = NULL;
329 f->return_rtx = NULL;
330 f->internal_arg_pointer = NULL;
331 f->x_nonlocal_goto_handler_labels = NULL;
332 f->x_return_label = NULL;
333 f->x_naked_return_label = NULL;
334 f->x_stack_slot_list = NULL;
335 f->x_stack_check_probe_note = NULL;
336 f->x_arg_pointer_save_area = NULL;
337 f->x_parm_birth_insn = NULL;
338 f->epilogue_delay_list = NULL;
339 }
340 \f
341 /* Allocate fixed slots in the stack frame of the current function. */
342
343 /* Return size needed for stack frame based on slots so far allocated in
344 function F.
345 This size counts from zero. It is not rounded to PREFERRED_STACK_BOUNDARY;
346 the caller may have to do that. */
347
348 static HOST_WIDE_INT
349 get_func_frame_size (struct function *f)
350 {
351 if (FRAME_GROWS_DOWNWARD)
352 return -f->x_frame_offset;
353 else
354 return f->x_frame_offset;
355 }
356
357 /* Return size needed for stack frame based on slots so far allocated.
358 This size counts from zero. It is not rounded to PREFERRED_STACK_BOUNDARY;
359 the caller may have to do that. */
360
361 HOST_WIDE_INT
362 get_frame_size (void)
363 {
364 return get_func_frame_size (cfun);
365 }
366
367 /* Issue an error message and return TRUE if frame OFFSET overflows in
368 the signed target pointer arithmetics for function FUNC. Otherwise
369 return FALSE. */
370
371 bool
372 frame_offset_overflow (HOST_WIDE_INT offset, tree func)
373 {
374 unsigned HOST_WIDE_INT size = FRAME_GROWS_DOWNWARD ? -offset : offset;
375
376 if (size > ((unsigned HOST_WIDE_INT) 1 << (GET_MODE_BITSIZE (Pmode) - 1))
377 /* Leave room for the fixed part of the frame. */
378 - 64 * UNITS_PER_WORD)
379 {
380 error ("%Jtotal size of local objects too large", func);
381 return TRUE;
382 }
383
384 return FALSE;
385 }
386
387 /* Allocate a stack slot of SIZE bytes and return a MEM rtx for it
388 with machine mode MODE.
389
390 ALIGN controls the amount of alignment for the address of the slot:
391 0 means according to MODE,
392 -1 means use BIGGEST_ALIGNMENT and round size to multiple of that,
393 -2 means use BITS_PER_UNIT,
394 positive specifies alignment boundary in bits.
395
396 We do not round to stack_boundary here.
397
398 FUNCTION specifies the function to allocate in. */
399
400 static rtx
401 assign_stack_local_1 (enum machine_mode mode, HOST_WIDE_INT size, int align,
402 struct function *function)
403 {
404 rtx x, addr;
405 int bigend_correction = 0;
406 unsigned int alignment;
407 int frame_off, frame_alignment, frame_phase;
408
409 if (align == 0)
410 {
411 tree type;
412
413 if (mode == BLKmode)
414 alignment = BIGGEST_ALIGNMENT;
415 else
416 alignment = GET_MODE_ALIGNMENT (mode);
417
418 /* Allow the target to (possibly) increase the alignment of this
419 stack slot. */
420 type = lang_hooks.types.type_for_mode (mode, 0);
421 if (type)
422 alignment = LOCAL_ALIGNMENT (type, alignment);
423
424 alignment /= BITS_PER_UNIT;
425 }
426 else if (align == -1)
427 {
428 alignment = BIGGEST_ALIGNMENT / BITS_PER_UNIT;
429 size = CEIL_ROUND (size, alignment);
430 }
431 else if (align == -2)
432 alignment = 1; /* BITS_PER_UNIT / BITS_PER_UNIT */
433 else
434 alignment = align / BITS_PER_UNIT;
435
436 if (FRAME_GROWS_DOWNWARD)
437 function->x_frame_offset -= size;
438
439 /* Ignore alignment we can't do with expected alignment of the boundary. */
440 if (alignment * BITS_PER_UNIT > PREFERRED_STACK_BOUNDARY)
441 alignment = PREFERRED_STACK_BOUNDARY / BITS_PER_UNIT;
442
443 if (function->stack_alignment_needed < alignment * BITS_PER_UNIT)
444 function->stack_alignment_needed = alignment * BITS_PER_UNIT;
445
446 /* Calculate how many bytes the start of local variables is off from
447 stack alignment. */
448 frame_alignment = PREFERRED_STACK_BOUNDARY / BITS_PER_UNIT;
449 frame_off = STARTING_FRAME_OFFSET % frame_alignment;
450 frame_phase = frame_off ? frame_alignment - frame_off : 0;
451
452 /* Round the frame offset to the specified alignment. The default is
453 to always honor requests to align the stack but a port may choose to
454 do its own stack alignment by defining STACK_ALIGNMENT_NEEDED. */
455 if (STACK_ALIGNMENT_NEEDED
456 || mode != BLKmode
457 || size != 0)
458 {
459 /* We must be careful here, since FRAME_OFFSET might be negative and
460 division with a negative dividend isn't as well defined as we might
461 like. So we instead assume that ALIGNMENT is a power of two and
462 use logical operations which are unambiguous. */
463 if (FRAME_GROWS_DOWNWARD)
464 function->x_frame_offset
465 = (FLOOR_ROUND (function->x_frame_offset - frame_phase,
466 (unsigned HOST_WIDE_INT) alignment)
467 + frame_phase);
468 else
469 function->x_frame_offset
470 = (CEIL_ROUND (function->x_frame_offset - frame_phase,
471 (unsigned HOST_WIDE_INT) alignment)
472 + frame_phase);
473 }
474
475 /* On a big-endian machine, if we are allocating more space than we will use,
476 use the least significant bytes of those that are allocated. */
477 if (BYTES_BIG_ENDIAN && mode != BLKmode && GET_MODE_SIZE (mode) < size)
478 bigend_correction = size - GET_MODE_SIZE (mode);
479
480 /* If we have already instantiated virtual registers, return the actual
481 address relative to the frame pointer. */
482 if (function == cfun && virtuals_instantiated)
483 addr = plus_constant (frame_pointer_rtx,
484 trunc_int_for_mode
485 (frame_offset + bigend_correction
486 + STARTING_FRAME_OFFSET, Pmode));
487 else
488 addr = plus_constant (virtual_stack_vars_rtx,
489 trunc_int_for_mode
490 (function->x_frame_offset + bigend_correction,
491 Pmode));
492
493 if (!FRAME_GROWS_DOWNWARD)
494 function->x_frame_offset += size;
495
496 x = gen_rtx_MEM (mode, addr);
497 MEM_NOTRAP_P (x) = 1;
498
499 function->x_stack_slot_list
500 = gen_rtx_EXPR_LIST (VOIDmode, x, function->x_stack_slot_list);
501
502 if (frame_offset_overflow (function->x_frame_offset, function->decl))
503 function->x_frame_offset = 0;
504
505 return x;
506 }
507
508 /* Wrapper around assign_stack_local_1; assign a local stack slot for the
509 current function. */
510
511 rtx
512 assign_stack_local (enum machine_mode mode, HOST_WIDE_INT size, int align)
513 {
514 return assign_stack_local_1 (mode, size, align, cfun);
515 }
516
517 \f
518 /* Removes temporary slot TEMP from LIST. */
519
520 static void
521 cut_slot_from_list (struct temp_slot *temp, struct temp_slot **list)
522 {
523 if (temp->next)
524 temp->next->prev = temp->prev;
525 if (temp->prev)
526 temp->prev->next = temp->next;
527 else
528 *list = temp->next;
529
530 temp->prev = temp->next = NULL;
531 }
532
533 /* Inserts temporary slot TEMP to LIST. */
534
535 static void
536 insert_slot_to_list (struct temp_slot *temp, struct temp_slot **list)
537 {
538 temp->next = *list;
539 if (*list)
540 (*list)->prev = temp;
541 temp->prev = NULL;
542 *list = temp;
543 }
544
545 /* Returns the list of used temp slots at LEVEL. */
546
547 static struct temp_slot **
548 temp_slots_at_level (int level)
549 {
550 if (level >= (int) VEC_length (temp_slot_p, used_temp_slots))
551 VEC_safe_grow_cleared (temp_slot_p, gc, used_temp_slots, level + 1);
552
553 return &(VEC_address (temp_slot_p, used_temp_slots)[level]);
554 }
555
556 /* Returns the maximal temporary slot level. */
557
558 static int
559 max_slot_level (void)
560 {
561 if (!used_temp_slots)
562 return -1;
563
564 return VEC_length (temp_slot_p, used_temp_slots) - 1;
565 }
566
567 /* Moves temporary slot TEMP to LEVEL. */
568
569 static void
570 move_slot_to_level (struct temp_slot *temp, int level)
571 {
572 cut_slot_from_list (temp, temp_slots_at_level (temp->level));
573 insert_slot_to_list (temp, temp_slots_at_level (level));
574 temp->level = level;
575 }
576
577 /* Make temporary slot TEMP available. */
578
579 static void
580 make_slot_available (struct temp_slot *temp)
581 {
582 cut_slot_from_list (temp, temp_slots_at_level (temp->level));
583 insert_slot_to_list (temp, &avail_temp_slots);
584 temp->in_use = 0;
585 temp->level = -1;
586 }
587 \f
588 /* Allocate a temporary stack slot and record it for possible later
589 reuse.
590
591 MODE is the machine mode to be given to the returned rtx.
592
593 SIZE is the size in units of the space required. We do no rounding here
594 since assign_stack_local will do any required rounding.
595
596 KEEP is 1 if this slot is to be retained after a call to
597 free_temp_slots. Automatic variables for a block are allocated
598 with this flag. KEEP values of 2 or 3 were needed respectively
599 for variables whose lifetime is controlled by CLEANUP_POINT_EXPRs
600 or for SAVE_EXPRs, but they are now unused.
601
602 TYPE is the type that will be used for the stack slot. */
603
604 rtx
605 assign_stack_temp_for_type (enum machine_mode mode, HOST_WIDE_INT size,
606 int keep, tree type)
607 {
608 unsigned int align;
609 struct temp_slot *p, *best_p = 0, *selected = NULL, **pp;
610 rtx slot;
611
612 /* If SIZE is -1 it means that somebody tried to allocate a temporary
613 of a variable size. */
614 gcc_assert (size != -1);
615
616 /* These are now unused. */
617 gcc_assert (keep <= 1);
618
619 if (mode == BLKmode)
620 align = BIGGEST_ALIGNMENT;
621 else
622 align = GET_MODE_ALIGNMENT (mode);
623
624 if (! type)
625 type = lang_hooks.types.type_for_mode (mode, 0);
626
627 if (type)
628 align = LOCAL_ALIGNMENT (type, align);
629
630 /* Try to find an available, already-allocated temporary of the proper
631 mode which meets the size and alignment requirements. Choose the
632 smallest one with the closest alignment.
633
634 If assign_stack_temp is called outside of the tree->rtl expansion,
635 we cannot reuse the stack slots (that may still refer to
636 VIRTUAL_STACK_VARS_REGNUM). */
637 if (!virtuals_instantiated)
638 {
639 for (p = avail_temp_slots; p; p = p->next)
640 {
641 if (p->align >= align && p->size >= size
642 && GET_MODE (p->slot) == mode
643 && objects_must_conflict_p (p->type, type)
644 && (best_p == 0 || best_p->size > p->size
645 || (best_p->size == p->size && best_p->align > p->align)))
646 {
647 if (p->align == align && p->size == size)
648 {
649 selected = p;
650 cut_slot_from_list (selected, &avail_temp_slots);
651 best_p = 0;
652 break;
653 }
654 best_p = p;
655 }
656 }
657 }
658
659 /* Make our best, if any, the one to use. */
660 if (best_p)
661 {
662 selected = best_p;
663 cut_slot_from_list (selected, &avail_temp_slots);
664
665 /* If there are enough aligned bytes left over, make them into a new
666 temp_slot so that the extra bytes don't get wasted. Do this only
667 for BLKmode slots, so that we can be sure of the alignment. */
668 if (GET_MODE (best_p->slot) == BLKmode)
669 {
670 int alignment = best_p->align / BITS_PER_UNIT;
671 HOST_WIDE_INT rounded_size = CEIL_ROUND (size, alignment);
672
673 if (best_p->size - rounded_size >= alignment)
674 {
675 p = ggc_alloc (sizeof (struct temp_slot));
676 p->in_use = p->addr_taken = 0;
677 p->size = best_p->size - rounded_size;
678 p->base_offset = best_p->base_offset + rounded_size;
679 p->full_size = best_p->full_size - rounded_size;
680 p->slot = adjust_address_nv (best_p->slot, BLKmode, rounded_size);
681 p->align = best_p->align;
682 p->address = 0;
683 p->type = best_p->type;
684 insert_slot_to_list (p, &avail_temp_slots);
685
686 stack_slot_list = gen_rtx_EXPR_LIST (VOIDmode, p->slot,
687 stack_slot_list);
688
689 best_p->size = rounded_size;
690 best_p->full_size = rounded_size;
691 }
692 }
693 }
694
695 /* If we still didn't find one, make a new temporary. */
696 if (selected == 0)
697 {
698 HOST_WIDE_INT frame_offset_old = frame_offset;
699
700 p = ggc_alloc (sizeof (struct temp_slot));
701
702 /* We are passing an explicit alignment request to assign_stack_local.
703 One side effect of that is assign_stack_local will not round SIZE
704 to ensure the frame offset remains suitably aligned.
705
706 So for requests which depended on the rounding of SIZE, we go ahead
707 and round it now. We also make sure ALIGNMENT is at least
708 BIGGEST_ALIGNMENT. */
709 gcc_assert (mode != BLKmode || align == BIGGEST_ALIGNMENT);
710 p->slot = assign_stack_local (mode,
711 (mode == BLKmode
712 ? CEIL_ROUND (size, (int) align / BITS_PER_UNIT)
713 : size),
714 align);
715
716 p->align = align;
717
718 /* The following slot size computation is necessary because we don't
719 know the actual size of the temporary slot until assign_stack_local
720 has performed all the frame alignment and size rounding for the
721 requested temporary. Note that extra space added for alignment
722 can be either above or below this stack slot depending on which
723 way the frame grows. We include the extra space if and only if it
724 is above this slot. */
725 if (FRAME_GROWS_DOWNWARD)
726 p->size = frame_offset_old - frame_offset;
727 else
728 p->size = size;
729
730 /* Now define the fields used by combine_temp_slots. */
731 if (FRAME_GROWS_DOWNWARD)
732 {
733 p->base_offset = frame_offset;
734 p->full_size = frame_offset_old - frame_offset;
735 }
736 else
737 {
738 p->base_offset = frame_offset_old;
739 p->full_size = frame_offset - frame_offset_old;
740 }
741 p->address = 0;
742
743 selected = p;
744 }
745
746 p = selected;
747 p->in_use = 1;
748 p->addr_taken = 0;
749 p->type = type;
750 p->level = temp_slot_level;
751 p->keep = keep;
752
753 pp = temp_slots_at_level (p->level);
754 insert_slot_to_list (p, pp);
755
756 /* Create a new MEM rtx to avoid clobbering MEM flags of old slots. */
757 slot = gen_rtx_MEM (mode, XEXP (p->slot, 0));
758 stack_slot_list = gen_rtx_EXPR_LIST (VOIDmode, slot, stack_slot_list);
759
760 /* If we know the alias set for the memory that will be used, use
761 it. If there's no TYPE, then we don't know anything about the
762 alias set for the memory. */
763 set_mem_alias_set (slot, type ? get_alias_set (type) : 0);
764 set_mem_align (slot, align);
765
766 /* If a type is specified, set the relevant flags. */
767 if (type != 0)
768 {
769 MEM_VOLATILE_P (slot) = TYPE_VOLATILE (type);
770 MEM_SET_IN_STRUCT_P (slot, (AGGREGATE_TYPE_P (type)
771 || TREE_CODE (type) == COMPLEX_TYPE));
772 }
773 MEM_NOTRAP_P (slot) = 1;
774
775 return slot;
776 }
777
778 /* Allocate a temporary stack slot and record it for possible later
779 reuse. First three arguments are same as in preceding function. */
780
781 rtx
782 assign_stack_temp (enum machine_mode mode, HOST_WIDE_INT size, int keep)
783 {
784 return assign_stack_temp_for_type (mode, size, keep, NULL_TREE);
785 }
786 \f
787 /* Assign a temporary.
788 If TYPE_OR_DECL is a decl, then we are doing it on behalf of the decl
789 and so that should be used in error messages. In either case, we
790 allocate of the given type.
791 KEEP is as for assign_stack_temp.
792 MEMORY_REQUIRED is 1 if the result must be addressable stack memory;
793 it is 0 if a register is OK.
794 DONT_PROMOTE is 1 if we should not promote values in register
795 to wider modes. */
796
797 rtx
798 assign_temp (tree type_or_decl, int keep, int memory_required,
799 int dont_promote ATTRIBUTE_UNUSED)
800 {
801 tree type, decl;
802 enum machine_mode mode;
803 #ifdef PROMOTE_MODE
804 int unsignedp;
805 #endif
806
807 if (DECL_P (type_or_decl))
808 decl = type_or_decl, type = TREE_TYPE (decl);
809 else
810 decl = NULL, type = type_or_decl;
811
812 mode = TYPE_MODE (type);
813 #ifdef PROMOTE_MODE
814 unsignedp = TYPE_UNSIGNED (type);
815 #endif
816
817 if (mode == BLKmode || memory_required)
818 {
819 HOST_WIDE_INT size = int_size_in_bytes (type);
820 rtx tmp;
821
822 /* Zero sized arrays are GNU C extension. Set size to 1 to avoid
823 problems with allocating the stack space. */
824 if (size == 0)
825 size = 1;
826
827 /* Unfortunately, we don't yet know how to allocate variable-sized
828 temporaries. However, sometimes we can find a fixed upper limit on
829 the size, so try that instead. */
830 else if (size == -1)
831 size = max_int_size_in_bytes (type);
832
833 /* The size of the temporary may be too large to fit into an integer. */
834 /* ??? Not sure this should happen except for user silliness, so limit
835 this to things that aren't compiler-generated temporaries. The
836 rest of the time we'll die in assign_stack_temp_for_type. */
837 if (decl && size == -1
838 && TREE_CODE (TYPE_SIZE_UNIT (type)) == INTEGER_CST)
839 {
840 error ("size of variable %q+D is too large", decl);
841 size = 1;
842 }
843
844 tmp = assign_stack_temp_for_type (mode, size, keep, type);
845 return tmp;
846 }
847
848 #ifdef PROMOTE_MODE
849 if (! dont_promote)
850 mode = promote_mode (type, mode, &unsignedp, 0);
851 #endif
852
853 return gen_reg_rtx (mode);
854 }
855 \f
856 /* Combine temporary stack slots which are adjacent on the stack.
857
858 This allows for better use of already allocated stack space. This is only
859 done for BLKmode slots because we can be sure that we won't have alignment
860 problems in this case. */
861
862 static void
863 combine_temp_slots (void)
864 {
865 struct temp_slot *p, *q, *next, *next_q;
866 int num_slots;
867
868 /* We can't combine slots, because the information about which slot
869 is in which alias set will be lost. */
870 if (flag_strict_aliasing)
871 return;
872
873 /* If there are a lot of temp slots, don't do anything unless
874 high levels of optimization. */
875 if (! flag_expensive_optimizations)
876 for (p = avail_temp_slots, num_slots = 0; p; p = p->next, num_slots++)
877 if (num_slots > 100 || (num_slots > 10 && optimize == 0))
878 return;
879
880 for (p = avail_temp_slots; p; p = next)
881 {
882 int delete_p = 0;
883
884 next = p->next;
885
886 if (GET_MODE (p->slot) != BLKmode)
887 continue;
888
889 for (q = p->next; q; q = next_q)
890 {
891 int delete_q = 0;
892
893 next_q = q->next;
894
895 if (GET_MODE (q->slot) != BLKmode)
896 continue;
897
898 if (p->base_offset + p->full_size == q->base_offset)
899 {
900 /* Q comes after P; combine Q into P. */
901 p->size += q->size;
902 p->full_size += q->full_size;
903 delete_q = 1;
904 }
905 else if (q->base_offset + q->full_size == p->base_offset)
906 {
907 /* P comes after Q; combine P into Q. */
908 q->size += p->size;
909 q->full_size += p->full_size;
910 delete_p = 1;
911 break;
912 }
913 if (delete_q)
914 cut_slot_from_list (q, &avail_temp_slots);
915 }
916
917 /* Either delete P or advance past it. */
918 if (delete_p)
919 cut_slot_from_list (p, &avail_temp_slots);
920 }
921 }
922 \f
923 /* Find the temp slot corresponding to the object at address X. */
924
925 static struct temp_slot *
926 find_temp_slot_from_address (rtx x)
927 {
928 struct temp_slot *p;
929 rtx next;
930 int i;
931
932 for (i = max_slot_level (); i >= 0; i--)
933 for (p = *temp_slots_at_level (i); p; p = p->next)
934 {
935 if (XEXP (p->slot, 0) == x
936 || p->address == x
937 || (GET_CODE (x) == PLUS
938 && XEXP (x, 0) == virtual_stack_vars_rtx
939 && GET_CODE (XEXP (x, 1)) == CONST_INT
940 && INTVAL (XEXP (x, 1)) >= p->base_offset
941 && INTVAL (XEXP (x, 1)) < p->base_offset + p->full_size))
942 return p;
943
944 else if (p->address != 0 && GET_CODE (p->address) == EXPR_LIST)
945 for (next = p->address; next; next = XEXP (next, 1))
946 if (XEXP (next, 0) == x)
947 return p;
948 }
949
950 /* If we have a sum involving a register, see if it points to a temp
951 slot. */
952 if (GET_CODE (x) == PLUS && REG_P (XEXP (x, 0))
953 && (p = find_temp_slot_from_address (XEXP (x, 0))) != 0)
954 return p;
955 else if (GET_CODE (x) == PLUS && REG_P (XEXP (x, 1))
956 && (p = find_temp_slot_from_address (XEXP (x, 1))) != 0)
957 return p;
958
959 return 0;
960 }
961
962 /* Indicate that NEW is an alternate way of referring to the temp slot
963 that previously was known by OLD. */
964
965 void
966 update_temp_slot_address (rtx old, rtx new)
967 {
968 struct temp_slot *p;
969
970 if (rtx_equal_p (old, new))
971 return;
972
973 p = find_temp_slot_from_address (old);
974
975 /* If we didn't find one, see if both OLD is a PLUS. If so, and NEW
976 is a register, see if one operand of the PLUS is a temporary
977 location. If so, NEW points into it. Otherwise, if both OLD and
978 NEW are a PLUS and if there is a register in common between them.
979 If so, try a recursive call on those values. */
980 if (p == 0)
981 {
982 if (GET_CODE (old) != PLUS)
983 return;
984
985 if (REG_P (new))
986 {
987 update_temp_slot_address (XEXP (old, 0), new);
988 update_temp_slot_address (XEXP (old, 1), new);
989 return;
990 }
991 else if (GET_CODE (new) != PLUS)
992 return;
993
994 if (rtx_equal_p (XEXP (old, 0), XEXP (new, 0)))
995 update_temp_slot_address (XEXP (old, 1), XEXP (new, 1));
996 else if (rtx_equal_p (XEXP (old, 1), XEXP (new, 0)))
997 update_temp_slot_address (XEXP (old, 0), XEXP (new, 1));
998 else if (rtx_equal_p (XEXP (old, 0), XEXP (new, 1)))
999 update_temp_slot_address (XEXP (old, 1), XEXP (new, 0));
1000 else if (rtx_equal_p (XEXP (old, 1), XEXP (new, 1)))
1001 update_temp_slot_address (XEXP (old, 0), XEXP (new, 0));
1002
1003 return;
1004 }
1005
1006 /* Otherwise add an alias for the temp's address. */
1007 else if (p->address == 0)
1008 p->address = new;
1009 else
1010 {
1011 if (GET_CODE (p->address) != EXPR_LIST)
1012 p->address = gen_rtx_EXPR_LIST (VOIDmode, p->address, NULL_RTX);
1013
1014 p->address = gen_rtx_EXPR_LIST (VOIDmode, new, p->address);
1015 }
1016 }
1017
1018 /* If X could be a reference to a temporary slot, mark the fact that its
1019 address was taken. */
1020
1021 void
1022 mark_temp_addr_taken (rtx x)
1023 {
1024 struct temp_slot *p;
1025
1026 if (x == 0)
1027 return;
1028
1029 /* If X is not in memory or is at a constant address, it cannot be in
1030 a temporary slot. */
1031 if (!MEM_P (x) || CONSTANT_P (XEXP (x, 0)))
1032 return;
1033
1034 p = find_temp_slot_from_address (XEXP (x, 0));
1035 if (p != 0)
1036 p->addr_taken = 1;
1037 }
1038
1039 /* If X could be a reference to a temporary slot, mark that slot as
1040 belonging to the to one level higher than the current level. If X
1041 matched one of our slots, just mark that one. Otherwise, we can't
1042 easily predict which it is, so upgrade all of them. Kept slots
1043 need not be touched.
1044
1045 This is called when an ({...}) construct occurs and a statement
1046 returns a value in memory. */
1047
1048 void
1049 preserve_temp_slots (rtx x)
1050 {
1051 struct temp_slot *p = 0, *next;
1052
1053 /* If there is no result, we still might have some objects whose address
1054 were taken, so we need to make sure they stay around. */
1055 if (x == 0)
1056 {
1057 for (p = *temp_slots_at_level (temp_slot_level); p; p = next)
1058 {
1059 next = p->next;
1060
1061 if (p->addr_taken)
1062 move_slot_to_level (p, temp_slot_level - 1);
1063 }
1064
1065 return;
1066 }
1067
1068 /* If X is a register that is being used as a pointer, see if we have
1069 a temporary slot we know it points to. To be consistent with
1070 the code below, we really should preserve all non-kept slots
1071 if we can't find a match, but that seems to be much too costly. */
1072 if (REG_P (x) && REG_POINTER (x))
1073 p = find_temp_slot_from_address (x);
1074
1075 /* If X is not in memory or is at a constant address, it cannot be in
1076 a temporary slot, but it can contain something whose address was
1077 taken. */
1078 if (p == 0 && (!MEM_P (x) || CONSTANT_P (XEXP (x, 0))))
1079 {
1080 for (p = *temp_slots_at_level (temp_slot_level); p; p = next)
1081 {
1082 next = p->next;
1083
1084 if (p->addr_taken)
1085 move_slot_to_level (p, temp_slot_level - 1);
1086 }
1087
1088 return;
1089 }
1090
1091 /* First see if we can find a match. */
1092 if (p == 0)
1093 p = find_temp_slot_from_address (XEXP (x, 0));
1094
1095 if (p != 0)
1096 {
1097 /* Move everything at our level whose address was taken to our new
1098 level in case we used its address. */
1099 struct temp_slot *q;
1100
1101 if (p->level == temp_slot_level)
1102 {
1103 for (q = *temp_slots_at_level (temp_slot_level); q; q = next)
1104 {
1105 next = q->next;
1106
1107 if (p != q && q->addr_taken)
1108 move_slot_to_level (q, temp_slot_level - 1);
1109 }
1110
1111 move_slot_to_level (p, temp_slot_level - 1);
1112 p->addr_taken = 0;
1113 }
1114 return;
1115 }
1116
1117 /* Otherwise, preserve all non-kept slots at this level. */
1118 for (p = *temp_slots_at_level (temp_slot_level); p; p = next)
1119 {
1120 next = p->next;
1121
1122 if (!p->keep)
1123 move_slot_to_level (p, temp_slot_level - 1);
1124 }
1125 }
1126
1127 /* Free all temporaries used so far. This is normally called at the
1128 end of generating code for a statement. */
1129
1130 void
1131 free_temp_slots (void)
1132 {
1133 struct temp_slot *p, *next;
1134
1135 for (p = *temp_slots_at_level (temp_slot_level); p; p = next)
1136 {
1137 next = p->next;
1138
1139 if (!p->keep)
1140 make_slot_available (p);
1141 }
1142
1143 combine_temp_slots ();
1144 }
1145
1146 /* Push deeper into the nesting level for stack temporaries. */
1147
1148 void
1149 push_temp_slots (void)
1150 {
1151 temp_slot_level++;
1152 }
1153
1154 /* Pop a temporary nesting level. All slots in use in the current level
1155 are freed. */
1156
1157 void
1158 pop_temp_slots (void)
1159 {
1160 struct temp_slot *p, *next;
1161
1162 for (p = *temp_slots_at_level (temp_slot_level); p; p = next)
1163 {
1164 next = p->next;
1165 make_slot_available (p);
1166 }
1167
1168 combine_temp_slots ();
1169
1170 temp_slot_level--;
1171 }
1172
1173 /* Initialize temporary slots. */
1174
1175 void
1176 init_temp_slots (void)
1177 {
1178 /* We have not allocated any temporaries yet. */
1179 avail_temp_slots = 0;
1180 used_temp_slots = 0;
1181 temp_slot_level = 0;
1182 }
1183 \f
1184 /* These routines are responsible for converting virtual register references
1185 to the actual hard register references once RTL generation is complete.
1186
1187 The following four variables are used for communication between the
1188 routines. They contain the offsets of the virtual registers from their
1189 respective hard registers. */
1190
1191 static int in_arg_offset;
1192 static int var_offset;
1193 static int dynamic_offset;
1194 static int out_arg_offset;
1195 static int cfa_offset;
1196
1197 /* In most machines, the stack pointer register is equivalent to the bottom
1198 of the stack. */
1199
1200 #ifndef STACK_POINTER_OFFSET
1201 #define STACK_POINTER_OFFSET 0
1202 #endif
1203
1204 /* If not defined, pick an appropriate default for the offset of dynamically
1205 allocated memory depending on the value of ACCUMULATE_OUTGOING_ARGS,
1206 REG_PARM_STACK_SPACE, and OUTGOING_REG_PARM_STACK_SPACE. */
1207
1208 #ifndef STACK_DYNAMIC_OFFSET
1209
1210 /* The bottom of the stack points to the actual arguments. If
1211 REG_PARM_STACK_SPACE is defined, this includes the space for the register
1212 parameters. However, if OUTGOING_REG_PARM_STACK space is not defined,
1213 stack space for register parameters is not pushed by the caller, but
1214 rather part of the fixed stack areas and hence not included in
1215 `current_function_outgoing_args_size'. Nevertheless, we must allow
1216 for it when allocating stack dynamic objects. */
1217
1218 #if defined(REG_PARM_STACK_SPACE)
1219 #define STACK_DYNAMIC_OFFSET(FNDECL) \
1220 ((ACCUMULATE_OUTGOING_ARGS \
1221 ? (current_function_outgoing_args_size \
1222 + (OUTGOING_REG_PARM_STACK_SPACE ? 0 : REG_PARM_STACK_SPACE (FNDECL))) \
1223 : 0) + (STACK_POINTER_OFFSET))
1224 #else
1225 #define STACK_DYNAMIC_OFFSET(FNDECL) \
1226 ((ACCUMULATE_OUTGOING_ARGS ? current_function_outgoing_args_size : 0) \
1227 + (STACK_POINTER_OFFSET))
1228 #endif
1229 #endif
1230
1231 \f
1232 /* Given a piece of RTX and a pointer to a HOST_WIDE_INT, if the RTX
1233 is a virtual register, return the equivalent hard register and set the
1234 offset indirectly through the pointer. Otherwise, return 0. */
1235
1236 static rtx
1237 instantiate_new_reg (rtx x, HOST_WIDE_INT *poffset)
1238 {
1239 rtx new;
1240 HOST_WIDE_INT offset;
1241
1242 if (x == virtual_incoming_args_rtx)
1243 new = arg_pointer_rtx, offset = in_arg_offset;
1244 else if (x == virtual_stack_vars_rtx)
1245 new = frame_pointer_rtx, offset = var_offset;
1246 else if (x == virtual_stack_dynamic_rtx)
1247 new = stack_pointer_rtx, offset = dynamic_offset;
1248 else if (x == virtual_outgoing_args_rtx)
1249 new = stack_pointer_rtx, offset = out_arg_offset;
1250 else if (x == virtual_cfa_rtx)
1251 {
1252 #ifdef FRAME_POINTER_CFA_OFFSET
1253 new = frame_pointer_rtx;
1254 #else
1255 new = arg_pointer_rtx;
1256 #endif
1257 offset = cfa_offset;
1258 }
1259 else
1260 return NULL_RTX;
1261
1262 *poffset = offset;
1263 return new;
1264 }
1265
1266 /* A subroutine of instantiate_virtual_regs, called via for_each_rtx.
1267 Instantiate any virtual registers present inside of *LOC. The expression
1268 is simplified, as much as possible, but is not to be considered "valid"
1269 in any sense implied by the target. If any change is made, set CHANGED
1270 to true. */
1271
1272 static int
1273 instantiate_virtual_regs_in_rtx (rtx *loc, void *data)
1274 {
1275 HOST_WIDE_INT offset;
1276 bool *changed = (bool *) data;
1277 rtx x, new;
1278
1279 x = *loc;
1280 if (x == 0)
1281 return 0;
1282
1283 switch (GET_CODE (x))
1284 {
1285 case REG:
1286 new = instantiate_new_reg (x, &offset);
1287 if (new)
1288 {
1289 *loc = plus_constant (new, offset);
1290 if (changed)
1291 *changed = true;
1292 }
1293 return -1;
1294
1295 case PLUS:
1296 new = instantiate_new_reg (XEXP (x, 0), &offset);
1297 if (new)
1298 {
1299 new = plus_constant (new, offset);
1300 *loc = simplify_gen_binary (PLUS, GET_MODE (x), new, XEXP (x, 1));
1301 if (changed)
1302 *changed = true;
1303 return -1;
1304 }
1305
1306 /* FIXME -- from old code */
1307 /* If we have (plus (subreg (virtual-reg)) (const_int)), we know
1308 we can commute the PLUS and SUBREG because pointers into the
1309 frame are well-behaved. */
1310 break;
1311
1312 default:
1313 break;
1314 }
1315
1316 return 0;
1317 }
1318
1319 /* A subroutine of instantiate_virtual_regs_in_insn. Return true if X
1320 matches the predicate for insn CODE operand OPERAND. */
1321
1322 static int
1323 safe_insn_predicate (int code, int operand, rtx x)
1324 {
1325 const struct insn_operand_data *op_data;
1326
1327 if (code < 0)
1328 return true;
1329
1330 op_data = &insn_data[code].operand[operand];
1331 if (op_data->predicate == NULL)
1332 return true;
1333
1334 return op_data->predicate (x, op_data->mode);
1335 }
1336
1337 /* A subroutine of instantiate_virtual_regs. Instantiate any virtual
1338 registers present inside of insn. The result will be a valid insn. */
1339
1340 static void
1341 instantiate_virtual_regs_in_insn (rtx insn)
1342 {
1343 HOST_WIDE_INT offset;
1344 int insn_code, i;
1345 bool any_change = false;
1346 rtx set, new, x, seq;
1347
1348 /* There are some special cases to be handled first. */
1349 set = single_set (insn);
1350 if (set)
1351 {
1352 /* We're allowed to assign to a virtual register. This is interpreted
1353 to mean that the underlying register gets assigned the inverse
1354 transformation. This is used, for example, in the handling of
1355 non-local gotos. */
1356 new = instantiate_new_reg (SET_DEST (set), &offset);
1357 if (new)
1358 {
1359 start_sequence ();
1360
1361 for_each_rtx (&SET_SRC (set), instantiate_virtual_regs_in_rtx, NULL);
1362 x = simplify_gen_binary (PLUS, GET_MODE (new), SET_SRC (set),
1363 GEN_INT (-offset));
1364 x = force_operand (x, new);
1365 if (x != new)
1366 emit_move_insn (new, x);
1367
1368 seq = get_insns ();
1369 end_sequence ();
1370
1371 emit_insn_before (seq, insn);
1372 delete_insn (insn);
1373 return;
1374 }
1375
1376 /* Handle a straight copy from a virtual register by generating a
1377 new add insn. The difference between this and falling through
1378 to the generic case is avoiding a new pseudo and eliminating a
1379 move insn in the initial rtl stream. */
1380 new = instantiate_new_reg (SET_SRC (set), &offset);
1381 if (new && offset != 0
1382 && REG_P (SET_DEST (set))
1383 && REGNO (SET_DEST (set)) > LAST_VIRTUAL_REGISTER)
1384 {
1385 start_sequence ();
1386
1387 x = expand_simple_binop (GET_MODE (SET_DEST (set)), PLUS,
1388 new, GEN_INT (offset), SET_DEST (set),
1389 1, OPTAB_LIB_WIDEN);
1390 if (x != SET_DEST (set))
1391 emit_move_insn (SET_DEST (set), x);
1392
1393 seq = get_insns ();
1394 end_sequence ();
1395
1396 emit_insn_before (seq, insn);
1397 delete_insn (insn);
1398 return;
1399 }
1400
1401 extract_insn (insn);
1402 insn_code = INSN_CODE (insn);
1403
1404 /* Handle a plus involving a virtual register by determining if the
1405 operands remain valid if they're modified in place. */
1406 if (GET_CODE (SET_SRC (set)) == PLUS
1407 && recog_data.n_operands >= 3
1408 && recog_data.operand_loc[1] == &XEXP (SET_SRC (set), 0)
1409 && recog_data.operand_loc[2] == &XEXP (SET_SRC (set), 1)
1410 && GET_CODE (recog_data.operand[2]) == CONST_INT
1411 && (new = instantiate_new_reg (recog_data.operand[1], &offset)))
1412 {
1413 offset += INTVAL (recog_data.operand[2]);
1414
1415 /* If the sum is zero, then replace with a plain move. */
1416 if (offset == 0
1417 && REG_P (SET_DEST (set))
1418 && REGNO (SET_DEST (set)) > LAST_VIRTUAL_REGISTER)
1419 {
1420 start_sequence ();
1421 emit_move_insn (SET_DEST (set), new);
1422 seq = get_insns ();
1423 end_sequence ();
1424
1425 emit_insn_before (seq, insn);
1426 delete_insn (insn);
1427 return;
1428 }
1429
1430 x = gen_int_mode (offset, recog_data.operand_mode[2]);
1431
1432 /* Using validate_change and apply_change_group here leaves
1433 recog_data in an invalid state. Since we know exactly what
1434 we want to check, do those two by hand. */
1435 if (safe_insn_predicate (insn_code, 1, new)
1436 && safe_insn_predicate (insn_code, 2, x))
1437 {
1438 *recog_data.operand_loc[1] = recog_data.operand[1] = new;
1439 *recog_data.operand_loc[2] = recog_data.operand[2] = x;
1440 any_change = true;
1441
1442 /* Fall through into the regular operand fixup loop in
1443 order to take care of operands other than 1 and 2. */
1444 }
1445 }
1446 }
1447 else
1448 {
1449 extract_insn (insn);
1450 insn_code = INSN_CODE (insn);
1451 }
1452
1453 /* In the general case, we expect virtual registers to appear only in
1454 operands, and then only as either bare registers or inside memories. */
1455 for (i = 0; i < recog_data.n_operands; ++i)
1456 {
1457 x = recog_data.operand[i];
1458 switch (GET_CODE (x))
1459 {
1460 case MEM:
1461 {
1462 rtx addr = XEXP (x, 0);
1463 bool changed = false;
1464
1465 for_each_rtx (&addr, instantiate_virtual_regs_in_rtx, &changed);
1466 if (!changed)
1467 continue;
1468
1469 start_sequence ();
1470 x = replace_equiv_address (x, addr);
1471 /* It may happen that the address with the virtual reg
1472 was valid (e.g. based on the virtual stack reg, which might
1473 be acceptable to the predicates with all offsets), whereas
1474 the address now isn't anymore, for instance when the address
1475 is still offsetted, but the base reg isn't virtual-stack-reg
1476 anymore. Below we would do a force_reg on the whole operand,
1477 but this insn might actually only accept memory. Hence,
1478 before doing that last resort, try to reload the address into
1479 a register, so this operand stays a MEM. */
1480 if (!safe_insn_predicate (insn_code, i, x))
1481 {
1482 addr = force_reg (GET_MODE (addr), addr);
1483 x = replace_equiv_address (x, addr);
1484 }
1485 seq = get_insns ();
1486 end_sequence ();
1487 if (seq)
1488 emit_insn_before (seq, insn);
1489 }
1490 break;
1491
1492 case REG:
1493 new = instantiate_new_reg (x, &offset);
1494 if (new == NULL)
1495 continue;
1496 if (offset == 0)
1497 x = new;
1498 else
1499 {
1500 start_sequence ();
1501
1502 /* Careful, special mode predicates may have stuff in
1503 insn_data[insn_code].operand[i].mode that isn't useful
1504 to us for computing a new value. */
1505 /* ??? Recognize address_operand and/or "p" constraints
1506 to see if (plus new offset) is a valid before we put
1507 this through expand_simple_binop. */
1508 x = expand_simple_binop (GET_MODE (x), PLUS, new,
1509 GEN_INT (offset), NULL_RTX,
1510 1, OPTAB_LIB_WIDEN);
1511 seq = get_insns ();
1512 end_sequence ();
1513 emit_insn_before (seq, insn);
1514 }
1515 break;
1516
1517 case SUBREG:
1518 new = instantiate_new_reg (SUBREG_REG (x), &offset);
1519 if (new == NULL)
1520 continue;
1521 if (offset != 0)
1522 {
1523 start_sequence ();
1524 new = expand_simple_binop (GET_MODE (new), PLUS, new,
1525 GEN_INT (offset), NULL_RTX,
1526 1, OPTAB_LIB_WIDEN);
1527 seq = get_insns ();
1528 end_sequence ();
1529 emit_insn_before (seq, insn);
1530 }
1531 x = simplify_gen_subreg (recog_data.operand_mode[i], new,
1532 GET_MODE (new), SUBREG_BYTE (x));
1533 break;
1534
1535 default:
1536 continue;
1537 }
1538
1539 /* At this point, X contains the new value for the operand.
1540 Validate the new value vs the insn predicate. Note that
1541 asm insns will have insn_code -1 here. */
1542 if (!safe_insn_predicate (insn_code, i, x))
1543 {
1544 start_sequence ();
1545 x = force_reg (insn_data[insn_code].operand[i].mode, x);
1546 seq = get_insns ();
1547 end_sequence ();
1548 if (seq)
1549 emit_insn_before (seq, insn);
1550 }
1551
1552 *recog_data.operand_loc[i] = recog_data.operand[i] = x;
1553 any_change = true;
1554 }
1555
1556 if (any_change)
1557 {
1558 /* Propagate operand changes into the duplicates. */
1559 for (i = 0; i < recog_data.n_dups; ++i)
1560 *recog_data.dup_loc[i]
1561 = copy_rtx (recog_data.operand[(unsigned)recog_data.dup_num[i]]);
1562
1563 /* Force re-recognition of the instruction for validation. */
1564 INSN_CODE (insn) = -1;
1565 }
1566
1567 if (asm_noperands (PATTERN (insn)) >= 0)
1568 {
1569 if (!check_asm_operands (PATTERN (insn)))
1570 {
1571 error_for_asm (insn, "impossible constraint in %<asm%>");
1572 delete_insn (insn);
1573 }
1574 }
1575 else
1576 {
1577 if (recog_memoized (insn) < 0)
1578 fatal_insn_not_found (insn);
1579 }
1580 }
1581
1582 /* Subroutine of instantiate_decls. Given RTL representing a decl,
1583 do any instantiation required. */
1584
1585 void
1586 instantiate_decl_rtl (rtx x)
1587 {
1588 rtx addr;
1589
1590 if (x == 0)
1591 return;
1592
1593 /* If this is a CONCAT, recurse for the pieces. */
1594 if (GET_CODE (x) == CONCAT)
1595 {
1596 instantiate_decl_rtl (XEXP (x, 0));
1597 instantiate_decl_rtl (XEXP (x, 1));
1598 return;
1599 }
1600
1601 /* If this is not a MEM, no need to do anything. Similarly if the
1602 address is a constant or a register that is not a virtual register. */
1603 if (!MEM_P (x))
1604 return;
1605
1606 addr = XEXP (x, 0);
1607 if (CONSTANT_P (addr)
1608 || (REG_P (addr)
1609 && (REGNO (addr) < FIRST_VIRTUAL_REGISTER
1610 || REGNO (addr) > LAST_VIRTUAL_REGISTER)))
1611 return;
1612
1613 for_each_rtx (&XEXP (x, 0), instantiate_virtual_regs_in_rtx, NULL);
1614 }
1615
1616 /* Helper for instantiate_decls called via walk_tree: Process all decls
1617 in the given DECL_VALUE_EXPR. */
1618
1619 static tree
1620 instantiate_expr (tree *tp, int *walk_subtrees, void *data ATTRIBUTE_UNUSED)
1621 {
1622 tree t = *tp;
1623 if (! EXPR_P (t) && ! GIMPLE_STMT_P (t))
1624 {
1625 *walk_subtrees = 0;
1626 if (DECL_P (t) && DECL_RTL_SET_P (t))
1627 instantiate_decl_rtl (DECL_RTL (t));
1628 }
1629 return NULL;
1630 }
1631
1632 /* Subroutine of instantiate_decls: Process all decls in the given
1633 BLOCK node and all its subblocks. */
1634
1635 static void
1636 instantiate_decls_1 (tree let)
1637 {
1638 tree t;
1639
1640 for (t = BLOCK_VARS (let); t; t = TREE_CHAIN (t))
1641 {
1642 if (DECL_RTL_SET_P (t))
1643 instantiate_decl_rtl (DECL_RTL (t));
1644 if (TREE_CODE (t) == VAR_DECL && DECL_HAS_VALUE_EXPR_P (t))
1645 {
1646 tree v = DECL_VALUE_EXPR (t);
1647 walk_tree (&v, instantiate_expr, NULL, NULL);
1648 }
1649 }
1650
1651 /* Process all subblocks. */
1652 for (t = BLOCK_SUBBLOCKS (let); t; t = BLOCK_CHAIN (t))
1653 instantiate_decls_1 (t);
1654 }
1655
1656 /* Scan all decls in FNDECL (both variables and parameters) and instantiate
1657 all virtual registers in their DECL_RTL's. */
1658
1659 static void
1660 instantiate_decls (tree fndecl)
1661 {
1662 tree decl;
1663
1664 /* Process all parameters of the function. */
1665 for (decl = DECL_ARGUMENTS (fndecl); decl; decl = TREE_CHAIN (decl))
1666 {
1667 instantiate_decl_rtl (DECL_RTL (decl));
1668 instantiate_decl_rtl (DECL_INCOMING_RTL (decl));
1669 if (DECL_HAS_VALUE_EXPR_P (decl))
1670 {
1671 tree v = DECL_VALUE_EXPR (decl);
1672 walk_tree (&v, instantiate_expr, NULL, NULL);
1673 }
1674 }
1675
1676 /* Now process all variables defined in the function or its subblocks. */
1677 instantiate_decls_1 (DECL_INITIAL (fndecl));
1678 }
1679
1680 /* Pass through the INSNS of function FNDECL and convert virtual register
1681 references to hard register references. */
1682
1683 static unsigned int
1684 instantiate_virtual_regs (void)
1685 {
1686 rtx insn;
1687
1688 /* Compute the offsets to use for this function. */
1689 in_arg_offset = FIRST_PARM_OFFSET (current_function_decl);
1690 var_offset = STARTING_FRAME_OFFSET;
1691 dynamic_offset = STACK_DYNAMIC_OFFSET (current_function_decl);
1692 out_arg_offset = STACK_POINTER_OFFSET;
1693 #ifdef FRAME_POINTER_CFA_OFFSET
1694 cfa_offset = FRAME_POINTER_CFA_OFFSET (current_function_decl);
1695 #else
1696 cfa_offset = ARG_POINTER_CFA_OFFSET (current_function_decl);
1697 #endif
1698
1699 /* Initialize recognition, indicating that volatile is OK. */
1700 init_recog ();
1701
1702 /* Scan through all the insns, instantiating every virtual register still
1703 present. */
1704 for (insn = get_insns (); insn; insn = NEXT_INSN (insn))
1705 if (INSN_P (insn))
1706 {
1707 /* These patterns in the instruction stream can never be recognized.
1708 Fortunately, they shouldn't contain virtual registers either. */
1709 if (GET_CODE (PATTERN (insn)) == USE
1710 || GET_CODE (PATTERN (insn)) == CLOBBER
1711 || GET_CODE (PATTERN (insn)) == ADDR_VEC
1712 || GET_CODE (PATTERN (insn)) == ADDR_DIFF_VEC
1713 || GET_CODE (PATTERN (insn)) == ASM_INPUT)
1714 continue;
1715
1716 instantiate_virtual_regs_in_insn (insn);
1717
1718 if (INSN_DELETED_P (insn))
1719 continue;
1720
1721 for_each_rtx (&REG_NOTES (insn), instantiate_virtual_regs_in_rtx, NULL);
1722
1723 /* Instantiate any virtual registers in CALL_INSN_FUNCTION_USAGE. */
1724 if (GET_CODE (insn) == CALL_INSN)
1725 for_each_rtx (&CALL_INSN_FUNCTION_USAGE (insn),
1726 instantiate_virtual_regs_in_rtx, NULL);
1727 }
1728
1729 /* Instantiate the virtual registers in the DECLs for debugging purposes. */
1730 instantiate_decls (current_function_decl);
1731
1732 targetm.instantiate_decls ();
1733
1734 /* Indicate that, from now on, assign_stack_local should use
1735 frame_pointer_rtx. */
1736 virtuals_instantiated = 1;
1737 return 0;
1738 }
1739
1740 struct tree_opt_pass pass_instantiate_virtual_regs =
1741 {
1742 "vregs", /* name */
1743 NULL, /* gate */
1744 instantiate_virtual_regs, /* execute */
1745 NULL, /* sub */
1746 NULL, /* next */
1747 0, /* static_pass_number */
1748 0, /* tv_id */
1749 0, /* properties_required */
1750 0, /* properties_provided */
1751 0, /* properties_destroyed */
1752 0, /* todo_flags_start */
1753 TODO_dump_func, /* todo_flags_finish */
1754 0 /* letter */
1755 };
1756
1757 \f
1758 /* Return 1 if EXP is an aggregate type (or a value with aggregate type).
1759 This means a type for which function calls must pass an address to the
1760 function or get an address back from the function.
1761 EXP may be a type node or an expression (whose type is tested). */
1762
1763 int
1764 aggregate_value_p (const_tree exp, const_tree fntype)
1765 {
1766 int i, regno, nregs;
1767 rtx reg;
1768
1769 const_tree type = (TYPE_P (exp)) ? exp : TREE_TYPE (exp);
1770
1771 /* DECL node associated with FNTYPE when relevant, which we might need to
1772 check for by-invisible-reference returns, typically for CALL_EXPR input
1773 EXPressions. */
1774 const_tree fndecl = NULL_TREE;
1775
1776 if (fntype)
1777 switch (TREE_CODE (fntype))
1778 {
1779 case CALL_EXPR:
1780 fndecl = get_callee_fndecl (fntype);
1781 fntype = fndecl ? TREE_TYPE (fndecl) : 0;
1782 break;
1783 case FUNCTION_DECL:
1784 fndecl = fntype;
1785 fntype = TREE_TYPE (fndecl);
1786 break;
1787 case FUNCTION_TYPE:
1788 case METHOD_TYPE:
1789 break;
1790 case IDENTIFIER_NODE:
1791 fntype = 0;
1792 break;
1793 default:
1794 /* We don't expect other rtl types here. */
1795 gcc_unreachable ();
1796 }
1797
1798 if (TREE_CODE (type) == VOID_TYPE)
1799 return 0;
1800
1801 /* If the front end has decided that this needs to be passed by
1802 reference, do so. */
1803 if ((TREE_CODE (exp) == PARM_DECL || TREE_CODE (exp) == RESULT_DECL)
1804 && DECL_BY_REFERENCE (exp))
1805 return 1;
1806
1807 /* If the EXPression is a CALL_EXPR, honor DECL_BY_REFERENCE set on the
1808 called function RESULT_DECL, meaning the function returns in memory by
1809 invisible reference. This check lets front-ends not set TREE_ADDRESSABLE
1810 on the function type, which used to be the way to request such a return
1811 mechanism but might now be causing troubles at gimplification time if
1812 temporaries with the function type need to be created. */
1813 if (TREE_CODE (exp) == CALL_EXPR && fndecl && DECL_RESULT (fndecl)
1814 && DECL_BY_REFERENCE (DECL_RESULT (fndecl)))
1815 return 1;
1816
1817 if (targetm.calls.return_in_memory (type, fntype))
1818 return 1;
1819 /* Types that are TREE_ADDRESSABLE must be constructed in memory,
1820 and thus can't be returned in registers. */
1821 if (TREE_ADDRESSABLE (type))
1822 return 1;
1823 if (flag_pcc_struct_return && AGGREGATE_TYPE_P (type))
1824 return 1;
1825 /* Make sure we have suitable call-clobbered regs to return
1826 the value in; if not, we must return it in memory. */
1827 reg = hard_function_value (type, 0, fntype, 0);
1828
1829 /* If we have something other than a REG (e.g. a PARALLEL), then assume
1830 it is OK. */
1831 if (!REG_P (reg))
1832 return 0;
1833
1834 regno = REGNO (reg);
1835 nregs = hard_regno_nregs[regno][TYPE_MODE (type)];
1836 for (i = 0; i < nregs; i++)
1837 if (! call_used_regs[regno + i])
1838 return 1;
1839 return 0;
1840 }
1841 \f
1842 /* Return true if we should assign DECL a pseudo register; false if it
1843 should live on the local stack. */
1844
1845 bool
1846 use_register_for_decl (const_tree decl)
1847 {
1848 /* Honor volatile. */
1849 if (TREE_SIDE_EFFECTS (decl))
1850 return false;
1851
1852 /* Honor addressability. */
1853 if (TREE_ADDRESSABLE (decl))
1854 return false;
1855
1856 /* Only register-like things go in registers. */
1857 if (DECL_MODE (decl) == BLKmode)
1858 return false;
1859
1860 /* If -ffloat-store specified, don't put explicit float variables
1861 into registers. */
1862 /* ??? This should be checked after DECL_ARTIFICIAL, but tree-ssa
1863 propagates values across these stores, and it probably shouldn't. */
1864 if (flag_float_store && FLOAT_TYPE_P (TREE_TYPE (decl)))
1865 return false;
1866
1867 /* If we're not interested in tracking debugging information for
1868 this decl, then we can certainly put it in a register. */
1869 if (DECL_IGNORED_P (decl))
1870 return true;
1871
1872 return (optimize || DECL_REGISTER (decl));
1873 }
1874
1875 /* Return true if TYPE should be passed by invisible reference. */
1876
1877 bool
1878 pass_by_reference (CUMULATIVE_ARGS *ca, enum machine_mode mode,
1879 tree type, bool named_arg)
1880 {
1881 if (type)
1882 {
1883 /* If this type contains non-trivial constructors, then it is
1884 forbidden for the middle-end to create any new copies. */
1885 if (TREE_ADDRESSABLE (type))
1886 return true;
1887
1888 /* GCC post 3.4 passes *all* variable sized types by reference. */
1889 if (!TYPE_SIZE (type) || TREE_CODE (TYPE_SIZE (type)) != INTEGER_CST)
1890 return true;
1891 }
1892
1893 return targetm.calls.pass_by_reference (ca, mode, type, named_arg);
1894 }
1895
1896 /* Return true if TYPE, which is passed by reference, should be callee
1897 copied instead of caller copied. */
1898
1899 bool
1900 reference_callee_copied (CUMULATIVE_ARGS *ca, enum machine_mode mode,
1901 tree type, bool named_arg)
1902 {
1903 if (type && TREE_ADDRESSABLE (type))
1904 return false;
1905 return targetm.calls.callee_copies (ca, mode, type, named_arg);
1906 }
1907
1908 /* Structures to communicate between the subroutines of assign_parms.
1909 The first holds data persistent across all parameters, the second
1910 is cleared out for each parameter. */
1911
1912 struct assign_parm_data_all
1913 {
1914 CUMULATIVE_ARGS args_so_far;
1915 struct args_size stack_args_size;
1916 tree function_result_decl;
1917 tree orig_fnargs;
1918 rtx first_conversion_insn;
1919 rtx last_conversion_insn;
1920 HOST_WIDE_INT pretend_args_size;
1921 HOST_WIDE_INT extra_pretend_bytes;
1922 int reg_parm_stack_space;
1923 };
1924
1925 struct assign_parm_data_one
1926 {
1927 tree nominal_type;
1928 tree passed_type;
1929 rtx entry_parm;
1930 rtx stack_parm;
1931 enum machine_mode nominal_mode;
1932 enum machine_mode passed_mode;
1933 enum machine_mode promoted_mode;
1934 struct locate_and_pad_arg_data locate;
1935 int partial;
1936 BOOL_BITFIELD named_arg : 1;
1937 BOOL_BITFIELD passed_pointer : 1;
1938 BOOL_BITFIELD on_stack : 1;
1939 BOOL_BITFIELD loaded_in_reg : 1;
1940 };
1941
1942 /* A subroutine of assign_parms. Initialize ALL. */
1943
1944 static void
1945 assign_parms_initialize_all (struct assign_parm_data_all *all)
1946 {
1947 tree fntype;
1948
1949 memset (all, 0, sizeof (*all));
1950
1951 fntype = TREE_TYPE (current_function_decl);
1952
1953 #ifdef INIT_CUMULATIVE_INCOMING_ARGS
1954 INIT_CUMULATIVE_INCOMING_ARGS (all->args_so_far, fntype, NULL_RTX);
1955 #else
1956 INIT_CUMULATIVE_ARGS (all->args_so_far, fntype, NULL_RTX,
1957 current_function_decl, -1);
1958 #endif
1959
1960 #ifdef REG_PARM_STACK_SPACE
1961 all->reg_parm_stack_space = REG_PARM_STACK_SPACE (current_function_decl);
1962 #endif
1963 }
1964
1965 /* If ARGS contains entries with complex types, split the entry into two
1966 entries of the component type. Return a new list of substitutions are
1967 needed, else the old list. */
1968
1969 static tree
1970 split_complex_args (tree args)
1971 {
1972 tree p;
1973
1974 /* Before allocating memory, check for the common case of no complex. */
1975 for (p = args; p; p = TREE_CHAIN (p))
1976 {
1977 tree type = TREE_TYPE (p);
1978 if (TREE_CODE (type) == COMPLEX_TYPE
1979 && targetm.calls.split_complex_arg (type))
1980 goto found;
1981 }
1982 return args;
1983
1984 found:
1985 args = copy_list (args);
1986
1987 for (p = args; p; p = TREE_CHAIN (p))
1988 {
1989 tree type = TREE_TYPE (p);
1990 if (TREE_CODE (type) == COMPLEX_TYPE
1991 && targetm.calls.split_complex_arg (type))
1992 {
1993 tree decl;
1994 tree subtype = TREE_TYPE (type);
1995 bool addressable = TREE_ADDRESSABLE (p);
1996
1997 /* Rewrite the PARM_DECL's type with its component. */
1998 TREE_TYPE (p) = subtype;
1999 DECL_ARG_TYPE (p) = TREE_TYPE (DECL_ARG_TYPE (p));
2000 DECL_MODE (p) = VOIDmode;
2001 DECL_SIZE (p) = NULL;
2002 DECL_SIZE_UNIT (p) = NULL;
2003 /* If this arg must go in memory, put it in a pseudo here.
2004 We can't allow it to go in memory as per normal parms,
2005 because the usual place might not have the imag part
2006 adjacent to the real part. */
2007 DECL_ARTIFICIAL (p) = addressable;
2008 DECL_IGNORED_P (p) = addressable;
2009 TREE_ADDRESSABLE (p) = 0;
2010 layout_decl (p, 0);
2011
2012 /* Build a second synthetic decl. */
2013 decl = build_decl (PARM_DECL, NULL_TREE, subtype);
2014 DECL_ARG_TYPE (decl) = DECL_ARG_TYPE (p);
2015 DECL_ARTIFICIAL (decl) = addressable;
2016 DECL_IGNORED_P (decl) = addressable;
2017 layout_decl (decl, 0);
2018
2019 /* Splice it in; skip the new decl. */
2020 TREE_CHAIN (decl) = TREE_CHAIN (p);
2021 TREE_CHAIN (p) = decl;
2022 p = decl;
2023 }
2024 }
2025
2026 return args;
2027 }
2028
2029 /* A subroutine of assign_parms. Adjust the parameter list to incorporate
2030 the hidden struct return argument, and (abi willing) complex args.
2031 Return the new parameter list. */
2032
2033 static tree
2034 assign_parms_augmented_arg_list (struct assign_parm_data_all *all)
2035 {
2036 tree fndecl = current_function_decl;
2037 tree fntype = TREE_TYPE (fndecl);
2038 tree fnargs = DECL_ARGUMENTS (fndecl);
2039
2040 /* If struct value address is treated as the first argument, make it so. */
2041 if (aggregate_value_p (DECL_RESULT (fndecl), fndecl)
2042 && ! current_function_returns_pcc_struct
2043 && targetm.calls.struct_value_rtx (TREE_TYPE (fndecl), 1) == 0)
2044 {
2045 tree type = build_pointer_type (TREE_TYPE (fntype));
2046 tree decl;
2047
2048 decl = build_decl (PARM_DECL, NULL_TREE, type);
2049 DECL_ARG_TYPE (decl) = type;
2050 DECL_ARTIFICIAL (decl) = 1;
2051 DECL_IGNORED_P (decl) = 1;
2052
2053 TREE_CHAIN (decl) = fnargs;
2054 fnargs = decl;
2055 all->function_result_decl = decl;
2056 }
2057
2058 all->orig_fnargs = fnargs;
2059
2060 /* If the target wants to split complex arguments into scalars, do so. */
2061 if (targetm.calls.split_complex_arg)
2062 fnargs = split_complex_args (fnargs);
2063
2064 return fnargs;
2065 }
2066
2067 /* A subroutine of assign_parms. Examine PARM and pull out type and mode
2068 data for the parameter. Incorporate ABI specifics such as pass-by-
2069 reference and type promotion. */
2070
2071 static void
2072 assign_parm_find_data_types (struct assign_parm_data_all *all, tree parm,
2073 struct assign_parm_data_one *data)
2074 {
2075 tree nominal_type, passed_type;
2076 enum machine_mode nominal_mode, passed_mode, promoted_mode;
2077
2078 memset (data, 0, sizeof (*data));
2079
2080 /* NAMED_ARG is a mis-nomer. We really mean 'non-varadic'. */
2081 if (!current_function_stdarg)
2082 data->named_arg = 1; /* No varadic parms. */
2083 else if (TREE_CHAIN (parm))
2084 data->named_arg = 1; /* Not the last non-varadic parm. */
2085 else if (targetm.calls.strict_argument_naming (&all->args_so_far))
2086 data->named_arg = 1; /* Only varadic ones are unnamed. */
2087 else
2088 data->named_arg = 0; /* Treat as varadic. */
2089
2090 nominal_type = TREE_TYPE (parm);
2091 passed_type = DECL_ARG_TYPE (parm);
2092
2093 /* Look out for errors propagating this far. Also, if the parameter's
2094 type is void then its value doesn't matter. */
2095 if (TREE_TYPE (parm) == error_mark_node
2096 /* This can happen after weird syntax errors
2097 or if an enum type is defined among the parms. */
2098 || TREE_CODE (parm) != PARM_DECL
2099 || passed_type == NULL
2100 || VOID_TYPE_P (nominal_type))
2101 {
2102 nominal_type = passed_type = void_type_node;
2103 nominal_mode = passed_mode = promoted_mode = VOIDmode;
2104 goto egress;
2105 }
2106
2107 /* Find mode of arg as it is passed, and mode of arg as it should be
2108 during execution of this function. */
2109 passed_mode = TYPE_MODE (passed_type);
2110 nominal_mode = TYPE_MODE (nominal_type);
2111
2112 /* If the parm is to be passed as a transparent union, use the type of
2113 the first field for the tests below. We have already verified that
2114 the modes are the same. */
2115 if (TREE_CODE (passed_type) == UNION_TYPE
2116 && TYPE_TRANSPARENT_UNION (passed_type))
2117 passed_type = TREE_TYPE (TYPE_FIELDS (passed_type));
2118
2119 /* See if this arg was passed by invisible reference. */
2120 if (pass_by_reference (&all->args_so_far, passed_mode,
2121 passed_type, data->named_arg))
2122 {
2123 passed_type = nominal_type = build_pointer_type (passed_type);
2124 data->passed_pointer = true;
2125 passed_mode = nominal_mode = Pmode;
2126 }
2127
2128 /* Find mode as it is passed by the ABI. */
2129 promoted_mode = passed_mode;
2130 if (targetm.calls.promote_function_args (TREE_TYPE (current_function_decl)))
2131 {
2132 int unsignedp = TYPE_UNSIGNED (passed_type);
2133 promoted_mode = promote_mode (passed_type, promoted_mode,
2134 &unsignedp, 1);
2135 }
2136
2137 egress:
2138 data->nominal_type = nominal_type;
2139 data->passed_type = passed_type;
2140 data->nominal_mode = nominal_mode;
2141 data->passed_mode = passed_mode;
2142 data->promoted_mode = promoted_mode;
2143 }
2144
2145 /* A subroutine of assign_parms. Invoke setup_incoming_varargs. */
2146
2147 static void
2148 assign_parms_setup_varargs (struct assign_parm_data_all *all,
2149 struct assign_parm_data_one *data, bool no_rtl)
2150 {
2151 int varargs_pretend_bytes = 0;
2152
2153 targetm.calls.setup_incoming_varargs (&all->args_so_far,
2154 data->promoted_mode,
2155 data->passed_type,
2156 &varargs_pretend_bytes, no_rtl);
2157
2158 /* If the back-end has requested extra stack space, record how much is
2159 needed. Do not change pretend_args_size otherwise since it may be
2160 nonzero from an earlier partial argument. */
2161 if (varargs_pretend_bytes > 0)
2162 all->pretend_args_size = varargs_pretend_bytes;
2163 }
2164
2165 /* A subroutine of assign_parms. Set DATA->ENTRY_PARM corresponding to
2166 the incoming location of the current parameter. */
2167
2168 static void
2169 assign_parm_find_entry_rtl (struct assign_parm_data_all *all,
2170 struct assign_parm_data_one *data)
2171 {
2172 HOST_WIDE_INT pretend_bytes = 0;
2173 rtx entry_parm;
2174 bool in_regs;
2175
2176 if (data->promoted_mode == VOIDmode)
2177 {
2178 data->entry_parm = data->stack_parm = const0_rtx;
2179 return;
2180 }
2181
2182 #ifdef FUNCTION_INCOMING_ARG
2183 entry_parm = FUNCTION_INCOMING_ARG (all->args_so_far, data->promoted_mode,
2184 data->passed_type, data->named_arg);
2185 #else
2186 entry_parm = FUNCTION_ARG (all->args_so_far, data->promoted_mode,
2187 data->passed_type, data->named_arg);
2188 #endif
2189
2190 if (entry_parm == 0)
2191 data->promoted_mode = data->passed_mode;
2192
2193 /* Determine parm's home in the stack, in case it arrives in the stack
2194 or we should pretend it did. Compute the stack position and rtx where
2195 the argument arrives and its size.
2196
2197 There is one complexity here: If this was a parameter that would
2198 have been passed in registers, but wasn't only because it is
2199 __builtin_va_alist, we want locate_and_pad_parm to treat it as if
2200 it came in a register so that REG_PARM_STACK_SPACE isn't skipped.
2201 In this case, we call FUNCTION_ARG with NAMED set to 1 instead of 0
2202 as it was the previous time. */
2203 in_regs = entry_parm != 0;
2204 #ifdef STACK_PARMS_IN_REG_PARM_AREA
2205 in_regs = true;
2206 #endif
2207 if (!in_regs && !data->named_arg)
2208 {
2209 if (targetm.calls.pretend_outgoing_varargs_named (&all->args_so_far))
2210 {
2211 rtx tem;
2212 #ifdef FUNCTION_INCOMING_ARG
2213 tem = FUNCTION_INCOMING_ARG (all->args_so_far, data->promoted_mode,
2214 data->passed_type, true);
2215 #else
2216 tem = FUNCTION_ARG (all->args_so_far, data->promoted_mode,
2217 data->passed_type, true);
2218 #endif
2219 in_regs = tem != NULL;
2220 }
2221 }
2222
2223 /* If this parameter was passed both in registers and in the stack, use
2224 the copy on the stack. */
2225 if (targetm.calls.must_pass_in_stack (data->promoted_mode,
2226 data->passed_type))
2227 entry_parm = 0;
2228
2229 if (entry_parm)
2230 {
2231 int partial;
2232
2233 partial = targetm.calls.arg_partial_bytes (&all->args_so_far,
2234 data->promoted_mode,
2235 data->passed_type,
2236 data->named_arg);
2237 data->partial = partial;
2238
2239 /* The caller might already have allocated stack space for the
2240 register parameters. */
2241 if (partial != 0 && all->reg_parm_stack_space == 0)
2242 {
2243 /* Part of this argument is passed in registers and part
2244 is passed on the stack. Ask the prologue code to extend
2245 the stack part so that we can recreate the full value.
2246
2247 PRETEND_BYTES is the size of the registers we need to store.
2248 CURRENT_FUNCTION_PRETEND_ARGS_SIZE is the amount of extra
2249 stack space that the prologue should allocate.
2250
2251 Internally, gcc assumes that the argument pointer is aligned
2252 to STACK_BOUNDARY bits. This is used both for alignment
2253 optimizations (see init_emit) and to locate arguments that are
2254 aligned to more than PARM_BOUNDARY bits. We must preserve this
2255 invariant by rounding CURRENT_FUNCTION_PRETEND_ARGS_SIZE up to
2256 a stack boundary. */
2257
2258 /* We assume at most one partial arg, and it must be the first
2259 argument on the stack. */
2260 gcc_assert (!all->extra_pretend_bytes && !all->pretend_args_size);
2261
2262 pretend_bytes = partial;
2263 all->pretend_args_size = CEIL_ROUND (pretend_bytes, STACK_BYTES);
2264
2265 /* We want to align relative to the actual stack pointer, so
2266 don't include this in the stack size until later. */
2267 all->extra_pretend_bytes = all->pretend_args_size;
2268 }
2269 }
2270
2271 locate_and_pad_parm (data->promoted_mode, data->passed_type, in_regs,
2272 entry_parm ? data->partial : 0, current_function_decl,
2273 &all->stack_args_size, &data->locate);
2274
2275 /* Adjust offsets to include the pretend args. */
2276 pretend_bytes = all->extra_pretend_bytes - pretend_bytes;
2277 data->locate.slot_offset.constant += pretend_bytes;
2278 data->locate.offset.constant += pretend_bytes;
2279
2280 data->entry_parm = entry_parm;
2281 }
2282
2283 /* A subroutine of assign_parms. If there is actually space on the stack
2284 for this parm, count it in stack_args_size and return true. */
2285
2286 static bool
2287 assign_parm_is_stack_parm (struct assign_parm_data_all *all,
2288 struct assign_parm_data_one *data)
2289 {
2290 /* Trivially true if we've no incoming register. */
2291 if (data->entry_parm == NULL)
2292 ;
2293 /* Also true if we're partially in registers and partially not,
2294 since we've arranged to drop the entire argument on the stack. */
2295 else if (data->partial != 0)
2296 ;
2297 /* Also true if the target says that it's passed in both registers
2298 and on the stack. */
2299 else if (GET_CODE (data->entry_parm) == PARALLEL
2300 && XEXP (XVECEXP (data->entry_parm, 0, 0), 0) == NULL_RTX)
2301 ;
2302 /* Also true if the target says that there's stack allocated for
2303 all register parameters. */
2304 else if (all->reg_parm_stack_space > 0)
2305 ;
2306 /* Otherwise, no, this parameter has no ABI defined stack slot. */
2307 else
2308 return false;
2309
2310 all->stack_args_size.constant += data->locate.size.constant;
2311 if (data->locate.size.var)
2312 ADD_PARM_SIZE (all->stack_args_size, data->locate.size.var);
2313
2314 return true;
2315 }
2316
2317 /* A subroutine of assign_parms. Given that this parameter is allocated
2318 stack space by the ABI, find it. */
2319
2320 static void
2321 assign_parm_find_stack_rtl (tree parm, struct assign_parm_data_one *data)
2322 {
2323 rtx offset_rtx, stack_parm;
2324 unsigned int align, boundary;
2325
2326 /* If we're passing this arg using a reg, make its stack home the
2327 aligned stack slot. */
2328 if (data->entry_parm)
2329 offset_rtx = ARGS_SIZE_RTX (data->locate.slot_offset);
2330 else
2331 offset_rtx = ARGS_SIZE_RTX (data->locate.offset);
2332
2333 stack_parm = current_function_internal_arg_pointer;
2334 if (offset_rtx != const0_rtx)
2335 stack_parm = gen_rtx_PLUS (Pmode, stack_parm, offset_rtx);
2336 stack_parm = gen_rtx_MEM (data->promoted_mode, stack_parm);
2337
2338 set_mem_attributes (stack_parm, parm, 1);
2339
2340 boundary = data->locate.boundary;
2341 align = BITS_PER_UNIT;
2342
2343 /* If we're padding upward, we know that the alignment of the slot
2344 is FUNCTION_ARG_BOUNDARY. If we're using slot_offset, we're
2345 intentionally forcing upward padding. Otherwise we have to come
2346 up with a guess at the alignment based on OFFSET_RTX. */
2347 if (data->locate.where_pad != downward || data->entry_parm)
2348 align = boundary;
2349 else if (GET_CODE (offset_rtx) == CONST_INT)
2350 {
2351 align = INTVAL (offset_rtx) * BITS_PER_UNIT | boundary;
2352 align = align & -align;
2353 }
2354 set_mem_align (stack_parm, align);
2355
2356 if (data->entry_parm)
2357 set_reg_attrs_for_parm (data->entry_parm, stack_parm);
2358
2359 data->stack_parm = stack_parm;
2360 }
2361
2362 /* A subroutine of assign_parms. Adjust DATA->ENTRY_RTL such that it's
2363 always valid and contiguous. */
2364
2365 static void
2366 assign_parm_adjust_entry_rtl (struct assign_parm_data_one *data)
2367 {
2368 rtx entry_parm = data->entry_parm;
2369 rtx stack_parm = data->stack_parm;
2370
2371 /* If this parm was passed part in regs and part in memory, pretend it
2372 arrived entirely in memory by pushing the register-part onto the stack.
2373 In the special case of a DImode or DFmode that is split, we could put
2374 it together in a pseudoreg directly, but for now that's not worth
2375 bothering with. */
2376 if (data->partial != 0)
2377 {
2378 /* Handle calls that pass values in multiple non-contiguous
2379 locations. The Irix 6 ABI has examples of this. */
2380 if (GET_CODE (entry_parm) == PARALLEL)
2381 emit_group_store (validize_mem (stack_parm), entry_parm,
2382 data->passed_type,
2383 int_size_in_bytes (data->passed_type));
2384 else
2385 {
2386 gcc_assert (data->partial % UNITS_PER_WORD == 0);
2387 move_block_from_reg (REGNO (entry_parm), validize_mem (stack_parm),
2388 data->partial / UNITS_PER_WORD);
2389 }
2390
2391 entry_parm = stack_parm;
2392 }
2393
2394 /* If we didn't decide this parm came in a register, by default it came
2395 on the stack. */
2396 else if (entry_parm == NULL)
2397 entry_parm = stack_parm;
2398
2399 /* When an argument is passed in multiple locations, we can't make use
2400 of this information, but we can save some copying if the whole argument
2401 is passed in a single register. */
2402 else if (GET_CODE (entry_parm) == PARALLEL
2403 && data->nominal_mode != BLKmode
2404 && data->passed_mode != BLKmode)
2405 {
2406 size_t i, len = XVECLEN (entry_parm, 0);
2407
2408 for (i = 0; i < len; i++)
2409 if (XEXP (XVECEXP (entry_parm, 0, i), 0) != NULL_RTX
2410 && REG_P (XEXP (XVECEXP (entry_parm, 0, i), 0))
2411 && (GET_MODE (XEXP (XVECEXP (entry_parm, 0, i), 0))
2412 == data->passed_mode)
2413 && INTVAL (XEXP (XVECEXP (entry_parm, 0, i), 1)) == 0)
2414 {
2415 entry_parm = XEXP (XVECEXP (entry_parm, 0, i), 0);
2416 break;
2417 }
2418 }
2419
2420 data->entry_parm = entry_parm;
2421 }
2422
2423 /* A subroutine of assign_parms. Adjust DATA->STACK_RTL such that it's
2424 always valid and properly aligned. */
2425
2426 static void
2427 assign_parm_adjust_stack_rtl (struct assign_parm_data_one *data)
2428 {
2429 rtx stack_parm = data->stack_parm;
2430
2431 /* If we can't trust the parm stack slot to be aligned enough for its
2432 ultimate type, don't use that slot after entry. We'll make another
2433 stack slot, if we need one. */
2434 if (stack_parm
2435 && ((STRICT_ALIGNMENT
2436 && GET_MODE_ALIGNMENT (data->nominal_mode) > MEM_ALIGN (stack_parm))
2437 || (data->nominal_type
2438 && TYPE_ALIGN (data->nominal_type) > MEM_ALIGN (stack_parm)
2439 && MEM_ALIGN (stack_parm) < PREFERRED_STACK_BOUNDARY)))
2440 stack_parm = NULL;
2441
2442 /* If parm was passed in memory, and we need to convert it on entry,
2443 don't store it back in that same slot. */
2444 else if (data->entry_parm == stack_parm
2445 && data->nominal_mode != BLKmode
2446 && data->nominal_mode != data->passed_mode)
2447 stack_parm = NULL;
2448
2449 /* If stack protection is in effect for this function, don't leave any
2450 pointers in their passed stack slots. */
2451 else if (cfun->stack_protect_guard
2452 && (flag_stack_protect == 2
2453 || data->passed_pointer
2454 || POINTER_TYPE_P (data->nominal_type)))
2455 stack_parm = NULL;
2456
2457 data->stack_parm = stack_parm;
2458 }
2459
2460 /* A subroutine of assign_parms. Return true if the current parameter
2461 should be stored as a BLKmode in the current frame. */
2462
2463 static bool
2464 assign_parm_setup_block_p (struct assign_parm_data_one *data)
2465 {
2466 if (data->nominal_mode == BLKmode)
2467 return true;
2468 if (GET_CODE (data->entry_parm) == PARALLEL)
2469 return true;
2470
2471 #ifdef BLOCK_REG_PADDING
2472 /* Only assign_parm_setup_block knows how to deal with register arguments
2473 that are padded at the least significant end. */
2474 if (REG_P (data->entry_parm)
2475 && GET_MODE_SIZE (data->promoted_mode) < UNITS_PER_WORD
2476 && (BLOCK_REG_PADDING (data->passed_mode, data->passed_type, 1)
2477 == (BYTES_BIG_ENDIAN ? upward : downward)))
2478 return true;
2479 #endif
2480
2481 return false;
2482 }
2483
2484 /* A subroutine of assign_parms. Arrange for the parameter to be
2485 present and valid in DATA->STACK_RTL. */
2486
2487 static void
2488 assign_parm_setup_block (struct assign_parm_data_all *all,
2489 tree parm, struct assign_parm_data_one *data)
2490 {
2491 rtx entry_parm = data->entry_parm;
2492 rtx stack_parm = data->stack_parm;
2493 HOST_WIDE_INT size;
2494 HOST_WIDE_INT size_stored;
2495 rtx orig_entry_parm = entry_parm;
2496
2497 if (GET_CODE (entry_parm) == PARALLEL)
2498 entry_parm = emit_group_move_into_temps (entry_parm);
2499
2500 /* If we've a non-block object that's nevertheless passed in parts,
2501 reconstitute it in register operations rather than on the stack. */
2502 if (GET_CODE (entry_parm) == PARALLEL
2503 && data->nominal_mode != BLKmode)
2504 {
2505 rtx elt0 = XEXP (XVECEXP (orig_entry_parm, 0, 0), 0);
2506
2507 if ((XVECLEN (entry_parm, 0) > 1
2508 || hard_regno_nregs[REGNO (elt0)][GET_MODE (elt0)] > 1)
2509 && use_register_for_decl (parm))
2510 {
2511 rtx parmreg = gen_reg_rtx (data->nominal_mode);
2512
2513 push_to_sequence2 (all->first_conversion_insn,
2514 all->last_conversion_insn);
2515
2516 /* For values returned in multiple registers, handle possible
2517 incompatible calls to emit_group_store.
2518
2519 For example, the following would be invalid, and would have to
2520 be fixed by the conditional below:
2521
2522 emit_group_store ((reg:SF), (parallel:DF))
2523 emit_group_store ((reg:SI), (parallel:DI))
2524
2525 An example of this are doubles in e500 v2:
2526 (parallel:DF (expr_list (reg:SI) (const_int 0))
2527 (expr_list (reg:SI) (const_int 4))). */
2528 if (data->nominal_mode != data->passed_mode)
2529 {
2530 rtx t = gen_reg_rtx (GET_MODE (entry_parm));
2531 emit_group_store (t, entry_parm, NULL_TREE,
2532 GET_MODE_SIZE (GET_MODE (entry_parm)));
2533 convert_move (parmreg, t, 0);
2534 }
2535 else
2536 emit_group_store (parmreg, entry_parm, data->nominal_type,
2537 int_size_in_bytes (data->nominal_type));
2538
2539 all->first_conversion_insn = get_insns ();
2540 all->last_conversion_insn = get_last_insn ();
2541 end_sequence ();
2542
2543 SET_DECL_RTL (parm, parmreg);
2544 return;
2545 }
2546 }
2547
2548 size = int_size_in_bytes (data->passed_type);
2549 size_stored = CEIL_ROUND (size, UNITS_PER_WORD);
2550 if (stack_parm == 0)
2551 {
2552 DECL_ALIGN (parm) = MAX (DECL_ALIGN (parm), BITS_PER_WORD);
2553 stack_parm = assign_stack_local (BLKmode, size_stored,
2554 DECL_ALIGN (parm));
2555 if (GET_MODE_SIZE (GET_MODE (entry_parm)) == size)
2556 PUT_MODE (stack_parm, GET_MODE (entry_parm));
2557 set_mem_attributes (stack_parm, parm, 1);
2558 }
2559
2560 /* If a BLKmode arrives in registers, copy it to a stack slot. Handle
2561 calls that pass values in multiple non-contiguous locations. */
2562 if (REG_P (entry_parm) || GET_CODE (entry_parm) == PARALLEL)
2563 {
2564 rtx mem;
2565
2566 /* Note that we will be storing an integral number of words.
2567 So we have to be careful to ensure that we allocate an
2568 integral number of words. We do this above when we call
2569 assign_stack_local if space was not allocated in the argument
2570 list. If it was, this will not work if PARM_BOUNDARY is not
2571 a multiple of BITS_PER_WORD. It isn't clear how to fix this
2572 if it becomes a problem. Exception is when BLKmode arrives
2573 with arguments not conforming to word_mode. */
2574
2575 if (data->stack_parm == 0)
2576 ;
2577 else if (GET_CODE (entry_parm) == PARALLEL)
2578 ;
2579 else
2580 gcc_assert (!size || !(PARM_BOUNDARY % BITS_PER_WORD));
2581
2582 mem = validize_mem (stack_parm);
2583
2584 /* Handle values in multiple non-contiguous locations. */
2585 if (GET_CODE (entry_parm) == PARALLEL)
2586 {
2587 push_to_sequence2 (all->first_conversion_insn,
2588 all->last_conversion_insn);
2589 emit_group_store (mem, entry_parm, data->passed_type, size);
2590 all->first_conversion_insn = get_insns ();
2591 all->last_conversion_insn = get_last_insn ();
2592 end_sequence ();
2593 }
2594
2595 else if (size == 0)
2596 ;
2597
2598 /* If SIZE is that of a mode no bigger than a word, just use
2599 that mode's store operation. */
2600 else if (size <= UNITS_PER_WORD)
2601 {
2602 enum machine_mode mode
2603 = mode_for_size (size * BITS_PER_UNIT, MODE_INT, 0);
2604
2605 if (mode != BLKmode
2606 #ifdef BLOCK_REG_PADDING
2607 && (size == UNITS_PER_WORD
2608 || (BLOCK_REG_PADDING (mode, data->passed_type, 1)
2609 != (BYTES_BIG_ENDIAN ? upward : downward)))
2610 #endif
2611 )
2612 {
2613 rtx reg;
2614
2615 /* We are really truncating a word_mode value containing
2616 SIZE bytes into a value of mode MODE. If such an
2617 operation requires no actual instructions, we can refer
2618 to the value directly in mode MODE, otherwise we must
2619 start with the register in word_mode and explicitly
2620 convert it. */
2621 if (TRULY_NOOP_TRUNCATION (size * BITS_PER_UNIT, BITS_PER_WORD))
2622 reg = gen_rtx_REG (mode, REGNO (entry_parm));
2623 else
2624 {
2625 reg = gen_rtx_REG (word_mode, REGNO (entry_parm));
2626 reg = convert_to_mode (mode, copy_to_reg (reg), 1);
2627 }
2628 emit_move_insn (change_address (mem, mode, 0), reg);
2629 }
2630
2631 /* Blocks smaller than a word on a BYTES_BIG_ENDIAN
2632 machine must be aligned to the left before storing
2633 to memory. Note that the previous test doesn't
2634 handle all cases (e.g. SIZE == 3). */
2635 else if (size != UNITS_PER_WORD
2636 #ifdef BLOCK_REG_PADDING
2637 && (BLOCK_REG_PADDING (mode, data->passed_type, 1)
2638 == downward)
2639 #else
2640 && BYTES_BIG_ENDIAN
2641 #endif
2642 )
2643 {
2644 rtx tem, x;
2645 int by = (UNITS_PER_WORD - size) * BITS_PER_UNIT;
2646 rtx reg = gen_rtx_REG (word_mode, REGNO (entry_parm));
2647
2648 x = expand_shift (LSHIFT_EXPR, word_mode, reg,
2649 build_int_cst (NULL_TREE, by),
2650 NULL_RTX, 1);
2651 tem = change_address (mem, word_mode, 0);
2652 emit_move_insn (tem, x);
2653 }
2654 else
2655 move_block_from_reg (REGNO (entry_parm), mem,
2656 size_stored / UNITS_PER_WORD);
2657 }
2658 else
2659 move_block_from_reg (REGNO (entry_parm), mem,
2660 size_stored / UNITS_PER_WORD);
2661 }
2662 else if (data->stack_parm == 0)
2663 {
2664 push_to_sequence2 (all->first_conversion_insn, all->last_conversion_insn);
2665 emit_block_move (stack_parm, data->entry_parm, GEN_INT (size),
2666 BLOCK_OP_NORMAL);
2667 all->first_conversion_insn = get_insns ();
2668 all->last_conversion_insn = get_last_insn ();
2669 end_sequence ();
2670 }
2671
2672 data->stack_parm = stack_parm;
2673 SET_DECL_RTL (parm, stack_parm);
2674 }
2675
2676 /* A subroutine of assign_parms. Allocate a pseudo to hold the current
2677 parameter. Get it there. Perform all ABI specified conversions. */
2678
2679 static void
2680 assign_parm_setup_reg (struct assign_parm_data_all *all, tree parm,
2681 struct assign_parm_data_one *data)
2682 {
2683 rtx parmreg;
2684 enum machine_mode promoted_nominal_mode;
2685 int unsignedp = TYPE_UNSIGNED (TREE_TYPE (parm));
2686 bool did_conversion = false;
2687
2688 /* Store the parm in a pseudoregister during the function, but we may
2689 need to do it in a wider mode. */
2690
2691 /* This is not really promoting for a call. However we need to be
2692 consistent with assign_parm_find_data_types and expand_expr_real_1. */
2693 promoted_nominal_mode
2694 = promote_mode (data->nominal_type, data->nominal_mode, &unsignedp, 1);
2695
2696 parmreg = gen_reg_rtx (promoted_nominal_mode);
2697
2698 if (!DECL_ARTIFICIAL (parm))
2699 mark_user_reg (parmreg);
2700
2701 /* If this was an item that we received a pointer to,
2702 set DECL_RTL appropriately. */
2703 if (data->passed_pointer)
2704 {
2705 rtx x = gen_rtx_MEM (TYPE_MODE (TREE_TYPE (data->passed_type)), parmreg);
2706 set_mem_attributes (x, parm, 1);
2707 SET_DECL_RTL (parm, x);
2708 }
2709 else
2710 SET_DECL_RTL (parm, parmreg);
2711
2712 /* Copy the value into the register. */
2713 if (data->nominal_mode != data->passed_mode
2714 || promoted_nominal_mode != data->promoted_mode)
2715 {
2716 int save_tree_used;
2717
2718 /* ENTRY_PARM has been converted to PROMOTED_MODE, its
2719 mode, by the caller. We now have to convert it to
2720 NOMINAL_MODE, if different. However, PARMREG may be in
2721 a different mode than NOMINAL_MODE if it is being stored
2722 promoted.
2723
2724 If ENTRY_PARM is a hard register, it might be in a register
2725 not valid for operating in its mode (e.g., an odd-numbered
2726 register for a DFmode). In that case, moves are the only
2727 thing valid, so we can't do a convert from there. This
2728 occurs when the calling sequence allow such misaligned
2729 usages.
2730
2731 In addition, the conversion may involve a call, which could
2732 clobber parameters which haven't been copied to pseudo
2733 registers yet. Therefore, we must first copy the parm to
2734 a pseudo reg here, and save the conversion until after all
2735 parameters have been moved. */
2736
2737 rtx tempreg = gen_reg_rtx (GET_MODE (data->entry_parm));
2738
2739 emit_move_insn (tempreg, validize_mem (data->entry_parm));
2740
2741 push_to_sequence2 (all->first_conversion_insn, all->last_conversion_insn);
2742 tempreg = convert_to_mode (data->nominal_mode, tempreg, unsignedp);
2743
2744 if (GET_CODE (tempreg) == SUBREG
2745 && GET_MODE (tempreg) == data->nominal_mode
2746 && REG_P (SUBREG_REG (tempreg))
2747 && data->nominal_mode == data->passed_mode
2748 && GET_MODE (SUBREG_REG (tempreg)) == GET_MODE (data->entry_parm)
2749 && GET_MODE_SIZE (GET_MODE (tempreg))
2750 < GET_MODE_SIZE (GET_MODE (data->entry_parm)))
2751 {
2752 /* The argument is already sign/zero extended, so note it
2753 into the subreg. */
2754 SUBREG_PROMOTED_VAR_P (tempreg) = 1;
2755 SUBREG_PROMOTED_UNSIGNED_SET (tempreg, unsignedp);
2756 }
2757
2758 /* TREE_USED gets set erroneously during expand_assignment. */
2759 save_tree_used = TREE_USED (parm);
2760 expand_assignment (parm, make_tree (data->nominal_type, tempreg), false);
2761 TREE_USED (parm) = save_tree_used;
2762 all->first_conversion_insn = get_insns ();
2763 all->last_conversion_insn = get_last_insn ();
2764 end_sequence ();
2765
2766 did_conversion = true;
2767 }
2768 else
2769 emit_move_insn (parmreg, validize_mem (data->entry_parm));
2770
2771 /* If we were passed a pointer but the actual value can safely live
2772 in a register, put it in one. */
2773 if (data->passed_pointer
2774 && TYPE_MODE (TREE_TYPE (parm)) != BLKmode
2775 /* If by-reference argument was promoted, demote it. */
2776 && (TYPE_MODE (TREE_TYPE (parm)) != GET_MODE (DECL_RTL (parm))
2777 || use_register_for_decl (parm)))
2778 {
2779 /* We can't use nominal_mode, because it will have been set to
2780 Pmode above. We must use the actual mode of the parm. */
2781 parmreg = gen_reg_rtx (TYPE_MODE (TREE_TYPE (parm)));
2782 mark_user_reg (parmreg);
2783
2784 if (GET_MODE (parmreg) != GET_MODE (DECL_RTL (parm)))
2785 {
2786 rtx tempreg = gen_reg_rtx (GET_MODE (DECL_RTL (parm)));
2787 int unsigned_p = TYPE_UNSIGNED (TREE_TYPE (parm));
2788
2789 push_to_sequence2 (all->first_conversion_insn,
2790 all->last_conversion_insn);
2791 emit_move_insn (tempreg, DECL_RTL (parm));
2792 tempreg = convert_to_mode (GET_MODE (parmreg), tempreg, unsigned_p);
2793 emit_move_insn (parmreg, tempreg);
2794 all->first_conversion_insn = get_insns ();
2795 all->last_conversion_insn = get_last_insn ();
2796 end_sequence ();
2797
2798 did_conversion = true;
2799 }
2800 else
2801 emit_move_insn (parmreg, DECL_RTL (parm));
2802
2803 SET_DECL_RTL (parm, parmreg);
2804
2805 /* STACK_PARM is the pointer, not the parm, and PARMREG is
2806 now the parm. */
2807 data->stack_parm = NULL;
2808 }
2809
2810 /* Mark the register as eliminable if we did no conversion and it was
2811 copied from memory at a fixed offset, and the arg pointer was not
2812 copied to a pseudo-reg. If the arg pointer is a pseudo reg or the
2813 offset formed an invalid address, such memory-equivalences as we
2814 make here would screw up life analysis for it. */
2815 if (data->nominal_mode == data->passed_mode
2816 && !did_conversion
2817 && data->stack_parm != 0
2818 && MEM_P (data->stack_parm)
2819 && data->locate.offset.var == 0
2820 && reg_mentioned_p (virtual_incoming_args_rtx,
2821 XEXP (data->stack_parm, 0)))
2822 {
2823 rtx linsn = get_last_insn ();
2824 rtx sinsn, set;
2825
2826 /* Mark complex types separately. */
2827 if (GET_CODE (parmreg) == CONCAT)
2828 {
2829 enum machine_mode submode
2830 = GET_MODE_INNER (GET_MODE (parmreg));
2831 int regnor = REGNO (XEXP (parmreg, 0));
2832 int regnoi = REGNO (XEXP (parmreg, 1));
2833 rtx stackr = adjust_address_nv (data->stack_parm, submode, 0);
2834 rtx stacki = adjust_address_nv (data->stack_parm, submode,
2835 GET_MODE_SIZE (submode));
2836
2837 /* Scan backwards for the set of the real and
2838 imaginary parts. */
2839 for (sinsn = linsn; sinsn != 0;
2840 sinsn = prev_nonnote_insn (sinsn))
2841 {
2842 set = single_set (sinsn);
2843 if (set == 0)
2844 continue;
2845
2846 if (SET_DEST (set) == regno_reg_rtx [regnoi])
2847 set_unique_reg_note (sinsn, REG_EQUIV, stacki);
2848 else if (SET_DEST (set) == regno_reg_rtx [regnor])
2849 set_unique_reg_note (sinsn, REG_EQUIV, stackr);
2850 }
2851 }
2852 else if ((set = single_set (linsn)) != 0
2853 && SET_DEST (set) == parmreg)
2854 set_unique_reg_note (linsn, REG_EQUIV, data->stack_parm);
2855 }
2856
2857 /* For pointer data type, suggest pointer register. */
2858 if (POINTER_TYPE_P (TREE_TYPE (parm)))
2859 mark_reg_pointer (parmreg,
2860 TYPE_ALIGN (TREE_TYPE (TREE_TYPE (parm))));
2861 }
2862
2863 /* A subroutine of assign_parms. Allocate stack space to hold the current
2864 parameter. Get it there. Perform all ABI specified conversions. */
2865
2866 static void
2867 assign_parm_setup_stack (struct assign_parm_data_all *all, tree parm,
2868 struct assign_parm_data_one *data)
2869 {
2870 /* Value must be stored in the stack slot STACK_PARM during function
2871 execution. */
2872 bool to_conversion = false;
2873
2874 if (data->promoted_mode != data->nominal_mode)
2875 {
2876 /* Conversion is required. */
2877 rtx tempreg = gen_reg_rtx (GET_MODE (data->entry_parm));
2878
2879 emit_move_insn (tempreg, validize_mem (data->entry_parm));
2880
2881 push_to_sequence2 (all->first_conversion_insn, all->last_conversion_insn);
2882 to_conversion = true;
2883
2884 data->entry_parm = convert_to_mode (data->nominal_mode, tempreg,
2885 TYPE_UNSIGNED (TREE_TYPE (parm)));
2886
2887 if (data->stack_parm)
2888 /* ??? This may need a big-endian conversion on sparc64. */
2889 data->stack_parm
2890 = adjust_address (data->stack_parm, data->nominal_mode, 0);
2891 }
2892
2893 if (data->entry_parm != data->stack_parm)
2894 {
2895 rtx src, dest;
2896
2897 if (data->stack_parm == 0)
2898 {
2899 data->stack_parm
2900 = assign_stack_local (GET_MODE (data->entry_parm),
2901 GET_MODE_SIZE (GET_MODE (data->entry_parm)),
2902 TYPE_ALIGN (data->passed_type));
2903 set_mem_attributes (data->stack_parm, parm, 1);
2904 }
2905
2906 dest = validize_mem (data->stack_parm);
2907 src = validize_mem (data->entry_parm);
2908
2909 if (MEM_P (src))
2910 {
2911 /* Use a block move to handle potentially misaligned entry_parm. */
2912 if (!to_conversion)
2913 push_to_sequence2 (all->first_conversion_insn,
2914 all->last_conversion_insn);
2915 to_conversion = true;
2916
2917 emit_block_move (dest, src,
2918 GEN_INT (int_size_in_bytes (data->passed_type)),
2919 BLOCK_OP_NORMAL);
2920 }
2921 else
2922 emit_move_insn (dest, src);
2923 }
2924
2925 if (to_conversion)
2926 {
2927 all->first_conversion_insn = get_insns ();
2928 all->last_conversion_insn = get_last_insn ();
2929 end_sequence ();
2930 }
2931
2932 SET_DECL_RTL (parm, data->stack_parm);
2933 }
2934
2935 /* A subroutine of assign_parms. If the ABI splits complex arguments, then
2936 undo the frobbing that we did in assign_parms_augmented_arg_list. */
2937
2938 static void
2939 assign_parms_unsplit_complex (struct assign_parm_data_all *all, tree fnargs)
2940 {
2941 tree parm;
2942 tree orig_fnargs = all->orig_fnargs;
2943
2944 for (parm = orig_fnargs; parm; parm = TREE_CHAIN (parm))
2945 {
2946 if (TREE_CODE (TREE_TYPE (parm)) == COMPLEX_TYPE
2947 && targetm.calls.split_complex_arg (TREE_TYPE (parm)))
2948 {
2949 rtx tmp, real, imag;
2950 enum machine_mode inner = GET_MODE_INNER (DECL_MODE (parm));
2951
2952 real = DECL_RTL (fnargs);
2953 imag = DECL_RTL (TREE_CHAIN (fnargs));
2954 if (inner != GET_MODE (real))
2955 {
2956 real = gen_lowpart_SUBREG (inner, real);
2957 imag = gen_lowpart_SUBREG (inner, imag);
2958 }
2959
2960 if (TREE_ADDRESSABLE (parm))
2961 {
2962 rtx rmem, imem;
2963 HOST_WIDE_INT size = int_size_in_bytes (TREE_TYPE (parm));
2964
2965 /* split_complex_arg put the real and imag parts in
2966 pseudos. Move them to memory. */
2967 tmp = assign_stack_local (DECL_MODE (parm), size,
2968 TYPE_ALIGN (TREE_TYPE (parm)));
2969 set_mem_attributes (tmp, parm, 1);
2970 rmem = adjust_address_nv (tmp, inner, 0);
2971 imem = adjust_address_nv (tmp, inner, GET_MODE_SIZE (inner));
2972 push_to_sequence2 (all->first_conversion_insn,
2973 all->last_conversion_insn);
2974 emit_move_insn (rmem, real);
2975 emit_move_insn (imem, imag);
2976 all->first_conversion_insn = get_insns ();
2977 all->last_conversion_insn = get_last_insn ();
2978 end_sequence ();
2979 }
2980 else
2981 tmp = gen_rtx_CONCAT (DECL_MODE (parm), real, imag);
2982 SET_DECL_RTL (parm, tmp);
2983
2984 real = DECL_INCOMING_RTL (fnargs);
2985 imag = DECL_INCOMING_RTL (TREE_CHAIN (fnargs));
2986 if (inner != GET_MODE (real))
2987 {
2988 real = gen_lowpart_SUBREG (inner, real);
2989 imag = gen_lowpart_SUBREG (inner, imag);
2990 }
2991 tmp = gen_rtx_CONCAT (DECL_MODE (parm), real, imag);
2992 set_decl_incoming_rtl (parm, tmp, false);
2993 fnargs = TREE_CHAIN (fnargs);
2994 }
2995 else
2996 {
2997 SET_DECL_RTL (parm, DECL_RTL (fnargs));
2998 set_decl_incoming_rtl (parm, DECL_INCOMING_RTL (fnargs), false);
2999
3000 /* Set MEM_EXPR to the original decl, i.e. to PARM,
3001 instead of the copy of decl, i.e. FNARGS. */
3002 if (DECL_INCOMING_RTL (parm) && MEM_P (DECL_INCOMING_RTL (parm)))
3003 set_mem_expr (DECL_INCOMING_RTL (parm), parm);
3004 }
3005
3006 fnargs = TREE_CHAIN (fnargs);
3007 }
3008 }
3009
3010 /* Assign RTL expressions to the function's parameters. This may involve
3011 copying them into registers and using those registers as the DECL_RTL. */
3012
3013 static void
3014 assign_parms (tree fndecl)
3015 {
3016 struct assign_parm_data_all all;
3017 tree fnargs, parm;
3018
3019 current_function_internal_arg_pointer
3020 = targetm.calls.internal_arg_pointer ();
3021
3022 assign_parms_initialize_all (&all);
3023 fnargs = assign_parms_augmented_arg_list (&all);
3024
3025 for (parm = fnargs; parm; parm = TREE_CHAIN (parm))
3026 {
3027 struct assign_parm_data_one data;
3028
3029 /* Extract the type of PARM; adjust it according to ABI. */
3030 assign_parm_find_data_types (&all, parm, &data);
3031
3032 /* Early out for errors and void parameters. */
3033 if (data.passed_mode == VOIDmode)
3034 {
3035 SET_DECL_RTL (parm, const0_rtx);
3036 DECL_INCOMING_RTL (parm) = DECL_RTL (parm);
3037 continue;
3038 }
3039
3040 if (current_function_stdarg && !TREE_CHAIN (parm))
3041 assign_parms_setup_varargs (&all, &data, false);
3042
3043 /* Find out where the parameter arrives in this function. */
3044 assign_parm_find_entry_rtl (&all, &data);
3045
3046 /* Find out where stack space for this parameter might be. */
3047 if (assign_parm_is_stack_parm (&all, &data))
3048 {
3049 assign_parm_find_stack_rtl (parm, &data);
3050 assign_parm_adjust_entry_rtl (&data);
3051 }
3052
3053 /* Record permanently how this parm was passed. */
3054 set_decl_incoming_rtl (parm, data.entry_parm, data.passed_pointer);
3055
3056 /* Update info on where next arg arrives in registers. */
3057 FUNCTION_ARG_ADVANCE (all.args_so_far, data.promoted_mode,
3058 data.passed_type, data.named_arg);
3059
3060 assign_parm_adjust_stack_rtl (&data);
3061
3062 if (assign_parm_setup_block_p (&data))
3063 assign_parm_setup_block (&all, parm, &data);
3064 else if (data.passed_pointer || use_register_for_decl (parm))
3065 assign_parm_setup_reg (&all, parm, &data);
3066 else
3067 assign_parm_setup_stack (&all, parm, &data);
3068 }
3069
3070 if (targetm.calls.split_complex_arg && fnargs != all.orig_fnargs)
3071 assign_parms_unsplit_complex (&all, fnargs);
3072
3073 /* Output all parameter conversion instructions (possibly including calls)
3074 now that all parameters have been copied out of hard registers. */
3075 emit_insn (all.first_conversion_insn);
3076
3077 /* If we are receiving a struct value address as the first argument, set up
3078 the RTL for the function result. As this might require code to convert
3079 the transmitted address to Pmode, we do this here to ensure that possible
3080 preliminary conversions of the address have been emitted already. */
3081 if (all.function_result_decl)
3082 {
3083 tree result = DECL_RESULT (current_function_decl);
3084 rtx addr = DECL_RTL (all.function_result_decl);
3085 rtx x;
3086
3087 if (DECL_BY_REFERENCE (result))
3088 x = addr;
3089 else
3090 {
3091 addr = convert_memory_address (Pmode, addr);
3092 x = gen_rtx_MEM (DECL_MODE (result), addr);
3093 set_mem_attributes (x, result, 1);
3094 }
3095 SET_DECL_RTL (result, x);
3096 }
3097
3098 /* We have aligned all the args, so add space for the pretend args. */
3099 current_function_pretend_args_size = all.pretend_args_size;
3100 all.stack_args_size.constant += all.extra_pretend_bytes;
3101 current_function_args_size = all.stack_args_size.constant;
3102
3103 /* Adjust function incoming argument size for alignment and
3104 minimum length. */
3105
3106 #ifdef REG_PARM_STACK_SPACE
3107 current_function_args_size = MAX (current_function_args_size,
3108 REG_PARM_STACK_SPACE (fndecl));
3109 #endif
3110
3111 current_function_args_size = CEIL_ROUND (current_function_args_size,
3112 PARM_BOUNDARY / BITS_PER_UNIT);
3113
3114 #ifdef ARGS_GROW_DOWNWARD
3115 current_function_arg_offset_rtx
3116 = (all.stack_args_size.var == 0 ? GEN_INT (-all.stack_args_size.constant)
3117 : expand_expr (size_diffop (all.stack_args_size.var,
3118 size_int (-all.stack_args_size.constant)),
3119 NULL_RTX, VOIDmode, 0));
3120 #else
3121 current_function_arg_offset_rtx = ARGS_SIZE_RTX (all.stack_args_size);
3122 #endif
3123
3124 /* See how many bytes, if any, of its args a function should try to pop
3125 on return. */
3126
3127 current_function_pops_args = RETURN_POPS_ARGS (fndecl, TREE_TYPE (fndecl),
3128 current_function_args_size);
3129
3130 /* For stdarg.h function, save info about
3131 regs and stack space used by the named args. */
3132
3133 current_function_args_info = all.args_so_far;
3134
3135 /* Set the rtx used for the function return value. Put this in its
3136 own variable so any optimizers that need this information don't have
3137 to include tree.h. Do this here so it gets done when an inlined
3138 function gets output. */
3139
3140 current_function_return_rtx
3141 = (DECL_RTL_SET_P (DECL_RESULT (fndecl))
3142 ? DECL_RTL (DECL_RESULT (fndecl)) : NULL_RTX);
3143
3144 /* If scalar return value was computed in a pseudo-reg, or was a named
3145 return value that got dumped to the stack, copy that to the hard
3146 return register. */
3147 if (DECL_RTL_SET_P (DECL_RESULT (fndecl)))
3148 {
3149 tree decl_result = DECL_RESULT (fndecl);
3150 rtx decl_rtl = DECL_RTL (decl_result);
3151
3152 if (REG_P (decl_rtl)
3153 ? REGNO (decl_rtl) >= FIRST_PSEUDO_REGISTER
3154 : DECL_REGISTER (decl_result))
3155 {
3156 rtx real_decl_rtl;
3157
3158 real_decl_rtl = targetm.calls.function_value (TREE_TYPE (decl_result),
3159 fndecl, true);
3160 REG_FUNCTION_VALUE_P (real_decl_rtl) = 1;
3161 /* The delay slot scheduler assumes that current_function_return_rtx
3162 holds the hard register containing the return value, not a
3163 temporary pseudo. */
3164 current_function_return_rtx = real_decl_rtl;
3165 }
3166 }
3167 }
3168
3169 /* A subroutine of gimplify_parameters, invoked via walk_tree.
3170 For all seen types, gimplify their sizes. */
3171
3172 static tree
3173 gimplify_parm_type (tree *tp, int *walk_subtrees, void *data)
3174 {
3175 tree t = *tp;
3176
3177 *walk_subtrees = 0;
3178 if (TYPE_P (t))
3179 {
3180 if (POINTER_TYPE_P (t))
3181 *walk_subtrees = 1;
3182 else if (TYPE_SIZE (t) && !TREE_CONSTANT (TYPE_SIZE (t))
3183 && !TYPE_SIZES_GIMPLIFIED (t))
3184 {
3185 gimplify_type_sizes (t, (tree *) data);
3186 *walk_subtrees = 1;
3187 }
3188 }
3189
3190 return NULL;
3191 }
3192
3193 /* Gimplify the parameter list for current_function_decl. This involves
3194 evaluating SAVE_EXPRs of variable sized parameters and generating code
3195 to implement callee-copies reference parameters. Returns a list of
3196 statements to add to the beginning of the function, or NULL if nothing
3197 to do. */
3198
3199 tree
3200 gimplify_parameters (void)
3201 {
3202 struct assign_parm_data_all all;
3203 tree fnargs, parm, stmts = NULL;
3204
3205 assign_parms_initialize_all (&all);
3206 fnargs = assign_parms_augmented_arg_list (&all);
3207
3208 for (parm = fnargs; parm; parm = TREE_CHAIN (parm))
3209 {
3210 struct assign_parm_data_one data;
3211
3212 /* Extract the type of PARM; adjust it according to ABI. */
3213 assign_parm_find_data_types (&all, parm, &data);
3214
3215 /* Early out for errors and void parameters. */
3216 if (data.passed_mode == VOIDmode || DECL_SIZE (parm) == NULL)
3217 continue;
3218
3219 /* Update info on where next arg arrives in registers. */
3220 FUNCTION_ARG_ADVANCE (all.args_so_far, data.promoted_mode,
3221 data.passed_type, data.named_arg);
3222
3223 /* ??? Once upon a time variable_size stuffed parameter list
3224 SAVE_EXPRs (amongst others) onto a pending sizes list. This
3225 turned out to be less than manageable in the gimple world.
3226 Now we have to hunt them down ourselves. */
3227 walk_tree_without_duplicates (&data.passed_type,
3228 gimplify_parm_type, &stmts);
3229
3230 if (!TREE_CONSTANT (DECL_SIZE (parm)))
3231 {
3232 gimplify_one_sizepos (&DECL_SIZE (parm), &stmts);
3233 gimplify_one_sizepos (&DECL_SIZE_UNIT (parm), &stmts);
3234 }
3235
3236 if (data.passed_pointer)
3237 {
3238 tree type = TREE_TYPE (data.passed_type);
3239 if (reference_callee_copied (&all.args_so_far, TYPE_MODE (type),
3240 type, data.named_arg))
3241 {
3242 tree local, t;
3243
3244 /* For constant sized objects, this is trivial; for
3245 variable-sized objects, we have to play games. */
3246 if (TREE_CONSTANT (DECL_SIZE (parm)))
3247 {
3248 local = create_tmp_var (type, get_name (parm));
3249 DECL_IGNORED_P (local) = 0;
3250 }
3251 else
3252 {
3253 tree ptr_type, addr;
3254
3255 ptr_type = build_pointer_type (type);
3256 addr = create_tmp_var (ptr_type, get_name (parm));
3257 DECL_IGNORED_P (addr) = 0;
3258 local = build_fold_indirect_ref (addr);
3259
3260 t = built_in_decls[BUILT_IN_ALLOCA];
3261 t = build_call_expr (t, 1, DECL_SIZE_UNIT (parm));
3262 t = fold_convert (ptr_type, t);
3263 t = build_gimple_modify_stmt (addr, t);
3264 gimplify_and_add (t, &stmts);
3265 }
3266
3267 t = build_gimple_modify_stmt (local, parm);
3268 gimplify_and_add (t, &stmts);
3269
3270 SET_DECL_VALUE_EXPR (parm, local);
3271 DECL_HAS_VALUE_EXPR_P (parm) = 1;
3272 }
3273 }
3274 }
3275
3276 return stmts;
3277 }
3278 \f
3279 /* Compute the size and offset from the start of the stacked arguments for a
3280 parm passed in mode PASSED_MODE and with type TYPE.
3281
3282 INITIAL_OFFSET_PTR points to the current offset into the stacked
3283 arguments.
3284
3285 The starting offset and size for this parm are returned in
3286 LOCATE->OFFSET and LOCATE->SIZE, respectively. When IN_REGS is
3287 nonzero, the offset is that of stack slot, which is returned in
3288 LOCATE->SLOT_OFFSET. LOCATE->ALIGNMENT_PAD is the amount of
3289 padding required from the initial offset ptr to the stack slot.
3290
3291 IN_REGS is nonzero if the argument will be passed in registers. It will
3292 never be set if REG_PARM_STACK_SPACE is not defined.
3293
3294 FNDECL is the function in which the argument was defined.
3295
3296 There are two types of rounding that are done. The first, controlled by
3297 FUNCTION_ARG_BOUNDARY, forces the offset from the start of the argument
3298 list to be aligned to the specific boundary (in bits). This rounding
3299 affects the initial and starting offsets, but not the argument size.
3300
3301 The second, controlled by FUNCTION_ARG_PADDING and PARM_BOUNDARY,
3302 optionally rounds the size of the parm to PARM_BOUNDARY. The
3303 initial offset is not affected by this rounding, while the size always
3304 is and the starting offset may be. */
3305
3306 /* LOCATE->OFFSET will be negative for ARGS_GROW_DOWNWARD case;
3307 INITIAL_OFFSET_PTR is positive because locate_and_pad_parm's
3308 callers pass in the total size of args so far as
3309 INITIAL_OFFSET_PTR. LOCATE->SIZE is always positive. */
3310
3311 void
3312 locate_and_pad_parm (enum machine_mode passed_mode, tree type, int in_regs,
3313 int partial, tree fndecl ATTRIBUTE_UNUSED,
3314 struct args_size *initial_offset_ptr,
3315 struct locate_and_pad_arg_data *locate)
3316 {
3317 tree sizetree;
3318 enum direction where_pad;
3319 unsigned int boundary;
3320 int reg_parm_stack_space = 0;
3321 int part_size_in_regs;
3322
3323 #ifdef REG_PARM_STACK_SPACE
3324 reg_parm_stack_space = REG_PARM_STACK_SPACE (fndecl);
3325
3326 /* If we have found a stack parm before we reach the end of the
3327 area reserved for registers, skip that area. */
3328 if (! in_regs)
3329 {
3330 if (reg_parm_stack_space > 0)
3331 {
3332 if (initial_offset_ptr->var)
3333 {
3334 initial_offset_ptr->var
3335 = size_binop (MAX_EXPR, ARGS_SIZE_TREE (*initial_offset_ptr),
3336 ssize_int (reg_parm_stack_space));
3337 initial_offset_ptr->constant = 0;
3338 }
3339 else if (initial_offset_ptr->constant < reg_parm_stack_space)
3340 initial_offset_ptr->constant = reg_parm_stack_space;
3341 }
3342 }
3343 #endif /* REG_PARM_STACK_SPACE */
3344
3345 part_size_in_regs = (reg_parm_stack_space == 0 ? partial : 0);
3346
3347 sizetree
3348 = type ? size_in_bytes (type) : size_int (GET_MODE_SIZE (passed_mode));
3349 where_pad = FUNCTION_ARG_PADDING (passed_mode, type);
3350 boundary = FUNCTION_ARG_BOUNDARY (passed_mode, type);
3351 locate->where_pad = where_pad;
3352 locate->boundary = boundary;
3353
3354 /* Remember if the outgoing parameter requires extra alignment on the
3355 calling function side. */
3356 if (boundary > PREFERRED_STACK_BOUNDARY)
3357 boundary = PREFERRED_STACK_BOUNDARY;
3358 if (cfun->stack_alignment_needed < boundary)
3359 cfun->stack_alignment_needed = boundary;
3360
3361 #ifdef ARGS_GROW_DOWNWARD
3362 locate->slot_offset.constant = -initial_offset_ptr->constant;
3363 if (initial_offset_ptr->var)
3364 locate->slot_offset.var = size_binop (MINUS_EXPR, ssize_int (0),
3365 initial_offset_ptr->var);
3366
3367 {
3368 tree s2 = sizetree;
3369 if (where_pad != none
3370 && (!host_integerp (sizetree, 1)
3371 || (tree_low_cst (sizetree, 1) * BITS_PER_UNIT) % PARM_BOUNDARY))
3372 s2 = round_up (s2, PARM_BOUNDARY / BITS_PER_UNIT);
3373 SUB_PARM_SIZE (locate->slot_offset, s2);
3374 }
3375
3376 locate->slot_offset.constant += part_size_in_regs;
3377
3378 if (!in_regs
3379 #ifdef REG_PARM_STACK_SPACE
3380 || REG_PARM_STACK_SPACE (fndecl) > 0
3381 #endif
3382 )
3383 pad_to_arg_alignment (&locate->slot_offset, boundary,
3384 &locate->alignment_pad);
3385
3386 locate->size.constant = (-initial_offset_ptr->constant
3387 - locate->slot_offset.constant);
3388 if (initial_offset_ptr->var)
3389 locate->size.var = size_binop (MINUS_EXPR,
3390 size_binop (MINUS_EXPR,
3391 ssize_int (0),
3392 initial_offset_ptr->var),
3393 locate->slot_offset.var);
3394
3395 /* Pad_below needs the pre-rounded size to know how much to pad
3396 below. */
3397 locate->offset = locate->slot_offset;
3398 if (where_pad == downward)
3399 pad_below (&locate->offset, passed_mode, sizetree);
3400
3401 #else /* !ARGS_GROW_DOWNWARD */
3402 if (!in_regs
3403 #ifdef REG_PARM_STACK_SPACE
3404 || REG_PARM_STACK_SPACE (fndecl) > 0
3405 #endif
3406 )
3407 pad_to_arg_alignment (initial_offset_ptr, boundary,
3408 &locate->alignment_pad);
3409 locate->slot_offset = *initial_offset_ptr;
3410
3411 #ifdef PUSH_ROUNDING
3412 if (passed_mode != BLKmode)
3413 sizetree = size_int (PUSH_ROUNDING (TREE_INT_CST_LOW (sizetree)));
3414 #endif
3415
3416 /* Pad_below needs the pre-rounded size to know how much to pad below
3417 so this must be done before rounding up. */
3418 locate->offset = locate->slot_offset;
3419 if (where_pad == downward)
3420 pad_below (&locate->offset, passed_mode, sizetree);
3421
3422 if (where_pad != none
3423 && (!host_integerp (sizetree, 1)
3424 || (tree_low_cst (sizetree, 1) * BITS_PER_UNIT) % PARM_BOUNDARY))
3425 sizetree = round_up (sizetree, PARM_BOUNDARY / BITS_PER_UNIT);
3426
3427 ADD_PARM_SIZE (locate->size, sizetree);
3428
3429 locate->size.constant -= part_size_in_regs;
3430 #endif /* ARGS_GROW_DOWNWARD */
3431 }
3432
3433 /* Round the stack offset in *OFFSET_PTR up to a multiple of BOUNDARY.
3434 BOUNDARY is measured in bits, but must be a multiple of a storage unit. */
3435
3436 static void
3437 pad_to_arg_alignment (struct args_size *offset_ptr, int boundary,
3438 struct args_size *alignment_pad)
3439 {
3440 tree save_var = NULL_TREE;
3441 HOST_WIDE_INT save_constant = 0;
3442 int boundary_in_bytes = boundary / BITS_PER_UNIT;
3443 HOST_WIDE_INT sp_offset = STACK_POINTER_OFFSET;
3444
3445 #ifdef SPARC_STACK_BOUNDARY_HACK
3446 /* ??? The SPARC port may claim a STACK_BOUNDARY higher than
3447 the real alignment of %sp. However, when it does this, the
3448 alignment of %sp+STACK_POINTER_OFFSET is STACK_BOUNDARY. */
3449 if (SPARC_STACK_BOUNDARY_HACK)
3450 sp_offset = 0;
3451 #endif
3452
3453 if (boundary > PARM_BOUNDARY && boundary > STACK_BOUNDARY)
3454 {
3455 save_var = offset_ptr->var;
3456 save_constant = offset_ptr->constant;
3457 }
3458
3459 alignment_pad->var = NULL_TREE;
3460 alignment_pad->constant = 0;
3461
3462 if (boundary > BITS_PER_UNIT)
3463 {
3464 if (offset_ptr->var)
3465 {
3466 tree sp_offset_tree = ssize_int (sp_offset);
3467 tree offset = size_binop (PLUS_EXPR,
3468 ARGS_SIZE_TREE (*offset_ptr),
3469 sp_offset_tree);
3470 #ifdef ARGS_GROW_DOWNWARD
3471 tree rounded = round_down (offset, boundary / BITS_PER_UNIT);
3472 #else
3473 tree rounded = round_up (offset, boundary / BITS_PER_UNIT);
3474 #endif
3475
3476 offset_ptr->var = size_binop (MINUS_EXPR, rounded, sp_offset_tree);
3477 /* ARGS_SIZE_TREE includes constant term. */
3478 offset_ptr->constant = 0;
3479 if (boundary > PARM_BOUNDARY && boundary > STACK_BOUNDARY)
3480 alignment_pad->var = size_binop (MINUS_EXPR, offset_ptr->var,
3481 save_var);
3482 }
3483 else
3484 {
3485 offset_ptr->constant = -sp_offset +
3486 #ifdef ARGS_GROW_DOWNWARD
3487 FLOOR_ROUND (offset_ptr->constant + sp_offset, boundary_in_bytes);
3488 #else
3489 CEIL_ROUND (offset_ptr->constant + sp_offset, boundary_in_bytes);
3490 #endif
3491 if (boundary > PARM_BOUNDARY && boundary > STACK_BOUNDARY)
3492 alignment_pad->constant = offset_ptr->constant - save_constant;
3493 }
3494 }
3495 }
3496
3497 static void
3498 pad_below (struct args_size *offset_ptr, enum machine_mode passed_mode, tree sizetree)
3499 {
3500 if (passed_mode != BLKmode)
3501 {
3502 if (GET_MODE_BITSIZE (passed_mode) % PARM_BOUNDARY)
3503 offset_ptr->constant
3504 += (((GET_MODE_BITSIZE (passed_mode) + PARM_BOUNDARY - 1)
3505 / PARM_BOUNDARY * PARM_BOUNDARY / BITS_PER_UNIT)
3506 - GET_MODE_SIZE (passed_mode));
3507 }
3508 else
3509 {
3510 if (TREE_CODE (sizetree) != INTEGER_CST
3511 || (TREE_INT_CST_LOW (sizetree) * BITS_PER_UNIT) % PARM_BOUNDARY)
3512 {
3513 /* Round the size up to multiple of PARM_BOUNDARY bits. */
3514 tree s2 = round_up (sizetree, PARM_BOUNDARY / BITS_PER_UNIT);
3515 /* Add it in. */
3516 ADD_PARM_SIZE (*offset_ptr, s2);
3517 SUB_PARM_SIZE (*offset_ptr, sizetree);
3518 }
3519 }
3520 }
3521 \f
3522
3523 /* True if register REGNO was alive at a place where `setjmp' was
3524 called and was set more than once or is an argument. Such regs may
3525 be clobbered by `longjmp'. */
3526
3527 static bool
3528 regno_clobbered_at_setjmp (bitmap setjmp_crosses, int regno)
3529 {
3530 /* There appear to be cases where some local vars never reach the
3531 backend but have bogus regnos. */
3532 if (regno >= max_reg_num ())
3533 return false;
3534
3535 return ((REG_N_SETS (regno) > 1
3536 || REGNO_REG_SET_P (df_get_live_out (ENTRY_BLOCK_PTR), regno))
3537 && REGNO_REG_SET_P (setjmp_crosses, regno));
3538 }
3539
3540 /* Walk the tree of blocks describing the binding levels within a
3541 function and warn about variables the might be killed by setjmp or
3542 vfork. This is done after calling flow_analysis before register
3543 allocation since that will clobber the pseudo-regs to hard
3544 regs. */
3545
3546 static void
3547 setjmp_vars_warning (bitmap setjmp_crosses, tree block)
3548 {
3549 tree decl, sub;
3550
3551 for (decl = BLOCK_VARS (block); decl; decl = TREE_CHAIN (decl))
3552 {
3553 if (TREE_CODE (decl) == VAR_DECL
3554 && DECL_RTL_SET_P (decl)
3555 && REG_P (DECL_RTL (decl))
3556 && regno_clobbered_at_setjmp (setjmp_crosses, REGNO (DECL_RTL (decl))))
3557 warning (OPT_Wclobbered, "variable %q+D might be clobbered by"
3558 " %<longjmp%> or %<vfork%>", decl);
3559 }
3560
3561 for (sub = BLOCK_SUBBLOCKS (block); sub; sub = BLOCK_CHAIN (sub))
3562 setjmp_vars_warning (setjmp_crosses, sub);
3563 }
3564
3565 /* Do the appropriate part of setjmp_vars_warning
3566 but for arguments instead of local variables. */
3567
3568 static void
3569 setjmp_args_warning (bitmap setjmp_crosses)
3570 {
3571 tree decl;
3572 for (decl = DECL_ARGUMENTS (current_function_decl);
3573 decl; decl = TREE_CHAIN (decl))
3574 if (DECL_RTL (decl) != 0
3575 && REG_P (DECL_RTL (decl))
3576 && regno_clobbered_at_setjmp (setjmp_crosses, REGNO (DECL_RTL (decl))))
3577 warning (OPT_Wclobbered,
3578 "argument %q+D might be clobbered by %<longjmp%> or %<vfork%>",
3579 decl);
3580 }
3581
3582 /* Generate warning messages for variables live across setjmp. */
3583
3584 void
3585 generate_setjmp_warnings (void)
3586 {
3587 bitmap setjmp_crosses = regstat_get_setjmp_crosses ();
3588
3589 if (n_basic_blocks == NUM_FIXED_BLOCKS
3590 || bitmap_empty_p (setjmp_crosses))
3591 return;
3592
3593 setjmp_vars_warning (setjmp_crosses, DECL_INITIAL (current_function_decl));
3594 setjmp_args_warning (setjmp_crosses);
3595 }
3596
3597 \f
3598 /* Identify BLOCKs referenced by more than one NOTE_INSN_BLOCK_{BEG,END},
3599 and create duplicate blocks. */
3600 /* ??? Need an option to either create block fragments or to create
3601 abstract origin duplicates of a source block. It really depends
3602 on what optimization has been performed. */
3603
3604 void
3605 reorder_blocks (void)
3606 {
3607 tree block = DECL_INITIAL (current_function_decl);
3608 VEC(tree,heap) *block_stack;
3609
3610 if (block == NULL_TREE)
3611 return;
3612
3613 block_stack = VEC_alloc (tree, heap, 10);
3614
3615 /* Reset the TREE_ASM_WRITTEN bit for all blocks. */
3616 clear_block_marks (block);
3617
3618 /* Prune the old trees away, so that they don't get in the way. */
3619 BLOCK_SUBBLOCKS (block) = NULL_TREE;
3620 BLOCK_CHAIN (block) = NULL_TREE;
3621
3622 /* Recreate the block tree from the note nesting. */
3623 reorder_blocks_1 (get_insns (), block, &block_stack);
3624 BLOCK_SUBBLOCKS (block) = blocks_nreverse (BLOCK_SUBBLOCKS (block));
3625
3626 VEC_free (tree, heap, block_stack);
3627 }
3628
3629 /* Helper function for reorder_blocks. Reset TREE_ASM_WRITTEN. */
3630
3631 void
3632 clear_block_marks (tree block)
3633 {
3634 while (block)
3635 {
3636 TREE_ASM_WRITTEN (block) = 0;
3637 clear_block_marks (BLOCK_SUBBLOCKS (block));
3638 block = BLOCK_CHAIN (block);
3639 }
3640 }
3641
3642 static void
3643 reorder_blocks_1 (rtx insns, tree current_block, VEC(tree,heap) **p_block_stack)
3644 {
3645 rtx insn;
3646
3647 for (insn = insns; insn; insn = NEXT_INSN (insn))
3648 {
3649 if (NOTE_P (insn))
3650 {
3651 if (NOTE_KIND (insn) == NOTE_INSN_BLOCK_BEG)
3652 {
3653 tree block = NOTE_BLOCK (insn);
3654 tree origin;
3655
3656 origin = (BLOCK_FRAGMENT_ORIGIN (block)
3657 ? BLOCK_FRAGMENT_ORIGIN (block)
3658 : block);
3659
3660 /* If we have seen this block before, that means it now
3661 spans multiple address regions. Create a new fragment. */
3662 if (TREE_ASM_WRITTEN (block))
3663 {
3664 tree new_block = copy_node (block);
3665
3666 BLOCK_FRAGMENT_ORIGIN (new_block) = origin;
3667 BLOCK_FRAGMENT_CHAIN (new_block)
3668 = BLOCK_FRAGMENT_CHAIN (origin);
3669 BLOCK_FRAGMENT_CHAIN (origin) = new_block;
3670
3671 NOTE_BLOCK (insn) = new_block;
3672 block = new_block;
3673 }
3674
3675 BLOCK_SUBBLOCKS (block) = 0;
3676 TREE_ASM_WRITTEN (block) = 1;
3677 /* When there's only one block for the entire function,
3678 current_block == block and we mustn't do this, it
3679 will cause infinite recursion. */
3680 if (block != current_block)
3681 {
3682 if (block != origin)
3683 gcc_assert (BLOCK_SUPERCONTEXT (origin) == current_block);
3684
3685 BLOCK_SUPERCONTEXT (block) = current_block;
3686 BLOCK_CHAIN (block) = BLOCK_SUBBLOCKS (current_block);
3687 BLOCK_SUBBLOCKS (current_block) = block;
3688 current_block = origin;
3689 }
3690 VEC_safe_push (tree, heap, *p_block_stack, block);
3691 }
3692 else if (NOTE_KIND (insn) == NOTE_INSN_BLOCK_END)
3693 {
3694 NOTE_BLOCK (insn) = VEC_pop (tree, *p_block_stack);
3695 BLOCK_SUBBLOCKS (current_block)
3696 = blocks_nreverse (BLOCK_SUBBLOCKS (current_block));
3697 current_block = BLOCK_SUPERCONTEXT (current_block);
3698 }
3699 }
3700 }
3701 }
3702
3703 /* Reverse the order of elements in the chain T of blocks,
3704 and return the new head of the chain (old last element). */
3705
3706 tree
3707 blocks_nreverse (tree t)
3708 {
3709 tree prev = 0, decl, next;
3710 for (decl = t; decl; decl = next)
3711 {
3712 next = BLOCK_CHAIN (decl);
3713 BLOCK_CHAIN (decl) = prev;
3714 prev = decl;
3715 }
3716 return prev;
3717 }
3718
3719 /* Count the subblocks of the list starting with BLOCK. If VECTOR is
3720 non-NULL, list them all into VECTOR, in a depth-first preorder
3721 traversal of the block tree. Also clear TREE_ASM_WRITTEN in all
3722 blocks. */
3723
3724 static int
3725 all_blocks (tree block, tree *vector)
3726 {
3727 int n_blocks = 0;
3728
3729 while (block)
3730 {
3731 TREE_ASM_WRITTEN (block) = 0;
3732
3733 /* Record this block. */
3734 if (vector)
3735 vector[n_blocks] = block;
3736
3737 ++n_blocks;
3738
3739 /* Record the subblocks, and their subblocks... */
3740 n_blocks += all_blocks (BLOCK_SUBBLOCKS (block),
3741 vector ? vector + n_blocks : 0);
3742 block = BLOCK_CHAIN (block);
3743 }
3744
3745 return n_blocks;
3746 }
3747
3748 /* Return a vector containing all the blocks rooted at BLOCK. The
3749 number of elements in the vector is stored in N_BLOCKS_P. The
3750 vector is dynamically allocated; it is the caller's responsibility
3751 to call `free' on the pointer returned. */
3752
3753 static tree *
3754 get_block_vector (tree block, int *n_blocks_p)
3755 {
3756 tree *block_vector;
3757
3758 *n_blocks_p = all_blocks (block, NULL);
3759 block_vector = XNEWVEC (tree, *n_blocks_p);
3760 all_blocks (block, block_vector);
3761
3762 return block_vector;
3763 }
3764
3765 static GTY(()) int next_block_index = 2;
3766
3767 /* Set BLOCK_NUMBER for all the blocks in FN. */
3768
3769 void
3770 number_blocks (tree fn)
3771 {
3772 int i;
3773 int n_blocks;
3774 tree *block_vector;
3775
3776 /* For SDB and XCOFF debugging output, we start numbering the blocks
3777 from 1 within each function, rather than keeping a running
3778 count. */
3779 #if defined (SDB_DEBUGGING_INFO) || defined (XCOFF_DEBUGGING_INFO)
3780 if (write_symbols == SDB_DEBUG || write_symbols == XCOFF_DEBUG)
3781 next_block_index = 1;
3782 #endif
3783
3784 block_vector = get_block_vector (DECL_INITIAL (fn), &n_blocks);
3785
3786 /* The top-level BLOCK isn't numbered at all. */
3787 for (i = 1; i < n_blocks; ++i)
3788 /* We number the blocks from two. */
3789 BLOCK_NUMBER (block_vector[i]) = next_block_index++;
3790
3791 free (block_vector);
3792
3793 return;
3794 }
3795
3796 /* If VAR is present in a subblock of BLOCK, return the subblock. */
3797
3798 tree
3799 debug_find_var_in_block_tree (tree var, tree block)
3800 {
3801 tree t;
3802
3803 for (t = BLOCK_VARS (block); t; t = TREE_CHAIN (t))
3804 if (t == var)
3805 return block;
3806
3807 for (t = BLOCK_SUBBLOCKS (block); t; t = TREE_CHAIN (t))
3808 {
3809 tree ret = debug_find_var_in_block_tree (var, t);
3810 if (ret)
3811 return ret;
3812 }
3813
3814 return NULL_TREE;
3815 }
3816 \f
3817 /* Keep track of whether we're in a dummy function context. If we are,
3818 we don't want to invoke the set_current_function hook, because we'll
3819 get into trouble if the hook calls target_reinit () recursively or
3820 when the initial initialization is not yet complete. */
3821
3822 static bool in_dummy_function;
3823
3824 /* Invoke the target hook when setting cfun. */
3825
3826 static void
3827 invoke_set_current_function_hook (tree fndecl)
3828 {
3829 if (!in_dummy_function)
3830 targetm.set_current_function (fndecl);
3831 }
3832
3833 /* cfun should never be set directly; use this function. */
3834
3835 void
3836 set_cfun (struct function *new_cfun)
3837 {
3838 if (cfun != new_cfun)
3839 {
3840 cfun = new_cfun;
3841 invoke_set_current_function_hook (new_cfun ? new_cfun->decl : NULL_TREE);
3842 }
3843 }
3844
3845 /* Keep track of the cfun stack. */
3846
3847 typedef struct function *function_p;
3848
3849 DEF_VEC_P(function_p);
3850 DEF_VEC_ALLOC_P(function_p,heap);
3851
3852 /* Initialized with NOGC, making this poisonous to the garbage collector. */
3853
3854 static VEC(function_p,heap) *cfun_stack;
3855
3856 /* We save the value of in_system_header here when pushing the first
3857 function on the cfun stack, and we restore it from here when
3858 popping the last function. */
3859
3860 static bool saved_in_system_header;
3861
3862 /* Push the current cfun onto the stack, and set cfun to new_cfun. */
3863
3864 void
3865 push_cfun (struct function *new_cfun)
3866 {
3867 if (cfun == NULL)
3868 saved_in_system_header = in_system_header;
3869 VEC_safe_push (function_p, heap, cfun_stack, cfun);
3870 if (new_cfun)
3871 in_system_header = DECL_IN_SYSTEM_HEADER (new_cfun->decl);
3872 set_cfun (new_cfun);
3873 }
3874
3875 /* Pop cfun from the stack. */
3876
3877 void
3878 pop_cfun (void)
3879 {
3880 struct function *new_cfun = VEC_pop (function_p, cfun_stack);
3881 in_system_header = ((new_cfun == NULL) ? saved_in_system_header
3882 : DECL_IN_SYSTEM_HEADER (new_cfun->decl));
3883 set_cfun (new_cfun);
3884 }
3885
3886 /* Return value of funcdef and increase it. */
3887 int
3888 get_next_funcdef_no (void)
3889 {
3890 return funcdef_no++;
3891 }
3892
3893 /* Allocate a function structure for FNDECL and set its contents
3894 to the defaults. Set cfun to the newly-allocated object.
3895 Some of the helper functions invoked during initialization assume
3896 that cfun has already been set. Therefore, assign the new object
3897 directly into cfun and invoke the back end hook explicitly at the
3898 very end, rather than initializing a temporary and calling set_cfun
3899 on it.
3900
3901 ABSTRACT_P is true if this is a function that will never be seen by
3902 the middle-end. Such functions are front-end concepts (like C++
3903 function templates) that do not correspond directly to functions
3904 placed in object files. */
3905
3906 void
3907 allocate_struct_function (tree fndecl, bool abstract_p)
3908 {
3909 tree result;
3910 tree fntype = fndecl ? TREE_TYPE (fndecl) : NULL_TREE;
3911
3912 cfun = ggc_alloc_cleared (sizeof (struct function));
3913
3914 cfun->stack_alignment_needed = STACK_BOUNDARY;
3915 cfun->preferred_stack_boundary = STACK_BOUNDARY;
3916
3917 current_function_funcdef_no = get_next_funcdef_no ();
3918
3919 cfun->function_frequency = FUNCTION_FREQUENCY_NORMAL;
3920
3921 init_eh_for_function ();
3922
3923 lang_hooks.function.init (cfun);
3924 if (init_machine_status)
3925 cfun->machine = (*init_machine_status) ();
3926
3927 if (fndecl != NULL)
3928 {
3929 DECL_STRUCT_FUNCTION (fndecl) = cfun;
3930 cfun->decl = fndecl;
3931
3932 result = DECL_RESULT (fndecl);
3933 if (!abstract_p && aggregate_value_p (result, fndecl))
3934 {
3935 #ifdef PCC_STATIC_STRUCT_RETURN
3936 current_function_returns_pcc_struct = 1;
3937 #endif
3938 current_function_returns_struct = 1;
3939 }
3940
3941 current_function_stdarg
3942 = (fntype
3943 && TYPE_ARG_TYPES (fntype) != 0
3944 && (TREE_VALUE (tree_last (TYPE_ARG_TYPES (fntype)))
3945 != void_type_node));
3946
3947 /* Assume all registers in stdarg functions need to be saved. */
3948 cfun->va_list_gpr_size = VA_LIST_MAX_GPR_SIZE;
3949 cfun->va_list_fpr_size = VA_LIST_MAX_FPR_SIZE;
3950 }
3951
3952 invoke_set_current_function_hook (fndecl);
3953 }
3954
3955 /* This is like allocate_struct_function, but pushes a new cfun for FNDECL
3956 instead of just setting it. */
3957
3958 void
3959 push_struct_function (tree fndecl)
3960 {
3961 if (cfun == NULL)
3962 saved_in_system_header = in_system_header;
3963 VEC_safe_push (function_p, heap, cfun_stack, cfun);
3964 if (fndecl)
3965 in_system_header = DECL_IN_SYSTEM_HEADER (fndecl);
3966 allocate_struct_function (fndecl, false);
3967 }
3968
3969 /* Reset cfun, and other non-struct-function variables to defaults as
3970 appropriate for emitting rtl at the start of a function. */
3971
3972 static void
3973 prepare_function_start (void)
3974 {
3975 init_emit ();
3976 init_varasm_status (cfun);
3977 init_expr ();
3978
3979 cse_not_expected = ! optimize;
3980
3981 /* Caller save not needed yet. */
3982 caller_save_needed = 0;
3983
3984 /* We haven't done register allocation yet. */
3985 reg_renumber = 0;
3986
3987 /* Indicate that we have not instantiated virtual registers yet. */
3988 virtuals_instantiated = 0;
3989
3990 /* Indicate that we want CONCATs now. */
3991 generating_concat_p = 1;
3992
3993 /* Indicate we have no need of a frame pointer yet. */
3994 frame_pointer_needed = 0;
3995 }
3996
3997 /* Initialize the rtl expansion mechanism so that we can do simple things
3998 like generate sequences. This is used to provide a context during global
3999 initialization of some passes. You must call expand_dummy_function_end
4000 to exit this context. */
4001
4002 void
4003 init_dummy_function_start (void)
4004 {
4005 gcc_assert (!in_dummy_function);
4006 in_dummy_function = true;
4007 push_struct_function (NULL_TREE);
4008 prepare_function_start ();
4009 }
4010
4011 /* Generate RTL for the start of the function SUBR (a FUNCTION_DECL tree node)
4012 and initialize static variables for generating RTL for the statements
4013 of the function. */
4014
4015 void
4016 init_function_start (tree subr)
4017 {
4018 if (subr && DECL_STRUCT_FUNCTION (subr))
4019 set_cfun (DECL_STRUCT_FUNCTION (subr));
4020 else
4021 allocate_struct_function (subr, false);
4022 prepare_function_start ();
4023
4024 /* Warn if this value is an aggregate type,
4025 regardless of which calling convention we are using for it. */
4026 if (AGGREGATE_TYPE_P (TREE_TYPE (DECL_RESULT (subr))))
4027 warning (OPT_Waggregate_return, "function returns an aggregate");
4028 }
4029
4030 /* Make sure all values used by the optimization passes have sane
4031 defaults. */
4032 unsigned int
4033 init_function_for_compilation (void)
4034 {
4035 reg_renumber = 0;
4036
4037 /* No prologue/epilogue insns yet. Make sure that these vectors are
4038 empty. */
4039 gcc_assert (VEC_length (int, prologue) == 0);
4040 gcc_assert (VEC_length (int, epilogue) == 0);
4041 gcc_assert (VEC_length (int, sibcall_epilogue) == 0);
4042 return 0;
4043 }
4044
4045 struct tree_opt_pass pass_init_function =
4046 {
4047 NULL, /* name */
4048 NULL, /* gate */
4049 init_function_for_compilation, /* execute */
4050 NULL, /* sub */
4051 NULL, /* next */
4052 0, /* static_pass_number */
4053 0, /* tv_id */
4054 0, /* properties_required */
4055 0, /* properties_provided */
4056 0, /* properties_destroyed */
4057 0, /* todo_flags_start */
4058 0, /* todo_flags_finish */
4059 0 /* letter */
4060 };
4061
4062
4063 void
4064 expand_main_function (void)
4065 {
4066 #if (defined(INVOKE__main) \
4067 || (!defined(HAS_INIT_SECTION) \
4068 && !defined(INIT_SECTION_ASM_OP) \
4069 && !defined(INIT_ARRAY_SECTION_ASM_OP)))
4070 emit_library_call (init_one_libfunc (NAME__MAIN), LCT_NORMAL, VOIDmode, 0);
4071 #endif
4072 }
4073 \f
4074 /* Expand code to initialize the stack_protect_guard. This is invoked at
4075 the beginning of a function to be protected. */
4076
4077 #ifndef HAVE_stack_protect_set
4078 # define HAVE_stack_protect_set 0
4079 # define gen_stack_protect_set(x,y) (gcc_unreachable (), NULL_RTX)
4080 #endif
4081
4082 void
4083 stack_protect_prologue (void)
4084 {
4085 tree guard_decl = targetm.stack_protect_guard ();
4086 rtx x, y;
4087
4088 /* Avoid expand_expr here, because we don't want guard_decl pulled
4089 into registers unless absolutely necessary. And we know that
4090 cfun->stack_protect_guard is a local stack slot, so this skips
4091 all the fluff. */
4092 x = validize_mem (DECL_RTL (cfun->stack_protect_guard));
4093 y = validize_mem (DECL_RTL (guard_decl));
4094
4095 /* Allow the target to copy from Y to X without leaking Y into a
4096 register. */
4097 if (HAVE_stack_protect_set)
4098 {
4099 rtx insn = gen_stack_protect_set (x, y);
4100 if (insn)
4101 {
4102 emit_insn (insn);
4103 return;
4104 }
4105 }
4106
4107 /* Otherwise do a straight move. */
4108 emit_move_insn (x, y);
4109 }
4110
4111 /* Expand code to verify the stack_protect_guard. This is invoked at
4112 the end of a function to be protected. */
4113
4114 #ifndef HAVE_stack_protect_test
4115 # define HAVE_stack_protect_test 0
4116 # define gen_stack_protect_test(x, y, z) (gcc_unreachable (), NULL_RTX)
4117 #endif
4118
4119 void
4120 stack_protect_epilogue (void)
4121 {
4122 tree guard_decl = targetm.stack_protect_guard ();
4123 rtx label = gen_label_rtx ();
4124 rtx x, y, tmp;
4125
4126 /* Avoid expand_expr here, because we don't want guard_decl pulled
4127 into registers unless absolutely necessary. And we know that
4128 cfun->stack_protect_guard is a local stack slot, so this skips
4129 all the fluff. */
4130 x = validize_mem (DECL_RTL (cfun->stack_protect_guard));
4131 y = validize_mem (DECL_RTL (guard_decl));
4132
4133 /* Allow the target to compare Y with X without leaking either into
4134 a register. */
4135 switch (HAVE_stack_protect_test != 0)
4136 {
4137 case 1:
4138 tmp = gen_stack_protect_test (x, y, label);
4139 if (tmp)
4140 {
4141 emit_insn (tmp);
4142 break;
4143 }
4144 /* FALLTHRU */
4145
4146 default:
4147 emit_cmp_and_jump_insns (x, y, EQ, NULL_RTX, ptr_mode, 1, label);
4148 break;
4149 }
4150
4151 /* The noreturn predictor has been moved to the tree level. The rtl-level
4152 predictors estimate this branch about 20%, which isn't enough to get
4153 things moved out of line. Since this is the only extant case of adding
4154 a noreturn function at the rtl level, it doesn't seem worth doing ought
4155 except adding the prediction by hand. */
4156 tmp = get_last_insn ();
4157 if (JUMP_P (tmp))
4158 predict_insn_def (tmp, PRED_NORETURN, TAKEN);
4159
4160 expand_expr_stmt (targetm.stack_protect_fail ());
4161 emit_label (label);
4162 }
4163 \f
4164 /* Start the RTL for a new function, and set variables used for
4165 emitting RTL.
4166 SUBR is the FUNCTION_DECL node.
4167 PARMS_HAVE_CLEANUPS is nonzero if there are cleanups associated with
4168 the function's parameters, which must be run at any return statement. */
4169
4170 void
4171 expand_function_start (tree subr)
4172 {
4173 /* Make sure volatile mem refs aren't considered
4174 valid operands of arithmetic insns. */
4175 init_recog_no_volatile ();
4176
4177 current_function_profile
4178 = (profile_flag
4179 && ! DECL_NO_INSTRUMENT_FUNCTION_ENTRY_EXIT (subr));
4180
4181 current_function_limit_stack
4182 = (stack_limit_rtx != NULL_RTX && ! DECL_NO_LIMIT_STACK (subr));
4183
4184 /* Make the label for return statements to jump to. Do not special
4185 case machines with special return instructions -- they will be
4186 handled later during jump, ifcvt, or epilogue creation. */
4187 return_label = gen_label_rtx ();
4188
4189 /* Initialize rtx used to return the value. */
4190 /* Do this before assign_parms so that we copy the struct value address
4191 before any library calls that assign parms might generate. */
4192
4193 /* Decide whether to return the value in memory or in a register. */
4194 if (aggregate_value_p (DECL_RESULT (subr), subr))
4195 {
4196 /* Returning something that won't go in a register. */
4197 rtx value_address = 0;
4198
4199 #ifdef PCC_STATIC_STRUCT_RETURN
4200 if (current_function_returns_pcc_struct)
4201 {
4202 int size = int_size_in_bytes (TREE_TYPE (DECL_RESULT (subr)));
4203 value_address = assemble_static_space (size);
4204 }
4205 else
4206 #endif
4207 {
4208 rtx sv = targetm.calls.struct_value_rtx (TREE_TYPE (subr), 2);
4209 /* Expect to be passed the address of a place to store the value.
4210 If it is passed as an argument, assign_parms will take care of
4211 it. */
4212 if (sv)
4213 {
4214 value_address = gen_reg_rtx (Pmode);
4215 emit_move_insn (value_address, sv);
4216 }
4217 }
4218 if (value_address)
4219 {
4220 rtx x = value_address;
4221 if (!DECL_BY_REFERENCE (DECL_RESULT (subr)))
4222 {
4223 x = gen_rtx_MEM (DECL_MODE (DECL_RESULT (subr)), x);
4224 set_mem_attributes (x, DECL_RESULT (subr), 1);
4225 }
4226 SET_DECL_RTL (DECL_RESULT (subr), x);
4227 }
4228 }
4229 else if (DECL_MODE (DECL_RESULT (subr)) == VOIDmode)
4230 /* If return mode is void, this decl rtl should not be used. */
4231 SET_DECL_RTL (DECL_RESULT (subr), NULL_RTX);
4232 else
4233 {
4234 /* Compute the return values into a pseudo reg, which we will copy
4235 into the true return register after the cleanups are done. */
4236 tree return_type = TREE_TYPE (DECL_RESULT (subr));
4237 if (TYPE_MODE (return_type) != BLKmode
4238 && targetm.calls.return_in_msb (return_type))
4239 /* expand_function_end will insert the appropriate padding in
4240 this case. Use the return value's natural (unpadded) mode
4241 within the function proper. */
4242 SET_DECL_RTL (DECL_RESULT (subr),
4243 gen_reg_rtx (TYPE_MODE (return_type)));
4244 else
4245 {
4246 /* In order to figure out what mode to use for the pseudo, we
4247 figure out what the mode of the eventual return register will
4248 actually be, and use that. */
4249 rtx hard_reg = hard_function_value (return_type, subr, 0, 1);
4250
4251 /* Structures that are returned in registers are not
4252 aggregate_value_p, so we may see a PARALLEL or a REG. */
4253 if (REG_P (hard_reg))
4254 SET_DECL_RTL (DECL_RESULT (subr),
4255 gen_reg_rtx (GET_MODE (hard_reg)));
4256 else
4257 {
4258 gcc_assert (GET_CODE (hard_reg) == PARALLEL);
4259 SET_DECL_RTL (DECL_RESULT (subr), gen_group_rtx (hard_reg));
4260 }
4261 }
4262
4263 /* Set DECL_REGISTER flag so that expand_function_end will copy the
4264 result to the real return register(s). */
4265 DECL_REGISTER (DECL_RESULT (subr)) = 1;
4266 }
4267
4268 /* Initialize rtx for parameters and local variables.
4269 In some cases this requires emitting insns. */
4270 assign_parms (subr);
4271
4272 /* If function gets a static chain arg, store it. */
4273 if (cfun->static_chain_decl)
4274 {
4275 tree parm = cfun->static_chain_decl;
4276 rtx local = gen_reg_rtx (Pmode);
4277
4278 set_decl_incoming_rtl (parm, static_chain_incoming_rtx, false);
4279 SET_DECL_RTL (parm, local);
4280 mark_reg_pointer (local, TYPE_ALIGN (TREE_TYPE (TREE_TYPE (parm))));
4281
4282 emit_move_insn (local, static_chain_incoming_rtx);
4283 }
4284
4285 /* If the function receives a non-local goto, then store the
4286 bits we need to restore the frame pointer. */
4287 if (cfun->nonlocal_goto_save_area)
4288 {
4289 tree t_save;
4290 rtx r_save;
4291
4292 /* ??? We need to do this save early. Unfortunately here is
4293 before the frame variable gets declared. Help out... */
4294 expand_var (TREE_OPERAND (cfun->nonlocal_goto_save_area, 0));
4295
4296 t_save = build4 (ARRAY_REF, ptr_type_node,
4297 cfun->nonlocal_goto_save_area,
4298 integer_zero_node, NULL_TREE, NULL_TREE);
4299 r_save = expand_expr (t_save, NULL_RTX, VOIDmode, EXPAND_WRITE);
4300 r_save = convert_memory_address (Pmode, r_save);
4301
4302 emit_move_insn (r_save, virtual_stack_vars_rtx);
4303 update_nonlocal_goto_save_area ();
4304 }
4305
4306 /* The following was moved from init_function_start.
4307 The move is supposed to make sdb output more accurate. */
4308 /* Indicate the beginning of the function body,
4309 as opposed to parm setup. */
4310 emit_note (NOTE_INSN_FUNCTION_BEG);
4311
4312 gcc_assert (NOTE_P (get_last_insn ()));
4313
4314 parm_birth_insn = get_last_insn ();
4315
4316 if (current_function_profile)
4317 {
4318 #ifdef PROFILE_HOOK
4319 PROFILE_HOOK (current_function_funcdef_no);
4320 #endif
4321 }
4322
4323 /* After the display initializations is where the stack checking
4324 probe should go. */
4325 if(flag_stack_check)
4326 stack_check_probe_note = emit_note (NOTE_INSN_DELETED);
4327
4328 /* Make sure there is a line number after the function entry setup code. */
4329 force_next_line_note ();
4330 }
4331 \f
4332 /* Undo the effects of init_dummy_function_start. */
4333 void
4334 expand_dummy_function_end (void)
4335 {
4336 gcc_assert (in_dummy_function);
4337
4338 /* End any sequences that failed to be closed due to syntax errors. */
4339 while (in_sequence_p ())
4340 end_sequence ();
4341
4342 /* Outside function body, can't compute type's actual size
4343 until next function's body starts. */
4344
4345 free_after_parsing (cfun);
4346 free_after_compilation (cfun);
4347 pop_cfun ();
4348 in_dummy_function = false;
4349 }
4350
4351 /* Call DOIT for each hard register used as a return value from
4352 the current function. */
4353
4354 void
4355 diddle_return_value (void (*doit) (rtx, void *), void *arg)
4356 {
4357 rtx outgoing = current_function_return_rtx;
4358
4359 if (! outgoing)
4360 return;
4361
4362 if (REG_P (outgoing))
4363 (*doit) (outgoing, arg);
4364 else if (GET_CODE (outgoing) == PARALLEL)
4365 {
4366 int i;
4367
4368 for (i = 0; i < XVECLEN (outgoing, 0); i++)
4369 {
4370 rtx x = XEXP (XVECEXP (outgoing, 0, i), 0);
4371
4372 if (REG_P (x) && REGNO (x) < FIRST_PSEUDO_REGISTER)
4373 (*doit) (x, arg);
4374 }
4375 }
4376 }
4377
4378 static void
4379 do_clobber_return_reg (rtx reg, void *arg ATTRIBUTE_UNUSED)
4380 {
4381 emit_insn (gen_rtx_CLOBBER (VOIDmode, reg));
4382 }
4383
4384 void
4385 clobber_return_register (void)
4386 {
4387 diddle_return_value (do_clobber_return_reg, NULL);
4388
4389 /* In case we do use pseudo to return value, clobber it too. */
4390 if (DECL_RTL_SET_P (DECL_RESULT (current_function_decl)))
4391 {
4392 tree decl_result = DECL_RESULT (current_function_decl);
4393 rtx decl_rtl = DECL_RTL (decl_result);
4394 if (REG_P (decl_rtl) && REGNO (decl_rtl) >= FIRST_PSEUDO_REGISTER)
4395 {
4396 do_clobber_return_reg (decl_rtl, NULL);
4397 }
4398 }
4399 }
4400
4401 static void
4402 do_use_return_reg (rtx reg, void *arg ATTRIBUTE_UNUSED)
4403 {
4404 emit_insn (gen_rtx_USE (VOIDmode, reg));
4405 }
4406
4407 static void
4408 use_return_register (void)
4409 {
4410 diddle_return_value (do_use_return_reg, NULL);
4411 }
4412
4413 /* Possibly warn about unused parameters. */
4414 void
4415 do_warn_unused_parameter (tree fn)
4416 {
4417 tree decl;
4418
4419 for (decl = DECL_ARGUMENTS (fn);
4420 decl; decl = TREE_CHAIN (decl))
4421 if (!TREE_USED (decl) && TREE_CODE (decl) == PARM_DECL
4422 && DECL_NAME (decl) && !DECL_ARTIFICIAL (decl)
4423 && !TREE_NO_WARNING (decl))
4424 warning (OPT_Wunused_parameter, "unused parameter %q+D", decl);
4425 }
4426
4427 static GTY(()) rtx initial_trampoline;
4428
4429 /* Generate RTL for the end of the current function. */
4430
4431 void
4432 expand_function_end (void)
4433 {
4434 rtx clobber_after;
4435
4436 /* If arg_pointer_save_area was referenced only from a nested
4437 function, we will not have initialized it yet. Do that now. */
4438 if (arg_pointer_save_area && ! cfun->arg_pointer_save_area_init)
4439 get_arg_pointer_save_area (cfun);
4440
4441 /* If we are doing stack checking and this function makes calls,
4442 do a stack probe at the start of the function to ensure we have enough
4443 space for another stack frame. */
4444 if (flag_stack_check && ! STACK_CHECK_BUILTIN)
4445 {
4446 rtx insn, seq;
4447
4448 for (insn = get_insns (); insn; insn = NEXT_INSN (insn))
4449 if (CALL_P (insn))
4450 {
4451 start_sequence ();
4452 probe_stack_range (STACK_CHECK_PROTECT,
4453 GEN_INT (STACK_CHECK_MAX_FRAME_SIZE));
4454 seq = get_insns ();
4455 end_sequence ();
4456 emit_insn_before (seq, stack_check_probe_note);
4457 break;
4458 }
4459 }
4460
4461 /* End any sequences that failed to be closed due to syntax errors. */
4462 while (in_sequence_p ())
4463 end_sequence ();
4464
4465 clear_pending_stack_adjust ();
4466 do_pending_stack_adjust ();
4467
4468 /* Output a linenumber for the end of the function.
4469 SDB depends on this. */
4470 force_next_line_note ();
4471 set_curr_insn_source_location (input_location);
4472
4473 /* Before the return label (if any), clobber the return
4474 registers so that they are not propagated live to the rest of
4475 the function. This can only happen with functions that drop
4476 through; if there had been a return statement, there would
4477 have either been a return rtx, or a jump to the return label.
4478
4479 We delay actual code generation after the current_function_value_rtx
4480 is computed. */
4481 clobber_after = get_last_insn ();
4482
4483 /* Output the label for the actual return from the function. */
4484 emit_label (return_label);
4485
4486 if (USING_SJLJ_EXCEPTIONS)
4487 {
4488 /* Let except.c know where it should emit the call to unregister
4489 the function context for sjlj exceptions. */
4490 if (flag_exceptions)
4491 sjlj_emit_function_exit_after (get_last_insn ());
4492 }
4493 else
4494 {
4495 /* We want to ensure that instructions that may trap are not
4496 moved into the epilogue by scheduling, because we don't
4497 always emit unwind information for the epilogue. */
4498 if (flag_non_call_exceptions)
4499 emit_insn (gen_blockage ());
4500 }
4501
4502 /* If this is an implementation of throw, do what's necessary to
4503 communicate between __builtin_eh_return and the epilogue. */
4504 expand_eh_return ();
4505
4506 /* If scalar return value was computed in a pseudo-reg, or was a named
4507 return value that got dumped to the stack, copy that to the hard
4508 return register. */
4509 if (DECL_RTL_SET_P (DECL_RESULT (current_function_decl)))
4510 {
4511 tree decl_result = DECL_RESULT (current_function_decl);
4512 rtx decl_rtl = DECL_RTL (decl_result);
4513
4514 if (REG_P (decl_rtl)
4515 ? REGNO (decl_rtl) >= FIRST_PSEUDO_REGISTER
4516 : DECL_REGISTER (decl_result))
4517 {
4518 rtx real_decl_rtl = current_function_return_rtx;
4519
4520 /* This should be set in assign_parms. */
4521 gcc_assert (REG_FUNCTION_VALUE_P (real_decl_rtl));
4522
4523 /* If this is a BLKmode structure being returned in registers,
4524 then use the mode computed in expand_return. Note that if
4525 decl_rtl is memory, then its mode may have been changed,
4526 but that current_function_return_rtx has not. */
4527 if (GET_MODE (real_decl_rtl) == BLKmode)
4528 PUT_MODE (real_decl_rtl, GET_MODE (decl_rtl));
4529
4530 /* If a non-BLKmode return value should be padded at the least
4531 significant end of the register, shift it left by the appropriate
4532 amount. BLKmode results are handled using the group load/store
4533 machinery. */
4534 if (TYPE_MODE (TREE_TYPE (decl_result)) != BLKmode
4535 && targetm.calls.return_in_msb (TREE_TYPE (decl_result)))
4536 {
4537 emit_move_insn (gen_rtx_REG (GET_MODE (decl_rtl),
4538 REGNO (real_decl_rtl)),
4539 decl_rtl);
4540 shift_return_value (GET_MODE (decl_rtl), true, real_decl_rtl);
4541 }
4542 /* If a named return value dumped decl_return to memory, then
4543 we may need to re-do the PROMOTE_MODE signed/unsigned
4544 extension. */
4545 else if (GET_MODE (real_decl_rtl) != GET_MODE (decl_rtl))
4546 {
4547 int unsignedp = TYPE_UNSIGNED (TREE_TYPE (decl_result));
4548
4549 if (targetm.calls.promote_function_return (TREE_TYPE (current_function_decl)))
4550 promote_mode (TREE_TYPE (decl_result), GET_MODE (decl_rtl),
4551 &unsignedp, 1);
4552
4553 convert_move (real_decl_rtl, decl_rtl, unsignedp);
4554 }
4555 else if (GET_CODE (real_decl_rtl) == PARALLEL)
4556 {
4557 /* If expand_function_start has created a PARALLEL for decl_rtl,
4558 move the result to the real return registers. Otherwise, do
4559 a group load from decl_rtl for a named return. */
4560 if (GET_CODE (decl_rtl) == PARALLEL)
4561 emit_group_move (real_decl_rtl, decl_rtl);
4562 else
4563 emit_group_load (real_decl_rtl, decl_rtl,
4564 TREE_TYPE (decl_result),
4565 int_size_in_bytes (TREE_TYPE (decl_result)));
4566 }
4567 /* In the case of complex integer modes smaller than a word, we'll
4568 need to generate some non-trivial bitfield insertions. Do that
4569 on a pseudo and not the hard register. */
4570 else if (GET_CODE (decl_rtl) == CONCAT
4571 && GET_MODE_CLASS (GET_MODE (decl_rtl)) == MODE_COMPLEX_INT
4572 && GET_MODE_BITSIZE (GET_MODE (decl_rtl)) <= BITS_PER_WORD)
4573 {
4574 int old_generating_concat_p;
4575 rtx tmp;
4576
4577 old_generating_concat_p = generating_concat_p;
4578 generating_concat_p = 0;
4579 tmp = gen_reg_rtx (GET_MODE (decl_rtl));
4580 generating_concat_p = old_generating_concat_p;
4581
4582 emit_move_insn (tmp, decl_rtl);
4583 emit_move_insn (real_decl_rtl, tmp);
4584 }
4585 else
4586 emit_move_insn (real_decl_rtl, decl_rtl);
4587 }
4588 }
4589
4590 /* If returning a structure, arrange to return the address of the value
4591 in a place where debuggers expect to find it.
4592
4593 If returning a structure PCC style,
4594 the caller also depends on this value.
4595 And current_function_returns_pcc_struct is not necessarily set. */
4596 if (current_function_returns_struct
4597 || current_function_returns_pcc_struct)
4598 {
4599 rtx value_address = DECL_RTL (DECL_RESULT (current_function_decl));
4600 tree type = TREE_TYPE (DECL_RESULT (current_function_decl));
4601 rtx outgoing;
4602
4603 if (DECL_BY_REFERENCE (DECL_RESULT (current_function_decl)))
4604 type = TREE_TYPE (type);
4605 else
4606 value_address = XEXP (value_address, 0);
4607
4608 outgoing = targetm.calls.function_value (build_pointer_type (type),
4609 current_function_decl, true);
4610
4611 /* Mark this as a function return value so integrate will delete the
4612 assignment and USE below when inlining this function. */
4613 REG_FUNCTION_VALUE_P (outgoing) = 1;
4614
4615 /* The address may be ptr_mode and OUTGOING may be Pmode. */
4616 value_address = convert_memory_address (GET_MODE (outgoing),
4617 value_address);
4618
4619 emit_move_insn (outgoing, value_address);
4620
4621 /* Show return register used to hold result (in this case the address
4622 of the result. */
4623 current_function_return_rtx = outgoing;
4624 }
4625
4626 /* Emit the actual code to clobber return register. */
4627 {
4628 rtx seq;
4629
4630 start_sequence ();
4631 clobber_return_register ();
4632 expand_naked_return ();
4633 seq = get_insns ();
4634 end_sequence ();
4635
4636 emit_insn_after (seq, clobber_after);
4637 }
4638
4639 /* Output the label for the naked return from the function. */
4640 emit_label (naked_return_label);
4641
4642 /* @@@ This is a kludge. We want to ensure that instructions that
4643 may trap are not moved into the epilogue by scheduling, because
4644 we don't always emit unwind information for the epilogue. */
4645 if (! USING_SJLJ_EXCEPTIONS && flag_non_call_exceptions)
4646 emit_insn (gen_blockage ());
4647
4648 /* If stack protection is enabled for this function, check the guard. */
4649 if (cfun->stack_protect_guard)
4650 stack_protect_epilogue ();
4651
4652 /* If we had calls to alloca, and this machine needs
4653 an accurate stack pointer to exit the function,
4654 insert some code to save and restore the stack pointer. */
4655 if (! EXIT_IGNORE_STACK
4656 && current_function_calls_alloca)
4657 {
4658 rtx tem = 0;
4659
4660 emit_stack_save (SAVE_FUNCTION, &tem, parm_birth_insn);
4661 emit_stack_restore (SAVE_FUNCTION, tem, NULL_RTX);
4662 }
4663
4664 /* ??? This should no longer be necessary since stupid is no longer with
4665 us, but there are some parts of the compiler (eg reload_combine, and
4666 sh mach_dep_reorg) that still try and compute their own lifetime info
4667 instead of using the general framework. */
4668 use_return_register ();
4669 }
4670
4671 rtx
4672 get_arg_pointer_save_area (struct function *f)
4673 {
4674 rtx ret = f->x_arg_pointer_save_area;
4675
4676 if (! ret)
4677 {
4678 ret = assign_stack_local_1 (Pmode, GET_MODE_SIZE (Pmode), 0, f);
4679 f->x_arg_pointer_save_area = ret;
4680 }
4681
4682 if (f == cfun && ! f->arg_pointer_save_area_init)
4683 {
4684 rtx seq;
4685
4686 /* Save the arg pointer at the beginning of the function. The
4687 generated stack slot may not be a valid memory address, so we
4688 have to check it and fix it if necessary. */
4689 start_sequence ();
4690 emit_move_insn (validize_mem (ret), virtual_incoming_args_rtx);
4691 seq = get_insns ();
4692 end_sequence ();
4693
4694 push_topmost_sequence ();
4695 emit_insn_after (seq, entry_of_function ());
4696 pop_topmost_sequence ();
4697 }
4698
4699 return ret;
4700 }
4701 \f
4702 /* Extend a vector that records the INSN_UIDs of INSNS
4703 (a list of one or more insns). */
4704
4705 static void
4706 record_insns (rtx insns, VEC(int,heap) **vecp)
4707 {
4708 rtx tmp;
4709
4710 for (tmp = insns; tmp != NULL_RTX; tmp = NEXT_INSN (tmp))
4711 VEC_safe_push (int, heap, *vecp, INSN_UID (tmp));
4712 }
4713
4714 /* Set the locator of the insn chain starting at INSN to LOC. */
4715 static void
4716 set_insn_locators (rtx insn, int loc)
4717 {
4718 while (insn != NULL_RTX)
4719 {
4720 if (INSN_P (insn))
4721 INSN_LOCATOR (insn) = loc;
4722 insn = NEXT_INSN (insn);
4723 }
4724 }
4725
4726 /* Determine how many INSN_UIDs in VEC are part of INSN. Because we can
4727 be running after reorg, SEQUENCE rtl is possible. */
4728
4729 static int
4730 contains (const_rtx insn, VEC(int,heap) **vec)
4731 {
4732 int i, j;
4733
4734 if (NONJUMP_INSN_P (insn)
4735 && GET_CODE (PATTERN (insn)) == SEQUENCE)
4736 {
4737 int count = 0;
4738 for (i = XVECLEN (PATTERN (insn), 0) - 1; i >= 0; i--)
4739 for (j = VEC_length (int, *vec) - 1; j >= 0; --j)
4740 if (INSN_UID (XVECEXP (PATTERN (insn), 0, i))
4741 == VEC_index (int, *vec, j))
4742 count++;
4743 return count;
4744 }
4745 else
4746 {
4747 for (j = VEC_length (int, *vec) - 1; j >= 0; --j)
4748 if (INSN_UID (insn) == VEC_index (int, *vec, j))
4749 return 1;
4750 }
4751 return 0;
4752 }
4753
4754 int
4755 prologue_epilogue_contains (const_rtx insn)
4756 {
4757 if (contains (insn, &prologue))
4758 return 1;
4759 if (contains (insn, &epilogue))
4760 return 1;
4761 return 0;
4762 }
4763
4764 int
4765 sibcall_epilogue_contains (const_rtx insn)
4766 {
4767 if (sibcall_epilogue)
4768 return contains (insn, &sibcall_epilogue);
4769 return 0;
4770 }
4771
4772 #ifdef HAVE_return
4773 /* Insert gen_return at the end of block BB. This also means updating
4774 block_for_insn appropriately. */
4775
4776 static void
4777 emit_return_into_block (basic_block bb)
4778 {
4779 emit_jump_insn_after (gen_return (), BB_END (bb));
4780 }
4781 #endif /* HAVE_return */
4782
4783 #if defined(HAVE_epilogue) && defined(INCOMING_RETURN_ADDR_RTX)
4784
4785 /* These functions convert the epilogue into a variant that does not
4786 modify the stack pointer. This is used in cases where a function
4787 returns an object whose size is not known until it is computed.
4788 The called function leaves the object on the stack, leaves the
4789 stack depressed, and returns a pointer to the object.
4790
4791 What we need to do is track all modifications and references to the
4792 stack pointer, deleting the modifications and changing the
4793 references to point to the location the stack pointer would have
4794 pointed to had the modifications taken place.
4795
4796 These functions need to be portable so we need to make as few
4797 assumptions about the epilogue as we can. However, the epilogue
4798 basically contains three things: instructions to reset the stack
4799 pointer, instructions to reload registers, possibly including the
4800 frame pointer, and an instruction to return to the caller.
4801
4802 We must be sure of what a relevant epilogue insn is doing. We also
4803 make no attempt to validate the insns we make since if they are
4804 invalid, we probably can't do anything valid. The intent is that
4805 these routines get "smarter" as more and more machines start to use
4806 them and they try operating on different epilogues.
4807
4808 We use the following structure to track what the part of the
4809 epilogue that we've already processed has done. We keep two copies
4810 of the SP equivalence, one for use during the insn we are
4811 processing and one for use in the next insn. The difference is
4812 because one part of a PARALLEL may adjust SP and the other may use
4813 it. */
4814
4815 struct epi_info
4816 {
4817 rtx sp_equiv_reg; /* REG that SP is set from, perhaps SP. */
4818 HOST_WIDE_INT sp_offset; /* Offset from SP_EQUIV_REG of present SP. */
4819 rtx new_sp_equiv_reg; /* REG to be used at end of insn. */
4820 HOST_WIDE_INT new_sp_offset; /* Offset to be used at end of insn. */
4821 rtx equiv_reg_src; /* If nonzero, the value that SP_EQUIV_REG
4822 should be set to once we no longer need
4823 its value. */
4824 rtx const_equiv[FIRST_PSEUDO_REGISTER]; /* Any known constant equivalences
4825 for registers. */
4826 };
4827
4828 static void handle_epilogue_set (rtx, struct epi_info *);
4829 static void update_epilogue_consts (rtx, const_rtx, void *);
4830 static void emit_equiv_load (struct epi_info *);
4831
4832 /* Modify INSN, a list of one or more insns that is part of the epilogue, to
4833 no modifications to the stack pointer. Return the new list of insns. */
4834
4835 static rtx
4836 keep_stack_depressed (rtx insns)
4837 {
4838 int j;
4839 struct epi_info info;
4840 rtx insn, next;
4841
4842 /* If the epilogue is just a single instruction, it must be OK as is. */
4843 if (NEXT_INSN (insns) == NULL_RTX)
4844 return insns;
4845
4846 /* Otherwise, start a sequence, initialize the information we have, and
4847 process all the insns we were given. */
4848 start_sequence ();
4849
4850 info.sp_equiv_reg = stack_pointer_rtx;
4851 info.sp_offset = 0;
4852 info.equiv_reg_src = 0;
4853
4854 for (j = 0; j < FIRST_PSEUDO_REGISTER; j++)
4855 info.const_equiv[j] = 0;
4856
4857 insn = insns;
4858 next = NULL_RTX;
4859 while (insn != NULL_RTX)
4860 {
4861 next = NEXT_INSN (insn);
4862
4863 if (!INSN_P (insn))
4864 {
4865 add_insn (insn);
4866 insn = next;
4867 continue;
4868 }
4869
4870 /* If this insn references the register that SP is equivalent to and
4871 we have a pending load to that register, we must force out the load
4872 first and then indicate we no longer know what SP's equivalent is. */
4873 if (info.equiv_reg_src != 0
4874 && reg_referenced_p (info.sp_equiv_reg, PATTERN (insn)))
4875 {
4876 emit_equiv_load (&info);
4877 info.sp_equiv_reg = 0;
4878 }
4879
4880 info.new_sp_equiv_reg = info.sp_equiv_reg;
4881 info.new_sp_offset = info.sp_offset;
4882
4883 /* If this is a (RETURN) and the return address is on the stack,
4884 update the address and change to an indirect jump. */
4885 if (GET_CODE (PATTERN (insn)) == RETURN
4886 || (GET_CODE (PATTERN (insn)) == PARALLEL
4887 && GET_CODE (XVECEXP (PATTERN (insn), 0, 0)) == RETURN))
4888 {
4889 rtx retaddr = INCOMING_RETURN_ADDR_RTX;
4890 rtx base = 0;
4891 HOST_WIDE_INT offset = 0;
4892 rtx jump_insn, jump_set;
4893
4894 /* If the return address is in a register, we can emit the insn
4895 unchanged. Otherwise, it must be a MEM and we see what the
4896 base register and offset are. In any case, we have to emit any
4897 pending load to the equivalent reg of SP, if any. */
4898 if (REG_P (retaddr))
4899 {
4900 emit_equiv_load (&info);
4901 add_insn (insn);
4902 insn = next;
4903 continue;
4904 }
4905 else
4906 {
4907 rtx ret_ptr;
4908 gcc_assert (MEM_P (retaddr));
4909
4910 ret_ptr = XEXP (retaddr, 0);
4911
4912 if (REG_P (ret_ptr))
4913 {
4914 base = gen_rtx_REG (Pmode, REGNO (ret_ptr));
4915 offset = 0;
4916 }
4917 else
4918 {
4919 gcc_assert (GET_CODE (ret_ptr) == PLUS
4920 && REG_P (XEXP (ret_ptr, 0))
4921 && GET_CODE (XEXP (ret_ptr, 1)) == CONST_INT);
4922 base = gen_rtx_REG (Pmode, REGNO (XEXP (ret_ptr, 0)));
4923 offset = INTVAL (XEXP (ret_ptr, 1));
4924 }
4925 }
4926
4927 /* If the base of the location containing the return pointer
4928 is SP, we must update it with the replacement address. Otherwise,
4929 just build the necessary MEM. */
4930 retaddr = plus_constant (base, offset);
4931 if (base == stack_pointer_rtx)
4932 retaddr = simplify_replace_rtx (retaddr, stack_pointer_rtx,
4933 plus_constant (info.sp_equiv_reg,
4934 info.sp_offset));
4935
4936 retaddr = gen_rtx_MEM (Pmode, retaddr);
4937 MEM_NOTRAP_P (retaddr) = 1;
4938
4939 /* If there is a pending load to the equivalent register for SP
4940 and we reference that register, we must load our address into
4941 a scratch register and then do that load. */
4942 if (info.equiv_reg_src
4943 && reg_overlap_mentioned_p (info.equiv_reg_src, retaddr))
4944 {
4945 unsigned int regno;
4946 rtx reg;
4947
4948 for (regno = 0; regno < FIRST_PSEUDO_REGISTER; regno++)
4949 if (HARD_REGNO_MODE_OK (regno, Pmode)
4950 && !fixed_regs[regno]
4951 && TEST_HARD_REG_BIT (regs_invalidated_by_call, regno)
4952 && !REGNO_REG_SET_P
4953 (DF_LR_IN (EXIT_BLOCK_PTR), regno)
4954 && !refers_to_regno_p (regno,
4955 end_hard_regno (Pmode, regno),
4956 info.equiv_reg_src, NULL)
4957 && info.const_equiv[regno] == 0)
4958 break;
4959
4960 gcc_assert (regno < FIRST_PSEUDO_REGISTER);
4961
4962 reg = gen_rtx_REG (Pmode, regno);
4963 emit_move_insn (reg, retaddr);
4964 retaddr = reg;
4965 }
4966
4967 emit_equiv_load (&info);
4968 jump_insn = emit_jump_insn (gen_indirect_jump (retaddr));
4969
4970 /* Show the SET in the above insn is a RETURN. */
4971 jump_set = single_set (jump_insn);
4972 gcc_assert (jump_set);
4973 SET_IS_RETURN_P (jump_set) = 1;
4974 }
4975
4976 /* If SP is not mentioned in the pattern and its equivalent register, if
4977 any, is not modified, just emit it. Otherwise, if neither is set,
4978 replace the reference to SP and emit the insn. If none of those are
4979 true, handle each SET individually. */
4980 else if (!reg_mentioned_p (stack_pointer_rtx, PATTERN (insn))
4981 && (info.sp_equiv_reg == stack_pointer_rtx
4982 || !reg_set_p (info.sp_equiv_reg, insn)))
4983 add_insn (insn);
4984 else if (! reg_set_p (stack_pointer_rtx, insn)
4985 && (info.sp_equiv_reg == stack_pointer_rtx
4986 || !reg_set_p (info.sp_equiv_reg, insn)))
4987 {
4988 int changed;
4989
4990 changed = validate_replace_rtx (stack_pointer_rtx,
4991 plus_constant (info.sp_equiv_reg,
4992 info.sp_offset),
4993 insn);
4994 gcc_assert (changed);
4995
4996 add_insn (insn);
4997 }
4998 else if (GET_CODE (PATTERN (insn)) == SET)
4999 handle_epilogue_set (PATTERN (insn), &info);
5000 else if (GET_CODE (PATTERN (insn)) == PARALLEL)
5001 {
5002 for (j = 0; j < XVECLEN (PATTERN (insn), 0); j++)
5003 if (GET_CODE (XVECEXP (PATTERN (insn), 0, j)) == SET)
5004 handle_epilogue_set (XVECEXP (PATTERN (insn), 0, j), &info);
5005 }
5006 else
5007 add_insn (insn);
5008
5009 info.sp_equiv_reg = info.new_sp_equiv_reg;
5010 info.sp_offset = info.new_sp_offset;
5011
5012 /* Now update any constants this insn sets. */
5013 note_stores (PATTERN (insn), update_epilogue_consts, &info);
5014 insn = next;
5015 }
5016
5017 insns = get_insns ();
5018 end_sequence ();
5019 return insns;
5020 }
5021
5022 /* SET is a SET from an insn in the epilogue. P is a pointer to the epi_info
5023 structure that contains information about what we've seen so far. We
5024 process this SET by either updating that data or by emitting one or
5025 more insns. */
5026
5027 static void
5028 handle_epilogue_set (rtx set, struct epi_info *p)
5029 {
5030 /* First handle the case where we are setting SP. Record what it is being
5031 set from, which we must be able to determine */
5032 if (reg_set_p (stack_pointer_rtx, set))
5033 {
5034 gcc_assert (SET_DEST (set) == stack_pointer_rtx);
5035
5036 if (GET_CODE (SET_SRC (set)) == PLUS)
5037 {
5038 p->new_sp_equiv_reg = XEXP (SET_SRC (set), 0);
5039 if (GET_CODE (XEXP (SET_SRC (set), 1)) == CONST_INT)
5040 p->new_sp_offset = INTVAL (XEXP (SET_SRC (set), 1));
5041 else
5042 {
5043 gcc_assert (REG_P (XEXP (SET_SRC (set), 1))
5044 && (REGNO (XEXP (SET_SRC (set), 1))
5045 < FIRST_PSEUDO_REGISTER)
5046 && p->const_equiv[REGNO (XEXP (SET_SRC (set), 1))]);
5047 p->new_sp_offset
5048 = INTVAL (p->const_equiv[REGNO (XEXP (SET_SRC (set), 1))]);
5049 }
5050 }
5051 else
5052 p->new_sp_equiv_reg = SET_SRC (set), p->new_sp_offset = 0;
5053
5054 /* If we are adjusting SP, we adjust from the old data. */
5055 if (p->new_sp_equiv_reg == stack_pointer_rtx)
5056 {
5057 p->new_sp_equiv_reg = p->sp_equiv_reg;
5058 p->new_sp_offset += p->sp_offset;
5059 }
5060
5061 gcc_assert (p->new_sp_equiv_reg && REG_P (p->new_sp_equiv_reg));
5062
5063 return;
5064 }
5065
5066 /* Next handle the case where we are setting SP's equivalent
5067 register. We must not already have a value to set it to. We
5068 could update, but there seems little point in handling that case.
5069 Note that we have to allow for the case where we are setting the
5070 register set in the previous part of a PARALLEL inside a single
5071 insn. But use the old offset for any updates within this insn.
5072 We must allow for the case where the register is being set in a
5073 different (usually wider) mode than Pmode). */
5074 else if (p->new_sp_equiv_reg != 0 && reg_set_p (p->new_sp_equiv_reg, set))
5075 {
5076 gcc_assert (!p->equiv_reg_src
5077 && REG_P (p->new_sp_equiv_reg)
5078 && REG_P (SET_DEST (set))
5079 && (GET_MODE_BITSIZE (GET_MODE (SET_DEST (set)))
5080 <= BITS_PER_WORD)
5081 && REGNO (p->new_sp_equiv_reg) == REGNO (SET_DEST (set)));
5082 p->equiv_reg_src
5083 = simplify_replace_rtx (SET_SRC (set), stack_pointer_rtx,
5084 plus_constant (p->sp_equiv_reg,
5085 p->sp_offset));
5086 }
5087
5088 /* Otherwise, replace any references to SP in the insn to its new value
5089 and emit the insn. */
5090 else
5091 {
5092 SET_SRC (set) = simplify_replace_rtx (SET_SRC (set), stack_pointer_rtx,
5093 plus_constant (p->sp_equiv_reg,
5094 p->sp_offset));
5095 SET_DEST (set) = simplify_replace_rtx (SET_DEST (set), stack_pointer_rtx,
5096 plus_constant (p->sp_equiv_reg,
5097 p->sp_offset));
5098 emit_insn (set);
5099 }
5100 }
5101
5102 /* Update the tracking information for registers set to constants. */
5103
5104 static void
5105 update_epilogue_consts (rtx dest, const_rtx x, void *data)
5106 {
5107 struct epi_info *p = (struct epi_info *) data;
5108 rtx new;
5109
5110 if (!REG_P (dest) || REGNO (dest) >= FIRST_PSEUDO_REGISTER)
5111 return;
5112
5113 /* If we are either clobbering a register or doing a partial set,
5114 show we don't know the value. */
5115 else if (GET_CODE (x) == CLOBBER || ! rtx_equal_p (dest, SET_DEST (x)))
5116 p->const_equiv[REGNO (dest)] = 0;
5117
5118 /* If we are setting it to a constant, record that constant. */
5119 else if (GET_CODE (SET_SRC (x)) == CONST_INT)
5120 p->const_equiv[REGNO (dest)] = SET_SRC (x);
5121
5122 /* If this is a binary operation between a register we have been tracking
5123 and a constant, see if we can compute a new constant value. */
5124 else if (ARITHMETIC_P (SET_SRC (x))
5125 && REG_P (XEXP (SET_SRC (x), 0))
5126 && REGNO (XEXP (SET_SRC (x), 0)) < FIRST_PSEUDO_REGISTER
5127 && p->const_equiv[REGNO (XEXP (SET_SRC (x), 0))] != 0
5128 && GET_CODE (XEXP (SET_SRC (x), 1)) == CONST_INT
5129 && 0 != (new = simplify_binary_operation
5130 (GET_CODE (SET_SRC (x)), GET_MODE (dest),
5131 p->const_equiv[REGNO (XEXP (SET_SRC (x), 0))],
5132 XEXP (SET_SRC (x), 1)))
5133 && GET_CODE (new) == CONST_INT)
5134 p->const_equiv[REGNO (dest)] = new;
5135
5136 /* Otherwise, we can't do anything with this value. */
5137 else
5138 p->const_equiv[REGNO (dest)] = 0;
5139 }
5140
5141 /* Emit an insn to do the load shown in p->equiv_reg_src, if needed. */
5142
5143 static void
5144 emit_equiv_load (struct epi_info *p)
5145 {
5146 if (p->equiv_reg_src != 0)
5147 {
5148 rtx dest = p->sp_equiv_reg;
5149
5150 if (GET_MODE (p->equiv_reg_src) != GET_MODE (dest))
5151 dest = gen_rtx_REG (GET_MODE (p->equiv_reg_src),
5152 REGNO (p->sp_equiv_reg));
5153
5154 emit_move_insn (dest, p->equiv_reg_src);
5155 p->equiv_reg_src = 0;
5156 }
5157 }
5158 #endif
5159
5160 /* Generate the prologue and epilogue RTL if the machine supports it. Thread
5161 this into place with notes indicating where the prologue ends and where
5162 the epilogue begins. Update the basic block information when possible. */
5163
5164 static void
5165 thread_prologue_and_epilogue_insns (void)
5166 {
5167 int inserted = 0;
5168 edge e;
5169 #if defined (HAVE_sibcall_epilogue) || defined (HAVE_epilogue) || defined (HAVE_return) || defined (HAVE_prologue)
5170 rtx seq;
5171 #endif
5172 #if defined (HAVE_epilogue) || defined(HAVE_return)
5173 rtx epilogue_end = NULL_RTX;
5174 #endif
5175 edge_iterator ei;
5176
5177 #ifdef HAVE_prologue
5178 if (HAVE_prologue)
5179 {
5180 start_sequence ();
5181 seq = gen_prologue ();
5182 emit_insn (seq);
5183
5184 /* Insert an explicit USE for the frame pointer
5185 if the profiling is on and the frame pointer is required. */
5186 if (current_function_profile && frame_pointer_needed)
5187 emit_insn (gen_rtx_USE (VOIDmode, hard_frame_pointer_rtx));
5188
5189 /* Retain a map of the prologue insns. */
5190 record_insns (seq, &prologue);
5191 emit_note (NOTE_INSN_PROLOGUE_END);
5192
5193 #ifndef PROFILE_BEFORE_PROLOGUE
5194 /* Ensure that instructions are not moved into the prologue when
5195 profiling is on. The call to the profiling routine can be
5196 emitted within the live range of a call-clobbered register. */
5197 if (current_function_profile)
5198 emit_insn (gen_blockage ());
5199 #endif
5200
5201 seq = get_insns ();
5202 end_sequence ();
5203 set_insn_locators (seq, prologue_locator);
5204
5205 /* Can't deal with multiple successors of the entry block
5206 at the moment. Function should always have at least one
5207 entry point. */
5208 gcc_assert (single_succ_p (ENTRY_BLOCK_PTR));
5209
5210 insert_insn_on_edge (seq, single_succ_edge (ENTRY_BLOCK_PTR));
5211 inserted = 1;
5212 }
5213 #endif
5214
5215 /* If the exit block has no non-fake predecessors, we don't need
5216 an epilogue. */
5217 FOR_EACH_EDGE (e, ei, EXIT_BLOCK_PTR->preds)
5218 if ((e->flags & EDGE_FAKE) == 0)
5219 break;
5220 if (e == NULL)
5221 goto epilogue_done;
5222
5223 #ifdef HAVE_return
5224 if (optimize && HAVE_return)
5225 {
5226 /* If we're allowed to generate a simple return instruction,
5227 then by definition we don't need a full epilogue. Examine
5228 the block that falls through to EXIT. If it does not
5229 contain any code, examine its predecessors and try to
5230 emit (conditional) return instructions. */
5231
5232 basic_block last;
5233 rtx label;
5234
5235 FOR_EACH_EDGE (e, ei, EXIT_BLOCK_PTR->preds)
5236 if (e->flags & EDGE_FALLTHRU)
5237 break;
5238 if (e == NULL)
5239 goto epilogue_done;
5240 last = e->src;
5241
5242 /* Verify that there are no active instructions in the last block. */
5243 label = BB_END (last);
5244 while (label && !LABEL_P (label))
5245 {
5246 if (active_insn_p (label))
5247 break;
5248 label = PREV_INSN (label);
5249 }
5250
5251 if (BB_HEAD (last) == label && LABEL_P (label))
5252 {
5253 edge_iterator ei2;
5254
5255 for (ei2 = ei_start (last->preds); (e = ei_safe_edge (ei2)); )
5256 {
5257 basic_block bb = e->src;
5258 rtx jump;
5259
5260 if (bb == ENTRY_BLOCK_PTR)
5261 {
5262 ei_next (&ei2);
5263 continue;
5264 }
5265
5266 jump = BB_END (bb);
5267 if (!JUMP_P (jump) || JUMP_LABEL (jump) != label)
5268 {
5269 ei_next (&ei2);
5270 continue;
5271 }
5272
5273 /* If we have an unconditional jump, we can replace that
5274 with a simple return instruction. */
5275 if (simplejump_p (jump))
5276 {
5277 emit_return_into_block (bb);
5278 delete_insn (jump);
5279 }
5280
5281 /* If we have a conditional jump, we can try to replace
5282 that with a conditional return instruction. */
5283 else if (condjump_p (jump))
5284 {
5285 if (! redirect_jump (jump, 0, 0))
5286 {
5287 ei_next (&ei2);
5288 continue;
5289 }
5290
5291 /* If this block has only one successor, it both jumps
5292 and falls through to the fallthru block, so we can't
5293 delete the edge. */
5294 if (single_succ_p (bb))
5295 {
5296 ei_next (&ei2);
5297 continue;
5298 }
5299 }
5300 else
5301 {
5302 ei_next (&ei2);
5303 continue;
5304 }
5305
5306 /* Fix up the CFG for the successful change we just made. */
5307 redirect_edge_succ (e, EXIT_BLOCK_PTR);
5308 }
5309
5310 /* Emit a return insn for the exit fallthru block. Whether
5311 this is still reachable will be determined later. */
5312
5313 emit_barrier_after (BB_END (last));
5314 emit_return_into_block (last);
5315 epilogue_end = BB_END (last);
5316 single_succ_edge (last)->flags &= ~EDGE_FALLTHRU;
5317 goto epilogue_done;
5318 }
5319 }
5320 #endif
5321 /* Find the edge that falls through to EXIT. Other edges may exist
5322 due to RETURN instructions, but those don't need epilogues.
5323 There really shouldn't be a mixture -- either all should have
5324 been converted or none, however... */
5325
5326 FOR_EACH_EDGE (e, ei, EXIT_BLOCK_PTR->preds)
5327 if (e->flags & EDGE_FALLTHRU)
5328 break;
5329 if (e == NULL)
5330 goto epilogue_done;
5331
5332 #ifdef HAVE_epilogue
5333 if (HAVE_epilogue)
5334 {
5335 start_sequence ();
5336 epilogue_end = emit_note (NOTE_INSN_EPILOGUE_BEG);
5337
5338 seq = gen_epilogue ();
5339
5340 #ifdef INCOMING_RETURN_ADDR_RTX
5341 /* If this function returns with the stack depressed and we can support
5342 it, massage the epilogue to actually do that. */
5343 if (TREE_CODE (TREE_TYPE (current_function_decl)) == FUNCTION_TYPE
5344 && TYPE_RETURNS_STACK_DEPRESSED (TREE_TYPE (current_function_decl)))
5345 seq = keep_stack_depressed (seq);
5346 #endif
5347
5348 emit_jump_insn (seq);
5349
5350 /* Retain a map of the epilogue insns. */
5351 record_insns (seq, &epilogue);
5352 set_insn_locators (seq, epilogue_locator);
5353
5354 seq = get_insns ();
5355 end_sequence ();
5356
5357 insert_insn_on_edge (seq, e);
5358 inserted = 1;
5359 }
5360 else
5361 #endif
5362 {
5363 basic_block cur_bb;
5364
5365 if (! next_active_insn (BB_END (e->src)))
5366 goto epilogue_done;
5367 /* We have a fall-through edge to the exit block, the source is not
5368 at the end of the function, and there will be an assembler epilogue
5369 at the end of the function.
5370 We can't use force_nonfallthru here, because that would try to
5371 use return. Inserting a jump 'by hand' is extremely messy, so
5372 we take advantage of cfg_layout_finalize using
5373 fixup_fallthru_exit_predecessor. */
5374 cfg_layout_initialize (0);
5375 FOR_EACH_BB (cur_bb)
5376 if (cur_bb->index >= NUM_FIXED_BLOCKS
5377 && cur_bb->next_bb->index >= NUM_FIXED_BLOCKS)
5378 cur_bb->aux = cur_bb->next_bb;
5379 cfg_layout_finalize ();
5380 }
5381 epilogue_done:
5382
5383 if (inserted)
5384 {
5385 commit_edge_insertions ();
5386
5387 /* The epilogue insns we inserted may cause the exit edge to no longer
5388 be fallthru. */
5389 FOR_EACH_EDGE (e, ei, EXIT_BLOCK_PTR->preds)
5390 {
5391 if (((e->flags & EDGE_FALLTHRU) != 0)
5392 && returnjump_p (BB_END (e->src)))
5393 e->flags &= ~EDGE_FALLTHRU;
5394 }
5395 }
5396
5397 #ifdef HAVE_sibcall_epilogue
5398 /* Emit sibling epilogues before any sibling call sites. */
5399 for (ei = ei_start (EXIT_BLOCK_PTR->preds); (e = ei_safe_edge (ei)); )
5400 {
5401 basic_block bb = e->src;
5402 rtx insn = BB_END (bb);
5403
5404 if (!CALL_P (insn)
5405 || ! SIBLING_CALL_P (insn))
5406 {
5407 ei_next (&ei);
5408 continue;
5409 }
5410
5411 start_sequence ();
5412 emit_insn (gen_sibcall_epilogue ());
5413 seq = get_insns ();
5414 end_sequence ();
5415
5416 /* Retain a map of the epilogue insns. Used in life analysis to
5417 avoid getting rid of sibcall epilogue insns. Do this before we
5418 actually emit the sequence. */
5419 record_insns (seq, &sibcall_epilogue);
5420 set_insn_locators (seq, epilogue_locator);
5421
5422 emit_insn_before (seq, insn);
5423 ei_next (&ei);
5424 }
5425 #endif
5426
5427 #ifdef HAVE_epilogue
5428 if (epilogue_end)
5429 {
5430 rtx insn, next;
5431
5432 /* Similarly, move any line notes that appear after the epilogue.
5433 There is no need, however, to be quite so anal about the existence
5434 of such a note. Also possibly move
5435 NOTE_INSN_FUNCTION_BEG notes, as those can be relevant for debug
5436 info generation. */
5437 for (insn = epilogue_end; insn; insn = next)
5438 {
5439 next = NEXT_INSN (insn);
5440 if (NOTE_P (insn)
5441 && (NOTE_KIND (insn) == NOTE_INSN_FUNCTION_BEG))
5442 reorder_insns (insn, insn, PREV_INSN (epilogue_end));
5443 }
5444 }
5445 #endif
5446
5447 /* Threading the prologue and epilogue changes the artificial refs
5448 in the entry and exit blocks. */
5449 epilogue_completed = 1;
5450 df_update_entry_exit_and_calls ();
5451 }
5452
5453 /* Reposition the prologue-end and epilogue-begin notes after instruction
5454 scheduling and delayed branch scheduling. */
5455
5456 void
5457 reposition_prologue_and_epilogue_notes (void)
5458 {
5459 #if defined (HAVE_prologue) || defined (HAVE_epilogue)
5460 rtx insn, last, note;
5461 int len;
5462
5463 if ((len = VEC_length (int, prologue)) > 0)
5464 {
5465 last = 0, note = 0;
5466
5467 /* Scan from the beginning until we reach the last prologue insn.
5468 We apparently can't depend on basic_block_{head,end} after
5469 reorg has run. */
5470 for (insn = get_insns (); insn; insn = NEXT_INSN (insn))
5471 {
5472 if (NOTE_P (insn))
5473 {
5474 if (NOTE_KIND (insn) == NOTE_INSN_PROLOGUE_END)
5475 note = insn;
5476 }
5477 else if (contains (insn, &prologue))
5478 {
5479 last = insn;
5480 if (--len == 0)
5481 break;
5482 }
5483 }
5484
5485 if (last)
5486 {
5487 /* Find the prologue-end note if we haven't already, and
5488 move it to just after the last prologue insn. */
5489 if (note == 0)
5490 {
5491 for (note = last; (note = NEXT_INSN (note));)
5492 if (NOTE_P (note)
5493 && NOTE_KIND (note) == NOTE_INSN_PROLOGUE_END)
5494 break;
5495 }
5496
5497 /* Avoid placing note between CODE_LABEL and BASIC_BLOCK note. */
5498 if (LABEL_P (last))
5499 last = NEXT_INSN (last);
5500 reorder_insns (note, note, last);
5501 }
5502 }
5503
5504 if ((len = VEC_length (int, epilogue)) > 0)
5505 {
5506 last = 0, note = 0;
5507
5508 /* Scan from the end until we reach the first epilogue insn.
5509 We apparently can't depend on basic_block_{head,end} after
5510 reorg has run. */
5511 for (insn = get_last_insn (); insn; insn = PREV_INSN (insn))
5512 {
5513 if (NOTE_P (insn))
5514 {
5515 if (NOTE_KIND (insn) == NOTE_INSN_EPILOGUE_BEG)
5516 note = insn;
5517 }
5518 else if (contains (insn, &epilogue))
5519 {
5520 last = insn;
5521 if (--len == 0)
5522 break;
5523 }
5524 }
5525
5526 if (last)
5527 {
5528 /* Find the epilogue-begin note if we haven't already, and
5529 move it to just before the first epilogue insn. */
5530 if (note == 0)
5531 {
5532 for (note = insn; (note = PREV_INSN (note));)
5533 if (NOTE_P (note)
5534 && NOTE_KIND (note) == NOTE_INSN_EPILOGUE_BEG)
5535 break;
5536 }
5537
5538 if (PREV_INSN (last) != note)
5539 reorder_insns (note, note, PREV_INSN (last));
5540 }
5541 }
5542 #endif /* HAVE_prologue or HAVE_epilogue */
5543 }
5544
5545 /* Returns the name of the current function. */
5546 const char *
5547 current_function_name (void)
5548 {
5549 return lang_hooks.decl_printable_name (cfun->decl, 2);
5550 }
5551
5552 /* Returns the raw (mangled) name of the current function. */
5553 const char *
5554 current_function_assembler_name (void)
5555 {
5556 return IDENTIFIER_POINTER (DECL_ASSEMBLER_NAME (cfun->decl));
5557 }
5558 \f
5559
5560 static unsigned int
5561 rest_of_handle_check_leaf_regs (void)
5562 {
5563 #ifdef LEAF_REGISTERS
5564 current_function_uses_only_leaf_regs
5565 = optimize > 0 && only_leaf_regs_used () && leaf_function_p ();
5566 #endif
5567 return 0;
5568 }
5569
5570 /* Insert a TYPE into the used types hash table of CFUN. */
5571 static void
5572 used_types_insert_helper (tree type, struct function *func)
5573 {
5574 if (type != NULL && func != NULL)
5575 {
5576 void **slot;
5577
5578 if (func->used_types_hash == NULL)
5579 func->used_types_hash = htab_create_ggc (37, htab_hash_pointer,
5580 htab_eq_pointer, NULL);
5581 slot = htab_find_slot (func->used_types_hash, type, INSERT);
5582 if (*slot == NULL)
5583 *slot = type;
5584 }
5585 }
5586
5587 /* Given a type, insert it into the used hash table in cfun. */
5588 void
5589 used_types_insert (tree t)
5590 {
5591 while (POINTER_TYPE_P (t) || TREE_CODE (t) == ARRAY_TYPE)
5592 t = TREE_TYPE (t);
5593 t = TYPE_MAIN_VARIANT (t);
5594 if (debug_info_level > DINFO_LEVEL_NONE)
5595 used_types_insert_helper (t, cfun);
5596 }
5597
5598 struct tree_opt_pass pass_leaf_regs =
5599 {
5600 NULL, /* name */
5601 NULL, /* gate */
5602 rest_of_handle_check_leaf_regs, /* execute */
5603 NULL, /* sub */
5604 NULL, /* next */
5605 0, /* static_pass_number */
5606 0, /* tv_id */
5607 0, /* properties_required */
5608 0, /* properties_provided */
5609 0, /* properties_destroyed */
5610 0, /* todo_flags_start */
5611 0, /* todo_flags_finish */
5612 0 /* letter */
5613 };
5614
5615 static unsigned int
5616 rest_of_handle_thread_prologue_and_epilogue (void)
5617 {
5618 if (optimize)
5619 cleanup_cfg (CLEANUP_EXPENSIVE);
5620 /* On some machines, the prologue and epilogue code, or parts thereof,
5621 can be represented as RTL. Doing so lets us schedule insns between
5622 it and the rest of the code and also allows delayed branch
5623 scheduling to operate in the epilogue. */
5624
5625 thread_prologue_and_epilogue_insns ();
5626 return 0;
5627 }
5628
5629 struct tree_opt_pass pass_thread_prologue_and_epilogue =
5630 {
5631 "pro_and_epilogue", /* name */
5632 NULL, /* gate */
5633 rest_of_handle_thread_prologue_and_epilogue, /* execute */
5634 NULL, /* sub */
5635 NULL, /* next */
5636 0, /* static_pass_number */
5637 TV_THREAD_PROLOGUE_AND_EPILOGUE, /* tv_id */
5638 0, /* properties_required */
5639 0, /* properties_provided */
5640 0, /* properties_destroyed */
5641 TODO_verify_flow, /* todo_flags_start */
5642 TODO_dump_func |
5643 TODO_df_verify |
5644 TODO_df_finish | TODO_verify_rtl_sharing |
5645 TODO_ggc_collect, /* todo_flags_finish */
5646 'w' /* letter */
5647 };
5648 \f
5649
5650 /* This mini-pass fixes fall-out from SSA in asm statements that have
5651 in-out constraints. Say you start with
5652
5653 orig = inout;
5654 asm ("": "+mr" (inout));
5655 use (orig);
5656
5657 which is transformed very early to use explicit output and match operands:
5658
5659 orig = inout;
5660 asm ("": "=mr" (inout) : "0" (inout));
5661 use (orig);
5662
5663 Or, after SSA and copyprop,
5664
5665 asm ("": "=mr" (inout_2) : "0" (inout_1));
5666 use (inout_1);
5667
5668 Clearly inout_2 and inout_1 can't be coalesced easily anymore, as
5669 they represent two separate values, so they will get different pseudo
5670 registers during expansion. Then, since the two operands need to match
5671 per the constraints, but use different pseudo registers, reload can
5672 only register a reload for these operands. But reloads can only be
5673 satisfied by hardregs, not by memory, so we need a register for this
5674 reload, just because we are presented with non-matching operands.
5675 So, even though we allow memory for this operand, no memory can be
5676 used for it, just because the two operands don't match. This can
5677 cause reload failures on register-starved targets.
5678
5679 So it's a symptom of reload not being able to use memory for reloads
5680 or, alternatively it's also a symptom of both operands not coming into
5681 reload as matching (in which case the pseudo could go to memory just
5682 fine, as the alternative allows it, and no reload would be necessary).
5683 We fix the latter problem here, by transforming
5684
5685 asm ("": "=mr" (inout_2) : "0" (inout_1));
5686
5687 back to
5688
5689 inout_2 = inout_1;
5690 asm ("": "=mr" (inout_2) : "0" (inout_2)); */
5691
5692 static void
5693 match_asm_constraints_1 (rtx insn, rtx *p_sets, int noutputs)
5694 {
5695 int i;
5696 bool changed = false;
5697 rtx op = SET_SRC (p_sets[0]);
5698 int ninputs = ASM_OPERANDS_INPUT_LENGTH (op);
5699 rtvec inputs = ASM_OPERANDS_INPUT_VEC (op);
5700 bool *output_matched = alloca (noutputs * sizeof (bool));
5701
5702 memset (output_matched, 0, noutputs * sizeof (bool));
5703 for (i = 0; i < ninputs; i++)
5704 {
5705 rtx input, output, insns;
5706 const char *constraint = ASM_OPERANDS_INPUT_CONSTRAINT (op, i);
5707 char *end;
5708 int match, j;
5709
5710 match = strtoul (constraint, &end, 10);
5711 if (end == constraint)
5712 continue;
5713
5714 gcc_assert (match < noutputs);
5715 output = SET_DEST (p_sets[match]);
5716 input = RTVEC_ELT (inputs, i);
5717 /* Only do the transformation for pseudos. */
5718 if (! REG_P (output)
5719 || rtx_equal_p (output, input)
5720 || (GET_MODE (input) != VOIDmode
5721 && GET_MODE (input) != GET_MODE (output)))
5722 continue;
5723
5724 /* We can't do anything if the output is also used as input,
5725 as we're going to overwrite it. */
5726 for (j = 0; j < ninputs; j++)
5727 if (reg_overlap_mentioned_p (output, RTVEC_ELT (inputs, j)))
5728 break;
5729 if (j != ninputs)
5730 continue;
5731
5732 /* Avoid changing the same input several times. For
5733 asm ("" : "=mr" (out1), "=mr" (out2) : "0" (in), "1" (in));
5734 only change in once (to out1), rather than changing it
5735 first to out1 and afterwards to out2. */
5736 if (i > 0)
5737 {
5738 for (j = 0; j < noutputs; j++)
5739 if (output_matched[j] && input == SET_DEST (p_sets[j]))
5740 break;
5741 if (j != noutputs)
5742 continue;
5743 }
5744 output_matched[match] = true;
5745
5746 start_sequence ();
5747 emit_move_insn (output, input);
5748 insns = get_insns ();
5749 end_sequence ();
5750 emit_insn_before (insns, insn);
5751
5752 /* Now replace all mentions of the input with output. We can't
5753 just replace the occurence in inputs[i], as the register might
5754 also be used in some other input (or even in an address of an
5755 output), which would mean possibly increasing the number of
5756 inputs by one (namely 'output' in addition), which might pose
5757 a too complicated problem for reload to solve. E.g. this situation:
5758
5759 asm ("" : "=r" (output), "=m" (input) : "0" (input))
5760
5761 Here 'input' is used in two occurrences as input (once for the
5762 input operand, once for the address in the second output operand).
5763 If we would replace only the occurence of the input operand (to
5764 make the matching) we would be left with this:
5765
5766 output = input
5767 asm ("" : "=r" (output), "=m" (input) : "0" (output))
5768
5769 Now we suddenly have two different input values (containing the same
5770 value, but different pseudos) where we formerly had only one.
5771 With more complicated asms this might lead to reload failures
5772 which wouldn't have happen without this pass. So, iterate over
5773 all operands and replace all occurrences of the register used. */
5774 for (j = 0; j < noutputs; j++)
5775 if (!rtx_equal_p (SET_DEST (p_sets[j]), input)
5776 && reg_overlap_mentioned_p (input, SET_DEST (p_sets[j])))
5777 SET_DEST (p_sets[j]) = replace_rtx (SET_DEST (p_sets[j]),
5778 input, output);
5779 for (j = 0; j < ninputs; j++)
5780 if (reg_overlap_mentioned_p (input, RTVEC_ELT (inputs, j)))
5781 RTVEC_ELT (inputs, j) = replace_rtx (RTVEC_ELT (inputs, j),
5782 input, output);
5783
5784 changed = true;
5785 }
5786
5787 if (changed)
5788 df_insn_rescan (insn);
5789 }
5790
5791 static unsigned
5792 rest_of_match_asm_constraints (void)
5793 {
5794 basic_block bb;
5795 rtx insn, pat, *p_sets;
5796 int noutputs;
5797
5798 if (!cfun->has_asm_statement)
5799 return 0;
5800
5801 df_set_flags (DF_DEFER_INSN_RESCAN);
5802 FOR_EACH_BB (bb)
5803 {
5804 FOR_BB_INSNS (bb, insn)
5805 {
5806 if (!INSN_P (insn))
5807 continue;
5808
5809 pat = PATTERN (insn);
5810 if (GET_CODE (pat) == PARALLEL)
5811 p_sets = &XVECEXP (pat, 0, 0), noutputs = XVECLEN (pat, 0);
5812 else if (GET_CODE (pat) == SET)
5813 p_sets = &PATTERN (insn), noutputs = 1;
5814 else
5815 continue;
5816
5817 if (GET_CODE (*p_sets) == SET
5818 && GET_CODE (SET_SRC (*p_sets)) == ASM_OPERANDS)
5819 match_asm_constraints_1 (insn, p_sets, noutputs);
5820 }
5821 }
5822
5823 return TODO_df_finish;
5824 }
5825
5826 struct tree_opt_pass pass_match_asm_constraints =
5827 {
5828 "asmcons", /* name */
5829 NULL, /* gate */
5830 rest_of_match_asm_constraints, /* execute */
5831 NULL, /* sub */
5832 NULL, /* next */
5833 0, /* static_pass_number */
5834 0, /* tv_id */
5835 0, /* properties_required */
5836 0, /* properties_provided */
5837 0, /* properties_destroyed */
5838 0, /* todo_flags_start */
5839 TODO_dump_func, /* todo_flags_finish */
5840 0 /* letter */
5841 };
5842
5843
5844 #include "gt-function.h"