* config/avr/avr.md: Fix indentations of insn C snippets.
[official-gcc.git] / gcc / function.c
blob9efbc3ad27061ce3555440276f089bec56ada909
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, 2009,
4 2010, 2011, 2012 Free Software Foundation, Inc.
6 This file is part of GCC.
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.
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.
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/>. */
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.
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.
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. */
36 #include "config.h"
37 #include "system.h"
38 #include "coretypes.h"
39 #include "tm.h"
40 #include "rtl-error.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 "hashtab.h"
55 #include "ggc.h"
56 #include "tm_p.h"
57 #include "langhooks.h"
58 #include "target.h"
59 #include "common/common-target.h"
60 #include "gimple.h"
61 #include "tree-pass.h"
62 #include "predict.h"
63 #include "df.h"
64 #include "vecprim.h"
65 #include "params.h"
66 #include "bb-reorder.h"
68 /* So we can assign to cfun in this file. */
69 #undef cfun
71 #ifndef STACK_ALIGNMENT_NEEDED
72 #define STACK_ALIGNMENT_NEEDED 1
73 #endif
75 #define STACK_BYTES (STACK_BOUNDARY / BITS_PER_UNIT)
77 /* Some systems use __main in a way incompatible with its use in gcc, in these
78 cases use the macros NAME__MAIN to give a quoted symbol and SYMBOL__MAIN to
79 give the same symbol without quotes for an alternative entry point. You
80 must define both, or neither. */
81 #ifndef NAME__MAIN
82 #define NAME__MAIN "__main"
83 #endif
85 /* Round a value to the lowest integer less than it that is a multiple of
86 the required alignment. Avoid using division in case the value is
87 negative. Assume the alignment is a power of two. */
88 #define FLOOR_ROUND(VALUE,ALIGN) ((VALUE) & ~((ALIGN) - 1))
90 /* Similar, but round to the next highest integer that meets the
91 alignment. */
92 #define CEIL_ROUND(VALUE,ALIGN) (((VALUE) + (ALIGN) - 1) & ~((ALIGN)- 1))
94 /* Nonzero once virtual register instantiation has been done.
95 assign_stack_local uses frame_pointer_rtx when this is nonzero.
96 calls.c:emit_library_call_value_1 uses it to set up
97 post-instantiation libcalls. */
98 int virtuals_instantiated;
100 /* Assign unique numbers to labels generated for profiling, debugging, etc. */
101 static GTY(()) int funcdef_no;
103 /* These variables hold pointers to functions to create and destroy
104 target specific, per-function data structures. */
105 struct machine_function * (*init_machine_status) (void);
107 /* The currently compiled function. */
108 struct function *cfun = 0;
110 /* These hashes record the prologue and epilogue insns. */
111 static GTY((if_marked ("ggc_marked_p"), param_is (struct rtx_def)))
112 htab_t prologue_insn_hash;
113 static GTY((if_marked ("ggc_marked_p"), param_is (struct rtx_def)))
114 htab_t epilogue_insn_hash;
117 htab_t types_used_by_vars_hash = NULL;
118 VEC(tree,gc) *types_used_by_cur_var_decl;
120 /* Forward declarations. */
122 static struct temp_slot *find_temp_slot_from_address (rtx);
123 static void pad_to_arg_alignment (struct args_size *, int, struct args_size *);
124 static void pad_below (struct args_size *, enum machine_mode, tree);
125 static void reorder_blocks_1 (rtx, tree, VEC(tree,heap) **);
126 static int all_blocks (tree, tree *);
127 static tree *get_block_vector (tree, int *);
128 extern tree debug_find_var_in_block_tree (tree, tree);
129 /* We always define `record_insns' even if it's not used so that we
130 can always export `prologue_epilogue_contains'. */
131 static void record_insns (rtx, rtx, htab_t *) ATTRIBUTE_UNUSED;
132 static bool contains (const_rtx, htab_t);
133 static void prepare_function_start (void);
134 static void do_clobber_return_reg (rtx, void *);
135 static void do_use_return_reg (rtx, void *);
136 static void set_insn_locations (rtx, int) ATTRIBUTE_UNUSED;
138 /* Stack of nested functions. */
139 /* Keep track of the cfun stack. */
141 typedef struct function *function_p;
143 DEF_VEC_P(function_p);
144 DEF_VEC_ALLOC_P(function_p,heap);
145 static VEC(function_p,heap) *function_context_stack;
147 /* Save the current context for compilation of a nested function.
148 This is called from language-specific code. */
150 void
151 push_function_context (void)
153 if (cfun == 0)
154 allocate_struct_function (NULL, false);
156 VEC_safe_push (function_p, heap, function_context_stack, cfun);
157 set_cfun (NULL);
160 /* Restore the last saved context, at the end of a nested function.
161 This function is called from language-specific code. */
163 void
164 pop_function_context (void)
166 struct function *p = VEC_pop (function_p, function_context_stack);
167 set_cfun (p);
168 current_function_decl = p->decl;
170 /* Reset variables that have known state during rtx generation. */
171 virtuals_instantiated = 0;
172 generating_concat_p = 1;
175 /* Clear out all parts of the state in F that can safely be discarded
176 after the function has been parsed, but not compiled, to let
177 garbage collection reclaim the memory. */
179 void
180 free_after_parsing (struct function *f)
182 f->language = 0;
185 /* Clear out all parts of the state in F that can safely be discarded
186 after the function has been compiled, to let garbage collection
187 reclaim the memory. */
189 void
190 free_after_compilation (struct function *f)
192 prologue_insn_hash = NULL;
193 epilogue_insn_hash = NULL;
195 free (crtl->emit.regno_pointer_align);
197 memset (crtl, 0, sizeof (struct rtl_data));
198 f->eh = NULL;
199 f->machine = NULL;
200 f->cfg = NULL;
202 regno_reg_rtx = NULL;
205 /* Return size needed for stack frame based on slots so far allocated.
206 This size counts from zero. It is not rounded to PREFERRED_STACK_BOUNDARY;
207 the caller may have to do that. */
209 HOST_WIDE_INT
210 get_frame_size (void)
212 if (FRAME_GROWS_DOWNWARD)
213 return -frame_offset;
214 else
215 return frame_offset;
218 /* Issue an error message and return TRUE if frame OFFSET overflows in
219 the signed target pointer arithmetics for function FUNC. Otherwise
220 return FALSE. */
222 bool
223 frame_offset_overflow (HOST_WIDE_INT offset, tree func)
225 unsigned HOST_WIDE_INT size = FRAME_GROWS_DOWNWARD ? -offset : offset;
227 if (size > ((unsigned HOST_WIDE_INT) 1 << (GET_MODE_BITSIZE (Pmode) - 1))
228 /* Leave room for the fixed part of the frame. */
229 - 64 * UNITS_PER_WORD)
231 error_at (DECL_SOURCE_LOCATION (func),
232 "total size of local objects too large");
233 return TRUE;
236 return FALSE;
239 /* Return stack slot alignment in bits for TYPE and MODE. */
241 static unsigned int
242 get_stack_local_alignment (tree type, enum machine_mode mode)
244 unsigned int alignment;
246 if (mode == BLKmode)
247 alignment = BIGGEST_ALIGNMENT;
248 else
249 alignment = GET_MODE_ALIGNMENT (mode);
251 /* Allow the frond-end to (possibly) increase the alignment of this
252 stack slot. */
253 if (! type)
254 type = lang_hooks.types.type_for_mode (mode, 0);
256 return STACK_SLOT_ALIGNMENT (type, mode, alignment);
259 /* Determine whether it is possible to fit a stack slot of size SIZE and
260 alignment ALIGNMENT into an area in the stack frame that starts at
261 frame offset START and has a length of LENGTH. If so, store the frame
262 offset to be used for the stack slot in *POFFSET and return true;
263 return false otherwise. This function will extend the frame size when
264 given a start/length pair that lies at the end of the frame. */
266 static bool
267 try_fit_stack_local (HOST_WIDE_INT start, HOST_WIDE_INT length,
268 HOST_WIDE_INT size, unsigned int alignment,
269 HOST_WIDE_INT *poffset)
271 HOST_WIDE_INT this_frame_offset;
272 int frame_off, frame_alignment, frame_phase;
274 /* Calculate how many bytes the start of local variables is off from
275 stack alignment. */
276 frame_alignment = PREFERRED_STACK_BOUNDARY / BITS_PER_UNIT;
277 frame_off = STARTING_FRAME_OFFSET % frame_alignment;
278 frame_phase = frame_off ? frame_alignment - frame_off : 0;
280 /* Round the frame offset to the specified alignment. */
282 /* We must be careful here, since FRAME_OFFSET might be negative and
283 division with a negative dividend isn't as well defined as we might
284 like. So we instead assume that ALIGNMENT is a power of two and
285 use logical operations which are unambiguous. */
286 if (FRAME_GROWS_DOWNWARD)
287 this_frame_offset
288 = (FLOOR_ROUND (start + length - size - frame_phase,
289 (unsigned HOST_WIDE_INT) alignment)
290 + frame_phase);
291 else
292 this_frame_offset
293 = (CEIL_ROUND (start - frame_phase,
294 (unsigned HOST_WIDE_INT) alignment)
295 + frame_phase);
297 /* See if it fits. If this space is at the edge of the frame,
298 consider extending the frame to make it fit. Our caller relies on
299 this when allocating a new slot. */
300 if (frame_offset == start && this_frame_offset < frame_offset)
301 frame_offset = this_frame_offset;
302 else if (this_frame_offset < start)
303 return false;
304 else if (start + length == frame_offset
305 && this_frame_offset + size > start + length)
306 frame_offset = this_frame_offset + size;
307 else if (this_frame_offset + size > start + length)
308 return false;
310 *poffset = this_frame_offset;
311 return true;
314 /* Create a new frame_space structure describing free space in the stack
315 frame beginning at START and ending at END, and chain it into the
316 function's frame_space_list. */
318 static void
319 add_frame_space (HOST_WIDE_INT start, HOST_WIDE_INT end)
321 struct frame_space *space = ggc_alloc_frame_space ();
322 space->next = crtl->frame_space_list;
323 crtl->frame_space_list = space;
324 space->start = start;
325 space->length = end - start;
328 /* Allocate a stack slot of SIZE bytes and return a MEM rtx for it
329 with machine mode MODE.
331 ALIGN controls the amount of alignment for the address of the slot:
332 0 means according to MODE,
333 -1 means use BIGGEST_ALIGNMENT and round size to multiple of that,
334 -2 means use BITS_PER_UNIT,
335 positive specifies alignment boundary in bits.
337 KIND has ASLK_REDUCE_ALIGN bit set if it is OK to reduce
338 alignment and ASLK_RECORD_PAD bit set if we should remember
339 extra space we allocated for alignment purposes. When we are
340 called from assign_stack_temp_for_type, it is not set so we don't
341 track the same stack slot in two independent lists.
343 We do not round to stack_boundary here. */
346 assign_stack_local_1 (enum machine_mode mode, HOST_WIDE_INT size,
347 int align, int kind)
349 rtx x, addr;
350 int bigend_correction = 0;
351 HOST_WIDE_INT slot_offset = 0, old_frame_offset;
352 unsigned int alignment, alignment_in_bits;
354 if (align == 0)
356 alignment = get_stack_local_alignment (NULL, mode);
357 alignment /= BITS_PER_UNIT;
359 else if (align == -1)
361 alignment = BIGGEST_ALIGNMENT / BITS_PER_UNIT;
362 size = CEIL_ROUND (size, alignment);
364 else if (align == -2)
365 alignment = 1; /* BITS_PER_UNIT / BITS_PER_UNIT */
366 else
367 alignment = align / BITS_PER_UNIT;
369 alignment_in_bits = alignment * BITS_PER_UNIT;
371 /* Ignore alignment if it exceeds MAX_SUPPORTED_STACK_ALIGNMENT. */
372 if (alignment_in_bits > MAX_SUPPORTED_STACK_ALIGNMENT)
374 alignment_in_bits = MAX_SUPPORTED_STACK_ALIGNMENT;
375 alignment = alignment_in_bits / BITS_PER_UNIT;
378 if (SUPPORTS_STACK_ALIGNMENT)
380 if (crtl->stack_alignment_estimated < alignment_in_bits)
382 if (!crtl->stack_realign_processed)
383 crtl->stack_alignment_estimated = alignment_in_bits;
384 else
386 /* If stack is realigned and stack alignment value
387 hasn't been finalized, it is OK not to increase
388 stack_alignment_estimated. The bigger alignment
389 requirement is recorded in stack_alignment_needed
390 below. */
391 gcc_assert (!crtl->stack_realign_finalized);
392 if (!crtl->stack_realign_needed)
394 /* It is OK to reduce the alignment as long as the
395 requested size is 0 or the estimated stack
396 alignment >= mode alignment. */
397 gcc_assert ((kind & ASLK_REDUCE_ALIGN)
398 || size == 0
399 || (crtl->stack_alignment_estimated
400 >= GET_MODE_ALIGNMENT (mode)));
401 alignment_in_bits = crtl->stack_alignment_estimated;
402 alignment = alignment_in_bits / BITS_PER_UNIT;
408 if (crtl->stack_alignment_needed < alignment_in_bits)
409 crtl->stack_alignment_needed = alignment_in_bits;
410 if (crtl->max_used_stack_slot_alignment < alignment_in_bits)
411 crtl->max_used_stack_slot_alignment = alignment_in_bits;
413 if (mode != BLKmode || size != 0)
415 if (kind & ASLK_RECORD_PAD)
417 struct frame_space **psp;
419 for (psp = &crtl->frame_space_list; *psp; psp = &(*psp)->next)
421 struct frame_space *space = *psp;
422 if (!try_fit_stack_local (space->start, space->length, size,
423 alignment, &slot_offset))
424 continue;
425 *psp = space->next;
426 if (slot_offset > space->start)
427 add_frame_space (space->start, slot_offset);
428 if (slot_offset + size < space->start + space->length)
429 add_frame_space (slot_offset + size,
430 space->start + space->length);
431 goto found_space;
435 else if (!STACK_ALIGNMENT_NEEDED)
437 slot_offset = frame_offset;
438 goto found_space;
441 old_frame_offset = frame_offset;
443 if (FRAME_GROWS_DOWNWARD)
445 frame_offset -= size;
446 try_fit_stack_local (frame_offset, size, size, alignment, &slot_offset);
448 if (kind & ASLK_RECORD_PAD)
450 if (slot_offset > frame_offset)
451 add_frame_space (frame_offset, slot_offset);
452 if (slot_offset + size < old_frame_offset)
453 add_frame_space (slot_offset + size, old_frame_offset);
456 else
458 frame_offset += size;
459 try_fit_stack_local (old_frame_offset, size, size, alignment, &slot_offset);
461 if (kind & ASLK_RECORD_PAD)
463 if (slot_offset > old_frame_offset)
464 add_frame_space (old_frame_offset, slot_offset);
465 if (slot_offset + size < frame_offset)
466 add_frame_space (slot_offset + size, frame_offset);
470 found_space:
471 /* On a big-endian machine, if we are allocating more space than we will use,
472 use the least significant bytes of those that are allocated. */
473 if (BYTES_BIG_ENDIAN && mode != BLKmode && GET_MODE_SIZE (mode) < size)
474 bigend_correction = size - GET_MODE_SIZE (mode);
476 /* If we have already instantiated virtual registers, return the actual
477 address relative to the frame pointer. */
478 if (virtuals_instantiated)
479 addr = plus_constant (Pmode, frame_pointer_rtx,
480 trunc_int_for_mode
481 (slot_offset + bigend_correction
482 + STARTING_FRAME_OFFSET, Pmode));
483 else
484 addr = plus_constant (Pmode, virtual_stack_vars_rtx,
485 trunc_int_for_mode
486 (slot_offset + bigend_correction,
487 Pmode));
489 x = gen_rtx_MEM (mode, addr);
490 set_mem_align (x, alignment_in_bits);
491 MEM_NOTRAP_P (x) = 1;
493 stack_slot_list
494 = gen_rtx_EXPR_LIST (VOIDmode, x, stack_slot_list);
496 if (frame_offset_overflow (frame_offset, current_function_decl))
497 frame_offset = 0;
499 return x;
502 /* Wrap up assign_stack_local_1 with last parameter as false. */
505 assign_stack_local (enum machine_mode mode, HOST_WIDE_INT size, int align)
507 return assign_stack_local_1 (mode, size, align, ASLK_RECORD_PAD);
510 /* In order to evaluate some expressions, such as function calls returning
511 structures in memory, we need to temporarily allocate stack locations.
512 We record each allocated temporary in the following structure.
514 Associated with each temporary slot is a nesting level. When we pop up
515 one level, all temporaries associated with the previous level are freed.
516 Normally, all temporaries are freed after the execution of the statement
517 in which they were created. However, if we are inside a ({...}) grouping,
518 the result may be in a temporary and hence must be preserved. If the
519 result could be in a temporary, we preserve it if we can determine which
520 one it is in. If we cannot determine which temporary may contain the
521 result, all temporaries are preserved. A temporary is preserved by
522 pretending it was allocated at the previous nesting level. */
524 struct GTY(()) temp_slot {
525 /* Points to next temporary slot. */
526 struct temp_slot *next;
527 /* Points to previous temporary slot. */
528 struct temp_slot *prev;
529 /* The rtx to used to reference the slot. */
530 rtx slot;
531 /* The size, in units, of the slot. */
532 HOST_WIDE_INT size;
533 /* The type of the object in the slot, or zero if it doesn't correspond
534 to a type. We use this to determine whether a slot can be reused.
535 It can be reused if objects of the type of the new slot will always
536 conflict with objects of the type of the old slot. */
537 tree type;
538 /* The alignment (in bits) of the slot. */
539 unsigned int align;
540 /* Nonzero if this temporary is currently in use. */
541 char in_use;
542 /* Nesting level at which this slot is being used. */
543 int level;
544 /* The offset of the slot from the frame_pointer, including extra space
545 for alignment. This info is for combine_temp_slots. */
546 HOST_WIDE_INT base_offset;
547 /* The size of the slot, including extra space for alignment. This
548 info is for combine_temp_slots. */
549 HOST_WIDE_INT full_size;
552 /* A table of addresses that represent a stack slot. The table is a mapping
553 from address RTXen to a temp slot. */
554 static GTY((param_is(struct temp_slot_address_entry))) htab_t temp_slot_address_table;
555 static size_t n_temp_slots_in_use;
557 /* Entry for the above hash table. */
558 struct GTY(()) temp_slot_address_entry {
559 hashval_t hash;
560 rtx address;
561 struct temp_slot *temp_slot;
564 /* Removes temporary slot TEMP from LIST. */
566 static void
567 cut_slot_from_list (struct temp_slot *temp, struct temp_slot **list)
569 if (temp->next)
570 temp->next->prev = temp->prev;
571 if (temp->prev)
572 temp->prev->next = temp->next;
573 else
574 *list = temp->next;
576 temp->prev = temp->next = NULL;
579 /* Inserts temporary slot TEMP to LIST. */
581 static void
582 insert_slot_to_list (struct temp_slot *temp, struct temp_slot **list)
584 temp->next = *list;
585 if (*list)
586 (*list)->prev = temp;
587 temp->prev = NULL;
588 *list = temp;
591 /* Returns the list of used temp slots at LEVEL. */
593 static struct temp_slot **
594 temp_slots_at_level (int level)
596 if (level >= (int) VEC_length (temp_slot_p, used_temp_slots))
597 VEC_safe_grow_cleared (temp_slot_p, gc, used_temp_slots, level + 1);
599 return &(VEC_address (temp_slot_p, used_temp_slots)[level]);
602 /* Returns the maximal temporary slot level. */
604 static int
605 max_slot_level (void)
607 if (!used_temp_slots)
608 return -1;
610 return VEC_length (temp_slot_p, used_temp_slots) - 1;
613 /* Moves temporary slot TEMP to LEVEL. */
615 static void
616 move_slot_to_level (struct temp_slot *temp, int level)
618 cut_slot_from_list (temp, temp_slots_at_level (temp->level));
619 insert_slot_to_list (temp, temp_slots_at_level (level));
620 temp->level = level;
623 /* Make temporary slot TEMP available. */
625 static void
626 make_slot_available (struct temp_slot *temp)
628 cut_slot_from_list (temp, temp_slots_at_level (temp->level));
629 insert_slot_to_list (temp, &avail_temp_slots);
630 temp->in_use = 0;
631 temp->level = -1;
632 n_temp_slots_in_use--;
635 /* Compute the hash value for an address -> temp slot mapping.
636 The value is cached on the mapping entry. */
637 static hashval_t
638 temp_slot_address_compute_hash (struct temp_slot_address_entry *t)
640 int do_not_record = 0;
641 return hash_rtx (t->address, GET_MODE (t->address),
642 &do_not_record, NULL, false);
645 /* Return the hash value for an address -> temp slot mapping. */
646 static hashval_t
647 temp_slot_address_hash (const void *p)
649 const struct temp_slot_address_entry *t;
650 t = (const struct temp_slot_address_entry *) p;
651 return t->hash;
654 /* Compare two address -> temp slot mapping entries. */
655 static int
656 temp_slot_address_eq (const void *p1, const void *p2)
658 const struct temp_slot_address_entry *t1, *t2;
659 t1 = (const struct temp_slot_address_entry *) p1;
660 t2 = (const struct temp_slot_address_entry *) p2;
661 return exp_equiv_p (t1->address, t2->address, 0, true);
664 /* Add ADDRESS as an alias of TEMP_SLOT to the addess -> temp slot mapping. */
665 static void
666 insert_temp_slot_address (rtx address, struct temp_slot *temp_slot)
668 void **slot;
669 struct temp_slot_address_entry *t = ggc_alloc_temp_slot_address_entry ();
670 t->address = address;
671 t->temp_slot = temp_slot;
672 t->hash = temp_slot_address_compute_hash (t);
673 slot = htab_find_slot_with_hash (temp_slot_address_table, t, t->hash, INSERT);
674 *slot = t;
677 /* Remove an address -> temp slot mapping entry if the temp slot is
678 not in use anymore. Callback for remove_unused_temp_slot_addresses. */
679 static int
680 remove_unused_temp_slot_addresses_1 (void **slot, void *data ATTRIBUTE_UNUSED)
682 const struct temp_slot_address_entry *t;
683 t = (const struct temp_slot_address_entry *) *slot;
684 if (! t->temp_slot->in_use)
685 htab_clear_slot (temp_slot_address_table, slot);
686 return 1;
689 /* Remove all mappings of addresses to unused temp slots. */
690 static void
691 remove_unused_temp_slot_addresses (void)
693 /* Use quicker clearing if there aren't any active temp slots. */
694 if (n_temp_slots_in_use)
695 htab_traverse (temp_slot_address_table,
696 remove_unused_temp_slot_addresses_1,
697 NULL);
698 else
699 htab_empty (temp_slot_address_table);
702 /* Find the temp slot corresponding to the object at address X. */
704 static struct temp_slot *
705 find_temp_slot_from_address (rtx x)
707 struct temp_slot *p;
708 struct temp_slot_address_entry tmp, *t;
710 /* First try the easy way:
711 See if X exists in the address -> temp slot mapping. */
712 tmp.address = x;
713 tmp.temp_slot = NULL;
714 tmp.hash = temp_slot_address_compute_hash (&tmp);
715 t = (struct temp_slot_address_entry *)
716 htab_find_with_hash (temp_slot_address_table, &tmp, tmp.hash);
717 if (t)
718 return t->temp_slot;
720 /* If we have a sum involving a register, see if it points to a temp
721 slot. */
722 if (GET_CODE (x) == PLUS && REG_P (XEXP (x, 0))
723 && (p = find_temp_slot_from_address (XEXP (x, 0))) != 0)
724 return p;
725 else if (GET_CODE (x) == PLUS && REG_P (XEXP (x, 1))
726 && (p = find_temp_slot_from_address (XEXP (x, 1))) != 0)
727 return p;
729 /* Last resort: Address is a virtual stack var address. */
730 if (GET_CODE (x) == PLUS
731 && XEXP (x, 0) == virtual_stack_vars_rtx
732 && CONST_INT_P (XEXP (x, 1)))
734 int i;
735 for (i = max_slot_level (); i >= 0; i--)
736 for (p = *temp_slots_at_level (i); p; p = p->next)
738 if (INTVAL (XEXP (x, 1)) >= p->base_offset
739 && INTVAL (XEXP (x, 1)) < p->base_offset + p->full_size)
740 return p;
744 return NULL;
747 /* Allocate a temporary stack slot and record it for possible later
748 reuse.
750 MODE is the machine mode to be given to the returned rtx.
752 SIZE is the size in units of the space required. We do no rounding here
753 since assign_stack_local will do any required rounding.
755 TYPE is the type that will be used for the stack slot. */
758 assign_stack_temp_for_type (enum machine_mode mode, HOST_WIDE_INT size,
759 tree type)
761 unsigned int align;
762 struct temp_slot *p, *best_p = 0, *selected = NULL, **pp;
763 rtx slot;
765 /* If SIZE is -1 it means that somebody tried to allocate a temporary
766 of a variable size. */
767 gcc_assert (size != -1);
769 align = get_stack_local_alignment (type, mode);
771 /* Try to find an available, already-allocated temporary of the proper
772 mode which meets the size and alignment requirements. Choose the
773 smallest one with the closest alignment.
775 If assign_stack_temp is called outside of the tree->rtl expansion,
776 we cannot reuse the stack slots (that may still refer to
777 VIRTUAL_STACK_VARS_REGNUM). */
778 if (!virtuals_instantiated)
780 for (p = avail_temp_slots; p; p = p->next)
782 if (p->align >= align && p->size >= size
783 && GET_MODE (p->slot) == mode
784 && objects_must_conflict_p (p->type, type)
785 && (best_p == 0 || best_p->size > p->size
786 || (best_p->size == p->size && best_p->align > p->align)))
788 if (p->align == align && p->size == size)
790 selected = p;
791 cut_slot_from_list (selected, &avail_temp_slots);
792 best_p = 0;
793 break;
795 best_p = p;
800 /* Make our best, if any, the one to use. */
801 if (best_p)
803 selected = best_p;
804 cut_slot_from_list (selected, &avail_temp_slots);
806 /* If there are enough aligned bytes left over, make them into a new
807 temp_slot so that the extra bytes don't get wasted. Do this only
808 for BLKmode slots, so that we can be sure of the alignment. */
809 if (GET_MODE (best_p->slot) == BLKmode)
811 int alignment = best_p->align / BITS_PER_UNIT;
812 HOST_WIDE_INT rounded_size = CEIL_ROUND (size, alignment);
814 if (best_p->size - rounded_size >= alignment)
816 p = ggc_alloc_temp_slot ();
817 p->in_use = 0;
818 p->size = best_p->size - rounded_size;
819 p->base_offset = best_p->base_offset + rounded_size;
820 p->full_size = best_p->full_size - rounded_size;
821 p->slot = adjust_address_nv (best_p->slot, BLKmode, rounded_size);
822 p->align = best_p->align;
823 p->type = best_p->type;
824 insert_slot_to_list (p, &avail_temp_slots);
826 stack_slot_list = gen_rtx_EXPR_LIST (VOIDmode, p->slot,
827 stack_slot_list);
829 best_p->size = rounded_size;
830 best_p->full_size = rounded_size;
835 /* If we still didn't find one, make a new temporary. */
836 if (selected == 0)
838 HOST_WIDE_INT frame_offset_old = frame_offset;
840 p = ggc_alloc_temp_slot ();
842 /* We are passing an explicit alignment request to assign_stack_local.
843 One side effect of that is assign_stack_local will not round SIZE
844 to ensure the frame offset remains suitably aligned.
846 So for requests which depended on the rounding of SIZE, we go ahead
847 and round it now. We also make sure ALIGNMENT is at least
848 BIGGEST_ALIGNMENT. */
849 gcc_assert (mode != BLKmode || align == BIGGEST_ALIGNMENT);
850 p->slot = assign_stack_local_1 (mode,
851 (mode == BLKmode
852 ? CEIL_ROUND (size,
853 (int) align
854 / BITS_PER_UNIT)
855 : size),
856 align, 0);
858 p->align = align;
860 /* The following slot size computation is necessary because we don't
861 know the actual size of the temporary slot until assign_stack_local
862 has performed all the frame alignment and size rounding for the
863 requested temporary. Note that extra space added for alignment
864 can be either above or below this stack slot depending on which
865 way the frame grows. We include the extra space if and only if it
866 is above this slot. */
867 if (FRAME_GROWS_DOWNWARD)
868 p->size = frame_offset_old - frame_offset;
869 else
870 p->size = size;
872 /* Now define the fields used by combine_temp_slots. */
873 if (FRAME_GROWS_DOWNWARD)
875 p->base_offset = frame_offset;
876 p->full_size = frame_offset_old - frame_offset;
878 else
880 p->base_offset = frame_offset_old;
881 p->full_size = frame_offset - frame_offset_old;
884 selected = p;
887 p = selected;
888 p->in_use = 1;
889 p->type = type;
890 p->level = temp_slot_level;
891 n_temp_slots_in_use++;
893 pp = temp_slots_at_level (p->level);
894 insert_slot_to_list (p, pp);
895 insert_temp_slot_address (XEXP (p->slot, 0), p);
897 /* Create a new MEM rtx to avoid clobbering MEM flags of old slots. */
898 slot = gen_rtx_MEM (mode, XEXP (p->slot, 0));
899 stack_slot_list = gen_rtx_EXPR_LIST (VOIDmode, slot, stack_slot_list);
901 /* If we know the alias set for the memory that will be used, use
902 it. If there's no TYPE, then we don't know anything about the
903 alias set for the memory. */
904 set_mem_alias_set (slot, type ? get_alias_set (type) : 0);
905 set_mem_align (slot, align);
907 /* If a type is specified, set the relevant flags. */
908 if (type != 0)
909 MEM_VOLATILE_P (slot) = TYPE_VOLATILE (type);
910 MEM_NOTRAP_P (slot) = 1;
912 return slot;
915 /* Allocate a temporary stack slot and record it for possible later
916 reuse. First two arguments are same as in preceding function. */
919 assign_stack_temp (enum machine_mode mode, HOST_WIDE_INT size)
921 return assign_stack_temp_for_type (mode, size, NULL_TREE);
924 /* Assign a temporary.
925 If TYPE_OR_DECL is a decl, then we are doing it on behalf of the decl
926 and so that should be used in error messages. In either case, we
927 allocate of the given type.
928 MEMORY_REQUIRED is 1 if the result must be addressable stack memory;
929 it is 0 if a register is OK.
930 DONT_PROMOTE is 1 if we should not promote values in register
931 to wider modes. */
934 assign_temp (tree type_or_decl, int memory_required,
935 int dont_promote ATTRIBUTE_UNUSED)
937 tree type, decl;
938 enum machine_mode mode;
939 #ifdef PROMOTE_MODE
940 int unsignedp;
941 #endif
943 if (DECL_P (type_or_decl))
944 decl = type_or_decl, type = TREE_TYPE (decl);
945 else
946 decl = NULL, type = type_or_decl;
948 mode = TYPE_MODE (type);
949 #ifdef PROMOTE_MODE
950 unsignedp = TYPE_UNSIGNED (type);
951 #endif
953 if (mode == BLKmode || memory_required)
955 HOST_WIDE_INT size = int_size_in_bytes (type);
956 rtx tmp;
958 /* Zero sized arrays are GNU C extension. Set size to 1 to avoid
959 problems with allocating the stack space. */
960 if (size == 0)
961 size = 1;
963 /* Unfortunately, we don't yet know how to allocate variable-sized
964 temporaries. However, sometimes we can find a fixed upper limit on
965 the size, so try that instead. */
966 else if (size == -1)
967 size = max_int_size_in_bytes (type);
969 /* The size of the temporary may be too large to fit into an integer. */
970 /* ??? Not sure this should happen except for user silliness, so limit
971 this to things that aren't compiler-generated temporaries. The
972 rest of the time we'll die in assign_stack_temp_for_type. */
973 if (decl && size == -1
974 && TREE_CODE (TYPE_SIZE_UNIT (type)) == INTEGER_CST)
976 error ("size of variable %q+D is too large", decl);
977 size = 1;
980 tmp = assign_stack_temp_for_type (mode, size, type);
981 return tmp;
984 #ifdef PROMOTE_MODE
985 if (! dont_promote)
986 mode = promote_mode (type, mode, &unsignedp);
987 #endif
989 return gen_reg_rtx (mode);
992 /* Combine temporary stack slots which are adjacent on the stack.
994 This allows for better use of already allocated stack space. This is only
995 done for BLKmode slots because we can be sure that we won't have alignment
996 problems in this case. */
998 static void
999 combine_temp_slots (void)
1001 struct temp_slot *p, *q, *next, *next_q;
1002 int num_slots;
1004 /* We can't combine slots, because the information about which slot
1005 is in which alias set will be lost. */
1006 if (flag_strict_aliasing)
1007 return;
1009 /* If there are a lot of temp slots, don't do anything unless
1010 high levels of optimization. */
1011 if (! flag_expensive_optimizations)
1012 for (p = avail_temp_slots, num_slots = 0; p; p = p->next, num_slots++)
1013 if (num_slots > 100 || (num_slots > 10 && optimize == 0))
1014 return;
1016 for (p = avail_temp_slots; p; p = next)
1018 int delete_p = 0;
1020 next = p->next;
1022 if (GET_MODE (p->slot) != BLKmode)
1023 continue;
1025 for (q = p->next; q; q = next_q)
1027 int delete_q = 0;
1029 next_q = q->next;
1031 if (GET_MODE (q->slot) != BLKmode)
1032 continue;
1034 if (p->base_offset + p->full_size == q->base_offset)
1036 /* Q comes after P; combine Q into P. */
1037 p->size += q->size;
1038 p->full_size += q->full_size;
1039 delete_q = 1;
1041 else if (q->base_offset + q->full_size == p->base_offset)
1043 /* P comes after Q; combine P into Q. */
1044 q->size += p->size;
1045 q->full_size += p->full_size;
1046 delete_p = 1;
1047 break;
1049 if (delete_q)
1050 cut_slot_from_list (q, &avail_temp_slots);
1053 /* Either delete P or advance past it. */
1054 if (delete_p)
1055 cut_slot_from_list (p, &avail_temp_slots);
1059 /* Indicate that NEW_RTX is an alternate way of referring to the temp
1060 slot that previously was known by OLD_RTX. */
1062 void
1063 update_temp_slot_address (rtx old_rtx, rtx new_rtx)
1065 struct temp_slot *p;
1067 if (rtx_equal_p (old_rtx, new_rtx))
1068 return;
1070 p = find_temp_slot_from_address (old_rtx);
1072 /* If we didn't find one, see if both OLD_RTX is a PLUS. If so, and
1073 NEW_RTX is a register, see if one operand of the PLUS is a
1074 temporary location. If so, NEW_RTX points into it. Otherwise,
1075 if both OLD_RTX and NEW_RTX are a PLUS and if there is a register
1076 in common between them. If so, try a recursive call on those
1077 values. */
1078 if (p == 0)
1080 if (GET_CODE (old_rtx) != PLUS)
1081 return;
1083 if (REG_P (new_rtx))
1085 update_temp_slot_address (XEXP (old_rtx, 0), new_rtx);
1086 update_temp_slot_address (XEXP (old_rtx, 1), new_rtx);
1087 return;
1089 else if (GET_CODE (new_rtx) != PLUS)
1090 return;
1092 if (rtx_equal_p (XEXP (old_rtx, 0), XEXP (new_rtx, 0)))
1093 update_temp_slot_address (XEXP (old_rtx, 1), XEXP (new_rtx, 1));
1094 else if (rtx_equal_p (XEXP (old_rtx, 1), XEXP (new_rtx, 0)))
1095 update_temp_slot_address (XEXP (old_rtx, 0), XEXP (new_rtx, 1));
1096 else if (rtx_equal_p (XEXP (old_rtx, 0), XEXP (new_rtx, 1)))
1097 update_temp_slot_address (XEXP (old_rtx, 1), XEXP (new_rtx, 0));
1098 else if (rtx_equal_p (XEXP (old_rtx, 1), XEXP (new_rtx, 1)))
1099 update_temp_slot_address (XEXP (old_rtx, 0), XEXP (new_rtx, 0));
1101 return;
1104 /* Otherwise add an alias for the temp's address. */
1105 insert_temp_slot_address (new_rtx, p);
1108 /* If X could be a reference to a temporary slot, mark that slot as
1109 belonging to the to one level higher than the current level. If X
1110 matched one of our slots, just mark that one. Otherwise, we can't
1111 easily predict which it is, so upgrade all of them.
1113 This is called when an ({...}) construct occurs and a statement
1114 returns a value in memory. */
1116 void
1117 preserve_temp_slots (rtx x)
1119 struct temp_slot *p = 0, *next;
1121 if (x == 0)
1122 return;
1124 /* If X is a register that is being used as a pointer, see if we have
1125 a temporary slot we know it points to. */
1126 if (REG_P (x) && REG_POINTER (x))
1127 p = find_temp_slot_from_address (x);
1129 /* If X is not in memory or is at a constant address, it cannot be in
1130 a temporary slot. */
1131 if (p == 0 && (!MEM_P (x) || CONSTANT_P (XEXP (x, 0))))
1132 return;
1134 /* First see if we can find a match. */
1135 if (p == 0)
1136 p = find_temp_slot_from_address (XEXP (x, 0));
1138 if (p != 0)
1140 if (p->level == temp_slot_level)
1141 move_slot_to_level (p, temp_slot_level - 1);
1142 return;
1145 /* Otherwise, preserve all non-kept slots at this level. */
1146 for (p = *temp_slots_at_level (temp_slot_level); p; p = next)
1148 next = p->next;
1149 move_slot_to_level (p, temp_slot_level - 1);
1153 /* Free all temporaries used so far. This is normally called at the
1154 end of generating code for a statement. */
1156 void
1157 free_temp_slots (void)
1159 struct temp_slot *p, *next;
1160 bool some_available = false;
1162 for (p = *temp_slots_at_level (temp_slot_level); p; p = next)
1164 next = p->next;
1165 make_slot_available (p);
1166 some_available = true;
1169 if (some_available)
1171 remove_unused_temp_slot_addresses ();
1172 combine_temp_slots ();
1176 /* Push deeper into the nesting level for stack temporaries. */
1178 void
1179 push_temp_slots (void)
1181 temp_slot_level++;
1184 /* Pop a temporary nesting level. All slots in use in the current level
1185 are freed. */
1187 void
1188 pop_temp_slots (void)
1190 free_temp_slots ();
1191 temp_slot_level--;
1194 /* Initialize temporary slots. */
1196 void
1197 init_temp_slots (void)
1199 /* We have not allocated any temporaries yet. */
1200 avail_temp_slots = 0;
1201 used_temp_slots = 0;
1202 temp_slot_level = 0;
1203 n_temp_slots_in_use = 0;
1205 /* Set up the table to map addresses to temp slots. */
1206 if (! temp_slot_address_table)
1207 temp_slot_address_table = htab_create_ggc (32,
1208 temp_slot_address_hash,
1209 temp_slot_address_eq,
1210 NULL);
1211 else
1212 htab_empty (temp_slot_address_table);
1215 /* Functions and data structures to keep track of the values hard regs
1216 had at the start of the function. */
1218 /* Private type used by get_hard_reg_initial_reg, get_hard_reg_initial_val,
1219 and has_hard_reg_initial_val.. */
1220 typedef struct GTY(()) initial_value_pair {
1221 rtx hard_reg;
1222 rtx pseudo;
1223 } initial_value_pair;
1224 /* ??? This could be a VEC but there is currently no way to define an
1225 opaque VEC type. This could be worked around by defining struct
1226 initial_value_pair in function.h. */
1227 typedef struct GTY(()) initial_value_struct {
1228 int num_entries;
1229 int max_entries;
1230 initial_value_pair * GTY ((length ("%h.num_entries"))) entries;
1231 } initial_value_struct;
1233 /* If a pseudo represents an initial hard reg (or expression), return
1234 it, else return NULL_RTX. */
1237 get_hard_reg_initial_reg (rtx reg)
1239 struct initial_value_struct *ivs = crtl->hard_reg_initial_vals;
1240 int i;
1242 if (ivs == 0)
1243 return NULL_RTX;
1245 for (i = 0; i < ivs->num_entries; i++)
1246 if (rtx_equal_p (ivs->entries[i].pseudo, reg))
1247 return ivs->entries[i].hard_reg;
1249 return NULL_RTX;
1252 /* Make sure that there's a pseudo register of mode MODE that stores the
1253 initial value of hard register REGNO. Return an rtx for such a pseudo. */
1256 get_hard_reg_initial_val (enum machine_mode mode, unsigned int regno)
1258 struct initial_value_struct *ivs;
1259 rtx rv;
1261 rv = has_hard_reg_initial_val (mode, regno);
1262 if (rv)
1263 return rv;
1265 ivs = crtl->hard_reg_initial_vals;
1266 if (ivs == 0)
1268 ivs = ggc_alloc_initial_value_struct ();
1269 ivs->num_entries = 0;
1270 ivs->max_entries = 5;
1271 ivs->entries = ggc_alloc_vec_initial_value_pair (5);
1272 crtl->hard_reg_initial_vals = ivs;
1275 if (ivs->num_entries >= ivs->max_entries)
1277 ivs->max_entries += 5;
1278 ivs->entries = GGC_RESIZEVEC (initial_value_pair, ivs->entries,
1279 ivs->max_entries);
1282 ivs->entries[ivs->num_entries].hard_reg = gen_rtx_REG (mode, regno);
1283 ivs->entries[ivs->num_entries].pseudo = gen_reg_rtx (mode);
1285 return ivs->entries[ivs->num_entries++].pseudo;
1288 /* See if get_hard_reg_initial_val has been used to create a pseudo
1289 for the initial value of hard register REGNO in mode MODE. Return
1290 the associated pseudo if so, otherwise return NULL. */
1293 has_hard_reg_initial_val (enum machine_mode mode, unsigned int regno)
1295 struct initial_value_struct *ivs;
1296 int i;
1298 ivs = crtl->hard_reg_initial_vals;
1299 if (ivs != 0)
1300 for (i = 0; i < ivs->num_entries; i++)
1301 if (GET_MODE (ivs->entries[i].hard_reg) == mode
1302 && REGNO (ivs->entries[i].hard_reg) == regno)
1303 return ivs->entries[i].pseudo;
1305 return NULL_RTX;
1308 unsigned int
1309 emit_initial_value_sets (void)
1311 struct initial_value_struct *ivs = crtl->hard_reg_initial_vals;
1312 int i;
1313 rtx seq;
1315 if (ivs == 0)
1316 return 0;
1318 start_sequence ();
1319 for (i = 0; i < ivs->num_entries; i++)
1320 emit_move_insn (ivs->entries[i].pseudo, ivs->entries[i].hard_reg);
1321 seq = get_insns ();
1322 end_sequence ();
1324 emit_insn_at_entry (seq);
1325 return 0;
1328 /* Return the hardreg-pseudoreg initial values pair entry I and
1329 TRUE if I is a valid entry, or FALSE if I is not a valid entry. */
1330 bool
1331 initial_value_entry (int i, rtx *hreg, rtx *preg)
1333 struct initial_value_struct *ivs = crtl->hard_reg_initial_vals;
1334 if (!ivs || i >= ivs->num_entries)
1335 return false;
1337 *hreg = ivs->entries[i].hard_reg;
1338 *preg = ivs->entries[i].pseudo;
1339 return true;
1342 /* These routines are responsible for converting virtual register references
1343 to the actual hard register references once RTL generation is complete.
1345 The following four variables are used for communication between the
1346 routines. They contain the offsets of the virtual registers from their
1347 respective hard registers. */
1349 static int in_arg_offset;
1350 static int var_offset;
1351 static int dynamic_offset;
1352 static int out_arg_offset;
1353 static int cfa_offset;
1355 /* In most machines, the stack pointer register is equivalent to the bottom
1356 of the stack. */
1358 #ifndef STACK_POINTER_OFFSET
1359 #define STACK_POINTER_OFFSET 0
1360 #endif
1362 /* If not defined, pick an appropriate default for the offset of dynamically
1363 allocated memory depending on the value of ACCUMULATE_OUTGOING_ARGS,
1364 REG_PARM_STACK_SPACE, and OUTGOING_REG_PARM_STACK_SPACE. */
1366 #ifndef STACK_DYNAMIC_OFFSET
1368 /* The bottom of the stack points to the actual arguments. If
1369 REG_PARM_STACK_SPACE is defined, this includes the space for the register
1370 parameters. However, if OUTGOING_REG_PARM_STACK space is not defined,
1371 stack space for register parameters is not pushed by the caller, but
1372 rather part of the fixed stack areas and hence not included in
1373 `crtl->outgoing_args_size'. Nevertheless, we must allow
1374 for it when allocating stack dynamic objects. */
1376 #if defined(REG_PARM_STACK_SPACE)
1377 #define STACK_DYNAMIC_OFFSET(FNDECL) \
1378 ((ACCUMULATE_OUTGOING_ARGS \
1379 ? (crtl->outgoing_args_size \
1380 + (OUTGOING_REG_PARM_STACK_SPACE ((!(FNDECL) ? NULL_TREE : TREE_TYPE (FNDECL))) ? 0 \
1381 : REG_PARM_STACK_SPACE (FNDECL))) \
1382 : 0) + (STACK_POINTER_OFFSET))
1383 #else
1384 #define STACK_DYNAMIC_OFFSET(FNDECL) \
1385 ((ACCUMULATE_OUTGOING_ARGS ? crtl->outgoing_args_size : 0) \
1386 + (STACK_POINTER_OFFSET))
1387 #endif
1388 #endif
1391 /* Given a piece of RTX and a pointer to a HOST_WIDE_INT, if the RTX
1392 is a virtual register, return the equivalent hard register and set the
1393 offset indirectly through the pointer. Otherwise, return 0. */
1395 static rtx
1396 instantiate_new_reg (rtx x, HOST_WIDE_INT *poffset)
1398 rtx new_rtx;
1399 HOST_WIDE_INT offset;
1401 if (x == virtual_incoming_args_rtx)
1403 if (stack_realign_drap)
1405 /* Replace virtual_incoming_args_rtx with internal arg
1406 pointer if DRAP is used to realign stack. */
1407 new_rtx = crtl->args.internal_arg_pointer;
1408 offset = 0;
1410 else
1411 new_rtx = arg_pointer_rtx, offset = in_arg_offset;
1413 else if (x == virtual_stack_vars_rtx)
1414 new_rtx = frame_pointer_rtx, offset = var_offset;
1415 else if (x == virtual_stack_dynamic_rtx)
1416 new_rtx = stack_pointer_rtx, offset = dynamic_offset;
1417 else if (x == virtual_outgoing_args_rtx)
1418 new_rtx = stack_pointer_rtx, offset = out_arg_offset;
1419 else if (x == virtual_cfa_rtx)
1421 #ifdef FRAME_POINTER_CFA_OFFSET
1422 new_rtx = frame_pointer_rtx;
1423 #else
1424 new_rtx = arg_pointer_rtx;
1425 #endif
1426 offset = cfa_offset;
1428 else if (x == virtual_preferred_stack_boundary_rtx)
1430 new_rtx = GEN_INT (crtl->preferred_stack_boundary / BITS_PER_UNIT);
1431 offset = 0;
1433 else
1434 return NULL_RTX;
1436 *poffset = offset;
1437 return new_rtx;
1440 /* A subroutine of instantiate_virtual_regs, called via for_each_rtx.
1441 Instantiate any virtual registers present inside of *LOC. The expression
1442 is simplified, as much as possible, but is not to be considered "valid"
1443 in any sense implied by the target. If any change is made, set CHANGED
1444 to true. */
1446 static int
1447 instantiate_virtual_regs_in_rtx (rtx *loc, void *data)
1449 HOST_WIDE_INT offset;
1450 bool *changed = (bool *) data;
1451 rtx x, new_rtx;
1453 x = *loc;
1454 if (x == 0)
1455 return 0;
1457 switch (GET_CODE (x))
1459 case REG:
1460 new_rtx = instantiate_new_reg (x, &offset);
1461 if (new_rtx)
1463 *loc = plus_constant (GET_MODE (x), new_rtx, offset);
1464 if (changed)
1465 *changed = true;
1467 return -1;
1469 case PLUS:
1470 new_rtx = instantiate_new_reg (XEXP (x, 0), &offset);
1471 if (new_rtx)
1473 new_rtx = plus_constant (GET_MODE (x), new_rtx, offset);
1474 *loc = simplify_gen_binary (PLUS, GET_MODE (x), new_rtx, XEXP (x, 1));
1475 if (changed)
1476 *changed = true;
1477 return -1;
1480 /* FIXME -- from old code */
1481 /* If we have (plus (subreg (virtual-reg)) (const_int)), we know
1482 we can commute the PLUS and SUBREG because pointers into the
1483 frame are well-behaved. */
1484 break;
1486 default:
1487 break;
1490 return 0;
1493 /* A subroutine of instantiate_virtual_regs_in_insn. Return true if X
1494 matches the predicate for insn CODE operand OPERAND. */
1496 static int
1497 safe_insn_predicate (int code, int operand, rtx x)
1499 return code < 0 || insn_operand_matches ((enum insn_code) code, operand, x);
1502 /* A subroutine of instantiate_virtual_regs. Instantiate any virtual
1503 registers present inside of insn. The result will be a valid insn. */
1505 static void
1506 instantiate_virtual_regs_in_insn (rtx insn)
1508 HOST_WIDE_INT offset;
1509 int insn_code, i;
1510 bool any_change = false;
1511 rtx set, new_rtx, x, seq;
1513 /* There are some special cases to be handled first. */
1514 set = single_set (insn);
1515 if (set)
1517 /* We're allowed to assign to a virtual register. This is interpreted
1518 to mean that the underlying register gets assigned the inverse
1519 transformation. This is used, for example, in the handling of
1520 non-local gotos. */
1521 new_rtx = instantiate_new_reg (SET_DEST (set), &offset);
1522 if (new_rtx)
1524 start_sequence ();
1526 for_each_rtx (&SET_SRC (set), instantiate_virtual_regs_in_rtx, NULL);
1527 x = simplify_gen_binary (PLUS, GET_MODE (new_rtx), SET_SRC (set),
1528 GEN_INT (-offset));
1529 x = force_operand (x, new_rtx);
1530 if (x != new_rtx)
1531 emit_move_insn (new_rtx, x);
1533 seq = get_insns ();
1534 end_sequence ();
1536 emit_insn_before (seq, insn);
1537 delete_insn (insn);
1538 return;
1541 /* Handle a straight copy from a virtual register by generating a
1542 new add insn. The difference between this and falling through
1543 to the generic case is avoiding a new pseudo and eliminating a
1544 move insn in the initial rtl stream. */
1545 new_rtx = instantiate_new_reg (SET_SRC (set), &offset);
1546 if (new_rtx && offset != 0
1547 && REG_P (SET_DEST (set))
1548 && REGNO (SET_DEST (set)) > LAST_VIRTUAL_REGISTER)
1550 start_sequence ();
1552 x = expand_simple_binop (GET_MODE (SET_DEST (set)), PLUS,
1553 new_rtx, GEN_INT (offset), SET_DEST (set),
1554 1, OPTAB_LIB_WIDEN);
1555 if (x != SET_DEST (set))
1556 emit_move_insn (SET_DEST (set), x);
1558 seq = get_insns ();
1559 end_sequence ();
1561 emit_insn_before (seq, insn);
1562 delete_insn (insn);
1563 return;
1566 extract_insn (insn);
1567 insn_code = INSN_CODE (insn);
1569 /* Handle a plus involving a virtual register by determining if the
1570 operands remain valid if they're modified in place. */
1571 if (GET_CODE (SET_SRC (set)) == PLUS
1572 && recog_data.n_operands >= 3
1573 && recog_data.operand_loc[1] == &XEXP (SET_SRC (set), 0)
1574 && recog_data.operand_loc[2] == &XEXP (SET_SRC (set), 1)
1575 && CONST_INT_P (recog_data.operand[2])
1576 && (new_rtx = instantiate_new_reg (recog_data.operand[1], &offset)))
1578 offset += INTVAL (recog_data.operand[2]);
1580 /* If the sum is zero, then replace with a plain move. */
1581 if (offset == 0
1582 && REG_P (SET_DEST (set))
1583 && REGNO (SET_DEST (set)) > LAST_VIRTUAL_REGISTER)
1585 start_sequence ();
1586 emit_move_insn (SET_DEST (set), new_rtx);
1587 seq = get_insns ();
1588 end_sequence ();
1590 emit_insn_before (seq, insn);
1591 delete_insn (insn);
1592 return;
1595 x = gen_int_mode (offset, recog_data.operand_mode[2]);
1597 /* Using validate_change and apply_change_group here leaves
1598 recog_data in an invalid state. Since we know exactly what
1599 we want to check, do those two by hand. */
1600 if (safe_insn_predicate (insn_code, 1, new_rtx)
1601 && safe_insn_predicate (insn_code, 2, x))
1603 *recog_data.operand_loc[1] = recog_data.operand[1] = new_rtx;
1604 *recog_data.operand_loc[2] = recog_data.operand[2] = x;
1605 any_change = true;
1607 /* Fall through into the regular operand fixup loop in
1608 order to take care of operands other than 1 and 2. */
1612 else
1614 extract_insn (insn);
1615 insn_code = INSN_CODE (insn);
1618 /* In the general case, we expect virtual registers to appear only in
1619 operands, and then only as either bare registers or inside memories. */
1620 for (i = 0; i < recog_data.n_operands; ++i)
1622 x = recog_data.operand[i];
1623 switch (GET_CODE (x))
1625 case MEM:
1627 rtx addr = XEXP (x, 0);
1628 bool changed = false;
1630 for_each_rtx (&addr, instantiate_virtual_regs_in_rtx, &changed);
1631 if (!changed)
1632 continue;
1634 start_sequence ();
1635 x = replace_equiv_address (x, addr);
1636 /* It may happen that the address with the virtual reg
1637 was valid (e.g. based on the virtual stack reg, which might
1638 be acceptable to the predicates with all offsets), whereas
1639 the address now isn't anymore, for instance when the address
1640 is still offsetted, but the base reg isn't virtual-stack-reg
1641 anymore. Below we would do a force_reg on the whole operand,
1642 but this insn might actually only accept memory. Hence,
1643 before doing that last resort, try to reload the address into
1644 a register, so this operand stays a MEM. */
1645 if (!safe_insn_predicate (insn_code, i, x))
1647 addr = force_reg (GET_MODE (addr), addr);
1648 x = replace_equiv_address (x, addr);
1650 seq = get_insns ();
1651 end_sequence ();
1652 if (seq)
1653 emit_insn_before (seq, insn);
1655 break;
1657 case REG:
1658 new_rtx = instantiate_new_reg (x, &offset);
1659 if (new_rtx == NULL)
1660 continue;
1661 if (offset == 0)
1662 x = new_rtx;
1663 else
1665 start_sequence ();
1667 /* Careful, special mode predicates may have stuff in
1668 insn_data[insn_code].operand[i].mode that isn't useful
1669 to us for computing a new value. */
1670 /* ??? Recognize address_operand and/or "p" constraints
1671 to see if (plus new offset) is a valid before we put
1672 this through expand_simple_binop. */
1673 x = expand_simple_binop (GET_MODE (x), PLUS, new_rtx,
1674 GEN_INT (offset), NULL_RTX,
1675 1, OPTAB_LIB_WIDEN);
1676 seq = get_insns ();
1677 end_sequence ();
1678 emit_insn_before (seq, insn);
1680 break;
1682 case SUBREG:
1683 new_rtx = instantiate_new_reg (SUBREG_REG (x), &offset);
1684 if (new_rtx == NULL)
1685 continue;
1686 if (offset != 0)
1688 start_sequence ();
1689 new_rtx = expand_simple_binop (GET_MODE (new_rtx), PLUS, new_rtx,
1690 GEN_INT (offset), NULL_RTX,
1691 1, OPTAB_LIB_WIDEN);
1692 seq = get_insns ();
1693 end_sequence ();
1694 emit_insn_before (seq, insn);
1696 x = simplify_gen_subreg (recog_data.operand_mode[i], new_rtx,
1697 GET_MODE (new_rtx), SUBREG_BYTE (x));
1698 gcc_assert (x);
1699 break;
1701 default:
1702 continue;
1705 /* At this point, X contains the new value for the operand.
1706 Validate the new value vs the insn predicate. Note that
1707 asm insns will have insn_code -1 here. */
1708 if (!safe_insn_predicate (insn_code, i, x))
1710 start_sequence ();
1711 if (REG_P (x))
1713 gcc_assert (REGNO (x) <= LAST_VIRTUAL_REGISTER);
1714 x = copy_to_reg (x);
1716 else
1717 x = force_reg (insn_data[insn_code].operand[i].mode, x);
1718 seq = get_insns ();
1719 end_sequence ();
1720 if (seq)
1721 emit_insn_before (seq, insn);
1724 *recog_data.operand_loc[i] = recog_data.operand[i] = x;
1725 any_change = true;
1728 if (any_change)
1730 /* Propagate operand changes into the duplicates. */
1731 for (i = 0; i < recog_data.n_dups; ++i)
1732 *recog_data.dup_loc[i]
1733 = copy_rtx (recog_data.operand[(unsigned)recog_data.dup_num[i]]);
1735 /* Force re-recognition of the instruction for validation. */
1736 INSN_CODE (insn) = -1;
1739 if (asm_noperands (PATTERN (insn)) >= 0)
1741 if (!check_asm_operands (PATTERN (insn)))
1743 error_for_asm (insn, "impossible constraint in %<asm%>");
1744 delete_insn_and_edges (insn);
1747 else
1749 if (recog_memoized (insn) < 0)
1750 fatal_insn_not_found (insn);
1754 /* Subroutine of instantiate_decls. Given RTL representing a decl,
1755 do any instantiation required. */
1757 void
1758 instantiate_decl_rtl (rtx x)
1760 rtx addr;
1762 if (x == 0)
1763 return;
1765 /* If this is a CONCAT, recurse for the pieces. */
1766 if (GET_CODE (x) == CONCAT)
1768 instantiate_decl_rtl (XEXP (x, 0));
1769 instantiate_decl_rtl (XEXP (x, 1));
1770 return;
1773 /* If this is not a MEM, no need to do anything. Similarly if the
1774 address is a constant or a register that is not a virtual register. */
1775 if (!MEM_P (x))
1776 return;
1778 addr = XEXP (x, 0);
1779 if (CONSTANT_P (addr)
1780 || (REG_P (addr)
1781 && (REGNO (addr) < FIRST_VIRTUAL_REGISTER
1782 || REGNO (addr) > LAST_VIRTUAL_REGISTER)))
1783 return;
1785 for_each_rtx (&XEXP (x, 0), instantiate_virtual_regs_in_rtx, NULL);
1788 /* Helper for instantiate_decls called via walk_tree: Process all decls
1789 in the given DECL_VALUE_EXPR. */
1791 static tree
1792 instantiate_expr (tree *tp, int *walk_subtrees, void *data ATTRIBUTE_UNUSED)
1794 tree t = *tp;
1795 if (! EXPR_P (t))
1797 *walk_subtrees = 0;
1798 if (DECL_P (t))
1800 if (DECL_RTL_SET_P (t))
1801 instantiate_decl_rtl (DECL_RTL (t));
1802 if (TREE_CODE (t) == PARM_DECL && DECL_NAMELESS (t)
1803 && DECL_INCOMING_RTL (t))
1804 instantiate_decl_rtl (DECL_INCOMING_RTL (t));
1805 if ((TREE_CODE (t) == VAR_DECL
1806 || TREE_CODE (t) == RESULT_DECL)
1807 && DECL_HAS_VALUE_EXPR_P (t))
1809 tree v = DECL_VALUE_EXPR (t);
1810 walk_tree (&v, instantiate_expr, NULL, NULL);
1814 return NULL;
1817 /* Subroutine of instantiate_decls: Process all decls in the given
1818 BLOCK node and all its subblocks. */
1820 static void
1821 instantiate_decls_1 (tree let)
1823 tree t;
1825 for (t = BLOCK_VARS (let); t; t = DECL_CHAIN (t))
1827 if (DECL_RTL_SET_P (t))
1828 instantiate_decl_rtl (DECL_RTL (t));
1829 if (TREE_CODE (t) == VAR_DECL && DECL_HAS_VALUE_EXPR_P (t))
1831 tree v = DECL_VALUE_EXPR (t);
1832 walk_tree (&v, instantiate_expr, NULL, NULL);
1836 /* Process all subblocks. */
1837 for (t = BLOCK_SUBBLOCKS (let); t; t = BLOCK_CHAIN (t))
1838 instantiate_decls_1 (t);
1841 /* Scan all decls in FNDECL (both variables and parameters) and instantiate
1842 all virtual registers in their DECL_RTL's. */
1844 static void
1845 instantiate_decls (tree fndecl)
1847 tree decl;
1848 unsigned ix;
1850 /* Process all parameters of the function. */
1851 for (decl = DECL_ARGUMENTS (fndecl); decl; decl = DECL_CHAIN (decl))
1853 instantiate_decl_rtl (DECL_RTL (decl));
1854 instantiate_decl_rtl (DECL_INCOMING_RTL (decl));
1855 if (DECL_HAS_VALUE_EXPR_P (decl))
1857 tree v = DECL_VALUE_EXPR (decl);
1858 walk_tree (&v, instantiate_expr, NULL, NULL);
1862 if ((decl = DECL_RESULT (fndecl))
1863 && TREE_CODE (decl) == RESULT_DECL)
1865 if (DECL_RTL_SET_P (decl))
1866 instantiate_decl_rtl (DECL_RTL (decl));
1867 if (DECL_HAS_VALUE_EXPR_P (decl))
1869 tree v = DECL_VALUE_EXPR (decl);
1870 walk_tree (&v, instantiate_expr, NULL, NULL);
1874 /* Now process all variables defined in the function or its subblocks. */
1875 instantiate_decls_1 (DECL_INITIAL (fndecl));
1877 FOR_EACH_LOCAL_DECL (cfun, ix, decl)
1878 if (DECL_RTL_SET_P (decl))
1879 instantiate_decl_rtl (DECL_RTL (decl));
1880 VEC_free (tree, gc, cfun->local_decls);
1883 /* Pass through the INSNS of function FNDECL and convert virtual register
1884 references to hard register references. */
1886 static unsigned int
1887 instantiate_virtual_regs (void)
1889 rtx insn;
1891 /* Compute the offsets to use for this function. */
1892 in_arg_offset = FIRST_PARM_OFFSET (current_function_decl);
1893 var_offset = STARTING_FRAME_OFFSET;
1894 dynamic_offset = STACK_DYNAMIC_OFFSET (current_function_decl);
1895 out_arg_offset = STACK_POINTER_OFFSET;
1896 #ifdef FRAME_POINTER_CFA_OFFSET
1897 cfa_offset = FRAME_POINTER_CFA_OFFSET (current_function_decl);
1898 #else
1899 cfa_offset = ARG_POINTER_CFA_OFFSET (current_function_decl);
1900 #endif
1902 /* Initialize recognition, indicating that volatile is OK. */
1903 init_recog ();
1905 /* Scan through all the insns, instantiating every virtual register still
1906 present. */
1907 for (insn = get_insns (); insn; insn = NEXT_INSN (insn))
1908 if (INSN_P (insn))
1910 /* These patterns in the instruction stream can never be recognized.
1911 Fortunately, they shouldn't contain virtual registers either. */
1912 if (GET_CODE (PATTERN (insn)) == USE
1913 || GET_CODE (PATTERN (insn)) == CLOBBER
1914 || GET_CODE (PATTERN (insn)) == ADDR_VEC
1915 || GET_CODE (PATTERN (insn)) == ADDR_DIFF_VEC
1916 || GET_CODE (PATTERN (insn)) == ASM_INPUT)
1917 continue;
1918 else if (DEBUG_INSN_P (insn))
1919 for_each_rtx (&INSN_VAR_LOCATION (insn),
1920 instantiate_virtual_regs_in_rtx, NULL);
1921 else
1922 instantiate_virtual_regs_in_insn (insn);
1924 if (INSN_DELETED_P (insn))
1925 continue;
1927 for_each_rtx (&REG_NOTES (insn), instantiate_virtual_regs_in_rtx, NULL);
1929 /* Instantiate any virtual registers in CALL_INSN_FUNCTION_USAGE. */
1930 if (CALL_P (insn))
1931 for_each_rtx (&CALL_INSN_FUNCTION_USAGE (insn),
1932 instantiate_virtual_regs_in_rtx, NULL);
1935 /* Instantiate the virtual registers in the DECLs for debugging purposes. */
1936 instantiate_decls (current_function_decl);
1938 targetm.instantiate_decls ();
1940 /* Indicate that, from now on, assign_stack_local should use
1941 frame_pointer_rtx. */
1942 virtuals_instantiated = 1;
1944 return 0;
1947 struct rtl_opt_pass pass_instantiate_virtual_regs =
1950 RTL_PASS,
1951 "vregs", /* name */
1952 NULL, /* gate */
1953 instantiate_virtual_regs, /* execute */
1954 NULL, /* sub */
1955 NULL, /* next */
1956 0, /* static_pass_number */
1957 TV_NONE, /* tv_id */
1958 0, /* properties_required */
1959 0, /* properties_provided */
1960 0, /* properties_destroyed */
1961 0, /* todo_flags_start */
1962 0 /* todo_flags_finish */
1967 /* Return 1 if EXP is an aggregate type (or a value with aggregate type).
1968 This means a type for which function calls must pass an address to the
1969 function or get an address back from the function.
1970 EXP may be a type node or an expression (whose type is tested). */
1973 aggregate_value_p (const_tree exp, const_tree fntype)
1975 const_tree type = (TYPE_P (exp)) ? exp : TREE_TYPE (exp);
1976 int i, regno, nregs;
1977 rtx reg;
1979 if (fntype)
1980 switch (TREE_CODE (fntype))
1982 case CALL_EXPR:
1984 tree fndecl = get_callee_fndecl (fntype);
1985 fntype = (fndecl
1986 ? TREE_TYPE (fndecl)
1987 : TREE_TYPE (TREE_TYPE (CALL_EXPR_FN (fntype))));
1989 break;
1990 case FUNCTION_DECL:
1991 fntype = TREE_TYPE (fntype);
1992 break;
1993 case FUNCTION_TYPE:
1994 case METHOD_TYPE:
1995 break;
1996 case IDENTIFIER_NODE:
1997 fntype = NULL_TREE;
1998 break;
1999 default:
2000 /* We don't expect other tree types here. */
2001 gcc_unreachable ();
2004 if (VOID_TYPE_P (type))
2005 return 0;
2007 /* If a record should be passed the same as its first (and only) member
2008 don't pass it as an aggregate. */
2009 if (TREE_CODE (type) == RECORD_TYPE && TYPE_TRANSPARENT_AGGR (type))
2010 return aggregate_value_p (first_field (type), fntype);
2012 /* If the front end has decided that this needs to be passed by
2013 reference, do so. */
2014 if ((TREE_CODE (exp) == PARM_DECL || TREE_CODE (exp) == RESULT_DECL)
2015 && DECL_BY_REFERENCE (exp))
2016 return 1;
2018 /* Function types that are TREE_ADDRESSABLE force return in memory. */
2019 if (fntype && TREE_ADDRESSABLE (fntype))
2020 return 1;
2022 /* Types that are TREE_ADDRESSABLE must be constructed in memory,
2023 and thus can't be returned in registers. */
2024 if (TREE_ADDRESSABLE (type))
2025 return 1;
2027 if (flag_pcc_struct_return && AGGREGATE_TYPE_P (type))
2028 return 1;
2030 if (targetm.calls.return_in_memory (type, fntype))
2031 return 1;
2033 /* Make sure we have suitable call-clobbered regs to return
2034 the value in; if not, we must return it in memory. */
2035 reg = hard_function_value (type, 0, fntype, 0);
2037 /* If we have something other than a REG (e.g. a PARALLEL), then assume
2038 it is OK. */
2039 if (!REG_P (reg))
2040 return 0;
2042 regno = REGNO (reg);
2043 nregs = hard_regno_nregs[regno][TYPE_MODE (type)];
2044 for (i = 0; i < nregs; i++)
2045 if (! call_used_regs[regno + i])
2046 return 1;
2048 return 0;
2051 /* Return true if we should assign DECL a pseudo register; false if it
2052 should live on the local stack. */
2054 bool
2055 use_register_for_decl (const_tree decl)
2057 if (!targetm.calls.allocate_stack_slots_for_args())
2058 return true;
2060 /* Honor volatile. */
2061 if (TREE_SIDE_EFFECTS (decl))
2062 return false;
2064 /* Honor addressability. */
2065 if (TREE_ADDRESSABLE (decl))
2066 return false;
2068 /* Only register-like things go in registers. */
2069 if (DECL_MODE (decl) == BLKmode)
2070 return false;
2072 /* If -ffloat-store specified, don't put explicit float variables
2073 into registers. */
2074 /* ??? This should be checked after DECL_ARTIFICIAL, but tree-ssa
2075 propagates values across these stores, and it probably shouldn't. */
2076 if (flag_float_store && FLOAT_TYPE_P (TREE_TYPE (decl)))
2077 return false;
2079 /* If we're not interested in tracking debugging information for
2080 this decl, then we can certainly put it in a register. */
2081 if (DECL_IGNORED_P (decl))
2082 return true;
2084 if (optimize)
2085 return true;
2087 if (!DECL_REGISTER (decl))
2088 return false;
2090 switch (TREE_CODE (TREE_TYPE (decl)))
2092 case RECORD_TYPE:
2093 case UNION_TYPE:
2094 case QUAL_UNION_TYPE:
2095 /* When not optimizing, disregard register keyword for variables with
2096 types containing methods, otherwise the methods won't be callable
2097 from the debugger. */
2098 if (TYPE_METHODS (TREE_TYPE (decl)))
2099 return false;
2100 break;
2101 default:
2102 break;
2105 return true;
2108 /* Return true if TYPE should be passed by invisible reference. */
2110 bool
2111 pass_by_reference (CUMULATIVE_ARGS *ca, enum machine_mode mode,
2112 tree type, bool named_arg)
2114 if (type)
2116 /* If this type contains non-trivial constructors, then it is
2117 forbidden for the middle-end to create any new copies. */
2118 if (TREE_ADDRESSABLE (type))
2119 return true;
2121 /* GCC post 3.4 passes *all* variable sized types by reference. */
2122 if (!TYPE_SIZE (type) || TREE_CODE (TYPE_SIZE (type)) != INTEGER_CST)
2123 return true;
2125 /* If a record type should be passed the same as its first (and only)
2126 member, use the type and mode of that member. */
2127 if (TREE_CODE (type) == RECORD_TYPE && TYPE_TRANSPARENT_AGGR (type))
2129 type = TREE_TYPE (first_field (type));
2130 mode = TYPE_MODE (type);
2134 return targetm.calls.pass_by_reference (pack_cumulative_args (ca), mode,
2135 type, named_arg);
2138 /* Return true if TYPE, which is passed by reference, should be callee
2139 copied instead of caller copied. */
2141 bool
2142 reference_callee_copied (CUMULATIVE_ARGS *ca, enum machine_mode mode,
2143 tree type, bool named_arg)
2145 if (type && TREE_ADDRESSABLE (type))
2146 return false;
2147 return targetm.calls.callee_copies (pack_cumulative_args (ca), mode, type,
2148 named_arg);
2151 /* Structures to communicate between the subroutines of assign_parms.
2152 The first holds data persistent across all parameters, the second
2153 is cleared out for each parameter. */
2155 struct assign_parm_data_all
2157 /* When INIT_CUMULATIVE_ARGS gets revamped, allocating CUMULATIVE_ARGS
2158 should become a job of the target or otherwise encapsulated. */
2159 CUMULATIVE_ARGS args_so_far_v;
2160 cumulative_args_t args_so_far;
2161 struct args_size stack_args_size;
2162 tree function_result_decl;
2163 tree orig_fnargs;
2164 rtx first_conversion_insn;
2165 rtx last_conversion_insn;
2166 HOST_WIDE_INT pretend_args_size;
2167 HOST_WIDE_INT extra_pretend_bytes;
2168 int reg_parm_stack_space;
2171 struct assign_parm_data_one
2173 tree nominal_type;
2174 tree passed_type;
2175 rtx entry_parm;
2176 rtx stack_parm;
2177 enum machine_mode nominal_mode;
2178 enum machine_mode passed_mode;
2179 enum machine_mode promoted_mode;
2180 struct locate_and_pad_arg_data locate;
2181 int partial;
2182 BOOL_BITFIELD named_arg : 1;
2183 BOOL_BITFIELD passed_pointer : 1;
2184 BOOL_BITFIELD on_stack : 1;
2185 BOOL_BITFIELD loaded_in_reg : 1;
2188 /* A subroutine of assign_parms. Initialize ALL. */
2190 static void
2191 assign_parms_initialize_all (struct assign_parm_data_all *all)
2193 tree fntype ATTRIBUTE_UNUSED;
2195 memset (all, 0, sizeof (*all));
2197 fntype = TREE_TYPE (current_function_decl);
2199 #ifdef INIT_CUMULATIVE_INCOMING_ARGS
2200 INIT_CUMULATIVE_INCOMING_ARGS (all->args_so_far_v, fntype, NULL_RTX);
2201 #else
2202 INIT_CUMULATIVE_ARGS (all->args_so_far_v, fntype, NULL_RTX,
2203 current_function_decl, -1);
2204 #endif
2205 all->args_so_far = pack_cumulative_args (&all->args_so_far_v);
2207 #ifdef REG_PARM_STACK_SPACE
2208 all->reg_parm_stack_space = REG_PARM_STACK_SPACE (current_function_decl);
2209 #endif
2212 /* If ARGS contains entries with complex types, split the entry into two
2213 entries of the component type. Return a new list of substitutions are
2214 needed, else the old list. */
2216 static void
2217 split_complex_args (VEC(tree, heap) **args)
2219 unsigned i;
2220 tree p;
2222 FOR_EACH_VEC_ELT (tree, *args, i, p)
2224 tree type = TREE_TYPE (p);
2225 if (TREE_CODE (type) == COMPLEX_TYPE
2226 && targetm.calls.split_complex_arg (type))
2228 tree decl;
2229 tree subtype = TREE_TYPE (type);
2230 bool addressable = TREE_ADDRESSABLE (p);
2232 /* Rewrite the PARM_DECL's type with its component. */
2233 p = copy_node (p);
2234 TREE_TYPE (p) = subtype;
2235 DECL_ARG_TYPE (p) = TREE_TYPE (DECL_ARG_TYPE (p));
2236 DECL_MODE (p) = VOIDmode;
2237 DECL_SIZE (p) = NULL;
2238 DECL_SIZE_UNIT (p) = NULL;
2239 /* If this arg must go in memory, put it in a pseudo here.
2240 We can't allow it to go in memory as per normal parms,
2241 because the usual place might not have the imag part
2242 adjacent to the real part. */
2243 DECL_ARTIFICIAL (p) = addressable;
2244 DECL_IGNORED_P (p) = addressable;
2245 TREE_ADDRESSABLE (p) = 0;
2246 layout_decl (p, 0);
2247 VEC_replace (tree, *args, i, p);
2249 /* Build a second synthetic decl. */
2250 decl = build_decl (EXPR_LOCATION (p),
2251 PARM_DECL, NULL_TREE, subtype);
2252 DECL_ARG_TYPE (decl) = DECL_ARG_TYPE (p);
2253 DECL_ARTIFICIAL (decl) = addressable;
2254 DECL_IGNORED_P (decl) = addressable;
2255 layout_decl (decl, 0);
2256 VEC_safe_insert (tree, heap, *args, ++i, decl);
2261 /* A subroutine of assign_parms. Adjust the parameter list to incorporate
2262 the hidden struct return argument, and (abi willing) complex args.
2263 Return the new parameter list. */
2265 static VEC(tree, heap) *
2266 assign_parms_augmented_arg_list (struct assign_parm_data_all *all)
2268 tree fndecl = current_function_decl;
2269 tree fntype = TREE_TYPE (fndecl);
2270 VEC(tree, heap) *fnargs = NULL;
2271 tree arg;
2273 for (arg = DECL_ARGUMENTS (fndecl); arg; arg = DECL_CHAIN (arg))
2274 VEC_safe_push (tree, heap, fnargs, arg);
2276 all->orig_fnargs = DECL_ARGUMENTS (fndecl);
2278 /* If struct value address is treated as the first argument, make it so. */
2279 if (aggregate_value_p (DECL_RESULT (fndecl), fndecl)
2280 && ! cfun->returns_pcc_struct
2281 && targetm.calls.struct_value_rtx (TREE_TYPE (fndecl), 1) == 0)
2283 tree type = build_pointer_type (TREE_TYPE (fntype));
2284 tree decl;
2286 decl = build_decl (DECL_SOURCE_LOCATION (fndecl),
2287 PARM_DECL, get_identifier (".result_ptr"), type);
2288 DECL_ARG_TYPE (decl) = type;
2289 DECL_ARTIFICIAL (decl) = 1;
2290 DECL_NAMELESS (decl) = 1;
2291 TREE_CONSTANT (decl) = 1;
2293 DECL_CHAIN (decl) = all->orig_fnargs;
2294 all->orig_fnargs = decl;
2295 VEC_safe_insert (tree, heap, fnargs, 0, decl);
2297 all->function_result_decl = decl;
2300 /* If the target wants to split complex arguments into scalars, do so. */
2301 if (targetm.calls.split_complex_arg)
2302 split_complex_args (&fnargs);
2304 return fnargs;
2307 /* A subroutine of assign_parms. Examine PARM and pull out type and mode
2308 data for the parameter. Incorporate ABI specifics such as pass-by-
2309 reference and type promotion. */
2311 static void
2312 assign_parm_find_data_types (struct assign_parm_data_all *all, tree parm,
2313 struct assign_parm_data_one *data)
2315 tree nominal_type, passed_type;
2316 enum machine_mode nominal_mode, passed_mode, promoted_mode;
2317 int unsignedp;
2319 memset (data, 0, sizeof (*data));
2321 /* NAMED_ARG is a misnomer. We really mean 'non-variadic'. */
2322 if (!cfun->stdarg)
2323 data->named_arg = 1; /* No variadic parms. */
2324 else if (DECL_CHAIN (parm))
2325 data->named_arg = 1; /* Not the last non-variadic parm. */
2326 else if (targetm.calls.strict_argument_naming (all->args_so_far))
2327 data->named_arg = 1; /* Only variadic ones are unnamed. */
2328 else
2329 data->named_arg = 0; /* Treat as variadic. */
2331 nominal_type = TREE_TYPE (parm);
2332 passed_type = DECL_ARG_TYPE (parm);
2334 /* Look out for errors propagating this far. Also, if the parameter's
2335 type is void then its value doesn't matter. */
2336 if (TREE_TYPE (parm) == error_mark_node
2337 /* This can happen after weird syntax errors
2338 or if an enum type is defined among the parms. */
2339 || TREE_CODE (parm) != PARM_DECL
2340 || passed_type == NULL
2341 || VOID_TYPE_P (nominal_type))
2343 nominal_type = passed_type = void_type_node;
2344 nominal_mode = passed_mode = promoted_mode = VOIDmode;
2345 goto egress;
2348 /* Find mode of arg as it is passed, and mode of arg as it should be
2349 during execution of this function. */
2350 passed_mode = TYPE_MODE (passed_type);
2351 nominal_mode = TYPE_MODE (nominal_type);
2353 /* If the parm is to be passed as a transparent union or record, use the
2354 type of the first field for the tests below. We have already verified
2355 that the modes are the same. */
2356 if ((TREE_CODE (passed_type) == UNION_TYPE
2357 || TREE_CODE (passed_type) == RECORD_TYPE)
2358 && TYPE_TRANSPARENT_AGGR (passed_type))
2359 passed_type = TREE_TYPE (first_field (passed_type));
2361 /* See if this arg was passed by invisible reference. */
2362 if (pass_by_reference (&all->args_so_far_v, passed_mode,
2363 passed_type, data->named_arg))
2365 passed_type = nominal_type = build_pointer_type (passed_type);
2366 data->passed_pointer = true;
2367 passed_mode = nominal_mode = Pmode;
2370 /* Find mode as it is passed by the ABI. */
2371 unsignedp = TYPE_UNSIGNED (passed_type);
2372 promoted_mode = promote_function_mode (passed_type, passed_mode, &unsignedp,
2373 TREE_TYPE (current_function_decl), 0);
2375 egress:
2376 data->nominal_type = nominal_type;
2377 data->passed_type = passed_type;
2378 data->nominal_mode = nominal_mode;
2379 data->passed_mode = passed_mode;
2380 data->promoted_mode = promoted_mode;
2383 /* A subroutine of assign_parms. Invoke setup_incoming_varargs. */
2385 static void
2386 assign_parms_setup_varargs (struct assign_parm_data_all *all,
2387 struct assign_parm_data_one *data, bool no_rtl)
2389 int varargs_pretend_bytes = 0;
2391 targetm.calls.setup_incoming_varargs (all->args_so_far,
2392 data->promoted_mode,
2393 data->passed_type,
2394 &varargs_pretend_bytes, no_rtl);
2396 /* If the back-end has requested extra stack space, record how much is
2397 needed. Do not change pretend_args_size otherwise since it may be
2398 nonzero from an earlier partial argument. */
2399 if (varargs_pretend_bytes > 0)
2400 all->pretend_args_size = varargs_pretend_bytes;
2403 /* A subroutine of assign_parms. Set DATA->ENTRY_PARM corresponding to
2404 the incoming location of the current parameter. */
2406 static void
2407 assign_parm_find_entry_rtl (struct assign_parm_data_all *all,
2408 struct assign_parm_data_one *data)
2410 HOST_WIDE_INT pretend_bytes = 0;
2411 rtx entry_parm;
2412 bool in_regs;
2414 if (data->promoted_mode == VOIDmode)
2416 data->entry_parm = data->stack_parm = const0_rtx;
2417 return;
2420 entry_parm = targetm.calls.function_incoming_arg (all->args_so_far,
2421 data->promoted_mode,
2422 data->passed_type,
2423 data->named_arg);
2425 if (entry_parm == 0)
2426 data->promoted_mode = data->passed_mode;
2428 /* Determine parm's home in the stack, in case it arrives in the stack
2429 or we should pretend it did. Compute the stack position and rtx where
2430 the argument arrives and its size.
2432 There is one complexity here: If this was a parameter that would
2433 have been passed in registers, but wasn't only because it is
2434 __builtin_va_alist, we want locate_and_pad_parm to treat it as if
2435 it came in a register so that REG_PARM_STACK_SPACE isn't skipped.
2436 In this case, we call FUNCTION_ARG with NAMED set to 1 instead of 0
2437 as it was the previous time. */
2438 in_regs = entry_parm != 0;
2439 #ifdef STACK_PARMS_IN_REG_PARM_AREA
2440 in_regs = true;
2441 #endif
2442 if (!in_regs && !data->named_arg)
2444 if (targetm.calls.pretend_outgoing_varargs_named (all->args_so_far))
2446 rtx tem;
2447 tem = targetm.calls.function_incoming_arg (all->args_so_far,
2448 data->promoted_mode,
2449 data->passed_type, true);
2450 in_regs = tem != NULL;
2454 /* If this parameter was passed both in registers and in the stack, use
2455 the copy on the stack. */
2456 if (targetm.calls.must_pass_in_stack (data->promoted_mode,
2457 data->passed_type))
2458 entry_parm = 0;
2460 if (entry_parm)
2462 int partial;
2464 partial = targetm.calls.arg_partial_bytes (all->args_so_far,
2465 data->promoted_mode,
2466 data->passed_type,
2467 data->named_arg);
2468 data->partial = partial;
2470 /* The caller might already have allocated stack space for the
2471 register parameters. */
2472 if (partial != 0 && all->reg_parm_stack_space == 0)
2474 /* Part of this argument is passed in registers and part
2475 is passed on the stack. Ask the prologue code to extend
2476 the stack part so that we can recreate the full value.
2478 PRETEND_BYTES is the size of the registers we need to store.
2479 CURRENT_FUNCTION_PRETEND_ARGS_SIZE is the amount of extra
2480 stack space that the prologue should allocate.
2482 Internally, gcc assumes that the argument pointer is aligned
2483 to STACK_BOUNDARY bits. This is used both for alignment
2484 optimizations (see init_emit) and to locate arguments that are
2485 aligned to more than PARM_BOUNDARY bits. We must preserve this
2486 invariant by rounding CURRENT_FUNCTION_PRETEND_ARGS_SIZE up to
2487 a stack boundary. */
2489 /* We assume at most one partial arg, and it must be the first
2490 argument on the stack. */
2491 gcc_assert (!all->extra_pretend_bytes && !all->pretend_args_size);
2493 pretend_bytes = partial;
2494 all->pretend_args_size = CEIL_ROUND (pretend_bytes, STACK_BYTES);
2496 /* We want to align relative to the actual stack pointer, so
2497 don't include this in the stack size until later. */
2498 all->extra_pretend_bytes = all->pretend_args_size;
2502 locate_and_pad_parm (data->promoted_mode, data->passed_type, in_regs,
2503 entry_parm ? data->partial : 0, current_function_decl,
2504 &all->stack_args_size, &data->locate);
2506 /* Update parm_stack_boundary if this parameter is passed in the
2507 stack. */
2508 if (!in_regs && crtl->parm_stack_boundary < data->locate.boundary)
2509 crtl->parm_stack_boundary = data->locate.boundary;
2511 /* Adjust offsets to include the pretend args. */
2512 pretend_bytes = all->extra_pretend_bytes - pretend_bytes;
2513 data->locate.slot_offset.constant += pretend_bytes;
2514 data->locate.offset.constant += pretend_bytes;
2516 data->entry_parm = entry_parm;
2519 /* A subroutine of assign_parms. If there is actually space on the stack
2520 for this parm, count it in stack_args_size and return true. */
2522 static bool
2523 assign_parm_is_stack_parm (struct assign_parm_data_all *all,
2524 struct assign_parm_data_one *data)
2526 /* Trivially true if we've no incoming register. */
2527 if (data->entry_parm == NULL)
2529 /* Also true if we're partially in registers and partially not,
2530 since we've arranged to drop the entire argument on the stack. */
2531 else if (data->partial != 0)
2533 /* Also true if the target says that it's passed in both registers
2534 and on the stack. */
2535 else if (GET_CODE (data->entry_parm) == PARALLEL
2536 && XEXP (XVECEXP (data->entry_parm, 0, 0), 0) == NULL_RTX)
2538 /* Also true if the target says that there's stack allocated for
2539 all register parameters. */
2540 else if (all->reg_parm_stack_space > 0)
2542 /* Otherwise, no, this parameter has no ABI defined stack slot. */
2543 else
2544 return false;
2546 all->stack_args_size.constant += data->locate.size.constant;
2547 if (data->locate.size.var)
2548 ADD_PARM_SIZE (all->stack_args_size, data->locate.size.var);
2550 return true;
2553 /* A subroutine of assign_parms. Given that this parameter is allocated
2554 stack space by the ABI, find it. */
2556 static void
2557 assign_parm_find_stack_rtl (tree parm, struct assign_parm_data_one *data)
2559 rtx offset_rtx, stack_parm;
2560 unsigned int align, boundary;
2562 /* If we're passing this arg using a reg, make its stack home the
2563 aligned stack slot. */
2564 if (data->entry_parm)
2565 offset_rtx = ARGS_SIZE_RTX (data->locate.slot_offset);
2566 else
2567 offset_rtx = ARGS_SIZE_RTX (data->locate.offset);
2569 stack_parm = crtl->args.internal_arg_pointer;
2570 if (offset_rtx != const0_rtx)
2571 stack_parm = gen_rtx_PLUS (Pmode, stack_parm, offset_rtx);
2572 stack_parm = gen_rtx_MEM (data->promoted_mode, stack_parm);
2574 if (!data->passed_pointer)
2576 set_mem_attributes (stack_parm, parm, 1);
2577 /* set_mem_attributes could set MEM_SIZE to the passed mode's size,
2578 while promoted mode's size is needed. */
2579 if (data->promoted_mode != BLKmode
2580 && data->promoted_mode != DECL_MODE (parm))
2582 set_mem_size (stack_parm, GET_MODE_SIZE (data->promoted_mode));
2583 if (MEM_EXPR (stack_parm) && MEM_OFFSET_KNOWN_P (stack_parm))
2585 int offset = subreg_lowpart_offset (DECL_MODE (parm),
2586 data->promoted_mode);
2587 if (offset)
2588 set_mem_offset (stack_parm, MEM_OFFSET (stack_parm) - offset);
2593 boundary = data->locate.boundary;
2594 align = BITS_PER_UNIT;
2596 /* If we're padding upward, we know that the alignment of the slot
2597 is TARGET_FUNCTION_ARG_BOUNDARY. If we're using slot_offset, we're
2598 intentionally forcing upward padding. Otherwise we have to come
2599 up with a guess at the alignment based on OFFSET_RTX. */
2600 if (data->locate.where_pad != downward || data->entry_parm)
2601 align = boundary;
2602 else if (CONST_INT_P (offset_rtx))
2604 align = INTVAL (offset_rtx) * BITS_PER_UNIT | boundary;
2605 align = align & -align;
2607 set_mem_align (stack_parm, align);
2609 if (data->entry_parm)
2610 set_reg_attrs_for_parm (data->entry_parm, stack_parm);
2612 data->stack_parm = stack_parm;
2615 /* A subroutine of assign_parms. Adjust DATA->ENTRY_RTL such that it's
2616 always valid and contiguous. */
2618 static void
2619 assign_parm_adjust_entry_rtl (struct assign_parm_data_one *data)
2621 rtx entry_parm = data->entry_parm;
2622 rtx stack_parm = data->stack_parm;
2624 /* If this parm was passed part in regs and part in memory, pretend it
2625 arrived entirely in memory by pushing the register-part onto the stack.
2626 In the special case of a DImode or DFmode that is split, we could put
2627 it together in a pseudoreg directly, but for now that's not worth
2628 bothering with. */
2629 if (data->partial != 0)
2631 /* Handle calls that pass values in multiple non-contiguous
2632 locations. The Irix 6 ABI has examples of this. */
2633 if (GET_CODE (entry_parm) == PARALLEL)
2634 emit_group_store (validize_mem (stack_parm), entry_parm,
2635 data->passed_type,
2636 int_size_in_bytes (data->passed_type));
2637 else
2639 gcc_assert (data->partial % UNITS_PER_WORD == 0);
2640 move_block_from_reg (REGNO (entry_parm), validize_mem (stack_parm),
2641 data->partial / UNITS_PER_WORD);
2644 entry_parm = stack_parm;
2647 /* If we didn't decide this parm came in a register, by default it came
2648 on the stack. */
2649 else if (entry_parm == NULL)
2650 entry_parm = stack_parm;
2652 /* When an argument is passed in multiple locations, we can't make use
2653 of this information, but we can save some copying if the whole argument
2654 is passed in a single register. */
2655 else if (GET_CODE (entry_parm) == PARALLEL
2656 && data->nominal_mode != BLKmode
2657 && data->passed_mode != BLKmode)
2659 size_t i, len = XVECLEN (entry_parm, 0);
2661 for (i = 0; i < len; i++)
2662 if (XEXP (XVECEXP (entry_parm, 0, i), 0) != NULL_RTX
2663 && REG_P (XEXP (XVECEXP (entry_parm, 0, i), 0))
2664 && (GET_MODE (XEXP (XVECEXP (entry_parm, 0, i), 0))
2665 == data->passed_mode)
2666 && INTVAL (XEXP (XVECEXP (entry_parm, 0, i), 1)) == 0)
2668 entry_parm = XEXP (XVECEXP (entry_parm, 0, i), 0);
2669 break;
2673 data->entry_parm = entry_parm;
2676 /* A subroutine of assign_parms. Reconstitute any values which were
2677 passed in multiple registers and would fit in a single register. */
2679 static void
2680 assign_parm_remove_parallels (struct assign_parm_data_one *data)
2682 rtx entry_parm = data->entry_parm;
2684 /* Convert the PARALLEL to a REG of the same mode as the parallel.
2685 This can be done with register operations rather than on the
2686 stack, even if we will store the reconstituted parameter on the
2687 stack later. */
2688 if (GET_CODE (entry_parm) == PARALLEL && GET_MODE (entry_parm) != BLKmode)
2690 rtx parmreg = gen_reg_rtx (GET_MODE (entry_parm));
2691 emit_group_store (parmreg, entry_parm, data->passed_type,
2692 GET_MODE_SIZE (GET_MODE (entry_parm)));
2693 entry_parm = parmreg;
2696 data->entry_parm = entry_parm;
2699 /* A subroutine of assign_parms. Adjust DATA->STACK_RTL such that it's
2700 always valid and properly aligned. */
2702 static void
2703 assign_parm_adjust_stack_rtl (struct assign_parm_data_one *data)
2705 rtx stack_parm = data->stack_parm;
2707 /* If we can't trust the parm stack slot to be aligned enough for its
2708 ultimate type, don't use that slot after entry. We'll make another
2709 stack slot, if we need one. */
2710 if (stack_parm
2711 && ((STRICT_ALIGNMENT
2712 && GET_MODE_ALIGNMENT (data->nominal_mode) > MEM_ALIGN (stack_parm))
2713 || (data->nominal_type
2714 && TYPE_ALIGN (data->nominal_type) > MEM_ALIGN (stack_parm)
2715 && MEM_ALIGN (stack_parm) < PREFERRED_STACK_BOUNDARY)))
2716 stack_parm = NULL;
2718 /* If parm was passed in memory, and we need to convert it on entry,
2719 don't store it back in that same slot. */
2720 else if (data->entry_parm == stack_parm
2721 && data->nominal_mode != BLKmode
2722 && data->nominal_mode != data->passed_mode)
2723 stack_parm = NULL;
2725 /* If stack protection is in effect for this function, don't leave any
2726 pointers in their passed stack slots. */
2727 else if (crtl->stack_protect_guard
2728 && (flag_stack_protect == 2
2729 || data->passed_pointer
2730 || POINTER_TYPE_P (data->nominal_type)))
2731 stack_parm = NULL;
2733 data->stack_parm = stack_parm;
2736 /* A subroutine of assign_parms. Return true if the current parameter
2737 should be stored as a BLKmode in the current frame. */
2739 static bool
2740 assign_parm_setup_block_p (struct assign_parm_data_one *data)
2742 if (data->nominal_mode == BLKmode)
2743 return true;
2744 if (GET_MODE (data->entry_parm) == BLKmode)
2745 return true;
2747 #ifdef BLOCK_REG_PADDING
2748 /* Only assign_parm_setup_block knows how to deal with register arguments
2749 that are padded at the least significant end. */
2750 if (REG_P (data->entry_parm)
2751 && GET_MODE_SIZE (data->promoted_mode) < UNITS_PER_WORD
2752 && (BLOCK_REG_PADDING (data->passed_mode, data->passed_type, 1)
2753 == (BYTES_BIG_ENDIAN ? upward : downward)))
2754 return true;
2755 #endif
2757 return false;
2760 /* A subroutine of assign_parms. Arrange for the parameter to be
2761 present and valid in DATA->STACK_RTL. */
2763 static void
2764 assign_parm_setup_block (struct assign_parm_data_all *all,
2765 tree parm, struct assign_parm_data_one *data)
2767 rtx entry_parm = data->entry_parm;
2768 rtx stack_parm = data->stack_parm;
2769 HOST_WIDE_INT size;
2770 HOST_WIDE_INT size_stored;
2772 if (GET_CODE (entry_parm) == PARALLEL)
2773 entry_parm = emit_group_move_into_temps (entry_parm);
2775 size = int_size_in_bytes (data->passed_type);
2776 size_stored = CEIL_ROUND (size, UNITS_PER_WORD);
2777 if (stack_parm == 0)
2779 DECL_ALIGN (parm) = MAX (DECL_ALIGN (parm), BITS_PER_WORD);
2780 stack_parm = assign_stack_local (BLKmode, size_stored,
2781 DECL_ALIGN (parm));
2782 if (GET_MODE_SIZE (GET_MODE (entry_parm)) == size)
2783 PUT_MODE (stack_parm, GET_MODE (entry_parm));
2784 set_mem_attributes (stack_parm, parm, 1);
2787 /* If a BLKmode arrives in registers, copy it to a stack slot. Handle
2788 calls that pass values in multiple non-contiguous locations. */
2789 if (REG_P (entry_parm) || GET_CODE (entry_parm) == PARALLEL)
2791 rtx mem;
2793 /* Note that we will be storing an integral number of words.
2794 So we have to be careful to ensure that we allocate an
2795 integral number of words. We do this above when we call
2796 assign_stack_local if space was not allocated in the argument
2797 list. If it was, this will not work if PARM_BOUNDARY is not
2798 a multiple of BITS_PER_WORD. It isn't clear how to fix this
2799 if it becomes a problem. Exception is when BLKmode arrives
2800 with arguments not conforming to word_mode. */
2802 if (data->stack_parm == 0)
2804 else if (GET_CODE (entry_parm) == PARALLEL)
2806 else
2807 gcc_assert (!size || !(PARM_BOUNDARY % BITS_PER_WORD));
2809 mem = validize_mem (stack_parm);
2811 /* Handle values in multiple non-contiguous locations. */
2812 if (GET_CODE (entry_parm) == PARALLEL)
2814 push_to_sequence2 (all->first_conversion_insn,
2815 all->last_conversion_insn);
2816 emit_group_store (mem, entry_parm, data->passed_type, size);
2817 all->first_conversion_insn = get_insns ();
2818 all->last_conversion_insn = get_last_insn ();
2819 end_sequence ();
2822 else if (size == 0)
2825 /* If SIZE is that of a mode no bigger than a word, just use
2826 that mode's store operation. */
2827 else if (size <= UNITS_PER_WORD)
2829 enum machine_mode mode
2830 = mode_for_size (size * BITS_PER_UNIT, MODE_INT, 0);
2832 if (mode != BLKmode
2833 #ifdef BLOCK_REG_PADDING
2834 && (size == UNITS_PER_WORD
2835 || (BLOCK_REG_PADDING (mode, data->passed_type, 1)
2836 != (BYTES_BIG_ENDIAN ? upward : downward)))
2837 #endif
2840 rtx reg;
2842 /* We are really truncating a word_mode value containing
2843 SIZE bytes into a value of mode MODE. If such an
2844 operation requires no actual instructions, we can refer
2845 to the value directly in mode MODE, otherwise we must
2846 start with the register in word_mode and explicitly
2847 convert it. */
2848 if (TRULY_NOOP_TRUNCATION (size * BITS_PER_UNIT, BITS_PER_WORD))
2849 reg = gen_rtx_REG (mode, REGNO (entry_parm));
2850 else
2852 reg = gen_rtx_REG (word_mode, REGNO (entry_parm));
2853 reg = convert_to_mode (mode, copy_to_reg (reg), 1);
2855 emit_move_insn (change_address (mem, mode, 0), reg);
2858 /* Blocks smaller than a word on a BYTES_BIG_ENDIAN
2859 machine must be aligned to the left before storing
2860 to memory. Note that the previous test doesn't
2861 handle all cases (e.g. SIZE == 3). */
2862 else if (size != UNITS_PER_WORD
2863 #ifdef BLOCK_REG_PADDING
2864 && (BLOCK_REG_PADDING (mode, data->passed_type, 1)
2865 == downward)
2866 #else
2867 && BYTES_BIG_ENDIAN
2868 #endif
2871 rtx tem, x;
2872 int by = (UNITS_PER_WORD - size) * BITS_PER_UNIT;
2873 rtx reg = gen_rtx_REG (word_mode, REGNO (entry_parm));
2875 x = expand_shift (LSHIFT_EXPR, word_mode, reg, by, NULL_RTX, 1);
2876 tem = change_address (mem, word_mode, 0);
2877 emit_move_insn (tem, x);
2879 else
2880 move_block_from_reg (REGNO (entry_parm), mem,
2881 size_stored / UNITS_PER_WORD);
2883 else
2884 move_block_from_reg (REGNO (entry_parm), mem,
2885 size_stored / UNITS_PER_WORD);
2887 else if (data->stack_parm == 0)
2889 push_to_sequence2 (all->first_conversion_insn, all->last_conversion_insn);
2890 emit_block_move (stack_parm, data->entry_parm, GEN_INT (size),
2891 BLOCK_OP_NORMAL);
2892 all->first_conversion_insn = get_insns ();
2893 all->last_conversion_insn = get_last_insn ();
2894 end_sequence ();
2897 data->stack_parm = stack_parm;
2898 SET_DECL_RTL (parm, stack_parm);
2901 /* A subroutine of assign_parms. Allocate a pseudo to hold the current
2902 parameter. Get it there. Perform all ABI specified conversions. */
2904 static void
2905 assign_parm_setup_reg (struct assign_parm_data_all *all, tree parm,
2906 struct assign_parm_data_one *data)
2908 rtx parmreg, validated_mem;
2909 rtx equiv_stack_parm;
2910 enum machine_mode promoted_nominal_mode;
2911 int unsignedp = TYPE_UNSIGNED (TREE_TYPE (parm));
2912 bool did_conversion = false;
2913 bool need_conversion, moved;
2915 /* Store the parm in a pseudoregister during the function, but we may
2916 need to do it in a wider mode. Using 2 here makes the result
2917 consistent with promote_decl_mode and thus expand_expr_real_1. */
2918 promoted_nominal_mode
2919 = promote_function_mode (data->nominal_type, data->nominal_mode, &unsignedp,
2920 TREE_TYPE (current_function_decl), 2);
2922 parmreg = gen_reg_rtx (promoted_nominal_mode);
2924 if (!DECL_ARTIFICIAL (parm))
2925 mark_user_reg (parmreg);
2927 /* If this was an item that we received a pointer to,
2928 set DECL_RTL appropriately. */
2929 if (data->passed_pointer)
2931 rtx x = gen_rtx_MEM (TYPE_MODE (TREE_TYPE (data->passed_type)), parmreg);
2932 set_mem_attributes (x, parm, 1);
2933 SET_DECL_RTL (parm, x);
2935 else
2936 SET_DECL_RTL (parm, parmreg);
2938 assign_parm_remove_parallels (data);
2940 /* Copy the value into the register, thus bridging between
2941 assign_parm_find_data_types and expand_expr_real_1. */
2943 equiv_stack_parm = data->stack_parm;
2944 validated_mem = validize_mem (data->entry_parm);
2946 need_conversion = (data->nominal_mode != data->passed_mode
2947 || promoted_nominal_mode != data->promoted_mode);
2948 moved = false;
2950 if (need_conversion
2951 && GET_MODE_CLASS (data->nominal_mode) == MODE_INT
2952 && data->nominal_mode == data->passed_mode
2953 && data->nominal_mode == GET_MODE (data->entry_parm))
2955 /* ENTRY_PARM has been converted to PROMOTED_MODE, its
2956 mode, by the caller. We now have to convert it to
2957 NOMINAL_MODE, if different. However, PARMREG may be in
2958 a different mode than NOMINAL_MODE if it is being stored
2959 promoted.
2961 If ENTRY_PARM is a hard register, it might be in a register
2962 not valid for operating in its mode (e.g., an odd-numbered
2963 register for a DFmode). In that case, moves are the only
2964 thing valid, so we can't do a convert from there. This
2965 occurs when the calling sequence allow such misaligned
2966 usages.
2968 In addition, the conversion may involve a call, which could
2969 clobber parameters which haven't been copied to pseudo
2970 registers yet.
2972 First, we try to emit an insn which performs the necessary
2973 conversion. We verify that this insn does not clobber any
2974 hard registers. */
2976 enum insn_code icode;
2977 rtx op0, op1;
2979 icode = can_extend_p (promoted_nominal_mode, data->passed_mode,
2980 unsignedp);
2982 op0 = parmreg;
2983 op1 = validated_mem;
2984 if (icode != CODE_FOR_nothing
2985 && insn_operand_matches (icode, 0, op0)
2986 && insn_operand_matches (icode, 1, op1))
2988 enum rtx_code code = unsignedp ? ZERO_EXTEND : SIGN_EXTEND;
2989 rtx insn, insns, t = op1;
2990 HARD_REG_SET hardregs;
2992 start_sequence ();
2993 /* If op1 is a hard register that is likely spilled, first
2994 force it into a pseudo, otherwise combiner might extend
2995 its lifetime too much. */
2996 if (GET_CODE (t) == SUBREG)
2997 t = SUBREG_REG (t);
2998 if (REG_P (t)
2999 && HARD_REGISTER_P (t)
3000 && ! TEST_HARD_REG_BIT (fixed_reg_set, REGNO (t))
3001 && targetm.class_likely_spilled_p (REGNO_REG_CLASS (REGNO (t))))
3003 t = gen_reg_rtx (GET_MODE (op1));
3004 emit_move_insn (t, op1);
3006 else
3007 t = op1;
3008 insn = gen_extend_insn (op0, t, promoted_nominal_mode,
3009 data->passed_mode, unsignedp);
3010 emit_insn (insn);
3011 insns = get_insns ();
3013 moved = true;
3014 CLEAR_HARD_REG_SET (hardregs);
3015 for (insn = insns; insn && moved; insn = NEXT_INSN (insn))
3017 if (INSN_P (insn))
3018 note_stores (PATTERN (insn), record_hard_reg_sets,
3019 &hardregs);
3020 if (!hard_reg_set_empty_p (hardregs))
3021 moved = false;
3024 end_sequence ();
3026 if (moved)
3028 emit_insn (insns);
3029 if (equiv_stack_parm != NULL_RTX)
3030 equiv_stack_parm = gen_rtx_fmt_e (code, GET_MODE (parmreg),
3031 equiv_stack_parm);
3036 if (moved)
3037 /* Nothing to do. */
3039 else if (need_conversion)
3041 /* We did not have an insn to convert directly, or the sequence
3042 generated appeared unsafe. We must first copy the parm to a
3043 pseudo reg, and save the conversion until after all
3044 parameters have been moved. */
3046 int save_tree_used;
3047 rtx tempreg = gen_reg_rtx (GET_MODE (data->entry_parm));
3049 emit_move_insn (tempreg, validated_mem);
3051 push_to_sequence2 (all->first_conversion_insn, all->last_conversion_insn);
3052 tempreg = convert_to_mode (data->nominal_mode, tempreg, unsignedp);
3054 if (GET_CODE (tempreg) == SUBREG
3055 && GET_MODE (tempreg) == data->nominal_mode
3056 && REG_P (SUBREG_REG (tempreg))
3057 && data->nominal_mode == data->passed_mode
3058 && GET_MODE (SUBREG_REG (tempreg)) == GET_MODE (data->entry_parm)
3059 && GET_MODE_SIZE (GET_MODE (tempreg))
3060 < GET_MODE_SIZE (GET_MODE (data->entry_parm)))
3062 /* The argument is already sign/zero extended, so note it
3063 into the subreg. */
3064 SUBREG_PROMOTED_VAR_P (tempreg) = 1;
3065 SUBREG_PROMOTED_UNSIGNED_SET (tempreg, unsignedp);
3068 /* TREE_USED gets set erroneously during expand_assignment. */
3069 save_tree_used = TREE_USED (parm);
3070 expand_assignment (parm, make_tree (data->nominal_type, tempreg), false);
3071 TREE_USED (parm) = save_tree_used;
3072 all->first_conversion_insn = get_insns ();
3073 all->last_conversion_insn = get_last_insn ();
3074 end_sequence ();
3076 did_conversion = true;
3078 else
3079 emit_move_insn (parmreg, validated_mem);
3081 /* If we were passed a pointer but the actual value can safely live
3082 in a register, put it in one. */
3083 if (data->passed_pointer
3084 && TYPE_MODE (TREE_TYPE (parm)) != BLKmode
3085 /* If by-reference argument was promoted, demote it. */
3086 && (TYPE_MODE (TREE_TYPE (parm)) != GET_MODE (DECL_RTL (parm))
3087 || use_register_for_decl (parm)))
3089 /* We can't use nominal_mode, because it will have been set to
3090 Pmode above. We must use the actual mode of the parm. */
3091 parmreg = gen_reg_rtx (TYPE_MODE (TREE_TYPE (parm)));
3092 mark_user_reg (parmreg);
3094 if (GET_MODE (parmreg) != GET_MODE (DECL_RTL (parm)))
3096 rtx tempreg = gen_reg_rtx (GET_MODE (DECL_RTL (parm)));
3097 int unsigned_p = TYPE_UNSIGNED (TREE_TYPE (parm));
3099 push_to_sequence2 (all->first_conversion_insn,
3100 all->last_conversion_insn);
3101 emit_move_insn (tempreg, DECL_RTL (parm));
3102 tempreg = convert_to_mode (GET_MODE (parmreg), tempreg, unsigned_p);
3103 emit_move_insn (parmreg, tempreg);
3104 all->first_conversion_insn = get_insns ();
3105 all->last_conversion_insn = get_last_insn ();
3106 end_sequence ();
3108 did_conversion = true;
3110 else
3111 emit_move_insn (parmreg, DECL_RTL (parm));
3113 SET_DECL_RTL (parm, parmreg);
3115 /* STACK_PARM is the pointer, not the parm, and PARMREG is
3116 now the parm. */
3117 data->stack_parm = NULL;
3120 /* Mark the register as eliminable if we did no conversion and it was
3121 copied from memory at a fixed offset, and the arg pointer was not
3122 copied to a pseudo-reg. If the arg pointer is a pseudo reg or the
3123 offset formed an invalid address, such memory-equivalences as we
3124 make here would screw up life analysis for it. */
3125 if (data->nominal_mode == data->passed_mode
3126 && !did_conversion
3127 && data->stack_parm != 0
3128 && MEM_P (data->stack_parm)
3129 && data->locate.offset.var == 0
3130 && reg_mentioned_p (virtual_incoming_args_rtx,
3131 XEXP (data->stack_parm, 0)))
3133 rtx linsn = get_last_insn ();
3134 rtx sinsn, set;
3136 /* Mark complex types separately. */
3137 if (GET_CODE (parmreg) == CONCAT)
3139 enum machine_mode submode
3140 = GET_MODE_INNER (GET_MODE (parmreg));
3141 int regnor = REGNO (XEXP (parmreg, 0));
3142 int regnoi = REGNO (XEXP (parmreg, 1));
3143 rtx stackr = adjust_address_nv (data->stack_parm, submode, 0);
3144 rtx stacki = adjust_address_nv (data->stack_parm, submode,
3145 GET_MODE_SIZE (submode));
3147 /* Scan backwards for the set of the real and
3148 imaginary parts. */
3149 for (sinsn = linsn; sinsn != 0;
3150 sinsn = prev_nonnote_insn (sinsn))
3152 set = single_set (sinsn);
3153 if (set == 0)
3154 continue;
3156 if (SET_DEST (set) == regno_reg_rtx [regnoi])
3157 set_unique_reg_note (sinsn, REG_EQUIV, stacki);
3158 else if (SET_DEST (set) == regno_reg_rtx [regnor])
3159 set_unique_reg_note (sinsn, REG_EQUIV, stackr);
3162 else
3163 set_dst_reg_note (linsn, REG_EQUIV, equiv_stack_parm, parmreg);
3166 /* For pointer data type, suggest pointer register. */
3167 if (POINTER_TYPE_P (TREE_TYPE (parm)))
3168 mark_reg_pointer (parmreg,
3169 TYPE_ALIGN (TREE_TYPE (TREE_TYPE (parm))));
3172 /* A subroutine of assign_parms. Allocate stack space to hold the current
3173 parameter. Get it there. Perform all ABI specified conversions. */
3175 static void
3176 assign_parm_setup_stack (struct assign_parm_data_all *all, tree parm,
3177 struct assign_parm_data_one *data)
3179 /* Value must be stored in the stack slot STACK_PARM during function
3180 execution. */
3181 bool to_conversion = false;
3183 assign_parm_remove_parallels (data);
3185 if (data->promoted_mode != data->nominal_mode)
3187 /* Conversion is required. */
3188 rtx tempreg = gen_reg_rtx (GET_MODE (data->entry_parm));
3190 emit_move_insn (tempreg, validize_mem (data->entry_parm));
3192 push_to_sequence2 (all->first_conversion_insn, all->last_conversion_insn);
3193 to_conversion = true;
3195 data->entry_parm = convert_to_mode (data->nominal_mode, tempreg,
3196 TYPE_UNSIGNED (TREE_TYPE (parm)));
3198 if (data->stack_parm)
3200 int offset = subreg_lowpart_offset (data->nominal_mode,
3201 GET_MODE (data->stack_parm));
3202 /* ??? This may need a big-endian conversion on sparc64. */
3203 data->stack_parm
3204 = adjust_address (data->stack_parm, data->nominal_mode, 0);
3205 if (offset && MEM_OFFSET_KNOWN_P (data->stack_parm))
3206 set_mem_offset (data->stack_parm,
3207 MEM_OFFSET (data->stack_parm) + offset);
3211 if (data->entry_parm != data->stack_parm)
3213 rtx src, dest;
3215 if (data->stack_parm == 0)
3217 int align = STACK_SLOT_ALIGNMENT (data->passed_type,
3218 GET_MODE (data->entry_parm),
3219 TYPE_ALIGN (data->passed_type));
3220 data->stack_parm
3221 = assign_stack_local (GET_MODE (data->entry_parm),
3222 GET_MODE_SIZE (GET_MODE (data->entry_parm)),
3223 align);
3224 set_mem_attributes (data->stack_parm, parm, 1);
3227 dest = validize_mem (data->stack_parm);
3228 src = validize_mem (data->entry_parm);
3230 if (MEM_P (src))
3232 /* Use a block move to handle potentially misaligned entry_parm. */
3233 if (!to_conversion)
3234 push_to_sequence2 (all->first_conversion_insn,
3235 all->last_conversion_insn);
3236 to_conversion = true;
3238 emit_block_move (dest, src,
3239 GEN_INT (int_size_in_bytes (data->passed_type)),
3240 BLOCK_OP_NORMAL);
3242 else
3243 emit_move_insn (dest, src);
3246 if (to_conversion)
3248 all->first_conversion_insn = get_insns ();
3249 all->last_conversion_insn = get_last_insn ();
3250 end_sequence ();
3253 SET_DECL_RTL (parm, data->stack_parm);
3256 /* A subroutine of assign_parms. If the ABI splits complex arguments, then
3257 undo the frobbing that we did in assign_parms_augmented_arg_list. */
3259 static void
3260 assign_parms_unsplit_complex (struct assign_parm_data_all *all,
3261 VEC(tree, heap) *fnargs)
3263 tree parm;
3264 tree orig_fnargs = all->orig_fnargs;
3265 unsigned i = 0;
3267 for (parm = orig_fnargs; parm; parm = TREE_CHAIN (parm), ++i)
3269 if (TREE_CODE (TREE_TYPE (parm)) == COMPLEX_TYPE
3270 && targetm.calls.split_complex_arg (TREE_TYPE (parm)))
3272 rtx tmp, real, imag;
3273 enum machine_mode inner = GET_MODE_INNER (DECL_MODE (parm));
3275 real = DECL_RTL (VEC_index (tree, fnargs, i));
3276 imag = DECL_RTL (VEC_index (tree, fnargs, i + 1));
3277 if (inner != GET_MODE (real))
3279 real = gen_lowpart_SUBREG (inner, real);
3280 imag = gen_lowpart_SUBREG (inner, imag);
3283 if (TREE_ADDRESSABLE (parm))
3285 rtx rmem, imem;
3286 HOST_WIDE_INT size = int_size_in_bytes (TREE_TYPE (parm));
3287 int align = STACK_SLOT_ALIGNMENT (TREE_TYPE (parm),
3288 DECL_MODE (parm),
3289 TYPE_ALIGN (TREE_TYPE (parm)));
3291 /* split_complex_arg put the real and imag parts in
3292 pseudos. Move them to memory. */
3293 tmp = assign_stack_local (DECL_MODE (parm), size, align);
3294 set_mem_attributes (tmp, parm, 1);
3295 rmem = adjust_address_nv (tmp, inner, 0);
3296 imem = adjust_address_nv (tmp, inner, GET_MODE_SIZE (inner));
3297 push_to_sequence2 (all->first_conversion_insn,
3298 all->last_conversion_insn);
3299 emit_move_insn (rmem, real);
3300 emit_move_insn (imem, imag);
3301 all->first_conversion_insn = get_insns ();
3302 all->last_conversion_insn = get_last_insn ();
3303 end_sequence ();
3305 else
3306 tmp = gen_rtx_CONCAT (DECL_MODE (parm), real, imag);
3307 SET_DECL_RTL (parm, tmp);
3309 real = DECL_INCOMING_RTL (VEC_index (tree, fnargs, i));
3310 imag = DECL_INCOMING_RTL (VEC_index (tree, fnargs, i + 1));
3311 if (inner != GET_MODE (real))
3313 real = gen_lowpart_SUBREG (inner, real);
3314 imag = gen_lowpart_SUBREG (inner, imag);
3316 tmp = gen_rtx_CONCAT (DECL_MODE (parm), real, imag);
3317 set_decl_incoming_rtl (parm, tmp, false);
3318 i++;
3323 /* Assign RTL expressions to the function's parameters. This may involve
3324 copying them into registers and using those registers as the DECL_RTL. */
3326 static void
3327 assign_parms (tree fndecl)
3329 struct assign_parm_data_all all;
3330 tree parm;
3331 VEC(tree, heap) *fnargs;
3332 unsigned i;
3334 crtl->args.internal_arg_pointer
3335 = targetm.calls.internal_arg_pointer ();
3337 assign_parms_initialize_all (&all);
3338 fnargs = assign_parms_augmented_arg_list (&all);
3340 FOR_EACH_VEC_ELT (tree, fnargs, i, parm)
3342 struct assign_parm_data_one data;
3344 /* Extract the type of PARM; adjust it according to ABI. */
3345 assign_parm_find_data_types (&all, parm, &data);
3347 /* Early out for errors and void parameters. */
3348 if (data.passed_mode == VOIDmode)
3350 SET_DECL_RTL (parm, const0_rtx);
3351 DECL_INCOMING_RTL (parm) = DECL_RTL (parm);
3352 continue;
3355 /* Estimate stack alignment from parameter alignment. */
3356 if (SUPPORTS_STACK_ALIGNMENT)
3358 unsigned int align
3359 = targetm.calls.function_arg_boundary (data.promoted_mode,
3360 data.passed_type);
3361 align = MINIMUM_ALIGNMENT (data.passed_type, data.promoted_mode,
3362 align);
3363 if (TYPE_ALIGN (data.nominal_type) > align)
3364 align = MINIMUM_ALIGNMENT (data.nominal_type,
3365 TYPE_MODE (data.nominal_type),
3366 TYPE_ALIGN (data.nominal_type));
3367 if (crtl->stack_alignment_estimated < align)
3369 gcc_assert (!crtl->stack_realign_processed);
3370 crtl->stack_alignment_estimated = align;
3374 if (cfun->stdarg && !DECL_CHAIN (parm))
3375 assign_parms_setup_varargs (&all, &data, false);
3377 /* Find out where the parameter arrives in this function. */
3378 assign_parm_find_entry_rtl (&all, &data);
3380 /* Find out where stack space for this parameter might be. */
3381 if (assign_parm_is_stack_parm (&all, &data))
3383 assign_parm_find_stack_rtl (parm, &data);
3384 assign_parm_adjust_entry_rtl (&data);
3387 /* Record permanently how this parm was passed. */
3388 if (data.passed_pointer)
3390 rtx incoming_rtl
3391 = gen_rtx_MEM (TYPE_MODE (TREE_TYPE (data.passed_type)),
3392 data.entry_parm);
3393 set_decl_incoming_rtl (parm, incoming_rtl, true);
3395 else
3396 set_decl_incoming_rtl (parm, data.entry_parm, false);
3398 /* Update info on where next arg arrives in registers. */
3399 targetm.calls.function_arg_advance (all.args_so_far, data.promoted_mode,
3400 data.passed_type, data.named_arg);
3402 assign_parm_adjust_stack_rtl (&data);
3404 if (assign_parm_setup_block_p (&data))
3405 assign_parm_setup_block (&all, parm, &data);
3406 else if (data.passed_pointer || use_register_for_decl (parm))
3407 assign_parm_setup_reg (&all, parm, &data);
3408 else
3409 assign_parm_setup_stack (&all, parm, &data);
3412 if (targetm.calls.split_complex_arg)
3413 assign_parms_unsplit_complex (&all, fnargs);
3415 VEC_free (tree, heap, fnargs);
3417 /* Output all parameter conversion instructions (possibly including calls)
3418 now that all parameters have been copied out of hard registers. */
3419 emit_insn (all.first_conversion_insn);
3421 /* Estimate reload stack alignment from scalar return mode. */
3422 if (SUPPORTS_STACK_ALIGNMENT)
3424 if (DECL_RESULT (fndecl))
3426 tree type = TREE_TYPE (DECL_RESULT (fndecl));
3427 enum machine_mode mode = TYPE_MODE (type);
3429 if (mode != BLKmode
3430 && mode != VOIDmode
3431 && !AGGREGATE_TYPE_P (type))
3433 unsigned int align = GET_MODE_ALIGNMENT (mode);
3434 if (crtl->stack_alignment_estimated < align)
3436 gcc_assert (!crtl->stack_realign_processed);
3437 crtl->stack_alignment_estimated = align;
3443 /* If we are receiving a struct value address as the first argument, set up
3444 the RTL for the function result. As this might require code to convert
3445 the transmitted address to Pmode, we do this here to ensure that possible
3446 preliminary conversions of the address have been emitted already. */
3447 if (all.function_result_decl)
3449 tree result = DECL_RESULT (current_function_decl);
3450 rtx addr = DECL_RTL (all.function_result_decl);
3451 rtx x;
3453 if (DECL_BY_REFERENCE (result))
3455 SET_DECL_VALUE_EXPR (result, all.function_result_decl);
3456 x = addr;
3458 else
3460 SET_DECL_VALUE_EXPR (result,
3461 build1 (INDIRECT_REF, TREE_TYPE (result),
3462 all.function_result_decl));
3463 addr = convert_memory_address (Pmode, addr);
3464 x = gen_rtx_MEM (DECL_MODE (result), addr);
3465 set_mem_attributes (x, result, 1);
3468 DECL_HAS_VALUE_EXPR_P (result) = 1;
3470 SET_DECL_RTL (result, x);
3473 /* We have aligned all the args, so add space for the pretend args. */
3474 crtl->args.pretend_args_size = all.pretend_args_size;
3475 all.stack_args_size.constant += all.extra_pretend_bytes;
3476 crtl->args.size = all.stack_args_size.constant;
3478 /* Adjust function incoming argument size for alignment and
3479 minimum length. */
3481 #ifdef REG_PARM_STACK_SPACE
3482 crtl->args.size = MAX (crtl->args.size,
3483 REG_PARM_STACK_SPACE (fndecl));
3484 #endif
3486 crtl->args.size = CEIL_ROUND (crtl->args.size,
3487 PARM_BOUNDARY / BITS_PER_UNIT);
3489 #ifdef ARGS_GROW_DOWNWARD
3490 crtl->args.arg_offset_rtx
3491 = (all.stack_args_size.var == 0 ? GEN_INT (-all.stack_args_size.constant)
3492 : expand_expr (size_diffop (all.stack_args_size.var,
3493 size_int (-all.stack_args_size.constant)),
3494 NULL_RTX, VOIDmode, EXPAND_NORMAL));
3495 #else
3496 crtl->args.arg_offset_rtx = ARGS_SIZE_RTX (all.stack_args_size);
3497 #endif
3499 /* See how many bytes, if any, of its args a function should try to pop
3500 on return. */
3502 crtl->args.pops_args = targetm.calls.return_pops_args (fndecl,
3503 TREE_TYPE (fndecl),
3504 crtl->args.size);
3506 /* For stdarg.h function, save info about
3507 regs and stack space used by the named args. */
3509 crtl->args.info = all.args_so_far_v;
3511 /* Set the rtx used for the function return value. Put this in its
3512 own variable so any optimizers that need this information don't have
3513 to include tree.h. Do this here so it gets done when an inlined
3514 function gets output. */
3516 crtl->return_rtx
3517 = (DECL_RTL_SET_P (DECL_RESULT (fndecl))
3518 ? DECL_RTL (DECL_RESULT (fndecl)) : NULL_RTX);
3520 /* If scalar return value was computed in a pseudo-reg, or was a named
3521 return value that got dumped to the stack, copy that to the hard
3522 return register. */
3523 if (DECL_RTL_SET_P (DECL_RESULT (fndecl)))
3525 tree decl_result = DECL_RESULT (fndecl);
3526 rtx decl_rtl = DECL_RTL (decl_result);
3528 if (REG_P (decl_rtl)
3529 ? REGNO (decl_rtl) >= FIRST_PSEUDO_REGISTER
3530 : DECL_REGISTER (decl_result))
3532 rtx real_decl_rtl;
3534 real_decl_rtl = targetm.calls.function_value (TREE_TYPE (decl_result),
3535 fndecl, true);
3536 REG_FUNCTION_VALUE_P (real_decl_rtl) = 1;
3537 /* The delay slot scheduler assumes that crtl->return_rtx
3538 holds the hard register containing the return value, not a
3539 temporary pseudo. */
3540 crtl->return_rtx = real_decl_rtl;
3545 /* A subroutine of gimplify_parameters, invoked via walk_tree.
3546 For all seen types, gimplify their sizes. */
3548 static tree
3549 gimplify_parm_type (tree *tp, int *walk_subtrees, void *data)
3551 tree t = *tp;
3553 *walk_subtrees = 0;
3554 if (TYPE_P (t))
3556 if (POINTER_TYPE_P (t))
3557 *walk_subtrees = 1;
3558 else if (TYPE_SIZE (t) && !TREE_CONSTANT (TYPE_SIZE (t))
3559 && !TYPE_SIZES_GIMPLIFIED (t))
3561 gimplify_type_sizes (t, (gimple_seq *) data);
3562 *walk_subtrees = 1;
3566 return NULL;
3569 /* Gimplify the parameter list for current_function_decl. This involves
3570 evaluating SAVE_EXPRs of variable sized parameters and generating code
3571 to implement callee-copies reference parameters. Returns a sequence of
3572 statements to add to the beginning of the function. */
3574 gimple_seq
3575 gimplify_parameters (void)
3577 struct assign_parm_data_all all;
3578 tree parm;
3579 gimple_seq stmts = NULL;
3580 VEC(tree, heap) *fnargs;
3581 unsigned i;
3583 assign_parms_initialize_all (&all);
3584 fnargs = assign_parms_augmented_arg_list (&all);
3586 FOR_EACH_VEC_ELT (tree, fnargs, i, parm)
3588 struct assign_parm_data_one data;
3590 /* Extract the type of PARM; adjust it according to ABI. */
3591 assign_parm_find_data_types (&all, parm, &data);
3593 /* Early out for errors and void parameters. */
3594 if (data.passed_mode == VOIDmode || DECL_SIZE (parm) == NULL)
3595 continue;
3597 /* Update info on where next arg arrives in registers. */
3598 targetm.calls.function_arg_advance (all.args_so_far, data.promoted_mode,
3599 data.passed_type, data.named_arg);
3601 /* ??? Once upon a time variable_size stuffed parameter list
3602 SAVE_EXPRs (amongst others) onto a pending sizes list. This
3603 turned out to be less than manageable in the gimple world.
3604 Now we have to hunt them down ourselves. */
3605 walk_tree_without_duplicates (&data.passed_type,
3606 gimplify_parm_type, &stmts);
3608 if (TREE_CODE (DECL_SIZE_UNIT (parm)) != INTEGER_CST)
3610 gimplify_one_sizepos (&DECL_SIZE (parm), &stmts);
3611 gimplify_one_sizepos (&DECL_SIZE_UNIT (parm), &stmts);
3614 if (data.passed_pointer)
3616 tree type = TREE_TYPE (data.passed_type);
3617 if (reference_callee_copied (&all.args_so_far_v, TYPE_MODE (type),
3618 type, data.named_arg))
3620 tree local, t;
3622 /* For constant-sized objects, this is trivial; for
3623 variable-sized objects, we have to play games. */
3624 if (TREE_CODE (DECL_SIZE_UNIT (parm)) == INTEGER_CST
3625 && !(flag_stack_check == GENERIC_STACK_CHECK
3626 && compare_tree_int (DECL_SIZE_UNIT (parm),
3627 STACK_CHECK_MAX_VAR_SIZE) > 0))
3629 local = create_tmp_var (type, get_name (parm));
3630 DECL_IGNORED_P (local) = 0;
3631 /* If PARM was addressable, move that flag over
3632 to the local copy, as its address will be taken,
3633 not the PARMs. Keep the parms address taken
3634 as we'll query that flag during gimplification. */
3635 if (TREE_ADDRESSABLE (parm))
3636 TREE_ADDRESSABLE (local) = 1;
3637 else if (TREE_CODE (type) == COMPLEX_TYPE
3638 || TREE_CODE (type) == VECTOR_TYPE)
3639 DECL_GIMPLE_REG_P (local) = 1;
3641 else
3643 tree ptr_type, addr;
3645 ptr_type = build_pointer_type (type);
3646 addr = create_tmp_reg (ptr_type, get_name (parm));
3647 DECL_IGNORED_P (addr) = 0;
3648 local = build_fold_indirect_ref (addr);
3650 t = builtin_decl_explicit (BUILT_IN_ALLOCA_WITH_ALIGN);
3651 t = build_call_expr (t, 2, DECL_SIZE_UNIT (parm),
3652 size_int (DECL_ALIGN (parm)));
3654 /* The call has been built for a variable-sized object. */
3655 CALL_ALLOCA_FOR_VAR_P (t) = 1;
3656 t = fold_convert (ptr_type, t);
3657 t = build2 (MODIFY_EXPR, TREE_TYPE (addr), addr, t);
3658 gimplify_and_add (t, &stmts);
3661 gimplify_assign (local, parm, &stmts);
3663 SET_DECL_VALUE_EXPR (parm, local);
3664 DECL_HAS_VALUE_EXPR_P (parm) = 1;
3669 VEC_free (tree, heap, fnargs);
3671 return stmts;
3674 /* Compute the size and offset from the start of the stacked arguments for a
3675 parm passed in mode PASSED_MODE and with type TYPE.
3677 INITIAL_OFFSET_PTR points to the current offset into the stacked
3678 arguments.
3680 The starting offset and size for this parm are returned in
3681 LOCATE->OFFSET and LOCATE->SIZE, respectively. When IN_REGS is
3682 nonzero, the offset is that of stack slot, which is returned in
3683 LOCATE->SLOT_OFFSET. LOCATE->ALIGNMENT_PAD is the amount of
3684 padding required from the initial offset ptr to the stack slot.
3686 IN_REGS is nonzero if the argument will be passed in registers. It will
3687 never be set if REG_PARM_STACK_SPACE is not defined.
3689 FNDECL is the function in which the argument was defined.
3691 There are two types of rounding that are done. The first, controlled by
3692 TARGET_FUNCTION_ARG_BOUNDARY, forces the offset from the start of the
3693 argument list to be aligned to the specific boundary (in bits). This
3694 rounding affects the initial and starting offsets, but not the argument
3695 size.
3697 The second, controlled by FUNCTION_ARG_PADDING and PARM_BOUNDARY,
3698 optionally rounds the size of the parm to PARM_BOUNDARY. The
3699 initial offset is not affected by this rounding, while the size always
3700 is and the starting offset may be. */
3702 /* LOCATE->OFFSET will be negative for ARGS_GROW_DOWNWARD case;
3703 INITIAL_OFFSET_PTR is positive because locate_and_pad_parm's
3704 callers pass in the total size of args so far as
3705 INITIAL_OFFSET_PTR. LOCATE->SIZE is always positive. */
3707 void
3708 locate_and_pad_parm (enum machine_mode passed_mode, tree type, int in_regs,
3709 int partial, tree fndecl ATTRIBUTE_UNUSED,
3710 struct args_size *initial_offset_ptr,
3711 struct locate_and_pad_arg_data *locate)
3713 tree sizetree;
3714 enum direction where_pad;
3715 unsigned int boundary, round_boundary;
3716 int reg_parm_stack_space = 0;
3717 int part_size_in_regs;
3719 #ifdef REG_PARM_STACK_SPACE
3720 reg_parm_stack_space = REG_PARM_STACK_SPACE (fndecl);
3722 /* If we have found a stack parm before we reach the end of the
3723 area reserved for registers, skip that area. */
3724 if (! in_regs)
3726 if (reg_parm_stack_space > 0)
3728 if (initial_offset_ptr->var)
3730 initial_offset_ptr->var
3731 = size_binop (MAX_EXPR, ARGS_SIZE_TREE (*initial_offset_ptr),
3732 ssize_int (reg_parm_stack_space));
3733 initial_offset_ptr->constant = 0;
3735 else if (initial_offset_ptr->constant < reg_parm_stack_space)
3736 initial_offset_ptr->constant = reg_parm_stack_space;
3739 #endif /* REG_PARM_STACK_SPACE */
3741 part_size_in_regs = (reg_parm_stack_space == 0 ? partial : 0);
3743 sizetree
3744 = type ? size_in_bytes (type) : size_int (GET_MODE_SIZE (passed_mode));
3745 where_pad = FUNCTION_ARG_PADDING (passed_mode, type);
3746 boundary = targetm.calls.function_arg_boundary (passed_mode, type);
3747 round_boundary = targetm.calls.function_arg_round_boundary (passed_mode,
3748 type);
3749 locate->where_pad = where_pad;
3751 /* Alignment can't exceed MAX_SUPPORTED_STACK_ALIGNMENT. */
3752 if (boundary > MAX_SUPPORTED_STACK_ALIGNMENT)
3753 boundary = MAX_SUPPORTED_STACK_ALIGNMENT;
3755 locate->boundary = boundary;
3757 if (SUPPORTS_STACK_ALIGNMENT)
3759 /* stack_alignment_estimated can't change after stack has been
3760 realigned. */
3761 if (crtl->stack_alignment_estimated < boundary)
3763 if (!crtl->stack_realign_processed)
3764 crtl->stack_alignment_estimated = boundary;
3765 else
3767 /* If stack is realigned and stack alignment value
3768 hasn't been finalized, it is OK not to increase
3769 stack_alignment_estimated. The bigger alignment
3770 requirement is recorded in stack_alignment_needed
3771 below. */
3772 gcc_assert (!crtl->stack_realign_finalized
3773 && crtl->stack_realign_needed);
3778 /* Remember if the outgoing parameter requires extra alignment on the
3779 calling function side. */
3780 if (crtl->stack_alignment_needed < boundary)
3781 crtl->stack_alignment_needed = boundary;
3782 if (crtl->preferred_stack_boundary < boundary)
3783 crtl->preferred_stack_boundary = boundary;
3785 #ifdef ARGS_GROW_DOWNWARD
3786 locate->slot_offset.constant = -initial_offset_ptr->constant;
3787 if (initial_offset_ptr->var)
3788 locate->slot_offset.var = size_binop (MINUS_EXPR, ssize_int (0),
3789 initial_offset_ptr->var);
3792 tree s2 = sizetree;
3793 if (where_pad != none
3794 && (!host_integerp (sizetree, 1)
3795 || (tree_low_cst (sizetree, 1) * BITS_PER_UNIT) % round_boundary))
3796 s2 = round_up (s2, round_boundary / BITS_PER_UNIT);
3797 SUB_PARM_SIZE (locate->slot_offset, s2);
3800 locate->slot_offset.constant += part_size_in_regs;
3802 if (!in_regs
3803 #ifdef REG_PARM_STACK_SPACE
3804 || REG_PARM_STACK_SPACE (fndecl) > 0
3805 #endif
3807 pad_to_arg_alignment (&locate->slot_offset, boundary,
3808 &locate->alignment_pad);
3810 locate->size.constant = (-initial_offset_ptr->constant
3811 - locate->slot_offset.constant);
3812 if (initial_offset_ptr->var)
3813 locate->size.var = size_binop (MINUS_EXPR,
3814 size_binop (MINUS_EXPR,
3815 ssize_int (0),
3816 initial_offset_ptr->var),
3817 locate->slot_offset.var);
3819 /* Pad_below needs the pre-rounded size to know how much to pad
3820 below. */
3821 locate->offset = locate->slot_offset;
3822 if (where_pad == downward)
3823 pad_below (&locate->offset, passed_mode, sizetree);
3825 #else /* !ARGS_GROW_DOWNWARD */
3826 if (!in_regs
3827 #ifdef REG_PARM_STACK_SPACE
3828 || REG_PARM_STACK_SPACE (fndecl) > 0
3829 #endif
3831 pad_to_arg_alignment (initial_offset_ptr, boundary,
3832 &locate->alignment_pad);
3833 locate->slot_offset = *initial_offset_ptr;
3835 #ifdef PUSH_ROUNDING
3836 if (passed_mode != BLKmode)
3837 sizetree = size_int (PUSH_ROUNDING (TREE_INT_CST_LOW (sizetree)));
3838 #endif
3840 /* Pad_below needs the pre-rounded size to know how much to pad below
3841 so this must be done before rounding up. */
3842 locate->offset = locate->slot_offset;
3843 if (where_pad == downward)
3844 pad_below (&locate->offset, passed_mode, sizetree);
3846 if (where_pad != none
3847 && (!host_integerp (sizetree, 1)
3848 || (tree_low_cst (sizetree, 1) * BITS_PER_UNIT) % round_boundary))
3849 sizetree = round_up (sizetree, round_boundary / BITS_PER_UNIT);
3851 ADD_PARM_SIZE (locate->size, sizetree);
3853 locate->size.constant -= part_size_in_regs;
3854 #endif /* ARGS_GROW_DOWNWARD */
3856 #ifdef FUNCTION_ARG_OFFSET
3857 locate->offset.constant += FUNCTION_ARG_OFFSET (passed_mode, type);
3858 #endif
3861 /* Round the stack offset in *OFFSET_PTR up to a multiple of BOUNDARY.
3862 BOUNDARY is measured in bits, but must be a multiple of a storage unit. */
3864 static void
3865 pad_to_arg_alignment (struct args_size *offset_ptr, int boundary,
3866 struct args_size *alignment_pad)
3868 tree save_var = NULL_TREE;
3869 HOST_WIDE_INT save_constant = 0;
3870 int boundary_in_bytes = boundary / BITS_PER_UNIT;
3871 HOST_WIDE_INT sp_offset = STACK_POINTER_OFFSET;
3873 #ifdef SPARC_STACK_BOUNDARY_HACK
3874 /* ??? The SPARC port may claim a STACK_BOUNDARY higher than
3875 the real alignment of %sp. However, when it does this, the
3876 alignment of %sp+STACK_POINTER_OFFSET is STACK_BOUNDARY. */
3877 if (SPARC_STACK_BOUNDARY_HACK)
3878 sp_offset = 0;
3879 #endif
3881 if (boundary > PARM_BOUNDARY)
3883 save_var = offset_ptr->var;
3884 save_constant = offset_ptr->constant;
3887 alignment_pad->var = NULL_TREE;
3888 alignment_pad->constant = 0;
3890 if (boundary > BITS_PER_UNIT)
3892 if (offset_ptr->var)
3894 tree sp_offset_tree = ssize_int (sp_offset);
3895 tree offset = size_binop (PLUS_EXPR,
3896 ARGS_SIZE_TREE (*offset_ptr),
3897 sp_offset_tree);
3898 #ifdef ARGS_GROW_DOWNWARD
3899 tree rounded = round_down (offset, boundary / BITS_PER_UNIT);
3900 #else
3901 tree rounded = round_up (offset, boundary / BITS_PER_UNIT);
3902 #endif
3904 offset_ptr->var = size_binop (MINUS_EXPR, rounded, sp_offset_tree);
3905 /* ARGS_SIZE_TREE includes constant term. */
3906 offset_ptr->constant = 0;
3907 if (boundary > PARM_BOUNDARY)
3908 alignment_pad->var = size_binop (MINUS_EXPR, offset_ptr->var,
3909 save_var);
3911 else
3913 offset_ptr->constant = -sp_offset +
3914 #ifdef ARGS_GROW_DOWNWARD
3915 FLOOR_ROUND (offset_ptr->constant + sp_offset, boundary_in_bytes);
3916 #else
3917 CEIL_ROUND (offset_ptr->constant + sp_offset, boundary_in_bytes);
3918 #endif
3919 if (boundary > PARM_BOUNDARY)
3920 alignment_pad->constant = offset_ptr->constant - save_constant;
3925 static void
3926 pad_below (struct args_size *offset_ptr, enum machine_mode passed_mode, tree sizetree)
3928 if (passed_mode != BLKmode)
3930 if (GET_MODE_BITSIZE (passed_mode) % PARM_BOUNDARY)
3931 offset_ptr->constant
3932 += (((GET_MODE_BITSIZE (passed_mode) + PARM_BOUNDARY - 1)
3933 / PARM_BOUNDARY * PARM_BOUNDARY / BITS_PER_UNIT)
3934 - GET_MODE_SIZE (passed_mode));
3936 else
3938 if (TREE_CODE (sizetree) != INTEGER_CST
3939 || (TREE_INT_CST_LOW (sizetree) * BITS_PER_UNIT) % PARM_BOUNDARY)
3941 /* Round the size up to multiple of PARM_BOUNDARY bits. */
3942 tree s2 = round_up (sizetree, PARM_BOUNDARY / BITS_PER_UNIT);
3943 /* Add it in. */
3944 ADD_PARM_SIZE (*offset_ptr, s2);
3945 SUB_PARM_SIZE (*offset_ptr, sizetree);
3951 /* True if register REGNO was alive at a place where `setjmp' was
3952 called and was set more than once or is an argument. Such regs may
3953 be clobbered by `longjmp'. */
3955 static bool
3956 regno_clobbered_at_setjmp (bitmap setjmp_crosses, int regno)
3958 /* There appear to be cases where some local vars never reach the
3959 backend but have bogus regnos. */
3960 if (regno >= max_reg_num ())
3961 return false;
3963 return ((REG_N_SETS (regno) > 1
3964 || REGNO_REG_SET_P (df_get_live_out (ENTRY_BLOCK_PTR), regno))
3965 && REGNO_REG_SET_P (setjmp_crosses, regno));
3968 /* Walk the tree of blocks describing the binding levels within a
3969 function and warn about variables the might be killed by setjmp or
3970 vfork. This is done after calling flow_analysis before register
3971 allocation since that will clobber the pseudo-regs to hard
3972 regs. */
3974 static void
3975 setjmp_vars_warning (bitmap setjmp_crosses, tree block)
3977 tree decl, sub;
3979 for (decl = BLOCK_VARS (block); decl; decl = DECL_CHAIN (decl))
3981 if (TREE_CODE (decl) == VAR_DECL
3982 && DECL_RTL_SET_P (decl)
3983 && REG_P (DECL_RTL (decl))
3984 && regno_clobbered_at_setjmp (setjmp_crosses, REGNO (DECL_RTL (decl))))
3985 warning (OPT_Wclobbered, "variable %q+D might be clobbered by"
3986 " %<longjmp%> or %<vfork%>", decl);
3989 for (sub = BLOCK_SUBBLOCKS (block); sub; sub = BLOCK_CHAIN (sub))
3990 setjmp_vars_warning (setjmp_crosses, sub);
3993 /* Do the appropriate part of setjmp_vars_warning
3994 but for arguments instead of local variables. */
3996 static void
3997 setjmp_args_warning (bitmap setjmp_crosses)
3999 tree decl;
4000 for (decl = DECL_ARGUMENTS (current_function_decl);
4001 decl; decl = DECL_CHAIN (decl))
4002 if (DECL_RTL (decl) != 0
4003 && REG_P (DECL_RTL (decl))
4004 && regno_clobbered_at_setjmp (setjmp_crosses, REGNO (DECL_RTL (decl))))
4005 warning (OPT_Wclobbered,
4006 "argument %q+D might be clobbered by %<longjmp%> or %<vfork%>",
4007 decl);
4010 /* Generate warning messages for variables live across setjmp. */
4012 void
4013 generate_setjmp_warnings (void)
4015 bitmap setjmp_crosses = regstat_get_setjmp_crosses ();
4017 if (n_basic_blocks == NUM_FIXED_BLOCKS
4018 || bitmap_empty_p (setjmp_crosses))
4019 return;
4021 setjmp_vars_warning (setjmp_crosses, DECL_INITIAL (current_function_decl));
4022 setjmp_args_warning (setjmp_crosses);
4026 /* Reverse the order of elements in the fragment chain T of blocks,
4027 and return the new head of the chain (old last element).
4028 In addition to that clear BLOCK_SAME_RANGE flags when needed
4029 and adjust BLOCK_SUPERCONTEXT from the super fragment to
4030 its super fragment origin. */
4032 static tree
4033 block_fragments_nreverse (tree t)
4035 tree prev = 0, block, next, prev_super = 0;
4036 tree super = BLOCK_SUPERCONTEXT (t);
4037 if (BLOCK_FRAGMENT_ORIGIN (super))
4038 super = BLOCK_FRAGMENT_ORIGIN (super);
4039 for (block = t; block; block = next)
4041 next = BLOCK_FRAGMENT_CHAIN (block);
4042 BLOCK_FRAGMENT_CHAIN (block) = prev;
4043 if ((prev && !BLOCK_SAME_RANGE (prev))
4044 || (BLOCK_FRAGMENT_CHAIN (BLOCK_SUPERCONTEXT (block))
4045 != prev_super))
4046 BLOCK_SAME_RANGE (block) = 0;
4047 prev_super = BLOCK_SUPERCONTEXT (block);
4048 BLOCK_SUPERCONTEXT (block) = super;
4049 prev = block;
4051 t = BLOCK_FRAGMENT_ORIGIN (t);
4052 if (BLOCK_FRAGMENT_CHAIN (BLOCK_SUPERCONTEXT (t))
4053 != prev_super)
4054 BLOCK_SAME_RANGE (t) = 0;
4055 BLOCK_SUPERCONTEXT (t) = super;
4056 return prev;
4059 /* Reverse the order of elements in the chain T of blocks,
4060 and return the new head of the chain (old last element).
4061 Also do the same on subblocks and reverse the order of elements
4062 in BLOCK_FRAGMENT_CHAIN as well. */
4064 static tree
4065 blocks_nreverse_all (tree t)
4067 tree prev = 0, block, next;
4068 for (block = t; block; block = next)
4070 next = BLOCK_CHAIN (block);
4071 BLOCK_CHAIN (block) = prev;
4072 if (BLOCK_FRAGMENT_CHAIN (block)
4073 && BLOCK_FRAGMENT_ORIGIN (block) == NULL_TREE)
4075 BLOCK_FRAGMENT_CHAIN (block)
4076 = block_fragments_nreverse (BLOCK_FRAGMENT_CHAIN (block));
4077 if (!BLOCK_SAME_RANGE (BLOCK_FRAGMENT_CHAIN (block)))
4078 BLOCK_SAME_RANGE (block) = 0;
4080 BLOCK_SUBBLOCKS (block) = blocks_nreverse_all (BLOCK_SUBBLOCKS (block));
4081 prev = block;
4083 return prev;
4087 /* Identify BLOCKs referenced by more than one NOTE_INSN_BLOCK_{BEG,END},
4088 and create duplicate blocks. */
4089 /* ??? Need an option to either create block fragments or to create
4090 abstract origin duplicates of a source block. It really depends
4091 on what optimization has been performed. */
4093 void
4094 reorder_blocks (void)
4096 tree block = DECL_INITIAL (current_function_decl);
4097 VEC(tree,heap) *block_stack;
4099 if (block == NULL_TREE)
4100 return;
4102 block_stack = VEC_alloc (tree, heap, 10);
4104 /* Reset the TREE_ASM_WRITTEN bit for all blocks. */
4105 clear_block_marks (block);
4107 /* Prune the old trees away, so that they don't get in the way. */
4108 BLOCK_SUBBLOCKS (block) = NULL_TREE;
4109 BLOCK_CHAIN (block) = NULL_TREE;
4111 /* Recreate the block tree from the note nesting. */
4112 reorder_blocks_1 (get_insns (), block, &block_stack);
4113 BLOCK_SUBBLOCKS (block) = blocks_nreverse_all (BLOCK_SUBBLOCKS (block));
4115 VEC_free (tree, heap, block_stack);
4118 /* Helper function for reorder_blocks. Reset TREE_ASM_WRITTEN. */
4120 void
4121 clear_block_marks (tree block)
4123 while (block)
4125 TREE_ASM_WRITTEN (block) = 0;
4126 clear_block_marks (BLOCK_SUBBLOCKS (block));
4127 block = BLOCK_CHAIN (block);
4131 static void
4132 reorder_blocks_1 (rtx insns, tree current_block, VEC(tree,heap) **p_block_stack)
4134 rtx insn;
4135 tree prev_beg = NULL_TREE, prev_end = NULL_TREE;
4137 for (insn = insns; insn; insn = NEXT_INSN (insn))
4139 if (NOTE_P (insn))
4141 if (NOTE_KIND (insn) == NOTE_INSN_BLOCK_BEG)
4143 tree block = NOTE_BLOCK (insn);
4144 tree origin;
4146 gcc_assert (BLOCK_FRAGMENT_ORIGIN (block) == NULL_TREE);
4147 origin = block;
4149 if (prev_end)
4150 BLOCK_SAME_RANGE (prev_end) = 0;
4151 prev_end = NULL_TREE;
4153 /* If we have seen this block before, that means it now
4154 spans multiple address regions. Create a new fragment. */
4155 if (TREE_ASM_WRITTEN (block))
4157 tree new_block = copy_node (block);
4159 BLOCK_SAME_RANGE (new_block) = 0;
4160 BLOCK_FRAGMENT_ORIGIN (new_block) = origin;
4161 BLOCK_FRAGMENT_CHAIN (new_block)
4162 = BLOCK_FRAGMENT_CHAIN (origin);
4163 BLOCK_FRAGMENT_CHAIN (origin) = new_block;
4165 NOTE_BLOCK (insn) = new_block;
4166 block = new_block;
4169 if (prev_beg == current_block && prev_beg)
4170 BLOCK_SAME_RANGE (block) = 1;
4172 prev_beg = origin;
4174 BLOCK_SUBBLOCKS (block) = 0;
4175 TREE_ASM_WRITTEN (block) = 1;
4176 /* When there's only one block for the entire function,
4177 current_block == block and we mustn't do this, it
4178 will cause infinite recursion. */
4179 if (block != current_block)
4181 tree super;
4182 if (block != origin)
4183 gcc_assert (BLOCK_SUPERCONTEXT (origin) == current_block
4184 || BLOCK_FRAGMENT_ORIGIN (BLOCK_SUPERCONTEXT
4185 (origin))
4186 == current_block);
4187 if (VEC_empty (tree, *p_block_stack))
4188 super = current_block;
4189 else
4191 super = VEC_last (tree, *p_block_stack);
4192 gcc_assert (super == current_block
4193 || BLOCK_FRAGMENT_ORIGIN (super)
4194 == current_block);
4196 BLOCK_SUPERCONTEXT (block) = super;
4197 BLOCK_CHAIN (block) = BLOCK_SUBBLOCKS (current_block);
4198 BLOCK_SUBBLOCKS (current_block) = block;
4199 current_block = origin;
4201 VEC_safe_push (tree, heap, *p_block_stack, block);
4203 else if (NOTE_KIND (insn) == NOTE_INSN_BLOCK_END)
4205 NOTE_BLOCK (insn) = VEC_pop (tree, *p_block_stack);
4206 current_block = BLOCK_SUPERCONTEXT (current_block);
4207 if (BLOCK_FRAGMENT_ORIGIN (current_block))
4208 current_block = BLOCK_FRAGMENT_ORIGIN (current_block);
4209 prev_beg = NULL_TREE;
4210 prev_end = BLOCK_SAME_RANGE (NOTE_BLOCK (insn))
4211 ? NOTE_BLOCK (insn) : NULL_TREE;
4214 else
4216 prev_beg = NULL_TREE;
4217 if (prev_end)
4218 BLOCK_SAME_RANGE (prev_end) = 0;
4219 prev_end = NULL_TREE;
4224 /* Reverse the order of elements in the chain T of blocks,
4225 and return the new head of the chain (old last element). */
4227 tree
4228 blocks_nreverse (tree t)
4230 tree prev = 0, block, next;
4231 for (block = t; block; block = next)
4233 next = BLOCK_CHAIN (block);
4234 BLOCK_CHAIN (block) = prev;
4235 prev = block;
4237 return prev;
4240 /* Concatenate two chains of blocks (chained through BLOCK_CHAIN)
4241 by modifying the last node in chain 1 to point to chain 2. */
4243 tree
4244 block_chainon (tree op1, tree op2)
4246 tree t1;
4248 if (!op1)
4249 return op2;
4250 if (!op2)
4251 return op1;
4253 for (t1 = op1; BLOCK_CHAIN (t1); t1 = BLOCK_CHAIN (t1))
4254 continue;
4255 BLOCK_CHAIN (t1) = op2;
4257 #ifdef ENABLE_TREE_CHECKING
4259 tree t2;
4260 for (t2 = op2; t2; t2 = BLOCK_CHAIN (t2))
4261 gcc_assert (t2 != t1);
4263 #endif
4265 return op1;
4268 /* Count the subblocks of the list starting with BLOCK. If VECTOR is
4269 non-NULL, list them all into VECTOR, in a depth-first preorder
4270 traversal of the block tree. Also clear TREE_ASM_WRITTEN in all
4271 blocks. */
4273 static int
4274 all_blocks (tree block, tree *vector)
4276 int n_blocks = 0;
4278 while (block)
4280 TREE_ASM_WRITTEN (block) = 0;
4282 /* Record this block. */
4283 if (vector)
4284 vector[n_blocks] = block;
4286 ++n_blocks;
4288 /* Record the subblocks, and their subblocks... */
4289 n_blocks += all_blocks (BLOCK_SUBBLOCKS (block),
4290 vector ? vector + n_blocks : 0);
4291 block = BLOCK_CHAIN (block);
4294 return n_blocks;
4297 /* Return a vector containing all the blocks rooted at BLOCK. The
4298 number of elements in the vector is stored in N_BLOCKS_P. The
4299 vector is dynamically allocated; it is the caller's responsibility
4300 to call `free' on the pointer returned. */
4302 static tree *
4303 get_block_vector (tree block, int *n_blocks_p)
4305 tree *block_vector;
4307 *n_blocks_p = all_blocks (block, NULL);
4308 block_vector = XNEWVEC (tree, *n_blocks_p);
4309 all_blocks (block, block_vector);
4311 return block_vector;
4314 static GTY(()) int next_block_index = 2;
4316 /* Set BLOCK_NUMBER for all the blocks in FN. */
4318 void
4319 number_blocks (tree fn)
4321 int i;
4322 int n_blocks;
4323 tree *block_vector;
4325 /* For SDB and XCOFF debugging output, we start numbering the blocks
4326 from 1 within each function, rather than keeping a running
4327 count. */
4328 #if defined (SDB_DEBUGGING_INFO) || defined (XCOFF_DEBUGGING_INFO)
4329 if (write_symbols == SDB_DEBUG || write_symbols == XCOFF_DEBUG)
4330 next_block_index = 1;
4331 #endif
4333 block_vector = get_block_vector (DECL_INITIAL (fn), &n_blocks);
4335 /* The top-level BLOCK isn't numbered at all. */
4336 for (i = 1; i < n_blocks; ++i)
4337 /* We number the blocks from two. */
4338 BLOCK_NUMBER (block_vector[i]) = next_block_index++;
4340 free (block_vector);
4342 return;
4345 /* If VAR is present in a subblock of BLOCK, return the subblock. */
4347 DEBUG_FUNCTION tree
4348 debug_find_var_in_block_tree (tree var, tree block)
4350 tree t;
4352 for (t = BLOCK_VARS (block); t; t = TREE_CHAIN (t))
4353 if (t == var)
4354 return block;
4356 for (t = BLOCK_SUBBLOCKS (block); t; t = TREE_CHAIN (t))
4358 tree ret = debug_find_var_in_block_tree (var, t);
4359 if (ret)
4360 return ret;
4363 return NULL_TREE;
4366 /* Keep track of whether we're in a dummy function context. If we are,
4367 we don't want to invoke the set_current_function hook, because we'll
4368 get into trouble if the hook calls target_reinit () recursively or
4369 when the initial initialization is not yet complete. */
4371 static bool in_dummy_function;
4373 /* Invoke the target hook when setting cfun. Update the optimization options
4374 if the function uses different options than the default. */
4376 static void
4377 invoke_set_current_function_hook (tree fndecl)
4379 if (!in_dummy_function)
4381 tree opts = ((fndecl)
4382 ? DECL_FUNCTION_SPECIFIC_OPTIMIZATION (fndecl)
4383 : optimization_default_node);
4385 if (!opts)
4386 opts = optimization_default_node;
4388 /* Change optimization options if needed. */
4389 if (optimization_current_node != opts)
4391 optimization_current_node = opts;
4392 cl_optimization_restore (&global_options, TREE_OPTIMIZATION (opts));
4395 targetm.set_current_function (fndecl);
4399 /* cfun should never be set directly; use this function. */
4401 void
4402 set_cfun (struct function *new_cfun)
4404 if (cfun != new_cfun)
4406 cfun = new_cfun;
4407 invoke_set_current_function_hook (new_cfun ? new_cfun->decl : NULL_TREE);
4411 /* Initialized with NOGC, making this poisonous to the garbage collector. */
4413 static VEC(function_p,heap) *cfun_stack;
4415 /* Push the current cfun onto the stack, and set cfun to new_cfun. Also set
4416 current_function_decl accordingly. */
4418 void
4419 push_cfun (struct function *new_cfun)
4421 gcc_assert ((!cfun && !current_function_decl)
4422 || (cfun && current_function_decl == cfun->decl));
4423 VEC_safe_push (function_p, heap, cfun_stack, cfun);
4424 current_function_decl = new_cfun ? new_cfun->decl : NULL_TREE;
4425 set_cfun (new_cfun);
4428 /* Pop cfun from the stack. Also set current_function_decl accordingly. */
4430 void
4431 pop_cfun (void)
4433 struct function *new_cfun = VEC_pop (function_p, cfun_stack);
4434 /* When in_dummy_function, we do have a cfun but current_function_decl is
4435 NULL. We also allow pushing NULL cfun and subsequently changing
4436 current_function_decl to something else and have both restored by
4437 pop_cfun. */
4438 gcc_checking_assert (in_dummy_function
4439 || !cfun
4440 || current_function_decl == cfun->decl);
4441 set_cfun (new_cfun);
4442 current_function_decl = new_cfun ? new_cfun->decl : NULL_TREE;
4445 /* Return value of funcdef and increase it. */
4447 get_next_funcdef_no (void)
4449 return funcdef_no++;
4452 /* Return value of funcdef. */
4454 get_last_funcdef_no (void)
4456 return funcdef_no;
4459 /* Allocate a function structure for FNDECL and set its contents
4460 to the defaults. Set cfun to the newly-allocated object.
4461 Some of the helper functions invoked during initialization assume
4462 that cfun has already been set. Therefore, assign the new object
4463 directly into cfun and invoke the back end hook explicitly at the
4464 very end, rather than initializing a temporary and calling set_cfun
4465 on it.
4467 ABSTRACT_P is true if this is a function that will never be seen by
4468 the middle-end. Such functions are front-end concepts (like C++
4469 function templates) that do not correspond directly to functions
4470 placed in object files. */
4472 void
4473 allocate_struct_function (tree fndecl, bool abstract_p)
4475 tree result;
4476 tree fntype = fndecl ? TREE_TYPE (fndecl) : NULL_TREE;
4478 cfun = ggc_alloc_cleared_function ();
4480 init_eh_for_function ();
4482 if (init_machine_status)
4483 cfun->machine = (*init_machine_status) ();
4485 #ifdef OVERRIDE_ABI_FORMAT
4486 OVERRIDE_ABI_FORMAT (fndecl);
4487 #endif
4489 if (fndecl != NULL_TREE)
4491 DECL_STRUCT_FUNCTION (fndecl) = cfun;
4492 cfun->decl = fndecl;
4493 current_function_funcdef_no = get_next_funcdef_no ();
4495 result = DECL_RESULT (fndecl);
4496 if (!abstract_p && aggregate_value_p (result, fndecl))
4498 #ifdef PCC_STATIC_STRUCT_RETURN
4499 cfun->returns_pcc_struct = 1;
4500 #endif
4501 cfun->returns_struct = 1;
4504 cfun->stdarg = stdarg_p (fntype);
4506 /* Assume all registers in stdarg functions need to be saved. */
4507 cfun->va_list_gpr_size = VA_LIST_MAX_GPR_SIZE;
4508 cfun->va_list_fpr_size = VA_LIST_MAX_FPR_SIZE;
4510 /* ??? This could be set on a per-function basis by the front-end
4511 but is this worth the hassle? */
4512 cfun->can_throw_non_call_exceptions = flag_non_call_exceptions;
4515 invoke_set_current_function_hook (fndecl);
4518 /* This is like allocate_struct_function, but pushes a new cfun for FNDECL
4519 instead of just setting it. */
4521 void
4522 push_struct_function (tree fndecl)
4524 /* When in_dummy_function we might be in the middle of a pop_cfun and
4525 current_function_decl and cfun may not match. */
4526 gcc_assert (in_dummy_function
4527 || (!cfun && !current_function_decl)
4528 || (cfun && current_function_decl == cfun->decl));
4529 VEC_safe_push (function_p, heap, cfun_stack, cfun);
4530 current_function_decl = fndecl;
4531 allocate_struct_function (fndecl, false);
4534 /* Reset crtl and other non-struct-function variables to defaults as
4535 appropriate for emitting rtl at the start of a function. */
4537 static void
4538 prepare_function_start (void)
4540 gcc_assert (!crtl->emit.x_last_insn);
4541 init_temp_slots ();
4542 init_emit ();
4543 init_varasm_status ();
4544 init_expr ();
4545 default_rtl_profile ();
4547 if (flag_stack_usage_info)
4549 cfun->su = ggc_alloc_cleared_stack_usage ();
4550 cfun->su->static_stack_size = -1;
4553 cse_not_expected = ! optimize;
4555 /* Caller save not needed yet. */
4556 caller_save_needed = 0;
4558 /* We haven't done register allocation yet. */
4559 reg_renumber = 0;
4561 /* Indicate that we have not instantiated virtual registers yet. */
4562 virtuals_instantiated = 0;
4564 /* Indicate that we want CONCATs now. */
4565 generating_concat_p = 1;
4567 /* Indicate we have no need of a frame pointer yet. */
4568 frame_pointer_needed = 0;
4571 /* Initialize the rtl expansion mechanism so that we can do simple things
4572 like generate sequences. This is used to provide a context during global
4573 initialization of some passes. You must call expand_dummy_function_end
4574 to exit this context. */
4576 void
4577 init_dummy_function_start (void)
4579 gcc_assert (!in_dummy_function);
4580 in_dummy_function = true;
4581 push_struct_function (NULL_TREE);
4582 prepare_function_start ();
4585 /* Generate RTL for the start of the function SUBR (a FUNCTION_DECL tree node)
4586 and initialize static variables for generating RTL for the statements
4587 of the function. */
4589 void
4590 init_function_start (tree subr)
4592 if (subr && DECL_STRUCT_FUNCTION (subr))
4593 set_cfun (DECL_STRUCT_FUNCTION (subr));
4594 else
4595 allocate_struct_function (subr, false);
4596 prepare_function_start ();
4597 decide_function_section (subr);
4599 /* Warn if this value is an aggregate type,
4600 regardless of which calling convention we are using for it. */
4601 if (AGGREGATE_TYPE_P (TREE_TYPE (DECL_RESULT (subr))))
4602 warning (OPT_Waggregate_return, "function returns an aggregate");
4606 void
4607 expand_main_function (void)
4609 #if (defined(INVOKE__main) \
4610 || (!defined(HAS_INIT_SECTION) \
4611 && !defined(INIT_SECTION_ASM_OP) \
4612 && !defined(INIT_ARRAY_SECTION_ASM_OP)))
4613 emit_library_call (init_one_libfunc (NAME__MAIN), LCT_NORMAL, VOIDmode, 0);
4614 #endif
4617 /* Expand code to initialize the stack_protect_guard. This is invoked at
4618 the beginning of a function to be protected. */
4620 #ifndef HAVE_stack_protect_set
4621 # define HAVE_stack_protect_set 0
4622 # define gen_stack_protect_set(x,y) (gcc_unreachable (), NULL_RTX)
4623 #endif
4625 void
4626 stack_protect_prologue (void)
4628 tree guard_decl = targetm.stack_protect_guard ();
4629 rtx x, y;
4631 x = expand_normal (crtl->stack_protect_guard);
4632 y = expand_normal (guard_decl);
4634 /* Allow the target to copy from Y to X without leaking Y into a
4635 register. */
4636 if (HAVE_stack_protect_set)
4638 rtx insn = gen_stack_protect_set (x, y);
4639 if (insn)
4641 emit_insn (insn);
4642 return;
4646 /* Otherwise do a straight move. */
4647 emit_move_insn (x, y);
4650 /* Expand code to verify the stack_protect_guard. This is invoked at
4651 the end of a function to be protected. */
4653 #ifndef HAVE_stack_protect_test
4654 # define HAVE_stack_protect_test 0
4655 # define gen_stack_protect_test(x, y, z) (gcc_unreachable (), NULL_RTX)
4656 #endif
4658 void
4659 stack_protect_epilogue (void)
4661 tree guard_decl = targetm.stack_protect_guard ();
4662 rtx label = gen_label_rtx ();
4663 rtx x, y, tmp;
4665 x = expand_normal (crtl->stack_protect_guard);
4666 y = expand_normal (guard_decl);
4668 /* Allow the target to compare Y with X without leaking either into
4669 a register. */
4670 switch (HAVE_stack_protect_test != 0)
4672 case 1:
4673 tmp = gen_stack_protect_test (x, y, label);
4674 if (tmp)
4676 emit_insn (tmp);
4677 break;
4679 /* FALLTHRU */
4681 default:
4682 emit_cmp_and_jump_insns (x, y, EQ, NULL_RTX, ptr_mode, 1, label);
4683 break;
4686 /* The noreturn predictor has been moved to the tree level. The rtl-level
4687 predictors estimate this branch about 20%, which isn't enough to get
4688 things moved out of line. Since this is the only extant case of adding
4689 a noreturn function at the rtl level, it doesn't seem worth doing ought
4690 except adding the prediction by hand. */
4691 tmp = get_last_insn ();
4692 if (JUMP_P (tmp))
4693 predict_insn_def (tmp, PRED_NORETURN, TAKEN);
4695 expand_call (targetm.stack_protect_fail (), NULL_RTX, /*ignore=*/true);
4696 free_temp_slots ();
4697 emit_label (label);
4700 /* Start the RTL for a new function, and set variables used for
4701 emitting RTL.
4702 SUBR is the FUNCTION_DECL node.
4703 PARMS_HAVE_CLEANUPS is nonzero if there are cleanups associated with
4704 the function's parameters, which must be run at any return statement. */
4706 void
4707 expand_function_start (tree subr)
4709 /* Make sure volatile mem refs aren't considered
4710 valid operands of arithmetic insns. */
4711 init_recog_no_volatile ();
4713 crtl->profile
4714 = (profile_flag
4715 && ! DECL_NO_INSTRUMENT_FUNCTION_ENTRY_EXIT (subr));
4717 crtl->limit_stack
4718 = (stack_limit_rtx != NULL_RTX && ! DECL_NO_LIMIT_STACK (subr));
4720 /* Make the label for return statements to jump to. Do not special
4721 case machines with special return instructions -- they will be
4722 handled later during jump, ifcvt, or epilogue creation. */
4723 return_label = gen_label_rtx ();
4725 /* Initialize rtx used to return the value. */
4726 /* Do this before assign_parms so that we copy the struct value address
4727 before any library calls that assign parms might generate. */
4729 /* Decide whether to return the value in memory or in a register. */
4730 if (aggregate_value_p (DECL_RESULT (subr), subr))
4732 /* Returning something that won't go in a register. */
4733 rtx value_address = 0;
4735 #ifdef PCC_STATIC_STRUCT_RETURN
4736 if (cfun->returns_pcc_struct)
4738 int size = int_size_in_bytes (TREE_TYPE (DECL_RESULT (subr)));
4739 value_address = assemble_static_space (size);
4741 else
4742 #endif
4744 rtx sv = targetm.calls.struct_value_rtx (TREE_TYPE (subr), 2);
4745 /* Expect to be passed the address of a place to store the value.
4746 If it is passed as an argument, assign_parms will take care of
4747 it. */
4748 if (sv)
4750 value_address = gen_reg_rtx (Pmode);
4751 emit_move_insn (value_address, sv);
4754 if (value_address)
4756 rtx x = value_address;
4757 if (!DECL_BY_REFERENCE (DECL_RESULT (subr)))
4759 x = gen_rtx_MEM (DECL_MODE (DECL_RESULT (subr)), x);
4760 set_mem_attributes (x, DECL_RESULT (subr), 1);
4762 SET_DECL_RTL (DECL_RESULT (subr), x);
4765 else if (DECL_MODE (DECL_RESULT (subr)) == VOIDmode)
4766 /* If return mode is void, this decl rtl should not be used. */
4767 SET_DECL_RTL (DECL_RESULT (subr), NULL_RTX);
4768 else
4770 /* Compute the return values into a pseudo reg, which we will copy
4771 into the true return register after the cleanups are done. */
4772 tree return_type = TREE_TYPE (DECL_RESULT (subr));
4773 if (TYPE_MODE (return_type) != BLKmode
4774 && targetm.calls.return_in_msb (return_type))
4775 /* expand_function_end will insert the appropriate padding in
4776 this case. Use the return value's natural (unpadded) mode
4777 within the function proper. */
4778 SET_DECL_RTL (DECL_RESULT (subr),
4779 gen_reg_rtx (TYPE_MODE (return_type)));
4780 else
4782 /* In order to figure out what mode to use for the pseudo, we
4783 figure out what the mode of the eventual return register will
4784 actually be, and use that. */
4785 rtx hard_reg = hard_function_value (return_type, subr, 0, 1);
4787 /* Structures that are returned in registers are not
4788 aggregate_value_p, so we may see a PARALLEL or a REG. */
4789 if (REG_P (hard_reg))
4790 SET_DECL_RTL (DECL_RESULT (subr),
4791 gen_reg_rtx (GET_MODE (hard_reg)));
4792 else
4794 gcc_assert (GET_CODE (hard_reg) == PARALLEL);
4795 SET_DECL_RTL (DECL_RESULT (subr), gen_group_rtx (hard_reg));
4799 /* Set DECL_REGISTER flag so that expand_function_end will copy the
4800 result to the real return register(s). */
4801 DECL_REGISTER (DECL_RESULT (subr)) = 1;
4804 /* Initialize rtx for parameters and local variables.
4805 In some cases this requires emitting insns. */
4806 assign_parms (subr);
4808 /* If function gets a static chain arg, store it. */
4809 if (cfun->static_chain_decl)
4811 tree parm = cfun->static_chain_decl;
4812 rtx local, chain, insn;
4814 local = gen_reg_rtx (Pmode);
4815 chain = targetm.calls.static_chain (current_function_decl, true);
4817 set_decl_incoming_rtl (parm, chain, false);
4818 SET_DECL_RTL (parm, local);
4819 mark_reg_pointer (local, TYPE_ALIGN (TREE_TYPE (TREE_TYPE (parm))));
4821 insn = emit_move_insn (local, chain);
4823 /* Mark the register as eliminable, similar to parameters. */
4824 if (MEM_P (chain)
4825 && reg_mentioned_p (arg_pointer_rtx, XEXP (chain, 0)))
4826 set_dst_reg_note (insn, REG_EQUIV, chain, local);
4829 /* If the function receives a non-local goto, then store the
4830 bits we need to restore the frame pointer. */
4831 if (cfun->nonlocal_goto_save_area)
4833 tree t_save;
4834 rtx r_save;
4836 tree var = TREE_OPERAND (cfun->nonlocal_goto_save_area, 0);
4837 gcc_assert (DECL_RTL_SET_P (var));
4839 t_save = build4 (ARRAY_REF,
4840 TREE_TYPE (TREE_TYPE (cfun->nonlocal_goto_save_area)),
4841 cfun->nonlocal_goto_save_area,
4842 integer_zero_node, NULL_TREE, NULL_TREE);
4843 r_save = expand_expr (t_save, NULL_RTX, VOIDmode, EXPAND_WRITE);
4844 gcc_assert (GET_MODE (r_save) == Pmode);
4846 emit_move_insn (r_save, targetm.builtin_setjmp_frame_value ());
4847 update_nonlocal_goto_save_area ();
4850 /* The following was moved from init_function_start.
4851 The move is supposed to make sdb output more accurate. */
4852 /* Indicate the beginning of the function body,
4853 as opposed to parm setup. */
4854 emit_note (NOTE_INSN_FUNCTION_BEG);
4856 gcc_assert (NOTE_P (get_last_insn ()));
4858 parm_birth_insn = get_last_insn ();
4860 if (crtl->profile)
4862 #ifdef PROFILE_HOOK
4863 PROFILE_HOOK (current_function_funcdef_no);
4864 #endif
4867 /* If we are doing generic stack checking, the probe should go here. */
4868 if (flag_stack_check == GENERIC_STACK_CHECK)
4869 stack_check_probe_note = emit_note (NOTE_INSN_DELETED);
4872 /* Undo the effects of init_dummy_function_start. */
4873 void
4874 expand_dummy_function_end (void)
4876 gcc_assert (in_dummy_function);
4878 /* End any sequences that failed to be closed due to syntax errors. */
4879 while (in_sequence_p ())
4880 end_sequence ();
4882 /* Outside function body, can't compute type's actual size
4883 until next function's body starts. */
4885 free_after_parsing (cfun);
4886 free_after_compilation (cfun);
4887 pop_cfun ();
4888 in_dummy_function = false;
4891 /* Call DOIT for each hard register used as a return value from
4892 the current function. */
4894 void
4895 diddle_return_value (void (*doit) (rtx, void *), void *arg)
4897 rtx outgoing = crtl->return_rtx;
4899 if (! outgoing)
4900 return;
4902 if (REG_P (outgoing))
4903 (*doit) (outgoing, arg);
4904 else if (GET_CODE (outgoing) == PARALLEL)
4906 int i;
4908 for (i = 0; i < XVECLEN (outgoing, 0); i++)
4910 rtx x = XEXP (XVECEXP (outgoing, 0, i), 0);
4912 if (REG_P (x) && REGNO (x) < FIRST_PSEUDO_REGISTER)
4913 (*doit) (x, arg);
4918 static void
4919 do_clobber_return_reg (rtx reg, void *arg ATTRIBUTE_UNUSED)
4921 emit_clobber (reg);
4924 void
4925 clobber_return_register (void)
4927 diddle_return_value (do_clobber_return_reg, NULL);
4929 /* In case we do use pseudo to return value, clobber it too. */
4930 if (DECL_RTL_SET_P (DECL_RESULT (current_function_decl)))
4932 tree decl_result = DECL_RESULT (current_function_decl);
4933 rtx decl_rtl = DECL_RTL (decl_result);
4934 if (REG_P (decl_rtl) && REGNO (decl_rtl) >= FIRST_PSEUDO_REGISTER)
4936 do_clobber_return_reg (decl_rtl, NULL);
4941 static void
4942 do_use_return_reg (rtx reg, void *arg ATTRIBUTE_UNUSED)
4944 emit_use (reg);
4947 static void
4948 use_return_register (void)
4950 diddle_return_value (do_use_return_reg, NULL);
4953 /* Possibly warn about unused parameters. */
4954 void
4955 do_warn_unused_parameter (tree fn)
4957 tree decl;
4959 for (decl = DECL_ARGUMENTS (fn);
4960 decl; decl = DECL_CHAIN (decl))
4961 if (!TREE_USED (decl) && TREE_CODE (decl) == PARM_DECL
4962 && DECL_NAME (decl) && !DECL_ARTIFICIAL (decl)
4963 && !TREE_NO_WARNING (decl))
4964 warning (OPT_Wunused_parameter, "unused parameter %q+D", decl);
4967 static GTY(()) rtx initial_trampoline;
4969 /* Generate RTL for the end of the current function. */
4971 void
4972 expand_function_end (void)
4974 rtx clobber_after;
4976 /* If arg_pointer_save_area was referenced only from a nested
4977 function, we will not have initialized it yet. Do that now. */
4978 if (arg_pointer_save_area && ! crtl->arg_pointer_save_area_init)
4979 get_arg_pointer_save_area ();
4981 /* If we are doing generic stack checking and this function makes calls,
4982 do a stack probe at the start of the function to ensure we have enough
4983 space for another stack frame. */
4984 if (flag_stack_check == GENERIC_STACK_CHECK)
4986 rtx insn, seq;
4988 for (insn = get_insns (); insn; insn = NEXT_INSN (insn))
4989 if (CALL_P (insn))
4991 rtx max_frame_size = GEN_INT (STACK_CHECK_MAX_FRAME_SIZE);
4992 start_sequence ();
4993 if (STACK_CHECK_MOVING_SP)
4994 anti_adjust_stack_and_probe (max_frame_size, true);
4995 else
4996 probe_stack_range (STACK_OLD_CHECK_PROTECT, max_frame_size);
4997 seq = get_insns ();
4998 end_sequence ();
4999 set_insn_locations (seq, prologue_location);
5000 emit_insn_before (seq, stack_check_probe_note);
5001 break;
5005 /* End any sequences that failed to be closed due to syntax errors. */
5006 while (in_sequence_p ())
5007 end_sequence ();
5009 clear_pending_stack_adjust ();
5010 do_pending_stack_adjust ();
5012 /* Output a linenumber for the end of the function.
5013 SDB depends on this. */
5014 set_curr_insn_location (input_location);
5016 /* Before the return label (if any), clobber the return
5017 registers so that they are not propagated live to the rest of
5018 the function. This can only happen with functions that drop
5019 through; if there had been a return statement, there would
5020 have either been a return rtx, or a jump to the return label.
5022 We delay actual code generation after the current_function_value_rtx
5023 is computed. */
5024 clobber_after = get_last_insn ();
5026 /* Output the label for the actual return from the function. */
5027 emit_label (return_label);
5029 if (targetm_common.except_unwind_info (&global_options) == UI_SJLJ)
5031 /* Let except.c know where it should emit the call to unregister
5032 the function context for sjlj exceptions. */
5033 if (flag_exceptions)
5034 sjlj_emit_function_exit_after (get_last_insn ());
5036 else
5038 /* We want to ensure that instructions that may trap are not
5039 moved into the epilogue by scheduling, because we don't
5040 always emit unwind information for the epilogue. */
5041 if (cfun->can_throw_non_call_exceptions)
5042 emit_insn (gen_blockage ());
5045 /* If this is an implementation of throw, do what's necessary to
5046 communicate between __builtin_eh_return and the epilogue. */
5047 expand_eh_return ();
5049 /* If scalar return value was computed in a pseudo-reg, or was a named
5050 return value that got dumped to the stack, copy that to the hard
5051 return register. */
5052 if (DECL_RTL_SET_P (DECL_RESULT (current_function_decl)))
5054 tree decl_result = DECL_RESULT (current_function_decl);
5055 rtx decl_rtl = DECL_RTL (decl_result);
5057 if (REG_P (decl_rtl)
5058 ? REGNO (decl_rtl) >= FIRST_PSEUDO_REGISTER
5059 : DECL_REGISTER (decl_result))
5061 rtx real_decl_rtl = crtl->return_rtx;
5063 /* This should be set in assign_parms. */
5064 gcc_assert (REG_FUNCTION_VALUE_P (real_decl_rtl));
5066 /* If this is a BLKmode structure being returned in registers,
5067 then use the mode computed in expand_return. Note that if
5068 decl_rtl is memory, then its mode may have been changed,
5069 but that crtl->return_rtx has not. */
5070 if (GET_MODE (real_decl_rtl) == BLKmode)
5071 PUT_MODE (real_decl_rtl, GET_MODE (decl_rtl));
5073 /* If a non-BLKmode return value should be padded at the least
5074 significant end of the register, shift it left by the appropriate
5075 amount. BLKmode results are handled using the group load/store
5076 machinery. */
5077 if (TYPE_MODE (TREE_TYPE (decl_result)) != BLKmode
5078 && targetm.calls.return_in_msb (TREE_TYPE (decl_result)))
5080 emit_move_insn (gen_rtx_REG (GET_MODE (decl_rtl),
5081 REGNO (real_decl_rtl)),
5082 decl_rtl);
5083 shift_return_value (GET_MODE (decl_rtl), true, real_decl_rtl);
5085 /* If a named return value dumped decl_return to memory, then
5086 we may need to re-do the PROMOTE_MODE signed/unsigned
5087 extension. */
5088 else if (GET_MODE (real_decl_rtl) != GET_MODE (decl_rtl))
5090 int unsignedp = TYPE_UNSIGNED (TREE_TYPE (decl_result));
5091 promote_function_mode (TREE_TYPE (decl_result),
5092 GET_MODE (decl_rtl), &unsignedp,
5093 TREE_TYPE (current_function_decl), 1);
5095 convert_move (real_decl_rtl, decl_rtl, unsignedp);
5097 else if (GET_CODE (real_decl_rtl) == PARALLEL)
5099 /* If expand_function_start has created a PARALLEL for decl_rtl,
5100 move the result to the real return registers. Otherwise, do
5101 a group load from decl_rtl for a named return. */
5102 if (GET_CODE (decl_rtl) == PARALLEL)
5103 emit_group_move (real_decl_rtl, decl_rtl);
5104 else
5105 emit_group_load (real_decl_rtl, decl_rtl,
5106 TREE_TYPE (decl_result),
5107 int_size_in_bytes (TREE_TYPE (decl_result)));
5109 /* In the case of complex integer modes smaller than a word, we'll
5110 need to generate some non-trivial bitfield insertions. Do that
5111 on a pseudo and not the hard register. */
5112 else if (GET_CODE (decl_rtl) == CONCAT
5113 && GET_MODE_CLASS (GET_MODE (decl_rtl)) == MODE_COMPLEX_INT
5114 && GET_MODE_BITSIZE (GET_MODE (decl_rtl)) <= BITS_PER_WORD)
5116 int old_generating_concat_p;
5117 rtx tmp;
5119 old_generating_concat_p = generating_concat_p;
5120 generating_concat_p = 0;
5121 tmp = gen_reg_rtx (GET_MODE (decl_rtl));
5122 generating_concat_p = old_generating_concat_p;
5124 emit_move_insn (tmp, decl_rtl);
5125 emit_move_insn (real_decl_rtl, tmp);
5127 else
5128 emit_move_insn (real_decl_rtl, decl_rtl);
5132 /* If returning a structure, arrange to return the address of the value
5133 in a place where debuggers expect to find it.
5135 If returning a structure PCC style,
5136 the caller also depends on this value.
5137 And cfun->returns_pcc_struct is not necessarily set. */
5138 if (cfun->returns_struct
5139 || cfun->returns_pcc_struct)
5141 rtx value_address = DECL_RTL (DECL_RESULT (current_function_decl));
5142 tree type = TREE_TYPE (DECL_RESULT (current_function_decl));
5143 rtx outgoing;
5145 if (DECL_BY_REFERENCE (DECL_RESULT (current_function_decl)))
5146 type = TREE_TYPE (type);
5147 else
5148 value_address = XEXP (value_address, 0);
5150 outgoing = targetm.calls.function_value (build_pointer_type (type),
5151 current_function_decl, true);
5153 /* Mark this as a function return value so integrate will delete the
5154 assignment and USE below when inlining this function. */
5155 REG_FUNCTION_VALUE_P (outgoing) = 1;
5157 /* The address may be ptr_mode and OUTGOING may be Pmode. */
5158 value_address = convert_memory_address (GET_MODE (outgoing),
5159 value_address);
5161 emit_move_insn (outgoing, value_address);
5163 /* Show return register used to hold result (in this case the address
5164 of the result. */
5165 crtl->return_rtx = outgoing;
5168 /* Emit the actual code to clobber return register. */
5170 rtx seq;
5172 start_sequence ();
5173 clobber_return_register ();
5174 seq = get_insns ();
5175 end_sequence ();
5177 emit_insn_after (seq, clobber_after);
5180 /* Output the label for the naked return from the function. */
5181 if (naked_return_label)
5182 emit_label (naked_return_label);
5184 /* @@@ This is a kludge. We want to ensure that instructions that
5185 may trap are not moved into the epilogue by scheduling, because
5186 we don't always emit unwind information for the epilogue. */
5187 if (cfun->can_throw_non_call_exceptions
5188 && targetm_common.except_unwind_info (&global_options) != UI_SJLJ)
5189 emit_insn (gen_blockage ());
5191 /* If stack protection is enabled for this function, check the guard. */
5192 if (crtl->stack_protect_guard)
5193 stack_protect_epilogue ();
5195 /* If we had calls to alloca, and this machine needs
5196 an accurate stack pointer to exit the function,
5197 insert some code to save and restore the stack pointer. */
5198 if (! EXIT_IGNORE_STACK
5199 && cfun->calls_alloca)
5201 rtx tem = 0, seq;
5203 start_sequence ();
5204 emit_stack_save (SAVE_FUNCTION, &tem);
5205 seq = get_insns ();
5206 end_sequence ();
5207 emit_insn_before (seq, parm_birth_insn);
5209 emit_stack_restore (SAVE_FUNCTION, tem);
5212 /* ??? This should no longer be necessary since stupid is no longer with
5213 us, but there are some parts of the compiler (eg reload_combine, and
5214 sh mach_dep_reorg) that still try and compute their own lifetime info
5215 instead of using the general framework. */
5216 use_return_register ();
5220 get_arg_pointer_save_area (void)
5222 rtx ret = arg_pointer_save_area;
5224 if (! ret)
5226 ret = assign_stack_local (Pmode, GET_MODE_SIZE (Pmode), 0);
5227 arg_pointer_save_area = ret;
5230 if (! crtl->arg_pointer_save_area_init)
5232 rtx seq;
5234 /* Save the arg pointer at the beginning of the function. The
5235 generated stack slot may not be a valid memory address, so we
5236 have to check it and fix it if necessary. */
5237 start_sequence ();
5238 emit_move_insn (validize_mem (ret),
5239 crtl->args.internal_arg_pointer);
5240 seq = get_insns ();
5241 end_sequence ();
5243 push_topmost_sequence ();
5244 emit_insn_after (seq, entry_of_function ());
5245 pop_topmost_sequence ();
5247 crtl->arg_pointer_save_area_init = true;
5250 return ret;
5253 /* Add a list of INSNS to the hash HASHP, possibly allocating HASHP
5254 for the first time. */
5256 static void
5257 record_insns (rtx insns, rtx end, htab_t *hashp)
5259 rtx tmp;
5260 htab_t hash = *hashp;
5262 if (hash == NULL)
5263 *hashp = hash
5264 = htab_create_ggc (17, htab_hash_pointer, htab_eq_pointer, NULL);
5266 for (tmp = insns; tmp != end; tmp = NEXT_INSN (tmp))
5268 void **slot = htab_find_slot (hash, tmp, INSERT);
5269 gcc_assert (*slot == NULL);
5270 *slot = tmp;
5274 /* INSN has been duplicated or replaced by as COPY, perhaps by duplicating a
5275 basic block, splitting or peepholes. If INSN is a prologue or epilogue
5276 insn, then record COPY as well. */
5278 void
5279 maybe_copy_prologue_epilogue_insn (rtx insn, rtx copy)
5281 htab_t hash;
5282 void **slot;
5284 hash = epilogue_insn_hash;
5285 if (!hash || !htab_find (hash, insn))
5287 hash = prologue_insn_hash;
5288 if (!hash || !htab_find (hash, insn))
5289 return;
5292 slot = htab_find_slot (hash, copy, INSERT);
5293 gcc_assert (*slot == NULL);
5294 *slot = copy;
5297 /* Set the location of the insn chain starting at INSN to LOC. */
5298 static void
5299 set_insn_locations (rtx insn, int loc)
5301 while (insn != NULL_RTX)
5303 if (INSN_P (insn))
5304 INSN_LOCATION (insn) = loc;
5305 insn = NEXT_INSN (insn);
5309 /* Determine if any INSNs in HASH are, or are part of, INSN. Because
5310 we can be running after reorg, SEQUENCE rtl is possible. */
5312 static bool
5313 contains (const_rtx insn, htab_t hash)
5315 if (hash == NULL)
5316 return false;
5318 if (NONJUMP_INSN_P (insn) && GET_CODE (PATTERN (insn)) == SEQUENCE)
5320 int i;
5321 for (i = XVECLEN (PATTERN (insn), 0) - 1; i >= 0; i--)
5322 if (htab_find (hash, XVECEXP (PATTERN (insn), 0, i)))
5323 return true;
5324 return false;
5327 return htab_find (hash, insn) != NULL;
5331 prologue_epilogue_contains (const_rtx insn)
5333 if (contains (insn, prologue_insn_hash))
5334 return 1;
5335 if (contains (insn, epilogue_insn_hash))
5336 return 1;
5337 return 0;
5340 #ifdef HAVE_simple_return
5342 /* Return true if INSN requires the stack frame to be set up.
5343 PROLOGUE_USED contains the hard registers used in the function
5344 prologue. SET_UP_BY_PROLOGUE is the set of registers we expect the
5345 prologue to set up for the function. */
5346 bool
5347 requires_stack_frame_p (rtx insn, HARD_REG_SET prologue_used,
5348 HARD_REG_SET set_up_by_prologue)
5350 df_ref *df_rec;
5351 HARD_REG_SET hardregs;
5352 unsigned regno;
5354 if (CALL_P (insn))
5355 return !SIBLING_CALL_P (insn);
5357 /* We need a frame to get the unique CFA expected by the unwinder. */
5358 if (cfun->can_throw_non_call_exceptions && can_throw_internal (insn))
5359 return true;
5361 CLEAR_HARD_REG_SET (hardregs);
5362 for (df_rec = DF_INSN_DEFS (insn); *df_rec; df_rec++)
5364 rtx dreg = DF_REF_REG (*df_rec);
5366 if (!REG_P (dreg))
5367 continue;
5369 add_to_hard_reg_set (&hardregs, GET_MODE (dreg),
5370 REGNO (dreg));
5372 if (hard_reg_set_intersect_p (hardregs, prologue_used))
5373 return true;
5374 AND_COMPL_HARD_REG_SET (hardregs, call_used_reg_set);
5375 for (regno = 0; regno < FIRST_PSEUDO_REGISTER; regno++)
5376 if (TEST_HARD_REG_BIT (hardregs, regno)
5377 && df_regs_ever_live_p (regno))
5378 return true;
5380 for (df_rec = DF_INSN_USES (insn); *df_rec; df_rec++)
5382 rtx reg = DF_REF_REG (*df_rec);
5384 if (!REG_P (reg))
5385 continue;
5387 add_to_hard_reg_set (&hardregs, GET_MODE (reg),
5388 REGNO (reg));
5390 if (hard_reg_set_intersect_p (hardregs, set_up_by_prologue))
5391 return true;
5393 return false;
5396 /* See whether BB has a single successor that uses [REGNO, END_REGNO),
5397 and if BB is its only predecessor. Return that block if so,
5398 otherwise return null. */
5400 static basic_block
5401 next_block_for_reg (basic_block bb, int regno, int end_regno)
5403 edge e, live_edge;
5404 edge_iterator ei;
5405 bitmap live;
5406 int i;
5408 live_edge = NULL;
5409 FOR_EACH_EDGE (e, ei, bb->succs)
5411 live = df_get_live_in (e->dest);
5412 for (i = regno; i < end_regno; i++)
5413 if (REGNO_REG_SET_P (live, i))
5415 if (live_edge && live_edge != e)
5416 return NULL;
5417 live_edge = e;
5421 /* We can sometimes encounter dead code. Don't try to move it
5422 into the exit block. */
5423 if (!live_edge || live_edge->dest == EXIT_BLOCK_PTR)
5424 return NULL;
5426 /* Reject targets of abnormal edges. This is needed for correctness
5427 on ports like Alpha and MIPS, whose pic_offset_table_rtx can die on
5428 exception edges even though it is generally treated as call-saved
5429 for the majority of the compilation. Moving across abnormal edges
5430 isn't going to be interesting for shrink-wrap usage anyway. */
5431 if (live_edge->flags & EDGE_ABNORMAL)
5432 return NULL;
5434 if (EDGE_COUNT (live_edge->dest->preds) > 1)
5435 return NULL;
5437 return live_edge->dest;
5440 /* Try to move INSN from BB to a successor. Return true on success.
5441 USES and DEFS are the set of registers that are used and defined
5442 after INSN in BB. */
5444 static bool
5445 move_insn_for_shrink_wrap (basic_block bb, rtx insn,
5446 const HARD_REG_SET uses,
5447 const HARD_REG_SET defs)
5449 rtx set, src, dest;
5450 bitmap live_out, live_in, bb_uses, bb_defs;
5451 unsigned int i, dregno, end_dregno, sregno, end_sregno;
5452 basic_block next_block;
5454 /* Look for a simple register copy. */
5455 set = single_set (insn);
5456 if (!set)
5457 return false;
5458 src = SET_SRC (set);
5459 dest = SET_DEST (set);
5460 if (!REG_P (dest) || !REG_P (src))
5461 return false;
5463 /* Make sure that the source register isn't defined later in BB. */
5464 sregno = REGNO (src);
5465 end_sregno = END_REGNO (src);
5466 if (overlaps_hard_reg_set_p (defs, GET_MODE (src), sregno))
5467 return false;
5469 /* Make sure that the destination register isn't referenced later in BB. */
5470 dregno = REGNO (dest);
5471 end_dregno = END_REGNO (dest);
5472 if (overlaps_hard_reg_set_p (uses, GET_MODE (dest), dregno)
5473 || overlaps_hard_reg_set_p (defs, GET_MODE (dest), dregno))
5474 return false;
5476 /* See whether there is a successor block to which we could move INSN. */
5477 next_block = next_block_for_reg (bb, dregno, end_dregno);
5478 if (!next_block)
5479 return false;
5481 /* At this point we are committed to moving INSN, but let's try to
5482 move it as far as we can. */
5485 live_out = df_get_live_out (bb);
5486 live_in = df_get_live_in (next_block);
5487 bb = next_block;
5489 /* Check whether BB uses DEST or clobbers DEST. We need to add
5490 INSN to BB if so. Either way, DEST is no longer live on entry,
5491 except for any part that overlaps SRC (next loop). */
5492 bb_uses = &DF_LR_BB_INFO (bb)->use;
5493 bb_defs = &DF_LR_BB_INFO (bb)->def;
5494 for (i = dregno; i < end_dregno; i++)
5496 if (REGNO_REG_SET_P (bb_uses, i) || REGNO_REG_SET_P (bb_defs, i))
5497 next_block = NULL;
5498 CLEAR_REGNO_REG_SET (live_out, i);
5499 CLEAR_REGNO_REG_SET (live_in, i);
5502 /* Check whether BB clobbers SRC. We need to add INSN to BB if so.
5503 Either way, SRC is now live on entry. */
5504 for (i = sregno; i < end_sregno; i++)
5506 if (REGNO_REG_SET_P (bb_defs, i))
5507 next_block = NULL;
5508 SET_REGNO_REG_SET (live_out, i);
5509 SET_REGNO_REG_SET (live_in, i);
5512 /* If we don't need to add the move to BB, look for a single
5513 successor block. */
5514 if (next_block)
5515 next_block = next_block_for_reg (next_block, dregno, end_dregno);
5517 while (next_block);
5519 /* BB now defines DEST. It only uses the parts of DEST that overlap SRC
5520 (next loop). */
5521 for (i = dregno; i < end_dregno; i++)
5523 CLEAR_REGNO_REG_SET (bb_uses, i);
5524 SET_REGNO_REG_SET (bb_defs, i);
5527 /* BB now uses SRC. */
5528 for (i = sregno; i < end_sregno; i++)
5529 SET_REGNO_REG_SET (bb_uses, i);
5531 emit_insn_after (PATTERN (insn), bb_note (bb));
5532 delete_insn (insn);
5533 return true;
5536 /* Look for register copies in the first block of the function, and move
5537 them down into successor blocks if the register is used only on one
5538 path. This exposes more opportunities for shrink-wrapping. These
5539 kinds of sets often occur when incoming argument registers are moved
5540 to call-saved registers because their values are live across one or
5541 more calls during the function. */
5543 static void
5544 prepare_shrink_wrap (basic_block entry_block)
5546 rtx insn, curr, x;
5547 HARD_REG_SET uses, defs;
5548 df_ref *ref;
5550 CLEAR_HARD_REG_SET (uses);
5551 CLEAR_HARD_REG_SET (defs);
5552 FOR_BB_INSNS_REVERSE_SAFE (entry_block, insn, curr)
5553 if (NONDEBUG_INSN_P (insn)
5554 && !move_insn_for_shrink_wrap (entry_block, insn, uses, defs))
5556 /* Add all defined registers to DEFs. */
5557 for (ref = DF_INSN_DEFS (insn); *ref; ref++)
5559 x = DF_REF_REG (*ref);
5560 if (REG_P (x) && HARD_REGISTER_P (x))
5561 SET_HARD_REG_BIT (defs, REGNO (x));
5564 /* Add all used registers to USESs. */
5565 for (ref = DF_INSN_USES (insn); *ref; ref++)
5567 x = DF_REF_REG (*ref);
5568 if (REG_P (x) && HARD_REGISTER_P (x))
5569 SET_HARD_REG_BIT (uses, REGNO (x));
5574 #endif
5576 #ifdef HAVE_return
5577 /* Insert use of return register before the end of BB. */
5579 static void
5580 emit_use_return_register_into_block (basic_block bb)
5582 rtx seq;
5583 start_sequence ();
5584 use_return_register ();
5585 seq = get_insns ();
5586 end_sequence ();
5587 emit_insn_before (seq, BB_END (bb));
5591 /* Create a return pattern, either simple_return or return, depending on
5592 simple_p. */
5594 static rtx
5595 gen_return_pattern (bool simple_p)
5597 #ifdef HAVE_simple_return
5598 return simple_p ? gen_simple_return () : gen_return ();
5599 #else
5600 gcc_assert (!simple_p);
5601 return gen_return ();
5602 #endif
5605 /* Insert an appropriate return pattern at the end of block BB. This
5606 also means updating block_for_insn appropriately. SIMPLE_P is
5607 the same as in gen_return_pattern and passed to it. */
5609 static void
5610 emit_return_into_block (bool simple_p, basic_block bb)
5612 rtx jump, pat;
5613 jump = emit_jump_insn_after (gen_return_pattern (simple_p), BB_END (bb));
5614 pat = PATTERN (jump);
5615 if (GET_CODE (pat) == PARALLEL)
5616 pat = XVECEXP (pat, 0, 0);
5617 gcc_assert (ANY_RETURN_P (pat));
5618 JUMP_LABEL (jump) = pat;
5620 #endif
5622 /* Set JUMP_LABEL for a return insn. */
5624 void
5625 set_return_jump_label (rtx returnjump)
5627 rtx pat = PATTERN (returnjump);
5628 if (GET_CODE (pat) == PARALLEL)
5629 pat = XVECEXP (pat, 0, 0);
5630 if (ANY_RETURN_P (pat))
5631 JUMP_LABEL (returnjump) = pat;
5632 else
5633 JUMP_LABEL (returnjump) = ret_rtx;
5636 #ifdef HAVE_simple_return
5637 /* Create a copy of BB instructions and insert at BEFORE. Redirect
5638 preds of BB to COPY_BB if they don't appear in NEED_PROLOGUE. */
5639 static void
5640 dup_block_and_redirect (basic_block bb, basic_block copy_bb, rtx before,
5641 bitmap_head *need_prologue)
5643 edge_iterator ei;
5644 edge e;
5645 rtx insn = BB_END (bb);
5647 /* We know BB has a single successor, so there is no need to copy a
5648 simple jump at the end of BB. */
5649 if (simplejump_p (insn))
5650 insn = PREV_INSN (insn);
5652 start_sequence ();
5653 duplicate_insn_chain (BB_HEAD (bb), insn);
5654 if (dump_file)
5656 unsigned count = 0;
5657 for (insn = get_insns (); insn; insn = NEXT_INSN (insn))
5658 if (active_insn_p (insn))
5659 ++count;
5660 fprintf (dump_file, "Duplicating bb %d to bb %d, %u active insns.\n",
5661 bb->index, copy_bb->index, count);
5663 insn = get_insns ();
5664 end_sequence ();
5665 emit_insn_before (insn, before);
5667 /* Redirect all the paths that need no prologue into copy_bb. */
5668 for (ei = ei_start (bb->preds); (e = ei_safe_edge (ei)); )
5669 if (!bitmap_bit_p (need_prologue, e->src->index))
5671 int freq = EDGE_FREQUENCY (e);
5672 copy_bb->count += e->count;
5673 copy_bb->frequency += EDGE_FREQUENCY (e);
5674 e->dest->count -= e->count;
5675 if (e->dest->count < 0)
5676 e->dest->count = 0;
5677 e->dest->frequency -= freq;
5678 if (e->dest->frequency < 0)
5679 e->dest->frequency = 0;
5680 redirect_edge_and_branch_force (e, copy_bb);
5681 continue;
5683 else
5684 ei_next (&ei);
5686 #endif
5688 #if defined (HAVE_return) || defined (HAVE_simple_return)
5689 /* Return true if there are any active insns between HEAD and TAIL. */
5690 static bool
5691 active_insn_between (rtx head, rtx tail)
5693 while (tail)
5695 if (active_insn_p (tail))
5696 return true;
5697 if (tail == head)
5698 return false;
5699 tail = PREV_INSN (tail);
5701 return false;
5704 /* LAST_BB is a block that exits, and empty of active instructions.
5705 Examine its predecessors for jumps that can be converted to
5706 (conditional) returns. */
5707 static VEC (edge, heap) *
5708 convert_jumps_to_returns (basic_block last_bb, bool simple_p,
5709 VEC (edge, heap) *unconverted ATTRIBUTE_UNUSED)
5711 int i;
5712 basic_block bb;
5713 rtx label;
5714 edge_iterator ei;
5715 edge e;
5716 VEC(basic_block,heap) *src_bbs;
5718 src_bbs = VEC_alloc (basic_block, heap, EDGE_COUNT (last_bb->preds));
5719 FOR_EACH_EDGE (e, ei, last_bb->preds)
5720 if (e->src != ENTRY_BLOCK_PTR)
5721 VEC_quick_push (basic_block, src_bbs, e->src);
5723 label = BB_HEAD (last_bb);
5725 FOR_EACH_VEC_ELT (basic_block, src_bbs, i, bb)
5727 rtx jump = BB_END (bb);
5729 if (!JUMP_P (jump) || JUMP_LABEL (jump) != label)
5730 continue;
5732 e = find_edge (bb, last_bb);
5734 /* If we have an unconditional jump, we can replace that
5735 with a simple return instruction. */
5736 if (simplejump_p (jump))
5738 /* The use of the return register might be present in the exit
5739 fallthru block. Either:
5740 - removing the use is safe, and we should remove the use in
5741 the exit fallthru block, or
5742 - removing the use is not safe, and we should add it here.
5743 For now, we conservatively choose the latter. Either of the
5744 2 helps in crossjumping. */
5745 emit_use_return_register_into_block (bb);
5747 emit_return_into_block (simple_p, bb);
5748 delete_insn (jump);
5751 /* If we have a conditional jump branching to the last
5752 block, we can try to replace that with a conditional
5753 return instruction. */
5754 else if (condjump_p (jump))
5756 rtx dest;
5758 if (simple_p)
5759 dest = simple_return_rtx;
5760 else
5761 dest = ret_rtx;
5762 if (!redirect_jump (jump, dest, 0))
5764 #ifdef HAVE_simple_return
5765 if (simple_p)
5767 if (dump_file)
5768 fprintf (dump_file,
5769 "Failed to redirect bb %d branch.\n", bb->index);
5770 VEC_safe_push (edge, heap, unconverted, e);
5772 #endif
5773 continue;
5776 /* See comment in simplejump_p case above. */
5777 emit_use_return_register_into_block (bb);
5779 /* If this block has only one successor, it both jumps
5780 and falls through to the fallthru block, so we can't
5781 delete the edge. */
5782 if (single_succ_p (bb))
5783 continue;
5785 else
5787 #ifdef HAVE_simple_return
5788 if (simple_p)
5790 if (dump_file)
5791 fprintf (dump_file,
5792 "Failed to redirect bb %d branch.\n", bb->index);
5793 VEC_safe_push (edge, heap, unconverted, e);
5795 #endif
5796 continue;
5799 /* Fix up the CFG for the successful change we just made. */
5800 redirect_edge_succ (e, EXIT_BLOCK_PTR);
5801 e->flags &= ~EDGE_CROSSING;
5803 VEC_free (basic_block, heap, src_bbs);
5804 return unconverted;
5807 /* Emit a return insn for the exit fallthru block. */
5808 static basic_block
5809 emit_return_for_exit (edge exit_fallthru_edge, bool simple_p)
5811 basic_block last_bb = exit_fallthru_edge->src;
5813 if (JUMP_P (BB_END (last_bb)))
5815 last_bb = split_edge (exit_fallthru_edge);
5816 exit_fallthru_edge = single_succ_edge (last_bb);
5818 emit_barrier_after (BB_END (last_bb));
5819 emit_return_into_block (simple_p, last_bb);
5820 exit_fallthru_edge->flags &= ~EDGE_FALLTHRU;
5821 return last_bb;
5823 #endif
5826 /* Generate the prologue and epilogue RTL if the machine supports it. Thread
5827 this into place with notes indicating where the prologue ends and where
5828 the epilogue begins. Update the basic block information when possible.
5830 Notes on epilogue placement:
5831 There are several kinds of edges to the exit block:
5832 * a single fallthru edge from LAST_BB
5833 * possibly, edges from blocks containing sibcalls
5834 * possibly, fake edges from infinite loops
5836 The epilogue is always emitted on the fallthru edge from the last basic
5837 block in the function, LAST_BB, into the exit block.
5839 If LAST_BB is empty except for a label, it is the target of every
5840 other basic block in the function that ends in a return. If a
5841 target has a return or simple_return pattern (possibly with
5842 conditional variants), these basic blocks can be changed so that a
5843 return insn is emitted into them, and their target is adjusted to
5844 the real exit block.
5846 Notes on shrink wrapping: We implement a fairly conservative
5847 version of shrink-wrapping rather than the textbook one. We only
5848 generate a single prologue and a single epilogue. This is
5849 sufficient to catch a number of interesting cases involving early
5850 exits.
5852 First, we identify the blocks that require the prologue to occur before
5853 them. These are the ones that modify a call-saved register, or reference
5854 any of the stack or frame pointer registers. To simplify things, we then
5855 mark everything reachable from these blocks as also requiring a prologue.
5856 This takes care of loops automatically, and avoids the need to examine
5857 whether MEMs reference the frame, since it is sufficient to check for
5858 occurrences of the stack or frame pointer.
5860 We then compute the set of blocks for which the need for a prologue
5861 is anticipatable (borrowing terminology from the shrink-wrapping
5862 description in Muchnick's book). These are the blocks which either
5863 require a prologue themselves, or those that have only successors
5864 where the prologue is anticipatable. The prologue needs to be
5865 inserted on all edges from BB1->BB2 where BB2 is in ANTIC and BB1
5866 is not. For the moment, we ensure that only one such edge exists.
5868 The epilogue is placed as described above, but we make a
5869 distinction between inserting return and simple_return patterns
5870 when modifying other blocks that end in a return. Blocks that end
5871 in a sibcall omit the sibcall_epilogue if the block is not in
5872 ANTIC. */
5874 static void
5875 thread_prologue_and_epilogue_insns (void)
5877 bool inserted;
5878 #ifdef HAVE_simple_return
5879 VEC (edge, heap) *unconverted_simple_returns = NULL;
5880 bool nonempty_prologue;
5881 bitmap_head bb_flags;
5882 unsigned max_grow_size;
5883 #endif
5884 rtx returnjump;
5885 rtx seq ATTRIBUTE_UNUSED, epilogue_end ATTRIBUTE_UNUSED;
5886 rtx prologue_seq ATTRIBUTE_UNUSED, split_prologue_seq ATTRIBUTE_UNUSED;
5887 edge e, entry_edge, orig_entry_edge, exit_fallthru_edge;
5888 edge_iterator ei;
5890 df_analyze ();
5892 rtl_profile_for_bb (ENTRY_BLOCK_PTR);
5894 inserted = false;
5895 seq = NULL_RTX;
5896 epilogue_end = NULL_RTX;
5897 returnjump = NULL_RTX;
5899 /* Can't deal with multiple successors of the entry block at the
5900 moment. Function should always have at least one entry
5901 point. */
5902 gcc_assert (single_succ_p (ENTRY_BLOCK_PTR));
5903 entry_edge = single_succ_edge (ENTRY_BLOCK_PTR);
5904 orig_entry_edge = entry_edge;
5906 split_prologue_seq = NULL_RTX;
5907 if (flag_split_stack
5908 && (lookup_attribute ("no_split_stack", DECL_ATTRIBUTES (cfun->decl))
5909 == NULL))
5911 #ifndef HAVE_split_stack_prologue
5912 gcc_unreachable ();
5913 #else
5914 gcc_assert (HAVE_split_stack_prologue);
5916 start_sequence ();
5917 emit_insn (gen_split_stack_prologue ());
5918 split_prologue_seq = get_insns ();
5919 end_sequence ();
5921 record_insns (split_prologue_seq, NULL, &prologue_insn_hash);
5922 set_insn_locations (split_prologue_seq, prologue_location);
5923 #endif
5926 prologue_seq = NULL_RTX;
5927 #ifdef HAVE_prologue
5928 if (HAVE_prologue)
5930 start_sequence ();
5931 seq = gen_prologue ();
5932 emit_insn (seq);
5934 /* Insert an explicit USE for the frame pointer
5935 if the profiling is on and the frame pointer is required. */
5936 if (crtl->profile && frame_pointer_needed)
5937 emit_use (hard_frame_pointer_rtx);
5939 /* Retain a map of the prologue insns. */
5940 record_insns (seq, NULL, &prologue_insn_hash);
5941 emit_note (NOTE_INSN_PROLOGUE_END);
5943 /* Ensure that instructions are not moved into the prologue when
5944 profiling is on. The call to the profiling routine can be
5945 emitted within the live range of a call-clobbered register. */
5946 if (!targetm.profile_before_prologue () && crtl->profile)
5947 emit_insn (gen_blockage ());
5949 prologue_seq = get_insns ();
5950 end_sequence ();
5951 set_insn_locations (prologue_seq, prologue_location);
5953 #endif
5955 #ifdef HAVE_simple_return
5956 bitmap_initialize (&bb_flags, &bitmap_default_obstack);
5958 /* Try to perform a kind of shrink-wrapping, making sure the
5959 prologue/epilogue is emitted only around those parts of the
5960 function that require it. */
5962 nonempty_prologue = false;
5963 for (seq = prologue_seq; seq; seq = NEXT_INSN (seq))
5964 if (!NOTE_P (seq) || NOTE_KIND (seq) != NOTE_INSN_PROLOGUE_END)
5966 nonempty_prologue = true;
5967 break;
5970 if (flag_shrink_wrap && HAVE_simple_return
5971 && (targetm.profile_before_prologue () || !crtl->profile)
5972 && nonempty_prologue && !crtl->calls_eh_return)
5974 HARD_REG_SET prologue_clobbered, prologue_used, live_on_edge;
5975 struct hard_reg_set_container set_up_by_prologue;
5976 rtx p_insn;
5977 VEC(basic_block, heap) *vec;
5978 basic_block bb;
5979 bitmap_head bb_antic_flags;
5980 bitmap_head bb_on_list;
5981 bitmap_head bb_tail;
5983 if (dump_file)
5984 fprintf (dump_file, "Attempting shrink-wrapping optimization.\n");
5986 /* Compute the registers set and used in the prologue. */
5987 CLEAR_HARD_REG_SET (prologue_clobbered);
5988 CLEAR_HARD_REG_SET (prologue_used);
5989 for (p_insn = prologue_seq; p_insn; p_insn = NEXT_INSN (p_insn))
5991 HARD_REG_SET this_used;
5992 if (!NONDEBUG_INSN_P (p_insn))
5993 continue;
5995 CLEAR_HARD_REG_SET (this_used);
5996 note_uses (&PATTERN (p_insn), record_hard_reg_uses,
5997 &this_used);
5998 AND_COMPL_HARD_REG_SET (this_used, prologue_clobbered);
5999 IOR_HARD_REG_SET (prologue_used, this_used);
6000 note_stores (PATTERN (p_insn), record_hard_reg_sets,
6001 &prologue_clobbered);
6004 prepare_shrink_wrap (entry_edge->dest);
6006 bitmap_initialize (&bb_antic_flags, &bitmap_default_obstack);
6007 bitmap_initialize (&bb_on_list, &bitmap_default_obstack);
6008 bitmap_initialize (&bb_tail, &bitmap_default_obstack);
6010 /* Find the set of basic blocks that require a stack frame,
6011 and blocks that are too big to be duplicated. */
6013 vec = VEC_alloc (basic_block, heap, n_basic_blocks);
6015 CLEAR_HARD_REG_SET (set_up_by_prologue.set);
6016 add_to_hard_reg_set (&set_up_by_prologue.set, Pmode,
6017 STACK_POINTER_REGNUM);
6018 add_to_hard_reg_set (&set_up_by_prologue.set, Pmode, ARG_POINTER_REGNUM);
6019 if (frame_pointer_needed)
6020 add_to_hard_reg_set (&set_up_by_prologue.set, Pmode,
6021 HARD_FRAME_POINTER_REGNUM);
6022 if (pic_offset_table_rtx)
6023 add_to_hard_reg_set (&set_up_by_prologue.set, Pmode,
6024 PIC_OFFSET_TABLE_REGNUM);
6025 if (stack_realign_drap && crtl->drap_reg)
6026 add_to_hard_reg_set (&set_up_by_prologue.set,
6027 GET_MODE (crtl->drap_reg),
6028 REGNO (crtl->drap_reg));
6029 if (targetm.set_up_by_prologue)
6030 targetm.set_up_by_prologue (&set_up_by_prologue);
6032 /* We don't use a different max size depending on
6033 optimize_bb_for_speed_p because increasing shrink-wrapping
6034 opportunities by duplicating tail blocks can actually result
6035 in an overall decrease in code size. */
6036 max_grow_size = get_uncond_jump_length ();
6037 max_grow_size *= PARAM_VALUE (PARAM_MAX_GROW_COPY_BB_INSNS);
6039 FOR_EACH_BB (bb)
6041 rtx insn;
6042 unsigned size = 0;
6044 FOR_BB_INSNS (bb, insn)
6045 if (NONDEBUG_INSN_P (insn))
6047 if (requires_stack_frame_p (insn, prologue_used,
6048 set_up_by_prologue.set))
6050 if (bb == entry_edge->dest)
6051 goto fail_shrinkwrap;
6052 bitmap_set_bit (&bb_flags, bb->index);
6053 VEC_quick_push (basic_block, vec, bb);
6054 break;
6056 else if (size <= max_grow_size)
6058 size += get_attr_min_length (insn);
6059 if (size > max_grow_size)
6060 bitmap_set_bit (&bb_on_list, bb->index);
6065 /* Blocks that really need a prologue, or are too big for tails. */
6066 bitmap_ior_into (&bb_on_list, &bb_flags);
6068 /* For every basic block that needs a prologue, mark all blocks
6069 reachable from it, so as to ensure they are also seen as
6070 requiring a prologue. */
6071 while (!VEC_empty (basic_block, vec))
6073 basic_block tmp_bb = VEC_pop (basic_block, vec);
6075 FOR_EACH_EDGE (e, ei, tmp_bb->succs)
6076 if (e->dest != EXIT_BLOCK_PTR
6077 && bitmap_set_bit (&bb_flags, e->dest->index))
6078 VEC_quick_push (basic_block, vec, e->dest);
6081 /* Find the set of basic blocks that need no prologue, have a
6082 single successor, can be duplicated, meet a max size
6083 requirement, and go to the exit via like blocks. */
6084 VEC_quick_push (basic_block, vec, EXIT_BLOCK_PTR);
6085 while (!VEC_empty (basic_block, vec))
6087 basic_block tmp_bb = VEC_pop (basic_block, vec);
6089 FOR_EACH_EDGE (e, ei, tmp_bb->preds)
6090 if (single_succ_p (e->src)
6091 && !bitmap_bit_p (&bb_on_list, e->src->index)
6092 && can_duplicate_block_p (e->src))
6094 edge pe;
6095 edge_iterator pei;
6097 /* If there is predecessor of e->src which doesn't
6098 need prologue and the edge is complex,
6099 we might not be able to redirect the branch
6100 to a copy of e->src. */
6101 FOR_EACH_EDGE (pe, pei, e->src->preds)
6102 if ((pe->flags & EDGE_COMPLEX) != 0
6103 && !bitmap_bit_p (&bb_flags, pe->src->index))
6104 break;
6105 if (pe == NULL && bitmap_set_bit (&bb_tail, e->src->index))
6106 VEC_quick_push (basic_block, vec, e->src);
6110 /* Now walk backwards from every block that is marked as needing
6111 a prologue to compute the bb_antic_flags bitmap. Exclude
6112 tail blocks; They can be duplicated to be used on paths not
6113 needing a prologue. */
6114 bitmap_clear (&bb_on_list);
6115 bitmap_and_compl (&bb_antic_flags, &bb_flags, &bb_tail);
6116 FOR_EACH_BB (bb)
6118 if (!bitmap_bit_p (&bb_antic_flags, bb->index))
6119 continue;
6120 FOR_EACH_EDGE (e, ei, bb->preds)
6121 if (!bitmap_bit_p (&bb_antic_flags, e->src->index)
6122 && bitmap_set_bit (&bb_on_list, e->src->index))
6123 VEC_quick_push (basic_block, vec, e->src);
6125 while (!VEC_empty (basic_block, vec))
6127 basic_block tmp_bb = VEC_pop (basic_block, vec);
6128 bool all_set = true;
6130 bitmap_clear_bit (&bb_on_list, tmp_bb->index);
6131 FOR_EACH_EDGE (e, ei, tmp_bb->succs)
6132 if (!bitmap_bit_p (&bb_antic_flags, e->dest->index))
6134 all_set = false;
6135 break;
6138 if (all_set)
6140 bitmap_set_bit (&bb_antic_flags, tmp_bb->index);
6141 FOR_EACH_EDGE (e, ei, tmp_bb->preds)
6142 if (!bitmap_bit_p (&bb_antic_flags, e->src->index)
6143 && bitmap_set_bit (&bb_on_list, e->src->index))
6144 VEC_quick_push (basic_block, vec, e->src);
6147 /* Find exactly one edge that leads to a block in ANTIC from
6148 a block that isn't. */
6149 if (!bitmap_bit_p (&bb_antic_flags, entry_edge->dest->index))
6150 FOR_EACH_BB (bb)
6152 if (!bitmap_bit_p (&bb_antic_flags, bb->index))
6153 continue;
6154 FOR_EACH_EDGE (e, ei, bb->preds)
6155 if (!bitmap_bit_p (&bb_antic_flags, e->src->index))
6157 if (entry_edge != orig_entry_edge)
6159 entry_edge = orig_entry_edge;
6160 if (dump_file)
6161 fprintf (dump_file, "More than one candidate edge.\n");
6162 goto fail_shrinkwrap;
6164 if (dump_file)
6165 fprintf (dump_file, "Found candidate edge for "
6166 "shrink-wrapping, %d->%d.\n", e->src->index,
6167 e->dest->index);
6168 entry_edge = e;
6172 if (entry_edge != orig_entry_edge)
6174 /* Test whether the prologue is known to clobber any register
6175 (other than FP or SP) which are live on the edge. */
6176 CLEAR_HARD_REG_BIT (prologue_clobbered, STACK_POINTER_REGNUM);
6177 if (frame_pointer_needed)
6178 CLEAR_HARD_REG_BIT (prologue_clobbered, HARD_FRAME_POINTER_REGNUM);
6179 CLEAR_HARD_REG_SET (live_on_edge);
6180 reg_set_to_hard_reg_set (&live_on_edge,
6181 df_get_live_in (entry_edge->dest));
6182 if (hard_reg_set_intersect_p (live_on_edge, prologue_clobbered))
6184 entry_edge = orig_entry_edge;
6185 if (dump_file)
6186 fprintf (dump_file,
6187 "Shrink-wrapping aborted due to clobber.\n");
6190 if (entry_edge != orig_entry_edge)
6192 crtl->shrink_wrapped = true;
6193 if (dump_file)
6194 fprintf (dump_file, "Performing shrink-wrapping.\n");
6196 /* Find tail blocks reachable from both blocks needing a
6197 prologue and blocks not needing a prologue. */
6198 if (!bitmap_empty_p (&bb_tail))
6199 FOR_EACH_BB (bb)
6201 bool some_pro, some_no_pro;
6202 if (!bitmap_bit_p (&bb_tail, bb->index))
6203 continue;
6204 some_pro = some_no_pro = false;
6205 FOR_EACH_EDGE (e, ei, bb->preds)
6207 if (bitmap_bit_p (&bb_flags, e->src->index))
6208 some_pro = true;
6209 else
6210 some_no_pro = true;
6212 if (some_pro && some_no_pro)
6213 VEC_quick_push (basic_block, vec, bb);
6214 else
6215 bitmap_clear_bit (&bb_tail, bb->index);
6217 /* Find the head of each tail. */
6218 while (!VEC_empty (basic_block, vec))
6220 basic_block tbb = VEC_pop (basic_block, vec);
6222 if (!bitmap_bit_p (&bb_tail, tbb->index))
6223 continue;
6225 while (single_succ_p (tbb))
6227 tbb = single_succ (tbb);
6228 bitmap_clear_bit (&bb_tail, tbb->index);
6231 /* Now duplicate the tails. */
6232 if (!bitmap_empty_p (&bb_tail))
6233 FOR_EACH_BB_REVERSE (bb)
6235 basic_block copy_bb, tbb;
6236 rtx insert_point;
6237 int eflags;
6239 if (!bitmap_clear_bit (&bb_tail, bb->index))
6240 continue;
6242 /* Create a copy of BB, instructions and all, for
6243 use on paths that don't need a prologue.
6244 Ideal placement of the copy is on a fall-thru edge
6245 or after a block that would jump to the copy. */
6246 FOR_EACH_EDGE (e, ei, bb->preds)
6247 if (!bitmap_bit_p (&bb_flags, e->src->index)
6248 && single_succ_p (e->src))
6249 break;
6250 if (e)
6252 copy_bb = create_basic_block (NEXT_INSN (BB_END (e->src)),
6253 NULL_RTX, e->src);
6254 BB_COPY_PARTITION (copy_bb, e->src);
6256 else
6258 /* Otherwise put the copy at the end of the function. */
6259 copy_bb = create_basic_block (NULL_RTX, NULL_RTX,
6260 EXIT_BLOCK_PTR->prev_bb);
6261 BB_COPY_PARTITION (copy_bb, bb);
6264 insert_point = emit_note_after (NOTE_INSN_DELETED,
6265 BB_END (copy_bb));
6266 emit_barrier_after (BB_END (copy_bb));
6268 tbb = bb;
6269 while (1)
6271 dup_block_and_redirect (tbb, copy_bb, insert_point,
6272 &bb_flags);
6273 tbb = single_succ (tbb);
6274 if (tbb == EXIT_BLOCK_PTR)
6275 break;
6276 e = split_block (copy_bb, PREV_INSN (insert_point));
6277 copy_bb = e->dest;
6280 /* Quiet verify_flow_info by (ab)using EDGE_FAKE.
6281 We have yet to add a simple_return to the tails,
6282 as we'd like to first convert_jumps_to_returns in
6283 case the block is no longer used after that. */
6284 eflags = EDGE_FAKE;
6285 if (CALL_P (PREV_INSN (insert_point))
6286 && SIBLING_CALL_P (PREV_INSN (insert_point)))
6287 eflags = EDGE_SIBCALL | EDGE_ABNORMAL;
6288 make_single_succ_edge (copy_bb, EXIT_BLOCK_PTR, eflags);
6290 /* verify_flow_info doesn't like a note after a
6291 sibling call. */
6292 delete_insn (insert_point);
6293 if (bitmap_empty_p (&bb_tail))
6294 break;
6298 fail_shrinkwrap:
6299 bitmap_clear (&bb_tail);
6300 bitmap_clear (&bb_antic_flags);
6301 bitmap_clear (&bb_on_list);
6302 VEC_free (basic_block, heap, vec);
6304 #endif
6306 if (split_prologue_seq != NULL_RTX)
6308 insert_insn_on_edge (split_prologue_seq, orig_entry_edge);
6309 inserted = true;
6311 if (prologue_seq != NULL_RTX)
6313 insert_insn_on_edge (prologue_seq, entry_edge);
6314 inserted = true;
6317 /* If the exit block has no non-fake predecessors, we don't need
6318 an epilogue. */
6319 FOR_EACH_EDGE (e, ei, EXIT_BLOCK_PTR->preds)
6320 if ((e->flags & EDGE_FAKE) == 0)
6321 break;
6322 if (e == NULL)
6323 goto epilogue_done;
6325 rtl_profile_for_bb (EXIT_BLOCK_PTR);
6327 exit_fallthru_edge = find_fallthru_edge (EXIT_BLOCK_PTR->preds);
6329 /* If we're allowed to generate a simple return instruction, then by
6330 definition we don't need a full epilogue. If the last basic
6331 block before the exit block does not contain active instructions,
6332 examine its predecessors and try to emit (conditional) return
6333 instructions. */
6334 #ifdef HAVE_simple_return
6335 if (entry_edge != orig_entry_edge)
6337 if (optimize)
6339 unsigned i, last;
6341 /* convert_jumps_to_returns may add to EXIT_BLOCK_PTR->preds
6342 (but won't remove). Stop at end of current preds. */
6343 last = EDGE_COUNT (EXIT_BLOCK_PTR->preds);
6344 for (i = 0; i < last; i++)
6346 e = EDGE_I (EXIT_BLOCK_PTR->preds, i);
6347 if (LABEL_P (BB_HEAD (e->src))
6348 && !bitmap_bit_p (&bb_flags, e->src->index)
6349 && !active_insn_between (BB_HEAD (e->src), BB_END (e->src)))
6350 unconverted_simple_returns
6351 = convert_jumps_to_returns (e->src, true,
6352 unconverted_simple_returns);
6356 if (exit_fallthru_edge != NULL
6357 && EDGE_COUNT (exit_fallthru_edge->src->preds) != 0
6358 && !bitmap_bit_p (&bb_flags, exit_fallthru_edge->src->index))
6360 basic_block last_bb;
6362 last_bb = emit_return_for_exit (exit_fallthru_edge, true);
6363 returnjump = BB_END (last_bb);
6364 exit_fallthru_edge = NULL;
6367 #endif
6368 #ifdef HAVE_return
6369 if (HAVE_return)
6371 if (exit_fallthru_edge == NULL)
6372 goto epilogue_done;
6374 if (optimize)
6376 basic_block last_bb = exit_fallthru_edge->src;
6378 if (LABEL_P (BB_HEAD (last_bb))
6379 && !active_insn_between (BB_HEAD (last_bb), BB_END (last_bb)))
6380 convert_jumps_to_returns (last_bb, false, NULL);
6382 if (EDGE_COUNT (last_bb->preds) != 0
6383 && single_succ_p (last_bb))
6385 last_bb = emit_return_for_exit (exit_fallthru_edge, false);
6386 epilogue_end = returnjump = BB_END (last_bb);
6387 #ifdef HAVE_simple_return
6388 /* Emitting the return may add a basic block.
6389 Fix bb_flags for the added block. */
6390 if (last_bb != exit_fallthru_edge->src)
6391 bitmap_set_bit (&bb_flags, last_bb->index);
6392 #endif
6393 goto epilogue_done;
6397 #endif
6399 /* A small fib -- epilogue is not yet completed, but we wish to re-use
6400 this marker for the splits of EH_RETURN patterns, and nothing else
6401 uses the flag in the meantime. */
6402 epilogue_completed = 1;
6404 #ifdef HAVE_eh_return
6405 /* Find non-fallthru edges that end with EH_RETURN instructions. On
6406 some targets, these get split to a special version of the epilogue
6407 code. In order to be able to properly annotate these with unwind
6408 info, try to split them now. If we get a valid split, drop an
6409 EPILOGUE_BEG note and mark the insns as epilogue insns. */
6410 FOR_EACH_EDGE (e, ei, EXIT_BLOCK_PTR->preds)
6412 rtx prev, last, trial;
6414 if (e->flags & EDGE_FALLTHRU)
6415 continue;
6416 last = BB_END (e->src);
6417 if (!eh_returnjump_p (last))
6418 continue;
6420 prev = PREV_INSN (last);
6421 trial = try_split (PATTERN (last), last, 1);
6422 if (trial == last)
6423 continue;
6425 record_insns (NEXT_INSN (prev), NEXT_INSN (trial), &epilogue_insn_hash);
6426 emit_note_after (NOTE_INSN_EPILOGUE_BEG, prev);
6428 #endif
6430 /* If nothing falls through into the exit block, we don't need an
6431 epilogue. */
6433 if (exit_fallthru_edge == NULL)
6434 goto epilogue_done;
6436 #ifdef HAVE_epilogue
6437 if (HAVE_epilogue)
6439 start_sequence ();
6440 epilogue_end = emit_note (NOTE_INSN_EPILOGUE_BEG);
6441 seq = gen_epilogue ();
6442 if (seq)
6443 emit_jump_insn (seq);
6445 /* Retain a map of the epilogue insns. */
6446 record_insns (seq, NULL, &epilogue_insn_hash);
6447 set_insn_locations (seq, epilogue_location);
6449 seq = get_insns ();
6450 returnjump = get_last_insn ();
6451 end_sequence ();
6453 insert_insn_on_edge (seq, exit_fallthru_edge);
6454 inserted = true;
6456 if (JUMP_P (returnjump))
6457 set_return_jump_label (returnjump);
6459 else
6460 #endif
6462 basic_block cur_bb;
6464 if (! next_active_insn (BB_END (exit_fallthru_edge->src)))
6465 goto epilogue_done;
6466 /* We have a fall-through edge to the exit block, the source is not
6467 at the end of the function, and there will be an assembler epilogue
6468 at the end of the function.
6469 We can't use force_nonfallthru here, because that would try to
6470 use return. Inserting a jump 'by hand' is extremely messy, so
6471 we take advantage of cfg_layout_finalize using
6472 fixup_fallthru_exit_predecessor. */
6473 cfg_layout_initialize (0);
6474 FOR_EACH_BB (cur_bb)
6475 if (cur_bb->index >= NUM_FIXED_BLOCKS
6476 && cur_bb->next_bb->index >= NUM_FIXED_BLOCKS)
6477 cur_bb->aux = cur_bb->next_bb;
6478 cfg_layout_finalize ();
6481 epilogue_done:
6483 default_rtl_profile ();
6485 if (inserted)
6487 sbitmap blocks;
6489 commit_edge_insertions ();
6491 /* Look for basic blocks within the prologue insns. */
6492 blocks = sbitmap_alloc (last_basic_block);
6493 sbitmap_zero (blocks);
6494 SET_BIT (blocks, entry_edge->dest->index);
6495 SET_BIT (blocks, orig_entry_edge->dest->index);
6496 find_many_sub_basic_blocks (blocks);
6497 sbitmap_free (blocks);
6499 /* The epilogue insns we inserted may cause the exit edge to no longer
6500 be fallthru. */
6501 FOR_EACH_EDGE (e, ei, EXIT_BLOCK_PTR->preds)
6503 if (((e->flags & EDGE_FALLTHRU) != 0)
6504 && returnjump_p (BB_END (e->src)))
6505 e->flags &= ~EDGE_FALLTHRU;
6509 #ifdef HAVE_simple_return
6510 /* If there were branches to an empty LAST_BB which we tried to
6511 convert to conditional simple_returns, but couldn't for some
6512 reason, create a block to hold a simple_return insn and redirect
6513 those remaining edges. */
6514 if (!VEC_empty (edge, unconverted_simple_returns))
6516 basic_block simple_return_block_hot = NULL;
6517 basic_block simple_return_block_cold = NULL;
6518 edge pending_edge_hot = NULL;
6519 edge pending_edge_cold = NULL;
6520 basic_block exit_pred = EXIT_BLOCK_PTR->prev_bb;
6521 int i;
6523 gcc_assert (entry_edge != orig_entry_edge);
6525 /* See if we can reuse the last insn that was emitted for the
6526 epilogue. */
6527 if (returnjump != NULL_RTX
6528 && JUMP_LABEL (returnjump) == simple_return_rtx)
6530 e = split_block (BLOCK_FOR_INSN (returnjump), PREV_INSN (returnjump));
6531 if (BB_PARTITION (e->src) == BB_HOT_PARTITION)
6532 simple_return_block_hot = e->dest;
6533 else
6534 simple_return_block_cold = e->dest;
6537 /* Also check returns we might need to add to tail blocks. */
6538 FOR_EACH_EDGE (e, ei, EXIT_BLOCK_PTR->preds)
6539 if (EDGE_COUNT (e->src->preds) != 0
6540 && (e->flags & EDGE_FAKE) != 0
6541 && !bitmap_bit_p (&bb_flags, e->src->index))
6543 if (BB_PARTITION (e->src) == BB_HOT_PARTITION)
6544 pending_edge_hot = e;
6545 else
6546 pending_edge_cold = e;
6549 FOR_EACH_VEC_ELT (edge, unconverted_simple_returns, i, e)
6551 basic_block *pdest_bb;
6552 edge pending;
6554 if (BB_PARTITION (e->src) == BB_HOT_PARTITION)
6556 pdest_bb = &simple_return_block_hot;
6557 pending = pending_edge_hot;
6559 else
6561 pdest_bb = &simple_return_block_cold;
6562 pending = pending_edge_cold;
6565 if (*pdest_bb == NULL && pending != NULL)
6567 emit_return_into_block (true, pending->src);
6568 pending->flags &= ~(EDGE_FALLTHRU | EDGE_FAKE);
6569 *pdest_bb = pending->src;
6571 else if (*pdest_bb == NULL)
6573 basic_block bb;
6574 rtx start;
6576 bb = create_basic_block (NULL, NULL, exit_pred);
6577 BB_COPY_PARTITION (bb, e->src);
6578 start = emit_jump_insn_after (gen_simple_return (),
6579 BB_END (bb));
6580 JUMP_LABEL (start) = simple_return_rtx;
6581 emit_barrier_after (start);
6583 *pdest_bb = bb;
6584 make_edge (bb, EXIT_BLOCK_PTR, 0);
6586 redirect_edge_and_branch_force (e, *pdest_bb);
6588 VEC_free (edge, heap, unconverted_simple_returns);
6591 if (entry_edge != orig_entry_edge)
6593 FOR_EACH_EDGE (e, ei, EXIT_BLOCK_PTR->preds)
6594 if (EDGE_COUNT (e->src->preds) != 0
6595 && (e->flags & EDGE_FAKE) != 0
6596 && !bitmap_bit_p (&bb_flags, e->src->index))
6598 emit_return_into_block (true, e->src);
6599 e->flags &= ~(EDGE_FALLTHRU | EDGE_FAKE);
6602 #endif
6604 #ifdef HAVE_sibcall_epilogue
6605 /* Emit sibling epilogues before any sibling call sites. */
6606 for (ei = ei_start (EXIT_BLOCK_PTR->preds); (e = ei_safe_edge (ei)); )
6608 basic_block bb = e->src;
6609 rtx insn = BB_END (bb);
6610 rtx ep_seq;
6612 if (!CALL_P (insn)
6613 || ! SIBLING_CALL_P (insn)
6614 #ifdef HAVE_simple_return
6615 || (entry_edge != orig_entry_edge
6616 && !bitmap_bit_p (&bb_flags, bb->index))
6617 #endif
6620 ei_next (&ei);
6621 continue;
6624 ep_seq = gen_sibcall_epilogue ();
6625 if (ep_seq)
6627 start_sequence ();
6628 emit_note (NOTE_INSN_EPILOGUE_BEG);
6629 emit_insn (ep_seq);
6630 seq = get_insns ();
6631 end_sequence ();
6633 /* Retain a map of the epilogue insns. Used in life analysis to
6634 avoid getting rid of sibcall epilogue insns. Do this before we
6635 actually emit the sequence. */
6636 record_insns (seq, NULL, &epilogue_insn_hash);
6637 set_insn_locations (seq, epilogue_location);
6639 emit_insn_before (seq, insn);
6641 ei_next (&ei);
6643 #endif
6645 #ifdef HAVE_epilogue
6646 if (epilogue_end)
6648 rtx insn, next;
6650 /* Similarly, move any line notes that appear after the epilogue.
6651 There is no need, however, to be quite so anal about the existence
6652 of such a note. Also possibly move
6653 NOTE_INSN_FUNCTION_BEG notes, as those can be relevant for debug
6654 info generation. */
6655 for (insn = epilogue_end; insn; insn = next)
6657 next = NEXT_INSN (insn);
6658 if (NOTE_P (insn)
6659 && (NOTE_KIND (insn) == NOTE_INSN_FUNCTION_BEG))
6660 reorder_insns (insn, insn, PREV_INSN (epilogue_end));
6663 #endif
6665 #ifdef HAVE_simple_return
6666 bitmap_clear (&bb_flags);
6667 #endif
6669 /* Threading the prologue and epilogue changes the artificial refs
6670 in the entry and exit blocks. */
6671 epilogue_completed = 1;
6672 df_update_entry_exit_and_calls ();
6675 /* Reposition the prologue-end and epilogue-begin notes after
6676 instruction scheduling. */
6678 void
6679 reposition_prologue_and_epilogue_notes (void)
6681 #if defined (HAVE_prologue) || defined (HAVE_epilogue) \
6682 || defined (HAVE_sibcall_epilogue)
6683 /* Since the hash table is created on demand, the fact that it is
6684 non-null is a signal that it is non-empty. */
6685 if (prologue_insn_hash != NULL)
6687 size_t len = htab_elements (prologue_insn_hash);
6688 rtx insn, last = NULL, note = NULL;
6690 /* Scan from the beginning until we reach the last prologue insn. */
6691 /* ??? While we do have the CFG intact, there are two problems:
6692 (1) The prologue can contain loops (typically probing the stack),
6693 which means that the end of the prologue isn't in the first bb.
6694 (2) Sometimes the PROLOGUE_END note gets pushed into the next bb. */
6695 for (insn = get_insns (); insn; insn = NEXT_INSN (insn))
6697 if (NOTE_P (insn))
6699 if (NOTE_KIND (insn) == NOTE_INSN_PROLOGUE_END)
6700 note = insn;
6702 else if (contains (insn, prologue_insn_hash))
6704 last = insn;
6705 if (--len == 0)
6706 break;
6710 if (last)
6712 if (note == NULL)
6714 /* Scan forward looking for the PROLOGUE_END note. It should
6715 be right at the beginning of the block, possibly with other
6716 insn notes that got moved there. */
6717 for (note = NEXT_INSN (last); ; note = NEXT_INSN (note))
6719 if (NOTE_P (note)
6720 && NOTE_KIND (note) == NOTE_INSN_PROLOGUE_END)
6721 break;
6725 /* Avoid placing note between CODE_LABEL and BASIC_BLOCK note. */
6726 if (LABEL_P (last))
6727 last = NEXT_INSN (last);
6728 reorder_insns (note, note, last);
6732 if (epilogue_insn_hash != NULL)
6734 edge_iterator ei;
6735 edge e;
6737 FOR_EACH_EDGE (e, ei, EXIT_BLOCK_PTR->preds)
6739 rtx insn, first = NULL, note = NULL;
6740 basic_block bb = e->src;
6742 /* Scan from the beginning until we reach the first epilogue insn. */
6743 FOR_BB_INSNS (bb, insn)
6745 if (NOTE_P (insn))
6747 if (NOTE_KIND (insn) == NOTE_INSN_EPILOGUE_BEG)
6749 note = insn;
6750 if (first != NULL)
6751 break;
6754 else if (first == NULL && contains (insn, epilogue_insn_hash))
6756 first = insn;
6757 if (note != NULL)
6758 break;
6762 if (note)
6764 /* If the function has a single basic block, and no real
6765 epilogue insns (e.g. sibcall with no cleanup), the
6766 epilogue note can get scheduled before the prologue
6767 note. If we have frame related prologue insns, having
6768 them scanned during the epilogue will result in a crash.
6769 In this case re-order the epilogue note to just before
6770 the last insn in the block. */
6771 if (first == NULL)
6772 first = BB_END (bb);
6774 if (PREV_INSN (first) != note)
6775 reorder_insns (note, note, PREV_INSN (first));
6779 #endif /* HAVE_prologue or HAVE_epilogue */
6782 /* Returns the name of function declared by FNDECL. */
6783 const char *
6784 fndecl_name (tree fndecl)
6786 if (fndecl == NULL)
6787 return "(nofn)";
6788 return lang_hooks.decl_printable_name (fndecl, 2);
6791 /* Returns the name of function FN. */
6792 const char *
6793 function_name (struct function *fn)
6795 tree fndecl = (fn == NULL) ? NULL : fn->decl;
6796 return fndecl_name (fndecl);
6799 /* Returns the name of the current function. */
6800 const char *
6801 current_function_name (void)
6803 return function_name (cfun);
6807 static unsigned int
6808 rest_of_handle_check_leaf_regs (void)
6810 #ifdef LEAF_REGISTERS
6811 crtl->uses_only_leaf_regs
6812 = optimize > 0 && only_leaf_regs_used () && leaf_function_p ();
6813 #endif
6814 return 0;
6817 /* Insert a TYPE into the used types hash table of CFUN. */
6819 static void
6820 used_types_insert_helper (tree type, struct function *func)
6822 if (type != NULL && func != NULL)
6824 void **slot;
6826 if (func->used_types_hash == NULL)
6827 func->used_types_hash = htab_create_ggc (37, htab_hash_pointer,
6828 htab_eq_pointer, NULL);
6829 slot = htab_find_slot (func->used_types_hash, type, INSERT);
6830 if (*slot == NULL)
6831 *slot = type;
6835 /* Given a type, insert it into the used hash table in cfun. */
6836 void
6837 used_types_insert (tree t)
6839 while (POINTER_TYPE_P (t) || TREE_CODE (t) == ARRAY_TYPE)
6840 if (TYPE_NAME (t))
6841 break;
6842 else
6843 t = TREE_TYPE (t);
6844 if (TREE_CODE (t) == ERROR_MARK)
6845 return;
6846 if (TYPE_NAME (t) == NULL_TREE
6847 || TYPE_NAME (t) == TYPE_NAME (TYPE_MAIN_VARIANT (t)))
6848 t = TYPE_MAIN_VARIANT (t);
6849 if (debug_info_level > DINFO_LEVEL_NONE)
6851 if (cfun)
6852 used_types_insert_helper (t, cfun);
6853 else
6854 /* So this might be a type referenced by a global variable.
6855 Record that type so that we can later decide to emit its debug
6856 information. */
6857 VEC_safe_push (tree, gc, types_used_by_cur_var_decl, t);
6861 /* Helper to Hash a struct types_used_by_vars_entry. */
6863 static hashval_t
6864 hash_types_used_by_vars_entry (const struct types_used_by_vars_entry *entry)
6866 gcc_assert (entry && entry->var_decl && entry->type);
6868 return iterative_hash_object (entry->type,
6869 iterative_hash_object (entry->var_decl, 0));
6872 /* Hash function of the types_used_by_vars_entry hash table. */
6874 hashval_t
6875 types_used_by_vars_do_hash (const void *x)
6877 const struct types_used_by_vars_entry *entry =
6878 (const struct types_used_by_vars_entry *) x;
6880 return hash_types_used_by_vars_entry (entry);
6883 /*Equality function of the types_used_by_vars_entry hash table. */
6886 types_used_by_vars_eq (const void *x1, const void *x2)
6888 const struct types_used_by_vars_entry *e1 =
6889 (const struct types_used_by_vars_entry *) x1;
6890 const struct types_used_by_vars_entry *e2 =
6891 (const struct types_used_by_vars_entry *)x2;
6893 return (e1->var_decl == e2->var_decl && e1->type == e2->type);
6896 /* Inserts an entry into the types_used_by_vars_hash hash table. */
6898 void
6899 types_used_by_var_decl_insert (tree type, tree var_decl)
6901 if (type != NULL && var_decl != NULL)
6903 void **slot;
6904 struct types_used_by_vars_entry e;
6905 e.var_decl = var_decl;
6906 e.type = type;
6907 if (types_used_by_vars_hash == NULL)
6908 types_used_by_vars_hash =
6909 htab_create_ggc (37, types_used_by_vars_do_hash,
6910 types_used_by_vars_eq, NULL);
6911 slot = htab_find_slot_with_hash (types_used_by_vars_hash, &e,
6912 hash_types_used_by_vars_entry (&e), INSERT);
6913 if (*slot == NULL)
6915 struct types_used_by_vars_entry *entry;
6916 entry = ggc_alloc_types_used_by_vars_entry ();
6917 entry->type = type;
6918 entry->var_decl = var_decl;
6919 *slot = entry;
6924 struct rtl_opt_pass pass_leaf_regs =
6927 RTL_PASS,
6928 "*leaf_regs", /* name */
6929 NULL, /* gate */
6930 rest_of_handle_check_leaf_regs, /* execute */
6931 NULL, /* sub */
6932 NULL, /* next */
6933 0, /* static_pass_number */
6934 TV_NONE, /* tv_id */
6935 0, /* properties_required */
6936 0, /* properties_provided */
6937 0, /* properties_destroyed */
6938 0, /* todo_flags_start */
6939 0 /* todo_flags_finish */
6943 static unsigned int
6944 rest_of_handle_thread_prologue_and_epilogue (void)
6946 if (optimize)
6947 cleanup_cfg (CLEANUP_EXPENSIVE);
6949 /* On some machines, the prologue and epilogue code, or parts thereof,
6950 can be represented as RTL. Doing so lets us schedule insns between
6951 it and the rest of the code and also allows delayed branch
6952 scheduling to operate in the epilogue. */
6953 thread_prologue_and_epilogue_insns ();
6955 /* The stack usage info is finalized during prologue expansion. */
6956 if (flag_stack_usage_info)
6957 output_stack_usage ();
6959 return 0;
6962 struct rtl_opt_pass pass_thread_prologue_and_epilogue =
6965 RTL_PASS,
6966 "pro_and_epilogue", /* name */
6967 NULL, /* gate */
6968 rest_of_handle_thread_prologue_and_epilogue, /* execute */
6969 NULL, /* sub */
6970 NULL, /* next */
6971 0, /* static_pass_number */
6972 TV_THREAD_PROLOGUE_AND_EPILOGUE, /* tv_id */
6973 0, /* properties_required */
6974 0, /* properties_provided */
6975 0, /* properties_destroyed */
6976 TODO_verify_flow, /* todo_flags_start */
6977 TODO_df_verify |
6978 TODO_df_finish | TODO_verify_rtl_sharing |
6979 TODO_ggc_collect /* todo_flags_finish */
6984 /* This mini-pass fixes fall-out from SSA in asm statements that have
6985 in-out constraints. Say you start with
6987 orig = inout;
6988 asm ("": "+mr" (inout));
6989 use (orig);
6991 which is transformed very early to use explicit output and match operands:
6993 orig = inout;
6994 asm ("": "=mr" (inout) : "0" (inout));
6995 use (orig);
6997 Or, after SSA and copyprop,
6999 asm ("": "=mr" (inout_2) : "0" (inout_1));
7000 use (inout_1);
7002 Clearly inout_2 and inout_1 can't be coalesced easily anymore, as
7003 they represent two separate values, so they will get different pseudo
7004 registers during expansion. Then, since the two operands need to match
7005 per the constraints, but use different pseudo registers, reload can
7006 only register a reload for these operands. But reloads can only be
7007 satisfied by hardregs, not by memory, so we need a register for this
7008 reload, just because we are presented with non-matching operands.
7009 So, even though we allow memory for this operand, no memory can be
7010 used for it, just because the two operands don't match. This can
7011 cause reload failures on register-starved targets.
7013 So it's a symptom of reload not being able to use memory for reloads
7014 or, alternatively it's also a symptom of both operands not coming into
7015 reload as matching (in which case the pseudo could go to memory just
7016 fine, as the alternative allows it, and no reload would be necessary).
7017 We fix the latter problem here, by transforming
7019 asm ("": "=mr" (inout_2) : "0" (inout_1));
7021 back to
7023 inout_2 = inout_1;
7024 asm ("": "=mr" (inout_2) : "0" (inout_2)); */
7026 static void
7027 match_asm_constraints_1 (rtx insn, rtx *p_sets, int noutputs)
7029 int i;
7030 bool changed = false;
7031 rtx op = SET_SRC (p_sets[0]);
7032 int ninputs = ASM_OPERANDS_INPUT_LENGTH (op);
7033 rtvec inputs = ASM_OPERANDS_INPUT_VEC (op);
7034 bool *output_matched = XALLOCAVEC (bool, noutputs);
7036 memset (output_matched, 0, noutputs * sizeof (bool));
7037 for (i = 0; i < ninputs; i++)
7039 rtx input, output, insns;
7040 const char *constraint = ASM_OPERANDS_INPUT_CONSTRAINT (op, i);
7041 char *end;
7042 int match, j;
7044 if (*constraint == '%')
7045 constraint++;
7047 match = strtoul (constraint, &end, 10);
7048 if (end == constraint)
7049 continue;
7051 gcc_assert (match < noutputs);
7052 output = SET_DEST (p_sets[match]);
7053 input = RTVEC_ELT (inputs, i);
7054 /* Only do the transformation for pseudos. */
7055 if (! REG_P (output)
7056 || rtx_equal_p (output, input)
7057 || (GET_MODE (input) != VOIDmode
7058 && GET_MODE (input) != GET_MODE (output)))
7059 continue;
7061 /* We can't do anything if the output is also used as input,
7062 as we're going to overwrite it. */
7063 for (j = 0; j < ninputs; j++)
7064 if (reg_overlap_mentioned_p (output, RTVEC_ELT (inputs, j)))
7065 break;
7066 if (j != ninputs)
7067 continue;
7069 /* Avoid changing the same input several times. For
7070 asm ("" : "=mr" (out1), "=mr" (out2) : "0" (in), "1" (in));
7071 only change in once (to out1), rather than changing it
7072 first to out1 and afterwards to out2. */
7073 if (i > 0)
7075 for (j = 0; j < noutputs; j++)
7076 if (output_matched[j] && input == SET_DEST (p_sets[j]))
7077 break;
7078 if (j != noutputs)
7079 continue;
7081 output_matched[match] = true;
7083 start_sequence ();
7084 emit_move_insn (output, input);
7085 insns = get_insns ();
7086 end_sequence ();
7087 emit_insn_before (insns, insn);
7089 /* Now replace all mentions of the input with output. We can't
7090 just replace the occurrence in inputs[i], as the register might
7091 also be used in some other input (or even in an address of an
7092 output), which would mean possibly increasing the number of
7093 inputs by one (namely 'output' in addition), which might pose
7094 a too complicated problem for reload to solve. E.g. this situation:
7096 asm ("" : "=r" (output), "=m" (input) : "0" (input))
7098 Here 'input' is used in two occurrences as input (once for the
7099 input operand, once for the address in the second output operand).
7100 If we would replace only the occurrence of the input operand (to
7101 make the matching) we would be left with this:
7103 output = input
7104 asm ("" : "=r" (output), "=m" (input) : "0" (output))
7106 Now we suddenly have two different input values (containing the same
7107 value, but different pseudos) where we formerly had only one.
7108 With more complicated asms this might lead to reload failures
7109 which wouldn't have happen without this pass. So, iterate over
7110 all operands and replace all occurrences of the register used. */
7111 for (j = 0; j < noutputs; j++)
7112 if (!rtx_equal_p (SET_DEST (p_sets[j]), input)
7113 && reg_overlap_mentioned_p (input, SET_DEST (p_sets[j])))
7114 SET_DEST (p_sets[j]) = replace_rtx (SET_DEST (p_sets[j]),
7115 input, output);
7116 for (j = 0; j < ninputs; j++)
7117 if (reg_overlap_mentioned_p (input, RTVEC_ELT (inputs, j)))
7118 RTVEC_ELT (inputs, j) = replace_rtx (RTVEC_ELT (inputs, j),
7119 input, output);
7121 changed = true;
7124 if (changed)
7125 df_insn_rescan (insn);
7128 static unsigned
7129 rest_of_match_asm_constraints (void)
7131 basic_block bb;
7132 rtx insn, pat, *p_sets;
7133 int noutputs;
7135 if (!crtl->has_asm_statement)
7136 return 0;
7138 df_set_flags (DF_DEFER_INSN_RESCAN);
7139 FOR_EACH_BB (bb)
7141 FOR_BB_INSNS (bb, insn)
7143 if (!INSN_P (insn))
7144 continue;
7146 pat = PATTERN (insn);
7147 if (GET_CODE (pat) == PARALLEL)
7148 p_sets = &XVECEXP (pat, 0, 0), noutputs = XVECLEN (pat, 0);
7149 else if (GET_CODE (pat) == SET)
7150 p_sets = &PATTERN (insn), noutputs = 1;
7151 else
7152 continue;
7154 if (GET_CODE (*p_sets) == SET
7155 && GET_CODE (SET_SRC (*p_sets)) == ASM_OPERANDS)
7156 match_asm_constraints_1 (insn, p_sets, noutputs);
7160 return TODO_df_finish;
7163 struct rtl_opt_pass pass_match_asm_constraints =
7166 RTL_PASS,
7167 "asmcons", /* name */
7168 NULL, /* gate */
7169 rest_of_match_asm_constraints, /* execute */
7170 NULL, /* sub */
7171 NULL, /* next */
7172 0, /* static_pass_number */
7173 TV_NONE, /* tv_id */
7174 0, /* properties_required */
7175 0, /* properties_provided */
7176 0, /* properties_destroyed */
7177 0, /* todo_flags_start */
7178 0 /* todo_flags_finish */
7183 #include "gt-function.h"