OSDN Git Service

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