OSDN Git Service

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