OSDN Git Service

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