OSDN Git Service

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