OSDN Git Service

* expr.c (expand_expr_real_1): Use add_to_hard_reg_set function
[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   rtx insn;
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 (insn = get_insns (); insn; insn = NEXT_INSN (insn))
1905     if (INSN_P (insn))
1906       {
1907         /* These patterns in the instruction stream can never be recognized.
1908            Fortunately, they shouldn't contain virtual registers either.  */
1909         if (GET_CODE (PATTERN (insn)) == USE
1910             || GET_CODE (PATTERN (insn)) == CLOBBER
1911             || GET_CODE (PATTERN (insn)) == ADDR_VEC
1912             || GET_CODE (PATTERN (insn)) == ADDR_DIFF_VEC
1913             || GET_CODE (PATTERN (insn)) == ASM_INPUT)
1914           continue;
1915         else if (DEBUG_INSN_P (insn))
1916           for_each_rtx (&INSN_VAR_LOCATION (insn),
1917                         instantiate_virtual_regs_in_rtx, NULL);
1918         else
1919           instantiate_virtual_regs_in_insn (insn);
1920
1921         if (INSN_DELETED_P (insn))
1922           continue;
1923
1924         for_each_rtx (&REG_NOTES (insn), instantiate_virtual_regs_in_rtx, NULL);
1925
1926         /* Instantiate any virtual registers in CALL_INSN_FUNCTION_USAGE.  */
1927         if (CALL_P (insn))
1928           for_each_rtx (&CALL_INSN_FUNCTION_USAGE (insn),
1929                         instantiate_virtual_regs_in_rtx, NULL);
1930       }
1931
1932   /* Instantiate the virtual registers in the DECLs for debugging purposes.  */
1933   instantiate_decls (current_function_decl);
1934
1935   targetm.instantiate_decls ();
1936
1937   /* Indicate that, from now on, assign_stack_local should use
1938      frame_pointer_rtx.  */
1939   virtuals_instantiated = 1;
1940
1941   /* See allocate_dynamic_stack_space for the rationale.  */
1942 #ifdef SETJMP_VIA_SAVE_AREA
1943   if (flag_stack_usage && cfun->calls_setjmp)
1944     {
1945       int align = PREFERRED_STACK_BOUNDARY / BITS_PER_UNIT;
1946       dynamic_offset = (dynamic_offset + align - 1) / align * align;
1947       current_function_dynamic_stack_size
1948         += current_function_dynamic_alloc_count * dynamic_offset;
1949     }
1950 #endif
1951
1952   return 0;
1953 }
1954
1955 struct rtl_opt_pass pass_instantiate_virtual_regs =
1956 {
1957  {
1958   RTL_PASS,
1959   "vregs",                              /* name */
1960   NULL,                                 /* gate */
1961   instantiate_virtual_regs,             /* execute */
1962   NULL,                                 /* sub */
1963   NULL,                                 /* next */
1964   0,                                    /* static_pass_number */
1965   TV_NONE,                              /* tv_id */
1966   0,                                    /* properties_required */
1967   0,                                    /* properties_provided */
1968   0,                                    /* properties_destroyed */
1969   0,                                    /* todo_flags_start */
1970   TODO_dump_func                        /* todo_flags_finish */
1971  }
1972 };
1973
1974 \f
1975 /* Return 1 if EXP is an aggregate type (or a value with aggregate type).
1976    This means a type for which function calls must pass an address to the
1977    function or get an address back from the function.
1978    EXP may be a type node or an expression (whose type is tested).  */
1979
1980 int
1981 aggregate_value_p (const_tree exp, const_tree fntype)
1982 {
1983   const_tree type = (TYPE_P (exp)) ? exp : TREE_TYPE (exp);
1984   int i, regno, nregs;
1985   rtx reg;
1986
1987   if (fntype)
1988     switch (TREE_CODE (fntype))
1989       {
1990       case CALL_EXPR:
1991         {
1992           tree fndecl = get_callee_fndecl (fntype);
1993           fntype = (fndecl
1994                     ? TREE_TYPE (fndecl)
1995                     : TREE_TYPE (TREE_TYPE (CALL_EXPR_FN (fntype))));
1996         }
1997         break;
1998       case FUNCTION_DECL:
1999         fntype = TREE_TYPE (fntype);
2000         break;
2001       case FUNCTION_TYPE:
2002       case METHOD_TYPE:
2003         break;
2004       case IDENTIFIER_NODE:
2005         fntype = NULL_TREE;
2006         break;
2007       default:
2008         /* We don't expect other tree types here.  */
2009         gcc_unreachable ();
2010       }
2011
2012   if (VOID_TYPE_P (type))
2013     return 0;
2014
2015   /* If a record should be passed the same as its first (and only) member
2016      don't pass it as an aggregate.  */
2017   if (TREE_CODE (type) == RECORD_TYPE && TYPE_TRANSPARENT_AGGR (type))
2018     return aggregate_value_p (first_field (type), fntype);
2019
2020   /* If the front end has decided that this needs to be passed by
2021      reference, do so.  */
2022   if ((TREE_CODE (exp) == PARM_DECL || TREE_CODE (exp) == RESULT_DECL)
2023       && DECL_BY_REFERENCE (exp))
2024     return 1;
2025
2026   /* Function types that are TREE_ADDRESSABLE force return in memory.  */
2027   if (fntype && TREE_ADDRESSABLE (fntype))
2028     return 1;
2029
2030   /* Types that are TREE_ADDRESSABLE must be constructed in memory,
2031      and thus can't be returned in registers.  */
2032   if (TREE_ADDRESSABLE (type))
2033     return 1;
2034
2035   if (flag_pcc_struct_return && AGGREGATE_TYPE_P (type))
2036     return 1;
2037
2038   if (targetm.calls.return_in_memory (type, fntype))
2039     return 1;
2040
2041   /* Make sure we have suitable call-clobbered regs to return
2042      the value in; if not, we must return it in memory.  */
2043   reg = hard_function_value (type, 0, fntype, 0);
2044
2045   /* If we have something other than a REG (e.g. a PARALLEL), then assume
2046      it is OK.  */
2047   if (!REG_P (reg))
2048     return 0;
2049
2050   regno = REGNO (reg);
2051   nregs = hard_regno_nregs[regno][TYPE_MODE (type)];
2052   for (i = 0; i < nregs; i++)
2053     if (! call_used_regs[regno + i])
2054       return 1;
2055
2056   return 0;
2057 }
2058 \f
2059 /* Return true if we should assign DECL a pseudo register; false if it
2060    should live on the local stack.  */
2061
2062 bool
2063 use_register_for_decl (const_tree decl)
2064 {
2065   if (!targetm.calls.allocate_stack_slots_for_args())
2066     return true;
2067
2068   /* Honor volatile.  */
2069   if (TREE_SIDE_EFFECTS (decl))
2070     return false;
2071
2072   /* Honor addressability.  */
2073   if (TREE_ADDRESSABLE (decl))
2074     return false;
2075
2076   /* Only register-like things go in registers.  */
2077   if (DECL_MODE (decl) == BLKmode)
2078     return false;
2079
2080   /* If -ffloat-store specified, don't put explicit float variables
2081      into registers.  */
2082   /* ??? This should be checked after DECL_ARTIFICIAL, but tree-ssa
2083      propagates values across these stores, and it probably shouldn't.  */
2084   if (flag_float_store && FLOAT_TYPE_P (TREE_TYPE (decl)))
2085     return false;
2086
2087   /* If we're not interested in tracking debugging information for
2088      this decl, then we can certainly put it in a register.  */
2089   if (DECL_IGNORED_P (decl))
2090     return true;
2091
2092   if (optimize)
2093     return true;
2094
2095   if (!DECL_REGISTER (decl))
2096     return false;
2097
2098   switch (TREE_CODE (TREE_TYPE (decl)))
2099     {
2100     case RECORD_TYPE:
2101     case UNION_TYPE:
2102     case QUAL_UNION_TYPE:
2103       /* When not optimizing, disregard register keyword for variables with
2104          types containing methods, otherwise the methods won't be callable
2105          from the debugger.  */
2106       if (TYPE_METHODS (TREE_TYPE (decl)))
2107         return false;
2108       break;
2109     default:
2110       break;
2111     }
2112
2113   return true;
2114 }
2115
2116 /* Return true if TYPE should be passed by invisible reference.  */
2117
2118 bool
2119 pass_by_reference (CUMULATIVE_ARGS *ca, enum machine_mode mode,
2120                    tree type, bool named_arg)
2121 {
2122   if (type)
2123     {
2124       /* If this type contains non-trivial constructors, then it is
2125          forbidden for the middle-end to create any new copies.  */
2126       if (TREE_ADDRESSABLE (type))
2127         return true;
2128
2129       /* GCC post 3.4 passes *all* variable sized types by reference.  */
2130       if (!TYPE_SIZE (type) || TREE_CODE (TYPE_SIZE (type)) != INTEGER_CST)
2131         return true;
2132
2133       /* If a record type should be passed the same as its first (and only)
2134          member, use the type and mode of that member.  */
2135       if (TREE_CODE (type) == RECORD_TYPE && TYPE_TRANSPARENT_AGGR (type))
2136         {
2137           type = TREE_TYPE (first_field (type));
2138           mode = TYPE_MODE (type);
2139         }
2140     }
2141
2142   return targetm.calls.pass_by_reference (ca, mode, type, named_arg);
2143 }
2144
2145 /* Return true if TYPE, which is passed by reference, should be callee
2146    copied instead of caller copied.  */
2147
2148 bool
2149 reference_callee_copied (CUMULATIVE_ARGS *ca, enum machine_mode mode,
2150                          tree type, bool named_arg)
2151 {
2152   if (type && TREE_ADDRESSABLE (type))
2153     return false;
2154   return targetm.calls.callee_copies (ca, mode, type, named_arg);
2155 }
2156
2157 /* Structures to communicate between the subroutines of assign_parms.
2158    The first holds data persistent across all parameters, the second
2159    is cleared out for each parameter.  */
2160
2161 struct assign_parm_data_all
2162 {
2163   CUMULATIVE_ARGS args_so_far;
2164   struct args_size stack_args_size;
2165   tree function_result_decl;
2166   tree orig_fnargs;
2167   rtx first_conversion_insn;
2168   rtx last_conversion_insn;
2169   HOST_WIDE_INT pretend_args_size;
2170   HOST_WIDE_INT extra_pretend_bytes;
2171   int reg_parm_stack_space;
2172 };
2173
2174 struct assign_parm_data_one
2175 {
2176   tree nominal_type;
2177   tree passed_type;
2178   rtx entry_parm;
2179   rtx stack_parm;
2180   enum machine_mode nominal_mode;
2181   enum machine_mode passed_mode;
2182   enum machine_mode promoted_mode;
2183   struct locate_and_pad_arg_data locate;
2184   int partial;
2185   BOOL_BITFIELD named_arg : 1;
2186   BOOL_BITFIELD passed_pointer : 1;
2187   BOOL_BITFIELD on_stack : 1;
2188   BOOL_BITFIELD loaded_in_reg : 1;
2189 };
2190
2191 /* A subroutine of assign_parms.  Initialize ALL.  */
2192
2193 static void
2194 assign_parms_initialize_all (struct assign_parm_data_all *all)
2195 {
2196   tree fntype ATTRIBUTE_UNUSED;
2197
2198   memset (all, 0, sizeof (*all));
2199
2200   fntype = TREE_TYPE (current_function_decl);
2201
2202 #ifdef INIT_CUMULATIVE_INCOMING_ARGS
2203   INIT_CUMULATIVE_INCOMING_ARGS (all->args_so_far, fntype, NULL_RTX);
2204 #else
2205   INIT_CUMULATIVE_ARGS (all->args_so_far, fntype, NULL_RTX,
2206                         current_function_decl, -1);
2207 #endif
2208
2209 #ifdef REG_PARM_STACK_SPACE
2210   all->reg_parm_stack_space = REG_PARM_STACK_SPACE (current_function_decl);
2211 #endif
2212 }
2213
2214 /* If ARGS contains entries with complex types, split the entry into two
2215    entries of the component type.  Return a new list of substitutions are
2216    needed, else the old list.  */
2217
2218 static void
2219 split_complex_args (VEC(tree, heap) **args)
2220 {
2221   unsigned i;
2222   tree p;
2223
2224   FOR_EACH_VEC_ELT (tree, *args, i, p)
2225     {
2226       tree type = TREE_TYPE (p);
2227       if (TREE_CODE (type) == COMPLEX_TYPE
2228           && targetm.calls.split_complex_arg (type))
2229         {
2230           tree decl;
2231           tree subtype = TREE_TYPE (type);
2232           bool addressable = TREE_ADDRESSABLE (p);
2233
2234           /* Rewrite the PARM_DECL's type with its component.  */
2235           p = copy_node (p);
2236           TREE_TYPE (p) = subtype;
2237           DECL_ARG_TYPE (p) = TREE_TYPE (DECL_ARG_TYPE (p));
2238           DECL_MODE (p) = VOIDmode;
2239           DECL_SIZE (p) = NULL;
2240           DECL_SIZE_UNIT (p) = NULL;
2241           /* If this arg must go in memory, put it in a pseudo here.
2242              We can't allow it to go in memory as per normal parms,
2243              because the usual place might not have the imag part
2244              adjacent to the real part.  */
2245           DECL_ARTIFICIAL (p) = addressable;
2246           DECL_IGNORED_P (p) = addressable;
2247           TREE_ADDRESSABLE (p) = 0;
2248           layout_decl (p, 0);
2249           VEC_replace (tree, *args, i, p);
2250
2251           /* Build a second synthetic decl.  */
2252           decl = build_decl (EXPR_LOCATION (p),
2253                              PARM_DECL, NULL_TREE, subtype);
2254           DECL_ARG_TYPE (decl) = DECL_ARG_TYPE (p);
2255           DECL_ARTIFICIAL (decl) = addressable;
2256           DECL_IGNORED_P (decl) = addressable;
2257           layout_decl (decl, 0);
2258           VEC_safe_insert (tree, heap, *args, ++i, decl);
2259         }
2260     }
2261 }
2262
2263 /* A subroutine of assign_parms.  Adjust the parameter list to incorporate
2264    the hidden struct return argument, and (abi willing) complex args.
2265    Return the new parameter list.  */
2266
2267 static VEC(tree, heap) *
2268 assign_parms_augmented_arg_list (struct assign_parm_data_all *all)
2269 {
2270   tree fndecl = current_function_decl;
2271   tree fntype = TREE_TYPE (fndecl);
2272   VEC(tree, heap) *fnargs = NULL;
2273   tree arg;
2274
2275   for (arg = DECL_ARGUMENTS (fndecl); arg; arg = DECL_CHAIN (arg))
2276     VEC_safe_push (tree, heap, fnargs, arg);
2277
2278   all->orig_fnargs = DECL_ARGUMENTS (fndecl);
2279
2280   /* If struct value address is treated as the first argument, make it so.  */
2281   if (aggregate_value_p (DECL_RESULT (fndecl), fndecl)
2282       && ! cfun->returns_pcc_struct
2283       && targetm.calls.struct_value_rtx (TREE_TYPE (fndecl), 1) == 0)
2284     {
2285       tree type = build_pointer_type (TREE_TYPE (fntype));
2286       tree decl;
2287
2288       decl = build_decl (DECL_SOURCE_LOCATION (fndecl),
2289                          PARM_DECL, get_identifier (".result_ptr"), type);
2290       DECL_ARG_TYPE (decl) = type;
2291       DECL_ARTIFICIAL (decl) = 1;
2292       DECL_NAMELESS (decl) = 1;
2293       TREE_CONSTANT (decl) = 1;
2294
2295       DECL_CHAIN (decl) = all->orig_fnargs;
2296       all->orig_fnargs = decl;
2297       VEC_safe_insert (tree, heap, fnargs, 0, decl);
2298
2299       all->function_result_decl = decl;
2300     }
2301
2302   /* If the target wants to split complex arguments into scalars, do so.  */
2303   if (targetm.calls.split_complex_arg)
2304     split_complex_args (&fnargs);
2305
2306   return fnargs;
2307 }
2308
2309 /* A subroutine of assign_parms.  Examine PARM and pull out type and mode
2310    data for the parameter.  Incorporate ABI specifics such as pass-by-
2311    reference and type promotion.  */
2312
2313 static void
2314 assign_parm_find_data_types (struct assign_parm_data_all *all, tree parm,
2315                              struct assign_parm_data_one *data)
2316 {
2317   tree nominal_type, passed_type;
2318   enum machine_mode nominal_mode, passed_mode, promoted_mode;
2319   int unsignedp;
2320
2321   memset (data, 0, sizeof (*data));
2322
2323   /* NAMED_ARG is a misnomer.  We really mean 'non-variadic'. */
2324   if (!cfun->stdarg)
2325     data->named_arg = 1;  /* No variadic parms.  */
2326   else if (DECL_CHAIN (parm))
2327     data->named_arg = 1;  /* Not the last non-variadic parm. */
2328   else if (targetm.calls.strict_argument_naming (&all->args_so_far))
2329     data->named_arg = 1;  /* Only variadic ones are unnamed.  */
2330   else
2331     data->named_arg = 0;  /* Treat as variadic.  */
2332
2333   nominal_type = TREE_TYPE (parm);
2334   passed_type = DECL_ARG_TYPE (parm);
2335
2336   /* Look out for errors propagating this far.  Also, if the parameter's
2337      type is void then its value doesn't matter.  */
2338   if (TREE_TYPE (parm) == error_mark_node
2339       /* This can happen after weird syntax errors
2340          or if an enum type is defined among the parms.  */
2341       || TREE_CODE (parm) != PARM_DECL
2342       || passed_type == NULL
2343       || VOID_TYPE_P (nominal_type))
2344     {
2345       nominal_type = passed_type = void_type_node;
2346       nominal_mode = passed_mode = promoted_mode = VOIDmode;
2347       goto egress;
2348     }
2349
2350   /* Find mode of arg as it is passed, and mode of arg as it should be
2351      during execution of this function.  */
2352   passed_mode = TYPE_MODE (passed_type);
2353   nominal_mode = TYPE_MODE (nominal_type);
2354
2355   /* If the parm is to be passed as a transparent union or record, use the
2356      type of the first field for the tests below.  We have already verified
2357      that the modes are the same.  */
2358   if ((TREE_CODE (passed_type) == UNION_TYPE
2359        || TREE_CODE (passed_type) == RECORD_TYPE)
2360       && TYPE_TRANSPARENT_AGGR (passed_type))
2361     passed_type = TREE_TYPE (first_field (passed_type));
2362
2363   /* See if this arg was passed by invisible reference.  */
2364   if (pass_by_reference (&all->args_so_far, passed_mode,
2365                          passed_type, data->named_arg))
2366     {
2367       passed_type = nominal_type = build_pointer_type (passed_type);
2368       data->passed_pointer = true;
2369       passed_mode = nominal_mode = Pmode;
2370     }
2371
2372   /* Find mode as it is passed by the ABI.  */
2373   unsignedp = TYPE_UNSIGNED (passed_type);
2374   promoted_mode = promote_function_mode (passed_type, passed_mode, &unsignedp,
2375                                          TREE_TYPE (current_function_decl), 0);
2376
2377  egress:
2378   data->nominal_type = nominal_type;
2379   data->passed_type = passed_type;
2380   data->nominal_mode = nominal_mode;
2381   data->passed_mode = passed_mode;
2382   data->promoted_mode = promoted_mode;
2383 }
2384
2385 /* A subroutine of assign_parms.  Invoke setup_incoming_varargs.  */
2386
2387 static void
2388 assign_parms_setup_varargs (struct assign_parm_data_all *all,
2389                             struct assign_parm_data_one *data, bool no_rtl)
2390 {
2391   int varargs_pretend_bytes = 0;
2392
2393   targetm.calls.setup_incoming_varargs (&all->args_so_far,
2394                                         data->promoted_mode,
2395                                         data->passed_type,
2396                                         &varargs_pretend_bytes, no_rtl);
2397
2398   /* If the back-end has requested extra stack space, record how much is
2399      needed.  Do not change pretend_args_size otherwise since it may be
2400      nonzero from an earlier partial argument.  */
2401   if (varargs_pretend_bytes > 0)
2402     all->pretend_args_size = varargs_pretend_bytes;
2403 }
2404
2405 /* A subroutine of assign_parms.  Set DATA->ENTRY_PARM corresponding to
2406    the incoming location of the current parameter.  */
2407
2408 static void
2409 assign_parm_find_entry_rtl (struct assign_parm_data_all *all,
2410                             struct assign_parm_data_one *data)
2411 {
2412   HOST_WIDE_INT pretend_bytes = 0;
2413   rtx entry_parm;
2414   bool in_regs;
2415
2416   if (data->promoted_mode == VOIDmode)
2417     {
2418       data->entry_parm = data->stack_parm = const0_rtx;
2419       return;
2420     }
2421
2422   entry_parm = targetm.calls.function_incoming_arg (&all->args_so_far,
2423                                                     data->promoted_mode,
2424                                                     data->passed_type,
2425                                                     data->named_arg);
2426
2427   if (entry_parm == 0)
2428     data->promoted_mode = data->passed_mode;
2429
2430   /* Determine parm's home in the stack, in case it arrives in the stack
2431      or we should pretend it did.  Compute the stack position and rtx where
2432      the argument arrives and its size.
2433
2434      There is one complexity here:  If this was a parameter that would
2435      have been passed in registers, but wasn't only because it is
2436      __builtin_va_alist, we want locate_and_pad_parm to treat it as if
2437      it came in a register so that REG_PARM_STACK_SPACE isn't skipped.
2438      In this case, we call FUNCTION_ARG with NAMED set to 1 instead of 0
2439      as it was the previous time.  */
2440   in_regs = entry_parm != 0;
2441 #ifdef STACK_PARMS_IN_REG_PARM_AREA
2442   in_regs = true;
2443 #endif
2444   if (!in_regs && !data->named_arg)
2445     {
2446       if (targetm.calls.pretend_outgoing_varargs_named (&all->args_so_far))
2447         {
2448           rtx tem;
2449           tem = targetm.calls.function_incoming_arg (&all->args_so_far,
2450                                                      data->promoted_mode,
2451                                                      data->passed_type, true);
2452           in_regs = tem != NULL;
2453         }
2454     }
2455
2456   /* If this parameter was passed both in registers and in the stack, use
2457      the copy on the stack.  */
2458   if (targetm.calls.must_pass_in_stack (data->promoted_mode,
2459                                         data->passed_type))
2460     entry_parm = 0;
2461
2462   if (entry_parm)
2463     {
2464       int partial;
2465
2466       partial = targetm.calls.arg_partial_bytes (&all->args_so_far,
2467                                                  data->promoted_mode,
2468                                                  data->passed_type,
2469                                                  data->named_arg);
2470       data->partial = partial;
2471
2472       /* The caller might already have allocated stack space for the
2473          register parameters.  */
2474       if (partial != 0 && all->reg_parm_stack_space == 0)
2475         {
2476           /* Part of this argument is passed in registers and part
2477              is passed on the stack.  Ask the prologue code to extend
2478              the stack part so that we can recreate the full value.
2479
2480              PRETEND_BYTES is the size of the registers we need to store.
2481              CURRENT_FUNCTION_PRETEND_ARGS_SIZE is the amount of extra
2482              stack space that the prologue should allocate.
2483
2484              Internally, gcc assumes that the argument pointer is aligned
2485              to STACK_BOUNDARY bits.  This is used both for alignment
2486              optimizations (see init_emit) and to locate arguments that are
2487              aligned to more than PARM_BOUNDARY bits.  We must preserve this
2488              invariant by rounding CURRENT_FUNCTION_PRETEND_ARGS_SIZE up to
2489              a stack boundary.  */
2490
2491           /* We assume at most one partial arg, and it must be the first
2492              argument on the stack.  */
2493           gcc_assert (!all->extra_pretend_bytes && !all->pretend_args_size);
2494
2495           pretend_bytes = partial;
2496           all->pretend_args_size = CEIL_ROUND (pretend_bytes, STACK_BYTES);
2497
2498           /* We want to align relative to the actual stack pointer, so
2499              don't include this in the stack size until later.  */
2500           all->extra_pretend_bytes = all->pretend_args_size;
2501         }
2502     }
2503
2504   locate_and_pad_parm (data->promoted_mode, data->passed_type, in_regs,
2505                        entry_parm ? data->partial : 0, current_function_decl,
2506                        &all->stack_args_size, &data->locate);
2507
2508   /* Update parm_stack_boundary if this parameter is passed in the
2509      stack.  */
2510   if (!in_regs && crtl->parm_stack_boundary < data->locate.boundary)
2511     crtl->parm_stack_boundary = data->locate.boundary;
2512
2513   /* Adjust offsets to include the pretend args.  */
2514   pretend_bytes = all->extra_pretend_bytes - pretend_bytes;
2515   data->locate.slot_offset.constant += pretend_bytes;
2516   data->locate.offset.constant += pretend_bytes;
2517
2518   data->entry_parm = entry_parm;
2519 }
2520
2521 /* A subroutine of assign_parms.  If there is actually space on the stack
2522    for this parm, count it in stack_args_size and return true.  */
2523
2524 static bool
2525 assign_parm_is_stack_parm (struct assign_parm_data_all *all,
2526                            struct assign_parm_data_one *data)
2527 {
2528   /* Trivially true if we've no incoming register.  */
2529   if (data->entry_parm == NULL)
2530     ;
2531   /* Also true if we're partially in registers and partially not,
2532      since we've arranged to drop the entire argument on the stack.  */
2533   else if (data->partial != 0)
2534     ;
2535   /* Also true if the target says that it's passed in both registers
2536      and on the stack.  */
2537   else if (GET_CODE (data->entry_parm) == PARALLEL
2538            && XEXP (XVECEXP (data->entry_parm, 0, 0), 0) == NULL_RTX)
2539     ;
2540   /* Also true if the target says that there's stack allocated for
2541      all register parameters.  */
2542   else if (all->reg_parm_stack_space > 0)
2543     ;
2544   /* Otherwise, no, this parameter has no ABI defined stack slot.  */
2545   else
2546     return false;
2547
2548   all->stack_args_size.constant += data->locate.size.constant;
2549   if (data->locate.size.var)
2550     ADD_PARM_SIZE (all->stack_args_size, data->locate.size.var);
2551
2552   return true;
2553 }
2554
2555 /* A subroutine of assign_parms.  Given that this parameter is allocated
2556    stack space by the ABI, find it.  */
2557
2558 static void
2559 assign_parm_find_stack_rtl (tree parm, struct assign_parm_data_one *data)
2560 {
2561   rtx offset_rtx, stack_parm;
2562   unsigned int align, boundary;
2563
2564   /* If we're passing this arg using a reg, make its stack home the
2565      aligned stack slot.  */
2566   if (data->entry_parm)
2567     offset_rtx = ARGS_SIZE_RTX (data->locate.slot_offset);
2568   else
2569     offset_rtx = ARGS_SIZE_RTX (data->locate.offset);
2570
2571   stack_parm = crtl->args.internal_arg_pointer;
2572   if (offset_rtx != const0_rtx)
2573     stack_parm = gen_rtx_PLUS (Pmode, stack_parm, offset_rtx);
2574   stack_parm = gen_rtx_MEM (data->promoted_mode, stack_parm);
2575
2576   if (!data->passed_pointer)
2577     {
2578       set_mem_attributes (stack_parm, parm, 1);
2579       /* set_mem_attributes could set MEM_SIZE to the passed mode's size,
2580          while promoted mode's size is needed.  */
2581       if (data->promoted_mode != BLKmode
2582           && data->promoted_mode != DECL_MODE (parm))
2583         {
2584           set_mem_size (stack_parm,
2585                         GEN_INT (GET_MODE_SIZE (data->promoted_mode)));
2586           if (MEM_EXPR (stack_parm) && MEM_OFFSET (stack_parm))
2587             {
2588               int offset = subreg_lowpart_offset (DECL_MODE (parm),
2589                                                   data->promoted_mode);
2590               if (offset)
2591                 set_mem_offset (stack_parm,
2592                                 plus_constant (MEM_OFFSET (stack_parm),
2593                                                -offset));
2594             }
2595         }
2596     }
2597
2598   boundary = data->locate.boundary;
2599   align = BITS_PER_UNIT;
2600
2601   /* If we're padding upward, we know that the alignment of the slot
2602      is TARGET_FUNCTION_ARG_BOUNDARY.  If we're using slot_offset, we're
2603      intentionally forcing upward padding.  Otherwise we have to come
2604      up with a guess at the alignment based on OFFSET_RTX.  */
2605   if (data->locate.where_pad != downward || data->entry_parm)
2606     align = boundary;
2607   else if (CONST_INT_P (offset_rtx))
2608     {
2609       align = INTVAL (offset_rtx) * BITS_PER_UNIT | boundary;
2610       align = align & -align;
2611     }
2612   set_mem_align (stack_parm, align);
2613
2614   if (data->entry_parm)
2615     set_reg_attrs_for_parm (data->entry_parm, stack_parm);
2616
2617   data->stack_parm = stack_parm;
2618 }
2619
2620 /* A subroutine of assign_parms.  Adjust DATA->ENTRY_RTL such that it's
2621    always valid and contiguous.  */
2622
2623 static void
2624 assign_parm_adjust_entry_rtl (struct assign_parm_data_one *data)
2625 {
2626   rtx entry_parm = data->entry_parm;
2627   rtx stack_parm = data->stack_parm;
2628
2629   /* If this parm was passed part in regs and part in memory, pretend it
2630      arrived entirely in memory by pushing the register-part onto the stack.
2631      In the special case of a DImode or DFmode that is split, we could put
2632      it together in a pseudoreg directly, but for now that's not worth
2633      bothering with.  */
2634   if (data->partial != 0)
2635     {
2636       /* Handle calls that pass values in multiple non-contiguous
2637          locations.  The Irix 6 ABI has examples of this.  */
2638       if (GET_CODE (entry_parm) == PARALLEL)
2639         emit_group_store (validize_mem (stack_parm), entry_parm,
2640                           data->passed_type,
2641                           int_size_in_bytes (data->passed_type));
2642       else
2643         {
2644           gcc_assert (data->partial % UNITS_PER_WORD == 0);
2645           move_block_from_reg (REGNO (entry_parm), validize_mem (stack_parm),
2646                                data->partial / UNITS_PER_WORD);
2647         }
2648
2649       entry_parm = stack_parm;
2650     }
2651
2652   /* If we didn't decide this parm came in a register, by default it came
2653      on the stack.  */
2654   else if (entry_parm == NULL)
2655     entry_parm = stack_parm;
2656
2657   /* When an argument is passed in multiple locations, we can't make use
2658      of this information, but we can save some copying if the whole argument
2659      is passed in a single register.  */
2660   else if (GET_CODE (entry_parm) == PARALLEL
2661            && data->nominal_mode != BLKmode
2662            && data->passed_mode != BLKmode)
2663     {
2664       size_t i, len = XVECLEN (entry_parm, 0);
2665
2666       for (i = 0; i < len; i++)
2667         if (XEXP (XVECEXP (entry_parm, 0, i), 0) != NULL_RTX
2668             && REG_P (XEXP (XVECEXP (entry_parm, 0, i), 0))
2669             && (GET_MODE (XEXP (XVECEXP (entry_parm, 0, i), 0))
2670                 == data->passed_mode)
2671             && INTVAL (XEXP (XVECEXP (entry_parm, 0, i), 1)) == 0)
2672           {
2673             entry_parm = XEXP (XVECEXP (entry_parm, 0, i), 0);
2674             break;
2675           }
2676     }
2677
2678   data->entry_parm = entry_parm;
2679 }
2680
2681 /* A subroutine of assign_parms.  Reconstitute any values which were
2682    passed in multiple registers and would fit in a single register.  */
2683
2684 static void
2685 assign_parm_remove_parallels (struct assign_parm_data_one *data)
2686 {
2687   rtx entry_parm = data->entry_parm;
2688
2689   /* Convert the PARALLEL to a REG of the same mode as the parallel.
2690      This can be done with register operations rather than on the
2691      stack, even if we will store the reconstituted parameter on the
2692      stack later.  */
2693   if (GET_CODE (entry_parm) == PARALLEL && GET_MODE (entry_parm) != BLKmode)
2694     {
2695       rtx parmreg = gen_reg_rtx (GET_MODE (entry_parm));
2696       emit_group_store (parmreg, entry_parm, data->passed_type,
2697                         GET_MODE_SIZE (GET_MODE (entry_parm)));
2698       entry_parm = parmreg;
2699     }
2700
2701   data->entry_parm = entry_parm;
2702 }
2703
2704 /* A subroutine of assign_parms.  Adjust DATA->STACK_RTL such that it's
2705    always valid and properly aligned.  */
2706
2707 static void
2708 assign_parm_adjust_stack_rtl (struct assign_parm_data_one *data)
2709 {
2710   rtx stack_parm = data->stack_parm;
2711
2712   /* If we can't trust the parm stack slot to be aligned enough for its
2713      ultimate type, don't use that slot after entry.  We'll make another
2714      stack slot, if we need one.  */
2715   if (stack_parm
2716       && ((STRICT_ALIGNMENT
2717            && GET_MODE_ALIGNMENT (data->nominal_mode) > MEM_ALIGN (stack_parm))
2718           || (data->nominal_type
2719               && TYPE_ALIGN (data->nominal_type) > MEM_ALIGN (stack_parm)
2720               && MEM_ALIGN (stack_parm) < PREFERRED_STACK_BOUNDARY)))
2721     stack_parm = NULL;
2722
2723   /* If parm was passed in memory, and we need to convert it on entry,
2724      don't store it back in that same slot.  */
2725   else if (data->entry_parm == stack_parm
2726            && data->nominal_mode != BLKmode
2727            && data->nominal_mode != data->passed_mode)
2728     stack_parm = NULL;
2729
2730   /* If stack protection is in effect for this function, don't leave any
2731      pointers in their passed stack slots.  */
2732   else if (crtl->stack_protect_guard
2733            && (flag_stack_protect == 2
2734                || data->passed_pointer
2735                || POINTER_TYPE_P (data->nominal_type)))
2736     stack_parm = NULL;
2737
2738   data->stack_parm = stack_parm;
2739 }
2740
2741 /* A subroutine of assign_parms.  Return true if the current parameter
2742    should be stored as a BLKmode in the current frame.  */
2743
2744 static bool
2745 assign_parm_setup_block_p (struct assign_parm_data_one *data)
2746 {
2747   if (data->nominal_mode == BLKmode)
2748     return true;
2749   if (GET_MODE (data->entry_parm) == BLKmode)
2750     return true;
2751
2752 #ifdef BLOCK_REG_PADDING
2753   /* Only assign_parm_setup_block knows how to deal with register arguments
2754      that are padded at the least significant end.  */
2755   if (REG_P (data->entry_parm)
2756       && GET_MODE_SIZE (data->promoted_mode) < UNITS_PER_WORD
2757       && (BLOCK_REG_PADDING (data->passed_mode, data->passed_type, 1)
2758           == (BYTES_BIG_ENDIAN ? upward : downward)))
2759     return true;
2760 #endif
2761
2762   return false;
2763 }
2764
2765 /* A subroutine of assign_parms.  Arrange for the parameter to be
2766    present and valid in DATA->STACK_RTL.  */
2767
2768 static void
2769 assign_parm_setup_block (struct assign_parm_data_all *all,
2770                          tree parm, struct assign_parm_data_one *data)
2771 {
2772   rtx entry_parm = data->entry_parm;
2773   rtx stack_parm = data->stack_parm;
2774   HOST_WIDE_INT size;
2775   HOST_WIDE_INT size_stored;
2776
2777   if (GET_CODE (entry_parm) == PARALLEL)
2778     entry_parm = emit_group_move_into_temps (entry_parm);
2779
2780   size = int_size_in_bytes (data->passed_type);
2781   size_stored = CEIL_ROUND (size, UNITS_PER_WORD);
2782   if (stack_parm == 0)
2783     {
2784       DECL_ALIGN (parm) = MAX (DECL_ALIGN (parm), BITS_PER_WORD);
2785       stack_parm = assign_stack_local (BLKmode, size_stored,
2786                                        DECL_ALIGN (parm));
2787       if (GET_MODE_SIZE (GET_MODE (entry_parm)) == size)
2788         PUT_MODE (stack_parm, GET_MODE (entry_parm));
2789       set_mem_attributes (stack_parm, parm, 1);
2790     }
2791
2792   /* If a BLKmode arrives in registers, copy it to a stack slot.  Handle
2793      calls that pass values in multiple non-contiguous locations.  */
2794   if (REG_P (entry_parm) || GET_CODE (entry_parm) == PARALLEL)
2795     {
2796       rtx mem;
2797
2798       /* Note that we will be storing an integral number of words.
2799          So we have to be careful to ensure that we allocate an
2800          integral number of words.  We do this above when we call
2801          assign_stack_local if space was not allocated in the argument
2802          list.  If it was, this will not work if PARM_BOUNDARY is not
2803          a multiple of BITS_PER_WORD.  It isn't clear how to fix this
2804          if it becomes a problem.  Exception is when BLKmode arrives
2805          with arguments not conforming to word_mode.  */
2806
2807       if (data->stack_parm == 0)
2808         ;
2809       else if (GET_CODE (entry_parm) == PARALLEL)
2810         ;
2811       else
2812         gcc_assert (!size || !(PARM_BOUNDARY % BITS_PER_WORD));
2813
2814       mem = validize_mem (stack_parm);
2815
2816       /* Handle values in multiple non-contiguous locations.  */
2817       if (GET_CODE (entry_parm) == PARALLEL)
2818         {
2819           push_to_sequence2 (all->first_conversion_insn,
2820                              all->last_conversion_insn);
2821           emit_group_store (mem, entry_parm, data->passed_type, size);
2822           all->first_conversion_insn = get_insns ();
2823           all->last_conversion_insn = get_last_insn ();
2824           end_sequence ();
2825         }
2826
2827       else if (size == 0)
2828         ;
2829
2830       /* If SIZE is that of a mode no bigger than a word, just use
2831          that mode's store operation.  */
2832       else if (size <= UNITS_PER_WORD)
2833         {
2834           enum machine_mode mode
2835             = mode_for_size (size * BITS_PER_UNIT, MODE_INT, 0);
2836
2837           if (mode != BLKmode
2838 #ifdef BLOCK_REG_PADDING
2839               && (size == UNITS_PER_WORD
2840                   || (BLOCK_REG_PADDING (mode, data->passed_type, 1)
2841                       != (BYTES_BIG_ENDIAN ? upward : downward)))
2842 #endif
2843               )
2844             {
2845               rtx reg;
2846
2847               /* We are really truncating a word_mode value containing
2848                  SIZE bytes into a value of mode MODE.  If such an
2849                  operation requires no actual instructions, we can refer
2850                  to the value directly in mode MODE, otherwise we must
2851                  start with the register in word_mode and explicitly
2852                  convert it.  */
2853               if (TRULY_NOOP_TRUNCATION (size * BITS_PER_UNIT, BITS_PER_WORD))
2854                 reg = gen_rtx_REG (mode, REGNO (entry_parm));
2855               else
2856                 {
2857                   reg = gen_rtx_REG (word_mode, REGNO (entry_parm));
2858                   reg = convert_to_mode (mode, copy_to_reg (reg), 1);
2859                 }
2860               emit_move_insn (change_address (mem, mode, 0), reg);
2861             }
2862
2863           /* Blocks smaller than a word on a BYTES_BIG_ENDIAN
2864              machine must be aligned to the left before storing
2865              to memory.  Note that the previous test doesn't
2866              handle all cases (e.g. SIZE == 3).  */
2867           else if (size != UNITS_PER_WORD
2868 #ifdef BLOCK_REG_PADDING
2869                    && (BLOCK_REG_PADDING (mode, data->passed_type, 1)
2870                        == downward)
2871 #else
2872                    && BYTES_BIG_ENDIAN
2873 #endif
2874                    )
2875             {
2876               rtx tem, x;
2877               int by = (UNITS_PER_WORD - size) * BITS_PER_UNIT;
2878               rtx reg = gen_rtx_REG (word_mode, REGNO (entry_parm));
2879
2880               x = expand_shift (LSHIFT_EXPR, word_mode, reg,
2881                                 build_int_cst (NULL_TREE, by),
2882                                 NULL_RTX, 1);
2883               tem = change_address (mem, word_mode, 0);
2884               emit_move_insn (tem, x);
2885             }
2886           else
2887             move_block_from_reg (REGNO (entry_parm), mem,
2888                                  size_stored / UNITS_PER_WORD);
2889         }
2890       else
2891         move_block_from_reg (REGNO (entry_parm), mem,
2892                              size_stored / UNITS_PER_WORD);
2893     }
2894   else if (data->stack_parm == 0)
2895     {
2896       push_to_sequence2 (all->first_conversion_insn, all->last_conversion_insn);
2897       emit_block_move (stack_parm, data->entry_parm, GEN_INT (size),
2898                        BLOCK_OP_NORMAL);
2899       all->first_conversion_insn = get_insns ();
2900       all->last_conversion_insn = get_last_insn ();
2901       end_sequence ();
2902     }
2903
2904   data->stack_parm = stack_parm;
2905   SET_DECL_RTL (parm, stack_parm);
2906 }
2907
2908 /* A subroutine of assign_parm_setup_reg, called through note_stores.
2909    This collects sets and clobbers of hard registers in a HARD_REG_SET,
2910    which is pointed to by DATA.  */
2911 static void
2912 record_hard_reg_sets (rtx x, const_rtx pat ATTRIBUTE_UNUSED, void *data)
2913 {
2914   HARD_REG_SET *pset = (HARD_REG_SET *)data;
2915   if (REG_P (x) && HARD_REGISTER_P (x))
2916     add_to_hard_reg_set (pset, GET_MODE (x), REGNO (x));
2917 }
2918
2919 /* A subroutine of assign_parms.  Allocate a pseudo to hold the current
2920    parameter.  Get it there.  Perform all ABI specified conversions.  */
2921
2922 static void
2923 assign_parm_setup_reg (struct assign_parm_data_all *all, tree parm,
2924                        struct assign_parm_data_one *data)
2925 {
2926   rtx parmreg, validated_mem;
2927   rtx equiv_stack_parm;
2928   enum machine_mode promoted_nominal_mode;
2929   int unsignedp = TYPE_UNSIGNED (TREE_TYPE (parm));
2930   bool did_conversion = false;
2931   bool need_conversion, moved;
2932
2933   /* Store the parm in a pseudoregister during the function, but we may
2934      need to do it in a wider mode.  Using 2 here makes the result
2935      consistent with promote_decl_mode and thus expand_expr_real_1.  */
2936   promoted_nominal_mode
2937     = promote_function_mode (data->nominal_type, data->nominal_mode, &unsignedp,
2938                              TREE_TYPE (current_function_decl), 2);
2939
2940   parmreg = gen_reg_rtx (promoted_nominal_mode);
2941
2942   if (!DECL_ARTIFICIAL (parm))
2943     mark_user_reg (parmreg);
2944
2945   /* If this was an item that we received a pointer to,
2946      set DECL_RTL appropriately.  */
2947   if (data->passed_pointer)
2948     {
2949       rtx x = gen_rtx_MEM (TYPE_MODE (TREE_TYPE (data->passed_type)), parmreg);
2950       set_mem_attributes (x, parm, 1);
2951       SET_DECL_RTL (parm, x);
2952     }
2953   else
2954     SET_DECL_RTL (parm, parmreg);
2955
2956   assign_parm_remove_parallels (data);
2957
2958   /* Copy the value into the register, thus bridging between
2959      assign_parm_find_data_types and expand_expr_real_1.  */
2960
2961   equiv_stack_parm = data->stack_parm;
2962   validated_mem = validize_mem (data->entry_parm);
2963
2964   need_conversion = (data->nominal_mode != data->passed_mode
2965                      || promoted_nominal_mode != data->promoted_mode);
2966   moved = false;
2967
2968   if (need_conversion
2969       && GET_MODE_CLASS (data->nominal_mode) == MODE_INT
2970       && data->nominal_mode == data->passed_mode
2971       && data->nominal_mode == GET_MODE (data->entry_parm))
2972     {
2973       /* ENTRY_PARM has been converted to PROMOTED_MODE, its
2974          mode, by the caller.  We now have to convert it to
2975          NOMINAL_MODE, if different.  However, PARMREG may be in
2976          a different mode than NOMINAL_MODE if it is being stored
2977          promoted.
2978
2979          If ENTRY_PARM is a hard register, it might be in a register
2980          not valid for operating in its mode (e.g., an odd-numbered
2981          register for a DFmode).  In that case, moves are the only
2982          thing valid, so we can't do a convert from there.  This
2983          occurs when the calling sequence allow such misaligned
2984          usages.
2985
2986          In addition, the conversion may involve a call, which could
2987          clobber parameters which haven't been copied to pseudo
2988          registers yet.
2989
2990          First, we try to emit an insn which performs the necessary
2991          conversion.  We verify that this insn does not clobber any
2992          hard registers.  */
2993
2994       enum insn_code icode;
2995       rtx op0, op1;
2996
2997       icode = can_extend_p (promoted_nominal_mode, data->passed_mode,
2998                             unsignedp);
2999
3000       op0 = parmreg;
3001       op1 = validated_mem;
3002       if (icode != CODE_FOR_nothing
3003           && insn_operand_matches (icode, 0, op0)
3004           && insn_operand_matches (icode, 1, op1))
3005         {
3006           enum rtx_code code = unsignedp ? ZERO_EXTEND : SIGN_EXTEND;
3007           rtx insn, insns;
3008           HARD_REG_SET hardregs;
3009
3010           start_sequence ();
3011           insn = gen_extend_insn (op0, op1, promoted_nominal_mode,
3012                                   data->passed_mode, unsignedp);
3013           emit_insn (insn);
3014           insns = get_insns ();
3015
3016           moved = true;
3017           CLEAR_HARD_REG_SET (hardregs);
3018           for (insn = insns; insn && moved; insn = NEXT_INSN (insn))
3019             {
3020               if (INSN_P (insn))
3021                 note_stores (PATTERN (insn), record_hard_reg_sets,
3022                              &hardregs);
3023               if (!hard_reg_set_empty_p (hardregs))
3024                 moved = false;
3025             }
3026
3027           end_sequence ();
3028
3029           if (moved)
3030             {
3031               emit_insn (insns);
3032               if (equiv_stack_parm != NULL_RTX)
3033                 equiv_stack_parm = gen_rtx_fmt_e (code, GET_MODE (parmreg),
3034                                                   equiv_stack_parm);
3035             }
3036         }
3037     }
3038
3039   if (moved)
3040     /* Nothing to do.  */
3041     ;
3042   else if (need_conversion)
3043     {
3044       /* We did not have an insn to convert directly, or the sequence
3045          generated appeared unsafe.  We must first copy the parm to a
3046          pseudo reg, and save the conversion until after all
3047          parameters have been moved.  */
3048
3049       int save_tree_used;
3050       rtx tempreg = gen_reg_rtx (GET_MODE (data->entry_parm));
3051
3052       emit_move_insn (tempreg, validated_mem);
3053
3054       push_to_sequence2 (all->first_conversion_insn, all->last_conversion_insn);
3055       tempreg = convert_to_mode (data->nominal_mode, tempreg, unsignedp);
3056
3057       if (GET_CODE (tempreg) == SUBREG
3058           && GET_MODE (tempreg) == data->nominal_mode
3059           && REG_P (SUBREG_REG (tempreg))
3060           && data->nominal_mode == data->passed_mode
3061           && GET_MODE (SUBREG_REG (tempreg)) == GET_MODE (data->entry_parm)
3062           && GET_MODE_SIZE (GET_MODE (tempreg))
3063              < GET_MODE_SIZE (GET_MODE (data->entry_parm)))
3064         {
3065           /* The argument is already sign/zero extended, so note it
3066              into the subreg.  */
3067           SUBREG_PROMOTED_VAR_P (tempreg) = 1;
3068           SUBREG_PROMOTED_UNSIGNED_SET (tempreg, unsignedp);
3069         }
3070
3071       /* TREE_USED gets set erroneously during expand_assignment.  */
3072       save_tree_used = TREE_USED (parm);
3073       expand_assignment (parm, make_tree (data->nominal_type, tempreg), false);
3074       TREE_USED (parm) = save_tree_used;
3075       all->first_conversion_insn = get_insns ();
3076       all->last_conversion_insn = get_last_insn ();
3077       end_sequence ();
3078
3079       did_conversion = true;
3080     }
3081   else
3082     emit_move_insn (parmreg, validated_mem);
3083
3084   /* If we were passed a pointer but the actual value can safely live
3085      in a register, put it in one.  */
3086   if (data->passed_pointer
3087       && TYPE_MODE (TREE_TYPE (parm)) != BLKmode
3088       /* If by-reference argument was promoted, demote it.  */
3089       && (TYPE_MODE (TREE_TYPE (parm)) != GET_MODE (DECL_RTL (parm))
3090           || use_register_for_decl (parm)))
3091     {
3092       /* We can't use nominal_mode, because it will have been set to
3093          Pmode above.  We must use the actual mode of the parm.  */
3094       parmreg = gen_reg_rtx (TYPE_MODE (TREE_TYPE (parm)));
3095       mark_user_reg (parmreg);
3096
3097       if (GET_MODE (parmreg) != GET_MODE (DECL_RTL (parm)))
3098         {
3099           rtx tempreg = gen_reg_rtx (GET_MODE (DECL_RTL (parm)));
3100           int unsigned_p = TYPE_UNSIGNED (TREE_TYPE (parm));
3101
3102           push_to_sequence2 (all->first_conversion_insn,
3103                              all->last_conversion_insn);
3104           emit_move_insn (tempreg, DECL_RTL (parm));
3105           tempreg = convert_to_mode (GET_MODE (parmreg), tempreg, unsigned_p);
3106           emit_move_insn (parmreg, tempreg);
3107           all->first_conversion_insn = get_insns ();
3108           all->last_conversion_insn = get_last_insn ();
3109           end_sequence ();
3110
3111           did_conversion = true;
3112         }
3113       else
3114         emit_move_insn (parmreg, DECL_RTL (parm));
3115
3116       SET_DECL_RTL (parm, parmreg);
3117
3118       /* STACK_PARM is the pointer, not the parm, and PARMREG is
3119          now the parm.  */
3120       data->stack_parm = NULL;
3121     }
3122
3123   /* Mark the register as eliminable if we did no conversion and it was
3124      copied from memory at a fixed offset, and the arg pointer was not
3125      copied to a pseudo-reg.  If the arg pointer is a pseudo reg or the
3126      offset formed an invalid address, such memory-equivalences as we
3127      make here would screw up life analysis for it.  */
3128   if (data->nominal_mode == data->passed_mode
3129       && !did_conversion
3130       && data->stack_parm != 0
3131       && MEM_P (data->stack_parm)
3132       && data->locate.offset.var == 0
3133       && reg_mentioned_p (virtual_incoming_args_rtx,
3134                           XEXP (data->stack_parm, 0)))
3135     {
3136       rtx linsn = get_last_insn ();
3137       rtx sinsn, set;
3138
3139       /* Mark complex types separately.  */
3140       if (GET_CODE (parmreg) == CONCAT)
3141         {
3142           enum machine_mode submode
3143             = GET_MODE_INNER (GET_MODE (parmreg));
3144           int regnor = REGNO (XEXP (parmreg, 0));
3145           int regnoi = REGNO (XEXP (parmreg, 1));
3146           rtx stackr = adjust_address_nv (data->stack_parm, submode, 0);
3147           rtx stacki = adjust_address_nv (data->stack_parm, submode,
3148                                           GET_MODE_SIZE (submode));
3149
3150           /* Scan backwards for the set of the real and
3151              imaginary parts.  */
3152           for (sinsn = linsn; sinsn != 0;
3153                sinsn = prev_nonnote_insn (sinsn))
3154             {
3155               set = single_set (sinsn);
3156               if (set == 0)
3157                 continue;
3158
3159               if (SET_DEST (set) == regno_reg_rtx [regnoi])
3160                 set_unique_reg_note (sinsn, REG_EQUIV, stacki);
3161               else if (SET_DEST (set) == regno_reg_rtx [regnor])
3162                 set_unique_reg_note (sinsn, REG_EQUIV, stackr);
3163             }
3164         }
3165       else if ((set = single_set (linsn)) != 0
3166                && SET_DEST (set) == parmreg)
3167         set_unique_reg_note (linsn, REG_EQUIV, equiv_stack_parm);
3168     }
3169
3170   /* For pointer data type, suggest pointer register.  */
3171   if (POINTER_TYPE_P (TREE_TYPE (parm)))
3172     mark_reg_pointer (parmreg,
3173                       TYPE_ALIGN (TREE_TYPE (TREE_TYPE (parm))));
3174 }
3175
3176 /* A subroutine of assign_parms.  Allocate stack space to hold the current
3177    parameter.  Get it there.  Perform all ABI specified conversions.  */
3178
3179 static void
3180 assign_parm_setup_stack (struct assign_parm_data_all *all, tree parm,
3181                          struct assign_parm_data_one *data)
3182 {
3183   /* Value must be stored in the stack slot STACK_PARM during function
3184      execution.  */
3185   bool to_conversion = false;
3186
3187   assign_parm_remove_parallels (data);
3188
3189   if (data->promoted_mode != data->nominal_mode)
3190     {
3191       /* Conversion is required.  */
3192       rtx tempreg = gen_reg_rtx (GET_MODE (data->entry_parm));
3193
3194       emit_move_insn (tempreg, validize_mem (data->entry_parm));
3195
3196       push_to_sequence2 (all->first_conversion_insn, all->last_conversion_insn);
3197       to_conversion = true;
3198
3199       data->entry_parm = convert_to_mode (data->nominal_mode, tempreg,
3200                                           TYPE_UNSIGNED (TREE_TYPE (parm)));
3201
3202       if (data->stack_parm)
3203         {
3204           int offset = subreg_lowpart_offset (data->nominal_mode,
3205                                               GET_MODE (data->stack_parm));
3206           /* ??? This may need a big-endian conversion on sparc64.  */
3207           data->stack_parm
3208             = adjust_address (data->stack_parm, data->nominal_mode, 0);
3209           if (offset && MEM_OFFSET (data->stack_parm))
3210             set_mem_offset (data->stack_parm,
3211                             plus_constant (MEM_OFFSET (data->stack_parm),
3212                                            offset));
3213         }
3214     }
3215
3216   if (data->entry_parm != data->stack_parm)
3217     {
3218       rtx src, dest;
3219
3220       if (data->stack_parm == 0)
3221         {
3222           int align = STACK_SLOT_ALIGNMENT (data->passed_type,
3223                                             GET_MODE (data->entry_parm),
3224                                             TYPE_ALIGN (data->passed_type));
3225           data->stack_parm
3226             = assign_stack_local (GET_MODE (data->entry_parm),
3227                                   GET_MODE_SIZE (GET_MODE (data->entry_parm)),
3228                                   align);
3229           set_mem_attributes (data->stack_parm, parm, 1);
3230         }
3231
3232       dest = validize_mem (data->stack_parm);
3233       src = validize_mem (data->entry_parm);
3234
3235       if (MEM_P (src))
3236         {
3237           /* Use a block move to handle potentially misaligned entry_parm.  */
3238           if (!to_conversion)
3239             push_to_sequence2 (all->first_conversion_insn,
3240                                all->last_conversion_insn);
3241           to_conversion = true;
3242
3243           emit_block_move (dest, src,
3244                            GEN_INT (int_size_in_bytes (data->passed_type)),
3245                            BLOCK_OP_NORMAL);
3246         }
3247       else
3248         emit_move_insn (dest, src);
3249     }
3250
3251   if (to_conversion)
3252     {
3253       all->first_conversion_insn = get_insns ();
3254       all->last_conversion_insn = get_last_insn ();
3255       end_sequence ();
3256     }
3257
3258   SET_DECL_RTL (parm, data->stack_parm);
3259 }
3260
3261 /* A subroutine of assign_parms.  If the ABI splits complex arguments, then
3262    undo the frobbing that we did in assign_parms_augmented_arg_list.  */
3263
3264 static void
3265 assign_parms_unsplit_complex (struct assign_parm_data_all *all,
3266                               VEC(tree, heap) *fnargs)
3267 {
3268   tree parm;
3269   tree orig_fnargs = all->orig_fnargs;
3270   unsigned i = 0;
3271
3272   for (parm = orig_fnargs; parm; parm = TREE_CHAIN (parm), ++i)
3273     {
3274       if (TREE_CODE (TREE_TYPE (parm)) == COMPLEX_TYPE
3275           && targetm.calls.split_complex_arg (TREE_TYPE (parm)))
3276         {
3277           rtx tmp, real, imag;
3278           enum machine_mode inner = GET_MODE_INNER (DECL_MODE (parm));
3279
3280           real = DECL_RTL (VEC_index (tree, fnargs, i));
3281           imag = DECL_RTL (VEC_index (tree, fnargs, i + 1));
3282           if (inner != GET_MODE (real))
3283             {
3284               real = gen_lowpart_SUBREG (inner, real);
3285               imag = gen_lowpart_SUBREG (inner, imag);
3286             }
3287
3288           if (TREE_ADDRESSABLE (parm))
3289             {
3290               rtx rmem, imem;
3291               HOST_WIDE_INT size = int_size_in_bytes (TREE_TYPE (parm));
3292               int align = STACK_SLOT_ALIGNMENT (TREE_TYPE (parm),
3293                                                 DECL_MODE (parm),
3294                                                 TYPE_ALIGN (TREE_TYPE (parm)));
3295
3296               /* split_complex_arg put the real and imag parts in
3297                  pseudos.  Move them to memory.  */
3298               tmp = assign_stack_local (DECL_MODE (parm), size, align);
3299               set_mem_attributes (tmp, parm, 1);
3300               rmem = adjust_address_nv (tmp, inner, 0);
3301               imem = adjust_address_nv (tmp, inner, GET_MODE_SIZE (inner));
3302               push_to_sequence2 (all->first_conversion_insn,
3303                                  all->last_conversion_insn);
3304               emit_move_insn (rmem, real);
3305               emit_move_insn (imem, imag);
3306               all->first_conversion_insn = get_insns ();
3307               all->last_conversion_insn = get_last_insn ();
3308               end_sequence ();
3309             }
3310           else
3311             tmp = gen_rtx_CONCAT (DECL_MODE (parm), real, imag);
3312           SET_DECL_RTL (parm, tmp);
3313
3314           real = DECL_INCOMING_RTL (VEC_index (tree, fnargs, i));
3315           imag = DECL_INCOMING_RTL (VEC_index (tree, fnargs, i + 1));
3316           if (inner != GET_MODE (real))
3317             {
3318               real = gen_lowpart_SUBREG (inner, real);
3319               imag = gen_lowpart_SUBREG (inner, imag);
3320             }
3321           tmp = gen_rtx_CONCAT (DECL_MODE (parm), real, imag);
3322           set_decl_incoming_rtl (parm, tmp, false);
3323           i++;
3324         }
3325     }
3326 }
3327
3328 /* Assign RTL expressions to the function's parameters.  This may involve
3329    copying them into registers and using those registers as the DECL_RTL.  */
3330
3331 static void
3332 assign_parms (tree fndecl)
3333 {
3334   struct assign_parm_data_all all;
3335   tree parm;
3336   VEC(tree, heap) *fnargs;
3337   unsigned i;
3338
3339   crtl->args.internal_arg_pointer
3340     = targetm.calls.internal_arg_pointer ();
3341
3342   assign_parms_initialize_all (&all);
3343   fnargs = assign_parms_augmented_arg_list (&all);
3344
3345   FOR_EACH_VEC_ELT (tree, fnargs, i, parm)
3346     {
3347       struct assign_parm_data_one data;
3348
3349       /* Extract the type of PARM; adjust it according to ABI.  */
3350       assign_parm_find_data_types (&all, parm, &data);
3351
3352       /* Early out for errors and void parameters.  */
3353       if (data.passed_mode == VOIDmode)
3354         {
3355           SET_DECL_RTL (parm, const0_rtx);
3356           DECL_INCOMING_RTL (parm) = DECL_RTL (parm);
3357           continue;
3358         }
3359
3360       /* Estimate stack alignment from parameter alignment.  */
3361       if (SUPPORTS_STACK_ALIGNMENT)
3362         {
3363           unsigned int align
3364             = targetm.calls.function_arg_boundary (data.promoted_mode,
3365                                                    data.passed_type);
3366           align = MINIMUM_ALIGNMENT (data.passed_type, data.promoted_mode,
3367                                      align);
3368           if (TYPE_ALIGN (data.nominal_type) > align)
3369             align = MINIMUM_ALIGNMENT (data.nominal_type,
3370                                        TYPE_MODE (data.nominal_type),
3371                                        TYPE_ALIGN (data.nominal_type));
3372           if (crtl->stack_alignment_estimated < align)
3373             {
3374               gcc_assert (!crtl->stack_realign_processed);
3375               crtl->stack_alignment_estimated = align;
3376             }
3377         }
3378
3379       if (cfun->stdarg && !DECL_CHAIN (parm))
3380         assign_parms_setup_varargs (&all, &data, false);
3381
3382       /* Find out where the parameter arrives in this function.  */
3383       assign_parm_find_entry_rtl (&all, &data);
3384
3385       /* Find out where stack space for this parameter might be.  */
3386       if (assign_parm_is_stack_parm (&all, &data))
3387         {
3388           assign_parm_find_stack_rtl (parm, &data);
3389           assign_parm_adjust_entry_rtl (&data);
3390         }
3391
3392       /* Record permanently how this parm was passed.  */
3393       if (data.passed_pointer)
3394         {
3395           rtx incoming_rtl
3396             = gen_rtx_MEM (TYPE_MODE (TREE_TYPE (data.passed_type)),
3397                            data.entry_parm);
3398           set_decl_incoming_rtl (parm, incoming_rtl, true);
3399         }
3400       else
3401         set_decl_incoming_rtl (parm, data.entry_parm, false);
3402
3403       /* Update info on where next arg arrives in registers.  */
3404       targetm.calls.function_arg_advance (&all.args_so_far, data.promoted_mode,
3405                                           data.passed_type, data.named_arg);
3406
3407       assign_parm_adjust_stack_rtl (&data);
3408
3409       if (assign_parm_setup_block_p (&data))
3410         assign_parm_setup_block (&all, parm, &data);
3411       else if (data.passed_pointer || use_register_for_decl (parm))
3412         assign_parm_setup_reg (&all, parm, &data);
3413       else
3414         assign_parm_setup_stack (&all, parm, &data);
3415     }
3416
3417   if (targetm.calls.split_complex_arg)
3418     assign_parms_unsplit_complex (&all, fnargs);
3419
3420   VEC_free (tree, heap, fnargs);
3421
3422   /* Output all parameter conversion instructions (possibly including calls)
3423      now that all parameters have been copied out of hard registers.  */
3424   emit_insn (all.first_conversion_insn);
3425
3426   /* Estimate reload stack alignment from scalar return mode.  */
3427   if (SUPPORTS_STACK_ALIGNMENT)
3428     {
3429       if (DECL_RESULT (fndecl))
3430         {
3431           tree type = TREE_TYPE (DECL_RESULT (fndecl));
3432           enum machine_mode mode = TYPE_MODE (type);
3433
3434           if (mode != BLKmode
3435               && mode != VOIDmode
3436               && !AGGREGATE_TYPE_P (type))
3437             {
3438               unsigned int align = GET_MODE_ALIGNMENT (mode);
3439               if (crtl->stack_alignment_estimated < align)
3440                 {
3441                   gcc_assert (!crtl->stack_realign_processed);
3442                   crtl->stack_alignment_estimated = align;
3443                 }
3444             }
3445         }
3446     }
3447
3448   /* If we are receiving a struct value address as the first argument, set up
3449      the RTL for the function result. As this might require code to convert
3450      the transmitted address to Pmode, we do this here to ensure that possible
3451      preliminary conversions of the address have been emitted already.  */
3452   if (all.function_result_decl)
3453     {
3454       tree result = DECL_RESULT (current_function_decl);
3455       rtx addr = DECL_RTL (all.function_result_decl);
3456       rtx x;
3457
3458       if (DECL_BY_REFERENCE (result))
3459         {
3460           SET_DECL_VALUE_EXPR (result, all.function_result_decl);
3461           x = addr;
3462         }
3463       else
3464         {
3465           SET_DECL_VALUE_EXPR (result,
3466                                build1 (INDIRECT_REF, TREE_TYPE (result),
3467                                        all.function_result_decl));
3468           addr = convert_memory_address (Pmode, addr);
3469           x = gen_rtx_MEM (DECL_MODE (result), addr);
3470           set_mem_attributes (x, result, 1);
3471         }
3472
3473       DECL_HAS_VALUE_EXPR_P (result) = 1;
3474
3475       SET_DECL_RTL (result, x);
3476     }
3477
3478   /* We have aligned all the args, so add space for the pretend args.  */
3479   crtl->args.pretend_args_size = all.pretend_args_size;
3480   all.stack_args_size.constant += all.extra_pretend_bytes;
3481   crtl->args.size = all.stack_args_size.constant;
3482
3483   /* Adjust function incoming argument size for alignment and
3484      minimum length.  */
3485
3486 #ifdef REG_PARM_STACK_SPACE
3487   crtl->args.size = MAX (crtl->args.size,
3488                                     REG_PARM_STACK_SPACE (fndecl));
3489 #endif
3490
3491   crtl->args.size = CEIL_ROUND (crtl->args.size,
3492                                            PARM_BOUNDARY / BITS_PER_UNIT);
3493
3494 #ifdef ARGS_GROW_DOWNWARD
3495   crtl->args.arg_offset_rtx
3496     = (all.stack_args_size.var == 0 ? GEN_INT (-all.stack_args_size.constant)
3497        : expand_expr (size_diffop (all.stack_args_size.var,
3498                                    size_int (-all.stack_args_size.constant)),
3499                       NULL_RTX, VOIDmode, EXPAND_NORMAL));
3500 #else
3501   crtl->args.arg_offset_rtx = ARGS_SIZE_RTX (all.stack_args_size);
3502 #endif
3503
3504   /* See how many bytes, if any, of its args a function should try to pop
3505      on return.  */
3506
3507   crtl->args.pops_args = targetm.calls.return_pops_args (fndecl,
3508                                                          TREE_TYPE (fndecl),
3509                                                          crtl->args.size);
3510
3511   /* For stdarg.h function, save info about
3512      regs and stack space used by the named args.  */
3513
3514   crtl->args.info = all.args_so_far;
3515
3516   /* Set the rtx used for the function return value.  Put this in its
3517      own variable so any optimizers that need this information don't have
3518      to include tree.h.  Do this here so it gets done when an inlined
3519      function gets output.  */
3520
3521   crtl->return_rtx
3522     = (DECL_RTL_SET_P (DECL_RESULT (fndecl))
3523        ? DECL_RTL (DECL_RESULT (fndecl)) : NULL_RTX);
3524
3525   /* If scalar return value was computed in a pseudo-reg, or was a named
3526      return value that got dumped to the stack, copy that to the hard
3527      return register.  */
3528   if (DECL_RTL_SET_P (DECL_RESULT (fndecl)))
3529     {
3530       tree decl_result = DECL_RESULT (fndecl);
3531       rtx decl_rtl = DECL_RTL (decl_result);
3532
3533       if (REG_P (decl_rtl)
3534           ? REGNO (decl_rtl) >= FIRST_PSEUDO_REGISTER
3535           : DECL_REGISTER (decl_result))
3536         {
3537           rtx real_decl_rtl;
3538
3539           real_decl_rtl = targetm.calls.function_value (TREE_TYPE (decl_result),
3540                                                         fndecl, true);
3541           REG_FUNCTION_VALUE_P (real_decl_rtl) = 1;
3542           /* The delay slot scheduler assumes that crtl->return_rtx
3543              holds the hard register containing the return value, not a
3544              temporary pseudo.  */
3545           crtl->return_rtx = real_decl_rtl;
3546         }
3547     }
3548 }
3549
3550 /* A subroutine of gimplify_parameters, invoked via walk_tree.
3551    For all seen types, gimplify their sizes.  */
3552
3553 static tree
3554 gimplify_parm_type (tree *tp, int *walk_subtrees, void *data)
3555 {
3556   tree t = *tp;
3557
3558   *walk_subtrees = 0;
3559   if (TYPE_P (t))
3560     {
3561       if (POINTER_TYPE_P (t))
3562         *walk_subtrees = 1;
3563       else if (TYPE_SIZE (t) && !TREE_CONSTANT (TYPE_SIZE (t))
3564                && !TYPE_SIZES_GIMPLIFIED (t))
3565         {
3566           gimplify_type_sizes (t, (gimple_seq *) data);
3567           *walk_subtrees = 1;
3568         }
3569     }
3570
3571   return NULL;
3572 }
3573
3574 /* Gimplify the parameter list for current_function_decl.  This involves
3575    evaluating SAVE_EXPRs of variable sized parameters and generating code
3576    to implement callee-copies reference parameters.  Returns a sequence of
3577    statements to add to the beginning of the function.  */
3578
3579 gimple_seq
3580 gimplify_parameters (void)
3581 {
3582   struct assign_parm_data_all all;
3583   tree parm;
3584   gimple_seq stmts = NULL;
3585   VEC(tree, heap) *fnargs;
3586   unsigned i;
3587
3588   assign_parms_initialize_all (&all);
3589   fnargs = assign_parms_augmented_arg_list (&all);
3590
3591   FOR_EACH_VEC_ELT (tree, fnargs, i, parm)
3592     {
3593       struct assign_parm_data_one data;
3594
3595       /* Extract the type of PARM; adjust it according to ABI.  */
3596       assign_parm_find_data_types (&all, parm, &data);
3597
3598       /* Early out for errors and void parameters.  */
3599       if (data.passed_mode == VOIDmode || DECL_SIZE (parm) == NULL)
3600         continue;
3601
3602       /* Update info on where next arg arrives in registers.  */
3603       targetm.calls.function_arg_advance (&all.args_so_far, data.promoted_mode,
3604                                           data.passed_type, data.named_arg);
3605
3606       /* ??? Once upon a time variable_size stuffed parameter list
3607          SAVE_EXPRs (amongst others) onto a pending sizes list.  This
3608          turned out to be less than manageable in the gimple world.
3609          Now we have to hunt them down ourselves.  */
3610       walk_tree_without_duplicates (&data.passed_type,
3611                                     gimplify_parm_type, &stmts);
3612
3613       if (TREE_CODE (DECL_SIZE_UNIT (parm)) != INTEGER_CST)
3614         {
3615           gimplify_one_sizepos (&DECL_SIZE (parm), &stmts);
3616           gimplify_one_sizepos (&DECL_SIZE_UNIT (parm), &stmts);
3617         }
3618
3619       if (data.passed_pointer)
3620         {
3621           tree type = TREE_TYPE (data.passed_type);
3622           if (reference_callee_copied (&all.args_so_far, TYPE_MODE (type),
3623                                        type, data.named_arg))
3624             {
3625               tree local, t;
3626
3627               /* For constant-sized objects, this is trivial; for
3628                  variable-sized objects, we have to play games.  */
3629               if (TREE_CODE (DECL_SIZE_UNIT (parm)) == INTEGER_CST
3630                   && !(flag_stack_check == GENERIC_STACK_CHECK
3631                        && compare_tree_int (DECL_SIZE_UNIT (parm),
3632                                             STACK_CHECK_MAX_VAR_SIZE) > 0))
3633                 {
3634                   local = create_tmp_reg (type, get_name (parm));
3635                   DECL_IGNORED_P (local) = 0;
3636                   /* If PARM was addressable, move that flag over
3637                      to the local copy, as its address will be taken,
3638                      not the PARMs.  Keep the parms address taken
3639                      as we'll query that flag during gimplification.  */
3640                   if (TREE_ADDRESSABLE (parm))
3641                     TREE_ADDRESSABLE (local) = 1;
3642                 }
3643               else
3644                 {
3645                   tree ptr_type, addr;
3646
3647                   ptr_type = build_pointer_type (type);
3648                   addr = create_tmp_reg (ptr_type, get_name (parm));
3649                   DECL_IGNORED_P (addr) = 0;
3650                   local = build_fold_indirect_ref (addr);
3651
3652                   t = built_in_decls[BUILT_IN_ALLOCA];
3653                   t = build_call_expr (t, 1, DECL_SIZE_UNIT (parm));
3654                   /* The call has been built for a variable-sized object.  */
3655                   ALLOCA_FOR_VAR_P (t) = 1;
3656                   t = fold_convert (ptr_type, t);
3657                   t = build2 (MODIFY_EXPR, TREE_TYPE (addr), addr, t);
3658                   gimplify_and_add (t, &stmts);
3659                 }
3660
3661               gimplify_assign (local, parm, &stmts);
3662
3663               SET_DECL_VALUE_EXPR (parm, local);
3664               DECL_HAS_VALUE_EXPR_P (parm) = 1;
3665             }
3666         }
3667     }
3668
3669   VEC_free (tree, heap, fnargs);
3670
3671   return stmts;
3672 }
3673 \f
3674 /* Compute the size and offset from the start of the stacked arguments for a
3675    parm passed in mode PASSED_MODE and with type TYPE.
3676
3677    INITIAL_OFFSET_PTR points to the current offset into the stacked
3678    arguments.
3679
3680    The starting offset and size for this parm are returned in
3681    LOCATE->OFFSET and LOCATE->SIZE, respectively.  When IN_REGS is
3682    nonzero, the offset is that of stack slot, which is returned in
3683    LOCATE->SLOT_OFFSET.  LOCATE->ALIGNMENT_PAD is the amount of
3684    padding required from the initial offset ptr to the stack slot.
3685
3686    IN_REGS is nonzero if the argument will be passed in registers.  It will
3687    never be set if REG_PARM_STACK_SPACE is not defined.
3688
3689    FNDECL is the function in which the argument was defined.
3690
3691    There are two types of rounding that are done.  The first, controlled by
3692    TARGET_FUNCTION_ARG_BOUNDARY, forces the offset from the start of the
3693    argument list to be aligned to the specific boundary (in bits).  This
3694    rounding affects the initial and starting offsets, but not the argument
3695    size.
3696
3697    The second, controlled by FUNCTION_ARG_PADDING and PARM_BOUNDARY,
3698    optionally rounds the size of the parm to PARM_BOUNDARY.  The
3699    initial offset is not affected by this rounding, while the size always
3700    is and the starting offset may be.  */
3701
3702 /*  LOCATE->OFFSET will be negative for ARGS_GROW_DOWNWARD case;
3703     INITIAL_OFFSET_PTR is positive because locate_and_pad_parm's
3704     callers pass in the total size of args so far as
3705     INITIAL_OFFSET_PTR.  LOCATE->SIZE is always positive.  */
3706
3707 void
3708 locate_and_pad_parm (enum machine_mode passed_mode, tree type, int in_regs,
3709                      int partial, tree fndecl ATTRIBUTE_UNUSED,
3710                      struct args_size *initial_offset_ptr,
3711                      struct locate_and_pad_arg_data *locate)
3712 {
3713   tree sizetree;
3714   enum direction where_pad;
3715   unsigned int boundary;
3716   int reg_parm_stack_space = 0;
3717   int part_size_in_regs;
3718
3719 #ifdef REG_PARM_STACK_SPACE
3720   reg_parm_stack_space = REG_PARM_STACK_SPACE (fndecl);
3721
3722   /* If we have found a stack parm before we reach the end of the
3723      area reserved for registers, skip that area.  */
3724   if (! in_regs)
3725     {
3726       if (reg_parm_stack_space > 0)
3727         {
3728           if (initial_offset_ptr->var)
3729             {
3730               initial_offset_ptr->var
3731                 = size_binop (MAX_EXPR, ARGS_SIZE_TREE (*initial_offset_ptr),
3732                               ssize_int (reg_parm_stack_space));
3733               initial_offset_ptr->constant = 0;
3734             }
3735           else if (initial_offset_ptr->constant < reg_parm_stack_space)
3736             initial_offset_ptr->constant = reg_parm_stack_space;
3737         }
3738     }
3739 #endif /* REG_PARM_STACK_SPACE */
3740
3741   part_size_in_regs = (reg_parm_stack_space == 0 ? partial : 0);
3742
3743   sizetree
3744     = type ? size_in_bytes (type) : size_int (GET_MODE_SIZE (passed_mode));
3745   where_pad = FUNCTION_ARG_PADDING (passed_mode, type);
3746   boundary = targetm.calls.function_arg_boundary (passed_mode, type);
3747   locate->where_pad = where_pad;
3748
3749   /* Alignment can't exceed MAX_SUPPORTED_STACK_ALIGNMENT.  */
3750   if (boundary > MAX_SUPPORTED_STACK_ALIGNMENT)
3751     boundary = MAX_SUPPORTED_STACK_ALIGNMENT;
3752
3753   locate->boundary = boundary;
3754
3755   if (SUPPORTS_STACK_ALIGNMENT)
3756     {
3757       /* stack_alignment_estimated can't change after stack has been
3758          realigned.  */
3759       if (crtl->stack_alignment_estimated < boundary)
3760         {
3761           if (!crtl->stack_realign_processed)
3762             crtl->stack_alignment_estimated = boundary;
3763           else
3764             {
3765               /* If stack is realigned and stack alignment value
3766                  hasn't been finalized, it is OK not to increase
3767                  stack_alignment_estimated.  The bigger alignment
3768                  requirement is recorded in stack_alignment_needed
3769                  below.  */
3770               gcc_assert (!crtl->stack_realign_finalized
3771                           && crtl->stack_realign_needed);
3772             }
3773         }
3774     }
3775
3776   /* Remember if the outgoing parameter requires extra alignment on the
3777      calling function side.  */
3778   if (crtl->stack_alignment_needed < boundary)
3779     crtl->stack_alignment_needed = boundary;
3780   if (crtl->preferred_stack_boundary < boundary)
3781     crtl->preferred_stack_boundary = boundary;
3782
3783 #ifdef ARGS_GROW_DOWNWARD
3784   locate->slot_offset.constant = -initial_offset_ptr->constant;
3785   if (initial_offset_ptr->var)
3786     locate->slot_offset.var = size_binop (MINUS_EXPR, ssize_int (0),
3787                                           initial_offset_ptr->var);
3788
3789   {
3790     tree s2 = sizetree;
3791     if (where_pad != none
3792         && (!host_integerp (sizetree, 1)
3793             || (tree_low_cst (sizetree, 1) * BITS_PER_UNIT) % PARM_BOUNDARY))
3794       s2 = round_up (s2, PARM_BOUNDARY / BITS_PER_UNIT);
3795     SUB_PARM_SIZE (locate->slot_offset, s2);
3796   }
3797
3798   locate->slot_offset.constant += part_size_in_regs;
3799
3800   if (!in_regs
3801 #ifdef REG_PARM_STACK_SPACE
3802       || REG_PARM_STACK_SPACE (fndecl) > 0
3803 #endif
3804      )
3805     pad_to_arg_alignment (&locate->slot_offset, boundary,
3806                           &locate->alignment_pad);
3807
3808   locate->size.constant = (-initial_offset_ptr->constant
3809                            - locate->slot_offset.constant);
3810   if (initial_offset_ptr->var)
3811     locate->size.var = size_binop (MINUS_EXPR,
3812                                    size_binop (MINUS_EXPR,
3813                                                ssize_int (0),
3814                                                initial_offset_ptr->var),
3815                                    locate->slot_offset.var);
3816
3817   /* Pad_below needs the pre-rounded size to know how much to pad
3818      below.  */
3819   locate->offset = locate->slot_offset;
3820   if (where_pad == downward)
3821     pad_below (&locate->offset, passed_mode, sizetree);
3822
3823 #else /* !ARGS_GROW_DOWNWARD */
3824   if (!in_regs
3825 #ifdef REG_PARM_STACK_SPACE
3826       || REG_PARM_STACK_SPACE (fndecl) > 0
3827 #endif
3828       )
3829     pad_to_arg_alignment (initial_offset_ptr, boundary,
3830                           &locate->alignment_pad);
3831   locate->slot_offset = *initial_offset_ptr;
3832
3833 #ifdef PUSH_ROUNDING
3834   if (passed_mode != BLKmode)
3835     sizetree = size_int (PUSH_ROUNDING (TREE_INT_CST_LOW (sizetree)));
3836 #endif
3837
3838   /* Pad_below needs the pre-rounded size to know how much to pad below
3839      so this must be done before rounding up.  */
3840   locate->offset = locate->slot_offset;
3841   if (where_pad == downward)
3842     pad_below (&locate->offset, passed_mode, sizetree);
3843
3844   if (where_pad != none
3845       && (!host_integerp (sizetree, 1)
3846           || (tree_low_cst (sizetree, 1) * BITS_PER_UNIT) % PARM_BOUNDARY))
3847     sizetree = round_up (sizetree, PARM_BOUNDARY / BITS_PER_UNIT);
3848
3849   ADD_PARM_SIZE (locate->size, sizetree);
3850
3851   locate->size.constant -= part_size_in_regs;
3852 #endif /* ARGS_GROW_DOWNWARD */
3853
3854 #ifdef FUNCTION_ARG_OFFSET
3855   locate->offset.constant += FUNCTION_ARG_OFFSET (passed_mode, type);
3856 #endif
3857 }
3858
3859 /* Round the stack offset in *OFFSET_PTR up to a multiple of BOUNDARY.
3860    BOUNDARY is measured in bits, but must be a multiple of a storage unit.  */
3861
3862 static void
3863 pad_to_arg_alignment (struct args_size *offset_ptr, int boundary,
3864                       struct args_size *alignment_pad)
3865 {
3866   tree save_var = NULL_TREE;
3867   HOST_WIDE_INT save_constant = 0;
3868   int boundary_in_bytes = boundary / BITS_PER_UNIT;
3869   HOST_WIDE_INT sp_offset = STACK_POINTER_OFFSET;
3870
3871 #ifdef SPARC_STACK_BOUNDARY_HACK
3872   /* ??? The SPARC port may claim a STACK_BOUNDARY higher than
3873      the real alignment of %sp.  However, when it does this, the
3874      alignment of %sp+STACK_POINTER_OFFSET is STACK_BOUNDARY.  */
3875   if (SPARC_STACK_BOUNDARY_HACK)
3876     sp_offset = 0;
3877 #endif
3878
3879   if (boundary > PARM_BOUNDARY)
3880     {
3881       save_var = offset_ptr->var;
3882       save_constant = offset_ptr->constant;
3883     }
3884
3885   alignment_pad->var = NULL_TREE;
3886   alignment_pad->constant = 0;
3887
3888   if (boundary > BITS_PER_UNIT)
3889     {
3890       if (offset_ptr->var)
3891         {
3892           tree sp_offset_tree = ssize_int (sp_offset);
3893           tree offset = size_binop (PLUS_EXPR,
3894                                     ARGS_SIZE_TREE (*offset_ptr),
3895                                     sp_offset_tree);
3896 #ifdef ARGS_GROW_DOWNWARD
3897           tree rounded = round_down (offset, boundary / BITS_PER_UNIT);
3898 #else
3899           tree rounded = round_up   (offset, boundary / BITS_PER_UNIT);
3900 #endif
3901
3902           offset_ptr->var = size_binop (MINUS_EXPR, rounded, sp_offset_tree);
3903           /* ARGS_SIZE_TREE includes constant term.  */
3904           offset_ptr->constant = 0;
3905           if (boundary > PARM_BOUNDARY)
3906             alignment_pad->var = size_binop (MINUS_EXPR, offset_ptr->var,
3907                                              save_var);
3908         }
3909       else
3910         {
3911           offset_ptr->constant = -sp_offset +
3912 #ifdef ARGS_GROW_DOWNWARD
3913             FLOOR_ROUND (offset_ptr->constant + sp_offset, boundary_in_bytes);
3914 #else
3915             CEIL_ROUND (offset_ptr->constant + sp_offset, boundary_in_bytes);
3916 #endif
3917             if (boundary > PARM_BOUNDARY)
3918               alignment_pad->constant = offset_ptr->constant - save_constant;
3919         }
3920     }
3921 }
3922
3923 static void
3924 pad_below (struct args_size *offset_ptr, enum machine_mode passed_mode, tree sizetree)
3925 {
3926   if (passed_mode != BLKmode)
3927     {
3928       if (GET_MODE_BITSIZE (passed_mode) % PARM_BOUNDARY)
3929         offset_ptr->constant
3930           += (((GET_MODE_BITSIZE (passed_mode) + PARM_BOUNDARY - 1)
3931                / PARM_BOUNDARY * PARM_BOUNDARY / BITS_PER_UNIT)
3932               - GET_MODE_SIZE (passed_mode));
3933     }
3934   else
3935     {
3936       if (TREE_CODE (sizetree) != INTEGER_CST
3937           || (TREE_INT_CST_LOW (sizetree) * BITS_PER_UNIT) % PARM_BOUNDARY)
3938         {
3939           /* Round the size up to multiple of PARM_BOUNDARY bits.  */
3940           tree s2 = round_up (sizetree, PARM_BOUNDARY / BITS_PER_UNIT);
3941           /* Add it in.  */
3942           ADD_PARM_SIZE (*offset_ptr, s2);
3943           SUB_PARM_SIZE (*offset_ptr, sizetree);
3944         }
3945     }
3946 }
3947 \f
3948
3949 /* True if register REGNO was alive at a place where `setjmp' was
3950    called and was set more than once or is an argument.  Such regs may
3951    be clobbered by `longjmp'.  */
3952
3953 static bool
3954 regno_clobbered_at_setjmp (bitmap setjmp_crosses, int regno)
3955 {
3956   /* There appear to be cases where some local vars never reach the
3957      backend but have bogus regnos.  */
3958   if (regno >= max_reg_num ())
3959     return false;
3960
3961   return ((REG_N_SETS (regno) > 1
3962            || REGNO_REG_SET_P (df_get_live_out (ENTRY_BLOCK_PTR), regno))
3963           && REGNO_REG_SET_P (setjmp_crosses, regno));
3964 }
3965
3966 /* Walk the tree of blocks describing the binding levels within a
3967    function and warn about variables the might be killed by setjmp or
3968    vfork.  This is done after calling flow_analysis before register
3969    allocation since that will clobber the pseudo-regs to hard
3970    regs.  */
3971
3972 static void
3973 setjmp_vars_warning (bitmap setjmp_crosses, tree block)
3974 {
3975   tree decl, sub;
3976
3977   for (decl = BLOCK_VARS (block); decl; decl = DECL_CHAIN (decl))
3978     {
3979       if (TREE_CODE (decl) == VAR_DECL
3980           && DECL_RTL_SET_P (decl)
3981           && REG_P (DECL_RTL (decl))
3982           && regno_clobbered_at_setjmp (setjmp_crosses, REGNO (DECL_RTL (decl))))
3983         warning (OPT_Wclobbered, "variable %q+D might be clobbered by"
3984                  " %<longjmp%> or %<vfork%>", decl);
3985     }
3986
3987   for (sub = BLOCK_SUBBLOCKS (block); sub; sub = BLOCK_CHAIN (sub))
3988     setjmp_vars_warning (setjmp_crosses, sub);
3989 }
3990
3991 /* Do the appropriate part of setjmp_vars_warning
3992    but for arguments instead of local variables.  */
3993
3994 static void
3995 setjmp_args_warning (bitmap setjmp_crosses)
3996 {
3997   tree decl;
3998   for (decl = DECL_ARGUMENTS (current_function_decl);
3999        decl; decl = DECL_CHAIN (decl))
4000     if (DECL_RTL (decl) != 0
4001         && REG_P (DECL_RTL (decl))
4002         && regno_clobbered_at_setjmp (setjmp_crosses, REGNO (DECL_RTL (decl))))
4003       warning (OPT_Wclobbered,
4004                "argument %q+D might be clobbered by %<longjmp%> or %<vfork%>",
4005                decl);
4006 }
4007
4008 /* Generate warning messages for variables live across setjmp.  */
4009
4010 void
4011 generate_setjmp_warnings (void)
4012 {
4013   bitmap setjmp_crosses = regstat_get_setjmp_crosses ();
4014
4015   if (n_basic_blocks == NUM_FIXED_BLOCKS
4016       || bitmap_empty_p (setjmp_crosses))
4017     return;
4018
4019   setjmp_vars_warning (setjmp_crosses, DECL_INITIAL (current_function_decl));
4020   setjmp_args_warning (setjmp_crosses);
4021 }
4022
4023 \f
4024 /* Reverse the order of elements in the fragment chain T of blocks,
4025    and return the new head of the chain (old last element).  */
4026
4027 static tree
4028 block_fragments_nreverse (tree t)
4029 {
4030   tree prev = 0, block, next;
4031   for (block = t; block; block = next)
4032     {
4033       next = BLOCK_FRAGMENT_CHAIN (block);
4034       BLOCK_FRAGMENT_CHAIN (block) = prev;
4035       prev = block;
4036     }
4037   return prev;
4038 }
4039
4040 /* Reverse the order of elements in the chain T of blocks,
4041    and return the new head of the chain (old last element).
4042    Also do the same on subblocks and reverse the order of elements
4043    in BLOCK_FRAGMENT_CHAIN as well.  */
4044
4045 static tree
4046 blocks_nreverse_all (tree t)
4047 {
4048   tree prev = 0, block, next;
4049   for (block = t; block; block = next)
4050     {
4051       next = BLOCK_CHAIN (block);
4052       BLOCK_CHAIN (block) = prev;
4053       BLOCK_SUBBLOCKS (block) = blocks_nreverse_all (BLOCK_SUBBLOCKS (block));
4054       if (BLOCK_FRAGMENT_CHAIN (block)
4055           && BLOCK_FRAGMENT_ORIGIN (block) == NULL_TREE)
4056         BLOCK_FRAGMENT_CHAIN (block)
4057           = block_fragments_nreverse (BLOCK_FRAGMENT_CHAIN (block));
4058       prev = block;
4059     }
4060   return prev;
4061 }
4062
4063
4064 /* Identify BLOCKs referenced by more than one NOTE_INSN_BLOCK_{BEG,END},
4065    and create duplicate blocks.  */
4066 /* ??? Need an option to either create block fragments or to create
4067    abstract origin duplicates of a source block.  It really depends
4068    on what optimization has been performed.  */
4069
4070 void
4071 reorder_blocks (void)
4072 {
4073   tree block = DECL_INITIAL (current_function_decl);
4074   VEC(tree,heap) *block_stack;
4075
4076   if (block == NULL_TREE)
4077     return;
4078
4079   block_stack = VEC_alloc (tree, heap, 10);
4080
4081   /* Reset the TREE_ASM_WRITTEN bit for all blocks.  */
4082   clear_block_marks (block);
4083
4084   /* Prune the old trees away, so that they don't get in the way.  */
4085   BLOCK_SUBBLOCKS (block) = NULL_TREE;
4086   BLOCK_CHAIN (block) = NULL_TREE;
4087
4088   /* Recreate the block tree from the note nesting.  */
4089   reorder_blocks_1 (get_insns (), block, &block_stack);
4090   BLOCK_SUBBLOCKS (block) = blocks_nreverse_all (BLOCK_SUBBLOCKS (block));
4091
4092   VEC_free (tree, heap, block_stack);
4093 }
4094
4095 /* Helper function for reorder_blocks.  Reset TREE_ASM_WRITTEN.  */
4096
4097 void
4098 clear_block_marks (tree block)
4099 {
4100   while (block)
4101     {
4102       TREE_ASM_WRITTEN (block) = 0;
4103       clear_block_marks (BLOCK_SUBBLOCKS (block));
4104       block = BLOCK_CHAIN (block);
4105     }
4106 }
4107
4108 static void
4109 reorder_blocks_1 (rtx insns, tree current_block, VEC(tree,heap) **p_block_stack)
4110 {
4111   rtx insn;
4112
4113   for (insn = insns; insn; insn = NEXT_INSN (insn))
4114     {
4115       if (NOTE_P (insn))
4116         {
4117           if (NOTE_KIND (insn) == NOTE_INSN_BLOCK_BEG)
4118             {
4119               tree block = NOTE_BLOCK (insn);
4120               tree origin;
4121
4122               gcc_assert (BLOCK_FRAGMENT_ORIGIN (block) == NULL_TREE);
4123               origin = block;
4124
4125               /* If we have seen this block before, that means it now
4126                  spans multiple address regions.  Create a new fragment.  */
4127               if (TREE_ASM_WRITTEN (block))
4128                 {
4129                   tree new_block = copy_node (block);
4130
4131                   BLOCK_FRAGMENT_ORIGIN (new_block) = origin;
4132                   BLOCK_FRAGMENT_CHAIN (new_block)
4133                     = BLOCK_FRAGMENT_CHAIN (origin);
4134                   BLOCK_FRAGMENT_CHAIN (origin) = new_block;
4135
4136                   NOTE_BLOCK (insn) = new_block;
4137                   block = new_block;
4138                 }
4139
4140               BLOCK_SUBBLOCKS (block) = 0;
4141               TREE_ASM_WRITTEN (block) = 1;
4142               /* When there's only one block for the entire function,
4143                  current_block == block and we mustn't do this, it
4144                  will cause infinite recursion.  */
4145               if (block != current_block)
4146                 {
4147                   if (block != origin)
4148                     gcc_assert (BLOCK_SUPERCONTEXT (origin) == current_block);
4149
4150                   BLOCK_SUPERCONTEXT (block) = current_block;
4151                   BLOCK_CHAIN (block) = BLOCK_SUBBLOCKS (current_block);
4152                   BLOCK_SUBBLOCKS (current_block) = block;
4153                   current_block = origin;
4154                 }
4155               VEC_safe_push (tree, heap, *p_block_stack, block);
4156             }
4157           else if (NOTE_KIND (insn) == NOTE_INSN_BLOCK_END)
4158             {
4159               NOTE_BLOCK (insn) = VEC_pop (tree, *p_block_stack);
4160               current_block = BLOCK_SUPERCONTEXT (current_block);
4161             }
4162         }
4163     }
4164 }
4165
4166 /* Reverse the order of elements in the chain T of blocks,
4167    and return the new head of the chain (old last element).  */
4168
4169 tree
4170 blocks_nreverse (tree t)
4171 {
4172   tree prev = 0, block, next;
4173   for (block = t; block; block = next)
4174     {
4175       next = BLOCK_CHAIN (block);
4176       BLOCK_CHAIN (block) = prev;
4177       prev = block;
4178     }
4179   return prev;
4180 }
4181
4182 /* Count the subblocks of the list starting with BLOCK.  If VECTOR is
4183    non-NULL, list them all into VECTOR, in a depth-first preorder
4184    traversal of the block tree.  Also clear TREE_ASM_WRITTEN in all
4185    blocks.  */
4186
4187 static int
4188 all_blocks (tree block, tree *vector)
4189 {
4190   int n_blocks = 0;
4191
4192   while (block)
4193     {
4194       TREE_ASM_WRITTEN (block) = 0;
4195
4196       /* Record this block.  */
4197       if (vector)
4198         vector[n_blocks] = block;
4199
4200       ++n_blocks;
4201
4202       /* Record the subblocks, and their subblocks...  */
4203       n_blocks += all_blocks (BLOCK_SUBBLOCKS (block),
4204                               vector ? vector + n_blocks : 0);
4205       block = BLOCK_CHAIN (block);
4206     }
4207
4208   return n_blocks;
4209 }
4210
4211 /* Return a vector containing all the blocks rooted at BLOCK.  The
4212    number of elements in the vector is stored in N_BLOCKS_P.  The
4213    vector is dynamically allocated; it is the caller's responsibility
4214    to call `free' on the pointer returned.  */
4215
4216 static tree *
4217 get_block_vector (tree block, int *n_blocks_p)
4218 {
4219   tree *block_vector;
4220
4221   *n_blocks_p = all_blocks (block, NULL);
4222   block_vector = XNEWVEC (tree, *n_blocks_p);
4223   all_blocks (block, block_vector);
4224
4225   return block_vector;
4226 }
4227
4228 static GTY(()) int next_block_index = 2;
4229
4230 /* Set BLOCK_NUMBER for all the blocks in FN.  */
4231
4232 void
4233 number_blocks (tree fn)
4234 {
4235   int i;
4236   int n_blocks;
4237   tree *block_vector;
4238
4239   /* For SDB and XCOFF debugging output, we start numbering the blocks
4240      from 1 within each function, rather than keeping a running
4241      count.  */
4242 #if defined (SDB_DEBUGGING_INFO) || defined (XCOFF_DEBUGGING_INFO)
4243   if (write_symbols == SDB_DEBUG || write_symbols == XCOFF_DEBUG)
4244     next_block_index = 1;
4245 #endif
4246
4247   block_vector = get_block_vector (DECL_INITIAL (fn), &n_blocks);
4248
4249   /* The top-level BLOCK isn't numbered at all.  */
4250   for (i = 1; i < n_blocks; ++i)
4251     /* We number the blocks from two.  */
4252     BLOCK_NUMBER (block_vector[i]) = next_block_index++;
4253
4254   free (block_vector);
4255
4256   return;
4257 }
4258
4259 /* If VAR is present in a subblock of BLOCK, return the subblock.  */
4260
4261 DEBUG_FUNCTION tree
4262 debug_find_var_in_block_tree (tree var, tree block)
4263 {
4264   tree t;
4265
4266   for (t = BLOCK_VARS (block); t; t = TREE_CHAIN (t))
4267     if (t == var)
4268       return block;
4269
4270   for (t = BLOCK_SUBBLOCKS (block); t; t = TREE_CHAIN (t))
4271     {
4272       tree ret = debug_find_var_in_block_tree (var, t);
4273       if (ret)
4274         return ret;
4275     }
4276
4277   return NULL_TREE;
4278 }
4279 \f
4280 /* Keep track of whether we're in a dummy function context.  If we are,
4281    we don't want to invoke the set_current_function hook, because we'll
4282    get into trouble if the hook calls target_reinit () recursively or
4283    when the initial initialization is not yet complete.  */
4284
4285 static bool in_dummy_function;
4286
4287 /* Invoke the target hook when setting cfun.  Update the optimization options
4288    if the function uses different options than the default.  */
4289
4290 static void
4291 invoke_set_current_function_hook (tree fndecl)
4292 {
4293   if (!in_dummy_function)
4294     {
4295       tree opts = ((fndecl)
4296                    ? DECL_FUNCTION_SPECIFIC_OPTIMIZATION (fndecl)
4297                    : optimization_default_node);
4298
4299       if (!opts)
4300         opts = optimization_default_node;
4301
4302       /* Change optimization options if needed.  */
4303       if (optimization_current_node != opts)
4304         {
4305           optimization_current_node = opts;
4306           cl_optimization_restore (&global_options, TREE_OPTIMIZATION (opts));
4307         }
4308
4309       targetm.set_current_function (fndecl);
4310     }
4311 }
4312
4313 /* cfun should never be set directly; use this function.  */
4314
4315 void
4316 set_cfun (struct function *new_cfun)
4317 {
4318   if (cfun != new_cfun)
4319     {
4320       cfun = new_cfun;
4321       invoke_set_current_function_hook (new_cfun ? new_cfun->decl : NULL_TREE);
4322     }
4323 }
4324
4325 /* Initialized with NOGC, making this poisonous to the garbage collector.  */
4326
4327 static VEC(function_p,heap) *cfun_stack;
4328
4329 /* Push the current cfun onto the stack, and set cfun to new_cfun.  */
4330
4331 void
4332 push_cfun (struct function *new_cfun)
4333 {
4334   VEC_safe_push (function_p, heap, cfun_stack, cfun);
4335   set_cfun (new_cfun);
4336 }
4337
4338 /* Pop cfun from the stack.  */
4339
4340 void
4341 pop_cfun (void)
4342 {
4343   struct function *new_cfun = VEC_pop (function_p, cfun_stack);
4344   set_cfun (new_cfun);
4345 }
4346
4347 /* Return value of funcdef and increase it.  */
4348 int
4349 get_next_funcdef_no (void)
4350 {
4351   return funcdef_no++;
4352 }
4353
4354 /* Allocate a function structure for FNDECL and set its contents
4355    to the defaults.  Set cfun to the newly-allocated object.
4356    Some of the helper functions invoked during initialization assume
4357    that cfun has already been set.  Therefore, assign the new object
4358    directly into cfun and invoke the back end hook explicitly at the
4359    very end, rather than initializing a temporary and calling set_cfun
4360    on it.
4361
4362    ABSTRACT_P is true if this is a function that will never be seen by
4363    the middle-end.  Such functions are front-end concepts (like C++
4364    function templates) that do not correspond directly to functions
4365    placed in object files.  */
4366
4367 void
4368 allocate_struct_function (tree fndecl, bool abstract_p)
4369 {
4370   tree result;
4371   tree fntype = fndecl ? TREE_TYPE (fndecl) : NULL_TREE;
4372
4373   cfun = ggc_alloc_cleared_function ();
4374
4375   init_eh_for_function ();
4376
4377   if (init_machine_status)
4378     cfun->machine = (*init_machine_status) ();
4379
4380 #ifdef OVERRIDE_ABI_FORMAT
4381   OVERRIDE_ABI_FORMAT (fndecl);
4382 #endif
4383
4384   invoke_set_current_function_hook (fndecl);
4385
4386   if (fndecl != NULL_TREE)
4387     {
4388       DECL_STRUCT_FUNCTION (fndecl) = cfun;
4389       cfun->decl = fndecl;
4390       current_function_funcdef_no = get_next_funcdef_no ();
4391
4392       result = DECL_RESULT (fndecl);
4393       if (!abstract_p && aggregate_value_p (result, fndecl))
4394         {
4395 #ifdef PCC_STATIC_STRUCT_RETURN
4396           cfun->returns_pcc_struct = 1;
4397 #endif
4398           cfun->returns_struct = 1;
4399         }
4400
4401       cfun->stdarg = stdarg_p (fntype);
4402
4403       /* Assume all registers in stdarg functions need to be saved.  */
4404       cfun->va_list_gpr_size = VA_LIST_MAX_GPR_SIZE;
4405       cfun->va_list_fpr_size = VA_LIST_MAX_FPR_SIZE;
4406
4407       /* ??? This could be set on a per-function basis by the front-end
4408          but is this worth the hassle?  */
4409       cfun->can_throw_non_call_exceptions = flag_non_call_exceptions;
4410     }
4411 }
4412
4413 /* This is like allocate_struct_function, but pushes a new cfun for FNDECL
4414    instead of just setting it.  */
4415
4416 void
4417 push_struct_function (tree fndecl)
4418 {
4419   VEC_safe_push (function_p, heap, cfun_stack, cfun);
4420   allocate_struct_function (fndecl, false);
4421 }
4422
4423 /* Reset crtl and other non-struct-function variables to defaults as
4424    appropriate for emitting rtl at the start of a function.  */
4425
4426 static void
4427 prepare_function_start (void)
4428 {
4429   gcc_assert (!crtl->emit.x_last_insn);
4430   init_temp_slots ();
4431   init_emit ();
4432   init_varasm_status ();
4433   init_expr ();
4434   default_rtl_profile ();
4435
4436   if (flag_stack_usage)
4437     {
4438       cfun->su = ggc_alloc_cleared_stack_usage ();
4439       cfun->su->static_stack_size = -1;
4440     }
4441
4442   cse_not_expected = ! optimize;
4443
4444   /* Caller save not needed yet.  */
4445   caller_save_needed = 0;
4446
4447   /* We haven't done register allocation yet.  */
4448   reg_renumber = 0;
4449
4450   /* Indicate that we have not instantiated virtual registers yet.  */
4451   virtuals_instantiated = 0;
4452
4453   /* Indicate that we want CONCATs now.  */
4454   generating_concat_p = 1;
4455
4456   /* Indicate we have no need of a frame pointer yet.  */
4457   frame_pointer_needed = 0;
4458 }
4459
4460 /* Initialize the rtl expansion mechanism so that we can do simple things
4461    like generate sequences.  This is used to provide a context during global
4462    initialization of some passes.  You must call expand_dummy_function_end
4463    to exit this context.  */
4464
4465 void
4466 init_dummy_function_start (void)
4467 {
4468   gcc_assert (!in_dummy_function);
4469   in_dummy_function = true;
4470   push_struct_function (NULL_TREE);
4471   prepare_function_start ();
4472 }
4473
4474 /* Generate RTL for the start of the function SUBR (a FUNCTION_DECL tree node)
4475    and initialize static variables for generating RTL for the statements
4476    of the function.  */
4477
4478 void
4479 init_function_start (tree subr)
4480 {
4481   if (subr && DECL_STRUCT_FUNCTION (subr))
4482     set_cfun (DECL_STRUCT_FUNCTION (subr));
4483   else
4484     allocate_struct_function (subr, false);
4485   prepare_function_start ();
4486
4487   /* Warn if this value is an aggregate type,
4488      regardless of which calling convention we are using for it.  */
4489   if (AGGREGATE_TYPE_P (TREE_TYPE (DECL_RESULT (subr))))
4490     warning (OPT_Waggregate_return, "function returns an aggregate");
4491 }
4492
4493 /* Make sure all values used by the optimization passes have sane defaults.  */
4494 unsigned int
4495 init_function_for_compilation (void)
4496 {
4497   reg_renumber = 0;
4498   return 0;
4499 }
4500
4501 struct rtl_opt_pass pass_init_function =
4502 {
4503  {
4504   RTL_PASS,
4505   "*init_function",                     /* name */
4506   NULL,                                 /* gate */
4507   init_function_for_compilation,        /* execute */
4508   NULL,                                 /* sub */
4509   NULL,                                 /* next */
4510   0,                                    /* static_pass_number */
4511   TV_NONE,                              /* tv_id */
4512   0,                                    /* properties_required */
4513   0,                                    /* properties_provided */
4514   0,                                    /* properties_destroyed */
4515   0,                                    /* todo_flags_start */
4516   0                                     /* todo_flags_finish */
4517  }
4518 };
4519
4520
4521 void
4522 expand_main_function (void)
4523 {
4524 #if (defined(INVOKE__main)                              \
4525      || (!defined(HAS_INIT_SECTION)                     \
4526          && !defined(INIT_SECTION_ASM_OP)               \
4527          && !defined(INIT_ARRAY_SECTION_ASM_OP)))
4528   emit_library_call (init_one_libfunc (NAME__MAIN), LCT_NORMAL, VOIDmode, 0);
4529 #endif
4530 }
4531 \f
4532 /* Expand code to initialize the stack_protect_guard.  This is invoked at
4533    the beginning of a function to be protected.  */
4534
4535 #ifndef HAVE_stack_protect_set
4536 # define HAVE_stack_protect_set         0
4537 # define gen_stack_protect_set(x,y)     (gcc_unreachable (), NULL_RTX)
4538 #endif
4539
4540 void
4541 stack_protect_prologue (void)
4542 {
4543   tree guard_decl = targetm.stack_protect_guard ();
4544   rtx x, y;
4545
4546   x = expand_normal (crtl->stack_protect_guard);
4547   y = expand_normal (guard_decl);
4548
4549   /* Allow the target to copy from Y to X without leaking Y into a
4550      register.  */
4551   if (HAVE_stack_protect_set)
4552     {
4553       rtx insn = gen_stack_protect_set (x, y);
4554       if (insn)
4555         {
4556           emit_insn (insn);
4557           return;
4558         }
4559     }
4560
4561   /* Otherwise do a straight move.  */
4562   emit_move_insn (x, y);
4563 }
4564
4565 /* Expand code to verify the stack_protect_guard.  This is invoked at
4566    the end of a function to be protected.  */
4567
4568 #ifndef HAVE_stack_protect_test
4569 # define HAVE_stack_protect_test                0
4570 # define gen_stack_protect_test(x, y, z)        (gcc_unreachable (), NULL_RTX)
4571 #endif
4572
4573 void
4574 stack_protect_epilogue (void)
4575 {
4576   tree guard_decl = targetm.stack_protect_guard ();
4577   rtx label = gen_label_rtx ();
4578   rtx x, y, tmp;
4579
4580   x = expand_normal (crtl->stack_protect_guard);
4581   y = expand_normal (guard_decl);
4582
4583   /* Allow the target to compare Y with X without leaking either into
4584      a register.  */
4585   switch (HAVE_stack_protect_test != 0)
4586     {
4587     case 1:
4588       tmp = gen_stack_protect_test (x, y, label);
4589       if (tmp)
4590         {
4591           emit_insn (tmp);
4592           break;
4593         }
4594       /* FALLTHRU */
4595
4596     default:
4597       emit_cmp_and_jump_insns (x, y, EQ, NULL_RTX, ptr_mode, 1, label);
4598       break;
4599     }
4600
4601   /* The noreturn predictor has been moved to the tree level.  The rtl-level
4602      predictors estimate this branch about 20%, which isn't enough to get
4603      things moved out of line.  Since this is the only extant case of adding
4604      a noreturn function at the rtl level, it doesn't seem worth doing ought
4605      except adding the prediction by hand.  */
4606   tmp = get_last_insn ();
4607   if (JUMP_P (tmp))
4608     predict_insn_def (tmp, PRED_NORETURN, TAKEN);
4609
4610   expand_expr_stmt (targetm.stack_protect_fail ());
4611   emit_label (label);
4612 }
4613 \f
4614 /* Start the RTL for a new function, and set variables used for
4615    emitting RTL.
4616    SUBR is the FUNCTION_DECL node.
4617    PARMS_HAVE_CLEANUPS is nonzero if there are cleanups associated with
4618    the function's parameters, which must be run at any return statement.  */
4619
4620 void
4621 expand_function_start (tree subr)
4622 {
4623   /* Make sure volatile mem refs aren't considered
4624      valid operands of arithmetic insns.  */
4625   init_recog_no_volatile ();
4626
4627   crtl->profile
4628     = (profile_flag
4629        && ! DECL_NO_INSTRUMENT_FUNCTION_ENTRY_EXIT (subr));
4630
4631   crtl->limit_stack
4632     = (stack_limit_rtx != NULL_RTX && ! DECL_NO_LIMIT_STACK (subr));
4633
4634   /* Make the label for return statements to jump to.  Do not special
4635      case machines with special return instructions -- they will be
4636      handled later during jump, ifcvt, or epilogue creation.  */
4637   return_label = gen_label_rtx ();
4638
4639   /* Initialize rtx used to return the value.  */
4640   /* Do this before assign_parms so that we copy the struct value address
4641      before any library calls that assign parms might generate.  */
4642
4643   /* Decide whether to return the value in memory or in a register.  */
4644   if (aggregate_value_p (DECL_RESULT (subr), subr))
4645     {
4646       /* Returning something that won't go in a register.  */
4647       rtx value_address = 0;
4648
4649 #ifdef PCC_STATIC_STRUCT_RETURN
4650       if (cfun->returns_pcc_struct)
4651         {
4652           int size = int_size_in_bytes (TREE_TYPE (DECL_RESULT (subr)));
4653           value_address = assemble_static_space (size);
4654         }
4655       else
4656 #endif
4657         {
4658           rtx sv = targetm.calls.struct_value_rtx (TREE_TYPE (subr), 2);
4659           /* Expect to be passed the address of a place to store the value.
4660              If it is passed as an argument, assign_parms will take care of
4661              it.  */
4662           if (sv)
4663             {
4664               value_address = gen_reg_rtx (Pmode);
4665               emit_move_insn (value_address, sv);
4666             }
4667         }
4668       if (value_address)
4669         {
4670           rtx x = value_address;
4671           if (!DECL_BY_REFERENCE (DECL_RESULT (subr)))
4672             {
4673               x = gen_rtx_MEM (DECL_MODE (DECL_RESULT (subr)), x);
4674               set_mem_attributes (x, DECL_RESULT (subr), 1);
4675             }
4676           SET_DECL_RTL (DECL_RESULT (subr), x);
4677         }
4678     }
4679   else if (DECL_MODE (DECL_RESULT (subr)) == VOIDmode)
4680     /* If return mode is void, this decl rtl should not be used.  */
4681     SET_DECL_RTL (DECL_RESULT (subr), NULL_RTX);
4682   else
4683     {
4684       /* Compute the return values into a pseudo reg, which we will copy
4685          into the true return register after the cleanups are done.  */
4686       tree return_type = TREE_TYPE (DECL_RESULT (subr));
4687       if (TYPE_MODE (return_type) != BLKmode
4688           && targetm.calls.return_in_msb (return_type))
4689         /* expand_function_end will insert the appropriate padding in
4690            this case.  Use the return value's natural (unpadded) mode
4691            within the function proper.  */
4692         SET_DECL_RTL (DECL_RESULT (subr),
4693                       gen_reg_rtx (TYPE_MODE (return_type)));
4694       else
4695         {
4696           /* In order to figure out what mode to use for the pseudo, we
4697              figure out what the mode of the eventual return register will
4698              actually be, and use that.  */
4699           rtx hard_reg = hard_function_value (return_type, subr, 0, 1);
4700
4701           /* Structures that are returned in registers are not
4702              aggregate_value_p, so we may see a PARALLEL or a REG.  */
4703           if (REG_P (hard_reg))
4704             SET_DECL_RTL (DECL_RESULT (subr),
4705                           gen_reg_rtx (GET_MODE (hard_reg)));
4706           else
4707             {
4708               gcc_assert (GET_CODE (hard_reg) == PARALLEL);
4709               SET_DECL_RTL (DECL_RESULT (subr), gen_group_rtx (hard_reg));
4710             }
4711         }
4712
4713       /* Set DECL_REGISTER flag so that expand_function_end will copy the
4714          result to the real return register(s).  */
4715       DECL_REGISTER (DECL_RESULT (subr)) = 1;
4716     }
4717
4718   /* Initialize rtx for parameters and local variables.
4719      In some cases this requires emitting insns.  */
4720   assign_parms (subr);
4721
4722   /* If function gets a static chain arg, store it.  */
4723   if (cfun->static_chain_decl)
4724     {
4725       tree parm = cfun->static_chain_decl;
4726       rtx local, chain, insn;
4727
4728       local = gen_reg_rtx (Pmode);
4729       chain = targetm.calls.static_chain (current_function_decl, true);
4730
4731       set_decl_incoming_rtl (parm, chain, false);
4732       SET_DECL_RTL (parm, local);
4733       mark_reg_pointer (local, TYPE_ALIGN (TREE_TYPE (TREE_TYPE (parm))));
4734
4735       insn = emit_move_insn (local, chain);
4736
4737       /* Mark the register as eliminable, similar to parameters.  */
4738       if (MEM_P (chain)
4739           && reg_mentioned_p (arg_pointer_rtx, XEXP (chain, 0)))
4740         set_unique_reg_note (insn, REG_EQUIV, chain);
4741     }
4742
4743   /* If the function receives a non-local goto, then store the
4744      bits we need to restore the frame pointer.  */
4745   if (cfun->nonlocal_goto_save_area)
4746     {
4747       tree t_save;
4748       rtx r_save;
4749
4750       /* ??? We need to do this save early.  Unfortunately here is
4751          before the frame variable gets declared.  Help out...  */
4752       tree var = TREE_OPERAND (cfun->nonlocal_goto_save_area, 0);
4753       if (!DECL_RTL_SET_P (var))
4754         expand_decl (var);
4755
4756       t_save = build4 (ARRAY_REF, ptr_type_node,
4757                        cfun->nonlocal_goto_save_area,
4758                        integer_zero_node, NULL_TREE, NULL_TREE);
4759       r_save = expand_expr (t_save, NULL_RTX, VOIDmode, EXPAND_WRITE);
4760       r_save = convert_memory_address (Pmode, r_save);
4761
4762       emit_move_insn (r_save, targetm.builtin_setjmp_frame_value ());
4763       update_nonlocal_goto_save_area ();
4764     }
4765
4766   /* The following was moved from init_function_start.
4767      The move is supposed to make sdb output more accurate.  */
4768   /* Indicate the beginning of the function body,
4769      as opposed to parm setup.  */
4770   emit_note (NOTE_INSN_FUNCTION_BEG);
4771
4772   gcc_assert (NOTE_P (get_last_insn ()));
4773
4774   parm_birth_insn = get_last_insn ();
4775
4776   if (crtl->profile)
4777     {
4778 #ifdef PROFILE_HOOK
4779       PROFILE_HOOK (current_function_funcdef_no);
4780 #endif
4781     }
4782
4783   /* After the display initializations is where the stack checking
4784      probe should go.  */
4785   if(flag_stack_check)
4786     stack_check_probe_note = emit_note (NOTE_INSN_DELETED);
4787
4788   /* Make sure there is a line number after the function entry setup code.  */
4789   force_next_line_note ();
4790 }
4791 \f
4792 /* Undo the effects of init_dummy_function_start.  */
4793 void
4794 expand_dummy_function_end (void)
4795 {
4796   gcc_assert (in_dummy_function);
4797
4798   /* End any sequences that failed to be closed due to syntax errors.  */
4799   while (in_sequence_p ())
4800     end_sequence ();
4801
4802   /* Outside function body, can't compute type's actual size
4803      until next function's body starts.  */
4804
4805   free_after_parsing (cfun);
4806   free_after_compilation (cfun);
4807   pop_cfun ();
4808   in_dummy_function = false;
4809 }
4810
4811 /* Call DOIT for each hard register used as a return value from
4812    the current function.  */
4813
4814 void
4815 diddle_return_value (void (*doit) (rtx, void *), void *arg)
4816 {
4817   rtx outgoing = crtl->return_rtx;
4818
4819   if (! outgoing)
4820     return;
4821
4822   if (REG_P (outgoing))
4823     (*doit) (outgoing, arg);
4824   else if (GET_CODE (outgoing) == PARALLEL)
4825     {
4826       int i;
4827
4828       for (i = 0; i < XVECLEN (outgoing, 0); i++)
4829         {
4830           rtx x = XEXP (XVECEXP (outgoing, 0, i), 0);
4831
4832           if (REG_P (x) && REGNO (x) < FIRST_PSEUDO_REGISTER)
4833             (*doit) (x, arg);
4834         }
4835     }
4836 }
4837
4838 static void
4839 do_clobber_return_reg (rtx reg, void *arg ATTRIBUTE_UNUSED)
4840 {
4841   emit_clobber (reg);
4842 }
4843
4844 void
4845 clobber_return_register (void)
4846 {
4847   diddle_return_value (do_clobber_return_reg, NULL);
4848
4849   /* In case we do use pseudo to return value, clobber it too.  */
4850   if (DECL_RTL_SET_P (DECL_RESULT (current_function_decl)))
4851     {
4852       tree decl_result = DECL_RESULT (current_function_decl);
4853       rtx decl_rtl = DECL_RTL (decl_result);
4854       if (REG_P (decl_rtl) && REGNO (decl_rtl) >= FIRST_PSEUDO_REGISTER)
4855         {
4856           do_clobber_return_reg (decl_rtl, NULL);
4857         }
4858     }
4859 }
4860
4861 static void
4862 do_use_return_reg (rtx reg, void *arg ATTRIBUTE_UNUSED)
4863 {
4864   emit_use (reg);
4865 }
4866
4867 static void
4868 use_return_register (void)
4869 {
4870   diddle_return_value (do_use_return_reg, NULL);
4871 }
4872
4873 /* Possibly warn about unused parameters.  */
4874 void
4875 do_warn_unused_parameter (tree fn)
4876 {
4877   tree decl;
4878
4879   for (decl = DECL_ARGUMENTS (fn);
4880        decl; decl = DECL_CHAIN (decl))
4881     if (!TREE_USED (decl) && TREE_CODE (decl) == PARM_DECL
4882         && DECL_NAME (decl) && !DECL_ARTIFICIAL (decl)
4883         && !TREE_NO_WARNING (decl))
4884       warning (OPT_Wunused_parameter, "unused parameter %q+D", decl);
4885 }
4886
4887 static GTY(()) rtx initial_trampoline;
4888
4889 /* Generate RTL for the end of the current function.  */
4890
4891 void
4892 expand_function_end (void)
4893 {
4894   rtx clobber_after;
4895
4896   /* If arg_pointer_save_area was referenced only from a nested
4897      function, we will not have initialized it yet.  Do that now.  */
4898   if (arg_pointer_save_area && ! crtl->arg_pointer_save_area_init)
4899     get_arg_pointer_save_area ();
4900
4901   /* If we are doing generic stack checking and this function makes calls,
4902      do a stack probe at the start of the function to ensure we have enough
4903      space for another stack frame.  */
4904   if (flag_stack_check == GENERIC_STACK_CHECK)
4905     {
4906       rtx insn, seq;
4907
4908       for (insn = get_insns (); insn; insn = NEXT_INSN (insn))
4909         if (CALL_P (insn))
4910           {
4911             rtx max_frame_size = GEN_INT (STACK_CHECK_MAX_FRAME_SIZE);
4912             start_sequence ();
4913             if (STACK_CHECK_MOVING_SP)
4914               anti_adjust_stack_and_probe (max_frame_size, true);
4915             else
4916               probe_stack_range (STACK_OLD_CHECK_PROTECT, max_frame_size);
4917             seq = get_insns ();
4918             end_sequence ();
4919             set_insn_locators (seq, prologue_locator);
4920             emit_insn_before (seq, stack_check_probe_note);
4921             break;
4922           }
4923     }
4924
4925   /* End any sequences that failed to be closed due to syntax errors.  */
4926   while (in_sequence_p ())
4927     end_sequence ();
4928
4929   clear_pending_stack_adjust ();
4930   do_pending_stack_adjust ();
4931
4932   /* Output a linenumber for the end of the function.
4933      SDB depends on this.  */
4934   force_next_line_note ();
4935   set_curr_insn_source_location (input_location);
4936
4937   /* Before the return label (if any), clobber the return
4938      registers so that they are not propagated live to the rest of
4939      the function.  This can only happen with functions that drop
4940      through; if there had been a return statement, there would
4941      have either been a return rtx, or a jump to the return label.
4942
4943      We delay actual code generation after the current_function_value_rtx
4944      is computed.  */
4945   clobber_after = get_last_insn ();
4946
4947   /* Output the label for the actual return from the function.  */
4948   emit_label (return_label);
4949
4950   if (targetm.except_unwind_info (&global_options) == UI_SJLJ)
4951     {
4952       /* Let except.c know where it should emit the call to unregister
4953          the function context for sjlj exceptions.  */
4954       if (flag_exceptions)
4955         sjlj_emit_function_exit_after (get_last_insn ());
4956     }
4957   else
4958     {
4959       /* We want to ensure that instructions that may trap are not
4960          moved into the epilogue by scheduling, because we don't
4961          always emit unwind information for the epilogue.  */
4962       if (cfun->can_throw_non_call_exceptions)
4963         emit_insn (gen_blockage ());
4964     }
4965
4966   /* If this is an implementation of throw, do what's necessary to
4967      communicate between __builtin_eh_return and the epilogue.  */
4968   expand_eh_return ();
4969
4970   /* If scalar return value was computed in a pseudo-reg, or was a named
4971      return value that got dumped to the stack, copy that to the hard
4972      return register.  */
4973   if (DECL_RTL_SET_P (DECL_RESULT (current_function_decl)))
4974     {
4975       tree decl_result = DECL_RESULT (current_function_decl);
4976       rtx decl_rtl = DECL_RTL (decl_result);
4977
4978       if (REG_P (decl_rtl)
4979           ? REGNO (decl_rtl) >= FIRST_PSEUDO_REGISTER
4980           : DECL_REGISTER (decl_result))
4981         {
4982           rtx real_decl_rtl = crtl->return_rtx;
4983
4984           /* This should be set in assign_parms.  */
4985           gcc_assert (REG_FUNCTION_VALUE_P (real_decl_rtl));
4986
4987           /* If this is a BLKmode structure being returned in registers,
4988              then use the mode computed in expand_return.  Note that if
4989              decl_rtl is memory, then its mode may have been changed,
4990              but that crtl->return_rtx has not.  */
4991           if (GET_MODE (real_decl_rtl) == BLKmode)
4992             PUT_MODE (real_decl_rtl, GET_MODE (decl_rtl));
4993
4994           /* If a non-BLKmode return value should be padded at the least
4995              significant end of the register, shift it left by the appropriate
4996              amount.  BLKmode results are handled using the group load/store
4997              machinery.  */
4998           if (TYPE_MODE (TREE_TYPE (decl_result)) != BLKmode
4999               && targetm.calls.return_in_msb (TREE_TYPE (decl_result)))
5000             {
5001               emit_move_insn (gen_rtx_REG (GET_MODE (decl_rtl),
5002                                            REGNO (real_decl_rtl)),
5003                               decl_rtl);
5004               shift_return_value (GET_MODE (decl_rtl), true, real_decl_rtl);
5005             }
5006           /* If a named return value dumped decl_return to memory, then
5007              we may need to re-do the PROMOTE_MODE signed/unsigned
5008              extension.  */
5009           else if (GET_MODE (real_decl_rtl) != GET_MODE (decl_rtl))
5010             {
5011               int unsignedp = TYPE_UNSIGNED (TREE_TYPE (decl_result));
5012               promote_function_mode (TREE_TYPE (decl_result),
5013                                      GET_MODE (decl_rtl), &unsignedp,
5014                                      TREE_TYPE (current_function_decl), 1);
5015
5016               convert_move (real_decl_rtl, decl_rtl, unsignedp);
5017             }
5018           else if (GET_CODE (real_decl_rtl) == PARALLEL)
5019             {
5020               /* If expand_function_start has created a PARALLEL for decl_rtl,
5021                  move the result to the real return registers.  Otherwise, do
5022                  a group load from decl_rtl for a named return.  */
5023               if (GET_CODE (decl_rtl) == PARALLEL)
5024                 emit_group_move (real_decl_rtl, decl_rtl);
5025               else
5026                 emit_group_load (real_decl_rtl, decl_rtl,
5027                                  TREE_TYPE (decl_result),
5028                                  int_size_in_bytes (TREE_TYPE (decl_result)));
5029             }
5030           /* In the case of complex integer modes smaller than a word, we'll
5031              need to generate some non-trivial bitfield insertions.  Do that
5032              on a pseudo and not the hard register.  */
5033           else if (GET_CODE (decl_rtl) == CONCAT
5034                    && GET_MODE_CLASS (GET_MODE (decl_rtl)) == MODE_COMPLEX_INT
5035                    && GET_MODE_BITSIZE (GET_MODE (decl_rtl)) <= BITS_PER_WORD)
5036             {
5037               int old_generating_concat_p;
5038               rtx tmp;
5039
5040               old_generating_concat_p = generating_concat_p;
5041               generating_concat_p = 0;
5042               tmp = gen_reg_rtx (GET_MODE (decl_rtl));
5043               generating_concat_p = old_generating_concat_p;
5044
5045               emit_move_insn (tmp, decl_rtl);
5046               emit_move_insn (real_decl_rtl, tmp);
5047             }
5048           else
5049             emit_move_insn (real_decl_rtl, decl_rtl);
5050         }
5051     }
5052
5053   /* If returning a structure, arrange to return the address of the value
5054      in a place where debuggers expect to find it.
5055
5056      If returning a structure PCC style,
5057      the caller also depends on this value.
5058      And cfun->returns_pcc_struct is not necessarily set.  */
5059   if (cfun->returns_struct
5060       || cfun->returns_pcc_struct)
5061     {
5062       rtx value_address = DECL_RTL (DECL_RESULT (current_function_decl));
5063       tree type = TREE_TYPE (DECL_RESULT (current_function_decl));
5064       rtx outgoing;
5065
5066       if (DECL_BY_REFERENCE (DECL_RESULT (current_function_decl)))
5067         type = TREE_TYPE (type);
5068       else
5069         value_address = XEXP (value_address, 0);
5070
5071       outgoing = targetm.calls.function_value (build_pointer_type (type),
5072                                                current_function_decl, true);
5073
5074       /* Mark this as a function return value so integrate will delete the
5075          assignment and USE below when inlining this function.  */
5076       REG_FUNCTION_VALUE_P (outgoing) = 1;
5077
5078       /* The address may be ptr_mode and OUTGOING may be Pmode.  */
5079       value_address = convert_memory_address (GET_MODE (outgoing),
5080                                               value_address);
5081
5082       emit_move_insn (outgoing, value_address);
5083
5084       /* Show return register used to hold result (in this case the address
5085          of the result.  */
5086       crtl->return_rtx = outgoing;
5087     }
5088
5089   /* Emit the actual code to clobber return register.  */
5090   {
5091     rtx seq;
5092
5093     start_sequence ();
5094     clobber_return_register ();
5095     seq = get_insns ();
5096     end_sequence ();
5097
5098     emit_insn_after (seq, clobber_after);
5099   }
5100
5101   /* Output the label for the naked return from the function.  */
5102   if (naked_return_label)
5103     emit_label (naked_return_label);
5104
5105   /* @@@ This is a kludge.  We want to ensure that instructions that
5106      may trap are not moved into the epilogue by scheduling, because
5107      we don't always emit unwind information for the epilogue.  */
5108   if (cfun->can_throw_non_call_exceptions
5109       && targetm.except_unwind_info (&global_options) != UI_SJLJ)
5110     emit_insn (gen_blockage ());
5111
5112   /* If stack protection is enabled for this function, check the guard.  */
5113   if (crtl->stack_protect_guard)
5114     stack_protect_epilogue ();
5115
5116   /* If we had calls to alloca, and this machine needs
5117      an accurate stack pointer to exit the function,
5118      insert some code to save and restore the stack pointer.  */
5119   if (! EXIT_IGNORE_STACK
5120       && cfun->calls_alloca)
5121     {
5122       rtx tem = 0, seq;
5123
5124       start_sequence ();
5125       emit_stack_save (SAVE_FUNCTION, &tem);
5126       seq = get_insns ();
5127       end_sequence ();
5128       emit_insn_before (seq, parm_birth_insn);
5129
5130       emit_stack_restore (SAVE_FUNCTION, tem);
5131     }
5132
5133   /* ??? This should no longer be necessary since stupid is no longer with
5134      us, but there are some parts of the compiler (eg reload_combine, and
5135      sh mach_dep_reorg) that still try and compute their own lifetime info
5136      instead of using the general framework.  */
5137   use_return_register ();
5138 }
5139
5140 rtx
5141 get_arg_pointer_save_area (void)
5142 {
5143   rtx ret = arg_pointer_save_area;
5144
5145   if (! ret)
5146     {
5147       ret = assign_stack_local (Pmode, GET_MODE_SIZE (Pmode), 0);
5148       arg_pointer_save_area = ret;
5149     }
5150
5151   if (! crtl->arg_pointer_save_area_init)
5152     {
5153       rtx seq;
5154
5155       /* Save the arg pointer at the beginning of the function.  The
5156          generated stack slot may not be a valid memory address, so we
5157          have to check it and fix it if necessary.  */
5158       start_sequence ();
5159       emit_move_insn (validize_mem (ret),
5160                       crtl->args.internal_arg_pointer);
5161       seq = get_insns ();
5162       end_sequence ();
5163
5164       push_topmost_sequence ();
5165       emit_insn_after (seq, entry_of_function ());
5166       pop_topmost_sequence ();
5167
5168       crtl->arg_pointer_save_area_init = true;
5169     }
5170
5171   return ret;
5172 }
5173 \f
5174 /* Add a list of INSNS to the hash HASHP, possibly allocating HASHP
5175    for the first time.  */
5176
5177 static void
5178 record_insns (rtx insns, rtx end, htab_t *hashp)
5179 {
5180   rtx tmp;
5181   htab_t hash = *hashp;
5182
5183   if (hash == NULL)
5184     *hashp = hash
5185       = htab_create_ggc (17, htab_hash_pointer, htab_eq_pointer, NULL);
5186
5187   for (tmp = insns; tmp != end; tmp = NEXT_INSN (tmp))
5188     {
5189       void **slot = htab_find_slot (hash, tmp, INSERT);
5190       gcc_assert (*slot == NULL);
5191       *slot = tmp;
5192     }
5193 }
5194
5195 /* INSN has been duplicated or replaced by as COPY, perhaps by duplicating a
5196    basic block, splitting or peepholes.  If INSN is a prologue or epilogue
5197    insn, then record COPY as well.  */
5198
5199 void
5200 maybe_copy_prologue_epilogue_insn (rtx insn, rtx copy)
5201 {
5202   htab_t hash;
5203   void **slot;
5204
5205   hash = epilogue_insn_hash;
5206   if (!hash || !htab_find (hash, insn))
5207     {
5208       hash = prologue_insn_hash;
5209       if (!hash || !htab_find (hash, insn))
5210         return;
5211     }
5212
5213   slot = htab_find_slot (hash, copy, INSERT);
5214   gcc_assert (*slot == NULL);
5215   *slot = copy;
5216 }
5217
5218 /* Set the locator of the insn chain starting at INSN to LOC.  */
5219 static void
5220 set_insn_locators (rtx insn, int loc)
5221 {
5222   while (insn != NULL_RTX)
5223     {
5224       if (INSN_P (insn))
5225         INSN_LOCATOR (insn) = loc;
5226       insn = NEXT_INSN (insn);
5227     }
5228 }
5229
5230 /* Determine if any INSNs in HASH are, or are part of, INSN.  Because
5231    we can be running after reorg, SEQUENCE rtl is possible.  */
5232
5233 static bool
5234 contains (const_rtx insn, htab_t hash)
5235 {
5236   if (hash == NULL)
5237     return false;
5238
5239   if (NONJUMP_INSN_P (insn) && GET_CODE (PATTERN (insn)) == SEQUENCE)
5240     {
5241       int i;
5242       for (i = XVECLEN (PATTERN (insn), 0) - 1; i >= 0; i--)
5243         if (htab_find (hash, XVECEXP (PATTERN (insn), 0, i)))
5244           return true;
5245       return false;
5246     }
5247
5248   return htab_find (hash, insn) != NULL;
5249 }
5250
5251 int
5252 prologue_epilogue_contains (const_rtx insn)
5253 {
5254   if (contains (insn, prologue_insn_hash))
5255     return 1;
5256   if (contains (insn, epilogue_insn_hash))
5257     return 1;
5258   return 0;
5259 }
5260
5261 #ifdef HAVE_return
5262 /* Insert use of return register before the end of BB.  */
5263
5264 static void
5265 emit_use_return_register_into_block (basic_block bb)
5266 {
5267   rtx seq;
5268   start_sequence ();
5269   use_return_register ();
5270   seq = get_insns ();
5271   end_sequence ();
5272   emit_insn_before (seq, BB_END (bb));
5273 }
5274
5275 /* Insert gen_return at the end of block BB.  This also means updating
5276    block_for_insn appropriately.  */
5277
5278 static void
5279 emit_return_into_block (basic_block bb)
5280 {
5281   emit_jump_insn_after (gen_return (), BB_END (bb));
5282 }
5283 #endif /* HAVE_return */
5284
5285 /* Generate the prologue and epilogue RTL if the machine supports it.  Thread
5286    this into place with notes indicating where the prologue ends and where
5287    the epilogue begins.  Update the basic block information when possible.  */
5288
5289 static void
5290 thread_prologue_and_epilogue_insns (void)
5291 {
5292   bool inserted;
5293   rtx seq ATTRIBUTE_UNUSED, epilogue_end ATTRIBUTE_UNUSED;
5294   edge entry_edge, e;
5295   edge_iterator ei;
5296
5297   rtl_profile_for_bb (ENTRY_BLOCK_PTR);
5298
5299   inserted = false;
5300   seq = NULL_RTX;
5301   epilogue_end = NULL_RTX;
5302
5303   /* Can't deal with multiple successors of the entry block at the
5304      moment.  Function should always have at least one entry
5305      point.  */
5306   gcc_assert (single_succ_p (ENTRY_BLOCK_PTR));
5307   entry_edge = single_succ_edge (ENTRY_BLOCK_PTR);
5308
5309   if (flag_split_stack
5310       && (lookup_attribute ("no_split_stack", DECL_ATTRIBUTES (cfun->decl))
5311           == NULL))
5312     {
5313 #ifndef HAVE_split_stack_prologue
5314       gcc_unreachable ();
5315 #else
5316       gcc_assert (HAVE_split_stack_prologue);
5317
5318       start_sequence ();
5319       emit_insn (gen_split_stack_prologue ());
5320       seq = get_insns ();
5321       end_sequence ();
5322
5323       record_insns (seq, NULL, &prologue_insn_hash);
5324       set_insn_locators (seq, prologue_locator);
5325
5326       insert_insn_on_edge (seq, entry_edge);
5327       inserted = true;
5328 #endif
5329     }
5330
5331 #ifdef HAVE_prologue
5332   if (HAVE_prologue)
5333     {
5334       start_sequence ();
5335       seq = gen_prologue ();
5336       emit_insn (seq);
5337
5338       /* Insert an explicit USE for the frame pointer
5339          if the profiling is on and the frame pointer is required.  */
5340       if (crtl->profile && frame_pointer_needed)
5341         emit_use (hard_frame_pointer_rtx);
5342
5343       /* Retain a map of the prologue insns.  */
5344       record_insns (seq, NULL, &prologue_insn_hash);
5345       emit_note (NOTE_INSN_PROLOGUE_END);
5346
5347       /* Ensure that instructions are not moved into the prologue when
5348          profiling is on.  The call to the profiling routine can be
5349          emitted within the live range of a call-clobbered register.  */
5350       if (!targetm.profile_before_prologue () && crtl->profile)
5351         emit_insn (gen_blockage ());
5352
5353       seq = get_insns ();
5354       end_sequence ();
5355       set_insn_locators (seq, prologue_locator);
5356
5357       insert_insn_on_edge (seq, entry_edge);
5358       inserted = true;
5359     }
5360 #endif
5361
5362   /* If the exit block has no non-fake predecessors, we don't need
5363      an epilogue.  */
5364   FOR_EACH_EDGE (e, ei, EXIT_BLOCK_PTR->preds)
5365     if ((e->flags & EDGE_FAKE) == 0)
5366       break;
5367   if (e == NULL)
5368     goto epilogue_done;
5369
5370   rtl_profile_for_bb (EXIT_BLOCK_PTR);
5371 #ifdef HAVE_return
5372   if (optimize && HAVE_return)
5373     {
5374       /* If we're allowed to generate a simple return instruction,
5375          then by definition we don't need a full epilogue.  Examine
5376          the block that falls through to EXIT.   If it does not
5377          contain any code, examine its predecessors and try to
5378          emit (conditional) return instructions.  */
5379
5380       basic_block last;
5381       rtx label;
5382
5383       e = find_fallthru_edge (EXIT_BLOCK_PTR->preds);
5384       if (e == NULL)
5385         goto epilogue_done;
5386       last = e->src;
5387
5388       /* Verify that there are no active instructions in the last block.  */
5389       label = BB_END (last);
5390       while (label && !LABEL_P (label))
5391         {
5392           if (active_insn_p (label))
5393             break;
5394           label = PREV_INSN (label);
5395         }
5396
5397       if (BB_HEAD (last) == label && LABEL_P (label))
5398         {
5399           edge_iterator ei2;
5400
5401           for (ei2 = ei_start (last->preds); (e = ei_safe_edge (ei2)); )
5402             {
5403               basic_block bb = e->src;
5404               rtx jump;
5405
5406               if (bb == ENTRY_BLOCK_PTR)
5407                 {
5408                   ei_next (&ei2);
5409                   continue;
5410                 }
5411
5412               jump = BB_END (bb);
5413               if (!JUMP_P (jump) || JUMP_LABEL (jump) != label)
5414                 {
5415                   ei_next (&ei2);
5416                   continue;
5417                 }
5418
5419               /* If we have an unconditional jump, we can replace that
5420                  with a simple return instruction.  */
5421               if (simplejump_p (jump))
5422                 {
5423                   /* The use of the return register might be present in the exit
5424                      fallthru block.  Either:
5425                      - removing the use is safe, and we should remove the use in
5426                        the exit fallthru block, or
5427                      - removing the use is not safe, and we should add it here.
5428                      For now, we conservatively choose the latter.  Either of the
5429                      2 helps in crossjumping.  */
5430                   emit_use_return_register_into_block (bb);
5431
5432                   emit_return_into_block (bb);
5433                   delete_insn (jump);
5434                 }
5435
5436               /* If we have a conditional jump, we can try to replace
5437                  that with a conditional return instruction.  */
5438               else if (condjump_p (jump))
5439                 {
5440                   if (! redirect_jump (jump, 0, 0))
5441                     {
5442                       ei_next (&ei2);
5443                       continue;
5444                     }
5445
5446                   /* See comment in simple_jump_p case above.  */
5447                   emit_use_return_register_into_block (bb);
5448
5449                   /* If this block has only one successor, it both jumps
5450                      and falls through to the fallthru block, so we can't
5451                      delete the edge.  */
5452                   if (single_succ_p (bb))
5453                     {
5454                       ei_next (&ei2);
5455                       continue;
5456                     }
5457                 }
5458               else
5459                 {
5460                   ei_next (&ei2);
5461                   continue;
5462                 }
5463
5464               /* Fix up the CFG for the successful change we just made.  */
5465               redirect_edge_succ (e, EXIT_BLOCK_PTR);
5466             }
5467
5468           /* Emit a return insn for the exit fallthru block.  Whether
5469              this is still reachable will be determined later.  */
5470
5471           emit_barrier_after (BB_END (last));
5472           emit_return_into_block (last);
5473           epilogue_end = BB_END (last);
5474           single_succ_edge (last)->flags &= ~EDGE_FALLTHRU;
5475           goto epilogue_done;
5476         }
5477     }
5478 #endif
5479
5480   /* A small fib -- epilogue is not yet completed, but we wish to re-use
5481      this marker for the splits of EH_RETURN patterns, and nothing else
5482      uses the flag in the meantime.  */
5483   epilogue_completed = 1;
5484
5485 #ifdef HAVE_eh_return
5486   /* Find non-fallthru edges that end with EH_RETURN instructions.  On
5487      some targets, these get split to a special version of the epilogue
5488      code.  In order to be able to properly annotate these with unwind
5489      info, try to split them now.  If we get a valid split, drop an
5490      EPILOGUE_BEG note and mark the insns as epilogue insns.  */
5491   FOR_EACH_EDGE (e, ei, EXIT_BLOCK_PTR->preds)
5492     {
5493       rtx prev, last, trial;
5494
5495       if (e->flags & EDGE_FALLTHRU)
5496         continue;
5497       last = BB_END (e->src);
5498       if (!eh_returnjump_p (last))
5499         continue;
5500
5501       prev = PREV_INSN (last);
5502       trial = try_split (PATTERN (last), last, 1);
5503       if (trial == last)
5504         continue;
5505
5506       record_insns (NEXT_INSN (prev), NEXT_INSN (trial), &epilogue_insn_hash);
5507       emit_note_after (NOTE_INSN_EPILOGUE_BEG, prev);
5508     }
5509 #endif
5510
5511   /* Find the edge that falls through to EXIT.  Other edges may exist
5512      due to RETURN instructions, but those don't need epilogues.
5513      There really shouldn't be a mixture -- either all should have
5514      been converted or none, however...  */
5515
5516   e = find_fallthru_edge (EXIT_BLOCK_PTR->preds);
5517   if (e == NULL)
5518     goto epilogue_done;
5519
5520 #ifdef HAVE_epilogue
5521   if (HAVE_epilogue)
5522     {
5523       start_sequence ();
5524       epilogue_end = emit_note (NOTE_INSN_EPILOGUE_BEG);
5525       seq = gen_epilogue ();
5526       if (seq)
5527         emit_jump_insn (seq);
5528
5529       /* Retain a map of the epilogue insns.  */
5530       record_insns (seq, NULL, &epilogue_insn_hash);
5531       set_insn_locators (seq, epilogue_locator);
5532
5533       seq = get_insns ();
5534       end_sequence ();
5535
5536       insert_insn_on_edge (seq, e);
5537       inserted = true;
5538     }
5539   else
5540 #endif
5541     {
5542       basic_block cur_bb;
5543
5544       if (! next_active_insn (BB_END (e->src)))
5545         goto epilogue_done;
5546       /* We have a fall-through edge to the exit block, the source is not
5547          at the end of the function, and there will be an assembler epilogue
5548          at the end of the function.
5549          We can't use force_nonfallthru here, because that would try to
5550          use return.  Inserting a jump 'by hand' is extremely messy, so
5551          we take advantage of cfg_layout_finalize using
5552         fixup_fallthru_exit_predecessor.  */
5553       cfg_layout_initialize (0);
5554       FOR_EACH_BB (cur_bb)
5555         if (cur_bb->index >= NUM_FIXED_BLOCKS
5556             && cur_bb->next_bb->index >= NUM_FIXED_BLOCKS)
5557           cur_bb->aux = cur_bb->next_bb;
5558       cfg_layout_finalize ();
5559     }
5560
5561 epilogue_done:
5562   default_rtl_profile ();
5563
5564   if (inserted)
5565     {
5566       sbitmap blocks;
5567
5568       commit_edge_insertions ();
5569
5570       /* Look for basic blocks within the prologue insns.  */
5571       blocks = sbitmap_alloc (last_basic_block);
5572       sbitmap_zero (blocks);
5573       SET_BIT (blocks, entry_edge->dest->index);
5574       find_many_sub_basic_blocks (blocks);
5575       sbitmap_free (blocks);
5576
5577       /* The epilogue insns we inserted may cause the exit edge to no longer
5578          be fallthru.  */
5579       FOR_EACH_EDGE (e, ei, EXIT_BLOCK_PTR->preds)
5580         {
5581           if (((e->flags & EDGE_FALLTHRU) != 0)
5582               && returnjump_p (BB_END (e->src)))
5583             e->flags &= ~EDGE_FALLTHRU;
5584         }
5585     }
5586
5587 #ifdef HAVE_sibcall_epilogue
5588   /* Emit sibling epilogues before any sibling call sites.  */
5589   for (ei = ei_start (EXIT_BLOCK_PTR->preds); (e = ei_safe_edge (ei)); )
5590     {
5591       basic_block bb = e->src;
5592       rtx insn = BB_END (bb);
5593
5594       if (!CALL_P (insn)
5595           || ! SIBLING_CALL_P (insn))
5596         {
5597           ei_next (&ei);
5598           continue;
5599         }
5600
5601       start_sequence ();
5602       emit_note (NOTE_INSN_EPILOGUE_BEG);
5603       emit_insn (gen_sibcall_epilogue ());
5604       seq = get_insns ();
5605       end_sequence ();
5606
5607       /* Retain a map of the epilogue insns.  Used in life analysis to
5608          avoid getting rid of sibcall epilogue insns.  Do this before we
5609          actually emit the sequence.  */
5610       record_insns (seq, NULL, &epilogue_insn_hash);
5611       set_insn_locators (seq, epilogue_locator);
5612
5613       emit_insn_before (seq, insn);
5614       ei_next (&ei);
5615     }
5616 #endif
5617
5618 #ifdef HAVE_epilogue
5619   if (epilogue_end)
5620     {
5621       rtx insn, next;
5622
5623       /* Similarly, move any line notes that appear after the epilogue.
5624          There is no need, however, to be quite so anal about the existence
5625          of such a note.  Also possibly move
5626          NOTE_INSN_FUNCTION_BEG notes, as those can be relevant for debug
5627          info generation.  */
5628       for (insn = epilogue_end; insn; insn = next)
5629         {
5630           next = NEXT_INSN (insn);
5631           if (NOTE_P (insn)
5632               && (NOTE_KIND (insn) == NOTE_INSN_FUNCTION_BEG))
5633             reorder_insns (insn, insn, PREV_INSN (epilogue_end));
5634         }
5635     }
5636 #endif
5637
5638   /* Threading the prologue and epilogue changes the artificial refs
5639      in the entry and exit blocks.  */
5640   epilogue_completed = 1;
5641   df_update_entry_exit_and_calls ();
5642 }
5643
5644 /* Reposition the prologue-end and epilogue-begin notes after
5645    instruction scheduling.  */
5646
5647 void
5648 reposition_prologue_and_epilogue_notes (void)
5649 {
5650 #if defined (HAVE_prologue) || defined (HAVE_epilogue) \
5651     || defined (HAVE_sibcall_epilogue)
5652   /* Since the hash table is created on demand, the fact that it is
5653      non-null is a signal that it is non-empty.  */
5654   if (prologue_insn_hash != NULL)
5655     {
5656       size_t len = htab_elements (prologue_insn_hash);
5657       rtx insn, last = NULL, note = NULL;
5658
5659       /* Scan from the beginning until we reach the last prologue insn.  */
5660       /* ??? While we do have the CFG intact, there are two problems:
5661          (1) The prologue can contain loops (typically probing the stack),
5662              which means that the end of the prologue isn't in the first bb.
5663          (2) Sometimes the PROLOGUE_END note gets pushed into the next bb.  */
5664       for (insn = get_insns (); insn; insn = NEXT_INSN (insn))
5665         {
5666           if (NOTE_P (insn))
5667             {
5668               if (NOTE_KIND (insn) == NOTE_INSN_PROLOGUE_END)
5669                 note = insn;
5670             }
5671           else if (contains (insn, prologue_insn_hash))
5672             {
5673               last = insn;
5674               if (--len == 0)
5675                 break;
5676             }
5677         }
5678
5679       if (last)
5680         {
5681           if (note == NULL)
5682             {
5683               /* Scan forward looking for the PROLOGUE_END note.  It should
5684                  be right at the beginning of the block, possibly with other
5685                  insn notes that got moved there.  */
5686               for (note = NEXT_INSN (last); ; note = NEXT_INSN (note))
5687                 {
5688                   if (NOTE_P (note)
5689                       && NOTE_KIND (note) == NOTE_INSN_PROLOGUE_END)
5690                     break;
5691                 }
5692             }
5693
5694           /* Avoid placing note between CODE_LABEL and BASIC_BLOCK note.  */
5695           if (LABEL_P (last))
5696             last = NEXT_INSN (last);
5697           reorder_insns (note, note, last);
5698         }
5699     }
5700
5701   if (epilogue_insn_hash != NULL)
5702     {
5703       edge_iterator ei;
5704       edge e;
5705
5706       FOR_EACH_EDGE (e, ei, EXIT_BLOCK_PTR->preds)
5707         {
5708           rtx insn, first = NULL, note = NULL;
5709           basic_block bb = e->src;
5710
5711           /* Scan from the beginning until we reach the first epilogue insn. */
5712           FOR_BB_INSNS (bb, insn)
5713             {
5714               if (NOTE_P (insn))
5715                 {
5716                   if (NOTE_KIND (insn) == NOTE_INSN_EPILOGUE_BEG)
5717                     {
5718                       note = insn;
5719                       if (first != NULL)
5720                         break;
5721                     }
5722                 }
5723               else if (first == NULL && contains (insn, epilogue_insn_hash))
5724                 {
5725                   first = insn;
5726                   if (note != NULL)
5727                     break;
5728                 }
5729             }
5730
5731           if (note)
5732             {
5733               /* If the function has a single basic block, and no real
5734                  epilogue insns (e.g. sibcall with no cleanup), the
5735                  epilogue note can get scheduled before the prologue
5736                  note.  If we have frame related prologue insns, having
5737                  them scanned during the epilogue will result in a crash.
5738                  In this case re-order the epilogue note to just before
5739                  the last insn in the block.  */
5740               if (first == NULL)
5741                 first = BB_END (bb);
5742
5743               if (PREV_INSN (first) != note)
5744                 reorder_insns (note, note, PREV_INSN (first));
5745             }
5746         }
5747     }
5748 #endif /* HAVE_prologue or HAVE_epilogue */
5749 }
5750
5751 /* Returns the name of the current function.  */
5752 const char *
5753 current_function_name (void)
5754 {
5755   if (cfun == NULL)
5756     return "<none>";
5757   return lang_hooks.decl_printable_name (cfun->decl, 2);
5758 }
5759 \f
5760
5761 static unsigned int
5762 rest_of_handle_check_leaf_regs (void)
5763 {
5764 #ifdef LEAF_REGISTERS
5765   current_function_uses_only_leaf_regs
5766     = optimize > 0 && only_leaf_regs_used () && leaf_function_p ();
5767 #endif
5768   return 0;
5769 }
5770
5771 /* Insert a TYPE into the used types hash table of CFUN.  */
5772
5773 static void
5774 used_types_insert_helper (tree type, struct function *func)
5775 {
5776   if (type != NULL && func != NULL)
5777     {
5778       void **slot;
5779
5780       if (func->used_types_hash == NULL)
5781         func->used_types_hash = htab_create_ggc (37, htab_hash_pointer,
5782                                                  htab_eq_pointer, NULL);
5783       slot = htab_find_slot (func->used_types_hash, type, INSERT);
5784       if (*slot == NULL)
5785         *slot = type;
5786     }
5787 }
5788
5789 /* Given a type, insert it into the used hash table in cfun.  */
5790 void
5791 used_types_insert (tree t)
5792 {
5793   while (POINTER_TYPE_P (t) || TREE_CODE (t) == ARRAY_TYPE)
5794     if (TYPE_NAME (t))
5795       break;
5796     else
5797       t = TREE_TYPE (t);
5798   if (TREE_CODE (t) == ERROR_MARK)
5799     return;
5800   if (TYPE_NAME (t) == NULL_TREE
5801       || TYPE_NAME (t) == TYPE_NAME (TYPE_MAIN_VARIANT (t)))
5802     t = TYPE_MAIN_VARIANT (t);
5803   if (debug_info_level > DINFO_LEVEL_NONE)
5804     {
5805       if (cfun)
5806         used_types_insert_helper (t, cfun);
5807       else
5808         /* So this might be a type referenced by a global variable.
5809            Record that type so that we can later decide to emit its debug
5810            information.  */
5811         VEC_safe_push (tree, gc, types_used_by_cur_var_decl, t);
5812     }
5813 }
5814
5815 /* Helper to Hash a struct types_used_by_vars_entry.  */
5816
5817 static hashval_t
5818 hash_types_used_by_vars_entry (const struct types_used_by_vars_entry *entry)
5819 {
5820   gcc_assert (entry && entry->var_decl && entry->type);
5821
5822   return iterative_hash_object (entry->type,
5823                                 iterative_hash_object (entry->var_decl, 0));
5824 }
5825
5826 /* Hash function of the types_used_by_vars_entry hash table.  */
5827
5828 hashval_t
5829 types_used_by_vars_do_hash (const void *x)
5830 {
5831   const struct types_used_by_vars_entry *entry =
5832     (const struct types_used_by_vars_entry *) x;
5833
5834   return hash_types_used_by_vars_entry (entry);
5835 }
5836
5837 /*Equality function of the types_used_by_vars_entry hash table.  */
5838
5839 int
5840 types_used_by_vars_eq (const void *x1, const void *x2)
5841 {
5842   const struct types_used_by_vars_entry *e1 =
5843     (const struct types_used_by_vars_entry *) x1;
5844   const struct types_used_by_vars_entry *e2 =
5845     (const struct types_used_by_vars_entry *)x2;
5846
5847   return (e1->var_decl == e2->var_decl && e1->type == e2->type);
5848 }
5849
5850 /* Inserts an entry into the types_used_by_vars_hash hash table. */
5851
5852 void
5853 types_used_by_var_decl_insert (tree type, tree var_decl)
5854 {
5855   if (type != NULL && var_decl != NULL)
5856     {
5857       void **slot;
5858       struct types_used_by_vars_entry e;
5859       e.var_decl = var_decl;
5860       e.type = type;
5861       if (types_used_by_vars_hash == NULL)
5862         types_used_by_vars_hash =
5863           htab_create_ggc (37, types_used_by_vars_do_hash,
5864                            types_used_by_vars_eq, NULL);
5865       slot = htab_find_slot_with_hash (types_used_by_vars_hash, &e,
5866                                        hash_types_used_by_vars_entry (&e), INSERT);
5867       if (*slot == NULL)
5868         {
5869           struct types_used_by_vars_entry *entry;
5870           entry = ggc_alloc_types_used_by_vars_entry ();
5871           entry->type = type;
5872           entry->var_decl = var_decl;
5873           *slot = entry;
5874         }
5875     }
5876 }
5877
5878 struct rtl_opt_pass pass_leaf_regs =
5879 {
5880  {
5881   RTL_PASS,
5882   "*leaf_regs",                         /* name */
5883   NULL,                                 /* gate */
5884   rest_of_handle_check_leaf_regs,       /* execute */
5885   NULL,                                 /* sub */
5886   NULL,                                 /* next */
5887   0,                                    /* static_pass_number */
5888   TV_NONE,                              /* tv_id */
5889   0,                                    /* properties_required */
5890   0,                                    /* properties_provided */
5891   0,                                    /* properties_destroyed */
5892   0,                                    /* todo_flags_start */
5893   0                                     /* todo_flags_finish */
5894  }
5895 };
5896
5897 static unsigned int
5898 rest_of_handle_thread_prologue_and_epilogue (void)
5899 {
5900   if (optimize)
5901     cleanup_cfg (CLEANUP_EXPENSIVE);
5902
5903   /* On some machines, the prologue and epilogue code, or parts thereof,
5904      can be represented as RTL.  Doing so lets us schedule insns between
5905      it and the rest of the code and also allows delayed branch
5906      scheduling to operate in the epilogue.  */
5907   thread_prologue_and_epilogue_insns ();
5908
5909   /* The stack usage info is finalized during prologue expansion.  */
5910   if (flag_stack_usage)
5911     output_stack_usage ();
5912
5913   return 0;
5914 }
5915
5916 struct rtl_opt_pass pass_thread_prologue_and_epilogue =
5917 {
5918  {
5919   RTL_PASS,
5920   "pro_and_epilogue",                   /* name */
5921   NULL,                                 /* gate */
5922   rest_of_handle_thread_prologue_and_epilogue, /* execute */
5923   NULL,                                 /* sub */
5924   NULL,                                 /* next */
5925   0,                                    /* static_pass_number */
5926   TV_THREAD_PROLOGUE_AND_EPILOGUE,      /* tv_id */
5927   0,                                    /* properties_required */
5928   0,                                    /* properties_provided */
5929   0,                                    /* properties_destroyed */
5930   TODO_verify_flow,                     /* todo_flags_start */
5931   TODO_dump_func |
5932   TODO_df_verify |
5933   TODO_df_finish | TODO_verify_rtl_sharing |
5934   TODO_ggc_collect                      /* todo_flags_finish */
5935  }
5936 };
5937 \f
5938
5939 /* This mini-pass fixes fall-out from SSA in asm statements that have
5940    in-out constraints.  Say you start with
5941
5942      orig = inout;
5943      asm ("": "+mr" (inout));
5944      use (orig);
5945
5946    which is transformed very early to use explicit output and match operands:
5947
5948      orig = inout;
5949      asm ("": "=mr" (inout) : "0" (inout));
5950      use (orig);
5951
5952    Or, after SSA and copyprop,
5953
5954      asm ("": "=mr" (inout_2) : "0" (inout_1));
5955      use (inout_1);
5956
5957    Clearly inout_2 and inout_1 can't be coalesced easily anymore, as
5958    they represent two separate values, so they will get different pseudo
5959    registers during expansion.  Then, since the two operands need to match
5960    per the constraints, but use different pseudo registers, reload can
5961    only register a reload for these operands.  But reloads can only be
5962    satisfied by hardregs, not by memory, so we need a register for this
5963    reload, just because we are presented with non-matching operands.
5964    So, even though we allow memory for this operand, no memory can be
5965    used for it, just because the two operands don't match.  This can
5966    cause reload failures on register-starved targets.
5967
5968    So it's a symptom of reload not being able to use memory for reloads
5969    or, alternatively it's also a symptom of both operands not coming into
5970    reload as matching (in which case the pseudo could go to memory just
5971    fine, as the alternative allows it, and no reload would be necessary).
5972    We fix the latter problem here, by transforming
5973
5974      asm ("": "=mr" (inout_2) : "0" (inout_1));
5975
5976    back to
5977
5978      inout_2 = inout_1;
5979      asm ("": "=mr" (inout_2) : "0" (inout_2));  */
5980
5981 static void
5982 match_asm_constraints_1 (rtx insn, rtx *p_sets, int noutputs)
5983 {
5984   int i;
5985   bool changed = false;
5986   rtx op = SET_SRC (p_sets[0]);
5987   int ninputs = ASM_OPERANDS_INPUT_LENGTH (op);
5988   rtvec inputs = ASM_OPERANDS_INPUT_VEC (op);
5989   bool *output_matched = XALLOCAVEC (bool, noutputs);
5990
5991   memset (output_matched, 0, noutputs * sizeof (bool));
5992   for (i = 0; i < ninputs; i++)
5993     {
5994       rtx input, output, insns;
5995       const char *constraint = ASM_OPERANDS_INPUT_CONSTRAINT (op, i);
5996       char *end;
5997       int match, j;
5998
5999       if (*constraint == '%')
6000         constraint++;
6001
6002       match = strtoul (constraint, &end, 10);
6003       if (end == constraint)
6004         continue;
6005
6006       gcc_assert (match < noutputs);
6007       output = SET_DEST (p_sets[match]);
6008       input = RTVEC_ELT (inputs, i);
6009       /* Only do the transformation for pseudos.  */
6010       if (! REG_P (output)
6011           || rtx_equal_p (output, input)
6012           || (GET_MODE (input) != VOIDmode
6013               && GET_MODE (input) != GET_MODE (output)))
6014         continue;
6015
6016       /* We can't do anything if the output is also used as input,
6017          as we're going to overwrite it.  */
6018       for (j = 0; j < ninputs; j++)
6019         if (reg_overlap_mentioned_p (output, RTVEC_ELT (inputs, j)))
6020           break;
6021       if (j != ninputs)
6022         continue;
6023
6024       /* Avoid changing the same input several times.  For
6025          asm ("" : "=mr" (out1), "=mr" (out2) : "0" (in), "1" (in));
6026          only change in once (to out1), rather than changing it
6027          first to out1 and afterwards to out2.  */
6028       if (i > 0)
6029         {
6030           for (j = 0; j < noutputs; j++)
6031             if (output_matched[j] && input == SET_DEST (p_sets[j]))
6032               break;
6033           if (j != noutputs)
6034             continue;
6035         }
6036       output_matched[match] = true;
6037
6038       start_sequence ();
6039       emit_move_insn (output, input);
6040       insns = get_insns ();
6041       end_sequence ();
6042       emit_insn_before (insns, insn);
6043
6044       /* Now replace all mentions of the input with output.  We can't
6045          just replace the occurrence in inputs[i], as the register might
6046          also be used in some other input (or even in an address of an
6047          output), which would mean possibly increasing the number of
6048          inputs by one (namely 'output' in addition), which might pose
6049          a too complicated problem for reload to solve.  E.g. this situation:
6050
6051            asm ("" : "=r" (output), "=m" (input) : "0" (input))
6052
6053          Here 'input' is used in two occurrences as input (once for the
6054          input operand, once for the address in the second output operand).
6055          If we would replace only the occurrence of the input operand (to
6056          make the matching) we would be left with this:
6057
6058            output = input
6059            asm ("" : "=r" (output), "=m" (input) : "0" (output))
6060
6061          Now we suddenly have two different input values (containing the same
6062          value, but different pseudos) where we formerly had only one.
6063          With more complicated asms this might lead to reload failures
6064          which wouldn't have happen without this pass.  So, iterate over
6065          all operands and replace all occurrences of the register used.  */
6066       for (j = 0; j < noutputs; j++)
6067         if (!rtx_equal_p (SET_DEST (p_sets[j]), input)
6068             && reg_overlap_mentioned_p (input, SET_DEST (p_sets[j])))
6069           SET_DEST (p_sets[j]) = replace_rtx (SET_DEST (p_sets[j]),
6070                                               input, output);
6071       for (j = 0; j < ninputs; j++)
6072         if (reg_overlap_mentioned_p (input, RTVEC_ELT (inputs, j)))
6073           RTVEC_ELT (inputs, j) = replace_rtx (RTVEC_ELT (inputs, j),
6074                                                input, output);
6075
6076       changed = true;
6077     }
6078
6079   if (changed)
6080     df_insn_rescan (insn);
6081 }
6082
6083 static unsigned
6084 rest_of_match_asm_constraints (void)
6085 {
6086   basic_block bb;
6087   rtx insn, pat, *p_sets;
6088   int noutputs;
6089
6090   if (!crtl->has_asm_statement)
6091     return 0;
6092
6093   df_set_flags (DF_DEFER_INSN_RESCAN);
6094   FOR_EACH_BB (bb)
6095     {
6096       FOR_BB_INSNS (bb, insn)
6097         {
6098           if (!INSN_P (insn))
6099             continue;
6100
6101           pat = PATTERN (insn);
6102           if (GET_CODE (pat) == PARALLEL)
6103             p_sets = &XVECEXP (pat, 0, 0), noutputs = XVECLEN (pat, 0);
6104           else if (GET_CODE (pat) == SET)
6105             p_sets = &PATTERN (insn), noutputs = 1;
6106           else
6107             continue;
6108
6109           if (GET_CODE (*p_sets) == SET
6110               && GET_CODE (SET_SRC (*p_sets)) == ASM_OPERANDS)
6111             match_asm_constraints_1 (insn, p_sets, noutputs);
6112          }
6113     }
6114
6115   return TODO_df_finish;
6116 }
6117
6118 struct rtl_opt_pass pass_match_asm_constraints =
6119 {
6120  {
6121   RTL_PASS,
6122   "asmcons",                            /* name */
6123   NULL,                                 /* gate */
6124   rest_of_match_asm_constraints,        /* execute */
6125   NULL,                                 /* sub */
6126   NULL,                                 /* next */
6127   0,                                    /* static_pass_number */
6128   TV_NONE,                              /* tv_id */
6129   0,                                    /* properties_required */
6130   0,                                    /* properties_provided */
6131   0,                                    /* properties_destroyed */
6132   0,                                    /* todo_flags_start */
6133   TODO_dump_func                       /* todo_flags_finish */
6134  }
6135 };
6136
6137
6138 #include "gt-function.h"