OSDN Git Service

Support for dllimport and dllexport attributes for i386-pe.
[pf3gnuchains/gcc-fork.git] / gcc / reload1.c
1 /* Reload pseudo regs into hard regs for insns that require hard regs.
2    Copyright (C) 1987, 88, 89, 92-97, 1998 Free Software Foundation, Inc.
3
4 This file is part of GNU CC.
5
6 GNU CC is free software; you can redistribute it and/or modify
7 it under the terms of the GNU General Public License as published by
8 the Free Software Foundation; either version 2, or (at your option)
9 any later version.
10
11 GNU CC is distributed in the hope that it will be useful,
12 but WITHOUT ANY WARRANTY; without even the implied warranty of
13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14 GNU General Public License for more details.
15
16 You should have received a copy of the GNU General Public License
17 along with GNU CC; see the file COPYING.  If not, write to
18 the Free Software Foundation, 59 Temple Place - Suite 330,
19 Boston, MA 02111-1307, USA.  */
20
21
22 #include "config.h"
23 #include "system.h"
24
25 #include "machmode.h"
26 #include "hard-reg-set.h"
27 #include "rtl.h"
28 #include "obstack.h"
29 #include "insn-config.h"
30 #include "insn-flags.h"
31 #include "insn-codes.h"
32 #include "flags.h"
33 #include "expr.h"
34 #include "regs.h"
35 #include "reload.h"
36 #include "recog.h"
37 #include "basic-block.h"
38 #include "output.h"
39 #include "real.h"
40 #include "toplev.h"
41
42 /* This file contains the reload pass of the compiler, which is
43    run after register allocation has been done.  It checks that
44    each insn is valid (operands required to be in registers really
45    are in registers of the proper class) and fixes up invalid ones
46    by copying values temporarily into registers for the insns
47    that need them.
48
49    The results of register allocation are described by the vector
50    reg_renumber; the insns still contain pseudo regs, but reg_renumber
51    can be used to find which hard reg, if any, a pseudo reg is in.
52
53    The technique we always use is to free up a few hard regs that are
54    called ``reload regs'', and for each place where a pseudo reg
55    must be in a hard reg, copy it temporarily into one of the reload regs.
56
57    All the pseudos that were formerly allocated to the hard regs that
58    are now in use as reload regs must be ``spilled''.  This means
59    that they go to other hard regs, or to stack slots if no other
60    available hard regs can be found.  Spilling can invalidate more
61    insns, requiring additional need for reloads, so we must keep checking
62    until the process stabilizes.
63
64    For machines with different classes of registers, we must keep track
65    of the register class needed for each reload, and make sure that
66    we allocate enough reload registers of each class.
67
68    The file reload.c contains the code that checks one insn for
69    validity and reports the reloads that it needs.  This file
70    is in charge of scanning the entire rtl code, accumulating the
71    reload needs, spilling, assigning reload registers to use for
72    fixing up each insn, and generating the new insns to copy values
73    into the reload registers.  */
74
75
76 #ifndef REGISTER_MOVE_COST
77 #define REGISTER_MOVE_COST(x, y) 2
78 #endif
79 \f
80 /* During reload_as_needed, element N contains a REG rtx for the hard reg
81    into which reg N has been reloaded (perhaps for a previous insn).  */
82 static rtx *reg_last_reload_reg;
83
84 /* Elt N nonzero if reg_last_reload_reg[N] has been set in this insn
85    for an output reload that stores into reg N.  */
86 static char *reg_has_output_reload;
87
88 /* Indicates which hard regs are reload-registers for an output reload
89    in the current insn.  */
90 static HARD_REG_SET reg_is_output_reload;
91
92 /* Element N is the constant value to which pseudo reg N is equivalent,
93    or zero if pseudo reg N is not equivalent to a constant.
94    find_reloads looks at this in order to replace pseudo reg N
95    with the constant it stands for.  */
96 rtx *reg_equiv_constant;
97
98 /* Element N is a memory location to which pseudo reg N is equivalent,
99    prior to any register elimination (such as frame pointer to stack
100    pointer).  Depending on whether or not it is a valid address, this value
101    is transferred to either reg_equiv_address or reg_equiv_mem.  */
102 rtx *reg_equiv_memory_loc;
103
104 /* Element N is the address of stack slot to which pseudo reg N is equivalent.
105    This is used when the address is not valid as a memory address
106    (because its displacement is too big for the machine.)  */
107 rtx *reg_equiv_address;
108
109 /* Element N is the memory slot to which pseudo reg N is equivalent,
110    or zero if pseudo reg N is not equivalent to a memory slot.  */
111 rtx *reg_equiv_mem;
112
113 /* Widest width in which each pseudo reg is referred to (via subreg).  */
114 static int *reg_max_ref_width;
115
116 /* Element N is the insn that initialized reg N from its equivalent
117    constant or memory slot.  */
118 static rtx *reg_equiv_init;
119
120 /* During reload_as_needed, element N contains the last pseudo regno reloaded
121   into hard register N.  If that pseudo reg occupied more than one register,
122    reg_reloaded_contents points to that pseudo for each spill register in
123    use; all of these must remain set for an inheritance to occur.  */
124 static int reg_reloaded_contents[FIRST_PSEUDO_REGISTER];
125
126 /* During reload_as_needed, element N contains the insn for which
127    hard register N was last used.   Its contents are significant only
128    when reg_reloaded_valid is set for this register.  */
129 static rtx reg_reloaded_insn[FIRST_PSEUDO_REGISTER];
130
131 /* Indicate if reg_reloaded_insn / reg_reloaded_contents is valid */
132 static HARD_REG_SET reg_reloaded_valid;
133 /* Indicate if the register was dead at the end of the reload.
134    This is only valid if reg_reloaded_contents is set and valid.  */
135 static HARD_REG_SET reg_reloaded_dead;
136
137 /* Number of spill-regs so far; number of valid elements of spill_regs.  */
138 static int n_spills;
139
140 /* In parallel with spill_regs, contains REG rtx's for those regs.
141    Holds the last rtx used for any given reg, or 0 if it has never
142    been used for spilling yet.  This rtx is reused, provided it has
143    the proper mode.  */
144 static rtx spill_reg_rtx[FIRST_PSEUDO_REGISTER];
145
146 /* In parallel with spill_regs, contains nonzero for a spill reg
147    that was stored after the last time it was used.
148    The precise value is the insn generated to do the store.  */
149 static rtx spill_reg_store[FIRST_PSEUDO_REGISTER];
150
151 /* This table is the inverse mapping of spill_regs:
152    indexed by hard reg number,
153    it contains the position of that reg in spill_regs,
154    or -1 for something that is not in spill_regs.  */
155 static short spill_reg_order[FIRST_PSEUDO_REGISTER];
156
157 /* This reg set indicates registers that may not be used for retrying global
158    allocation.  The registers that may not be used include all spill registers
159    and the frame pointer (if we are using one).  */
160 HARD_REG_SET forbidden_regs;
161
162 /* This reg set indicates registers that are not good for spill registers.
163    They will not be used to complete groups of spill registers.  This includes
164    all fixed registers, registers that may be eliminated, and, if
165    SMALL_REGISTER_CLASSES is zero, registers explicitly used in the rtl.
166
167    (spill_reg_order prevents these registers from being used to start a
168    group.)  */
169 static HARD_REG_SET bad_spill_regs;
170
171 /* Describes order of use of registers for reloading
172    of spilled pseudo-registers.  `spills' is the number of
173    elements that are actually valid; new ones are added at the end.  */
174 static short spill_regs[FIRST_PSEUDO_REGISTER];
175
176 /* This reg set indicates those registers that have been used a spill
177    registers.  This information is used in reorg.c, to help figure out
178    what registers are live at any point.  It is assumed that all spill_regs
179    are dead at every CODE_LABEL.  */
180
181 HARD_REG_SET used_spill_regs;
182
183 /* Index of last register assigned as a spill register.  We allocate in
184    a round-robin fashion.  */
185
186 static int last_spill_reg;
187
188 /* Describes order of preference for putting regs into spill_regs.
189    Contains the numbers of all the hard regs, in order most preferred first.
190    This order is different for each function.
191    It is set up by order_regs_for_reload.
192    Empty elements at the end contain -1.  */
193 static short potential_reload_regs[FIRST_PSEUDO_REGISTER];
194
195 /* 1 for a hard register that appears explicitly in the rtl
196    (for example, function value registers, special registers
197    used by insns, structure value pointer registers).  */
198 static char regs_explicitly_used[FIRST_PSEUDO_REGISTER];
199
200 /* Indicates if a register was counted against the need for
201    groups.  0 means it can count against max_nongroup instead.  */
202 static HARD_REG_SET counted_for_groups;
203
204 /* Indicates if a register was counted against the need for
205    non-groups.  0 means it can become part of a new group.
206    During choose_reload_regs, 1 here means don't use this reg
207    as part of a group, even if it seems to be otherwise ok.  */
208 static HARD_REG_SET counted_for_nongroups;
209
210 /* Nonzero if indirect addressing is supported on the machine; this means
211    that spilling (REG n) does not require reloading it into a register in
212    order to do (MEM (REG n)) or (MEM (PLUS (REG n) (CONST_INT c))).  The
213    value indicates the level of indirect addressing supported, e.g., two
214    means that (MEM (MEM (REG n))) is also valid if (REG n) does not get
215    a hard register.  */
216
217 static char spill_indirect_levels;
218
219 /* Nonzero if indirect addressing is supported when the innermost MEM is
220    of the form (MEM (SYMBOL_REF sym)).  It is assumed that the level to
221    which these are valid is the same as spill_indirect_levels, above.   */
222
223 char indirect_symref_ok;
224
225 /* Nonzero if an address (plus (reg frame_pointer) (reg ...)) is valid.  */
226
227 char double_reg_address_ok;
228
229 /* Record the stack slot for each spilled hard register.  */
230
231 static rtx spill_stack_slot[FIRST_PSEUDO_REGISTER];
232
233 /* Width allocated so far for that stack slot.  */
234
235 static int spill_stack_slot_width[FIRST_PSEUDO_REGISTER];
236
237 /* Indexed by register class and basic block number, nonzero if there is
238    any need for a spill register of that class in that basic block.
239    The pointer is 0 if we did stupid allocation and don't know
240    the structure of basic blocks.  */
241
242 char *basic_block_needs[N_REG_CLASSES];
243
244 /* First uid used by insns created by reload in this function.
245    Used in find_equiv_reg.  */
246 int reload_first_uid;
247
248 /* Flag set by local-alloc or global-alloc if anything is live in
249    a call-clobbered reg across calls.  */
250
251 int caller_save_needed;
252
253 /* The register class to use for a base register when reloading an
254    address.  This is normally BASE_REG_CLASS, but it may be different
255    when using SMALL_REGISTER_CLASSES and passing parameters in
256    registers.  */
257 enum reg_class reload_address_base_reg_class;
258
259 /* The register class to use for an index register when reloading an
260    address.  This is normally INDEX_REG_CLASS, but it may be different
261    when using SMALL_REGISTER_CLASSES and passing parameters in
262    registers.  */
263 enum reg_class reload_address_index_reg_class;
264
265 /* Set to 1 while reload_as_needed is operating.
266    Required by some machines to handle any generated moves differently.  */
267
268 int reload_in_progress = 0;
269
270 /* These arrays record the insn_code of insns that may be needed to
271    perform input and output reloads of special objects.  They provide a
272    place to pass a scratch register.  */
273
274 enum insn_code reload_in_optab[NUM_MACHINE_MODES];
275 enum insn_code reload_out_optab[NUM_MACHINE_MODES];
276
277 /* This obstack is used for allocation of rtl during register elimination.
278    The allocated storage can be freed once find_reloads has processed the
279    insn.  */
280
281 struct obstack reload_obstack;
282 char *reload_firstobj;
283
284 #define obstack_chunk_alloc xmalloc
285 #define obstack_chunk_free free
286
287 /* List of labels that must never be deleted.  */
288 extern rtx forced_labels;
289
290 /* Allocation number table from global register allocation.  */
291 extern int *reg_allocno;
292 \f
293 /* This structure is used to record information about register eliminations.
294    Each array entry describes one possible way of eliminating a register
295    in favor of another.   If there is more than one way of eliminating a
296    particular register, the most preferred should be specified first.  */
297
298 static struct elim_table
299 {
300   int from;                     /* Register number to be eliminated.  */
301   int to;                       /* Register number used as replacement.  */
302   int initial_offset;           /* Initial difference between values.  */
303   int can_eliminate;            /* Non-zero if this elimination can be done.  */
304   int can_eliminate_previous;   /* Value of CAN_ELIMINATE in previous scan over
305                                    insns made by reload.  */
306   int offset;                   /* Current offset between the two regs.  */
307   int max_offset;               /* Maximum offset between the two regs.  */
308   int previous_offset;          /* Offset at end of previous insn.  */
309   int ref_outside_mem;          /* "to" has been referenced outside a MEM.  */
310   rtx from_rtx;                 /* REG rtx for the register to be eliminated.
311                                    We cannot simply compare the number since
312                                    we might then spuriously replace a hard
313                                    register corresponding to a pseudo
314                                    assigned to the reg to be eliminated.  */
315   rtx to_rtx;                   /* REG rtx for the replacement.  */
316 } reg_eliminate[] =
317
318 /* If a set of eliminable registers was specified, define the table from it.
319    Otherwise, default to the normal case of the frame pointer being
320    replaced by the stack pointer.  */
321
322 #ifdef ELIMINABLE_REGS
323   ELIMINABLE_REGS;
324 #else
325   {{ FRAME_POINTER_REGNUM, STACK_POINTER_REGNUM}};
326 #endif
327
328 #define NUM_ELIMINABLE_REGS (sizeof reg_eliminate / sizeof reg_eliminate[0])
329
330 /* Record the number of pending eliminations that have an offset not equal
331    to their initial offset.  If non-zero, we use a new copy of each
332    replacement result in any insns encountered.  */
333 static int num_not_at_initial_offset;
334
335 /* Count the number of registers that we may be able to eliminate.  */
336 static int num_eliminable;
337
338 /* For each label, we record the offset of each elimination.  If we reach
339    a label by more than one path and an offset differs, we cannot do the
340    elimination.  This information is indexed by the number of the label.
341    The first table is an array of flags that records whether we have yet
342    encountered a label and the second table is an array of arrays, one
343    entry in the latter array for each elimination.  */
344
345 static char *offsets_known_at;
346 static int (*offsets_at)[NUM_ELIMINABLE_REGS];
347
348 /* Number of labels in the current function.  */
349
350 static int num_labels;
351
352 struct hard_reg_n_uses { int regno; int uses; };
353 \f
354 static int possible_group_p             PROTO((int, int *));
355 static void count_possible_groups       PROTO((int *, enum machine_mode *,
356                                                int *, int));
357 static int modes_equiv_for_class_p      PROTO((enum machine_mode,
358                                                enum machine_mode,
359                                                enum reg_class));
360 static void spill_failure               PROTO((rtx));
361 static int new_spill_reg                PROTO((int, int, int *, int *, int,
362                                                FILE *));
363 static void delete_dead_insn            PROTO((rtx));
364 static void alter_reg                   PROTO((int, int));
365 static void mark_scratch_live           PROTO((rtx));
366 static void set_label_offsets           PROTO((rtx, rtx, int));
367 static int eliminate_regs_in_insn       PROTO((rtx, int));
368 static void mark_not_eliminable         PROTO((rtx, rtx));
369 static int spill_hard_reg               PROTO((int, int, FILE *, int));
370 static void scan_paradoxical_subregs    PROTO((rtx));
371 static int hard_reg_use_compare         PROTO((const GENERIC_PTR, const GENERIC_PTR));
372 static void order_regs_for_reload       PROTO((int));
373 static int compare_spill_regs           PROTO((const GENERIC_PTR, const GENERIC_PTR));
374 static void reload_as_needed            PROTO((rtx, int));
375 static void forget_old_reloads_1        PROTO((rtx, rtx));
376 static int reload_reg_class_lower       PROTO((const GENERIC_PTR, const GENERIC_PTR));
377 static void mark_reload_reg_in_use      PROTO((int, int, enum reload_type,
378                                                enum machine_mode));
379 static void clear_reload_reg_in_use     PROTO((int, int, enum reload_type,
380                                                enum machine_mode));
381 static int reload_reg_free_p            PROTO((int, int, enum reload_type));
382 static int reload_reg_free_before_p     PROTO((int, int, enum reload_type));
383 static int reload_reg_free_for_value_p  PROTO((int, int, enum reload_type, rtx, rtx, int));
384 static int reload_reg_reaches_end_p     PROTO((int, int, enum reload_type));
385 static int allocate_reload_reg          PROTO((int, rtx, int, int));
386 static void choose_reload_regs          PROTO((rtx, rtx));
387 static void merge_assigned_reloads      PROTO((rtx));
388 static void emit_reload_insns           PROTO((rtx));
389 static void delete_output_reload        PROTO((rtx, int, rtx));
390 static void inc_for_reload              PROTO((rtx, rtx, int));
391 static int constraint_accepts_reg_p     PROTO((char *, rtx));
392 static void reload_cse_invalidate_regno PROTO((int, enum machine_mode, int));
393 static int reload_cse_mem_conflict_p    PROTO((rtx, rtx));
394 static void reload_cse_invalidate_mem   PROTO((rtx));
395 static void reload_cse_invalidate_rtx   PROTO((rtx, rtx));
396 static int reload_cse_regno_equal_p     PROTO((int, rtx, enum machine_mode));
397 static int reload_cse_noop_set_p        PROTO((rtx, rtx));
398 static int reload_cse_simplify_set      PROTO((rtx, rtx));
399 static int reload_cse_simplify_operands PROTO((rtx));
400 static void reload_cse_check_clobber    PROTO((rtx, rtx));
401 static void reload_cse_record_set       PROTO((rtx, rtx));
402 static void reload_cse_delete_death_notes       PROTO((rtx));
403 static void reload_cse_no_longer_dead   PROTO((int, enum machine_mode));
404 \f
405 /* Initialize the reload pass once per compilation.  */
406
407 void
408 init_reload ()
409 {
410   register int i;
411
412   /* Often (MEM (REG n)) is still valid even if (REG n) is put on the stack.
413      Set spill_indirect_levels to the number of levels such addressing is
414      permitted, zero if it is not permitted at all.  */
415
416   register rtx tem
417     = gen_rtx_MEM (Pmode,
418                    gen_rtx_PLUS (Pmode,
419                                  gen_rtx_REG (Pmode, LAST_VIRTUAL_REGISTER + 1),
420                                  GEN_INT (4)));
421   spill_indirect_levels = 0;
422
423   while (memory_address_p (QImode, tem))
424     {
425       spill_indirect_levels++;
426       tem = gen_rtx_MEM (Pmode, tem);
427     }
428
429   /* See if indirect addressing is valid for (MEM (SYMBOL_REF ...)).  */
430
431   tem = gen_rtx_MEM (Pmode, gen_rtx_SYMBOL_REF (Pmode, "foo"));
432   indirect_symref_ok = memory_address_p (QImode, tem);
433
434   /* See if reg+reg is a valid (and offsettable) address.  */
435
436   for (i = 0; i < FIRST_PSEUDO_REGISTER; i++)
437     {
438       tem = gen_rtx_PLUS (Pmode,
439                           gen_rtx_REG (Pmode, HARD_FRAME_POINTER_REGNUM),
440                           gen_rtx_REG (Pmode, i));
441       /* This way, we make sure that reg+reg is an offsettable address.  */
442       tem = plus_constant (tem, 4);
443
444       if (memory_address_p (QImode, tem))
445         {
446           double_reg_address_ok = 1;
447           break;
448         }
449     }
450
451   /* Initialize obstack for our rtl allocation.  */
452   gcc_obstack_init (&reload_obstack);
453   reload_firstobj = (char *) obstack_alloc (&reload_obstack, 0);
454
455   /* Decide which register class should be used when reloading
456      addresses.  If we are using SMALL_REGISTER_CLASSES, and any
457      parameters are passed in registers, then we do not want to use
458      those registers when reloading an address.  Otherwise, if a
459      function argument needs a reload, we may wind up clobbering
460      another argument to the function which was already computed.  If
461      we find a subset class which simply avoids those registers, we
462      use it instead.  ??? It would be better to only use the
463      restricted class when we actually are loading function arguments,
464      but that is hard to determine.  */
465   reload_address_base_reg_class = BASE_REG_CLASS;
466   reload_address_index_reg_class = INDEX_REG_CLASS;
467   if (SMALL_REGISTER_CLASSES)
468     {
469       int regno;
470       HARD_REG_SET base, index;
471       enum reg_class *p;
472
473       COPY_HARD_REG_SET (base, reg_class_contents[BASE_REG_CLASS]);
474       COPY_HARD_REG_SET (index, reg_class_contents[INDEX_REG_CLASS]);
475       for (regno = 0; regno < FIRST_PSEUDO_REGISTER; regno++)
476         {
477           if (FUNCTION_ARG_REGNO_P (regno))
478             {
479               CLEAR_HARD_REG_BIT (base, regno);
480               CLEAR_HARD_REG_BIT (index, regno);
481             }
482         }
483       
484       GO_IF_HARD_REG_EQUAL (base, reg_class_contents[BASE_REG_CLASS],
485                             baseok);
486       for (p = reg_class_subclasses[BASE_REG_CLASS];
487            *p != LIM_REG_CLASSES;
488            p++)
489         {
490           GO_IF_HARD_REG_EQUAL (base, reg_class_contents[*p], usebase);
491           continue;
492         usebase:
493           reload_address_base_reg_class = *p;
494           break;
495         }
496     baseok:;
497
498       GO_IF_HARD_REG_EQUAL (index, reg_class_contents[INDEX_REG_CLASS],
499                             indexok);
500       for (p = reg_class_subclasses[INDEX_REG_CLASS];
501            *p != LIM_REG_CLASSES;
502            p++)
503         {
504           GO_IF_HARD_REG_EQUAL (index, reg_class_contents[*p], useindex);
505           continue;
506         useindex:
507           reload_address_index_reg_class = *p;
508           break;
509         }
510     indexok:;
511     }
512 }
513
514 /* Main entry point for the reload pass.
515
516    FIRST is the first insn of the function being compiled.
517
518    GLOBAL nonzero means we were called from global_alloc
519    and should attempt to reallocate any pseudoregs that we
520    displace from hard regs we will use for reloads.
521    If GLOBAL is zero, we do not have enough information to do that,
522    so any pseudo reg that is spilled must go to the stack.
523
524    DUMPFILE is the global-reg debugging dump file stream, or 0.
525    If it is nonzero, messages are written to it to describe
526    which registers are seized as reload regs, which pseudo regs
527    are spilled from them, and where the pseudo regs are reallocated to.
528
529    Return value is nonzero if reload failed
530    and we must not do any more for this function.  */
531
532 int
533 reload (first, global, dumpfile)
534      rtx first;
535      int global;
536      FILE *dumpfile;
537 {
538   register int class;
539   register int i, j, k;
540   register rtx insn;
541   register struct elim_table *ep;
542
543   /* The two pointers used to track the true location of the memory used
544      for label offsets.  */
545   char *real_known_ptr = NULL_PTR;
546   int (*real_at_ptr)[NUM_ELIMINABLE_REGS];
547
548   int something_changed;
549   int something_needs_reloads;
550   int something_needs_elimination;
551   int new_basic_block_needs;
552   enum reg_class caller_save_spill_class = NO_REGS;
553   int caller_save_group_size = 1;
554
555   /* Nonzero means we couldn't get enough spill regs.  */
556   int failure = 0;
557
558   /* The basic block number currently being processed for INSN.  */
559   int this_block;
560
561   /* Make sure even insns with volatile mem refs are recognizable.  */
562   init_recog ();
563
564   /* Enable find_equiv_reg to distinguish insns made by reload.  */
565   reload_first_uid = get_max_uid ();
566
567   for (i = 0; i < N_REG_CLASSES; i++)
568     basic_block_needs[i] = 0;
569
570 #ifdef SECONDARY_MEMORY_NEEDED
571   /* Initialize the secondary memory table.  */
572   clear_secondary_mem ();
573 #endif
574
575   /* Remember which hard regs appear explicitly
576      before we merge into `regs_ever_live' the ones in which
577      pseudo regs have been allocated.  */
578   bcopy (regs_ever_live, regs_explicitly_used, sizeof regs_ever_live);
579
580   /* We don't have a stack slot for any spill reg yet.  */
581   bzero ((char *) spill_stack_slot, sizeof spill_stack_slot);
582   bzero ((char *) spill_stack_slot_width, sizeof spill_stack_slot_width);
583
584   /* Initialize the save area information for caller-save, in case some
585      are needed.  */
586   init_save_areas ();
587
588   /* Compute which hard registers are now in use
589      as homes for pseudo registers.
590      This is done here rather than (eg) in global_alloc
591      because this point is reached even if not optimizing.  */
592   for (i = FIRST_PSEUDO_REGISTER; i < max_regno; i++)
593     mark_home_live (i);
594
595   /* A function that receives a nonlocal goto must save all call-saved
596      registers.  */
597   if (current_function_has_nonlocal_label)
598     for (i = 0; i < FIRST_PSEUDO_REGISTER; i++)
599       {
600         if (! call_used_regs[i] && ! fixed_regs[i])
601           regs_ever_live[i] = 1;
602       }
603
604   for (i = 0; i < scratch_list_length; i++)
605     if (scratch_list[i])
606       mark_scratch_live (scratch_list[i]);
607
608   /* Make sure that the last insn in the chain
609      is not something that needs reloading.  */
610   emit_note (NULL_PTR, NOTE_INSN_DELETED);
611
612   /* Find all the pseudo registers that didn't get hard regs
613      but do have known equivalent constants or memory slots.
614      These include parameters (known equivalent to parameter slots)
615      and cse'd or loop-moved constant memory addresses.
616
617      Record constant equivalents in reg_equiv_constant
618      so they will be substituted by find_reloads.
619      Record memory equivalents in reg_mem_equiv so they can
620      be substituted eventually by altering the REG-rtx's.  */
621
622   reg_equiv_constant = (rtx *) alloca (max_regno * sizeof (rtx));
623   bzero ((char *) reg_equiv_constant, max_regno * sizeof (rtx));
624   reg_equiv_memory_loc = (rtx *) alloca (max_regno * sizeof (rtx));
625   bzero ((char *) reg_equiv_memory_loc, max_regno * sizeof (rtx));
626   reg_equiv_mem = (rtx *) alloca (max_regno * sizeof (rtx));
627   bzero ((char *) reg_equiv_mem, max_regno * sizeof (rtx));
628   reg_equiv_init = (rtx *) alloca (max_regno * sizeof (rtx));
629   bzero ((char *) reg_equiv_init, max_regno * sizeof (rtx));
630   reg_equiv_address = (rtx *) alloca (max_regno * sizeof (rtx));
631   bzero ((char *) reg_equiv_address, max_regno * sizeof (rtx));
632   reg_max_ref_width = (int *) alloca (max_regno * sizeof (int));
633   bzero ((char *) reg_max_ref_width, max_regno * sizeof (int));
634
635   if (SMALL_REGISTER_CLASSES)
636     CLEAR_HARD_REG_SET (forbidden_regs);
637
638   /* Look for REG_EQUIV notes; record what each pseudo is equivalent to.
639      Also find all paradoxical subregs and find largest such for each pseudo.
640      On machines with small register classes, record hard registers that
641      are used for user variables.  These can never be used for spills. 
642      Also look for a "constant" NOTE_INSN_SETJMP.  This means that all
643      caller-saved registers must be marked live.  */
644
645   for (insn = first; insn; insn = NEXT_INSN (insn))
646     {
647       rtx set = single_set (insn);
648
649       if (GET_CODE (insn) == NOTE && CONST_CALL_P (insn)
650           && NOTE_LINE_NUMBER (insn) == NOTE_INSN_SETJMP)
651         for (i = 0; i < FIRST_PSEUDO_REGISTER; i++)
652           if (! call_used_regs[i])
653             regs_ever_live[i] = 1;
654
655       if (set != 0 && GET_CODE (SET_DEST (set)) == REG)
656         {
657           rtx note = find_reg_note (insn, REG_EQUIV, NULL_RTX);
658           if (note
659 #ifdef LEGITIMATE_PIC_OPERAND_P
660               && (! CONSTANT_P (XEXP (note, 0)) || ! flag_pic
661                   || LEGITIMATE_PIC_OPERAND_P (XEXP (note, 0)))
662 #endif
663               )
664             {
665               rtx x = XEXP (note, 0);
666               i = REGNO (SET_DEST (set));
667               if (i > LAST_VIRTUAL_REGISTER)
668                 {
669                   if (GET_CODE (x) == MEM)
670                     {
671                       /* If the operand is a PLUS, the MEM may be shared,
672                          so make sure we have an unshared copy here.  */
673                       if (GET_CODE (XEXP (x, 0)) == PLUS)
674                         x = copy_rtx (x);
675
676                       reg_equiv_memory_loc[i] = x;
677                     }
678                   else if (CONSTANT_P (x))
679                     {
680                       if (LEGITIMATE_CONSTANT_P (x))
681                         reg_equiv_constant[i] = x;
682                       else
683                         reg_equiv_memory_loc[i]
684                           = force_const_mem (GET_MODE (SET_DEST (set)), x);
685                     }
686                   else
687                     continue;
688
689                   /* If this register is being made equivalent to a MEM
690                      and the MEM is not SET_SRC, the equivalencing insn
691                      is one with the MEM as a SET_DEST and it occurs later.
692                      So don't mark this insn now.  */
693                   if (GET_CODE (x) != MEM
694                       || rtx_equal_p (SET_SRC (set), x))
695                     reg_equiv_init[i] = insn;
696                 }
697             }
698         }
699
700       /* If this insn is setting a MEM from a register equivalent to it,
701          this is the equivalencing insn.  */
702       else if (set && GET_CODE (SET_DEST (set)) == MEM
703                && GET_CODE (SET_SRC (set)) == REG
704                && reg_equiv_memory_loc[REGNO (SET_SRC (set))]
705                && rtx_equal_p (SET_DEST (set),
706                                reg_equiv_memory_loc[REGNO (SET_SRC (set))]))
707         reg_equiv_init[REGNO (SET_SRC (set))] = insn;
708
709       if (GET_RTX_CLASS (GET_CODE (insn)) == 'i')
710         scan_paradoxical_subregs (PATTERN (insn));
711     }
712
713   /* Does this function require a frame pointer?  */
714
715   frame_pointer_needed = (! flag_omit_frame_pointer
716 #ifdef EXIT_IGNORE_STACK
717                           /* ?? If EXIT_IGNORE_STACK is set, we will not save
718                              and restore sp for alloca.  So we can't eliminate
719                              the frame pointer in that case.  At some point,
720                              we should improve this by emitting the
721                              sp-adjusting insns for this case.  */
722                           || (current_function_calls_alloca
723                               && EXIT_IGNORE_STACK)
724 #endif
725                           || FRAME_POINTER_REQUIRED);
726
727   num_eliminable = 0;
728
729   /* Initialize the table of registers to eliminate.  The way we do this
730      depends on how the eliminable registers were defined.  */
731 #ifdef ELIMINABLE_REGS
732   for (ep = reg_eliminate; ep < &reg_eliminate[NUM_ELIMINABLE_REGS]; ep++)
733     {
734       ep->can_eliminate = ep->can_eliminate_previous
735         = (CAN_ELIMINATE (ep->from, ep->to)
736            && ! (ep->to == STACK_POINTER_REGNUM && frame_pointer_needed));
737     }
738 #else
739   reg_eliminate[0].can_eliminate = reg_eliminate[0].can_eliminate_previous
740     = ! frame_pointer_needed;
741 #endif
742
743   /* Count the number of eliminable registers and build the FROM and TO
744      REG rtx's.  Note that code in gen_rtx will cause, e.g.,
745      gen_rtx (REG, Pmode, STACK_POINTER_REGNUM) to equal stack_pointer_rtx.
746      We depend on this.  */
747   for (ep = reg_eliminate; ep < &reg_eliminate[NUM_ELIMINABLE_REGS]; ep++)
748     {
749       num_eliminable += ep->can_eliminate;
750       ep->from_rtx = gen_rtx_REG (Pmode, ep->from);
751       ep->to_rtx = gen_rtx_REG (Pmode, ep->to);
752     }
753
754   num_labels = max_label_num () - get_first_label_num ();
755
756   /* Allocate the tables used to store offset information at labels.  */
757   /* We used to use alloca here, but the size of what it would try to
758      allocate would occasionally cause it to exceed the stack limit and
759      cause a core dump.  */
760   real_known_ptr = xmalloc (num_labels);
761   real_at_ptr
762     = (int (*)[NUM_ELIMINABLE_REGS])
763     xmalloc (num_labels * NUM_ELIMINABLE_REGS * sizeof (int));
764
765   offsets_known_at = real_known_ptr - get_first_label_num ();
766   offsets_at
767     = (int (*)[NUM_ELIMINABLE_REGS]) (real_at_ptr - get_first_label_num ());
768
769   /* Alter each pseudo-reg rtx to contain its hard reg number.
770      Assign stack slots to the pseudos that lack hard regs or equivalents.
771      Do not touch virtual registers.  */
772
773   for (i = LAST_VIRTUAL_REGISTER + 1; i < max_regno; i++)
774     alter_reg (i, -1);
775
776   /* If we have some registers we think can be eliminated, scan all insns to
777      see if there is an insn that sets one of these registers to something
778      other than itself plus a constant.  If so, the register cannot be
779      eliminated.  Doing this scan here eliminates an extra pass through the
780      main reload loop in the most common case where register elimination
781      cannot be done.  */
782   for (insn = first; insn && num_eliminable; insn = NEXT_INSN (insn))
783     if (GET_CODE (insn) == INSN || GET_CODE (insn) == JUMP_INSN
784         || GET_CODE (insn) == CALL_INSN)
785       note_stores (PATTERN (insn), mark_not_eliminable);
786
787 #ifndef REGISTER_CONSTRAINTS
788   /* If all the pseudo regs have hard regs,
789      except for those that are never referenced,
790      we know that no reloads are needed.  */
791   /* But that is not true if there are register constraints, since
792      in that case some pseudos might be in the wrong kind of hard reg.  */
793
794   for (i = FIRST_PSEUDO_REGISTER; i < max_regno; i++)
795     if (reg_renumber[i] == -1 && REG_N_REFS (i) != 0)
796       break;
797
798   if (i == max_regno && num_eliminable == 0 && ! caller_save_needed)
799     {
800       free (real_known_ptr);
801       free (real_at_ptr);
802       return;
803     }
804 #endif
805
806   /* Compute the order of preference for hard registers to spill.
807      Store them by decreasing preference in potential_reload_regs.  */
808
809   order_regs_for_reload (global);
810
811   /* So far, no hard regs have been spilled.  */
812   n_spills = 0;
813   for (i = 0; i < FIRST_PSEUDO_REGISTER; i++)
814     spill_reg_order[i] = -1;
815
816   /* Initialize to -1, which means take the first spill register.  */
817   last_spill_reg = -1;
818
819   /* On most machines, we can't use any register explicitly used in the
820      rtl as a spill register.  But on some, we have to.  Those will have
821      taken care to keep the life of hard regs as short as possible.  */
822
823   if (! SMALL_REGISTER_CLASSES)
824     COPY_HARD_REG_SET (forbidden_regs, bad_spill_regs);
825
826   /* Spill any hard regs that we know we can't eliminate.  */
827   for (ep = reg_eliminate; ep < &reg_eliminate[NUM_ELIMINABLE_REGS]; ep++)
828     if (! ep->can_eliminate)
829       spill_hard_reg (ep->from, global, dumpfile, 1);
830
831 #if HARD_FRAME_POINTER_REGNUM != FRAME_POINTER_REGNUM
832   if (frame_pointer_needed)
833     spill_hard_reg (HARD_FRAME_POINTER_REGNUM, global, dumpfile, 1);
834 #endif
835
836   if (global)
837     for (i = 0; i < N_REG_CLASSES; i++)
838       {
839         basic_block_needs[i] = (char *) alloca (n_basic_blocks);
840         bzero (basic_block_needs[i], n_basic_blocks);
841       }
842
843   /* From now on, we need to emit any moves without making new pseudos.  */
844   reload_in_progress = 1;
845
846   /* This loop scans the entire function each go-round
847      and repeats until one repetition spills no additional hard regs.  */
848
849   /* This flag is set when a pseudo reg is spilled,
850      to require another pass.  Note that getting an additional reload
851      reg does not necessarily imply any pseudo reg was spilled;
852      sometimes we find a reload reg that no pseudo reg was allocated in.  */
853   something_changed = 1;
854   /* This flag is set if there are any insns that require reloading.  */
855   something_needs_reloads = 0;
856   /* This flag is set if there are any insns that require register
857      eliminations.  */
858   something_needs_elimination = 0;
859   while (something_changed)
860     {
861       rtx after_call = 0;
862
863       /* For each class, number of reload regs needed in that class.
864          This is the maximum over all insns of the needs in that class
865          of the individual insn.  */
866       int max_needs[N_REG_CLASSES];
867       /* For each class, size of group of consecutive regs
868          that is needed for the reloads of this class.  */
869       int group_size[N_REG_CLASSES];
870       /* For each class, max number of consecutive groups needed.
871          (Each group contains group_size[CLASS] consecutive registers.)  */
872       int max_groups[N_REG_CLASSES];
873       /* For each class, max number needed of regs that don't belong
874          to any of the groups.  */
875       int max_nongroups[N_REG_CLASSES];
876       /* For each class, the machine mode which requires consecutive
877          groups of regs of that class.
878          If two different modes ever require groups of one class,
879          they must be the same size and equally restrictive for that class,
880          otherwise we can't handle the complexity.  */
881       enum machine_mode group_mode[N_REG_CLASSES];
882       /* Record the insn where each maximum need is first found.  */
883       rtx max_needs_insn[N_REG_CLASSES];
884       rtx max_groups_insn[N_REG_CLASSES];
885       rtx max_nongroups_insn[N_REG_CLASSES];
886       rtx x;
887       HOST_WIDE_INT starting_frame_size;
888 #if HARD_FRAME_POINTER_REGNUM != FRAME_POINTER_REGNUM
889       int previous_frame_pointer_needed = frame_pointer_needed;
890 #endif
891       static char *reg_class_names[] = REG_CLASS_NAMES;
892
893       something_changed = 0;
894       bzero ((char *) max_needs, sizeof max_needs);
895       bzero ((char *) max_groups, sizeof max_groups);
896       bzero ((char *) max_nongroups, sizeof max_nongroups);
897       bzero ((char *) max_needs_insn, sizeof max_needs_insn);
898       bzero ((char *) max_groups_insn, sizeof max_groups_insn);
899       bzero ((char *) max_nongroups_insn, sizeof max_nongroups_insn);
900       bzero ((char *) group_size, sizeof group_size);
901       for (i = 0; i < N_REG_CLASSES; i++)
902         group_mode[i] = VOIDmode;
903
904       /* Keep track of which basic blocks are needing the reloads.  */
905       this_block = 0;
906
907       /* Remember whether any element of basic_block_needs
908          changes from 0 to 1 in this pass.  */
909       new_basic_block_needs = 0;
910
911       /* Round size of stack frame to BIGGEST_ALIGNMENT.  This must be done
912          here because the stack size may be a part of the offset computation
913          for register elimination, and there might have been new stack slots
914          created in the last iteration of this loop.   */
915       assign_stack_local (BLKmode, 0, 0);
916
917       starting_frame_size = get_frame_size ();
918
919       /* Reset all offsets on eliminable registers to their initial values.  */
920 #ifdef ELIMINABLE_REGS
921       for (ep = reg_eliminate; ep < &reg_eliminate[NUM_ELIMINABLE_REGS]; ep++)
922         {
923           INITIAL_ELIMINATION_OFFSET (ep->from, ep->to, ep->initial_offset);
924           ep->previous_offset = ep->offset
925             = ep->max_offset = ep->initial_offset;
926         }
927 #else
928 #ifdef INITIAL_FRAME_POINTER_OFFSET
929       INITIAL_FRAME_POINTER_OFFSET (reg_eliminate[0].initial_offset);
930 #else
931       if (!FRAME_POINTER_REQUIRED)
932         abort ();
933       reg_eliminate[0].initial_offset = 0;
934 #endif
935       reg_eliminate[0].previous_offset = reg_eliminate[0].max_offset
936         = reg_eliminate[0].offset = reg_eliminate[0].initial_offset;
937 #endif
938
939       num_not_at_initial_offset = 0;
940
941       bzero ((char *) &offsets_known_at[get_first_label_num ()], num_labels);
942
943       /* Set a known offset for each forced label to be at the initial offset
944          of each elimination.  We do this because we assume that all
945          computed jumps occur from a location where each elimination is
946          at its initial offset.  */
947
948       for (x = forced_labels; x; x = XEXP (x, 1))
949         if (XEXP (x, 0))
950           set_label_offsets (XEXP (x, 0), NULL_RTX, 1);
951
952       /* For each pseudo register that has an equivalent location defined,
953          try to eliminate any eliminable registers (such as the frame pointer)
954          assuming initial offsets for the replacement register, which
955          is the normal case.
956
957          If the resulting location is directly addressable, substitute
958          the MEM we just got directly for the old REG.
959
960          If it is not addressable but is a constant or the sum of a hard reg
961          and constant, it is probably not addressable because the constant is
962          out of range, in that case record the address; we will generate
963          hairy code to compute the address in a register each time it is
964          needed.  Similarly if it is a hard register, but one that is not
965          valid as an address register.
966
967          If the location is not addressable, but does not have one of the
968          above forms, assign a stack slot.  We have to do this to avoid the
969          potential of producing lots of reloads if, e.g., a location involves
970          a pseudo that didn't get a hard register and has an equivalent memory
971          location that also involves a pseudo that didn't get a hard register.
972
973          Perhaps at some point we will improve reload_when_needed handling
974          so this problem goes away.  But that's very hairy.  */
975
976       for (i = FIRST_PSEUDO_REGISTER; i < max_regno; i++)
977         if (reg_renumber[i] < 0 && reg_equiv_memory_loc[i])
978           {
979             rtx x = eliminate_regs (reg_equiv_memory_loc[i], 0, NULL_RTX);
980
981             if (strict_memory_address_p (GET_MODE (regno_reg_rtx[i]),
982                                          XEXP (x, 0)))
983               reg_equiv_mem[i] = x, reg_equiv_address[i] = 0;
984             else if (CONSTANT_P (XEXP (x, 0))
985                      || (GET_CODE (XEXP (x, 0)) == REG
986                          && REGNO (XEXP (x, 0)) < FIRST_PSEUDO_REGISTER)
987                      || (GET_CODE (XEXP (x, 0)) == PLUS
988                          && GET_CODE (XEXP (XEXP (x, 0), 0)) == REG
989                          && (REGNO (XEXP (XEXP (x, 0), 0))
990                              < FIRST_PSEUDO_REGISTER)
991                          && CONSTANT_P (XEXP (XEXP (x, 0), 1))))
992               reg_equiv_address[i] = XEXP (x, 0), reg_equiv_mem[i] = 0;
993             else
994               {
995                 /* Make a new stack slot.  Then indicate that something
996                    changed so we go back and recompute offsets for
997                    eliminable registers because the allocation of memory
998                    below might change some offset.  reg_equiv_{mem,address}
999                    will be set up for this pseudo on the next pass around
1000                    the loop.  */
1001                 reg_equiv_memory_loc[i] = 0;
1002                 reg_equiv_init[i] = 0;
1003                 alter_reg (i, -1);
1004                 something_changed = 1;
1005               }
1006           }
1007
1008       /* If we allocated another pseudo to the stack, redo elimination
1009          bookkeeping.  */
1010       if (something_changed)
1011         continue;
1012
1013       /* If caller-saves needs a group, initialize the group to include
1014          the size and mode required for caller-saves.  */
1015
1016       if (caller_save_group_size > 1)
1017         {
1018           group_mode[(int) caller_save_spill_class] = Pmode;
1019           group_size[(int) caller_save_spill_class] = caller_save_group_size;
1020         }
1021
1022       /* Compute the most additional registers needed by any instruction.
1023          Collect information separately for each class of regs.  */
1024
1025       for (insn = first; insn; insn = NEXT_INSN (insn))
1026         {
1027           if (global && this_block + 1 < n_basic_blocks
1028               && insn == basic_block_head[this_block+1])
1029             ++this_block;
1030
1031           /* If this is a label, a JUMP_INSN, or has REG_NOTES (which
1032              might include REG_LABEL), we need to see what effects this
1033              has on the known offsets at labels.  */
1034
1035           if (GET_CODE (insn) == CODE_LABEL || GET_CODE (insn) == JUMP_INSN
1036               || (GET_RTX_CLASS (GET_CODE (insn)) == 'i'
1037                   && REG_NOTES (insn) != 0))
1038             set_label_offsets (insn, insn, 0);
1039
1040           if (GET_RTX_CLASS (GET_CODE (insn)) == 'i')
1041             {
1042               /* Nonzero means don't use a reload reg that overlaps
1043                  the place where a function value can be returned.  */
1044               rtx avoid_return_reg = 0;
1045
1046               rtx old_body = PATTERN (insn);
1047               int old_code = INSN_CODE (insn);
1048               rtx old_notes = REG_NOTES (insn);
1049               int did_elimination = 0;
1050
1051               /* To compute the number of reload registers of each class 
1052                  needed for an insn, we must simulate what choose_reload_regs
1053                  can do.  We do this by splitting an insn into an "input" and
1054                  an "output" part.  RELOAD_OTHER reloads are used in both. 
1055                  The input part uses those reloads, RELOAD_FOR_INPUT reloads,
1056                  which must be live over the entire input section of reloads,
1057                  and the maximum of all the RELOAD_FOR_INPUT_ADDRESS and
1058                  RELOAD_FOR_OPERAND_ADDRESS reloads, which conflict with the
1059                  inputs.
1060
1061                  The registers needed for output are RELOAD_OTHER and
1062                  RELOAD_FOR_OUTPUT, which are live for the entire output
1063                  portion, and the maximum of all the RELOAD_FOR_OUTPUT_ADDRESS
1064                  reloads for each operand.
1065
1066                  The total number of registers needed is the maximum of the
1067                  inputs and outputs.  */
1068
1069               struct needs
1070                 {
1071                   /* [0] is normal, [1] is nongroup.  */
1072                   int regs[2][N_REG_CLASSES];
1073                   int groups[N_REG_CLASSES];
1074                 };
1075
1076               /* Each `struct needs' corresponds to one RELOAD_... type.  */
1077               struct {
1078                 struct needs other;
1079                 struct needs input;
1080                 struct needs output;
1081                 struct needs insn;
1082                 struct needs other_addr;
1083                 struct needs op_addr;
1084                 struct needs op_addr_reload;
1085                 struct needs in_addr[MAX_RECOG_OPERANDS];
1086                 struct needs in_addr_addr[MAX_RECOG_OPERANDS];
1087                 struct needs out_addr[MAX_RECOG_OPERANDS];
1088                 struct needs out_addr_addr[MAX_RECOG_OPERANDS];
1089               } insn_needs;
1090
1091               /* If needed, eliminate any eliminable registers.  */
1092               if (num_eliminable)
1093                 did_elimination = eliminate_regs_in_insn (insn, 0);
1094
1095               /* Set avoid_return_reg if this is an insn
1096                  that might use the value of a function call.  */
1097               if (SMALL_REGISTER_CLASSES && GET_CODE (insn) == CALL_INSN)
1098                 {
1099                   if (GET_CODE (PATTERN (insn)) == SET)
1100                     after_call = SET_DEST (PATTERN (insn));
1101                   else if (GET_CODE (PATTERN (insn)) == PARALLEL
1102                            && GET_CODE (XVECEXP (PATTERN (insn), 0, 0)) == SET)
1103                     after_call = SET_DEST (XVECEXP (PATTERN (insn), 0, 0));
1104                   else
1105                     after_call = 0;
1106                 }
1107               else if (SMALL_REGISTER_CLASSES && after_call != 0
1108                        && !(GET_CODE (PATTERN (insn)) == SET
1109                             && SET_DEST (PATTERN (insn)) == stack_pointer_rtx)
1110                        && GET_CODE (PATTERN (insn)) != USE)
1111                 {
1112                   if (reg_referenced_p (after_call, PATTERN (insn)))
1113                     avoid_return_reg = after_call;
1114                   after_call = 0;
1115                 }
1116
1117               /* Analyze the instruction.  */
1118               find_reloads (insn, 0, spill_indirect_levels, global,
1119                             spill_reg_order);
1120
1121               /* Remember for later shortcuts which insns had any reloads or
1122                  register eliminations.
1123
1124                  One might think that it would be worthwhile to mark insns
1125                  that need register replacements but not reloads, but this is
1126                  not safe because find_reloads may do some manipulation of
1127                  the insn (such as swapping commutative operands), which would
1128                  be lost when we restore the old pattern after register
1129                  replacement.  So the actions of find_reloads must be redone in
1130                  subsequent passes or in reload_as_needed.
1131
1132                  However, it is safe to mark insns that need reloads
1133                  but not register replacement.  */
1134
1135               PUT_MODE (insn, (did_elimination ? QImode
1136                                : n_reloads ? HImode
1137                                : GET_MODE (insn) == DImode ? DImode
1138                                : VOIDmode));
1139
1140               /* Discard any register replacements done.  */
1141               if (did_elimination)
1142                 {
1143                   obstack_free (&reload_obstack, reload_firstobj);
1144                   PATTERN (insn) = old_body;
1145                   INSN_CODE (insn) = old_code;
1146                   REG_NOTES (insn) = old_notes;
1147                   something_needs_elimination = 1;
1148                 }
1149
1150               /* If this insn has no reloads, we need not do anything except
1151                  in the case of a CALL_INSN when we have caller-saves and
1152                  caller-save needs reloads.  */
1153
1154               if (n_reloads == 0
1155                   && ! (GET_CODE (insn) == CALL_INSN
1156                         && caller_save_spill_class != NO_REGS))
1157                 continue;
1158
1159               something_needs_reloads = 1;
1160               bzero ((char *) &insn_needs, sizeof insn_needs);
1161
1162               /* Count each reload once in every class
1163                  containing the reload's own class.  */
1164
1165               for (i = 0; i < n_reloads; i++)
1166                 {
1167                   register enum reg_class *p;
1168                   enum reg_class class = reload_reg_class[i];
1169                   int size;
1170                   enum machine_mode mode;
1171                   struct needs *this_needs;
1172
1173                   /* Don't count the dummy reloads, for which one of the
1174                      regs mentioned in the insn can be used for reloading.
1175                      Don't count optional reloads.
1176                      Don't count reloads that got combined with others.  */
1177                   if (reload_reg_rtx[i] != 0
1178                       || reload_optional[i] != 0
1179                       || (reload_out[i] == 0 && reload_in[i] == 0
1180                           && ! reload_secondary_p[i]))
1181                     continue;
1182
1183                   /* Show that a reload register of this class is needed
1184                      in this basic block.  We do not use insn_needs and
1185                      insn_groups because they are overly conservative for
1186                      this purpose.  */
1187                   if (global && ! basic_block_needs[(int) class][this_block])
1188                     {
1189                       basic_block_needs[(int) class][this_block] = 1;
1190                       new_basic_block_needs = 1;
1191                     }
1192
1193                   mode = reload_inmode[i];
1194                   if (GET_MODE_SIZE (reload_outmode[i]) > GET_MODE_SIZE (mode))
1195                     mode = reload_outmode[i];
1196                   size = CLASS_MAX_NREGS (class, mode);
1197
1198                   /* Decide which time-of-use to count this reload for.  */
1199                   switch (reload_when_needed[i])
1200                     {
1201                     case RELOAD_OTHER:
1202                       this_needs = &insn_needs.other;
1203                       break;
1204                     case RELOAD_FOR_INPUT:
1205                       this_needs = &insn_needs.input;
1206                       break;
1207                     case RELOAD_FOR_OUTPUT:
1208                       this_needs = &insn_needs.output;
1209                       break;
1210                     case RELOAD_FOR_INSN:
1211                       this_needs = &insn_needs.insn;
1212                       break;
1213                     case RELOAD_FOR_OTHER_ADDRESS:
1214                       this_needs = &insn_needs.other_addr;
1215                       break;
1216                     case RELOAD_FOR_INPUT_ADDRESS:
1217                       this_needs = &insn_needs.in_addr[reload_opnum[i]];
1218                       break;
1219                     case RELOAD_FOR_INPADDR_ADDRESS:
1220                       this_needs = &insn_needs.in_addr_addr[reload_opnum[i]];
1221                       break;
1222                     case RELOAD_FOR_OUTPUT_ADDRESS:
1223                       this_needs = &insn_needs.out_addr[reload_opnum[i]];
1224                       break;
1225                     case RELOAD_FOR_OUTADDR_ADDRESS:
1226                       this_needs = &insn_needs.out_addr_addr[reload_opnum[i]];
1227                       break;
1228                     case RELOAD_FOR_OPERAND_ADDRESS:
1229                       this_needs = &insn_needs.op_addr;
1230                       break;
1231                     case RELOAD_FOR_OPADDR_ADDR:
1232                       this_needs = &insn_needs.op_addr_reload;
1233                       break;
1234                     }
1235
1236                   if (size > 1)
1237                     {
1238                       enum machine_mode other_mode, allocate_mode;
1239
1240                       /* Count number of groups needed separately from
1241                          number of individual regs needed.  */
1242                       this_needs->groups[(int) class]++;
1243                       p = reg_class_superclasses[(int) class];
1244                       while (*p != LIM_REG_CLASSES)
1245                         this_needs->groups[(int) *p++]++;
1246
1247                       /* Record size and mode of a group of this class.  */
1248                       /* If more than one size group is needed,
1249                          make all groups the largest needed size.  */
1250                       if (group_size[(int) class] < size)
1251                         {
1252                           other_mode = group_mode[(int) class];
1253                           allocate_mode = mode;
1254
1255                           group_size[(int) class] = size;
1256                           group_mode[(int) class] = mode;
1257                         }
1258                       else
1259                         {
1260                           other_mode = mode;
1261                           allocate_mode = group_mode[(int) class];
1262                         }
1263
1264                       /* Crash if two dissimilar machine modes both need
1265                          groups of consecutive regs of the same class.  */
1266
1267                       if (other_mode != VOIDmode && other_mode != allocate_mode
1268                           && ! modes_equiv_for_class_p (allocate_mode,
1269                                                         other_mode, class))
1270                         fatal_insn ("Two dissimilar machine modes both need groups of consecutive regs of the same class",
1271                                     insn);
1272                     }
1273                   else if (size == 1)
1274                     {
1275                       this_needs->regs[reload_nongroup[i]][(int) class] += 1;
1276                       p = reg_class_superclasses[(int) class];
1277                       while (*p != LIM_REG_CLASSES)
1278                         this_needs->regs[reload_nongroup[i]][(int) *p++] += 1;
1279                     }
1280                   else
1281                     abort ();
1282                 }
1283
1284               /* All reloads have been counted for this insn;
1285                  now merge the various times of use.
1286                  This sets insn_needs, etc., to the maximum total number
1287                  of registers needed at any point in this insn.  */
1288
1289               for (i = 0; i < N_REG_CLASSES; i++)
1290                 {
1291                   int in_max, out_max;
1292
1293                   /* Compute normal and nongroup needs.  */
1294                   for (j = 0; j <= 1; j++)
1295                     {
1296                       for (in_max = 0, out_max = 0, k = 0;
1297                            k < reload_n_operands; k++)
1298                         {
1299                           in_max
1300                             = MAX (in_max,
1301                                    (insn_needs.in_addr[k].regs[j][i]
1302                                     + insn_needs.in_addr_addr[k].regs[j][i]));
1303                           out_max
1304                             = MAX (out_max, insn_needs.out_addr[k].regs[j][i]);
1305                           out_max
1306                             = MAX (out_max,
1307                                    insn_needs.out_addr_addr[k].regs[j][i]);
1308                         }
1309
1310                       /* RELOAD_FOR_INSN reloads conflict with inputs, outputs,
1311                          and operand addresses but not things used to reload
1312                          them.  Similarly, RELOAD_FOR_OPERAND_ADDRESS reloads
1313                          don't conflict with things needed to reload inputs or
1314                          outputs.  */
1315
1316                       in_max = MAX (MAX (insn_needs.op_addr.regs[j][i],
1317                                          insn_needs.op_addr_reload.regs[j][i]),
1318                                     in_max);
1319
1320                       out_max = MAX (out_max, insn_needs.insn.regs[j][i]);
1321
1322                       insn_needs.input.regs[j][i]
1323                         = MAX (insn_needs.input.regs[j][i]
1324                                + insn_needs.op_addr.regs[j][i]
1325                                + insn_needs.insn.regs[j][i],
1326                                in_max + insn_needs.input.regs[j][i]);
1327
1328                       insn_needs.output.regs[j][i] += out_max;
1329                       insn_needs.other.regs[j][i]
1330                         += MAX (MAX (insn_needs.input.regs[j][i],
1331                                      insn_needs.output.regs[j][i]),
1332                                 insn_needs.other_addr.regs[j][i]);
1333
1334                     }
1335
1336                   /* Now compute group needs.  */
1337                   for (in_max = 0, out_max = 0, j = 0;
1338                        j < reload_n_operands; j++)
1339                     {
1340                       in_max = MAX (in_max, insn_needs.in_addr[j].groups[i]);
1341                       in_max = MAX (in_max,
1342                                      insn_needs.in_addr_addr[j].groups[i]);
1343                       out_max
1344                         = MAX (out_max, insn_needs.out_addr[j].groups[i]);
1345                       out_max
1346                         = MAX (out_max, insn_needs.out_addr_addr[j].groups[i]);
1347                     }
1348
1349                   in_max = MAX (MAX (insn_needs.op_addr.groups[i],
1350                                      insn_needs.op_addr_reload.groups[i]),
1351                                 in_max);
1352                   out_max = MAX (out_max, insn_needs.insn.groups[i]);
1353
1354                   insn_needs.input.groups[i]
1355                     = MAX (insn_needs.input.groups[i]
1356                            + insn_needs.op_addr.groups[i]
1357                            + insn_needs.insn.groups[i],
1358                            in_max + insn_needs.input.groups[i]);
1359
1360                   insn_needs.output.groups[i] += out_max;
1361                   insn_needs.other.groups[i]
1362                     += MAX (MAX (insn_needs.input.groups[i],
1363                                  insn_needs.output.groups[i]),
1364                             insn_needs.other_addr.groups[i]);
1365                 }
1366
1367               /* If this is a CALL_INSN and caller-saves will need
1368                  a spill register, act as if the spill register is
1369                  needed for this insn.   However, the spill register
1370                  can be used by any reload of this insn, so we only
1371                  need do something if no need for that class has
1372                  been recorded.
1373
1374                  The assumption that every CALL_INSN will trigger a
1375                  caller-save is highly conservative, however, the number
1376                  of cases where caller-saves will need a spill register but
1377                  a block containing a CALL_INSN won't need a spill register
1378                  of that class should be quite rare.
1379
1380                  If a group is needed, the size and mode of the group will
1381                  have been set up at the beginning of this loop.  */
1382
1383               if (GET_CODE (insn) == CALL_INSN
1384                   && caller_save_spill_class != NO_REGS)
1385                 {
1386                   /* See if this register would conflict with any reload that
1387                      needs a group or any reload that needs a nongroup.  */
1388                   int nongroup_need = 0;
1389                   int *caller_save_needs;
1390
1391                   for (j = 0; j < n_reloads; j++)
1392                     if (reg_classes_intersect_p (caller_save_spill_class,
1393                                                  reload_reg_class[j])
1394                         && ((CLASS_MAX_NREGS
1395                              (reload_reg_class[j],
1396                               (GET_MODE_SIZE (reload_outmode[j])
1397                                > GET_MODE_SIZE (reload_inmode[j]))
1398                               ? reload_outmode[j] : reload_inmode[j])
1399                              > 1)
1400                             || reload_nongroup[j]))
1401                       {
1402                         nongroup_need = 1;
1403                         break;
1404                       }
1405
1406                   caller_save_needs 
1407                     = (caller_save_group_size > 1
1408                        ? insn_needs.other.groups
1409                        : insn_needs.other.regs[nongroup_need]); 
1410
1411                   if (caller_save_needs[(int) caller_save_spill_class] == 0)
1412                     {
1413                       register enum reg_class *p
1414                         = reg_class_superclasses[(int) caller_save_spill_class];
1415
1416                       caller_save_needs[(int) caller_save_spill_class]++;
1417
1418                       while (*p != LIM_REG_CLASSES)
1419                         caller_save_needs[(int) *p++] += 1;
1420                     }
1421
1422                   /* Show that this basic block will need a register of
1423                    this class.  */
1424
1425                   if (global
1426                       && ! (basic_block_needs[(int) caller_save_spill_class]
1427                             [this_block]))
1428                     {
1429                       basic_block_needs[(int) caller_save_spill_class]
1430                         [this_block] = 1;
1431                       new_basic_block_needs = 1;
1432                     }
1433                 }
1434
1435               /* If this insn stores the value of a function call,
1436                  and that value is in a register that has been spilled,
1437                  and if the insn needs a reload in a class
1438                  that might use that register as the reload register,
1439                  then add an extra need in that class.
1440                  This makes sure we have a register available that does
1441                  not overlap the return value.  */
1442
1443               if (SMALL_REGISTER_CLASSES && avoid_return_reg)
1444                 {
1445                   int regno = REGNO (avoid_return_reg);
1446                   int nregs
1447                     = HARD_REGNO_NREGS (regno, GET_MODE (avoid_return_reg));
1448                   int r;
1449                   int basic_needs[N_REG_CLASSES], basic_groups[N_REG_CLASSES];
1450
1451                   /* First compute the "basic needs", which counts a
1452                      need only in the smallest class in which it
1453                      is required.  */
1454
1455                   bcopy ((char *) insn_needs.other.regs[0],
1456                          (char *) basic_needs, sizeof basic_needs);
1457                   bcopy ((char *) insn_needs.other.groups,
1458                          (char *) basic_groups, sizeof basic_groups);
1459
1460                   for (i = 0; i < N_REG_CLASSES; i++)
1461                     {
1462                       enum reg_class *p;
1463
1464                       if (basic_needs[i] >= 0)
1465                         for (p = reg_class_superclasses[i];
1466                              *p != LIM_REG_CLASSES; p++)
1467                           basic_needs[(int) *p] -= basic_needs[i];
1468
1469                       if (basic_groups[i] >= 0)
1470                         for (p = reg_class_superclasses[i];
1471                              *p != LIM_REG_CLASSES; p++)
1472                           basic_groups[(int) *p] -= basic_groups[i];
1473                     }
1474
1475                   /* Now count extra regs if there might be a conflict with
1476                      the return value register.  */
1477
1478                   for (r = regno; r < regno + nregs; r++)
1479                     if (spill_reg_order[r] >= 0)
1480                       for (i = 0; i < N_REG_CLASSES; i++)
1481                         if (TEST_HARD_REG_BIT (reg_class_contents[i], r))
1482                           {
1483                             if (basic_needs[i] > 0)
1484                               {
1485                                 enum reg_class *p;
1486
1487                                 insn_needs.other.regs[0][i]++;
1488                                 p = reg_class_superclasses[i];
1489                                 while (*p != LIM_REG_CLASSES)
1490                                   insn_needs.other.regs[0][(int) *p++]++;
1491                               }
1492                             if (basic_groups[i] > 0)
1493                               {
1494                                 enum reg_class *p;
1495
1496                                 insn_needs.other.groups[i]++;
1497                                 p = reg_class_superclasses[i];
1498                                 while (*p != LIM_REG_CLASSES)
1499                                   insn_needs.other.groups[(int) *p++]++;
1500                               }
1501                           }
1502                 }
1503
1504               /* For each class, collect maximum need of any insn.  */
1505
1506               for (i = 0; i < N_REG_CLASSES; i++)
1507                 {
1508                   if (max_needs[i] < insn_needs.other.regs[0][i])
1509                     {
1510                       max_needs[i] = insn_needs.other.regs[0][i];
1511                       max_needs_insn[i] = insn;
1512                     }
1513                   if (max_groups[i] < insn_needs.other.groups[i])
1514                     {
1515                       max_groups[i] = insn_needs.other.groups[i];
1516                       max_groups_insn[i] = insn;
1517                     }
1518                   if (max_nongroups[i] < insn_needs.other.regs[1][i])
1519                     {
1520                       max_nongroups[i] = insn_needs.other.regs[1][i];
1521                       max_nongroups_insn[i] = insn;
1522                     }
1523                 }
1524             }
1525           /* Note that there is a continue statement above.  */
1526         }
1527
1528       /* If we allocated any new memory locations, make another pass
1529          since it might have changed elimination offsets.  */
1530       if (starting_frame_size != get_frame_size ())
1531         something_changed = 1;
1532
1533       if (dumpfile)
1534         for (i = 0; i < N_REG_CLASSES; i++)
1535           {
1536             if (max_needs[i] > 0)
1537               fprintf (dumpfile,
1538                          ";; Need %d reg%s of class %s (for insn %d).\n",
1539                        max_needs[i], max_needs[i] == 1 ? "" : "s",
1540                        reg_class_names[i], INSN_UID (max_needs_insn[i]));
1541             if (max_nongroups[i] > 0)
1542               fprintf (dumpfile,
1543                        ";; Need %d nongroup reg%s of class %s (for insn %d).\n",
1544                        max_nongroups[i], max_nongroups[i] == 1 ? "" : "s",
1545                        reg_class_names[i], INSN_UID (max_nongroups_insn[i]));
1546             if (max_groups[i] > 0)
1547               fprintf (dumpfile,
1548                        ";; Need %d group%s (%smode) of class %s (for insn %d).\n",
1549                        max_groups[i], max_groups[i] == 1 ? "" : "s",
1550                        mode_name[(int) group_mode[i]],
1551                        reg_class_names[i], INSN_UID (max_groups_insn[i]));
1552           }
1553                          
1554       /* If we have caller-saves, set up the save areas and see if caller-save
1555          will need a spill register.  */
1556
1557       if (caller_save_needed)
1558         {
1559           /* Set the offsets for setup_save_areas.  */
1560           for (ep = reg_eliminate; ep < &reg_eliminate[NUM_ELIMINABLE_REGS];
1561                ep++)
1562             ep->previous_offset = ep->max_offset;
1563
1564           if ( ! setup_save_areas (&something_changed)
1565               && caller_save_spill_class  == NO_REGS)
1566             {
1567               /* The class we will need depends on whether the machine
1568                  supports the sum of two registers for an address; see
1569               find_address_reloads for details.  */
1570
1571               caller_save_spill_class
1572                 = double_reg_address_ok ? INDEX_REG_CLASS : BASE_REG_CLASS;
1573               caller_save_group_size
1574                 = CLASS_MAX_NREGS (caller_save_spill_class, Pmode);
1575               something_changed = 1;
1576             }
1577         }
1578
1579       /* See if anything that happened changes which eliminations are valid.
1580          For example, on the Sparc, whether or not the frame pointer can
1581          be eliminated can depend on what registers have been used.  We need
1582          not check some conditions again (such as flag_omit_frame_pointer)
1583          since they can't have changed.  */
1584
1585       for (ep = reg_eliminate; ep < &reg_eliminate[NUM_ELIMINABLE_REGS]; ep++)
1586         if ((ep->from == HARD_FRAME_POINTER_REGNUM && FRAME_POINTER_REQUIRED)
1587 #ifdef ELIMINABLE_REGS
1588             || ! CAN_ELIMINATE (ep->from, ep->to)
1589 #endif
1590             )
1591           ep->can_eliminate = 0;
1592
1593       /* Look for the case where we have discovered that we can't replace
1594          register A with register B and that means that we will now be
1595          trying to replace register A with register C.  This means we can
1596          no longer replace register C with register B and we need to disable
1597          such an elimination, if it exists.  This occurs often with A == ap,
1598          B == sp, and C == fp.  */
1599
1600       for (ep = reg_eliminate; ep < &reg_eliminate[NUM_ELIMINABLE_REGS]; ep++)
1601         {
1602           struct elim_table *op;
1603           register int new_to = -1;
1604
1605           if (! ep->can_eliminate && ep->can_eliminate_previous)
1606             {
1607               /* Find the current elimination for ep->from, if there is a
1608                  new one.  */
1609               for (op = reg_eliminate;
1610                    op < &reg_eliminate[NUM_ELIMINABLE_REGS]; op++)
1611                 if (op->from == ep->from && op->can_eliminate)
1612                   {
1613                     new_to = op->to;
1614                     break;
1615                   }
1616
1617               /* See if there is an elimination of NEW_TO -> EP->TO.  If so,
1618                  disable it.  */
1619               for (op = reg_eliminate;
1620                    op < &reg_eliminate[NUM_ELIMINABLE_REGS]; op++)
1621                 if (op->from == new_to && op->to == ep->to)
1622                   op->can_eliminate = 0;
1623             }
1624         }
1625
1626       /* See if any registers that we thought we could eliminate the previous
1627          time are no longer eliminable.  If so, something has changed and we
1628          must spill the register.  Also, recompute the number of eliminable
1629          registers and see if the frame pointer is needed; it is if there is
1630          no elimination of the frame pointer that we can perform.  */
1631
1632       frame_pointer_needed = 1;
1633       for (ep = reg_eliminate; ep < &reg_eliminate[NUM_ELIMINABLE_REGS]; ep++)
1634         {
1635           if (ep->can_eliminate && ep->from == FRAME_POINTER_REGNUM
1636               && ep->to != HARD_FRAME_POINTER_REGNUM)
1637             frame_pointer_needed = 0;
1638
1639           if (! ep->can_eliminate && ep->can_eliminate_previous)
1640             {
1641               ep->can_eliminate_previous = 0;
1642               spill_hard_reg (ep->from, global, dumpfile, 1);
1643               something_changed = 1;
1644               num_eliminable--;
1645             }
1646         }
1647
1648 #if HARD_FRAME_POINTER_REGNUM != FRAME_POINTER_REGNUM
1649       /* If we didn't need a frame pointer last time, but we do now, spill
1650          the hard frame pointer.  */
1651       if (frame_pointer_needed && ! previous_frame_pointer_needed)
1652         {
1653           spill_hard_reg (HARD_FRAME_POINTER_REGNUM, global, dumpfile, 1);
1654           something_changed = 1;
1655         }
1656 #endif
1657
1658       /* If all needs are met, we win.  */
1659
1660       for (i = 0; i < N_REG_CLASSES; i++)
1661         if (max_needs[i] > 0 || max_groups[i] > 0 || max_nongroups[i] > 0)
1662           break;
1663       if (i == N_REG_CLASSES && !new_basic_block_needs && ! something_changed)
1664         break;
1665
1666       /* Not all needs are met; must spill some hard regs.  */
1667
1668       /* Put all registers spilled so far back in potential_reload_regs, but
1669          put them at the front, since we've already spilled most of the
1670          pseudos in them (we might have left some pseudos unspilled if they
1671          were in a block that didn't need any spill registers of a conflicting
1672          class.  We used to try to mark off the need for those registers,
1673          but doing so properly is very complex and reallocating them is the
1674          simpler approach.  First, "pack" potential_reload_regs by pushing 
1675          any nonnegative entries towards the end.  That will leave room 
1676          for the registers we already spilled.
1677
1678          Also, undo the marking of the spill registers from the last time
1679          around in FORBIDDEN_REGS since we will be probably be allocating
1680          them again below.
1681
1682          ??? It is theoretically possible that we might end up not using one
1683          of our previously-spilled registers in this allocation, even though
1684          they are at the head of the list.  It's not clear what to do about
1685          this, but it was no better before, when we marked off the needs met
1686          by the previously-spilled registers.  With the current code, globals
1687          can be allocated into these registers, but locals cannot.  */
1688
1689       if (n_spills)
1690         {
1691           for (i = j = FIRST_PSEUDO_REGISTER - 1; i >= 0; i--)
1692             if (potential_reload_regs[i] != -1)
1693               potential_reload_regs[j--] = potential_reload_regs[i];
1694
1695           for (i = 0; i < n_spills; i++)
1696             {
1697               potential_reload_regs[i] = spill_regs[i];
1698               spill_reg_order[spill_regs[i]] = -1;
1699               CLEAR_HARD_REG_BIT (forbidden_regs, spill_regs[i]);
1700             }
1701
1702           n_spills = 0;
1703         }
1704
1705       /* Now find more reload regs to satisfy the remaining need
1706          Do it by ascending class number, since otherwise a reg
1707          might be spilled for a big class and might fail to count
1708          for a smaller class even though it belongs to that class.
1709
1710          Count spilled regs in `spills', and add entries to
1711          `spill_regs' and `spill_reg_order'.
1712
1713          ??? Note there is a problem here.
1714          When there is a need for a group in a high-numbered class,
1715          and also need for non-group regs that come from a lower class,
1716          the non-group regs are chosen first.  If there aren't many regs,
1717          they might leave no room for a group.
1718
1719          This was happening on the 386.  To fix it, we added the code
1720          that calls possible_group_p, so that the lower class won't
1721          break up the last possible group.
1722
1723          Really fixing the problem would require changes above
1724          in counting the regs already spilled, and in choose_reload_regs.
1725          It might be hard to avoid introducing bugs there.  */
1726
1727       CLEAR_HARD_REG_SET (counted_for_groups);
1728       CLEAR_HARD_REG_SET (counted_for_nongroups);
1729
1730       for (class = 0; class < N_REG_CLASSES; class++)
1731         {
1732           /* First get the groups of registers.
1733              If we got single registers first, we might fragment
1734              possible groups.  */
1735           while (max_groups[class] > 0)
1736             {
1737               /* If any single spilled regs happen to form groups,
1738                  count them now.  Maybe we don't really need
1739                  to spill another group.  */
1740               count_possible_groups (group_size, group_mode, max_groups,
1741                                      class);
1742
1743               if (max_groups[class] <= 0)
1744                 break;
1745
1746               /* Groups of size 2 (the only groups used on most machines)
1747                  are treated specially.  */
1748               if (group_size[class] == 2)
1749                 {
1750                   /* First, look for a register that will complete a group.  */
1751                   for (i = 0; i < FIRST_PSEUDO_REGISTER; i++)
1752                     {
1753                       int other;
1754
1755                       j = potential_reload_regs[i];
1756                       if (j >= 0 && ! TEST_HARD_REG_BIT (bad_spill_regs, j)
1757                           &&
1758                           ((j > 0 && (other = j - 1, spill_reg_order[other] >= 0)
1759                             && TEST_HARD_REG_BIT (reg_class_contents[class], j)
1760                             && TEST_HARD_REG_BIT (reg_class_contents[class], other)
1761                             && HARD_REGNO_MODE_OK (other, group_mode[class])
1762                             && ! TEST_HARD_REG_BIT (counted_for_nongroups,
1763                                                     other)
1764                             /* We don't want one part of another group.
1765                                We could get "two groups" that overlap!  */
1766                             && ! TEST_HARD_REG_BIT (counted_for_groups, other))
1767                            ||
1768                            (j < FIRST_PSEUDO_REGISTER - 1
1769                             && (other = j + 1, spill_reg_order[other] >= 0)
1770                             && TEST_HARD_REG_BIT (reg_class_contents[class], j)
1771                             && TEST_HARD_REG_BIT (reg_class_contents[class], other)
1772                             && HARD_REGNO_MODE_OK (j, group_mode[class])
1773                             && ! TEST_HARD_REG_BIT (counted_for_nongroups,
1774                                                     other)
1775                             && ! TEST_HARD_REG_BIT (counted_for_groups,
1776                                                     other))))
1777                         {
1778                           register enum reg_class *p;
1779
1780                           /* We have found one that will complete a group,
1781                              so count off one group as provided.  */
1782                           max_groups[class]--;
1783                           p = reg_class_superclasses[class];
1784                           while (*p != LIM_REG_CLASSES)
1785                             {
1786                               if (group_size [(int) *p] <= group_size [class])
1787                                 max_groups[(int) *p]--;
1788                               p++;
1789                             }
1790
1791                           /* Indicate both these regs are part of a group.  */
1792                           SET_HARD_REG_BIT (counted_for_groups, j);
1793                           SET_HARD_REG_BIT (counted_for_groups, other);
1794                           break;
1795                         }
1796                     }
1797                   /* We can't complete a group, so start one.  */
1798                   /* Look for a pair neither of which is explicitly used.  */
1799                   if (SMALL_REGISTER_CLASSES && i == FIRST_PSEUDO_REGISTER)
1800                     for (i = 0; i < FIRST_PSEUDO_REGISTER; i++)
1801                       {
1802                         int k;
1803                         j = potential_reload_regs[i];
1804                         /* Verify that J+1 is a potential reload reg.  */
1805                         for (k = 0; k < FIRST_PSEUDO_REGISTER; k++)
1806                           if (potential_reload_regs[k] == j + 1)
1807                             break;
1808                         if (j >= 0 && j + 1 < FIRST_PSEUDO_REGISTER
1809                             && k < FIRST_PSEUDO_REGISTER
1810                             && spill_reg_order[j] < 0 && spill_reg_order[j + 1] < 0
1811                             && TEST_HARD_REG_BIT (reg_class_contents[class], j)
1812                             && TEST_HARD_REG_BIT (reg_class_contents[class], j + 1)
1813                             && HARD_REGNO_MODE_OK (j, group_mode[class])
1814                             && ! TEST_HARD_REG_BIT (counted_for_nongroups,
1815                                                     j + 1)
1816                             && ! TEST_HARD_REG_BIT (bad_spill_regs, j + 1)
1817                             /* Reject J at this stage
1818                                if J+1 was explicitly used.  */
1819                             && ! regs_explicitly_used[j + 1])
1820                           break;
1821                       }
1822                   /* Now try any group at all
1823                      whose registers are not in bad_spill_regs.  */
1824                   if (i == FIRST_PSEUDO_REGISTER)
1825                     for (i = 0; i < FIRST_PSEUDO_REGISTER; i++)
1826                       {
1827                         int k;
1828                         j = potential_reload_regs[i];
1829                         /* Verify that J+1 is a potential reload reg.  */
1830                         for (k = 0; k < FIRST_PSEUDO_REGISTER; k++)
1831                           if (potential_reload_regs[k] == j + 1)
1832                             break;
1833                         if (j >= 0 && j + 1 < FIRST_PSEUDO_REGISTER
1834                             && k < FIRST_PSEUDO_REGISTER
1835                             && spill_reg_order[j] < 0 && spill_reg_order[j + 1] < 0
1836                             && TEST_HARD_REG_BIT (reg_class_contents[class], j)
1837                             && TEST_HARD_REG_BIT (reg_class_contents[class], j + 1)
1838                             && HARD_REGNO_MODE_OK (j, group_mode[class])
1839                             && ! TEST_HARD_REG_BIT (counted_for_nongroups,
1840                                                     j + 1)
1841                             && ! TEST_HARD_REG_BIT (bad_spill_regs, j + 1))
1842                           break;
1843                       }
1844
1845                   /* I should be the index in potential_reload_regs
1846                      of the new reload reg we have found.  */
1847
1848                   if (i >= FIRST_PSEUDO_REGISTER)
1849                     {
1850                       /* There are no groups left to spill.  */
1851                       spill_failure (max_groups_insn[class]);
1852                       failure = 1;
1853                       goto failed;
1854                     }
1855                   else
1856                     something_changed
1857                       |= new_spill_reg (i, class, max_needs, NULL_PTR,
1858                                         global, dumpfile);
1859                 }
1860               else
1861                 {
1862                   /* For groups of more than 2 registers,
1863                      look for a sufficient sequence of unspilled registers,
1864                      and spill them all at once.  */
1865                   for (i = 0; i < FIRST_PSEUDO_REGISTER; i++)
1866                     {
1867                       int k;
1868
1869                       j = potential_reload_regs[i];
1870                       if (j >= 0
1871                           && j + group_size[class] <= FIRST_PSEUDO_REGISTER
1872                           && HARD_REGNO_MODE_OK (j, group_mode[class]))
1873                         {
1874                           /* Check each reg in the sequence.  */
1875                           for (k = 0; k < group_size[class]; k++)
1876                             if (! (spill_reg_order[j + k] < 0
1877                                    && ! TEST_HARD_REG_BIT (bad_spill_regs, j + k)
1878                                    && TEST_HARD_REG_BIT (reg_class_contents[class], j + k)))
1879                               break;
1880                           /* We got a full sequence, so spill them all.  */
1881                           if (k == group_size[class])
1882                             {
1883                               register enum reg_class *p;
1884                               for (k = 0; k < group_size[class]; k++)
1885                                 {
1886                                   int idx;
1887                                   SET_HARD_REG_BIT (counted_for_groups, j + k);
1888                                   for (idx = 0; idx < FIRST_PSEUDO_REGISTER; idx++)
1889                                     if (potential_reload_regs[idx] == j + k)
1890                                       break;
1891                                   something_changed
1892                                     |= new_spill_reg (idx, class,
1893                                                       max_needs, NULL_PTR,
1894                                                       global, dumpfile);
1895                                 }
1896
1897                               /* We have found one that will complete a group,
1898                                  so count off one group as provided.  */
1899                               max_groups[class]--;
1900                               p = reg_class_superclasses[class];
1901                               while (*p != LIM_REG_CLASSES)
1902                                 {
1903                                   if (group_size [(int) *p]
1904                                       <= group_size [class])
1905                                     max_groups[(int) *p]--;
1906                                   p++;
1907                                 }
1908                               break;
1909                             }
1910                         }
1911                     }
1912                   /* We couldn't find any registers for this reload.
1913                      Avoid going into an infinite loop.  */
1914                   if (i >= FIRST_PSEUDO_REGISTER)
1915                     {
1916                       /* There are no groups left.  */
1917                       spill_failure (max_groups_insn[class]);
1918                       failure = 1;
1919                       goto failed;
1920                     }
1921                 }
1922             }
1923
1924           /* Now similarly satisfy all need for single registers.  */
1925
1926           while (max_needs[class] > 0 || max_nongroups[class] > 0)
1927             {
1928               /* If we spilled enough regs, but they weren't counted
1929                  against the non-group need, see if we can count them now.
1930                  If so, we can avoid some actual spilling.  */
1931               if (max_needs[class] <= 0 && max_nongroups[class] > 0)
1932                 for (i = 0; i < n_spills; i++)
1933                   if (TEST_HARD_REG_BIT (reg_class_contents[class],
1934                                          spill_regs[i])
1935                       && !TEST_HARD_REG_BIT (counted_for_groups,
1936                                              spill_regs[i])
1937                       && !TEST_HARD_REG_BIT (counted_for_nongroups,
1938                                              spill_regs[i])
1939                       && max_nongroups[class] > 0)
1940                     {
1941                       register enum reg_class *p;
1942
1943                       SET_HARD_REG_BIT (counted_for_nongroups, spill_regs[i]);
1944                       max_nongroups[class]--;
1945                       p = reg_class_superclasses[class];
1946                       while (*p != LIM_REG_CLASSES)
1947                         max_nongroups[(int) *p++]--;
1948                     }
1949               if (max_needs[class] <= 0 && max_nongroups[class] <= 0)
1950                 break;
1951
1952               /* Consider the potential reload regs that aren't
1953                  yet in use as reload regs, in order of preference.
1954                  Find the most preferred one that's in this class.  */
1955
1956               for (i = 0; i < FIRST_PSEUDO_REGISTER; i++)
1957                 if (potential_reload_regs[i] >= 0
1958                     && TEST_HARD_REG_BIT (reg_class_contents[class],
1959                                           potential_reload_regs[i])
1960                     /* If this reg will not be available for groups,
1961                        pick one that does not foreclose possible groups.
1962                        This is a kludge, and not very general,
1963                        but it should be sufficient to make the 386 work,
1964                        and the problem should not occur on machines with
1965                        more registers.  */
1966                     && (max_nongroups[class] == 0
1967                         || possible_group_p (potential_reload_regs[i], max_groups)))
1968                   break;
1969
1970               /* If we couldn't get a register, try to get one even if we
1971                  might foreclose possible groups.  This may cause problems
1972                  later, but that's better than aborting now, since it is
1973                  possible that we will, in fact, be able to form the needed
1974                  group even with this allocation.  */
1975
1976               if (i >= FIRST_PSEUDO_REGISTER
1977                   && (asm_noperands (max_needs[class] > 0
1978                                      ? max_needs_insn[class]
1979                                      : max_nongroups_insn[class])
1980                       < 0))
1981                 for (i = 0; i < FIRST_PSEUDO_REGISTER; i++)
1982                   if (potential_reload_regs[i] >= 0
1983                       && TEST_HARD_REG_BIT (reg_class_contents[class],
1984                                             potential_reload_regs[i]))
1985                     break;
1986
1987               /* I should be the index in potential_reload_regs
1988                  of the new reload reg we have found.  */
1989
1990               if (i >= FIRST_PSEUDO_REGISTER)
1991                 {
1992                   /* There are no possible registers left to spill.  */
1993                   spill_failure (max_needs[class] > 0 ? max_needs_insn[class]
1994                                  : max_nongroups_insn[class]);
1995                   failure = 1;
1996                   goto failed;
1997                 }
1998               else
1999                 something_changed
2000                   |= new_spill_reg (i, class, max_needs, max_nongroups,
2001                                     global, dumpfile);
2002             }
2003         }
2004     }
2005
2006   /* If global-alloc was run, notify it of any register eliminations we have
2007      done.  */
2008   if (global)
2009     for (ep = reg_eliminate; ep < &reg_eliminate[NUM_ELIMINABLE_REGS]; ep++)
2010       if (ep->can_eliminate)
2011         mark_elimination (ep->from, ep->to);
2012
2013   /* Insert code to save and restore call-clobbered hard regs
2014      around calls.  Tell if what mode to use so that we will process
2015      those insns in reload_as_needed if we have to.  */
2016
2017   if (caller_save_needed)
2018     save_call_clobbered_regs (num_eliminable ? QImode
2019                               : caller_save_spill_class != NO_REGS ? HImode
2020                               : VOIDmode);
2021
2022   /* If a pseudo has no hard reg, delete the insns that made the equivalence.
2023      If that insn didn't set the register (i.e., it copied the register to
2024      memory), just delete that insn instead of the equivalencing insn plus
2025      anything now dead.  If we call delete_dead_insn on that insn, we may
2026      delete the insn that actually sets the register if the register die
2027      there and that is incorrect.  */
2028
2029   for (i = FIRST_PSEUDO_REGISTER; i < max_regno; i++)
2030     if (reg_renumber[i] < 0 && reg_equiv_init[i] != 0
2031         && GET_CODE (reg_equiv_init[i]) != NOTE)
2032       {
2033         if (reg_set_p (regno_reg_rtx[i], PATTERN (reg_equiv_init[i])))
2034           delete_dead_insn (reg_equiv_init[i]);
2035         else
2036           {
2037             PUT_CODE (reg_equiv_init[i], NOTE);
2038             NOTE_SOURCE_FILE (reg_equiv_init[i]) = 0;
2039             NOTE_LINE_NUMBER (reg_equiv_init[i]) = NOTE_INSN_DELETED;
2040           }
2041       }
2042
2043   /* Use the reload registers where necessary
2044      by generating move instructions to move the must-be-register
2045      values into or out of the reload registers.  */
2046
2047   if (something_needs_reloads || something_needs_elimination
2048       || (caller_save_needed && num_eliminable)
2049       || caller_save_spill_class != NO_REGS)
2050     reload_as_needed (first, global);
2051
2052   /* If we were able to eliminate the frame pointer, show that it is no
2053      longer live at the start of any basic block.  If it ls live by
2054      virtue of being in a pseudo, that pseudo will be marked live
2055      and hence the frame pointer will be known to be live via that
2056      pseudo.  */
2057
2058   if (! frame_pointer_needed)
2059     for (i = 0; i < n_basic_blocks; i++)
2060       CLEAR_REGNO_REG_SET (basic_block_live_at_start[i],
2061                            HARD_FRAME_POINTER_REGNUM);
2062
2063   /* Come here (with failure set nonzero) if we can't get enough spill regs
2064      and we decide not to abort about it.  */
2065  failed:
2066
2067   reload_in_progress = 0;
2068
2069   /* Now eliminate all pseudo regs by modifying them into
2070      their equivalent memory references.
2071      The REG-rtx's for the pseudos are modified in place,
2072      so all insns that used to refer to them now refer to memory.
2073
2074      For a reg that has a reg_equiv_address, all those insns
2075      were changed by reloading so that no insns refer to it any longer;
2076      but the DECL_RTL of a variable decl may refer to it,
2077      and if so this causes the debugging info to mention the variable.  */
2078
2079   for (i = FIRST_PSEUDO_REGISTER; i < max_regno; i++)
2080     {
2081       rtx addr = 0;
2082       int in_struct = 0;
2083       int is_readonly = 0;
2084
2085       if (reg_equiv_memory_loc[i])
2086         {
2087           in_struct = MEM_IN_STRUCT_P (reg_equiv_memory_loc[i]);
2088           is_readonly = RTX_UNCHANGING_P (reg_equiv_memory_loc[i]);
2089         }
2090
2091       if (reg_equiv_mem[i])
2092         addr = XEXP (reg_equiv_mem[i], 0);
2093
2094       if (reg_equiv_address[i])
2095         addr = reg_equiv_address[i];
2096
2097       if (addr)
2098         {
2099           if (reg_renumber[i] < 0)
2100             {
2101               rtx reg = regno_reg_rtx[i];
2102               XEXP (reg, 0) = addr;
2103               REG_USERVAR_P (reg) = 0;
2104               RTX_UNCHANGING_P (reg) = is_readonly;
2105               MEM_IN_STRUCT_P (reg) = in_struct;
2106               /* We have no alias information about this newly created
2107                  MEM.  */
2108               MEM_ALIAS_SET (reg) = 0;
2109               PUT_CODE (reg, MEM);
2110             }
2111           else if (reg_equiv_mem[i])
2112             XEXP (reg_equiv_mem[i], 0) = addr;
2113         }
2114     }
2115
2116   /* Make a pass over all the insns and delete all USEs which we inserted
2117      only to tag a REG_EQUAL note on them; if PRESERVE_DEATH_INFO_REGNO_P
2118      is defined, also remove death notes for things that are no longer
2119      registers or no longer die in the insn (e.g., an input and output
2120      pseudo being tied).  */
2121
2122   for (insn = first; insn; insn = NEXT_INSN (insn))
2123     if (GET_RTX_CLASS (GET_CODE (insn)) == 'i')
2124       {
2125 #ifdef PRESERVE_DEATH_INFO_REGNO_P
2126         rtx note, next;
2127 #endif
2128
2129         if (GET_CODE (PATTERN (insn)) == USE
2130             && find_reg_note (insn, REG_EQUAL, NULL_RTX))
2131           {
2132             PUT_CODE (insn, NOTE);
2133             NOTE_SOURCE_FILE (insn) = 0;
2134             NOTE_LINE_NUMBER (insn) = NOTE_INSN_DELETED;
2135             continue;
2136           }
2137 #ifdef PRESERVE_DEATH_INFO_REGNO_P
2138         for (note = REG_NOTES (insn); note; note = next)
2139           {
2140             next = XEXP (note, 1);
2141             if (REG_NOTE_KIND (note) == REG_DEAD
2142                 && (GET_CODE (XEXP (note, 0)) != REG
2143                     || reg_set_p (XEXP (note, 0), PATTERN (insn))))
2144               remove_note (insn, note);
2145           }
2146 #endif
2147       }
2148
2149   /* If we are doing stack checking, give a warning if this function's
2150      frame size is larger than we expect.  */
2151   if (flag_stack_check && ! STACK_CHECK_BUILTIN)
2152     {
2153       HOST_WIDE_INT size = get_frame_size () + STACK_CHECK_FIXED_FRAME_SIZE;
2154
2155       for (i = 0; i < FIRST_PSEUDO_REGISTER; i++)
2156         if (regs_ever_live[i] && ! fixed_regs[i] && call_used_regs[i])
2157           size += UNITS_PER_WORD;
2158
2159       if (size > STACK_CHECK_MAX_FRAME_SIZE)
2160         warning ("frame size too large for reliable stack checking");
2161     }
2162         
2163   /* Indicate that we no longer have known memory locations or constants.  */
2164   reg_equiv_constant = 0;
2165   reg_equiv_memory_loc = 0;
2166
2167   if (real_known_ptr)
2168     free (real_known_ptr);
2169   if (real_at_ptr)
2170     free (real_at_ptr);
2171
2172   if (scratch_list)
2173     free (scratch_list);
2174   scratch_list = 0;
2175   if (scratch_block)
2176     free (scratch_block);
2177   scratch_block = 0;
2178
2179   CLEAR_HARD_REG_SET (used_spill_regs);
2180   for (i = 0; i < n_spills; i++)
2181     SET_HARD_REG_BIT (used_spill_regs, spill_regs[i]);
2182
2183   return failure;
2184 }
2185 \f
2186 /* Nonzero if, after spilling reg REGNO for non-groups,
2187    it will still be possible to find a group if we still need one.  */
2188
2189 static int
2190 possible_group_p (regno, max_groups)
2191      int regno;
2192      int *max_groups;
2193 {
2194   int i;
2195   int class = (int) NO_REGS;
2196
2197   for (i = 0; i < (int) N_REG_CLASSES; i++)
2198     if (max_groups[i] > 0)
2199       {
2200         class = i;
2201         break;
2202       }
2203
2204   if (class == (int) NO_REGS)
2205     return 1;
2206
2207   /* Consider each pair of consecutive registers.  */
2208   for (i = 0; i < FIRST_PSEUDO_REGISTER - 1; i++)
2209     {
2210       /* Ignore pairs that include reg REGNO.  */
2211       if (i == regno || i + 1 == regno)
2212         continue;
2213
2214       /* Ignore pairs that are outside the class that needs the group.
2215          ??? Here we fail to handle the case where two different classes
2216          independently need groups.  But this never happens with our
2217          current machine descriptions.  */
2218       if (! (TEST_HARD_REG_BIT (reg_class_contents[class], i)
2219              && TEST_HARD_REG_BIT (reg_class_contents[class], i + 1)))
2220         continue;
2221
2222       /* A pair of consecutive regs we can still spill does the trick.  */
2223       if (spill_reg_order[i] < 0 && spill_reg_order[i + 1] < 0
2224           && ! TEST_HARD_REG_BIT (bad_spill_regs, i)
2225           && ! TEST_HARD_REG_BIT (bad_spill_regs, i + 1))
2226         return 1;
2227
2228       /* A pair of one already spilled and one we can spill does it
2229          provided the one already spilled is not otherwise reserved.  */
2230       if (spill_reg_order[i] < 0
2231           && ! TEST_HARD_REG_BIT (bad_spill_regs, i)
2232           && spill_reg_order[i + 1] >= 0
2233           && ! TEST_HARD_REG_BIT (counted_for_groups, i + 1)
2234           && ! TEST_HARD_REG_BIT (counted_for_nongroups, i + 1))
2235         return 1;
2236       if (spill_reg_order[i + 1] < 0
2237           && ! TEST_HARD_REG_BIT (bad_spill_regs, i + 1)
2238           && spill_reg_order[i] >= 0
2239           && ! TEST_HARD_REG_BIT (counted_for_groups, i)
2240           && ! TEST_HARD_REG_BIT (counted_for_nongroups, i))
2241         return 1;
2242     }
2243
2244   return 0;
2245 }
2246 \f
2247 /* Count any groups of CLASS that can be formed from the registers recently
2248    spilled.  */
2249
2250 static void
2251 count_possible_groups (group_size, group_mode, max_groups, class)
2252      int *group_size;
2253      enum machine_mode *group_mode;
2254      int *max_groups;
2255      int class;
2256 {
2257   HARD_REG_SET new;
2258   int i, j;
2259
2260   /* Now find all consecutive groups of spilled registers
2261      and mark each group off against the need for such groups.
2262      But don't count them against ordinary need, yet.  */
2263
2264   if (group_size[class] == 0)
2265     return;
2266
2267   CLEAR_HARD_REG_SET (new);
2268
2269   /* Make a mask of all the regs that are spill regs in class I.  */
2270   for (i = 0; i < n_spills; i++)
2271     if (TEST_HARD_REG_BIT (reg_class_contents[class], spill_regs[i])
2272         && ! TEST_HARD_REG_BIT (counted_for_groups, spill_regs[i])
2273         && ! TEST_HARD_REG_BIT (counted_for_nongroups, spill_regs[i]))
2274       SET_HARD_REG_BIT (new, spill_regs[i]);
2275
2276   /* Find each consecutive group of them.  */
2277   for (i = 0; i < FIRST_PSEUDO_REGISTER && max_groups[class] > 0; i++)
2278     if (TEST_HARD_REG_BIT (new, i)
2279         && i + group_size[class] <= FIRST_PSEUDO_REGISTER
2280         && HARD_REGNO_MODE_OK (i, group_mode[class]))
2281       {
2282         for (j = 1; j < group_size[class]; j++)
2283           if (! TEST_HARD_REG_BIT (new, i + j))
2284             break;
2285
2286         if (j == group_size[class])
2287           {
2288             /* We found a group.  Mark it off against this class's need for
2289                groups, and against each superclass too.  */
2290             register enum reg_class *p;
2291
2292             max_groups[class]--;
2293             p = reg_class_superclasses[class];
2294             while (*p != LIM_REG_CLASSES)
2295               {
2296                 if (group_size [(int) *p] <= group_size [class])
2297                   max_groups[(int) *p]--;
2298                 p++;
2299               }
2300
2301             /* Don't count these registers again.  */
2302             for (j = 0; j < group_size[class]; j++)
2303               SET_HARD_REG_BIT (counted_for_groups, i + j);
2304           }
2305
2306         /* Skip to the last reg in this group.  When i is incremented above,
2307            it will then point to the first reg of the next possible group.  */
2308         i += j - 1;
2309       }
2310 }
2311 \f
2312 /* ALLOCATE_MODE is a register mode that needs to be reloaded.  OTHER_MODE is
2313    another mode that needs to be reloaded for the same register class CLASS.
2314    If any reg in CLASS allows ALLOCATE_MODE but not OTHER_MODE, fail.
2315    ALLOCATE_MODE will never be smaller than OTHER_MODE.
2316
2317    This code used to also fail if any reg in CLASS allows OTHER_MODE but not
2318    ALLOCATE_MODE.  This test is unnecessary, because we will never try to put
2319    something of mode ALLOCATE_MODE into an OTHER_MODE register.  Testing this
2320    causes unnecessary failures on machines requiring alignment of register
2321    groups when the two modes are different sizes, because the larger mode has
2322    more strict alignment rules than the smaller mode.  */
2323
2324 static int
2325 modes_equiv_for_class_p (allocate_mode, other_mode, class)
2326      enum machine_mode allocate_mode, other_mode;
2327      enum reg_class class;
2328 {
2329   register int regno;
2330   for (regno = 0; regno < FIRST_PSEUDO_REGISTER; regno++)
2331     {
2332       if (TEST_HARD_REG_BIT (reg_class_contents[(int) class], regno)
2333           && HARD_REGNO_MODE_OK (regno, allocate_mode)
2334           && ! HARD_REGNO_MODE_OK (regno, other_mode))
2335         return 0;
2336     }
2337   return 1;
2338 }
2339
2340 /* Handle the failure to find a register to spill.
2341    INSN should be one of the insns which needed this particular spill reg.  */
2342
2343 static void
2344 spill_failure (insn)
2345      rtx insn;
2346 {
2347   if (asm_noperands (PATTERN (insn)) >= 0)
2348     error_for_asm (insn, "`asm' needs too many reloads");
2349   else
2350     fatal_insn ("Unable to find a register to spill.", insn);
2351 }
2352
2353 /* Add a new register to the tables of available spill-registers
2354     (as well as spilling all pseudos allocated to the register).
2355    I is the index of this register in potential_reload_regs.
2356    CLASS is the regclass whose need is being satisfied.
2357    MAX_NEEDS and MAX_NONGROUPS are the vectors of needs,
2358     so that this register can count off against them.
2359     MAX_NONGROUPS is 0 if this register is part of a group.
2360    GLOBAL and DUMPFILE are the same as the args that `reload' got.  */
2361
2362 static int
2363 new_spill_reg (i, class, max_needs, max_nongroups, global, dumpfile)
2364      int i;
2365      int class;
2366      int *max_needs;
2367      int *max_nongroups;
2368      int global;
2369      FILE *dumpfile;
2370 {
2371   register enum reg_class *p;
2372   int val;
2373   int regno = potential_reload_regs[i];
2374
2375   if (i >= FIRST_PSEUDO_REGISTER)
2376     abort ();   /* Caller failed to find any register.  */
2377
2378   if (fixed_regs[regno] || TEST_HARD_REG_BIT (forbidden_regs, regno))
2379     {
2380       static char *reg_class_names[] = REG_CLASS_NAMES;
2381       fatal ("fixed or forbidden register %d (%s) was spilled for class %s.\n\
2382 This may be due to a compiler bug or to impossible asm\n\
2383 statements or clauses.", regno, reg_names[regno], reg_class_names[class]);
2384     }
2385
2386   /* Make reg REGNO an additional reload reg.  */
2387
2388   potential_reload_regs[i] = -1;
2389   spill_regs[n_spills] = regno;
2390   spill_reg_order[regno] = n_spills;
2391   if (dumpfile)
2392     fprintf (dumpfile, "Spilling reg %d.\n", spill_regs[n_spills]);
2393
2394   /* Clear off the needs we just satisfied.  */
2395
2396   max_needs[class]--;
2397   p = reg_class_superclasses[class];
2398   while (*p != LIM_REG_CLASSES)
2399     max_needs[(int) *p++]--;
2400
2401   if (max_nongroups && max_nongroups[class] > 0)
2402     {
2403       SET_HARD_REG_BIT (counted_for_nongroups, regno);
2404       max_nongroups[class]--;
2405       p = reg_class_superclasses[class];
2406       while (*p != LIM_REG_CLASSES)
2407         max_nongroups[(int) *p++]--;
2408     }
2409
2410   /* Spill every pseudo reg that was allocated to this reg
2411      or to something that overlaps this reg.  */
2412
2413   val = spill_hard_reg (spill_regs[n_spills], global, dumpfile, 0);
2414
2415   /* If there are some registers still to eliminate and this register
2416      wasn't ever used before, additional stack space may have to be
2417      allocated to store this register.  Thus, we may have changed the offset
2418      between the stack and frame pointers, so mark that something has changed.
2419      (If new pseudos were spilled, thus requiring more space, VAL would have
2420      been set non-zero by the call to spill_hard_reg above since additional
2421      reloads may be needed in that case.
2422
2423      One might think that we need only set VAL to 1 if this is a call-used
2424      register.  However, the set of registers that must be saved by the
2425      prologue is not identical to the call-used set.  For example, the
2426      register used by the call insn for the return PC is a call-used register,
2427      but must be saved by the prologue.  */
2428   if (num_eliminable && ! regs_ever_live[spill_regs[n_spills]])
2429     val = 1;
2430
2431   regs_ever_live[spill_regs[n_spills]] = 1;
2432   n_spills++;
2433
2434   return val;
2435 }
2436 \f
2437 /* Delete an unneeded INSN and any previous insns who sole purpose is loading
2438    data that is dead in INSN.  */
2439
2440 static void
2441 delete_dead_insn (insn)
2442      rtx insn;
2443 {
2444   rtx prev = prev_real_insn (insn);
2445   rtx prev_dest;
2446
2447   /* If the previous insn sets a register that dies in our insn, delete it
2448      too.  */
2449   if (prev && GET_CODE (PATTERN (prev)) == SET
2450       && (prev_dest = SET_DEST (PATTERN (prev)), GET_CODE (prev_dest) == REG)
2451       && reg_mentioned_p (prev_dest, PATTERN (insn))
2452       && find_regno_note (insn, REG_DEAD, REGNO (prev_dest))
2453       && ! side_effects_p (SET_SRC (PATTERN (prev))))
2454     delete_dead_insn (prev);
2455
2456   PUT_CODE (insn, NOTE);
2457   NOTE_LINE_NUMBER (insn) = NOTE_INSN_DELETED;
2458   NOTE_SOURCE_FILE (insn) = 0;
2459 }
2460
2461 /* Modify the home of pseudo-reg I.
2462    The new home is present in reg_renumber[I].
2463
2464    FROM_REG may be the hard reg that the pseudo-reg is being spilled from;
2465    or it may be -1, meaning there is none or it is not relevant.
2466    This is used so that all pseudos spilled from a given hard reg
2467    can share one stack slot.  */
2468
2469 static void
2470 alter_reg (i, from_reg)
2471      register int i;
2472      int from_reg;
2473 {
2474   /* When outputting an inline function, this can happen
2475      for a reg that isn't actually used.  */
2476   if (regno_reg_rtx[i] == 0)
2477     return;
2478
2479   /* If the reg got changed to a MEM at rtl-generation time,
2480      ignore it.  */
2481   if (GET_CODE (regno_reg_rtx[i]) != REG)
2482     return;
2483
2484   /* Modify the reg-rtx to contain the new hard reg
2485      number or else to contain its pseudo reg number.  */
2486   REGNO (regno_reg_rtx[i])
2487     = reg_renumber[i] >= 0 ? reg_renumber[i] : i;
2488
2489   /* If we have a pseudo that is needed but has no hard reg or equivalent,
2490      allocate a stack slot for it.  */
2491
2492   if (reg_renumber[i] < 0
2493       && REG_N_REFS (i) > 0
2494       && reg_equiv_constant[i] == 0
2495       && reg_equiv_memory_loc[i] == 0)
2496     {
2497       register rtx x;
2498       int inherent_size = PSEUDO_REGNO_BYTES (i);
2499       int total_size = MAX (inherent_size, reg_max_ref_width[i]);
2500       int adjust = 0;
2501
2502       /* Each pseudo reg has an inherent size which comes from its own mode,
2503          and a total size which provides room for paradoxical subregs
2504          which refer to the pseudo reg in wider modes.
2505
2506          We can use a slot already allocated if it provides both
2507          enough inherent space and enough total space.
2508          Otherwise, we allocate a new slot, making sure that it has no less
2509          inherent space, and no less total space, then the previous slot.  */
2510       if (from_reg == -1)
2511         {
2512           /* No known place to spill from => no slot to reuse.  */
2513           x = assign_stack_local (GET_MODE (regno_reg_rtx[i]), total_size,
2514                                   inherent_size == total_size ? 0 : -1);
2515           if (BYTES_BIG_ENDIAN)
2516             /* Cancel the  big-endian correction done in assign_stack_local.
2517                Get the address of the beginning of the slot.
2518                This is so we can do a big-endian correction unconditionally
2519                below.  */
2520             adjust = inherent_size - total_size;
2521
2522           RTX_UNCHANGING_P (x) = RTX_UNCHANGING_P (regno_reg_rtx[i]);
2523         }
2524       /* Reuse a stack slot if possible.  */
2525       else if (spill_stack_slot[from_reg] != 0
2526                && spill_stack_slot_width[from_reg] >= total_size
2527                && (GET_MODE_SIZE (GET_MODE (spill_stack_slot[from_reg]))
2528                    >= inherent_size))
2529         x = spill_stack_slot[from_reg];
2530       /* Allocate a bigger slot.  */
2531       else
2532         {
2533           /* Compute maximum size needed, both for inherent size
2534              and for total size.  */
2535           enum machine_mode mode = GET_MODE (regno_reg_rtx[i]);
2536           rtx stack_slot;
2537           if (spill_stack_slot[from_reg])
2538             {
2539               if (GET_MODE_SIZE (GET_MODE (spill_stack_slot[from_reg]))
2540                   > inherent_size)
2541                 mode = GET_MODE (spill_stack_slot[from_reg]);
2542               if (spill_stack_slot_width[from_reg] > total_size)
2543                 total_size = spill_stack_slot_width[from_reg];
2544             }
2545           /* Make a slot with that size.  */
2546           x = assign_stack_local (mode, total_size,
2547                                   inherent_size == total_size ? 0 : -1);
2548           stack_slot = x;
2549           if (BYTES_BIG_ENDIAN)
2550             {
2551               /* Cancel the  big-endian correction done in assign_stack_local.
2552                  Get the address of the beginning of the slot.
2553                  This is so we can do a big-endian correction unconditionally
2554                  below.  */
2555               adjust = GET_MODE_SIZE (mode) - total_size;
2556               if (adjust)
2557                 stack_slot = gen_rtx_MEM (mode_for_size (total_size
2558                                                          * BITS_PER_UNIT,
2559                                                          MODE_INT, 1),
2560                                       plus_constant (XEXP (x, 0), adjust));
2561             }
2562           spill_stack_slot[from_reg] = stack_slot;
2563           spill_stack_slot_width[from_reg] = total_size;
2564         }
2565
2566       /* On a big endian machine, the "address" of the slot
2567          is the address of the low part that fits its inherent mode.  */
2568       if (BYTES_BIG_ENDIAN && inherent_size < total_size)
2569         adjust += (total_size - inherent_size);
2570
2571       /* If we have any adjustment to make, or if the stack slot is the
2572          wrong mode, make a new stack slot.  */
2573       if (adjust != 0 || GET_MODE (x) != GET_MODE (regno_reg_rtx[i]))
2574         {
2575           x = gen_rtx_MEM (GET_MODE (regno_reg_rtx[i]),
2576                        plus_constant (XEXP (x, 0), adjust));
2577
2578           /* If this was shared among registers, must ensure we never
2579              set it readonly since that can cause scheduling
2580              problems.  Note we would only have in this adjustment
2581              case in any event, since the code above doesn't set it.  */
2582
2583           if (from_reg == -1)
2584             RTX_UNCHANGING_P (x) = RTX_UNCHANGING_P (regno_reg_rtx[i]);
2585         }
2586
2587       /* Save the stack slot for later.   */
2588       reg_equiv_memory_loc[i] = x;
2589     }
2590 }
2591
2592 /* Mark the slots in regs_ever_live for the hard regs
2593    used by pseudo-reg number REGNO.  */
2594
2595 void
2596 mark_home_live (regno)
2597      int regno;
2598 {
2599   register int i, lim;
2600   i = reg_renumber[regno];
2601   if (i < 0)
2602     return;
2603   lim = i + HARD_REGNO_NREGS (i, PSEUDO_REGNO_MODE (regno));
2604   while (i < lim)
2605     regs_ever_live[i++] = 1;
2606 }
2607
2608 /* Mark the registers used in SCRATCH as being live.  */
2609
2610 static void
2611 mark_scratch_live (scratch)
2612      rtx scratch;
2613 {
2614   register int i;
2615   int regno = REGNO (scratch);
2616   int lim = regno + HARD_REGNO_NREGS (regno, GET_MODE (scratch));
2617
2618   for (i = regno; i < lim; i++)
2619     regs_ever_live[i] = 1;
2620 }
2621 \f
2622 /* This function handles the tracking of elimination offsets around branches.
2623
2624    X is a piece of RTL being scanned.
2625
2626    INSN is the insn that it came from, if any.
2627
2628    INITIAL_P is non-zero if we are to set the offset to be the initial
2629    offset and zero if we are setting the offset of the label to be the
2630    current offset.  */
2631
2632 static void
2633 set_label_offsets (x, insn, initial_p)
2634      rtx x;
2635      rtx insn;
2636      int initial_p;
2637 {
2638   enum rtx_code code = GET_CODE (x);
2639   rtx tem;
2640   int i;
2641   struct elim_table *p;
2642
2643   switch (code)
2644     {
2645     case LABEL_REF:
2646       if (LABEL_REF_NONLOCAL_P (x))
2647         return;
2648
2649       x = XEXP (x, 0);
2650
2651       /* ... fall through ...  */
2652
2653     case CODE_LABEL:
2654       /* If we know nothing about this label, set the desired offsets.  Note
2655          that this sets the offset at a label to be the offset before a label
2656          if we don't know anything about the label.  This is not correct for
2657          the label after a BARRIER, but is the best guess we can make.  If
2658          we guessed wrong, we will suppress an elimination that might have
2659          been possible had we been able to guess correctly.  */
2660
2661       if (! offsets_known_at[CODE_LABEL_NUMBER (x)])
2662         {
2663           for (i = 0; i < NUM_ELIMINABLE_REGS; i++)
2664             offsets_at[CODE_LABEL_NUMBER (x)][i]
2665               = (initial_p ? reg_eliminate[i].initial_offset
2666                  : reg_eliminate[i].offset);
2667           offsets_known_at[CODE_LABEL_NUMBER (x)] = 1;
2668         }
2669
2670       /* Otherwise, if this is the definition of a label and it is
2671          preceded by a BARRIER, set our offsets to the known offset of
2672          that label.  */
2673
2674       else if (x == insn
2675                && (tem = prev_nonnote_insn (insn)) != 0
2676                && GET_CODE (tem) == BARRIER)
2677         {
2678           num_not_at_initial_offset = 0;
2679           for (i = 0; i < NUM_ELIMINABLE_REGS; i++)
2680             {
2681               reg_eliminate[i].offset = reg_eliminate[i].previous_offset
2682                 = offsets_at[CODE_LABEL_NUMBER (x)][i];
2683               if (reg_eliminate[i].can_eliminate
2684                   && (reg_eliminate[i].offset
2685                       != reg_eliminate[i].initial_offset))
2686                 num_not_at_initial_offset++;
2687             }
2688         }
2689
2690       else
2691         /* If neither of the above cases is true, compare each offset
2692            with those previously recorded and suppress any eliminations
2693            where the offsets disagree.  */
2694
2695         for (i = 0; i < NUM_ELIMINABLE_REGS; i++)
2696           if (offsets_at[CODE_LABEL_NUMBER (x)][i]
2697               != (initial_p ? reg_eliminate[i].initial_offset
2698                   : reg_eliminate[i].offset))
2699             reg_eliminate[i].can_eliminate = 0;
2700
2701       return;
2702
2703     case JUMP_INSN:
2704       set_label_offsets (PATTERN (insn), insn, initial_p);
2705
2706       /* ... fall through ...  */
2707
2708     case INSN:
2709     case CALL_INSN:
2710       /* Any labels mentioned in REG_LABEL notes can be branched to indirectly
2711          and hence must have all eliminations at their initial offsets.  */
2712       for (tem = REG_NOTES (x); tem; tem = XEXP (tem, 1))
2713         if (REG_NOTE_KIND (tem) == REG_LABEL)
2714           set_label_offsets (XEXP (tem, 0), insn, 1);
2715       return;
2716
2717     case ADDR_VEC:
2718     case ADDR_DIFF_VEC:
2719       /* Each of the labels in the address vector must be at their initial
2720          offsets.  We want the first field for ADDR_VEC and the second
2721          field for ADDR_DIFF_VEC.  */
2722
2723       for (i = 0; i < XVECLEN (x, code == ADDR_DIFF_VEC); i++)
2724         set_label_offsets (XVECEXP (x, code == ADDR_DIFF_VEC, i),
2725                            insn, initial_p);
2726       return;
2727
2728     case SET:
2729       /* We only care about setting PC.  If the source is not RETURN,
2730          IF_THEN_ELSE, or a label, disable any eliminations not at
2731          their initial offsets.  Similarly if any arm of the IF_THEN_ELSE
2732          isn't one of those possibilities.  For branches to a label,
2733          call ourselves recursively.
2734
2735          Note that this can disable elimination unnecessarily when we have
2736          a non-local goto since it will look like a non-constant jump to
2737          someplace in the current function.  This isn't a significant
2738          problem since such jumps will normally be when all elimination
2739          pairs are back to their initial offsets.  */
2740
2741       if (SET_DEST (x) != pc_rtx)
2742         return;
2743
2744       switch (GET_CODE (SET_SRC (x)))
2745         {
2746         case PC:
2747         case RETURN:
2748           return;
2749
2750         case LABEL_REF:
2751           set_label_offsets (XEXP (SET_SRC (x), 0), insn, initial_p);
2752           return;
2753
2754         case IF_THEN_ELSE:
2755           tem = XEXP (SET_SRC (x), 1);
2756           if (GET_CODE (tem) == LABEL_REF)
2757             set_label_offsets (XEXP (tem, 0), insn, initial_p);
2758           else if (GET_CODE (tem) != PC && GET_CODE (tem) != RETURN)
2759             break;
2760
2761           tem = XEXP (SET_SRC (x), 2);
2762           if (GET_CODE (tem) == LABEL_REF)
2763             set_label_offsets (XEXP (tem, 0), insn, initial_p);
2764           else if (GET_CODE (tem) != PC && GET_CODE (tem) != RETURN)
2765             break;
2766           return;
2767
2768         default:
2769           break;
2770         }
2771
2772       /* If we reach here, all eliminations must be at their initial
2773          offset because we are doing a jump to a variable address.  */
2774       for (p = reg_eliminate; p < &reg_eliminate[NUM_ELIMINABLE_REGS]; p++)
2775         if (p->offset != p->initial_offset)
2776           p->can_eliminate = 0;
2777       break;
2778       
2779     default:
2780       break;
2781     }
2782 }
2783 \f
2784 /* Used for communication between the next two function to properly share
2785    the vector for an ASM_OPERANDS.  */
2786
2787 static struct rtvec_def *old_asm_operands_vec, *new_asm_operands_vec;
2788
2789 /* Scan X and replace any eliminable registers (such as fp) with a
2790    replacement (such as sp), plus an offset.
2791
2792    MEM_MODE is the mode of an enclosing MEM.  We need this to know how
2793    much to adjust a register for, e.g., PRE_DEC.  Also, if we are inside a
2794    MEM, we are allowed to replace a sum of a register and the constant zero
2795    with the register, which we cannot do outside a MEM.  In addition, we need
2796    to record the fact that a register is referenced outside a MEM.
2797
2798    If INSN is an insn, it is the insn containing X.  If we replace a REG
2799    in a SET_DEST with an equivalent MEM and INSN is non-zero, write a
2800    CLOBBER of the pseudo after INSN so find_equiv_regs will know that
2801    the REG is being modified.
2802
2803    Alternatively, INSN may be a note (an EXPR_LIST or INSN_LIST).
2804    That's used when we eliminate in expressions stored in notes.
2805    This means, do not set ref_outside_mem even if the reference
2806    is outside of MEMs.
2807
2808    If we see a modification to a register we know about, take the
2809    appropriate action (see case SET, below).
2810
2811    REG_EQUIV_MEM and REG_EQUIV_ADDRESS contain address that have had
2812    replacements done assuming all offsets are at their initial values.  If
2813    they are not, or if REG_EQUIV_ADDRESS is nonzero for a pseudo we
2814    encounter, return the actual location so that find_reloads will do
2815    the proper thing.  */
2816
2817 rtx
2818 eliminate_regs (x, mem_mode, insn)
2819      rtx x;
2820      enum machine_mode mem_mode;
2821      rtx insn;
2822 {
2823   enum rtx_code code = GET_CODE (x);
2824   struct elim_table *ep;
2825   int regno;
2826   rtx new;
2827   int i, j;
2828   char *fmt;
2829   int copied = 0;
2830
2831   switch (code)
2832     {
2833     case CONST_INT:
2834     case CONST_DOUBLE:
2835     case CONST:
2836     case SYMBOL_REF:
2837     case CODE_LABEL:
2838     case PC:
2839     case CC0:
2840     case ASM_INPUT:
2841     case ADDR_VEC:
2842     case ADDR_DIFF_VEC:
2843     case RETURN:
2844       return x;
2845
2846     case ADDRESSOF:
2847       /* This is only for the benefit of the debugging backends, which call
2848          eliminate_regs on DECL_RTL; any ADDRESSOFs in the actual insns are
2849          removed after CSE.  */
2850       new = eliminate_regs (XEXP (x, 0), 0, insn);
2851       if (GET_CODE (new) == MEM)
2852         return XEXP (new, 0);
2853       return x;
2854
2855     case REG:
2856       regno = REGNO (x);
2857
2858       /* First handle the case where we encounter a bare register that
2859          is eliminable.  Replace it with a PLUS.  */
2860       if (regno < FIRST_PSEUDO_REGISTER)
2861         {
2862           for (ep = reg_eliminate; ep < &reg_eliminate[NUM_ELIMINABLE_REGS];
2863                ep++)
2864             if (ep->from_rtx == x && ep->can_eliminate)
2865               {
2866                 if (! mem_mode
2867                     /* Refs inside notes don't count for this purpose.  */
2868                     && ! (insn != 0 && (GET_CODE (insn) == EXPR_LIST
2869                                         || GET_CODE (insn) == INSN_LIST)))
2870                   ep->ref_outside_mem = 1;
2871                 return plus_constant (ep->to_rtx, ep->previous_offset);
2872               }
2873
2874         }
2875       else if (reg_equiv_memory_loc && reg_equiv_memory_loc[regno]
2876                && (reg_equiv_address[regno] || num_not_at_initial_offset))
2877         {
2878           /* In this case, find_reloads would attempt to either use an
2879              incorrect address (if something is not at its initial offset)
2880              or substitute an replaced address into an insn (which loses
2881              if the offset is changed by some later action).  So we simply
2882              return the replaced stack slot (assuming it is changed by
2883              elimination) and ignore the fact that this is actually a
2884              reference to the pseudo.  Ensure we make a copy of the
2885              address in case it is shared.  */
2886           new = eliminate_regs (reg_equiv_memory_loc[regno], mem_mode, insn);
2887           if (new != reg_equiv_memory_loc[regno])
2888             {
2889               if (insn != 0 && GET_CODE (insn) != EXPR_LIST
2890                   && GET_CODE (insn) != INSN_LIST)
2891                 REG_NOTES (emit_insn_before (gen_rtx_USE (VOIDmode, x), insn))
2892                   = gen_rtx_EXPR_LIST (REG_EQUAL, new, NULL_RTX);
2893               return copy_rtx (new);
2894             }
2895         }
2896       return x;
2897
2898     case PLUS:
2899       /* If this is the sum of an eliminable register and a constant, rework
2900          the sum.   */
2901       if (GET_CODE (XEXP (x, 0)) == REG
2902           && REGNO (XEXP (x, 0)) < FIRST_PSEUDO_REGISTER
2903           && CONSTANT_P (XEXP (x, 1)))
2904         {
2905           for (ep = reg_eliminate; ep < &reg_eliminate[NUM_ELIMINABLE_REGS];
2906                ep++)
2907             if (ep->from_rtx == XEXP (x, 0) && ep->can_eliminate)
2908               {
2909                 if (! mem_mode
2910                     /* Refs inside notes don't count for this purpose.  */
2911                     && ! (insn != 0 && (GET_CODE (insn) == EXPR_LIST
2912                                         || GET_CODE (insn) == INSN_LIST)))
2913                   ep->ref_outside_mem = 1;
2914
2915                 /* The only time we want to replace a PLUS with a REG (this
2916                    occurs when the constant operand of the PLUS is the negative
2917                    of the offset) is when we are inside a MEM.  We won't want
2918                    to do so at other times because that would change the
2919                    structure of the insn in a way that reload can't handle.
2920                    We special-case the commonest situation in
2921                    eliminate_regs_in_insn, so just replace a PLUS with a
2922                    PLUS here, unless inside a MEM.  */
2923                 if (mem_mode != 0 && GET_CODE (XEXP (x, 1)) == CONST_INT
2924                     && INTVAL (XEXP (x, 1)) == - ep->previous_offset)
2925                   return ep->to_rtx;
2926                 else
2927                   return gen_rtx_PLUS (Pmode, ep->to_rtx,
2928                                        plus_constant (XEXP (x, 1),
2929                                                       ep->previous_offset));
2930               }
2931
2932           /* If the register is not eliminable, we are done since the other
2933              operand is a constant.  */
2934           return x;
2935         }
2936
2937       /* If this is part of an address, we want to bring any constant to the
2938          outermost PLUS.  We will do this by doing register replacement in
2939          our operands and seeing if a constant shows up in one of them.
2940
2941          We assume here this is part of an address (or a "load address" insn)
2942          since an eliminable register is not likely to appear in any other
2943          context.
2944
2945          If we have (plus (eliminable) (reg)), we want to produce
2946          (plus (plus (replacement) (reg) (const))).  If this was part of a
2947          normal add insn, (plus (replacement) (reg)) will be pushed as a
2948          reload.  This is the desired action.  */
2949
2950       {
2951         rtx new0 = eliminate_regs (XEXP (x, 0), mem_mode, insn);
2952         rtx new1 = eliminate_regs (XEXP (x, 1), mem_mode, insn);
2953
2954         if (new0 != XEXP (x, 0) || new1 != XEXP (x, 1))
2955           {
2956             /* If one side is a PLUS and the other side is a pseudo that
2957                didn't get a hard register but has a reg_equiv_constant,
2958                we must replace the constant here since it may no longer
2959                be in the position of any operand.  */
2960             if (GET_CODE (new0) == PLUS && GET_CODE (new1) == REG
2961                 && REGNO (new1) >= FIRST_PSEUDO_REGISTER
2962                 && reg_renumber[REGNO (new1)] < 0
2963                 && reg_equiv_constant != 0
2964                 && reg_equiv_constant[REGNO (new1)] != 0)
2965               new1 = reg_equiv_constant[REGNO (new1)];
2966             else if (GET_CODE (new1) == PLUS && GET_CODE (new0) == REG
2967                      && REGNO (new0) >= FIRST_PSEUDO_REGISTER
2968                      && reg_renumber[REGNO (new0)] < 0
2969                      && reg_equiv_constant[REGNO (new0)] != 0)
2970               new0 = reg_equiv_constant[REGNO (new0)];
2971
2972             new = form_sum (new0, new1);
2973
2974             /* As above, if we are not inside a MEM we do not want to
2975                turn a PLUS into something else.  We might try to do so here
2976                for an addition of 0 if we aren't optimizing.  */
2977             if (! mem_mode && GET_CODE (new) != PLUS)
2978               return gen_rtx_PLUS (GET_MODE (x), new, const0_rtx);
2979             else
2980               return new;
2981           }
2982       }
2983       return x;
2984
2985     case MULT:
2986       /* If this is the product of an eliminable register and a 
2987          constant, apply the distribute law and move the constant out
2988          so that we have (plus (mult ..) ..).  This is needed in order
2989          to keep load-address insns valid.   This case is pathological.
2990          We ignore the possibility of overflow here.  */
2991       if (GET_CODE (XEXP (x, 0)) == REG
2992           && REGNO (XEXP (x, 0)) < FIRST_PSEUDO_REGISTER
2993           && GET_CODE (XEXP (x, 1)) == CONST_INT)
2994         for (ep = reg_eliminate; ep < &reg_eliminate[NUM_ELIMINABLE_REGS];
2995              ep++)
2996           if (ep->from_rtx == XEXP (x, 0) && ep->can_eliminate)
2997             {
2998               if (! mem_mode
2999                   /* Refs inside notes don't count for this purpose.  */
3000                   && ! (insn != 0 && (GET_CODE (insn) == EXPR_LIST
3001                                       || GET_CODE (insn) == INSN_LIST)))
3002                 ep->ref_outside_mem = 1;
3003
3004               return
3005                 plus_constant (gen_rtx_MULT (Pmode, ep->to_rtx, XEXP (x, 1)),
3006                                ep->previous_offset * INTVAL (XEXP (x, 1)));
3007             }
3008
3009       /* ... fall through ...  */
3010
3011     case CALL:
3012     case COMPARE:
3013     case MINUS:
3014     case DIV:      case UDIV:
3015     case MOD:      case UMOD:
3016     case AND:      case IOR:      case XOR:
3017     case ROTATERT: case ROTATE:
3018     case ASHIFTRT: case LSHIFTRT: case ASHIFT:
3019     case NE:       case EQ:
3020     case GE:       case GT:       case GEU:    case GTU:
3021     case LE:       case LT:       case LEU:    case LTU:
3022       {
3023         rtx new0 = eliminate_regs (XEXP (x, 0), mem_mode, insn);
3024         rtx new1
3025           = XEXP (x, 1) ? eliminate_regs (XEXP (x, 1), mem_mode, insn) : 0;
3026
3027         if (new0 != XEXP (x, 0) || new1 != XEXP (x, 1))
3028           return gen_rtx_fmt_ee (code, GET_MODE (x), new0, new1);
3029       }
3030       return x;
3031
3032     case EXPR_LIST:
3033       /* If we have something in XEXP (x, 0), the usual case, eliminate it.  */
3034       if (XEXP (x, 0))
3035         {
3036           new = eliminate_regs (XEXP (x, 0), mem_mode, insn);
3037           if (new != XEXP (x, 0))
3038             x = gen_rtx_EXPR_LIST (REG_NOTE_KIND (x), new, XEXP (x, 1));
3039         }
3040
3041       /* ... fall through ...  */
3042
3043     case INSN_LIST:
3044       /* Now do eliminations in the rest of the chain.  If this was
3045          an EXPR_LIST, this might result in allocating more memory than is
3046          strictly needed, but it simplifies the code.  */
3047       if (XEXP (x, 1))
3048         {
3049           new = eliminate_regs (XEXP (x, 1), mem_mode, insn);
3050           if (new != XEXP (x, 1))
3051             return gen_rtx_fmt_ee (GET_CODE (x), GET_MODE (x), XEXP (x, 0), new);
3052         }
3053       return x;
3054
3055     case PRE_INC:
3056     case POST_INC:
3057     case PRE_DEC:
3058     case POST_DEC:
3059       for (ep = reg_eliminate; ep < &reg_eliminate[NUM_ELIMINABLE_REGS]; ep++)
3060         if (ep->to_rtx == XEXP (x, 0))
3061           {
3062             int size = GET_MODE_SIZE (mem_mode);
3063
3064             /* If more bytes than MEM_MODE are pushed, account for them.  */
3065 #ifdef PUSH_ROUNDING
3066             if (ep->to_rtx == stack_pointer_rtx)
3067               size = PUSH_ROUNDING (size);
3068 #endif
3069             if (code == PRE_DEC || code == POST_DEC)
3070               ep->offset += size;
3071             else
3072               ep->offset -= size;
3073           }
3074
3075       /* Fall through to generic unary operation case.  */
3076     case STRICT_LOW_PART:
3077     case NEG:          case NOT:
3078     case SIGN_EXTEND:  case ZERO_EXTEND:
3079     case TRUNCATE:     case FLOAT_EXTEND: case FLOAT_TRUNCATE:
3080     case FLOAT:        case FIX:
3081     case UNSIGNED_FIX: case UNSIGNED_FLOAT:
3082     case ABS:
3083     case SQRT:
3084     case FFS:
3085       new = eliminate_regs (XEXP (x, 0), mem_mode, insn);
3086       if (new != XEXP (x, 0))
3087         return gen_rtx_fmt_e (code, GET_MODE (x), new);
3088       return x;
3089
3090     case SUBREG:
3091       /* Similar to above processing, but preserve SUBREG_WORD.
3092          Convert (subreg (mem)) to (mem) if not paradoxical.
3093          Also, if we have a non-paradoxical (subreg (pseudo)) and the
3094          pseudo didn't get a hard reg, we must replace this with the
3095          eliminated version of the memory location because push_reloads
3096          may do the replacement in certain circumstances.  */
3097       if (GET_CODE (SUBREG_REG (x)) == REG
3098           && (GET_MODE_SIZE (GET_MODE (x))
3099               <= GET_MODE_SIZE (GET_MODE (SUBREG_REG (x))))
3100           && reg_equiv_memory_loc != 0
3101           && reg_equiv_memory_loc[REGNO (SUBREG_REG (x))] != 0)
3102         {
3103           new = eliminate_regs (reg_equiv_memory_loc[REGNO (SUBREG_REG (x))],
3104                                 mem_mode, insn);
3105
3106           /* If we didn't change anything, we must retain the pseudo.  */
3107           if (new == reg_equiv_memory_loc[REGNO (SUBREG_REG (x))])
3108             new = SUBREG_REG (x);
3109           else
3110             {
3111               /* In this case, we must show that the pseudo is used in this
3112                  insn so that delete_output_reload will do the right thing.  */
3113               if (insn != 0 && GET_CODE (insn) != EXPR_LIST
3114                   && GET_CODE (insn) != INSN_LIST)
3115                 REG_NOTES (emit_insn_before (gen_rtx_USE (VOIDmode,
3116                                                           SUBREG_REG (x)),
3117                                                           insn))
3118                   = gen_rtx_EXPR_LIST (REG_EQUAL, new, NULL_RTX);
3119
3120               /* Ensure NEW isn't shared in case we have to reload it.  */
3121               new = copy_rtx (new);
3122             }
3123         }
3124       else
3125         new = eliminate_regs (SUBREG_REG (x), mem_mode, insn);
3126
3127       if (new != XEXP (x, 0))
3128         {
3129           int x_size = GET_MODE_SIZE (GET_MODE (x));
3130           int new_size = GET_MODE_SIZE (GET_MODE (new));
3131
3132           if (GET_CODE (new) == MEM
3133               && ((x_size < new_size
3134 #ifdef WORD_REGISTER_OPERATIONS
3135                    /* On these machines, combine can create rtl of the form
3136                       (set (subreg:m1 (reg:m2 R) 0) ...)
3137                       where m1 < m2, and expects something interesting to 
3138                       happen to the entire word.  Moreover, it will use the
3139                       (reg:m2 R) later, expecting all bits to be preserved.
3140                       So if the number of words is the same, preserve the 
3141                       subreg so that push_reloads can see it.  */
3142                    && ! ((x_size-1)/UNITS_PER_WORD == (new_size-1)/UNITS_PER_WORD)
3143 #endif
3144                    )
3145                   || (x_size == new_size))
3146               )
3147             {
3148               int offset = SUBREG_WORD (x) * UNITS_PER_WORD;
3149               enum machine_mode mode = GET_MODE (x);
3150
3151               if (BYTES_BIG_ENDIAN)
3152                 offset += (MIN (UNITS_PER_WORD,
3153                                 GET_MODE_SIZE (GET_MODE (new)))
3154                            - MIN (UNITS_PER_WORD, GET_MODE_SIZE (mode)));
3155
3156               PUT_MODE (new, mode);
3157               XEXP (new, 0) = plus_constant (XEXP (new, 0), offset);
3158               return new;
3159             }
3160           else
3161             return gen_rtx_SUBREG (GET_MODE (x), new, SUBREG_WORD (x));
3162         }
3163
3164       return x;
3165
3166     case USE:
3167       /* If using a register that is the source of an eliminate we still
3168          think can be performed, note it cannot be performed since we don't
3169          know how this register is used.  */
3170       for (ep = reg_eliminate; ep < &reg_eliminate[NUM_ELIMINABLE_REGS]; ep++)
3171         if (ep->from_rtx == XEXP (x, 0))
3172           ep->can_eliminate = 0;
3173
3174       new = eliminate_regs (XEXP (x, 0), mem_mode, insn);
3175       if (new != XEXP (x, 0))
3176         return gen_rtx_fmt_e (code, GET_MODE (x), new);
3177       return x;
3178
3179     case CLOBBER:
3180       /* If clobbering a register that is the replacement register for an
3181          elimination we still think can be performed, note that it cannot
3182          be performed.  Otherwise, we need not be concerned about it.  */
3183       for (ep = reg_eliminate; ep < &reg_eliminate[NUM_ELIMINABLE_REGS]; ep++)
3184         if (ep->to_rtx == XEXP (x, 0))
3185           ep->can_eliminate = 0;
3186
3187       new = eliminate_regs (XEXP (x, 0), mem_mode, insn);
3188       if (new != XEXP (x, 0))
3189         return gen_rtx_fmt_e (code, GET_MODE (x), new);
3190       return x;
3191
3192     case ASM_OPERANDS:
3193       {
3194         rtx *temp_vec;
3195         /* Properly handle sharing input and constraint vectors.  */
3196         if (ASM_OPERANDS_INPUT_VEC (x) != old_asm_operands_vec)
3197           {
3198             /* When we come to a new vector not seen before,
3199                scan all its elements; keep the old vector if none
3200                of them changes; otherwise, make a copy.  */
3201             old_asm_operands_vec = ASM_OPERANDS_INPUT_VEC (x);
3202             temp_vec = (rtx *) alloca (XVECLEN (x, 3) * sizeof (rtx));
3203             for (i = 0; i < ASM_OPERANDS_INPUT_LENGTH (x); i++)
3204               temp_vec[i] = eliminate_regs (ASM_OPERANDS_INPUT (x, i),
3205                                             mem_mode, insn);
3206
3207             for (i = 0; i < ASM_OPERANDS_INPUT_LENGTH (x); i++)
3208               if (temp_vec[i] != ASM_OPERANDS_INPUT (x, i))
3209                 break;
3210
3211             if (i == ASM_OPERANDS_INPUT_LENGTH (x))
3212               new_asm_operands_vec = old_asm_operands_vec;
3213             else
3214               new_asm_operands_vec
3215                 = gen_rtvec_v (ASM_OPERANDS_INPUT_LENGTH (x), temp_vec);
3216           }
3217
3218         /* If we had to copy the vector, copy the entire ASM_OPERANDS.  */
3219         if (new_asm_operands_vec == old_asm_operands_vec)
3220           return x;
3221
3222         new = gen_rtx_ASM_OPERANDS (VOIDmode, ASM_OPERANDS_TEMPLATE (x),
3223                                     ASM_OPERANDS_OUTPUT_CONSTRAINT (x),
3224                                     ASM_OPERANDS_OUTPUT_IDX (x),
3225                                     new_asm_operands_vec,
3226                                     ASM_OPERANDS_INPUT_CONSTRAINT_VEC (x),
3227                                     ASM_OPERANDS_SOURCE_FILE (x),
3228                                     ASM_OPERANDS_SOURCE_LINE (x));
3229         new->volatil = x->volatil;
3230         return new;
3231       }
3232
3233     case SET:
3234       /* Check for setting a register that we know about.  */
3235       if (GET_CODE (SET_DEST (x)) == REG)
3236         {
3237           /* See if this is setting the replacement register for an
3238              elimination.
3239
3240              If DEST is the hard frame pointer, we do nothing because we
3241              assume that all assignments to the frame pointer are for
3242              non-local gotos and are being done at a time when they are valid
3243              and do not disturb anything else.  Some machines want to
3244              eliminate a fake argument pointer (or even a fake frame pointer)
3245              with either the real frame or the stack pointer.  Assignments to
3246              the hard frame pointer must not prevent this elimination.  */
3247
3248           for (ep = reg_eliminate; ep < &reg_eliminate[NUM_ELIMINABLE_REGS];
3249                ep++)
3250             if (ep->to_rtx == SET_DEST (x)
3251                 && SET_DEST (x) != hard_frame_pointer_rtx)
3252               {
3253                 /* If it is being incremented, adjust the offset.  Otherwise,
3254                    this elimination can't be done.  */
3255                 rtx src = SET_SRC (x);
3256
3257                 if (GET_CODE (src) == PLUS
3258                     && XEXP (src, 0) == SET_DEST (x)
3259                     && GET_CODE (XEXP (src, 1)) == CONST_INT)
3260                   ep->offset -= INTVAL (XEXP (src, 1));
3261                 else
3262                   ep->can_eliminate = 0;
3263               }
3264
3265           /* Now check to see we are assigning to a register that can be
3266              eliminated.  If so, it must be as part of a PARALLEL, since we
3267              will not have been called if this is a single SET.  So indicate
3268              that we can no longer eliminate this reg.  */
3269           for (ep = reg_eliminate; ep < &reg_eliminate[NUM_ELIMINABLE_REGS];
3270                ep++)
3271             if (ep->from_rtx == SET_DEST (x) && ep->can_eliminate)
3272               ep->can_eliminate = 0;
3273         }
3274
3275       /* Now avoid the loop below in this common case.  */
3276       {
3277         rtx new0 = eliminate_regs (SET_DEST (x), 0, insn);
3278         rtx new1 = eliminate_regs (SET_SRC (x), 0, insn);
3279
3280         /* If SET_DEST changed from a REG to a MEM and INSN is an insn,
3281            write a CLOBBER insn.  */
3282         if (GET_CODE (SET_DEST (x)) == REG && GET_CODE (new0) == MEM
3283             && insn != 0 && GET_CODE (insn) != EXPR_LIST
3284             && GET_CODE (insn) != INSN_LIST)
3285           emit_insn_after (gen_rtx_CLOBBER (VOIDmode, SET_DEST (x)), insn);
3286
3287         if (new0 != SET_DEST (x) || new1 != SET_SRC (x))
3288           return gen_rtx_SET (VOIDmode, new0, new1);
3289       }
3290
3291       return x;
3292
3293     case MEM:
3294       /* This is only for the benefit of the debugging backends, which call
3295          eliminate_regs on DECL_RTL; any ADDRESSOFs in the actual insns are
3296          removed after CSE.  */
3297       if (GET_CODE (XEXP (x, 0)) == ADDRESSOF)
3298         return eliminate_regs (XEXP (XEXP (x, 0), 0), 0, insn);
3299
3300       /* Our only special processing is to pass the mode of the MEM to our
3301          recursive call and copy the flags.  While we are here, handle this
3302          case more efficiently.  */
3303       new = eliminate_regs (XEXP (x, 0), GET_MODE (x), insn);
3304       if (new != XEXP (x, 0))
3305         {
3306           new = gen_rtx_MEM (GET_MODE (x), new);
3307           new->volatil = x->volatil;
3308           new->unchanging = x->unchanging;
3309           new->in_struct = x->in_struct;
3310           return new;
3311         }
3312       else
3313         return x;
3314       
3315     default:
3316       break;
3317     }
3318
3319   /* Process each of our operands recursively.  If any have changed, make a
3320      copy of the rtx.  */
3321   fmt = GET_RTX_FORMAT (code);
3322   for (i = 0; i < GET_RTX_LENGTH (code); i++, fmt++)
3323     {
3324       if (*fmt == 'e')
3325         {
3326           new = eliminate_regs (XEXP (x, i), mem_mode, insn);
3327           if (new != XEXP (x, i) && ! copied)
3328             {
3329               rtx new_x = rtx_alloc (code);
3330               bcopy ((char *) x, (char *) new_x,
3331                      (sizeof (*new_x) - sizeof (new_x->fld)
3332                       + sizeof (new_x->fld[0]) * GET_RTX_LENGTH (code)));
3333               x = new_x;
3334               copied = 1;
3335             }
3336           XEXP (x, i) = new;
3337         }
3338       else if (*fmt == 'E')
3339         {
3340           int copied_vec = 0;
3341           for (j = 0; j < XVECLEN (x, i); j++)
3342             {
3343               new = eliminate_regs (XVECEXP (x, i, j), mem_mode, insn);
3344               if (new != XVECEXP (x, i, j) && ! copied_vec)
3345                 {
3346                   rtvec new_v = gen_rtvec_vv (XVECLEN (x, i),
3347                                               XVEC (x, i)->elem);
3348                   if (! copied)
3349                     {
3350                       rtx new_x = rtx_alloc (code);
3351                       bcopy ((char *) x, (char *) new_x,
3352                              (sizeof (*new_x) - sizeof (new_x->fld)
3353                               + (sizeof (new_x->fld[0])
3354                                  * GET_RTX_LENGTH (code))));
3355                       x = new_x;
3356                       copied = 1;
3357                     }
3358                   XVEC (x, i) = new_v;
3359                   copied_vec = 1;
3360                 }
3361               XVECEXP (x, i, j) = new;
3362             }
3363         }
3364     }
3365
3366   return x;
3367 }
3368 \f
3369 /* Scan INSN and eliminate all eliminable registers in it.
3370
3371    If REPLACE is nonzero, do the replacement destructively.  Also
3372    delete the insn as dead it if it is setting an eliminable register.
3373
3374    If REPLACE is zero, do all our allocations in reload_obstack.
3375
3376    If no eliminations were done and this insn doesn't require any elimination
3377    processing (these are not identical conditions: it might be updating sp,
3378    but not referencing fp; this needs to be seen during reload_as_needed so
3379    that the offset between fp and sp can be taken into consideration), zero
3380    is returned.  Otherwise, 1 is returned.  */
3381
3382 static int
3383 eliminate_regs_in_insn (insn, replace)
3384      rtx insn;
3385      int replace;
3386 {
3387   rtx old_body = PATTERN (insn);
3388   rtx old_set = single_set (insn);
3389   rtx new_body;
3390   int val = 0;
3391   struct elim_table *ep;
3392
3393   if (! replace)
3394     push_obstacks (&reload_obstack, &reload_obstack);
3395
3396   if (old_set != 0 && GET_CODE (SET_DEST (old_set)) == REG
3397       && REGNO (SET_DEST (old_set)) < FIRST_PSEUDO_REGISTER)
3398     {
3399       /* Check for setting an eliminable register.  */
3400       for (ep = reg_eliminate; ep < &reg_eliminate[NUM_ELIMINABLE_REGS]; ep++)
3401         if (ep->from_rtx == SET_DEST (old_set) && ep->can_eliminate)
3402           {
3403 #if HARD_FRAME_POINTER_REGNUM != FRAME_POINTER_REGNUM
3404             /* If this is setting the frame pointer register to the
3405                hardware frame pointer register and this is an elimination
3406                that will be done (tested above), this insn is really
3407                adjusting the frame pointer downward to compensate for
3408                the adjustment done before a nonlocal goto.  */
3409             if (ep->from == FRAME_POINTER_REGNUM
3410                 && ep->to == HARD_FRAME_POINTER_REGNUM)
3411               {
3412                 rtx src = SET_SRC (old_set);
3413                 int offset, ok = 0;
3414                 rtx prev_insn, prev_set;
3415
3416                 if (src == ep->to_rtx)
3417                   offset = 0, ok = 1;
3418                 else if (GET_CODE (src) == PLUS
3419                          && GET_CODE (XEXP (src, 0)) == CONST_INT)
3420                   offset = INTVAL (XEXP (src, 0)), ok = 1;
3421                 else if ((prev_insn = prev_nonnote_insn (insn)) != 0
3422                          && (prev_set = single_set (prev_insn)) != 0
3423                          && rtx_equal_p (SET_DEST (prev_set), src))
3424                   {
3425                     src = SET_SRC (prev_set);
3426                     if (src == ep->to_rtx)
3427                       offset = 0, ok = 1;
3428                     else if (GET_CODE (src) == PLUS
3429                              && GET_CODE (XEXP (src, 0)) == CONST_INT
3430                              && XEXP (src, 1) == ep->to_rtx)
3431                       offset = INTVAL (XEXP (src, 0)), ok = 1;
3432                     else if (GET_CODE (src) == PLUS
3433                              && GET_CODE (XEXP (src, 1)) == CONST_INT
3434                              && XEXP (src, 0) == ep->to_rtx)
3435                       offset = INTVAL (XEXP (src, 1)), ok = 1;
3436                   }
3437
3438                 if (ok)
3439                   {
3440                     if (replace)
3441                       {
3442                         rtx src
3443                           = plus_constant (ep->to_rtx, offset - ep->offset);
3444
3445                         /* First see if this insn remains valid when we
3446                            make the change.  If not, keep the INSN_CODE
3447                            the same and let reload fit it up.  */
3448                         validate_change (insn, &SET_SRC (old_set), src, 1);
3449                         validate_change (insn, &SET_DEST (old_set),
3450                                          ep->to_rtx, 1);
3451                         if (! apply_change_group ())
3452                           {
3453                             SET_SRC (old_set) = src;
3454                             SET_DEST (old_set) = ep->to_rtx;
3455                           }
3456                       }
3457
3458                     val = 1;
3459                     goto done;
3460                   }
3461               }
3462 #endif
3463
3464             /* In this case this insn isn't serving a useful purpose.  We
3465                will delete it in reload_as_needed once we know that this
3466                elimination is, in fact, being done.
3467
3468                If REPLACE isn't set, we can't delete this insn, but needn't
3469                process it since it won't be used unless something changes.  */
3470             if (replace)
3471               delete_dead_insn (insn);
3472             val = 1;
3473             goto done;
3474           }
3475
3476       /* Check for (set (reg) (plus (reg from) (offset))) where the offset
3477          in the insn is the negative of the offset in FROM.  Substitute
3478          (set (reg) (reg to)) for the insn and change its code.
3479
3480          We have to do this here, rather than in eliminate_regs, do that we can
3481          change the insn code.  */
3482
3483       if (GET_CODE (SET_SRC (old_set)) == PLUS
3484           && GET_CODE (XEXP (SET_SRC (old_set), 0)) == REG
3485           && GET_CODE (XEXP (SET_SRC (old_set), 1)) == CONST_INT)
3486         for (ep = reg_eliminate; ep < &reg_eliminate[NUM_ELIMINABLE_REGS];
3487              ep++)
3488           if (ep->from_rtx == XEXP (SET_SRC (old_set), 0)
3489               && ep->can_eliminate)
3490             {
3491               /* We must stop at the first elimination that will be used.
3492                  If this one would replace the PLUS with a REG, do it
3493                  now.  Otherwise, quit the loop and let eliminate_regs
3494                  do its normal replacement.  */
3495               if (ep->offset == - INTVAL (XEXP (SET_SRC (old_set), 1)))
3496                 {
3497                   /* We assume here that we don't need a PARALLEL of
3498                      any CLOBBERs for this assignment.  There's not
3499                      much we can do if we do need it.  */
3500                   PATTERN (insn) = gen_rtx_SET (VOIDmode,
3501                                                 SET_DEST (old_set),
3502                                                 ep->to_rtx);
3503                   INSN_CODE (insn) = -1;
3504                   val = 1;
3505                   goto done;
3506                 }
3507
3508               break;
3509             }
3510     }
3511
3512   old_asm_operands_vec = 0;
3513
3514   /* Replace the body of this insn with a substituted form.  If we changed
3515      something, return non-zero.  
3516
3517      If we are replacing a body that was a (set X (plus Y Z)), try to
3518      re-recognize the insn.  We do this in case we had a simple addition
3519      but now can do this as a load-address.  This saves an insn in this
3520      common case.  */
3521
3522   new_body = eliminate_regs (old_body, 0, replace ? insn : NULL_RTX);
3523   if (new_body != old_body)
3524     {
3525       /* If we aren't replacing things permanently and we changed something,
3526          make another copy to ensure that all the RTL is new.  Otherwise
3527          things can go wrong if find_reload swaps commutative operands
3528          and one is inside RTL that has been copied while the other is not.  */
3529
3530       /* Don't copy an asm_operands because (1) there's no need and (2)
3531          copy_rtx can't do it properly when there are multiple outputs.  */
3532       if (! replace && asm_noperands (old_body) < 0)
3533         new_body = copy_rtx (new_body);
3534
3535       /* If we had a move insn but now we don't, rerecognize it.  This will
3536          cause spurious re-recognition if the old move had a PARALLEL since
3537          the new one still will, but we can't call single_set without
3538          having put NEW_BODY into the insn and the re-recognition won't
3539          hurt in this rare case.  */
3540       if (old_set != 0
3541           && ((GET_CODE (SET_SRC (old_set)) == REG
3542                && (GET_CODE (new_body) != SET
3543                    || GET_CODE (SET_SRC (new_body)) != REG))
3544               /* If this was a load from or store to memory, compare
3545                  the MEM in recog_operand to the one in the insn.  If they
3546                  are not equal, then rerecognize the insn.  */
3547               || (old_set != 0
3548                   && ((GET_CODE (SET_SRC (old_set)) == MEM
3549                        && SET_SRC (old_set) != recog_operand[1])
3550                       || (GET_CODE (SET_DEST (old_set)) == MEM
3551                           && SET_DEST (old_set) != recog_operand[0])))
3552               /* If this was an add insn before, rerecognize.  */
3553               || GET_CODE (SET_SRC (old_set)) == PLUS))
3554         {
3555           if (! validate_change (insn, &PATTERN (insn), new_body, 0))
3556             /* If recognition fails, store the new body anyway.
3557                It's normal to have recognition failures here
3558                due to bizarre memory addresses; reloading will fix them.  */
3559             PATTERN (insn) = new_body;
3560         }
3561       else
3562         PATTERN (insn) = new_body;
3563
3564       val = 1;
3565     }
3566
3567   /* Loop through all elimination pairs.  See if any have changed and
3568      recalculate the number not at initial offset.
3569
3570      Compute the maximum offset (minimum offset if the stack does not
3571      grow downward) for each elimination pair.
3572
3573      We also detect a cases where register elimination cannot be done,
3574      namely, if a register would be both changed and referenced outside a MEM
3575      in the resulting insn since such an insn is often undefined and, even if
3576      not, we cannot know what meaning will be given to it.  Note that it is
3577      valid to have a register used in an address in an insn that changes it
3578      (presumably with a pre- or post-increment or decrement).
3579
3580      If anything changes, return nonzero.  */
3581
3582   num_not_at_initial_offset = 0;
3583   for (ep = reg_eliminate; ep < &reg_eliminate[NUM_ELIMINABLE_REGS]; ep++)
3584     {
3585       if (ep->previous_offset != ep->offset && ep->ref_outside_mem)
3586         ep->can_eliminate = 0;
3587
3588       ep->ref_outside_mem = 0;
3589
3590       if (ep->previous_offset != ep->offset)
3591         val = 1;
3592
3593       ep->previous_offset = ep->offset;
3594       if (ep->can_eliminate && ep->offset != ep->initial_offset)
3595         num_not_at_initial_offset++;
3596
3597 #ifdef STACK_GROWS_DOWNWARD
3598       ep->max_offset = MAX (ep->max_offset, ep->offset);
3599 #else
3600       ep->max_offset = MIN (ep->max_offset, ep->offset);
3601 #endif
3602     }
3603
3604  done:
3605   /* If we changed something, perform elimination in REG_NOTES.  This is
3606      needed even when REPLACE is zero because a REG_DEAD note might refer
3607      to a register that we eliminate and could cause a different number
3608      of spill registers to be needed in the final reload pass than in
3609      the pre-passes.  */
3610   if (val && REG_NOTES (insn) != 0)
3611     REG_NOTES (insn) = eliminate_regs (REG_NOTES (insn), 0, REG_NOTES (insn));
3612
3613   if (! replace)
3614     pop_obstacks ();
3615
3616   return val;
3617 }
3618
3619 /* Given X, a SET or CLOBBER of DEST, if DEST is the target of a register
3620    replacement we currently believe is valid, mark it as not eliminable if X
3621    modifies DEST in any way other than by adding a constant integer to it.
3622
3623    If DEST is the frame pointer, we do nothing because we assume that
3624    all assignments to the hard frame pointer are nonlocal gotos and are being
3625    done at a time when they are valid and do not disturb anything else.
3626    Some machines want to eliminate a fake argument pointer with either the
3627    frame or stack pointer.  Assignments to the hard frame pointer must not
3628    prevent this elimination.
3629
3630    Called via note_stores from reload before starting its passes to scan
3631    the insns of the function.  */
3632
3633 static void
3634 mark_not_eliminable (dest, x)
3635      rtx dest;
3636      rtx x;
3637 {
3638   register int i;
3639
3640   /* A SUBREG of a hard register here is just changing its mode.  We should
3641      not see a SUBREG of an eliminable hard register, but check just in
3642      case.  */
3643   if (GET_CODE (dest) == SUBREG)
3644     dest = SUBREG_REG (dest);
3645
3646   if (dest == hard_frame_pointer_rtx)
3647     return;
3648
3649   for (i = 0; i < NUM_ELIMINABLE_REGS; i++)
3650     if (reg_eliminate[i].can_eliminate && dest == reg_eliminate[i].to_rtx
3651         && (GET_CODE (x) != SET
3652             || GET_CODE (SET_SRC (x)) != PLUS
3653             || XEXP (SET_SRC (x), 0) != dest
3654             || GET_CODE (XEXP (SET_SRC (x), 1)) != CONST_INT))
3655       {
3656         reg_eliminate[i].can_eliminate_previous
3657           = reg_eliminate[i].can_eliminate = 0;
3658         num_eliminable--;
3659       }
3660 }
3661 \f
3662 /* Kick all pseudos out of hard register REGNO.
3663    If GLOBAL is nonzero, try to find someplace else to put them.
3664    If DUMPFILE is nonzero, log actions taken on that file.
3665
3666    If CANT_ELIMINATE is nonzero, it means that we are doing this spill
3667    because we found we can't eliminate some register.  In the case, no pseudos
3668    are allowed to be in the register, even if they are only in a block that
3669    doesn't require spill registers, unlike the case when we are spilling this
3670    hard reg to produce another spill register.
3671
3672    Return nonzero if any pseudos needed to be kicked out.  */
3673
3674 static int
3675 spill_hard_reg (regno, global, dumpfile, cant_eliminate)
3676      register int regno;
3677      int global;
3678      FILE *dumpfile;
3679      int cant_eliminate;
3680 {
3681   enum reg_class class = REGNO_REG_CLASS (regno);
3682   int something_changed = 0;
3683   register int i;
3684
3685   SET_HARD_REG_BIT (forbidden_regs, regno);
3686
3687   if (cant_eliminate)
3688     regs_ever_live[regno] = 1;
3689
3690   /* Spill every pseudo reg that was allocated to this reg
3691      or to something that overlaps this reg.  */
3692
3693   for (i = FIRST_PSEUDO_REGISTER; i < max_regno; i++)
3694     if (reg_renumber[i] >= 0
3695         && reg_renumber[i] <= regno
3696         && (reg_renumber[i]
3697             + HARD_REGNO_NREGS (reg_renumber[i],
3698                                 PSEUDO_REGNO_MODE (i))
3699             > regno))
3700       {
3701         /* If this register belongs solely to a basic block which needed no
3702            spilling of any class that this register is contained in,
3703            leave it be, unless we are spilling this register because
3704            it was a hard register that can't be eliminated.   */
3705
3706         if (! cant_eliminate
3707             && basic_block_needs[0]
3708             && REG_BASIC_BLOCK (i) >= 0
3709             && basic_block_needs[(int) class][REG_BASIC_BLOCK (i)] == 0)
3710           {
3711             enum reg_class *p;
3712
3713             for (p = reg_class_superclasses[(int) class];
3714                  *p != LIM_REG_CLASSES; p++)
3715               if (basic_block_needs[(int) *p][REG_BASIC_BLOCK (i)] > 0)
3716                 break;
3717
3718             if (*p == LIM_REG_CLASSES)
3719               continue;
3720           }
3721
3722         /* Mark it as no longer having a hard register home.  */
3723         reg_renumber[i] = -1;
3724         /* We will need to scan everything again.  */
3725         something_changed = 1;
3726         if (global)
3727           retry_global_alloc (i, forbidden_regs);
3728
3729         alter_reg (i, regno);
3730         if (dumpfile)
3731           {
3732             if (reg_renumber[i] == -1)
3733               fprintf (dumpfile, " Register %d now on stack.\n\n", i);
3734             else
3735               fprintf (dumpfile, " Register %d now in %d.\n\n",
3736                        i, reg_renumber[i]);
3737           }
3738       }
3739   for (i = 0; i < scratch_list_length; i++)
3740     {
3741      if (scratch_list[i] 
3742           && regno >= REGNO (scratch_list[i]) 
3743           && regno <  REGNO (scratch_list[i]) 
3744                       + HARD_REGNO_NREGS (REGNO (scratch_list[i]),
3745                                           GET_MODE (scratch_list[i])))
3746         {
3747           if (! cant_eliminate && basic_block_needs[0]
3748               && ! basic_block_needs[(int) class][scratch_block[i]])
3749             {
3750               enum reg_class *p;
3751
3752               for (p = reg_class_superclasses[(int) class];
3753                    *p != LIM_REG_CLASSES; p++)
3754                 if (basic_block_needs[(int) *p][scratch_block[i]] > 0)
3755                   break;
3756
3757               if (*p == LIM_REG_CLASSES)
3758                 continue;
3759             }
3760           PUT_CODE (scratch_list[i], SCRATCH);
3761           scratch_list[i] = 0;
3762           something_changed = 1;
3763           continue;
3764         }
3765     }
3766
3767   return something_changed;
3768 }
3769 \f
3770 /* Find all paradoxical subregs within X and update reg_max_ref_width. 
3771    Also mark any hard registers used to store user variables as
3772    forbidden from being used for spill registers.  */
3773
3774 static void
3775 scan_paradoxical_subregs (x)
3776      register rtx x;
3777 {
3778   register int i;
3779   register char *fmt;
3780   register enum rtx_code code = GET_CODE (x);
3781
3782   switch (code)
3783     {
3784     case REG:
3785       if (SMALL_REGISTER_CLASSES && REGNO (x) < FIRST_PSEUDO_REGISTER
3786           && REG_USERVAR_P (x))
3787         SET_HARD_REG_BIT (forbidden_regs, REGNO (x));
3788       return;
3789
3790     case CONST_INT:
3791     case CONST:
3792     case SYMBOL_REF:
3793     case LABEL_REF:
3794     case CONST_DOUBLE:
3795     case CC0:
3796     case PC:
3797     case USE:
3798     case CLOBBER:
3799       return;
3800
3801     case SUBREG:
3802       if (GET_CODE (SUBREG_REG (x)) == REG
3803           && GET_MODE_SIZE (GET_MODE (x)) > GET_MODE_SIZE (GET_MODE (SUBREG_REG (x))))
3804         reg_max_ref_width[REGNO (SUBREG_REG (x))]
3805           = GET_MODE_SIZE (GET_MODE (x));
3806       return;
3807       
3808     default:
3809       break;
3810     }
3811
3812   fmt = GET_RTX_FORMAT (code);
3813   for (i = GET_RTX_LENGTH (code) - 1; i >= 0; i--)
3814     {
3815       if (fmt[i] == 'e')
3816         scan_paradoxical_subregs (XEXP (x, i));
3817       else if (fmt[i] == 'E')
3818         {
3819           register int j;
3820           for (j = XVECLEN (x, i) - 1; j >=0; j--)
3821             scan_paradoxical_subregs (XVECEXP (x, i, j));
3822         }
3823     }
3824 }
3825 \f
3826 static int
3827 hard_reg_use_compare (p1p, p2p)
3828   const GENERIC_PTR p1p;
3829   const GENERIC_PTR p2p;
3830 {
3831   struct hard_reg_n_uses *p1 = (struct hard_reg_n_uses *)p1p,
3832                          *p2 = (struct hard_reg_n_uses *)p2p;
3833   int tem = p1->uses - p2->uses;
3834   if (tem != 0) return tem;
3835   /* If regs are equally good, sort by regno,
3836      so that the results of qsort leave nothing to chance.  */
3837   return p1->regno - p2->regno;
3838 }
3839
3840 /* Choose the order to consider regs for use as reload registers
3841    based on how much trouble would be caused by spilling one.
3842    Store them in order of decreasing preference in potential_reload_regs.  */
3843
3844 static void
3845 order_regs_for_reload (global)
3846      int global;
3847 {
3848   register int i;
3849   register int o = 0;
3850   int large = 0;
3851
3852   struct hard_reg_n_uses hard_reg_n_uses[FIRST_PSEUDO_REGISTER];
3853
3854   CLEAR_HARD_REG_SET (bad_spill_regs);
3855
3856   for (i = 0; i < FIRST_PSEUDO_REGISTER; i++)
3857     potential_reload_regs[i] = -1;
3858
3859   /* Count number of uses of each hard reg by pseudo regs allocated to it
3860      and then order them by decreasing use.  */
3861
3862   for (i = 0; i < FIRST_PSEUDO_REGISTER; i++)
3863     {
3864       hard_reg_n_uses[i].uses = 0;
3865       hard_reg_n_uses[i].regno = i;
3866     }
3867
3868   for (i = FIRST_PSEUDO_REGISTER; i < max_regno; i++)
3869     {
3870       int regno = reg_renumber[i];
3871       if (regno >= 0)
3872         {
3873           int lim = regno + HARD_REGNO_NREGS (regno, PSEUDO_REGNO_MODE (i));
3874           while (regno < lim)
3875             {
3876               /* If allocated by local-alloc, show more uses since
3877                  we're not going to be able to reallocate it, but
3878                  we might if allocated by global alloc.  */
3879               if (global && reg_allocno[i] < 0)
3880                 hard_reg_n_uses[regno].uses += (REG_N_REFS (i) + 1) / 2;
3881
3882               hard_reg_n_uses[regno++].uses += REG_N_REFS (i);
3883             }
3884         }
3885       large += REG_N_REFS (i);
3886     }
3887
3888   /* Now fixed registers (which cannot safely be used for reloading)
3889      get a very high use count so they will be considered least desirable.
3890      Registers used explicitly in the rtl code are almost as bad.  */
3891
3892   for (i = 0; i < FIRST_PSEUDO_REGISTER; i++)
3893     {
3894       if (fixed_regs[i])
3895         {
3896           hard_reg_n_uses[i].uses += 2 * large + 2;
3897           SET_HARD_REG_BIT (bad_spill_regs, i);
3898         }
3899       else if (regs_explicitly_used[i])
3900         {
3901           hard_reg_n_uses[i].uses += large + 1;
3902           if (! SMALL_REGISTER_CLASSES)
3903             /* ??? We are doing this here because of the potential
3904              that bad code may be generated if a register explicitly
3905              used in an insn was used as a spill register for that
3906              insn.  But not using these are spill registers may lose
3907              on some machine.  We'll have to see how this works out.  */
3908             SET_HARD_REG_BIT (bad_spill_regs, i);
3909         }
3910     }
3911   hard_reg_n_uses[HARD_FRAME_POINTER_REGNUM].uses += 2 * large + 2;
3912   SET_HARD_REG_BIT (bad_spill_regs, HARD_FRAME_POINTER_REGNUM);
3913
3914 #ifdef ELIMINABLE_REGS
3915   /* If registers other than the frame pointer are eliminable, mark them as
3916      poor choices.  */
3917   for (i = 0; i < NUM_ELIMINABLE_REGS; i++)
3918     {
3919       hard_reg_n_uses[reg_eliminate[i].from].uses += 2 * large + 2;
3920       SET_HARD_REG_BIT (bad_spill_regs, reg_eliminate[i].from);
3921     }
3922 #endif
3923
3924   /* Prefer registers not so far used, for use in temporary loading.
3925      Among them, if REG_ALLOC_ORDER is defined, use that order.
3926      Otherwise, prefer registers not preserved by calls.  */
3927
3928 #ifdef REG_ALLOC_ORDER
3929   for (i = 0; i < FIRST_PSEUDO_REGISTER; i++)
3930     {
3931       int regno = reg_alloc_order[i];
3932
3933       if (hard_reg_n_uses[regno].uses == 0)
3934         potential_reload_regs[o++] = regno;
3935     }
3936 #else
3937   for (i = 0; i < FIRST_PSEUDO_REGISTER; i++)
3938     {
3939       if (hard_reg_n_uses[i].uses == 0 && call_used_regs[i])
3940         potential_reload_regs[o++] = i;
3941     }
3942   for (i = 0; i < FIRST_PSEUDO_REGISTER; i++)
3943     {
3944       if (hard_reg_n_uses[i].uses == 0 && ! call_used_regs[i])
3945         potential_reload_regs[o++] = i;
3946     }
3947 #endif
3948
3949   qsort (hard_reg_n_uses, FIRST_PSEUDO_REGISTER,
3950          sizeof hard_reg_n_uses[0], hard_reg_use_compare);
3951
3952   /* Now add the regs that are already used,
3953      preferring those used less often.  The fixed and otherwise forbidden
3954      registers will be at the end of this list.  */
3955
3956   for (i = 0; i < FIRST_PSEUDO_REGISTER; i++)
3957     if (hard_reg_n_uses[i].uses != 0)
3958       potential_reload_regs[o++] = hard_reg_n_uses[i].regno;
3959 }
3960 \f
3961 /* Used in reload_as_needed to sort the spilled regs.  */
3962
3963 static int
3964 compare_spill_regs (r1p, r2p)
3965      const GENERIC_PTR r1p;
3966      const GENERIC_PTR r2p;
3967 {
3968   short r1 = *(short *)r1p, r2 = *(short *)r2p;
3969   return r1 - r2;
3970 }
3971
3972 /* Reload pseudo-registers into hard regs around each insn as needed.
3973    Additional register load insns are output before the insn that needs it
3974    and perhaps store insns after insns that modify the reloaded pseudo reg.
3975
3976    reg_last_reload_reg and reg_reloaded_contents keep track of
3977    which registers are already available in reload registers.
3978    We update these for the reloads that we perform,
3979    as the insns are scanned.  */
3980
3981 static void
3982 reload_as_needed (first, live_known)
3983      rtx first;
3984      int live_known;
3985 {
3986   register rtx insn;
3987   register int i;
3988   int this_block = 0;
3989   rtx x;
3990   rtx after_call = 0;
3991
3992   bzero ((char *) spill_reg_rtx, sizeof spill_reg_rtx);
3993   bzero ((char *) spill_reg_store, sizeof spill_reg_store);
3994   reg_last_reload_reg = (rtx *) alloca (max_regno * sizeof (rtx));
3995   bzero ((char *) reg_last_reload_reg, max_regno * sizeof (rtx));
3996   reg_has_output_reload = (char *) alloca (max_regno);
3997   CLEAR_HARD_REG_SET (reg_reloaded_valid);
3998
3999   /* Reset all offsets on eliminable registers to their initial values.  */
4000 #ifdef ELIMINABLE_REGS
4001   for (i = 0; i < NUM_ELIMINABLE_REGS; i++)
4002     {
4003       INITIAL_ELIMINATION_OFFSET (reg_eliminate[i].from, reg_eliminate[i].to,
4004                                   reg_eliminate[i].initial_offset);
4005       reg_eliminate[i].previous_offset
4006         = reg_eliminate[i].offset = reg_eliminate[i].initial_offset;
4007     }
4008 #else
4009   INITIAL_FRAME_POINTER_OFFSET (reg_eliminate[0].initial_offset);
4010   reg_eliminate[0].previous_offset
4011     = reg_eliminate[0].offset = reg_eliminate[0].initial_offset;
4012 #endif
4013
4014   num_not_at_initial_offset = 0;
4015
4016   /* Order the spilled regs, so that allocate_reload_regs can guarantee to
4017      pack registers with group needs.  */
4018   if (n_spills > 1)
4019     {
4020       qsort (spill_regs, n_spills, sizeof (short), compare_spill_regs);
4021       for (i = 0; i < n_spills; i++)
4022         spill_reg_order[spill_regs[i]] = i;
4023     }
4024
4025   for (insn = first; insn;)
4026     {
4027       register rtx next = NEXT_INSN (insn);
4028
4029       /* Notice when we move to a new basic block.  */
4030       if (live_known && this_block + 1 < n_basic_blocks
4031           && insn == basic_block_head[this_block+1])
4032         ++this_block;
4033
4034       /* If we pass a label, copy the offsets from the label information
4035          into the current offsets of each elimination.  */
4036       if (GET_CODE (insn) == CODE_LABEL)
4037         {
4038           num_not_at_initial_offset = 0;
4039           for (i = 0; i < NUM_ELIMINABLE_REGS; i++)
4040             {
4041               reg_eliminate[i].offset = reg_eliminate[i].previous_offset
4042                 = offsets_at[CODE_LABEL_NUMBER (insn)][i];
4043               if (reg_eliminate[i].can_eliminate
4044                   && (reg_eliminate[i].offset
4045                       != reg_eliminate[i].initial_offset))
4046                 num_not_at_initial_offset++;
4047             }
4048         }
4049
4050       else if (GET_RTX_CLASS (GET_CODE (insn)) == 'i')
4051         {
4052           rtx avoid_return_reg = 0;
4053           rtx oldpat = PATTERN (insn);
4054
4055           /* Set avoid_return_reg if this is an insn
4056              that might use the value of a function call.  */
4057           if (SMALL_REGISTER_CLASSES && GET_CODE (insn) == CALL_INSN)
4058             {
4059               if (GET_CODE (PATTERN (insn)) == SET)
4060                 after_call = SET_DEST (PATTERN (insn));
4061               else if (GET_CODE (PATTERN (insn)) == PARALLEL
4062                        && GET_CODE (XVECEXP (PATTERN (insn), 0, 0)) == SET)
4063                 after_call = SET_DEST (XVECEXP (PATTERN (insn), 0, 0));
4064               else
4065                 after_call = 0;
4066             }
4067           else if (SMALL_REGISTER_CLASSES && after_call != 0
4068                    && !(GET_CODE (PATTERN (insn)) == SET
4069                         && SET_DEST (PATTERN (insn)) == stack_pointer_rtx)
4070                    && GET_CODE (PATTERN (insn)) != USE)
4071             {
4072               if (reg_referenced_p (after_call, PATTERN (insn)))
4073                 avoid_return_reg = after_call;
4074               after_call = 0;
4075             }
4076
4077           /* If this is a USE and CLOBBER of a MEM, ensure that any
4078              references to eliminable registers have been removed.  */
4079
4080           if ((GET_CODE (PATTERN (insn)) == USE
4081                || GET_CODE (PATTERN (insn)) == CLOBBER)
4082               && GET_CODE (XEXP (PATTERN (insn), 0)) == MEM)
4083             XEXP (XEXP (PATTERN (insn), 0), 0)
4084               = eliminate_regs (XEXP (XEXP (PATTERN (insn), 0), 0),
4085                                 GET_MODE (XEXP (PATTERN (insn), 0)),
4086                                 NULL_RTX);
4087
4088           /* If we need to do register elimination processing, do so.
4089              This might delete the insn, in which case we are done.  */
4090           if (num_eliminable && GET_MODE (insn) == QImode)
4091             {
4092               eliminate_regs_in_insn (insn, 1);
4093               if (GET_CODE (insn) == NOTE)
4094                 {
4095                   insn = next;
4096                   continue;
4097                 }
4098             }
4099
4100           if (GET_MODE (insn) == VOIDmode)
4101             n_reloads = 0;
4102           /* First find the pseudo regs that must be reloaded for this insn.
4103              This info is returned in the tables reload_... (see reload.h).
4104              Also modify the body of INSN by substituting RELOAD
4105              rtx's for those pseudo regs.  */
4106           else
4107             {
4108               bzero (reg_has_output_reload, max_regno);
4109               CLEAR_HARD_REG_SET (reg_is_output_reload);
4110
4111               find_reloads (insn, 1, spill_indirect_levels, live_known,
4112                             spill_reg_order);
4113             }
4114
4115           if (n_reloads > 0)
4116             {
4117               rtx prev = PREV_INSN (insn), next = NEXT_INSN (insn);
4118               rtx p;
4119               int class;
4120
4121               /* If this block has not had spilling done for a
4122                  particular clas and we have any non-optionals that need a
4123                  spill reg in that class, abort.  */
4124
4125               for (class = 0; class < N_REG_CLASSES; class++)
4126                 if (basic_block_needs[class] != 0
4127                     && basic_block_needs[class][this_block] == 0)
4128                   for (i = 0; i < n_reloads; i++)
4129                     if (class == (int) reload_reg_class[i]
4130                         && reload_reg_rtx[i] == 0
4131                         && ! reload_optional[i]
4132                         && (reload_in[i] != 0 || reload_out[i] != 0
4133                             || reload_secondary_p[i] != 0))
4134                       fatal_insn ("Non-optional registers need a spill register", insn);
4135
4136               /* Now compute which reload regs to reload them into.  Perhaps
4137                  reusing reload regs from previous insns, or else output
4138                  load insns to reload them.  Maybe output store insns too.
4139                  Record the choices of reload reg in reload_reg_rtx.  */
4140               choose_reload_regs (insn, avoid_return_reg);
4141
4142               /* Merge any reloads that we didn't combine for fear of 
4143                  increasing the number of spill registers needed but now
4144                  discover can be safely merged.  */
4145               if (SMALL_REGISTER_CLASSES)
4146                 merge_assigned_reloads (insn);
4147
4148               /* Generate the insns to reload operands into or out of
4149                  their reload regs.  */
4150               emit_reload_insns (insn);
4151
4152               /* Substitute the chosen reload regs from reload_reg_rtx
4153                  into the insn's body (or perhaps into the bodies of other
4154                  load and store insn that we just made for reloading
4155                  and that we moved the structure into).  */
4156               subst_reloads ();
4157
4158               /* If this was an ASM, make sure that all the reload insns
4159                  we have generated are valid.  If not, give an error
4160                  and delete them.  */
4161
4162               if (asm_noperands (PATTERN (insn)) >= 0)
4163                 for (p = NEXT_INSN (prev); p != next; p = NEXT_INSN (p))
4164                   if (p != insn && GET_RTX_CLASS (GET_CODE (p)) == 'i'
4165                       && (recog_memoized (p) < 0
4166                           || (insn_extract (p),
4167                               ! constrain_operands (INSN_CODE (p), 1))))
4168                     {
4169                       error_for_asm (insn,
4170                                      "`asm' operand requires impossible reload");
4171                       PUT_CODE (p, NOTE);
4172                       NOTE_SOURCE_FILE (p) = 0;
4173                       NOTE_LINE_NUMBER (p) = NOTE_INSN_DELETED;
4174                     }
4175             }
4176           /* Any previously reloaded spilled pseudo reg, stored in this insn,
4177              is no longer validly lying around to save a future reload.
4178              Note that this does not detect pseudos that were reloaded
4179              for this insn in order to be stored in
4180              (obeying register constraints).  That is correct; such reload
4181              registers ARE still valid.  */
4182           note_stores (oldpat, forget_old_reloads_1);
4183
4184           /* There may have been CLOBBER insns placed after INSN.  So scan
4185              between INSN and NEXT and use them to forget old reloads.  */
4186           for (x = NEXT_INSN (insn); x != next; x = NEXT_INSN (x))
4187             if (GET_CODE (x) == INSN && GET_CODE (PATTERN (x)) == CLOBBER)
4188               note_stores (PATTERN (x), forget_old_reloads_1);
4189
4190 #ifdef AUTO_INC_DEC
4191           /* Likewise for regs altered by auto-increment in this insn.
4192              But note that the reg-notes are not changed by reloading:
4193              they still contain the pseudo-regs, not the spill regs.  */
4194           for (x = REG_NOTES (insn); x; x = XEXP (x, 1))
4195             if (REG_NOTE_KIND (x) == REG_INC)
4196               {
4197                 /* See if this pseudo reg was reloaded in this insn.
4198                    If so, its last-reload info is still valid
4199                    because it is based on this insn's reload.  */
4200                 for (i = 0; i < n_reloads; i++)
4201                   if (reload_out[i] == XEXP (x, 0))
4202                     break;
4203
4204                 if (i == n_reloads)
4205                   forget_old_reloads_1 (XEXP (x, 0), NULL_RTX);
4206               }
4207 #endif
4208         }
4209       /* A reload reg's contents are unknown after a label.  */
4210       if (GET_CODE (insn) == CODE_LABEL)
4211         CLEAR_HARD_REG_SET (reg_reloaded_valid);
4212
4213       /* Don't assume a reload reg is still good after a call insn
4214          if it is a call-used reg.  */
4215       else if (GET_CODE (insn) == CALL_INSN)
4216         AND_COMPL_HARD_REG_SET(reg_reloaded_valid, call_used_reg_set);
4217
4218       /* In case registers overlap, allow certain insns to invalidate
4219          particular hard registers.  */
4220
4221 #ifdef INSN_CLOBBERS_REGNO_P
4222       for (i = 0 ; i < FIRST_PSEUDO_REGISTER; i++)
4223         if (TEST_HARD_REG_BIT (reg_reloaded_valid, i)
4224             && INSN_CLOBBERS_REGNO_P (insn, i))
4225           CLEAR_HARD_REG_BIT (reg_reloaded_valid, i);
4226 #endif
4227
4228       insn = next;
4229
4230 #ifdef USE_C_ALLOCA
4231       alloca (0);
4232 #endif
4233     }
4234 }
4235
4236 /* Discard all record of any value reloaded from X,
4237    or reloaded in X from someplace else;
4238    unless X is an output reload reg of the current insn.
4239
4240    X may be a hard reg (the reload reg)
4241    or it may be a pseudo reg that was reloaded from.  */
4242
4243 static void
4244 forget_old_reloads_1 (x, ignored)
4245      rtx x;
4246      rtx ignored ATTRIBUTE_UNUSED;
4247 {
4248   register int regno;
4249   int nr;
4250   int offset = 0;
4251
4252   /* note_stores does give us subregs of hard regs.  */
4253   while (GET_CODE (x) == SUBREG)
4254     {
4255       offset += SUBREG_WORD (x);
4256       x = SUBREG_REG (x);
4257     }
4258
4259   if (GET_CODE (x) != REG)
4260     return;
4261
4262   regno = REGNO (x) + offset;
4263
4264   if (regno >= FIRST_PSEUDO_REGISTER)
4265     nr = 1;
4266   else
4267     {
4268       int i;
4269       nr = HARD_REGNO_NREGS (regno, GET_MODE (x));
4270       /* Storing into a spilled-reg invalidates its contents.
4271          This can happen if a block-local pseudo is allocated to that reg
4272          and it wasn't spilled because this block's total need is 0.
4273          Then some insn might have an optional reload and use this reg.  */
4274       for (i = 0; i < nr; i++)
4275         /* But don't do this if the reg actually serves as an output
4276            reload reg in the current instruction.  */
4277         if (n_reloads == 0
4278             || ! TEST_HARD_REG_BIT (reg_is_output_reload, regno + i))
4279           CLEAR_HARD_REG_BIT (reg_reloaded_valid, regno + i);
4280     }
4281
4282   /* Since value of X has changed,
4283      forget any value previously copied from it.  */
4284
4285   while (nr-- > 0)
4286     /* But don't forget a copy if this is the output reload
4287        that establishes the copy's validity.  */
4288     if (n_reloads == 0 || reg_has_output_reload[regno + nr] == 0)
4289       reg_last_reload_reg[regno + nr] = 0;
4290 }
4291 \f
4292 /* For each reload, the mode of the reload register.  */
4293 static enum machine_mode reload_mode[MAX_RELOADS];
4294
4295 /* For each reload, the largest number of registers it will require.  */
4296 static int reload_nregs[MAX_RELOADS];
4297
4298 /* Comparison function for qsort to decide which of two reloads
4299    should be handled first.  *P1 and *P2 are the reload numbers.  */
4300
4301 static int
4302 reload_reg_class_lower (r1p, r2p)
4303      const GENERIC_PTR r1p;
4304      const GENERIC_PTR r2p;
4305 {
4306   register int r1 = *(short *)r1p, r2 = *(short *)r2p;
4307   register int t;
4308
4309   /* Consider required reloads before optional ones.  */
4310   t = reload_optional[r1] - reload_optional[r2];
4311   if (t != 0)
4312     return t;
4313
4314   /* Count all solitary classes before non-solitary ones.  */
4315   t = ((reg_class_size[(int) reload_reg_class[r2]] == 1)
4316        - (reg_class_size[(int) reload_reg_class[r1]] == 1));
4317   if (t != 0)
4318     return t;
4319
4320   /* Aside from solitaires, consider all multi-reg groups first.  */
4321   t = reload_nregs[r2] - reload_nregs[r1];
4322   if (t != 0)
4323     return t;
4324
4325   /* Consider reloads in order of increasing reg-class number.  */
4326   t = (int) reload_reg_class[r1] - (int) reload_reg_class[r2];
4327   if (t != 0)
4328     return t;
4329
4330   /* If reloads are equally urgent, sort by reload number,
4331      so that the results of qsort leave nothing to chance.  */
4332   return r1 - r2;
4333 }
4334 \f
4335 /* The following HARD_REG_SETs indicate when each hard register is
4336    used for a reload of various parts of the current insn.  */
4337
4338 /* If reg is in use as a reload reg for a RELOAD_OTHER reload.  */
4339 static HARD_REG_SET reload_reg_used;
4340 /* If reg is in use for a RELOAD_FOR_INPUT_ADDRESS reload for operand I.  */
4341 static HARD_REG_SET reload_reg_used_in_input_addr[MAX_RECOG_OPERANDS];
4342 /* If reg is in use for a RELOAD_FOR_INPADDR_ADDRESS reload for operand I.  */
4343 static HARD_REG_SET reload_reg_used_in_inpaddr_addr[MAX_RECOG_OPERANDS];
4344 /* If reg is in use for a RELOAD_FOR_OUTPUT_ADDRESS reload for operand I.  */
4345 static HARD_REG_SET reload_reg_used_in_output_addr[MAX_RECOG_OPERANDS];
4346 /* If reg is in use for a RELOAD_FOR_OUTADDR_ADDRESS reload for operand I.  */
4347 static HARD_REG_SET reload_reg_used_in_outaddr_addr[MAX_RECOG_OPERANDS];
4348 /* If reg is in use for a RELOAD_FOR_INPUT reload for operand I.  */
4349 static HARD_REG_SET reload_reg_used_in_input[MAX_RECOG_OPERANDS];
4350 /* If reg is in use for a RELOAD_FOR_OUTPUT reload for operand I.  */
4351 static HARD_REG_SET reload_reg_used_in_output[MAX_RECOG_OPERANDS];
4352 /* If reg is in use for a RELOAD_FOR_OPERAND_ADDRESS reload.  */
4353 static HARD_REG_SET reload_reg_used_in_op_addr;
4354 /* If reg is in use for a RELOAD_FOR_OPADDR_ADDR reload.  */
4355 static HARD_REG_SET reload_reg_used_in_op_addr_reload;
4356 /* If reg is in use for a RELOAD_FOR_INSN reload.  */
4357 static HARD_REG_SET reload_reg_used_in_insn;
4358 /* If reg is in use for a RELOAD_FOR_OTHER_ADDRESS reload.  */
4359 static HARD_REG_SET reload_reg_used_in_other_addr;
4360
4361 /* If reg is in use as a reload reg for any sort of reload.  */
4362 static HARD_REG_SET reload_reg_used_at_all;
4363
4364 /* If reg is use as an inherited reload.  We just mark the first register
4365    in the group.  */
4366 static HARD_REG_SET reload_reg_used_for_inherit;
4367
4368 /* Mark reg REGNO as in use for a reload of the sort spec'd by OPNUM and
4369    TYPE. MODE is used to indicate how many consecutive regs are
4370    actually used.  */
4371
4372 static void
4373 mark_reload_reg_in_use (regno, opnum, type, mode)
4374      int regno;
4375      int opnum;
4376      enum reload_type type;
4377      enum machine_mode mode;
4378 {
4379   int nregs = HARD_REGNO_NREGS (regno, mode);
4380   int i;
4381
4382   for (i = regno; i < nregs + regno; i++)
4383     {
4384       switch (type)
4385         {
4386         case RELOAD_OTHER:
4387           SET_HARD_REG_BIT (reload_reg_used, i);
4388           break;
4389
4390         case RELOAD_FOR_INPUT_ADDRESS:
4391           SET_HARD_REG_BIT (reload_reg_used_in_input_addr[opnum], i);
4392           break;
4393
4394         case RELOAD_FOR_INPADDR_ADDRESS:
4395           SET_HARD_REG_BIT (reload_reg_used_in_inpaddr_addr[opnum], i);
4396           break;
4397
4398         case RELOAD_FOR_OUTPUT_ADDRESS:
4399           SET_HARD_REG_BIT (reload_reg_used_in_output_addr[opnum], i);
4400           break;
4401
4402         case RELOAD_FOR_OUTADDR_ADDRESS:
4403           SET_HARD_REG_BIT (reload_reg_used_in_outaddr_addr[opnum], i);
4404           break;
4405
4406         case RELOAD_FOR_OPERAND_ADDRESS:
4407           SET_HARD_REG_BIT (reload_reg_used_in_op_addr, i);
4408           break;
4409
4410         case RELOAD_FOR_OPADDR_ADDR:
4411           SET_HARD_REG_BIT (reload_reg_used_in_op_addr_reload, i);
4412           break;
4413
4414         case RELOAD_FOR_OTHER_ADDRESS:
4415           SET_HARD_REG_BIT (reload_reg_used_in_other_addr, i);
4416           break;
4417
4418         case RELOAD_FOR_INPUT:
4419           SET_HARD_REG_BIT (reload_reg_used_in_input[opnum], i);
4420           break;
4421
4422         case RELOAD_FOR_OUTPUT:
4423           SET_HARD_REG_BIT (reload_reg_used_in_output[opnum], i);
4424           break;
4425
4426         case RELOAD_FOR_INSN:
4427           SET_HARD_REG_BIT (reload_reg_used_in_insn, i);
4428           break;
4429         }
4430
4431       SET_HARD_REG_BIT (reload_reg_used_at_all, i);
4432     }
4433 }
4434
4435 /* Similarly, but show REGNO is no longer in use for a reload.  */
4436
4437 static void
4438 clear_reload_reg_in_use (regno, opnum, type, mode)
4439      int regno;
4440      int opnum;
4441      enum reload_type type;
4442      enum machine_mode mode;
4443 {
4444   int nregs = HARD_REGNO_NREGS (regno, mode);
4445   int i;
4446
4447   for (i = regno; i < nregs + regno; i++)
4448     {
4449       switch (type)
4450         {
4451         case RELOAD_OTHER:
4452           CLEAR_HARD_REG_BIT (reload_reg_used, i);
4453           break;
4454
4455         case RELOAD_FOR_INPUT_ADDRESS:
4456           CLEAR_HARD_REG_BIT (reload_reg_used_in_input_addr[opnum], i);
4457           break;
4458
4459         case RELOAD_FOR_INPADDR_ADDRESS:
4460           CLEAR_HARD_REG_BIT (reload_reg_used_in_inpaddr_addr[opnum], i);
4461           break;
4462
4463         case RELOAD_FOR_OUTPUT_ADDRESS:
4464           CLEAR_HARD_REG_BIT (reload_reg_used_in_output_addr[opnum], i);
4465           break;
4466
4467         case RELOAD_FOR_OUTADDR_ADDRESS:
4468           CLEAR_HARD_REG_BIT (reload_reg_used_in_outaddr_addr[opnum], i);
4469           break;
4470
4471         case RELOAD_FOR_OPERAND_ADDRESS:
4472           CLEAR_HARD_REG_BIT (reload_reg_used_in_op_addr, i);
4473           break;
4474
4475         case RELOAD_FOR_OPADDR_ADDR:
4476           CLEAR_HARD_REG_BIT (reload_reg_used_in_op_addr_reload, i);
4477           break;
4478
4479         case RELOAD_FOR_OTHER_ADDRESS:
4480           CLEAR_HARD_REG_BIT (reload_reg_used_in_other_addr, i);
4481           break;
4482
4483         case RELOAD_FOR_INPUT:
4484           CLEAR_HARD_REG_BIT (reload_reg_used_in_input[opnum], i);
4485           break;
4486
4487         case RELOAD_FOR_OUTPUT:
4488           CLEAR_HARD_REG_BIT (reload_reg_used_in_output[opnum], i);
4489           break;
4490
4491         case RELOAD_FOR_INSN:
4492           CLEAR_HARD_REG_BIT (reload_reg_used_in_insn, i);
4493           break;
4494         }
4495     }
4496 }
4497
4498 /* 1 if reg REGNO is free as a reload reg for a reload of the sort
4499    specified by OPNUM and TYPE.  */
4500
4501 static int
4502 reload_reg_free_p (regno, opnum, type)
4503      int regno;
4504      int opnum;
4505      enum reload_type type;
4506 {
4507   int i;
4508
4509   /* In use for a RELOAD_OTHER means it's not available for anything.  */
4510   if (TEST_HARD_REG_BIT (reload_reg_used, regno))
4511     return 0;
4512
4513   switch (type)
4514     {
4515     case RELOAD_OTHER:
4516       /* In use for anything means we can't use it for RELOAD_OTHER.  */
4517       if (TEST_HARD_REG_BIT (reload_reg_used_in_other_addr, regno)
4518           || TEST_HARD_REG_BIT (reload_reg_used_in_op_addr, regno)
4519           || TEST_HARD_REG_BIT (reload_reg_used_in_insn, regno))
4520         return 0;
4521
4522       for (i = 0; i < reload_n_operands; i++)
4523         if (TEST_HARD_REG_BIT (reload_reg_used_in_input_addr[i], regno)
4524             || TEST_HARD_REG_BIT (reload_reg_used_in_inpaddr_addr[i], regno)
4525             || TEST_HARD_REG_BIT (reload_reg_used_in_output_addr[i], regno)
4526             || TEST_HARD_REG_BIT (reload_reg_used_in_outaddr_addr[i], regno)
4527             || TEST_HARD_REG_BIT (reload_reg_used_in_input[i], regno)
4528             || TEST_HARD_REG_BIT (reload_reg_used_in_output[i], regno))
4529           return 0;
4530
4531       return 1;
4532
4533     case RELOAD_FOR_INPUT:
4534       if (TEST_HARD_REG_BIT (reload_reg_used_in_insn, regno)
4535           || TEST_HARD_REG_BIT (reload_reg_used_in_op_addr, regno))
4536         return 0;
4537
4538       if (TEST_HARD_REG_BIT (reload_reg_used_in_op_addr_reload, regno))
4539         return 0;
4540
4541       /* If it is used for some other input, can't use it.  */
4542       for (i = 0; i < reload_n_operands; i++)
4543         if (TEST_HARD_REG_BIT (reload_reg_used_in_input[i], regno))
4544           return 0;
4545
4546       /* If it is used in a later operand's address, can't use it.  */
4547       for (i = opnum + 1; i < reload_n_operands; i++)
4548         if (TEST_HARD_REG_BIT (reload_reg_used_in_input_addr[i], regno)
4549             || TEST_HARD_REG_BIT (reload_reg_used_in_inpaddr_addr[i], regno))
4550           return 0;
4551
4552       return 1;
4553
4554     case RELOAD_FOR_INPUT_ADDRESS:
4555       /* Can't use a register if it is used for an input address for this
4556          operand or used as an input in an earlier one.  */
4557       if (TEST_HARD_REG_BIT (reload_reg_used_in_input_addr[opnum], regno)
4558           || TEST_HARD_REG_BIT (reload_reg_used_in_inpaddr_addr[opnum], regno))
4559         return 0;
4560
4561       for (i = 0; i < opnum; i++)
4562         if (TEST_HARD_REG_BIT (reload_reg_used_in_input[i], regno))
4563           return 0;
4564
4565       return 1;
4566
4567     case RELOAD_FOR_INPADDR_ADDRESS:
4568       /* Can't use a register if it is used for an input address
4569          for this operand or used as an input in an earlier
4570          one.  */
4571       if (TEST_HARD_REG_BIT (reload_reg_used_in_inpaddr_addr[opnum], regno))
4572         return 0;
4573
4574       for (i = 0; i < opnum; i++)
4575         if (TEST_HARD_REG_BIT (reload_reg_used_in_input[i], regno))
4576           return 0;
4577
4578       return 1;
4579
4580     case RELOAD_FOR_OUTPUT_ADDRESS:
4581       /* Can't use a register if it is used for an output address for this
4582          operand or used as an output in this or a later operand.  */
4583       if (TEST_HARD_REG_BIT (reload_reg_used_in_output_addr[opnum], regno))
4584         return 0;
4585
4586       for (i = opnum; i < reload_n_operands; i++)
4587         if (TEST_HARD_REG_BIT (reload_reg_used_in_output[i], regno))
4588           return 0;
4589
4590       return 1;
4591
4592     case RELOAD_FOR_OUTADDR_ADDRESS:
4593       /* Can't use a register if it is used for an output address
4594          for this operand or used as an output in this or a
4595          later operand.  */
4596       if (TEST_HARD_REG_BIT (reload_reg_used_in_outaddr_addr[opnum], regno))
4597         return 0;
4598
4599       for (i = opnum; i < reload_n_operands; i++)
4600         if (TEST_HARD_REG_BIT (reload_reg_used_in_output[i], regno))
4601           return 0;
4602
4603       return 1;
4604
4605     case RELOAD_FOR_OPERAND_ADDRESS:
4606       for (i = 0; i < reload_n_operands; i++)
4607         if (TEST_HARD_REG_BIT (reload_reg_used_in_input[i], regno))
4608           return 0;
4609
4610       return (! TEST_HARD_REG_BIT (reload_reg_used_in_insn, regno)
4611               && ! TEST_HARD_REG_BIT (reload_reg_used_in_op_addr, regno));
4612
4613     case RELOAD_FOR_OPADDR_ADDR:
4614       for (i = 0; i < reload_n_operands; i++)
4615         if (TEST_HARD_REG_BIT (reload_reg_used_in_input[i], regno))
4616           return 0;
4617
4618       return (!TEST_HARD_REG_BIT (reload_reg_used_in_op_addr_reload, regno));
4619
4620     case RELOAD_FOR_OUTPUT:
4621       /* This cannot share a register with RELOAD_FOR_INSN reloads, other
4622          outputs, or an operand address for this or an earlier output.  */
4623       if (TEST_HARD_REG_BIT (reload_reg_used_in_insn, regno))
4624         return 0;
4625
4626       for (i = 0; i < reload_n_operands; i++)
4627         if (TEST_HARD_REG_BIT (reload_reg_used_in_output[i], regno))
4628           return 0;
4629
4630       for (i = 0; i <= opnum; i++)
4631         if (TEST_HARD_REG_BIT (reload_reg_used_in_output_addr[i], regno)
4632             || TEST_HARD_REG_BIT (reload_reg_used_in_outaddr_addr[i], regno))
4633           return 0;
4634
4635       return 1;
4636
4637     case RELOAD_FOR_INSN:
4638       for (i = 0; i < reload_n_operands; i++)
4639         if (TEST_HARD_REG_BIT (reload_reg_used_in_input[i], regno)
4640             || TEST_HARD_REG_BIT (reload_reg_used_in_output[i], regno))
4641           return 0;
4642
4643       return (! TEST_HARD_REG_BIT (reload_reg_used_in_insn, regno)
4644               && ! TEST_HARD_REG_BIT (reload_reg_used_in_op_addr, regno));
4645
4646     case RELOAD_FOR_OTHER_ADDRESS:
4647       return ! TEST_HARD_REG_BIT (reload_reg_used_in_other_addr, regno);
4648     }
4649   abort ();
4650 }
4651
4652 /* Return 1 if the value in reload reg REGNO, as used by a reload
4653    needed for the part of the insn specified by OPNUM and TYPE,
4654    is not in use for a reload in any prior part of the insn.
4655
4656    We can assume that the reload reg was already tested for availability
4657    at the time it is needed, and we should not check this again,
4658    in case the reg has already been marked in use.  */
4659
4660 static int
4661 reload_reg_free_before_p (regno, opnum, type)
4662      int regno;
4663      int opnum;
4664      enum reload_type type;
4665 {
4666   int i;
4667
4668   switch (type)
4669     {
4670     case RELOAD_FOR_OTHER_ADDRESS:
4671       /* These always come first.  */
4672       return 1;
4673
4674     case RELOAD_OTHER:
4675       return ! TEST_HARD_REG_BIT (reload_reg_used_in_other_addr, regno);
4676
4677       /* If this use is for part of the insn,
4678          check the reg is not in use for any prior part.  It is tempting
4679          to try to do this by falling through from objecs that occur
4680          later in the insn to ones that occur earlier, but that will not
4681          correctly take into account the fact that here we MUST ignore
4682          things that would prevent the register from being allocated in
4683          the first place, since we know that it was allocated.  */
4684
4685     case RELOAD_FOR_OUTPUT_ADDRESS:
4686       /* Earlier reloads include RELOAD_FOR_OUTADDR_ADDRESS reloads.  */
4687       if (TEST_HARD_REG_BIT (reload_reg_used_in_outaddr_addr[opnum], regno))
4688         return 0;
4689       /* ... fall through ...  */
4690     case RELOAD_FOR_OUTADDR_ADDRESS:
4691       /* Earlier reloads are for earlier outputs or their addresses,
4692          any RELOAD_FOR_INSN reloads, any inputs or their addresses, or any
4693          RELOAD_FOR_OTHER_ADDRESS reloads (we know it can't conflict with
4694          RELOAD_OTHER)..  */
4695       for (i = 0; i < opnum; i++)
4696         if (TEST_HARD_REG_BIT (reload_reg_used_in_output_addr[i], regno)
4697             || TEST_HARD_REG_BIT (reload_reg_used_in_outaddr_addr[i], regno)
4698             || TEST_HARD_REG_BIT (reload_reg_used_in_output[i], regno))
4699           return 0;
4700
4701       if (TEST_HARD_REG_BIT (reload_reg_used_in_insn, regno))
4702         return 0;
4703
4704       for (i = 0; i < reload_n_operands; i++)
4705         if (TEST_HARD_REG_BIT (reload_reg_used_in_input_addr[i], regno)
4706             || TEST_HARD_REG_BIT (reload_reg_used_in_inpaddr_addr[i], regno)
4707             || TEST_HARD_REG_BIT (reload_reg_used_in_input[i], regno))
4708           return 0;
4709
4710       return (! TEST_HARD_REG_BIT (reload_reg_used_in_other_addr, regno)
4711               && ! TEST_HARD_REG_BIT (reload_reg_used_in_insn, regno)
4712               && ! TEST_HARD_REG_BIT (reload_reg_used_in_op_addr_reload, regno)
4713               && ! TEST_HARD_REG_BIT (reload_reg_used_in_op_addr, regno));
4714                                    
4715     case RELOAD_FOR_OUTPUT:
4716       /* This can't be used in the output address for this operand and
4717          anything that can't be used for it, except that we've already
4718          tested for RELOAD_FOR_INSN objects.  */
4719
4720       if (TEST_HARD_REG_BIT (reload_reg_used_in_output_addr[opnum], regno)
4721           || TEST_HARD_REG_BIT (reload_reg_used_in_outaddr_addr[opnum], regno))
4722         return 0;
4723
4724       for (i = 0; i < opnum; i++)
4725         if (TEST_HARD_REG_BIT (reload_reg_used_in_output_addr[i], regno)
4726             || TEST_HARD_REG_BIT (reload_reg_used_in_outaddr_addr[i], regno)
4727             || TEST_HARD_REG_BIT (reload_reg_used_in_output[i], regno))
4728           return 0;
4729
4730       for (i = 0; i < reload_n_operands; i++)
4731         if (TEST_HARD_REG_BIT (reload_reg_used_in_input_addr[i], regno)
4732             || TEST_HARD_REG_BIT (reload_reg_used_in_inpaddr_addr[i], regno)
4733             || TEST_HARD_REG_BIT (reload_reg_used_in_input[i], regno)
4734             || TEST_HARD_REG_BIT (reload_reg_used_in_op_addr, regno))
4735           return 0;
4736
4737       return ! TEST_HARD_REG_BIT (reload_reg_used_in_other_addr, regno);
4738
4739     case RELOAD_FOR_OPERAND_ADDRESS:
4740       /* Earlier reloads include RELOAD_FOR_OPADDR_ADDR reloads.  */
4741       if (TEST_HARD_REG_BIT (reload_reg_used_in_op_addr_reload, regno))
4742         return 0;
4743
4744       /* ... fall through ...  */
4745
4746     case RELOAD_FOR_OPADDR_ADDR:
4747     case RELOAD_FOR_INSN:
4748       /* These can't conflict with inputs, or each other, so all we have to
4749          test is input addresses and the addresses of OTHER items.  */
4750
4751       for (i = 0; i < reload_n_operands; i++)
4752         if (TEST_HARD_REG_BIT (reload_reg_used_in_input_addr[i], regno)
4753             || TEST_HARD_REG_BIT (reload_reg_used_in_inpaddr_addr[i], regno))
4754           return 0;
4755
4756       return ! TEST_HARD_REG_BIT (reload_reg_used_in_other_addr, regno);
4757
4758     case RELOAD_FOR_INPUT:
4759       /* The only things earlier are the address for this and
4760          earlier inputs, other inputs (which we know we don't conflict
4761          with), and addresses of RELOAD_OTHER objects.  */
4762
4763       for (i = 0; i <= opnum; i++)
4764         if (TEST_HARD_REG_BIT (reload_reg_used_in_input_addr[i], regno)
4765             || TEST_HARD_REG_BIT (reload_reg_used_in_inpaddr_addr[i], regno))
4766           return 0;
4767
4768       return ! TEST_HARD_REG_BIT (reload_reg_used_in_other_addr, regno);
4769
4770     case RELOAD_FOR_INPUT_ADDRESS:
4771       /* Earlier reloads include RELOAD_FOR_INPADDR_ADDRESS reloads.  */
4772       if (TEST_HARD_REG_BIT (reload_reg_used_in_inpaddr_addr[opnum], regno))
4773         return 0;
4774       /* ... fall through ...  */
4775     case RELOAD_FOR_INPADDR_ADDRESS:
4776       /* Similarly, all we have to check is for use in earlier inputs'
4777          addresses.  */
4778       for (i = 0; i < opnum; i++)
4779         if (TEST_HARD_REG_BIT (reload_reg_used_in_input_addr[i], regno)
4780             || TEST_HARD_REG_BIT (reload_reg_used_in_inpaddr_addr[i], regno))
4781           return 0;
4782
4783       return ! TEST_HARD_REG_BIT (reload_reg_used_in_other_addr, regno);
4784     }
4785   abort ();
4786 }
4787
4788 /* Return 1 if the value in reload reg REGNO, as used by a reload
4789    needed for the part of the insn specified by OPNUM and TYPE,
4790    is still available in REGNO at the end of the insn.
4791
4792    We can assume that the reload reg was already tested for availability
4793    at the time it is needed, and we should not check this again,
4794    in case the reg has already been marked in use.  */
4795
4796 static int
4797 reload_reg_reaches_end_p (regno, opnum, type)
4798      int regno;
4799      int opnum;
4800      enum reload_type type;
4801 {
4802   int i;
4803
4804   switch (type)
4805     {
4806     case RELOAD_OTHER:
4807       /* Since a RELOAD_OTHER reload claims the reg for the entire insn,
4808          its value must reach the end.  */
4809       return 1;
4810
4811       /* If this use is for part of the insn,
4812          its value reaches if no subsequent part uses the same register. 
4813          Just like the above function, don't try to do this with lots
4814          of fallthroughs.  */
4815
4816     case RELOAD_FOR_OTHER_ADDRESS:
4817       /* Here we check for everything else, since these don't conflict
4818          with anything else and everything comes later.  */
4819
4820       for (i = 0; i < reload_n_operands; i++)
4821         if (TEST_HARD_REG_BIT (reload_reg_used_in_output_addr[i], regno)
4822             || TEST_HARD_REG_BIT (reload_reg_used_in_outaddr_addr[i], regno)
4823             || TEST_HARD_REG_BIT (reload_reg_used_in_output[i], regno)
4824             || TEST_HARD_REG_BIT (reload_reg_used_in_input_addr[i], regno)
4825             || TEST_HARD_REG_BIT (reload_reg_used_in_inpaddr_addr[i], regno)
4826             || TEST_HARD_REG_BIT (reload_reg_used_in_input[i], regno))
4827           return 0;
4828
4829       return (! TEST_HARD_REG_BIT (reload_reg_used_in_op_addr, regno)
4830               && ! TEST_HARD_REG_BIT (reload_reg_used_in_insn, regno)
4831               && ! TEST_HARD_REG_BIT (reload_reg_used, regno));
4832
4833     case RELOAD_FOR_INPUT_ADDRESS:
4834     case RELOAD_FOR_INPADDR_ADDRESS:
4835       /* Similar, except that we check only for this and subsequent inputs
4836          and the address of only subsequent inputs and we do not need
4837          to check for RELOAD_OTHER objects since they are known not to
4838          conflict.  */
4839
4840       for (i = opnum; i < reload_n_operands; i++)
4841         if (TEST_HARD_REG_BIT (reload_reg_used_in_input[i], regno))
4842           return 0;
4843
4844       for (i = opnum + 1; i < reload_n_operands; i++)
4845         if (TEST_HARD_REG_BIT (reload_reg_used_in_input_addr[i], regno)
4846             || TEST_HARD_REG_BIT (reload_reg_used_in_inpaddr_addr[i], regno))
4847           return 0;
4848
4849       for (i = 0; i < reload_n_operands; i++)
4850         if (TEST_HARD_REG_BIT (reload_reg_used_in_output_addr[i], regno)
4851             || TEST_HARD_REG_BIT (reload_reg_used_in_outaddr_addr[i], regno)
4852             || TEST_HARD_REG_BIT (reload_reg_used_in_output[i], regno))
4853           return 0;
4854
4855       if (TEST_HARD_REG_BIT (reload_reg_used_in_op_addr_reload, regno))
4856         return 0;
4857
4858       return (! TEST_HARD_REG_BIT (reload_reg_used_in_op_addr, regno)
4859               && ! TEST_HARD_REG_BIT (reload_reg_used_in_insn, regno));
4860
4861     case RELOAD_FOR_INPUT:
4862       /* Similar to input address, except we start at the next operand for
4863          both input and input address and we do not check for 
4864          RELOAD_FOR_OPERAND_ADDRESS and RELOAD_FOR_INSN since these
4865          would conflict.  */
4866
4867       for (i = opnum + 1; i < reload_n_operands; i++)
4868         if (TEST_HARD_REG_BIT (reload_reg_used_in_input_addr[i], regno)
4869             || TEST_HARD_REG_BIT (reload_reg_used_in_inpaddr_addr[i], regno)
4870             || TEST_HARD_REG_BIT (reload_reg_used_in_input[i], regno))
4871           return 0;
4872
4873       /* ... fall through ...  */
4874
4875     case RELOAD_FOR_OPERAND_ADDRESS:
4876       /* Check outputs and their addresses.  */
4877
4878       for (i = 0; i < reload_n_operands; i++)
4879         if (TEST_HARD_REG_BIT (reload_reg_used_in_output_addr[i], regno)
4880             || TEST_HARD_REG_BIT (reload_reg_used_in_outaddr_addr[i], regno)
4881             || TEST_HARD_REG_BIT (reload_reg_used_in_output[i], regno))
4882           return 0;
4883
4884       return 1;
4885
4886     case RELOAD_FOR_OPADDR_ADDR:
4887       for (i = 0; i < reload_n_operands; i++)
4888         if (TEST_HARD_REG_BIT (reload_reg_used_in_output_addr[i], regno)
4889             || TEST_HARD_REG_BIT (reload_reg_used_in_outaddr_addr[i], regno)
4890             || TEST_HARD_REG_BIT (reload_reg_used_in_output[i], regno))
4891           return 0;
4892
4893       return (! TEST_HARD_REG_BIT (reload_reg_used_in_op_addr, regno)
4894               && !TEST_HARD_REG_BIT (reload_reg_used_in_insn, regno));
4895
4896     case RELOAD_FOR_INSN:
4897       /* These conflict with other outputs with RELOAD_OTHER.  So
4898          we need only check for output addresses.  */
4899
4900       opnum = -1;
4901
4902       /* ... fall through ...  */
4903
4904     case RELOAD_FOR_OUTPUT:
4905     case RELOAD_FOR_OUTPUT_ADDRESS:
4906     case RELOAD_FOR_OUTADDR_ADDRESS:
4907       /* We already know these can't conflict with a later output.  So the
4908          only thing to check are later output addresses.  */
4909       for (i = opnum + 1; i < reload_n_operands; i++)
4910         if (TEST_HARD_REG_BIT (reload_reg_used_in_output_addr[i], regno)
4911             || TEST_HARD_REG_BIT (reload_reg_used_in_outaddr_addr[i], regno))
4912           return 0;
4913
4914       return 1;
4915     }
4916
4917   abort ();
4918 }
4919 \f
4920 /* Return 1 if the reloads denoted by R1 and R2 cannot share a register.
4921    Return 0 otherwise.
4922
4923    This function uses the same algorithm as reload_reg_free_p above.  */
4924
4925 int
4926 reloads_conflict (r1, r2)
4927      int r1, r2;
4928 {
4929   enum reload_type r1_type = reload_when_needed[r1];
4930   enum reload_type r2_type = reload_when_needed[r2];
4931   int r1_opnum = reload_opnum[r1];
4932   int r2_opnum = reload_opnum[r2];
4933
4934   /* RELOAD_OTHER conflicts with everything.  */
4935   if (r2_type == RELOAD_OTHER)
4936     return 1;
4937
4938   /* Otherwise, check conflicts differently for each type.  */
4939
4940   switch (r1_type)
4941     {
4942     case RELOAD_FOR_INPUT:
4943       return (r2_type == RELOAD_FOR_INSN 
4944               || r2_type == RELOAD_FOR_OPERAND_ADDRESS
4945               || r2_type == RELOAD_FOR_OPADDR_ADDR
4946               || r2_type == RELOAD_FOR_INPUT
4947               || ((r2_type == RELOAD_FOR_INPUT_ADDRESS
4948                    || r2_type == RELOAD_FOR_INPADDR_ADDRESS)
4949                   && r2_opnum > r1_opnum));
4950
4951     case RELOAD_FOR_INPUT_ADDRESS:
4952       return ((r2_type == RELOAD_FOR_INPUT_ADDRESS && r1_opnum == r2_opnum)
4953               || (r2_type == RELOAD_FOR_INPUT && r2_opnum < r1_opnum));
4954
4955     case RELOAD_FOR_INPADDR_ADDRESS:
4956       return ((r2_type == RELOAD_FOR_INPADDR_ADDRESS && r1_opnum == r2_opnum)
4957               || (r2_type == RELOAD_FOR_INPUT && r2_opnum < r1_opnum));
4958
4959     case RELOAD_FOR_OUTPUT_ADDRESS:
4960       return ((r2_type == RELOAD_FOR_OUTPUT_ADDRESS && r2_opnum == r1_opnum)
4961               || (r2_type == RELOAD_FOR_OUTPUT && r2_opnum >= r1_opnum));
4962
4963     case RELOAD_FOR_OUTADDR_ADDRESS:
4964       return ((r2_type == RELOAD_FOR_OUTADDR_ADDRESS && r2_opnum == r1_opnum)
4965               || (r2_type == RELOAD_FOR_OUTPUT && r2_opnum >= r1_opnum));
4966
4967     case RELOAD_FOR_OPERAND_ADDRESS:
4968       return (r2_type == RELOAD_FOR_INPUT || r2_type == RELOAD_FOR_INSN
4969               || r2_type == RELOAD_FOR_OPERAND_ADDRESS);
4970
4971     case RELOAD_FOR_OPADDR_ADDR:
4972       return (r2_type == RELOAD_FOR_INPUT 
4973               || r2_type == RELOAD_FOR_OPADDR_ADDR);
4974
4975     case RELOAD_FOR_OUTPUT:
4976       return (r2_type == RELOAD_FOR_INSN || r2_type == RELOAD_FOR_OUTPUT
4977               || ((r2_type == RELOAD_FOR_OUTPUT_ADDRESS
4978                    || r2_type == RELOAD_FOR_OUTADDR_ADDRESS)
4979                   && r2_opnum >= r1_opnum));
4980
4981     case RELOAD_FOR_INSN:
4982       return (r2_type == RELOAD_FOR_INPUT || r2_type == RELOAD_FOR_OUTPUT
4983               || r2_type == RELOAD_FOR_INSN
4984               || r2_type == RELOAD_FOR_OPERAND_ADDRESS);
4985
4986     case RELOAD_FOR_OTHER_ADDRESS:
4987       return r2_type == RELOAD_FOR_OTHER_ADDRESS;
4988
4989     case RELOAD_OTHER:
4990       return 1;
4991
4992     default:
4993       abort ();
4994     }
4995 }
4996 \f
4997 /* Vector of reload-numbers showing the order in which the reloads should
4998    be processed.  */
4999 short reload_order[MAX_RELOADS];
5000
5001 /* Indexed by reload number, 1 if incoming value
5002    inherited from previous insns.  */
5003 char reload_inherited[MAX_RELOADS];
5004
5005 /* For an inherited reload, this is the insn the reload was inherited from,
5006    if we know it.  Otherwise, this is 0.  */
5007 rtx reload_inheritance_insn[MAX_RELOADS];
5008
5009 /* If non-zero, this is a place to get the value of the reload,
5010    rather than using reload_in.  */
5011 rtx reload_override_in[MAX_RELOADS];
5012
5013 /* For each reload, the hard register number of the register used,
5014    or -1 if we did not need a register for this reload.  */
5015 int reload_spill_index[MAX_RELOADS];
5016
5017 /* Return 1 if the value in reload reg REGNO, as used by a reload
5018    needed for the part of the insn specified by OPNUM and TYPE,
5019    may be used to load VALUE into it.
5020
5021    Other read-only reloads with the same value do not conflict
5022    unless OUT is non-zero and these other reloads have to live while
5023    output reloads live.
5024
5025    RELOADNUM is the number of the reload we want to load this value for;
5026    a reload does not conflict with itself.
5027
5028    The caller has to make sure that there is no conflict with the return
5029    register.  */
5030 static int
5031 reload_reg_free_for_value_p (regno, opnum, type, value, out, reloadnum)
5032      int regno;
5033      int opnum;
5034      enum reload_type type;
5035      rtx value, out;
5036      int reloadnum;
5037 {
5038   int time1;
5039   int i;
5040
5041   /* We use some pseudo 'time' value to check if the lifetimes of the
5042      new register use would overlap with the one of a previous reload
5043      that is not read-only or uses a different value.
5044      The 'time' used doesn't have to be linear in any shape or form, just
5045      monotonic.
5046      Some reload types use different 'buckets' for each operand.
5047      So there are MAX_RECOG_OPERANDS different time values for each
5048      such reload type.
5049      We compute TIME1 as the time when the register for the prospective
5050      new reload ceases to be live, and TIME2 for each existing
5051      reload as the time when that the reload register of that reload
5052      becomes live.
5053      Where there is little to be gained by exact lifetime calculations,
5054      we just make conservative assumptions, i.e. a longer lifetime;
5055      this is done in the 'default:' cases.  */
5056   switch (type)
5057     {
5058     case RELOAD_FOR_OTHER_ADDRESS:
5059       time1 = 0;
5060       break;
5061     /* For each input, we might have a sequence of RELOAD_FOR_INPADDR_ADDRESS,
5062        RELOAD_FOR_INPUT_ADDRESS and RELOAD_FOR_INPUT.  By adding 0 / 1 / 2 ,
5063        respectively, to the time values for these, we get distinct time
5064        values.  To get distinct time values for each operand, we have to
5065        multiply opnum by at least three.  We round that up to four because
5066        multiply by four is often cheaper.  */
5067     case RELOAD_FOR_INPADDR_ADDRESS:
5068       time1 = opnum * 4 + 1;
5069       break;
5070     case RELOAD_FOR_INPUT_ADDRESS:
5071       time1 = opnum * 4 + 2;
5072       break;
5073     case RELOAD_FOR_INPUT:
5074       /* All RELOAD_FOR_INPUT reloads remain live till just before the
5075          instruction is executed.  */
5076       time1 = (MAX_RECOG_OPERANDS - 1) * 4 + 3;
5077       break;
5078     /* opnum * 4 + 3 < opnum * 4 + 4
5079        <= (MAX_RECOG_OPERANDS - 1) * 4 + 4 == MAX_RECOG_OPERANDS * 4 */
5080     case RELOAD_FOR_OUTPUT_ADDRESS:
5081       time1 = MAX_RECOG_OPERANDS * 4 + opnum;
5082       break;
5083     default:
5084       time1 = MAX_RECOG_OPERANDS * 5;
5085     }
5086
5087   for (i = 0; i < n_reloads; i++)
5088     {
5089       rtx reg = reload_reg_rtx[i];
5090       if (reg && GET_CODE (reg) == REG
5091           && ((unsigned) regno - true_regnum (reg)
5092               <= HARD_REGNO_NREGS (REGNO (reg), GET_MODE (reg)) - (unsigned)1)
5093           && i != reloadnum)
5094         {
5095           if (out
5096               && reload_when_needed[i] != RELOAD_FOR_INPUT
5097               && reload_when_needed[i] != RELOAD_FOR_INPUT_ADDRESS
5098               && reload_when_needed[i] != RELOAD_FOR_INPADDR_ADDRESS)
5099             return 0;
5100           if (! reload_in[i] || ! rtx_equal_p (reload_in[i], value)
5101               || reload_out[i])
5102             {
5103               int time2;
5104               switch (reload_when_needed[i])
5105                 {
5106                 case RELOAD_FOR_OTHER_ADDRESS:
5107                   time2 = 0;
5108                   break;
5109                 case RELOAD_FOR_INPADDR_ADDRESS:
5110                   time2 = reload_opnum[i] * 4 + 1;
5111                   break;
5112                 case RELOAD_FOR_INPUT_ADDRESS:
5113                   time2 = reload_opnum[i] * 4 + 2;
5114                   break;
5115                 case RELOAD_FOR_INPUT:
5116                   time2 = reload_opnum[i] * 4 + 3;
5117                   break;
5118                 case RELOAD_FOR_OUTPUT:
5119                 /* All RELOAD_FOR_OUTPUT reloads become live just after the
5120                    instruction is executed.  */
5121                   time2 = MAX_RECOG_OPERANDS * 4;
5122                   break;
5123                 /* The first RELOAD_FOR_OUTPUT_ADDRESS reload conflicts with the
5124                    RELOAD_FOR_OUTPUT reloads, so assign it the same time value.  */
5125                 case RELOAD_FOR_OUTPUT_ADDRESS:
5126                   time2 = MAX_RECOG_OPERANDS * 4 + reload_opnum[i];
5127                   break;
5128                 case RELOAD_OTHER:
5129                   if (! reload_in[i] || rtx_equal_p (reload_in[i], value))
5130                     {
5131                       time2 = MAX_RECOG_OPERANDS * 4;
5132                       break;
5133                     }
5134                 default:
5135                   time2 = 0;
5136                 }
5137               if (time1 >= time2)
5138                 return 0;
5139             }
5140         }
5141     }
5142   return 1;
5143 }
5144
5145 /* Find a spill register to use as a reload register for reload R.
5146    LAST_RELOAD is non-zero if this is the last reload for the insn being
5147    processed.
5148
5149    Set reload_reg_rtx[R] to the register allocated.
5150
5151    If NOERROR is nonzero, we return 1 if successful,
5152    or 0 if we couldn't find a spill reg and we didn't change anything.  */
5153
5154 static int
5155 allocate_reload_reg (r, insn, last_reload, noerror)
5156      int r;
5157      rtx insn;
5158      int last_reload;
5159      int noerror;
5160 {
5161   int i;
5162   int pass;
5163   int count;
5164   rtx new;
5165   int regno;
5166
5167   /* If we put this reload ahead, thinking it is a group,
5168      then insist on finding a group.  Otherwise we can grab a
5169      reg that some other reload needs.
5170      (That can happen when we have a 68000 DATA_OR_FP_REG
5171      which is a group of data regs or one fp reg.)
5172      We need not be so restrictive if there are no more reloads
5173      for this insn.
5174
5175      ??? Really it would be nicer to have smarter handling
5176      for that kind of reg class, where a problem like this is normal.
5177      Perhaps those classes should be avoided for reloading
5178      by use of more alternatives.  */
5179
5180   int force_group = reload_nregs[r] > 1 && ! last_reload;
5181
5182   /* If we want a single register and haven't yet found one,
5183      take any reg in the right class and not in use.
5184      If we want a consecutive group, here is where we look for it.
5185
5186      We use two passes so we can first look for reload regs to
5187      reuse, which are already in use for other reloads in this insn,
5188      and only then use additional registers.
5189      I think that maximizing reuse is needed to make sure we don't
5190      run out of reload regs.  Suppose we have three reloads, and
5191      reloads A and B can share regs.  These need two regs.
5192      Suppose A and B are given different regs.
5193      That leaves none for C.  */
5194   for (pass = 0; pass < 2; pass++)
5195     {
5196       /* I is the index in spill_regs.
5197          We advance it round-robin between insns to use all spill regs
5198          equally, so that inherited reloads have a chance
5199          of leapfrogging each other.  Don't do this, however, when we have
5200          group needs and failure would be fatal; if we only have a relatively
5201          small number of spill registers, and more than one of them has
5202          group needs, then by starting in the middle, we may end up 
5203          allocating the first one in such a way that we are not left with
5204          sufficient groups to handle the rest.  */
5205
5206       if (noerror || ! force_group)
5207         i = last_spill_reg;
5208       else
5209         i = -1;
5210           
5211       for (count = 0; count < n_spills; count++)
5212         {
5213           int class = (int) reload_reg_class[r];
5214
5215           i = (i + 1) % n_spills;
5216
5217           if ((reload_reg_free_p (spill_regs[i], reload_opnum[r],
5218                                   reload_when_needed[r])
5219                || (reload_in[r]
5220                       /* We check reload_reg_used to make sure we
5221                          don't clobber the return register.  */
5222                    && ! TEST_HARD_REG_BIT (reload_reg_used, spill_regs[i])
5223                    && reload_reg_free_for_value_p (spill_regs[i],
5224                                                   reload_opnum[r],
5225                                                   reload_when_needed[r],
5226                                                   reload_in[r],
5227                                                   reload_out[r], r)))
5228               && TEST_HARD_REG_BIT (reg_class_contents[class], spill_regs[i])
5229               && HARD_REGNO_MODE_OK (spill_regs[i], reload_mode[r])
5230               /* Look first for regs to share, then for unshared.  But
5231                  don't share regs used for inherited reloads; they are
5232                  the ones we want to preserve.  */
5233               && (pass
5234                   || (TEST_HARD_REG_BIT (reload_reg_used_at_all,
5235                                          spill_regs[i])
5236                       && ! TEST_HARD_REG_BIT (reload_reg_used_for_inherit,
5237                                               spill_regs[i]))))
5238             {
5239               int nr = HARD_REGNO_NREGS (spill_regs[i], reload_mode[r]);
5240               /* Avoid the problem where spilling a GENERAL_OR_FP_REG
5241                  (on 68000) got us two FP regs.  If NR is 1,
5242                  we would reject both of them.  */
5243               if (force_group)
5244                 nr = CLASS_MAX_NREGS (reload_reg_class[r], reload_mode[r]);
5245               /* If we need only one reg, we have already won.  */
5246               if (nr == 1)
5247                 {
5248                   /* But reject a single reg if we demand a group.  */
5249                   if (force_group)
5250                     continue;
5251                   break;
5252                 }
5253               /* Otherwise check that as many consecutive regs as we need
5254                  are available here.
5255                  Also, don't use for a group registers that are
5256                  needed for nongroups.  */
5257               if (! TEST_HARD_REG_BIT (counted_for_nongroups, spill_regs[i]))
5258                 while (nr > 1)
5259                   {
5260                     regno = spill_regs[i] + nr - 1;
5261                     if (!(TEST_HARD_REG_BIT (reg_class_contents[class], regno)
5262                           && spill_reg_order[regno] >= 0
5263                           && reload_reg_free_p (regno, reload_opnum[r],
5264                                                 reload_when_needed[r])
5265                           && ! TEST_HARD_REG_BIT (counted_for_nongroups,
5266                                                   regno)))
5267                       break;
5268                     nr--;
5269                   }
5270               if (nr == 1)
5271                 break;
5272             }
5273         }
5274
5275       /* If we found something on pass 1, omit pass 2.  */
5276       if (count < n_spills)
5277         break;
5278     }
5279
5280   /* We should have found a spill register by now.  */
5281   if (count == n_spills)
5282     {
5283       if (noerror)
5284         return 0;
5285       goto failure;
5286     }
5287
5288   /* I is the index in SPILL_REG_RTX of the reload register we are to
5289      allocate.  Get an rtx for it and find its register number.  */
5290
5291   new = spill_reg_rtx[i];
5292
5293   if (new == 0 || GET_MODE (new) != reload_mode[r])
5294     spill_reg_rtx[i] = new
5295       = gen_rtx_REG (reload_mode[r], spill_regs[i]);
5296             
5297   regno = true_regnum (new);
5298
5299   /* Detect when the reload reg can't hold the reload mode.
5300      This used to be one `if', but Sequent compiler can't handle that.  */
5301   if (HARD_REGNO_MODE_OK (regno, reload_mode[r]))
5302     {
5303       enum machine_mode test_mode = VOIDmode;
5304       if (reload_in[r])
5305         test_mode = GET_MODE (reload_in[r]);
5306       /* If reload_in[r] has VOIDmode, it means we will load it
5307          in whatever mode the reload reg has: to wit, reload_mode[r].
5308          We have already tested that for validity.  */
5309       /* Aside from that, we need to test that the expressions
5310          to reload from or into have modes which are valid for this
5311          reload register.  Otherwise the reload insns would be invalid.  */
5312       if (! (reload_in[r] != 0 && test_mode != VOIDmode
5313              && ! HARD_REGNO_MODE_OK (regno, test_mode)))
5314         if (! (reload_out[r] != 0
5315                && ! HARD_REGNO_MODE_OK (regno, GET_MODE (reload_out[r]))))
5316           {
5317             /* The reg is OK.  */
5318             last_spill_reg = i;
5319
5320             /* Mark as in use for this insn the reload regs we use
5321                for this.  */
5322             mark_reload_reg_in_use (spill_regs[i], reload_opnum[r],
5323                                     reload_when_needed[r], reload_mode[r]);
5324
5325             reload_reg_rtx[r] = new;
5326             reload_spill_index[r] = spill_regs[i];
5327             return 1;
5328           }
5329     }
5330
5331   /* The reg is not OK.  */
5332   if (noerror)
5333     return 0;
5334
5335  failure:
5336   if (asm_noperands (PATTERN (insn)) < 0)
5337     /* It's the compiler's fault.  */
5338     fatal_insn ("Could not find a spill register", insn);
5339
5340   /* It's the user's fault; the operand's mode and constraint
5341      don't match.  Disable this reload so we don't crash in final.  */
5342   error_for_asm (insn,
5343                  "`asm' operand constraint incompatible with operand size");
5344   reload_in[r] = 0;
5345   reload_out[r] = 0;
5346   reload_reg_rtx[r] = 0;
5347   reload_optional[r] = 1;
5348   reload_secondary_p[r] = 1;
5349
5350   return 1;
5351 }
5352 \f
5353 /* Assign hard reg targets for the pseudo-registers we must reload
5354    into hard regs for this insn.
5355    Also output the instructions to copy them in and out of the hard regs.
5356
5357    For machines with register classes, we are responsible for
5358    finding a reload reg in the proper class.  */
5359
5360 static void
5361 choose_reload_regs (insn, avoid_return_reg)
5362      rtx insn;
5363      rtx avoid_return_reg;
5364 {
5365   register int i, j;
5366   int max_group_size = 1;
5367   enum reg_class group_class = NO_REGS;
5368   int inheritance;
5369
5370   rtx save_reload_reg_rtx[MAX_RELOADS];
5371   char save_reload_inherited[MAX_RELOADS];
5372   rtx save_reload_inheritance_insn[MAX_RELOADS];
5373   rtx save_reload_override_in[MAX_RELOADS];
5374   int save_reload_spill_index[MAX_RELOADS];
5375   HARD_REG_SET save_reload_reg_used;
5376   HARD_REG_SET save_reload_reg_used_in_input_addr[MAX_RECOG_OPERANDS];
5377   HARD_REG_SET save_reload_reg_used_in_inpaddr_addr[MAX_RECOG_OPERANDS];
5378   HARD_REG_SET save_reload_reg_used_in_output_addr[MAX_RECOG_OPERANDS];
5379   HARD_REG_SET save_reload_reg_used_in_outaddr_addr[MAX_RECOG_OPERANDS];
5380   HARD_REG_SET save_reload_reg_used_in_input[MAX_RECOG_OPERANDS];
5381   HARD_REG_SET save_reload_reg_used_in_output[MAX_RECOG_OPERANDS];
5382   HARD_REG_SET save_reload_reg_used_in_op_addr;
5383   HARD_REG_SET save_reload_reg_used_in_op_addr_reload;
5384   HARD_REG_SET save_reload_reg_used_in_insn;
5385   HARD_REG_SET save_reload_reg_used_in_other_addr;
5386   HARD_REG_SET save_reload_reg_used_at_all;
5387
5388   bzero (reload_inherited, MAX_RELOADS);
5389   bzero ((char *) reload_inheritance_insn, MAX_RELOADS * sizeof (rtx));
5390   bzero ((char *) reload_override_in, MAX_RELOADS * sizeof (rtx));
5391
5392   CLEAR_HARD_REG_SET (reload_reg_used);
5393   CLEAR_HARD_REG_SET (reload_reg_used_at_all);
5394   CLEAR_HARD_REG_SET (reload_reg_used_in_op_addr);
5395   CLEAR_HARD_REG_SET (reload_reg_used_in_op_addr_reload);
5396   CLEAR_HARD_REG_SET (reload_reg_used_in_insn);
5397   CLEAR_HARD_REG_SET (reload_reg_used_in_other_addr);
5398
5399   for (i = 0; i < reload_n_operands; i++)
5400     {
5401       CLEAR_HARD_REG_SET (reload_reg_used_in_output[i]);
5402       CLEAR_HARD_REG_SET (reload_reg_used_in_input[i]);
5403       CLEAR_HARD_REG_SET (reload_reg_used_in_input_addr[i]);
5404       CLEAR_HARD_REG_SET (reload_reg_used_in_inpaddr_addr[i]);
5405       CLEAR_HARD_REG_SET (reload_reg_used_in_output_addr[i]);
5406       CLEAR_HARD_REG_SET (reload_reg_used_in_outaddr_addr[i]);
5407     }
5408
5409   /* Don't bother with avoiding the return reg
5410      if we have no mandatory reload that could use it.  */
5411   if (SMALL_REGISTER_CLASSES && avoid_return_reg)
5412     {
5413       int do_avoid = 0;
5414       int regno = REGNO (avoid_return_reg);
5415       int nregs
5416         = HARD_REGNO_NREGS (regno, GET_MODE (avoid_return_reg));
5417       int r;
5418
5419       for (r = regno; r < regno + nregs; r++)
5420         if (spill_reg_order[r] >= 0)
5421           for (j = 0; j < n_reloads; j++)
5422             if (!reload_optional[j] && reload_reg_rtx[j] == 0
5423                 && (reload_in[j] != 0 || reload_out[j] != 0
5424                     || reload_secondary_p[j])
5425                 &&
5426                 TEST_HARD_REG_BIT (reg_class_contents[(int) reload_reg_class[j]], r))
5427               do_avoid = 1;
5428       if (!do_avoid)
5429         avoid_return_reg = 0;
5430     }
5431
5432 #if 0  /* Not needed, now that we can always retry without inheritance.  */
5433   /* See if we have more mandatory reloads than spill regs.
5434      If so, then we cannot risk optimizations that could prevent
5435      reloads from sharing one spill register.
5436
5437      Since we will try finding a better register than reload_reg_rtx
5438      unless it is equal to reload_in or reload_out, count such reloads.  */
5439
5440   {
5441     int tem = SMALL_REGISTER_CLASSES? (avoid_return_reg != 0): 0;
5442     for (j = 0; j < n_reloads; j++)
5443       if (! reload_optional[j]
5444           && (reload_in[j] != 0 || reload_out[j] != 0 || reload_secondary_p[j])
5445           && (reload_reg_rtx[j] == 0
5446               || (! rtx_equal_p (reload_reg_rtx[j], reload_in[j])
5447                   && ! rtx_equal_p (reload_reg_rtx[j], reload_out[j]))))
5448         tem++;
5449     if (tem > n_spills)
5450       must_reuse = 1;
5451   }
5452 #endif
5453
5454   /* Don't use the subroutine call return reg for a reload
5455      if we are supposed to avoid it.  */
5456   if (SMALL_REGISTER_CLASSES && avoid_return_reg)
5457     {
5458       int regno = REGNO (avoid_return_reg);
5459       int nregs
5460         = HARD_REGNO_NREGS (regno, GET_MODE (avoid_return_reg));
5461       int r;
5462
5463       for (r = regno; r < regno + nregs; r++)
5464         if (spill_reg_order[r] >= 0)
5465           SET_HARD_REG_BIT (reload_reg_used, r);
5466     }
5467
5468   /* In order to be certain of getting the registers we need,
5469      we must sort the reloads into order of increasing register class.
5470      Then our grabbing of reload registers will parallel the process
5471      that provided the reload registers.
5472
5473      Also note whether any of the reloads wants a consecutive group of regs.
5474      If so, record the maximum size of the group desired and what
5475      register class contains all the groups needed by this insn.  */
5476
5477   for (j = 0; j < n_reloads; j++)
5478     {
5479       reload_order[j] = j;
5480       reload_spill_index[j] = -1;
5481
5482       reload_mode[j]
5483         = (reload_inmode[j] == VOIDmode
5484            || (GET_MODE_SIZE (reload_outmode[j])
5485                > GET_MODE_SIZE (reload_inmode[j])))
5486           ? reload_outmode[j] : reload_inmode[j];
5487
5488       reload_nregs[j] = CLASS_MAX_NREGS (reload_reg_class[j], reload_mode[j]);
5489
5490       if (reload_nregs[j] > 1)
5491         {
5492           max_group_size = MAX (reload_nregs[j], max_group_size);
5493           group_class = reg_class_superunion[(int)reload_reg_class[j]][(int)group_class];
5494         }
5495
5496       /* If we have already decided to use a certain register,
5497          don't use it in another way.  */
5498       if (reload_reg_rtx[j])
5499         mark_reload_reg_in_use (REGNO (reload_reg_rtx[j]), reload_opnum[j],
5500                                 reload_when_needed[j], reload_mode[j]);
5501     }
5502
5503   if (n_reloads > 1)
5504     qsort (reload_order, n_reloads, sizeof (short), reload_reg_class_lower);
5505
5506   bcopy ((char *) reload_reg_rtx, (char *) save_reload_reg_rtx,
5507          sizeof reload_reg_rtx);
5508   bcopy (reload_inherited, save_reload_inherited, sizeof reload_inherited);
5509   bcopy ((char *) reload_inheritance_insn,
5510          (char *) save_reload_inheritance_insn,
5511          sizeof reload_inheritance_insn);
5512   bcopy ((char *) reload_override_in, (char *) save_reload_override_in,
5513          sizeof reload_override_in);
5514   bcopy ((char *) reload_spill_index, (char *) save_reload_spill_index,
5515          sizeof reload_spill_index);
5516   COPY_HARD_REG_SET (save_reload_reg_used, reload_reg_used);
5517   COPY_HARD_REG_SET (save_reload_reg_used_at_all, reload_reg_used_at_all);
5518   COPY_HARD_REG_SET (save_reload_reg_used_in_op_addr,
5519                      reload_reg_used_in_op_addr);
5520
5521   COPY_HARD_REG_SET (save_reload_reg_used_in_op_addr_reload,
5522                      reload_reg_used_in_op_addr_reload);
5523
5524   COPY_HARD_REG_SET (save_reload_reg_used_in_insn,
5525                      reload_reg_used_in_insn);
5526   COPY_HARD_REG_SET (save_reload_reg_used_in_other_addr,
5527                      reload_reg_used_in_other_addr);
5528
5529   for (i = 0; i < reload_n_operands; i++)
5530     {
5531       COPY_HARD_REG_SET (save_reload_reg_used_in_output[i],
5532                          reload_reg_used_in_output[i]);
5533       COPY_HARD_REG_SET (save_reload_reg_used_in_input[i],
5534                          reload_reg_used_in_input[i]);
5535       COPY_HARD_REG_SET (save_reload_reg_used_in_input_addr[i],
5536                          reload_reg_used_in_input_addr[i]);
5537       COPY_HARD_REG_SET (save_reload_reg_used_in_inpaddr_addr[i],
5538                          reload_reg_used_in_inpaddr_addr[i]);
5539       COPY_HARD_REG_SET (save_reload_reg_used_in_output_addr[i],
5540                          reload_reg_used_in_output_addr[i]);
5541       COPY_HARD_REG_SET (save_reload_reg_used_in_outaddr_addr[i],
5542                          reload_reg_used_in_outaddr_addr[i]);
5543     }
5544
5545   /* If -O, try first with inheritance, then turning it off.
5546      If not -O, don't do inheritance.
5547      Using inheritance when not optimizing leads to paradoxes
5548      with fp on the 68k: fp numbers (not NaNs) fail to be equal to themselves
5549      because one side of the comparison might be inherited.  */
5550
5551   for (inheritance = optimize > 0; inheritance >= 0; inheritance--)
5552     {
5553       /* Process the reloads in order of preference just found.
5554          Beyond this point, subregs can be found in reload_reg_rtx.
5555
5556          This used to look for an existing reloaded home for all
5557          of the reloads, and only then perform any new reloads.
5558          But that could lose if the reloads were done out of reg-class order
5559          because a later reload with a looser constraint might have an old
5560          home in a register needed by an earlier reload with a tighter constraint.
5561
5562          To solve this, we make two passes over the reloads, in the order
5563          described above.  In the first pass we try to inherit a reload
5564          from a previous insn.  If there is a later reload that needs a
5565          class that is a proper subset of the class being processed, we must
5566          also allocate a spill register during the first pass.
5567
5568          Then make a second pass over the reloads to allocate any reloads
5569          that haven't been given registers yet.  */
5570
5571       CLEAR_HARD_REG_SET (reload_reg_used_for_inherit);
5572
5573       for (j = 0; j < n_reloads; j++)
5574         {
5575           register int r = reload_order[j];
5576
5577           /* Ignore reloads that got marked inoperative.  */
5578           if (reload_out[r] == 0 && reload_in[r] == 0
5579               && ! reload_secondary_p[r])
5580             continue;
5581
5582           /* If find_reloads chose a to use reload_in or reload_out as a reload
5583              register, we don't need to chose one.  Otherwise, try even if it
5584              found one since we might save an insn if we find the value lying
5585              around.  */
5586           if (reload_in[r] != 0 && reload_reg_rtx[r] != 0
5587               && (rtx_equal_p (reload_in[r], reload_reg_rtx[r])
5588                   || rtx_equal_p (reload_out[r], reload_reg_rtx[r])))
5589             continue;
5590
5591 #if 0 /* No longer needed for correct operation.
5592          It might give better code, or might not; worth an experiment?  */
5593           /* If this is an optional reload, we can't inherit from earlier insns
5594              until we are sure that any non-optional reloads have been allocated.
5595              The following code takes advantage of the fact that optional reloads
5596              are at the end of reload_order.  */
5597           if (reload_optional[r] != 0)
5598             for (i = 0; i < j; i++)
5599               if ((reload_out[reload_order[i]] != 0
5600                    || reload_in[reload_order[i]] != 0
5601                    || reload_secondary_p[reload_order[i]])
5602                   && ! reload_optional[reload_order[i]]
5603                   && reload_reg_rtx[reload_order[i]] == 0)
5604                 allocate_reload_reg (reload_order[i], insn, 0, inheritance);
5605 #endif
5606
5607           /* First see if this pseudo is already available as reloaded
5608              for a previous insn.  We cannot try to inherit for reloads
5609              that are smaller than the maximum number of registers needed
5610              for groups unless the register we would allocate cannot be used
5611              for the groups.
5612
5613              We could check here to see if this is a secondary reload for
5614              an object that is already in a register of the desired class.
5615              This would avoid the need for the secondary reload register.
5616              But this is complex because we can't easily determine what
5617              objects might want to be loaded via this reload.  So let a
5618              register be allocated here.  In `emit_reload_insns' we suppress
5619              one of the loads in the case described above.  */
5620
5621           if (inheritance)
5622             {
5623               register int regno = -1;
5624               enum machine_mode mode;
5625
5626               if (reload_in[r] == 0)
5627                 ;
5628               else if (GET_CODE (reload_in[r]) == REG)
5629                 {
5630                   regno = REGNO (reload_in[r]);
5631                   mode = GET_MODE (reload_in[r]);
5632                 }
5633               else if (GET_CODE (reload_in_reg[r]) == REG)
5634                 {
5635                   regno = REGNO (reload_in_reg[r]);
5636                   mode = GET_MODE (reload_in_reg[r]);
5637                 }
5638               else if (GET_CODE (reload_in[r]) == MEM)
5639                 {
5640                   rtx prev = prev_nonnote_insn (insn), note;
5641
5642                   if (prev && GET_CODE (prev) == INSN
5643                       && GET_CODE (PATTERN (prev)) == USE
5644                       && GET_CODE (XEXP (PATTERN (prev), 0)) == REG
5645                       && (REGNO (XEXP (PATTERN (prev), 0))
5646                           >= FIRST_PSEUDO_REGISTER)
5647                       && (note = find_reg_note (prev, REG_EQUAL, NULL_RTX))
5648                       && GET_CODE (XEXP (note, 0)) == MEM)
5649                     {
5650                       rtx addr = XEXP (XEXP (note, 0), 0);
5651                       int size_diff
5652                         = (GET_MODE_SIZE (GET_MODE (addr))
5653                            - GET_MODE_SIZE (GET_MODE (reload_in[r])));
5654                       if (size_diff >= 0
5655                           && rtx_equal_p ((BYTES_BIG_ENDIAN
5656                                            ? plus_constant (addr, size_diff)
5657                                            : addr),
5658                                           XEXP (reload_in[r], 0)))
5659                         {
5660                           regno = REGNO (XEXP (PATTERN (prev), 0));
5661                           mode = GET_MODE (reload_in[r]);
5662                         }
5663                     }
5664                 }
5665 #if 0
5666               /* This won't work, since REGNO can be a pseudo reg number.
5667                  Also, it takes much more hair to keep track of all the things
5668                  that can invalidate an inherited reload of part of a pseudoreg.  */
5669               else if (GET_CODE (reload_in[r]) == SUBREG
5670                        && GET_CODE (SUBREG_REG (reload_in[r])) == REG)
5671                 regno = REGNO (SUBREG_REG (reload_in[r])) + SUBREG_WORD (reload_in[r]);
5672 #endif
5673
5674               if (regno >= 0 && reg_last_reload_reg[regno] != 0)
5675                 {
5676                   i = REGNO (reg_last_reload_reg[regno]);
5677
5678                   if (reg_reloaded_contents[i] == regno
5679                       && TEST_HARD_REG_BIT (reg_reloaded_valid, i)
5680                       && (GET_MODE_SIZE (GET_MODE (reg_last_reload_reg[regno]))
5681                           >= GET_MODE_SIZE (mode))
5682                       && HARD_REGNO_MODE_OK (i, reload_mode[r])
5683                       && TEST_HARD_REG_BIT (reg_class_contents[(int) reload_reg_class[r]],
5684                                             i)
5685                       && (reload_nregs[r] == max_group_size
5686                           || ! TEST_HARD_REG_BIT (reg_class_contents[(int) group_class],
5687                                                   i))
5688                       && ((reload_reg_free_p (i, reload_opnum[r],
5689                                               reload_when_needed[r])
5690                            && reload_reg_free_before_p (i, reload_opnum[r],
5691                                                         reload_when_needed[r]))
5692                           || reload_reg_free_for_value_p (i, reload_opnum[r],
5693                                                           reload_when_needed[r],
5694                                                           reload_in[r],
5695                                                           reload_out[r], r)))
5696                     {
5697                       /* If a group is needed, verify that all the subsequent
5698                          registers still have their values intact.  */
5699                       int nr
5700                         = HARD_REGNO_NREGS (i, reload_mode[r]);
5701                       int k;
5702
5703                       for (k = 1; k < nr; k++)
5704                         if (reg_reloaded_contents[i + k] != regno
5705                             || ! TEST_HARD_REG_BIT (reg_reloaded_valid, i + k))
5706                           break;
5707
5708                       if (k == nr)
5709                         {
5710                           int i1;
5711
5712                           /* We found a register that contains the
5713                              value we need.  If this register is the
5714                              same as an `earlyclobber' operand of the
5715                              current insn, just mark it as a place to
5716                              reload from since we can't use it as the
5717                              reload register itself.  */
5718
5719                           for (i1 = 0; i1 < n_earlyclobbers; i1++)
5720                             if (reg_overlap_mentioned_for_reload_p
5721                                 (reg_last_reload_reg[regno],
5722                                  reload_earlyclobbers[i1]))
5723                               break;
5724
5725                           if (i1 != n_earlyclobbers
5726                               /* Don't use it if we'd clobber a pseudo reg.  */
5727                               || (spill_reg_order[i] < 0
5728                                   && reload_out[r]
5729                                   && ! TEST_HARD_REG_BIT (reg_reloaded_dead, i))
5730                               /* Don't really use the inherited spill reg
5731                                  if we need it wider than we've got it.  */
5732                               || (GET_MODE_SIZE (reload_mode[r])
5733                                   > GET_MODE_SIZE (mode)))
5734                             reload_override_in[r] = reg_last_reload_reg[regno];
5735                           else
5736                             {
5737                               int k;
5738                               /* We can use this as a reload reg.  */
5739                               /* Mark the register as in use for this part of
5740                                  the insn.  */
5741                               mark_reload_reg_in_use (i,
5742                                                       reload_opnum[r],
5743                                                       reload_when_needed[r],
5744                                                       reload_mode[r]);
5745                               reload_reg_rtx[r] = reg_last_reload_reg[regno];
5746                               reload_inherited[r] = 1;
5747                               reload_inheritance_insn[r]
5748                                 = reg_reloaded_insn[i];
5749                               reload_spill_index[r] = i;
5750                               for (k = 0; k < nr; k++)
5751                                 SET_HARD_REG_BIT (reload_reg_used_for_inherit,
5752                                                   i + k);
5753                             }
5754                         }
5755                     }
5756                 }
5757             }
5758
5759           /* Here's another way to see if the value is already lying around.  */
5760           if (inheritance
5761               && reload_in[r] != 0
5762               && ! reload_inherited[r]
5763               && reload_out[r] == 0
5764               && (CONSTANT_P (reload_in[r])
5765                   || GET_CODE (reload_in[r]) == PLUS
5766                   || GET_CODE (reload_in[r]) == REG
5767                   || GET_CODE (reload_in[r]) == MEM)
5768               && (reload_nregs[r] == max_group_size
5769                   || ! reg_classes_intersect_p (reload_reg_class[r], group_class)))
5770             {
5771               register rtx equiv
5772                 = find_equiv_reg (reload_in[r], insn, reload_reg_class[r],
5773                                   -1, NULL_PTR, 0, reload_mode[r]);
5774               int regno;
5775
5776               if (equiv != 0)
5777                 {
5778                   if (GET_CODE (equiv) == REG)
5779                     regno = REGNO (equiv);
5780                   else if (GET_CODE (equiv) == SUBREG)
5781                     {
5782                       /* This must be a SUBREG of a hard register.
5783                          Make a new REG since this might be used in an
5784                          address and not all machines support SUBREGs
5785                          there.  */
5786                       regno = REGNO (SUBREG_REG (equiv)) + SUBREG_WORD (equiv);
5787                       equiv = gen_rtx_REG (reload_mode[r], regno);
5788                     }
5789                   else
5790                     abort ();
5791                 }
5792
5793               /* If we found a spill reg, reject it unless it is free
5794                  and of the desired class.  */
5795               if (equiv != 0
5796                   && ((spill_reg_order[regno] >= 0
5797                        && ! (reload_reg_free_before_p (regno, reload_opnum[r],
5798                                                        reload_when_needed[r])
5799                              || reload_reg_free_for_value_p (regno,
5800                                                              reload_opnum[r],
5801                                                              reload_when_needed[r],
5802                                                              reload_in[r],
5803                                                              reload_out[r], r)))
5804                       || ! TEST_HARD_REG_BIT (reg_class_contents[(int) reload_reg_class[r]],
5805                                               regno)))
5806                 equiv = 0;
5807
5808               if (equiv != 0 && TEST_HARD_REG_BIT (reload_reg_used_at_all, regno))
5809                 equiv = 0;
5810
5811               if (equiv != 0 && ! HARD_REGNO_MODE_OK (regno, reload_mode[r]))
5812                 equiv = 0;
5813
5814               /* We found a register that contains the value we need.
5815                  If this register is the same as an `earlyclobber' operand
5816                  of the current insn, just mark it as a place to reload from
5817                  since we can't use it as the reload register itself.  */
5818
5819               if (equiv != 0)
5820                 for (i = 0; i < n_earlyclobbers; i++)
5821                   if (reg_overlap_mentioned_for_reload_p (equiv,
5822                                                           reload_earlyclobbers[i]))
5823                     {
5824                       reload_override_in[r] = equiv;
5825                       equiv = 0;
5826                       break;
5827                     }
5828
5829               /* JRV: If the equiv register we have found is
5830                  explicitly clobbered in the current insn, mark but
5831                  don't use, as above.  */
5832
5833               if (equiv != 0 && regno_clobbered_p (regno, insn))
5834                 {
5835                   reload_override_in[r] = equiv;
5836                   equiv = 0;
5837                 }
5838
5839               /* If we found an equivalent reg, say no code need be generated
5840                  to load it, and use it as our reload reg.  */
5841               if (equiv != 0 && regno != HARD_FRAME_POINTER_REGNUM)
5842                 {
5843                   int nr = HARD_REGNO_NREGS (regno, reload_mode[r]);
5844                   int k;
5845                   reload_reg_rtx[r] = equiv;
5846                   reload_inherited[r] = 1;
5847
5848                   /* If any of the hard registers in EQUIV are spill
5849                      registers, mark them as in use for this insn.  */
5850                   for (k = 0; k < nr; k++)
5851                     {
5852                       i = spill_reg_order[regno + k];
5853                       if (i >= 0)
5854                         {
5855                           mark_reload_reg_in_use (regno, reload_opnum[r],
5856                                                   reload_when_needed[r],
5857                                                   reload_mode[r]);
5858                           SET_HARD_REG_BIT (reload_reg_used_for_inherit,
5859                                             regno + k);
5860                         }
5861                     }
5862                 }
5863             }
5864
5865           /* If we found a register to use already, or if this is an optional
5866              reload, we are done.  */
5867           if (reload_reg_rtx[r] != 0 || reload_optional[r] != 0)
5868             continue;
5869
5870 #if 0 /* No longer needed for correct operation.  Might or might not
5871          give better code on the average.  Want to experiment?  */
5872
5873           /* See if there is a later reload that has a class different from our
5874              class that intersects our class or that requires less register
5875              than our reload.  If so, we must allocate a register to this
5876              reload now, since that reload might inherit a previous reload
5877              and take the only available register in our class.  Don't do this
5878              for optional reloads since they will force all previous reloads
5879              to be allocated.  Also don't do this for reloads that have been
5880              turned off.  */
5881
5882           for (i = j + 1; i < n_reloads; i++)
5883             {
5884               int s = reload_order[i];
5885
5886               if ((reload_in[s] == 0 && reload_out[s] == 0
5887                    && ! reload_secondary_p[s])
5888                   || reload_optional[s])
5889                 continue;
5890
5891               if ((reload_reg_class[s] != reload_reg_class[r]
5892                    && reg_classes_intersect_p (reload_reg_class[r],
5893                                                reload_reg_class[s]))
5894                   || reload_nregs[s] < reload_nregs[r])
5895               break;
5896             }
5897
5898           if (i == n_reloads)
5899             continue;
5900
5901           allocate_reload_reg (r, insn, j == n_reloads - 1, inheritance);
5902 #endif
5903         }
5904
5905       /* Now allocate reload registers for anything non-optional that
5906          didn't get one yet.  */
5907       for (j = 0; j < n_reloads; j++)
5908         {
5909           register int r = reload_order[j];
5910
5911           /* Ignore reloads that got marked inoperative.  */
5912           if (reload_out[r] == 0 && reload_in[r] == 0 && ! reload_secondary_p[r])
5913             continue;
5914
5915           /* Skip reloads that already have a register allocated or are
5916              optional.  */
5917           if (reload_reg_rtx[r] != 0 || reload_optional[r])
5918             continue;
5919
5920           if (! allocate_reload_reg (r, insn, j == n_reloads - 1, inheritance))
5921             break;
5922         }
5923
5924       /* If that loop got all the way, we have won.  */
5925       if (j == n_reloads)
5926         break;
5927
5928     fail:
5929       /* Loop around and try without any inheritance.  */
5930       /* First undo everything done by the failed attempt
5931          to allocate with inheritance.  */
5932       bcopy ((char *) save_reload_reg_rtx, (char *) reload_reg_rtx,
5933              sizeof reload_reg_rtx);
5934       bcopy ((char *) save_reload_inherited, (char *) reload_inherited,
5935              sizeof reload_inherited);
5936       bcopy ((char *) save_reload_inheritance_insn,
5937              (char *) reload_inheritance_insn,
5938              sizeof reload_inheritance_insn);
5939       bcopy ((char *) save_reload_override_in, (char *) reload_override_in,
5940              sizeof reload_override_in);
5941       bcopy ((char *) save_reload_spill_index, (char *) reload_spill_index,
5942              sizeof reload_spill_index);
5943       COPY_HARD_REG_SET (reload_reg_used, save_reload_reg_used);
5944       COPY_HARD_REG_SET (reload_reg_used_at_all, save_reload_reg_used_at_all);
5945       COPY_HARD_REG_SET (reload_reg_used_in_op_addr,
5946                          save_reload_reg_used_in_op_addr);
5947       COPY_HARD_REG_SET (reload_reg_used_in_op_addr_reload,
5948                          save_reload_reg_used_in_op_addr_reload);
5949       COPY_HARD_REG_SET (reload_reg_used_in_insn,
5950                          save_reload_reg_used_in_insn);
5951       COPY_HARD_REG_SET (reload_reg_used_in_other_addr,
5952                          save_reload_reg_used_in_other_addr);
5953
5954       for (i = 0; i < reload_n_operands; i++)
5955         {
5956           COPY_HARD_REG_SET (reload_reg_used_in_input[i],
5957                              save_reload_reg_used_in_input[i]);
5958           COPY_HARD_REG_SET (reload_reg_used_in_output[i],
5959                              save_reload_reg_used_in_output[i]);
5960           COPY_HARD_REG_SET (reload_reg_used_in_input_addr[i],
5961                              save_reload_reg_used_in_input_addr[i]);
5962           COPY_HARD_REG_SET (reload_reg_used_in_inpaddr_addr[i],
5963                              save_reload_reg_used_in_inpaddr_addr[i]);
5964           COPY_HARD_REG_SET (reload_reg_used_in_output_addr[i],
5965                              save_reload_reg_used_in_output_addr[i]);
5966           COPY_HARD_REG_SET (reload_reg_used_in_outaddr_addr[i],
5967                              save_reload_reg_used_in_outaddr_addr[i]);
5968         }
5969     }
5970
5971   /* If we thought we could inherit a reload, because it seemed that
5972      nothing else wanted the same reload register earlier in the insn,
5973      verify that assumption, now that all reloads have been assigned.  */
5974
5975   for (j = 0; j < n_reloads; j++)
5976     {
5977       register int r = reload_order[j];
5978
5979       if (reload_inherited[r] && reload_reg_rtx[r] != 0
5980           && ! (reload_reg_free_before_p (true_regnum (reload_reg_rtx[r]),
5981                                           reload_opnum[r],
5982                                           reload_when_needed[r])
5983                 || reload_reg_free_for_value_p (true_regnum (reload_reg_rtx[r]),
5984                                                 reload_opnum[r],
5985                                                 reload_when_needed[r],
5986                                                 reload_in[r],
5987                                                 reload_out[r], r)))
5988         reload_inherited[r] = 0;
5989       /* If we can inherit a RELOAD_FOR_INPUT, then we do not need its related
5990          RELOAD_FOR_INPUT_ADDRESS / RELOAD_FOR_INPADDR_ADDRESS reloads.
5991          ??? This could be extended to other reload types, but these are
5992          more tricky to handle:
5993          RELOAD_FOR_OTHER_ADDRESS reloads might have been merged, so we
5994          can't eliminate them without a check that *all* references are
5995          now unused due to inheritance.
5996          While RELOAD_FOR_INPADDR_ADDRESS and RELOAD_FOR_OUTADDR_ADDRESS are
5997          not merged, we can't be sure that we have eliminated the use of
5998          that particular reload if we have seen just one
5999          RELOAD_FOR_INPUT_ADDRESS / RELOAD_FOR_OUTPUT_ADDRESS being inherited,
6000          since there might be multiple of the latter two reloads for a single
6001          operand.
6002          RELOAD_FOR_OPADDR_ADDR reloads for different operands are not
6003          merged, but might share the same register by courtesy of
6004          reload_reg_free_for_value_p.  reload_reg_used_in_op_addr_reload
6005          does not differentiate by opnum, thus calling clear_reload_reg_in_use
6006          for one of these reloads would mark the register as free even though
6007          another RELOAD_FOR_OPADDR_ADDR reload might still use it.  */
6008       else if (reload_inherited[r] && reload_when_needed[r] == RELOAD_FOR_INPUT)
6009         {
6010           for (i = 0; i < n_reloads; i++)
6011             {
6012               if ((reload_when_needed[i] == RELOAD_FOR_INPUT_ADDRESS
6013                    || reload_when_needed[i] == RELOAD_FOR_INPADDR_ADDRESS)
6014                   && reload_opnum[i] == reload_opnum[r]
6015                   && reload_in[i] && reload_reg_rtx[i])
6016                 {
6017                   int regno = true_regnum (reload_reg_rtx[i]);
6018
6019                   reload_in[i] = 0;
6020                   if (spill_reg_order[regno] >= 0)
6021                     clear_reload_reg_in_use (regno, reload_opnum[i],
6022                                              reload_when_needed[i],
6023                                              reload_mode[i]);
6024                   reload_reg_rtx[i] = 0;
6025                   reload_spill_index[i] = -1;
6026                   remove_replacements (i);
6027                 }
6028             }
6029         }
6030
6031       /* If we found a better place to reload from,
6032          validate it in the same fashion, if it is a reload reg.  */
6033       if (reload_override_in[r]
6034           && (GET_CODE (reload_override_in[r]) == REG
6035               || GET_CODE (reload_override_in[r]) == SUBREG))
6036         {
6037           int regno = true_regnum (reload_override_in[r]);
6038           if (spill_reg_order[regno] >= 0
6039               && ! reload_reg_free_before_p (regno, reload_opnum[r],
6040                                              reload_when_needed[r]))
6041             reload_override_in[r] = 0;
6042         }
6043     }
6044
6045   /* Now that reload_override_in is known valid,
6046      actually override reload_in.  */
6047   for (j = 0; j < n_reloads; j++)
6048     if (reload_override_in[j])
6049       reload_in[j] = reload_override_in[j];
6050
6051   /* If this reload won't be done because it has been cancelled or is
6052      optional and not inherited, clear reload_reg_rtx so other
6053      routines (such as subst_reloads) don't get confused.  */
6054   for (j = 0; j < n_reloads; j++)
6055     if (reload_reg_rtx[j] != 0
6056         && ((reload_optional[j] && ! reload_inherited[j])
6057             || (reload_in[j] == 0 && reload_out[j] == 0
6058                 && ! reload_secondary_p[j])))
6059       {
6060         int regno = true_regnum (reload_reg_rtx[j]);
6061
6062         if (spill_reg_order[regno] >= 0)
6063           clear_reload_reg_in_use (regno, reload_opnum[j],
6064                                    reload_when_needed[j], reload_mode[j]);
6065         reload_reg_rtx[j] = 0;
6066       }
6067
6068   /* Record which pseudos and which spill regs have output reloads.  */
6069   for (j = 0; j < n_reloads; j++)
6070     {
6071       register int r = reload_order[j];
6072
6073       i = reload_spill_index[r];
6074
6075       /* I is nonneg if this reload uses a register.
6076          If reload_reg_rtx[r] is 0, this is an optional reload
6077          that we opted to ignore.  */
6078       if (reload_out[r] != 0 && GET_CODE (reload_out[r]) == REG
6079           && reload_reg_rtx[r] != 0)
6080         {
6081           register int nregno = REGNO (reload_out[r]);
6082           int nr = 1;
6083
6084           if (nregno < FIRST_PSEUDO_REGISTER)
6085             nr = HARD_REGNO_NREGS (nregno, reload_mode[r]);
6086
6087           while (--nr >= 0)
6088             reg_has_output_reload[nregno + nr] = 1;
6089
6090           if (i >= 0)
6091             {
6092               nr = HARD_REGNO_NREGS (i, reload_mode[r]);
6093               while (--nr >= 0)
6094                 SET_HARD_REG_BIT (reg_is_output_reload, i + nr);
6095             }
6096
6097           if (reload_when_needed[r] != RELOAD_OTHER
6098               && reload_when_needed[r] != RELOAD_FOR_OUTPUT
6099               && reload_when_needed[r] != RELOAD_FOR_INSN)
6100             abort ();
6101         }
6102     }
6103 }
6104 \f
6105 /* If SMALL_REGISTER_CLASSES is non-zero, we may not have merged two
6106    reloads of the same item for fear that we might not have enough reload
6107    registers. However, normally they will get the same reload register
6108    and hence actually need not be loaded twice.  
6109
6110    Here we check for the most common case of this phenomenon: when we have
6111    a number of reloads for the same object, each of which were allocated
6112    the same reload_reg_rtx, that reload_reg_rtx is not used for any other
6113    reload, and is not modified in the insn itself.  If we find such,
6114    merge all the reloads and set the resulting reload to RELOAD_OTHER.
6115    This will not increase the number of spill registers needed and will
6116    prevent redundant code.  */
6117
6118 static void
6119 merge_assigned_reloads (insn)
6120      rtx insn;
6121 {
6122   int i, j;
6123
6124   /* Scan all the reloads looking for ones that only load values and
6125      are not already RELOAD_OTHER and ones whose reload_reg_rtx are
6126      assigned and not modified by INSN.  */
6127
6128   for (i = 0; i < n_reloads; i++)
6129     {
6130       int conflicting_input = 0;
6131       int max_input_address_opnum = -1;
6132       int min_conflicting_input_opnum = MAX_RECOG_OPERANDS;
6133
6134       if (reload_in[i] == 0 || reload_when_needed[i] == RELOAD_OTHER
6135           || reload_out[i] != 0 || reload_reg_rtx[i] == 0
6136           || reg_set_p (reload_reg_rtx[i], insn))
6137         continue;
6138
6139       /* Look at all other reloads.  Ensure that the only use of this
6140          reload_reg_rtx is in a reload that just loads the same value
6141          as we do.  Note that any secondary reloads must be of the identical
6142          class since the values, modes, and result registers are the
6143          same, so we need not do anything with any secondary reloads.  */
6144
6145       for (j = 0; j < n_reloads; j++)
6146         {
6147           if (i == j || reload_reg_rtx[j] == 0
6148               || ! reg_overlap_mentioned_p (reload_reg_rtx[j],
6149                                             reload_reg_rtx[i]))
6150             continue;
6151
6152           if (reload_when_needed[j] == RELOAD_FOR_INPUT_ADDRESS
6153               && reload_opnum[j] > max_input_address_opnum)
6154             max_input_address_opnum = reload_opnum[j];
6155
6156           /* If the reload regs aren't exactly the same (e.g, different modes)
6157              or if the values are different, we can't merge this reload.
6158              But if it is an input reload, we might still merge
6159              RELOAD_FOR_INPUT_ADDRESS and RELOAD_FOR_OTHER_ADDRESS reloads.  */
6160
6161           if (! rtx_equal_p (reload_reg_rtx[i], reload_reg_rtx[j])
6162               || reload_out[j] != 0 || reload_in[j] == 0
6163               || ! rtx_equal_p (reload_in[i], reload_in[j]))
6164             {
6165               if (reload_when_needed[j] != RELOAD_FOR_INPUT
6166                   || ((reload_when_needed[i] != RELOAD_FOR_INPUT_ADDRESS
6167                        || reload_opnum[i] > reload_opnum[j])
6168                       && reload_when_needed[i] != RELOAD_FOR_OTHER_ADDRESS))
6169                 break;
6170               conflicting_input = 1;
6171               if (min_conflicting_input_opnum > reload_opnum[j])
6172                 min_conflicting_input_opnum = reload_opnum[j];
6173             }
6174         }
6175
6176       /* If all is OK, merge the reloads.  Only set this to RELOAD_OTHER if
6177          we, in fact, found any matching reloads.  */
6178
6179       if (j == n_reloads
6180           && max_input_address_opnum <= min_conflicting_input_opnum)
6181         {
6182           for (j = 0; j < n_reloads; j++)
6183             if (i != j && reload_reg_rtx[j] != 0
6184                 && rtx_equal_p (reload_reg_rtx[i], reload_reg_rtx[j])
6185                 && (! conflicting_input
6186                     || reload_when_needed[j] == RELOAD_FOR_INPUT_ADDRESS
6187                     || reload_when_needed[j] == RELOAD_FOR_OTHER_ADDRESS))
6188               {
6189                 reload_when_needed[i] = RELOAD_OTHER;
6190                 reload_in[j] = 0;
6191                 reload_spill_index[j] = -1;
6192                 transfer_replacements (i, j);
6193               }
6194
6195           /* If this is now RELOAD_OTHER, look for any reloads that load
6196              parts of this operand and set them to RELOAD_FOR_OTHER_ADDRESS
6197              if they were for inputs, RELOAD_OTHER for outputs.  Note that
6198              this test is equivalent to looking for reloads for this operand
6199              number.  */
6200
6201           if (reload_when_needed[i] == RELOAD_OTHER)
6202             for (j = 0; j < n_reloads; j++)
6203               if (reload_in[j] != 0
6204                   && reload_when_needed[i] != RELOAD_OTHER
6205                   && reg_overlap_mentioned_for_reload_p (reload_in[j],
6206                                                          reload_in[i]))
6207                 reload_when_needed[j]
6208                   = ((reload_when_needed[i] == RELOAD_FOR_INPUT_ADDRESS
6209                       || reload_when_needed[i] == RELOAD_FOR_INPADDR_ADDRESS)
6210                      ? RELOAD_FOR_OTHER_ADDRESS : RELOAD_OTHER);
6211         }
6212     }
6213 }           
6214
6215 \f
6216 /* Output insns to reload values in and out of the chosen reload regs.  */
6217
6218 static void
6219 emit_reload_insns (insn)
6220      rtx insn;
6221 {
6222   register int j;
6223   rtx input_reload_insns[MAX_RECOG_OPERANDS];
6224   rtx other_input_address_reload_insns = 0;
6225   rtx other_input_reload_insns = 0;
6226   rtx input_address_reload_insns[MAX_RECOG_OPERANDS];
6227   rtx inpaddr_address_reload_insns[MAX_RECOG_OPERANDS];
6228   rtx output_reload_insns[MAX_RECOG_OPERANDS];
6229   rtx output_address_reload_insns[MAX_RECOG_OPERANDS];
6230   rtx outaddr_address_reload_insns[MAX_RECOG_OPERANDS];
6231   rtx operand_reload_insns = 0;
6232   rtx other_operand_reload_insns = 0;
6233   rtx other_output_reload_insns[MAX_RECOG_OPERANDS];
6234   rtx following_insn = NEXT_INSN (insn);
6235   rtx before_insn = insn;
6236   int special;
6237   /* Values to be put in spill_reg_store are put here first.  */
6238   rtx new_spill_reg_store[FIRST_PSEUDO_REGISTER];
6239   HARD_REG_SET reg_reloaded_died;
6240
6241   CLEAR_HARD_REG_SET (reg_reloaded_died);
6242
6243   for (j = 0; j < reload_n_operands; j++)
6244     input_reload_insns[j] = input_address_reload_insns[j]
6245       = inpaddr_address_reload_insns[j]
6246       = output_reload_insns[j] = output_address_reload_insns[j]
6247       = outaddr_address_reload_insns[j]
6248       = other_output_reload_insns[j] = 0;
6249
6250   /* Now output the instructions to copy the data into and out of the
6251      reload registers.  Do these in the order that the reloads were reported,
6252      since reloads of base and index registers precede reloads of operands
6253      and the operands may need the base and index registers reloaded.  */
6254
6255   for (j = 0; j < n_reloads; j++)
6256     {
6257       register rtx old;
6258       rtx oldequiv_reg = 0;
6259       rtx this_reload_insn = 0;
6260       int expect_occurrences = 1;
6261
6262       if (reload_spill_index[j] >= 0)
6263         new_spill_reg_store[reload_spill_index[j]] = 0;
6264
6265       old = reload_in[j];
6266       if (old != 0 && ! reload_inherited[j]
6267           && ! rtx_equal_p (reload_reg_rtx[j], old)
6268           && reload_reg_rtx[j] != 0)
6269         {
6270           register rtx reloadreg = reload_reg_rtx[j];
6271           rtx oldequiv = 0;
6272           enum machine_mode mode;
6273           rtx *where;
6274
6275           /* Determine the mode to reload in.
6276              This is very tricky because we have three to choose from.
6277              There is the mode the insn operand wants (reload_inmode[J]).
6278              There is the mode of the reload register RELOADREG.
6279              There is the intrinsic mode of the operand, which we could find
6280              by stripping some SUBREGs.
6281              It turns out that RELOADREG's mode is irrelevant:
6282              we can change that arbitrarily.
6283
6284              Consider (SUBREG:SI foo:QI) as an operand that must be SImode;
6285              then the reload reg may not support QImode moves, so use SImode.
6286              If foo is in memory due to spilling a pseudo reg, this is safe,
6287              because the QImode value is in the least significant part of a
6288              slot big enough for a SImode.  If foo is some other sort of
6289              memory reference, then it is impossible to reload this case,
6290              so previous passes had better make sure this never happens.
6291
6292              Then consider a one-word union which has SImode and one of its
6293              members is a float, being fetched as (SUBREG:SF union:SI).
6294              We must fetch that as SFmode because we could be loading into
6295              a float-only register.  In this case OLD's mode is correct.
6296
6297              Consider an immediate integer: it has VOIDmode.  Here we need
6298              to get a mode from something else.
6299
6300              In some cases, there is a fourth mode, the operand's
6301              containing mode.  If the insn specifies a containing mode for
6302              this operand, it overrides all others.
6303
6304              I am not sure whether the algorithm here is always right,
6305              but it does the right things in those cases.  */
6306
6307           mode = GET_MODE (old);
6308           if (mode == VOIDmode)
6309             mode = reload_inmode[j];
6310
6311 #ifdef SECONDARY_INPUT_RELOAD_CLASS
6312           /* If we need a secondary register for this operation, see if
6313              the value is already in a register in that class.  Don't
6314              do this if the secondary register will be used as a scratch
6315              register.  */
6316
6317           if (reload_secondary_in_reload[j] >= 0
6318               && reload_secondary_in_icode[j] == CODE_FOR_nothing
6319               && optimize)
6320             oldequiv
6321               = find_equiv_reg (old, insn,
6322                                 reload_reg_class[reload_secondary_in_reload[j]],
6323                                 -1, NULL_PTR, 0, mode);
6324 #endif
6325
6326           /* If reloading from memory, see if there is a register
6327              that already holds the same value.  If so, reload from there.
6328              We can pass 0 as the reload_reg_p argument because
6329              any other reload has either already been emitted,
6330              in which case find_equiv_reg will see the reload-insn,
6331              or has yet to be emitted, in which case it doesn't matter
6332              because we will use this equiv reg right away.  */
6333
6334           if (oldequiv == 0 && optimize
6335               && (GET_CODE (old) == MEM
6336                   || (GET_CODE (old) == REG
6337                       && REGNO (old) >= FIRST_PSEUDO_REGISTER
6338                       && reg_renumber[REGNO (old)] < 0)))
6339             oldequiv = find_equiv_reg (old, insn, ALL_REGS,
6340                                        -1, NULL_PTR, 0, mode);
6341
6342           if (oldequiv)
6343             {
6344               int regno = true_regnum (oldequiv);
6345
6346               /* If OLDEQUIV is a spill register, don't use it for this
6347                  if any other reload needs it at an earlier stage of this insn
6348                  or at this stage.  */
6349               if (spill_reg_order[regno] >= 0
6350                   && (! reload_reg_free_p (regno, reload_opnum[j],
6351                                            reload_when_needed[j])
6352                       || ! reload_reg_free_before_p (regno, reload_opnum[j],
6353                                                      reload_when_needed[j])))
6354                 oldequiv = 0;
6355
6356               /* If OLDEQUIV is not a spill register,
6357                  don't use it if any other reload wants it.  */
6358               if (spill_reg_order[regno] < 0)
6359                 {
6360                   int k;
6361                   for (k = 0; k < n_reloads; k++)
6362                     if (reload_reg_rtx[k] != 0 && k != j
6363                         && reg_overlap_mentioned_for_reload_p (reload_reg_rtx[k],
6364                                                                oldequiv))
6365                       {
6366                         oldequiv = 0;
6367                         break;
6368                       }
6369                 }
6370
6371               /* If it is no cheaper to copy from OLDEQUIV into the
6372                  reload register than it would be to move from memory,
6373                  don't use it. Likewise, if we need a secondary register
6374                  or memory.   */
6375
6376               if (oldequiv != 0
6377                   && ((REGNO_REG_CLASS (regno) != reload_reg_class[j]
6378                        && (REGISTER_MOVE_COST (REGNO_REG_CLASS (regno),
6379                                                reload_reg_class[j])
6380                            >= MEMORY_MOVE_COST (mode, reload_reg_class[j], 1)))
6381 #ifdef SECONDARY_INPUT_RELOAD_CLASS
6382                       || (SECONDARY_INPUT_RELOAD_CLASS (reload_reg_class[j],
6383                                                         mode, oldequiv)
6384                           != NO_REGS)
6385 #endif
6386 #ifdef SECONDARY_MEMORY_NEEDED
6387                       || SECONDARY_MEMORY_NEEDED (REGNO_REG_CLASS (regno),
6388                                                   reload_reg_class[j],
6389                                                   mode)
6390 #endif
6391                       ))
6392                 oldequiv = 0;
6393             }
6394
6395           if (oldequiv == 0)
6396             oldequiv = old;
6397           else if (GET_CODE (oldequiv) == REG)
6398             oldequiv_reg = oldequiv;
6399           else if (GET_CODE (oldequiv) == SUBREG)
6400             oldequiv_reg = SUBREG_REG (oldequiv);
6401
6402           /* If we are reloading from a register that was recently stored in
6403              with an output-reload, see if we can prove there was
6404              actually no need to store the old value in it.  */
6405
6406           if (optimize && GET_CODE (oldequiv) == REG
6407               && REGNO (oldequiv) < FIRST_PSEUDO_REGISTER
6408               && spill_reg_store[REGNO (oldequiv)]
6409               && GET_CODE (old) == REG && dead_or_set_p (insn, old)
6410               /* This is unsafe if operand occurs more than once in current
6411                  insn.  Perhaps some occurrences weren't reloaded.  */
6412               && count_occurrences (PATTERN (insn), old) == 1)
6413             delete_output_reload (insn, j, spill_reg_store[REGNO (oldequiv)]);
6414
6415           /* Encapsulate both RELOADREG and OLDEQUIV into that mode,
6416              then load RELOADREG from OLDEQUIV.  Note that we cannot use
6417              gen_lowpart_common since it can do the wrong thing when
6418              RELOADREG has a multi-word mode.  Note that RELOADREG
6419              must always be a REG here.  */
6420
6421           if (GET_MODE (reloadreg) != mode)
6422             reloadreg = gen_rtx_REG (mode, REGNO (reloadreg));
6423           while (GET_CODE (oldequiv) == SUBREG && GET_MODE (oldequiv) != mode)
6424             oldequiv = SUBREG_REG (oldequiv);
6425           if (GET_MODE (oldequiv) != VOIDmode
6426               && mode != GET_MODE (oldequiv))
6427             oldequiv = gen_rtx_SUBREG (mode, oldequiv, 0);
6428
6429           /* Switch to the right place to emit the reload insns.  */
6430           switch (reload_when_needed[j])
6431             {
6432             case RELOAD_OTHER:
6433               where = &other_input_reload_insns;
6434               break;
6435             case RELOAD_FOR_INPUT:
6436               where = &input_reload_insns[reload_opnum[j]];
6437               break;
6438             case RELOAD_FOR_INPUT_ADDRESS:
6439               where = &input_address_reload_insns[reload_opnum[j]];
6440               break;
6441             case RELOAD_FOR_INPADDR_ADDRESS:
6442               where = &inpaddr_address_reload_insns[reload_opnum[j]];
6443               break;
6444             case RELOAD_FOR_OUTPUT_ADDRESS:
6445               where = &output_address_reload_insns[reload_opnum[j]];
6446               break;
6447             case RELOAD_FOR_OUTADDR_ADDRESS:
6448               where = &outaddr_address_reload_insns[reload_opnum[j]];
6449               break;
6450             case RELOAD_FOR_OPERAND_ADDRESS:
6451               where = &operand_reload_insns;
6452               break;
6453             case RELOAD_FOR_OPADDR_ADDR:
6454               where = &other_operand_reload_insns;
6455               break;
6456             case RELOAD_FOR_OTHER_ADDRESS:
6457               where = &other_input_address_reload_insns;
6458               break;
6459             default:
6460               abort ();
6461             }
6462
6463           push_to_sequence (*where);
6464           special = 0;
6465
6466           /* Auto-increment addresses must be reloaded in a special way.  */
6467           if (GET_CODE (oldequiv) == POST_INC
6468               || GET_CODE (oldequiv) == POST_DEC
6469               || GET_CODE (oldequiv) == PRE_INC
6470               || GET_CODE (oldequiv) == PRE_DEC)
6471             {
6472               /* We are not going to bother supporting the case where a
6473                  incremented register can't be copied directly from
6474                  OLDEQUIV since this seems highly unlikely.  */
6475               if (reload_secondary_in_reload[j] >= 0)
6476                 abort ();
6477               /* Prevent normal processing of this reload.  */
6478               special = 1;
6479               /* Output a special code sequence for this case.  */
6480               inc_for_reload (reloadreg, oldequiv, reload_inc[j]);
6481             }
6482
6483           /* If we are reloading a pseudo-register that was set by the previous
6484              insn, see if we can get rid of that pseudo-register entirely
6485              by redirecting the previous insn into our reload register.  */
6486
6487           else if (optimize && GET_CODE (old) == REG
6488                    && REGNO (old) >= FIRST_PSEUDO_REGISTER
6489                    && dead_or_set_p (insn, old)
6490                    /* This is unsafe if some other reload
6491                       uses the same reg first.  */
6492                    && reload_reg_free_before_p (REGNO (reloadreg),
6493                                                 reload_opnum[j],
6494                                                 reload_when_needed[j]))
6495             {
6496               rtx temp = PREV_INSN (insn);
6497               while (temp && GET_CODE (temp) == NOTE)
6498                 temp = PREV_INSN (temp);
6499               if (temp
6500                   && GET_CODE (temp) == INSN
6501                   && GET_CODE (PATTERN (temp)) == SET
6502                   && SET_DEST (PATTERN (temp)) == old
6503                   /* Make sure we can access insn_operand_constraint.  */
6504                   && asm_noperands (PATTERN (temp)) < 0
6505                   /* This is unsafe if prev insn rejects our reload reg.  */
6506                   && constraint_accepts_reg_p (insn_operand_constraint[recog_memoized (temp)][0],
6507                                                reloadreg)
6508                   /* This is unsafe if operand occurs more than once in current
6509                      insn.  Perhaps some occurrences aren't reloaded.  */
6510                   && count_occurrences (PATTERN (insn), old) == 1
6511                   /* Don't risk splitting a matching pair of operands.  */
6512                   && ! reg_mentioned_p (old, SET_SRC (PATTERN (temp))))
6513                 {
6514                   /* Store into the reload register instead of the pseudo.  */
6515                   SET_DEST (PATTERN (temp)) = reloadreg;
6516                   /* If these are the only uses of the pseudo reg,
6517                      pretend for GDB it lives in the reload reg we used.  */
6518                   if (REG_N_DEATHS (REGNO (old)) == 1
6519                       && REG_N_SETS (REGNO (old)) == 1)
6520                     {
6521                       reg_renumber[REGNO (old)] = REGNO (reload_reg_rtx[j]);
6522                       alter_reg (REGNO (old), -1);
6523                     }
6524                   special = 1;
6525                 }
6526             }
6527
6528           /* We can't do that, so output an insn to load RELOADREG.  */
6529
6530           if (! special)
6531             {
6532 #ifdef SECONDARY_INPUT_RELOAD_CLASS
6533               rtx second_reload_reg = 0;
6534               enum insn_code icode;
6535
6536               /* If we have a secondary reload, pick up the secondary register
6537                  and icode, if any.  If OLDEQUIV and OLD are different or
6538                  if this is an in-out reload, recompute whether or not we
6539                  still need a secondary register and what the icode should
6540                  be.  If we still need a secondary register and the class or
6541                  icode is different, go back to reloading from OLD if using
6542                  OLDEQUIV means that we got the wrong type of register.  We
6543                  cannot have different class or icode due to an in-out reload
6544                  because we don't make such reloads when both the input and
6545                  output need secondary reload registers.  */
6546
6547               if (reload_secondary_in_reload[j] >= 0)
6548                 {
6549                   int secondary_reload = reload_secondary_in_reload[j];
6550                   rtx real_oldequiv = oldequiv;
6551                   rtx real_old = old;
6552
6553                   /* If OLDEQUIV is a pseudo with a MEM, get the real MEM
6554                      and similarly for OLD.
6555                      See comments in get_secondary_reload in reload.c.  */
6556                   if (GET_CODE (oldequiv) == REG
6557                       && REGNO (oldequiv) >= FIRST_PSEUDO_REGISTER
6558                       && reg_equiv_mem[REGNO (oldequiv)] != 0)
6559                     real_oldequiv = reg_equiv_mem[REGNO (oldequiv)];
6560
6561                   if (GET_CODE (old) == REG
6562                       && REGNO (old) >= FIRST_PSEUDO_REGISTER
6563                       && reg_equiv_mem[REGNO (old)] != 0)
6564                     real_old = reg_equiv_mem[REGNO (old)];
6565
6566                   second_reload_reg = reload_reg_rtx[secondary_reload];
6567                   icode = reload_secondary_in_icode[j];
6568
6569                   if ((old != oldequiv && ! rtx_equal_p (old, oldequiv))
6570                       || (reload_in[j] != 0 && reload_out[j] != 0))
6571                     {
6572                       enum reg_class new_class
6573                         = SECONDARY_INPUT_RELOAD_CLASS (reload_reg_class[j],
6574                                                         mode, real_oldequiv);
6575
6576                       if (new_class == NO_REGS)
6577                         second_reload_reg = 0;
6578                       else
6579                         {
6580                           enum insn_code new_icode;
6581                           enum machine_mode new_mode;
6582
6583                           if (! TEST_HARD_REG_BIT (reg_class_contents[(int) new_class],
6584                                                    REGNO (second_reload_reg)))
6585                             oldequiv = old, real_oldequiv = real_old;
6586                           else
6587                             {
6588                               new_icode = reload_in_optab[(int) mode];
6589                               if (new_icode != CODE_FOR_nothing
6590                                   && ((insn_operand_predicate[(int) new_icode][0]
6591                                        && ! ((*insn_operand_predicate[(int) new_icode][0])
6592                                              (reloadreg, mode)))
6593                                       || (insn_operand_predicate[(int) new_icode][1]
6594                                           && ! ((*insn_operand_predicate[(int) new_icode][1])
6595                                                 (real_oldequiv, mode)))))
6596                                 new_icode = CODE_FOR_nothing;
6597
6598                               if (new_icode == CODE_FOR_nothing)
6599                                 new_mode = mode;
6600                               else
6601                                 new_mode = insn_operand_mode[(int) new_icode][2];
6602
6603                               if (GET_MODE (second_reload_reg) != new_mode)
6604                                 {
6605                                   if (!HARD_REGNO_MODE_OK (REGNO (second_reload_reg),
6606                                                            new_mode))
6607                                     oldequiv = old, real_oldequiv = real_old;
6608                                   else
6609                                     second_reload_reg
6610                                       = gen_rtx_REG (new_mode,
6611                                                      REGNO (second_reload_reg));
6612                                 }
6613                             }
6614                         }
6615                     }
6616
6617                   /* If we still need a secondary reload register, check
6618                      to see if it is being used as a scratch or intermediate
6619                      register and generate code appropriately.  If we need
6620                      a scratch register, use REAL_OLDEQUIV since the form of
6621                      the insn may depend on the actual address if it is 
6622                      a MEM.  */
6623
6624                   if (second_reload_reg)
6625                     {
6626                       if (icode != CODE_FOR_nothing)
6627                         {
6628                           emit_insn (GEN_FCN (icode) (reloadreg, real_oldequiv,
6629                                                       second_reload_reg));
6630                           special = 1;
6631                         }
6632                       else
6633                         {
6634                           /* See if we need a scratch register to load the
6635                              intermediate register (a tertiary reload).  */
6636                           enum insn_code tertiary_icode
6637                             = reload_secondary_in_icode[secondary_reload];
6638
6639                           if (tertiary_icode != CODE_FOR_nothing)
6640                             {
6641                               rtx third_reload_reg
6642                                 = reload_reg_rtx[reload_secondary_in_reload[secondary_reload]];
6643
6644                               emit_insn ((GEN_FCN (tertiary_icode)
6645                                           (second_reload_reg, real_oldequiv,
6646                                            third_reload_reg)));
6647                             }
6648                           else
6649                             gen_reload (second_reload_reg, oldequiv,
6650                                         reload_opnum[j],
6651                                         reload_when_needed[j]);
6652
6653                           oldequiv = second_reload_reg;
6654                         }
6655                     }
6656                 }
6657 #endif
6658
6659               if (! special && ! rtx_equal_p (reloadreg, oldequiv))
6660                 gen_reload (reloadreg, oldequiv, reload_opnum[j],
6661                             reload_when_needed[j]);
6662
6663 #if defined(SECONDARY_INPUT_RELOAD_CLASS) && defined(PRESERVE_DEATH_INFO_REGNO_P)
6664               /* We may have to make a REG_DEAD note for the secondary reload
6665                  register in the insns we just made.  Find the last insn that
6666                  mentioned the register.  */
6667               if (! special && second_reload_reg
6668                   && PRESERVE_DEATH_INFO_REGNO_P (REGNO (second_reload_reg)))
6669                 {
6670                   rtx prev;
6671
6672                   for (prev = get_last_insn (); prev;
6673                        prev = PREV_INSN (prev))
6674                     if (GET_RTX_CLASS (GET_CODE (prev) == 'i')
6675                         && reg_overlap_mentioned_for_reload_p (second_reload_reg,
6676                                                                PATTERN (prev)))
6677                       {
6678                         REG_NOTES (prev) = gen_rtx_EXPR_LIST (REG_DEAD,
6679                                                               second_reload_reg,
6680                                                               REG_NOTES (prev));
6681                         break;
6682                       }
6683                 }
6684 #endif
6685             }
6686
6687           this_reload_insn = get_last_insn ();
6688           /* End this sequence.  */
6689           *where = get_insns ();
6690           end_sequence ();
6691         }
6692
6693       /* When inheriting a wider reload, we have a MEM in reload_in[j],
6694          e.g. inheriting a SImode output reload for
6695          (mem:HI (plus:SI (reg:SI 14 fp) (const_int 10)))  */
6696       if (optimize && reload_inherited[j] && reload_in[j]
6697           && GET_CODE (reload_in[j]) == MEM
6698           && reload_spill_index[j] >= 0
6699           && TEST_HARD_REG_BIT (reg_reloaded_valid, reload_spill_index[j]))
6700         {
6701           expect_occurrences
6702             = count_occurrences (PATTERN (insn), reload_in[j]) == 1 ? 0 : -1;
6703           reload_in[j]
6704             = regno_reg_rtx[reg_reloaded_contents[reload_spill_index[j]]];
6705         }
6706       /* Add a note saying the input reload reg
6707          dies in this insn, if anyone cares.  */
6708 #ifdef PRESERVE_DEATH_INFO_REGNO_P
6709       if (old != 0
6710           && reload_reg_rtx[j] != old
6711           && reload_reg_rtx[j] != 0
6712           && reload_out[j] == 0
6713           && ! reload_inherited[j]
6714           && PRESERVE_DEATH_INFO_REGNO_P (REGNO (reload_reg_rtx[j])))
6715         {
6716           register rtx reloadreg = reload_reg_rtx[j];
6717
6718 #if 0
6719           /* We can't abort here because we need to support this for sched.c.
6720              It's not terrible to miss a REG_DEAD note, but we should try
6721              to figure out how to do this correctly.  */
6722           /* The code below is incorrect for address-only reloads.  */
6723           if (reload_when_needed[j] != RELOAD_OTHER
6724               && reload_when_needed[j] != RELOAD_FOR_INPUT)
6725             abort ();
6726 #endif
6727
6728           /* Add a death note to this insn, for an input reload.  */
6729
6730           if ((reload_when_needed[j] == RELOAD_OTHER
6731                || reload_when_needed[j] == RELOAD_FOR_INPUT)
6732               && ! dead_or_set_p (insn, reloadreg))
6733             REG_NOTES (insn)
6734               = gen_rtx_EXPR_LIST (REG_DEAD,
6735                                    reloadreg, REG_NOTES (insn));
6736         }
6737
6738       /* When we inherit a reload, the last marked death of the reload reg
6739          may no longer really be a death.  */
6740       if (reload_reg_rtx[j] != 0
6741           && PRESERVE_DEATH_INFO_REGNO_P (REGNO (reload_reg_rtx[j]))
6742           && reload_inherited[j])
6743         {
6744           /* Handle inheriting an output reload.
6745              Remove the death note from the output reload insn.  */
6746           if (reload_spill_index[j] >= 0
6747               && GET_CODE (reload_in[j]) == REG
6748               && spill_reg_store[reload_spill_index[j]] != 0
6749               && find_regno_note (spill_reg_store[reload_spill_index[j]],
6750                                   REG_DEAD, REGNO (reload_reg_rtx[j])))
6751             remove_death (REGNO (reload_reg_rtx[j]),
6752                           spill_reg_store[reload_spill_index[j]]);
6753           /* Likewise for input reloads that were inherited.  */
6754           else if (reload_spill_index[j] >= 0
6755                    && GET_CODE (reload_in[j]) == REG
6756                    && spill_reg_store[reload_spill_index[j]] == 0
6757                    && reload_inheritance_insn[j] != 0
6758                    && find_regno_note (reload_inheritance_insn[j], REG_DEAD,
6759                                        REGNO (reload_reg_rtx[j])))
6760             remove_death (REGNO (reload_reg_rtx[j]),
6761                           reload_inheritance_insn[j]);
6762           else
6763             {
6764               rtx prev;
6765
6766               /* We got this register from find_equiv_reg.
6767                  Search back for its last death note and get rid of it.
6768                  But don't search back too far.
6769                  Don't go past a place where this reg is set,
6770                  since a death note before that remains valid.  */
6771               for (prev = PREV_INSN (insn);
6772                    prev && GET_CODE (prev) != CODE_LABEL;
6773                    prev = PREV_INSN (prev))
6774                 if (GET_RTX_CLASS (GET_CODE (prev)) == 'i'
6775                     && dead_or_set_p (prev, reload_reg_rtx[j]))
6776                   {
6777                     if (find_regno_note (prev, REG_DEAD,
6778                                          REGNO (reload_reg_rtx[j])))
6779                       remove_death (REGNO (reload_reg_rtx[j]), prev);
6780                     break;
6781                   }
6782             }
6783         }
6784
6785       /* We might have used find_equiv_reg above to choose an alternate
6786          place from which to reload.  If so, and it died, we need to remove
6787          that death and move it to one of the insns we just made.  */
6788
6789       if (oldequiv_reg != 0
6790           && PRESERVE_DEATH_INFO_REGNO_P (true_regnum (oldequiv_reg)))
6791         {
6792           rtx prev, prev1;
6793
6794           for (prev = PREV_INSN (insn); prev && GET_CODE (prev) != CODE_LABEL;
6795                prev = PREV_INSN (prev))
6796             if (GET_RTX_CLASS (GET_CODE (prev)) == 'i'
6797                 && dead_or_set_p (prev, oldequiv_reg))
6798               {
6799                 if (find_regno_note (prev, REG_DEAD, REGNO (oldequiv_reg)))
6800                   {
6801                     for (prev1 = this_reload_insn;
6802                          prev1; prev1 = PREV_INSN (prev1))
6803                       if (GET_RTX_CLASS (GET_CODE (prev1) == 'i')
6804                         && reg_overlap_mentioned_for_reload_p (oldequiv_reg,
6805                                                                PATTERN (prev1)))
6806                       {
6807                         REG_NOTES (prev1) = gen_rtx_EXPR_LIST (REG_DEAD,
6808                                                                oldequiv_reg,
6809                                                                REG_NOTES (prev1));
6810                         break;
6811                       }
6812                     remove_death (REGNO (oldequiv_reg), prev);
6813                   }
6814                 break;
6815               }
6816         }
6817 #endif
6818
6819       /* If we are reloading a register that was recently stored in with an
6820          output-reload, see if we can prove there was
6821          actually no need to store the old value in it.  */
6822
6823       if (optimize && reload_inherited[j] && reload_spill_index[j] >= 0
6824           && reload_in[j] != 0
6825           && GET_CODE (reload_in[j]) == REG
6826 #if 0
6827           /* There doesn't seem to be any reason to restrict this to pseudos
6828              and doing so loses in the case where we are copying from a
6829              register of the wrong class.  */
6830           && REGNO (reload_in[j]) >= FIRST_PSEUDO_REGISTER
6831 #endif
6832           && spill_reg_store[reload_spill_index[j]] != 0
6833           /* This is unsafe if some other reload uses the same reg first.  */
6834           && reload_reg_free_before_p (reload_spill_index[j],
6835                                        reload_opnum[j], reload_when_needed[j])
6836           && dead_or_set_p (insn, reload_in[j])
6837           /* This is unsafe if operand occurs more than once in current
6838              insn.  Perhaps some occurrences weren't reloaded.  */
6839           && (count_occurrences (PATTERN (insn), reload_in[j])
6840               == expect_occurrences))
6841         delete_output_reload (insn, j,
6842                               spill_reg_store[reload_spill_index[j]]);
6843
6844       /* Input-reloading is done.  Now do output-reloading,
6845          storing the value from the reload-register after the main insn
6846          if reload_out[j] is nonzero.
6847
6848          ??? At some point we need to support handling output reloads of
6849          JUMP_INSNs or insns that set cc0.  */
6850       old = reload_out[j];
6851       if (old != 0
6852           && reload_reg_rtx[j] != old
6853           && reload_reg_rtx[j] != 0)
6854         {
6855           register rtx reloadreg = reload_reg_rtx[j];
6856 #ifdef SECONDARY_OUTPUT_RELOAD_CLASS
6857           register rtx second_reloadreg = 0;
6858 #endif
6859           rtx note, p;
6860           enum machine_mode mode;
6861           int special = 0;
6862
6863           /* An output operand that dies right away does need a reload,
6864              but need not be copied from it.  Show the new location in the
6865              REG_UNUSED note.  */
6866           if ((GET_CODE (old) == REG || GET_CODE (old) == SCRATCH)
6867               && (note = find_reg_note (insn, REG_UNUSED, old)) != 0)
6868             {
6869               XEXP (note, 0) = reload_reg_rtx[j];
6870               continue;
6871             }
6872           /* Likewise for a SUBREG of an operand that dies.  */
6873           else if (GET_CODE (old) == SUBREG
6874                    && GET_CODE (SUBREG_REG (old)) == REG
6875                    && 0 != (note = find_reg_note (insn, REG_UNUSED,
6876                                                   SUBREG_REG (old))))
6877             {
6878               XEXP (note, 0) = gen_lowpart_common (GET_MODE (old),
6879                                                    reload_reg_rtx[j]);
6880               continue;
6881             }
6882           else if (GET_CODE (old) == SCRATCH)
6883             /* If we aren't optimizing, there won't be a REG_UNUSED note,
6884                but we don't want to make an output reload.  */
6885             continue;
6886
6887 #if 0
6888           /* Strip off of OLD any size-increasing SUBREGs such as
6889              (SUBREG:SI foo:QI 0).  */
6890
6891           while (GET_CODE (old) == SUBREG && SUBREG_WORD (old) == 0
6892                  && (GET_MODE_SIZE (GET_MODE (old))
6893                      > GET_MODE_SIZE (GET_MODE (SUBREG_REG (old)))))
6894             old = SUBREG_REG (old);
6895 #endif
6896
6897           /* If is a JUMP_INSN, we can't support output reloads yet.  */
6898           if (GET_CODE (insn) == JUMP_INSN)
6899             abort ();
6900
6901           if (reload_when_needed[j] == RELOAD_OTHER)
6902             start_sequence ();
6903           else
6904             push_to_sequence (output_reload_insns[reload_opnum[j]]);
6905
6906           /* Determine the mode to reload in.
6907              See comments above (for input reloading).  */
6908
6909           mode = GET_MODE (old);
6910           if (mode == VOIDmode)
6911             {
6912               /* VOIDmode should never happen for an output.  */
6913               if (asm_noperands (PATTERN (insn)) < 0)
6914                 /* It's the compiler's fault.  */
6915                 fatal_insn ("VOIDmode on an output", insn);
6916               error_for_asm (insn, "output operand is constant in `asm'");
6917               /* Prevent crash--use something we know is valid.  */
6918               mode = word_mode;
6919               old = gen_rtx_REG (mode, REGNO (reloadreg));
6920             }
6921
6922           if (GET_MODE (reloadreg) != mode)
6923             reloadreg = gen_rtx_REG (mode, REGNO (reloadreg));
6924
6925 #ifdef SECONDARY_OUTPUT_RELOAD_CLASS
6926
6927           /* If we need two reload regs, set RELOADREG to the intermediate
6928              one, since it will be stored into OLD.  We might need a secondary
6929              register only for an input reload, so check again here.  */
6930
6931           if (reload_secondary_out_reload[j] >= 0)
6932             {
6933               rtx real_old = old;
6934
6935               if (GET_CODE (old) == REG && REGNO (old) >= FIRST_PSEUDO_REGISTER
6936                   && reg_equiv_mem[REGNO (old)] != 0)
6937                 real_old = reg_equiv_mem[REGNO (old)];
6938
6939               if((SECONDARY_OUTPUT_RELOAD_CLASS (reload_reg_class[j],
6940                                                  mode, real_old)
6941                   != NO_REGS))
6942                 {
6943                   second_reloadreg = reloadreg;
6944                   reloadreg = reload_reg_rtx[reload_secondary_out_reload[j]];
6945
6946                   /* See if RELOADREG is to be used as a scratch register
6947                      or as an intermediate register.  */
6948                   if (reload_secondary_out_icode[j] != CODE_FOR_nothing)
6949                     {
6950                       emit_insn ((GEN_FCN (reload_secondary_out_icode[j])
6951                                   (real_old, second_reloadreg, reloadreg)));
6952                       special = 1;
6953                     }
6954                   else
6955                     {
6956                       /* See if we need both a scratch and intermediate reload
6957                          register.  */
6958
6959                       int secondary_reload = reload_secondary_out_reload[j];
6960                       enum insn_code tertiary_icode
6961                         = reload_secondary_out_icode[secondary_reload];
6962
6963                       if (GET_MODE (reloadreg) != mode)
6964                         reloadreg = gen_rtx_REG (mode, REGNO (reloadreg));
6965
6966                       if (tertiary_icode != CODE_FOR_nothing)
6967                         {
6968                           rtx third_reloadreg
6969                             = reload_reg_rtx[reload_secondary_out_reload[secondary_reload]];
6970                           rtx tem;
6971
6972                           /* Copy primary reload reg to secondary reload reg.
6973                              (Note that these have been swapped above, then
6974                              secondary reload reg to OLD using our insn.  */
6975
6976                           /* If REAL_OLD is a paradoxical SUBREG, remove it
6977                              and try to put the opposite SUBREG on
6978                              RELOADREG.  */
6979                           if (GET_CODE (real_old) == SUBREG
6980                               && (GET_MODE_SIZE (GET_MODE (real_old))
6981                                   > GET_MODE_SIZE (GET_MODE (SUBREG_REG (real_old))))
6982                               && 0 != (tem = gen_lowpart_common
6983                                        (GET_MODE (SUBREG_REG (real_old)),
6984                                         reloadreg)))
6985                             real_old = SUBREG_REG (real_old), reloadreg = tem;
6986
6987                           gen_reload (reloadreg, second_reloadreg,
6988                                       reload_opnum[j], reload_when_needed[j]);
6989                           emit_insn ((GEN_FCN (tertiary_icode)
6990                                       (real_old, reloadreg, third_reloadreg)));
6991                           special = 1;
6992                         }
6993
6994                       else
6995                         /* Copy between the reload regs here and then to
6996                            OUT later.  */
6997
6998                         gen_reload (reloadreg, second_reloadreg,
6999                                     reload_opnum[j], reload_when_needed[j]);
7000                     }
7001                 }
7002             }
7003 #endif
7004
7005           /* Output the last reload insn.  */
7006           if (! special)
7007             {
7008               rtx set;
7009
7010               /* Don't output the last reload if OLD is not the dest of
7011                  INSN and is in the src and is clobbered by INSN. */
7012               if (! flag_expensive_optimizations
7013                   || GET_CODE (old) != REG
7014                   || !(set = single_set (insn))
7015                   || rtx_equal_p (old, SET_DEST (set))
7016                   || !reg_mentioned_p (old, SET_SRC (set))
7017                   || !regno_clobbered_p (REGNO (old), insn))
7018                 gen_reload (old, reloadreg, reload_opnum[j],
7019                             reload_when_needed[j]);
7020             }
7021
7022 #ifdef PRESERVE_DEATH_INFO_REGNO_P
7023           /* If final will look at death notes for this reg,
7024              put one on the last output-reload insn to use it.  Similarly
7025              for any secondary register.  */
7026           if (PRESERVE_DEATH_INFO_REGNO_P (REGNO (reloadreg)))
7027             for (p = get_last_insn (); p; p = PREV_INSN (p))
7028               if (GET_RTX_CLASS (GET_CODE (p)) == 'i'
7029                   && reg_overlap_mentioned_for_reload_p (reloadreg,
7030                                                          PATTERN (p)))
7031                 REG_NOTES (p) = gen_rtx_EXPR_LIST (REG_DEAD,
7032                                                    reloadreg, REG_NOTES (p));
7033
7034 #ifdef SECONDARY_OUTPUT_RELOAD_CLASS
7035           if (! special && second_reloadreg
7036               && PRESERVE_DEATH_INFO_REGNO_P (REGNO (second_reloadreg)))
7037             for (p = get_last_insn (); p; p = PREV_INSN (p))
7038               if (GET_RTX_CLASS (GET_CODE (p)) == 'i'
7039                   && reg_overlap_mentioned_for_reload_p (second_reloadreg,
7040                                                          PATTERN (p)))
7041                 REG_NOTES (p) = gen_rtx_EXPR_LIST (REG_DEAD,
7042                                                    second_reloadreg,
7043                                                    REG_NOTES (p));
7044 #endif
7045 #endif
7046           /* Look at all insns we emitted, just to be safe.  */
7047           for (p = get_insns (); p; p = NEXT_INSN (p))
7048             if (GET_RTX_CLASS (GET_CODE (p)) == 'i')
7049               {
7050                 rtx pat = PATTERN (p);
7051
7052                 /* If this output reload doesn't come from a spill reg,
7053                    clear any memory of reloaded copies of the pseudo reg.
7054                    If this output reload comes from a spill reg,
7055                    reg_has_output_reload will make this do nothing.  */
7056                 note_stores (pat, forget_old_reloads_1);
7057
7058                 if (reg_mentioned_p (reload_reg_rtx[j], pat))
7059                   {
7060                     if (reload_spill_index[j] < 0
7061                         && GET_CODE (pat) == SET
7062                         && SET_SRC (pat) == reload_reg_rtx[j])
7063                       {
7064                         int src = REGNO (SET_SRC (pat));
7065
7066                         reload_spill_index[j] = src;
7067                         SET_HARD_REG_BIT (reg_is_output_reload, src);
7068                         if (find_regno_note (insn, REG_DEAD, src))
7069                           SET_HARD_REG_BIT (reg_reloaded_died, src);
7070                       }
7071                     if (reload_spill_index[j] >= 0)
7072                       new_spill_reg_store[reload_spill_index[j]] = p;
7073                   }
7074               }
7075
7076           if (reload_when_needed[j] == RELOAD_OTHER)
7077             {
7078               emit_insns (other_output_reload_insns[reload_opnum[j]]);
7079               other_output_reload_insns[reload_opnum[j]] = get_insns ();
7080             }
7081           else
7082             output_reload_insns[reload_opnum[j]] = get_insns ();
7083
7084           end_sequence ();
7085         }
7086     }
7087
7088   /* Now write all the insns we made for reloads in the order expected by
7089      the allocation functions.  Prior to the insn being reloaded, we write
7090      the following reloads:
7091
7092      RELOAD_FOR_OTHER_ADDRESS reloads for input addresses.
7093
7094      RELOAD_OTHER reloads.
7095
7096      For each operand, any RELOAD_FOR_INPADDR_ADDRESS reloads followed
7097      by any RELOAD_FOR_INPUT_ADDRESS reloads followed by the
7098      RELOAD_FOR_INPUT reload for the operand.
7099
7100      RELOAD_FOR_OPADDR_ADDRS reloads.
7101
7102      RELOAD_FOR_OPERAND_ADDRESS reloads.
7103
7104      After the insn being reloaded, we write the following:
7105
7106      For each operand, any RELOAD_FOR_OUTADDR_ADDRESS reloads followed
7107      by any RELOAD_FOR_OUTPUT_ADDRESS reload followed by the
7108      RELOAD_FOR_OUTPUT reload, followed by any RELOAD_OTHER output
7109      reloads for the operand.  The RELOAD_OTHER output reloads are
7110      output in descending order by reload number.  */
7111
7112   emit_insns_before (other_input_address_reload_insns, before_insn);
7113   emit_insns_before (other_input_reload_insns, before_insn);
7114
7115   for (j = 0; j < reload_n_operands; j++)
7116     {
7117       emit_insns_before (inpaddr_address_reload_insns[j], before_insn);
7118       emit_insns_before (input_address_reload_insns[j], before_insn);
7119       emit_insns_before (input_reload_insns[j], before_insn);
7120     }
7121
7122   emit_insns_before (other_operand_reload_insns, before_insn);
7123   emit_insns_before (operand_reload_insns, before_insn);
7124
7125   for (j = 0; j < reload_n_operands; j++)
7126     {
7127       emit_insns_before (outaddr_address_reload_insns[j], following_insn);
7128       emit_insns_before (output_address_reload_insns[j], following_insn);
7129       emit_insns_before (output_reload_insns[j], following_insn);
7130       emit_insns_before (other_output_reload_insns[j], following_insn);
7131     }
7132
7133   /* Move death notes from INSN
7134      to output-operand-address and output reload insns.  */
7135 #ifdef PRESERVE_DEATH_INFO_REGNO_P
7136   {
7137     rtx insn1;
7138     /* Loop over those insns, last ones first.  */
7139     for (insn1 = PREV_INSN (following_insn); insn1 != insn;
7140          insn1 = PREV_INSN (insn1))
7141       if (GET_CODE (insn1) == INSN && GET_CODE (PATTERN (insn1)) == SET)
7142         {
7143           rtx source = SET_SRC (PATTERN (insn1));
7144           rtx dest = SET_DEST (PATTERN (insn1));
7145
7146           /* The note we will examine next.  */
7147           rtx reg_notes = REG_NOTES (insn);
7148           /* The place that pointed to this note.  */
7149           rtx *prev_reg_note = &REG_NOTES (insn);
7150
7151           /* If the note is for something used in the source of this
7152              reload insn, or in the output address, move the note.  */
7153           while (reg_notes)
7154             {
7155               rtx next_reg_notes = XEXP (reg_notes, 1);
7156               if (REG_NOTE_KIND (reg_notes) == REG_DEAD
7157                   && GET_CODE (XEXP (reg_notes, 0)) == REG
7158                   && ((GET_CODE (dest) != REG
7159                        && reg_overlap_mentioned_for_reload_p (XEXP (reg_notes, 0),
7160                                                               dest))
7161                       || reg_overlap_mentioned_for_reload_p (XEXP (reg_notes, 0),
7162                                                              source)))
7163                 {
7164                   *prev_reg_note = next_reg_notes;
7165                   XEXP (reg_notes, 1) = REG_NOTES (insn1);
7166                   REG_NOTES (insn1) = reg_notes;
7167                 }
7168               else
7169                 prev_reg_note = &XEXP (reg_notes, 1);
7170
7171               reg_notes = next_reg_notes;
7172             }
7173         }
7174   }
7175 #endif
7176
7177   /* For all the spill regs newly reloaded in this instruction,
7178      record what they were reloaded from, so subsequent instructions
7179      can inherit the reloads.
7180
7181      Update spill_reg_store for the reloads of this insn.
7182      Copy the elements that were updated in the loop above.  */
7183
7184   for (j = 0; j < n_reloads; j++)
7185     {
7186       register int r = reload_order[j];
7187       register int i = reload_spill_index[r];
7188
7189       /* I is nonneg if this reload used a register.
7190          If reload_reg_rtx[r] is 0, this is an optional reload
7191          that we opted to ignore.  */
7192
7193       if (i >= 0 && reload_reg_rtx[r] != 0)
7194         {
7195           int nr
7196             = HARD_REGNO_NREGS (i, GET_MODE (reload_reg_rtx[r]));
7197           int k;
7198           int part_reaches_end = 0;
7199           int all_reaches_end = 1;
7200
7201           /* For a multi register reload, we need to check if all or part
7202              of the value lives to the end.  */
7203           for (k = 0; k < nr; k++)
7204             {
7205               if (reload_reg_reaches_end_p (i + k, reload_opnum[r],
7206                                             reload_when_needed[r]))
7207                 part_reaches_end = 1;
7208               else
7209                 all_reaches_end = 0;
7210             }
7211
7212           /* Ignore reloads that don't reach the end of the insn in
7213              entirety.  */
7214           if (all_reaches_end)
7215             {
7216               /* First, clear out memory of what used to be in this spill reg.
7217                  If consecutive registers are used, clear them all.  */
7218
7219               for (k = 0; k < nr; k++)
7220                 CLEAR_HARD_REG_BIT (reg_reloaded_valid, i + k);
7221
7222               /* Maybe the spill reg contains a copy of reload_out.  */
7223               if (reload_out[r] != 0 && GET_CODE (reload_out[r]) == REG)
7224                 {
7225                   register int nregno = REGNO (reload_out[r]);
7226                   int nnr = (nregno >= FIRST_PSEUDO_REGISTER ? 1
7227                              : HARD_REGNO_NREGS (nregno,
7228                                                  GET_MODE (reload_reg_rtx[r])));
7229
7230                   spill_reg_store[i] = new_spill_reg_store[i];
7231                   reg_last_reload_reg[nregno] = reload_reg_rtx[r];
7232
7233                   /* If NREGNO is a hard register, it may occupy more than
7234                      one register.  If it does, say what is in the 
7235                      rest of the registers assuming that both registers
7236                      agree on how many words the object takes.  If not,
7237                      invalidate the subsequent registers.  */
7238
7239                   if (nregno < FIRST_PSEUDO_REGISTER)
7240                     for (k = 1; k < nnr; k++)
7241                       reg_last_reload_reg[nregno + k]
7242                         = (nr == nnr
7243                            ? gen_rtx_REG (reg_raw_mode[REGNO (reload_reg_rtx[r]) + k],
7244                                           REGNO (reload_reg_rtx[r]) + k)
7245                            : 0);
7246
7247                   /* Now do the inverse operation.  */
7248                   for (k = 0; k < nr; k++)
7249                     {
7250                       CLEAR_HARD_REG_BIT (reg_reloaded_dead, i + k);
7251                       reg_reloaded_contents[i + k]
7252                         = (nregno >= FIRST_PSEUDO_REGISTER || nr != nnr
7253                            ? nregno
7254                            : nregno + k);
7255                       reg_reloaded_insn[i + k] = insn;
7256                       SET_HARD_REG_BIT (reg_reloaded_valid, i + k);
7257                     }
7258                 }
7259
7260               /* Maybe the spill reg contains a copy of reload_in.  Only do
7261                  something if there will not be an output reload for
7262                  the register being reloaded.  */
7263               else if (reload_out[r] == 0
7264                        && reload_in[r] != 0
7265                        && spill_reg_order[i] >= 0
7266                        && ((GET_CODE (reload_in[r]) == REG
7267                             && ! reg_has_output_reload[REGNO (reload_in[r])])
7268                            || (GET_CODE (reload_in_reg[r]) == REG
7269                                && ! reg_has_output_reload[REGNO (reload_in_reg[r])])))
7270                 {
7271                   register int nregno;
7272                   int nnr;
7273
7274                   if (GET_CODE (reload_in[r]) == REG)
7275                     nregno = REGNO (reload_in[r]);
7276                   else
7277                     nregno = REGNO (reload_in_reg[r]);
7278
7279                   nnr = (nregno >= FIRST_PSEUDO_REGISTER ? 1
7280                          : HARD_REGNO_NREGS (nregno,
7281                                              GET_MODE (reload_reg_rtx[r])));
7282                   
7283                   reg_last_reload_reg[nregno] = reload_reg_rtx[r];
7284
7285                   if (nregno < FIRST_PSEUDO_REGISTER)
7286                     for (k = 1; k < nnr; k++)
7287                       reg_last_reload_reg[nregno + k]
7288                         = (nr == nnr
7289                            ? gen_rtx_REG (reg_raw_mode[REGNO (reload_reg_rtx[r]) + k],
7290                                           REGNO (reload_reg_rtx[r]) + k)
7291                            : 0);
7292
7293                   /* Unless we inherited this reload, show we haven't
7294                      recently done a store.  */
7295                   if (! reload_inherited[r])
7296                     spill_reg_store[i] = 0;
7297
7298                   for (k = 0; k < nr; k++)
7299                     {
7300                       CLEAR_HARD_REG_BIT (reg_reloaded_dead, i + k);
7301                       reg_reloaded_contents[i + k]
7302                         = (nregno >= FIRST_PSEUDO_REGISTER || nr != nnr
7303                            ? nregno
7304                            : nregno + k);
7305                       reg_reloaded_insn[i + k] = insn;
7306                       SET_HARD_REG_BIT (reg_reloaded_valid, i + k);
7307                     }
7308                 }
7309             }
7310
7311           /* However, if part of the reload reaches the end, then we must
7312              invalidate the old info for the part that survives to the end.  */
7313           else if (part_reaches_end)
7314             {
7315               for (k = 0; k < nr; k++)
7316                 if (reload_reg_reaches_end_p (i + k,
7317                                               reload_opnum[r],
7318                                               reload_when_needed[r]))
7319                   CLEAR_HARD_REG_BIT (reg_reloaded_valid, i + k);
7320             }
7321         }
7322
7323       /* The following if-statement was #if 0'd in 1.34 (or before...).
7324          It's reenabled in 1.35 because supposedly nothing else
7325          deals with this problem.  */
7326
7327       /* If a register gets output-reloaded from a non-spill register,
7328          that invalidates any previous reloaded copy of it.
7329          But forget_old_reloads_1 won't get to see it, because
7330          it thinks only about the original insn.  So invalidate it here.  */
7331       if (i < 0 && reload_out[r] != 0 && GET_CODE (reload_out[r]) == REG)
7332         {
7333           register int nregno = REGNO (reload_out[r]);
7334           if (nregno >= FIRST_PSEUDO_REGISTER)
7335             reg_last_reload_reg[nregno] = 0;
7336           else
7337             {
7338               int num_regs = HARD_REGNO_NREGS (nregno,GET_MODE (reload_out[r]));
7339
7340               while (num_regs-- > 0)
7341                 reg_last_reload_reg[nregno + num_regs] = 0;
7342             }
7343         }
7344     }
7345   IOR_HARD_REG_SET (reg_reloaded_dead, reg_reloaded_died);
7346 }
7347 \f
7348 /* Emit code to perform a reload from IN (which may be a reload register) to
7349    OUT (which may also be a reload register).  IN or OUT is from operand
7350    OPNUM with reload type TYPE. 
7351
7352    Returns first insn emitted.  */
7353
7354 rtx
7355 gen_reload (out, in, opnum, type)
7356      rtx out;
7357      rtx in;
7358      int opnum;
7359      enum reload_type type;
7360 {
7361   rtx last = get_last_insn ();
7362   rtx tem;
7363
7364   /* If IN is a paradoxical SUBREG, remove it and try to put the
7365      opposite SUBREG on OUT.  Likewise for a paradoxical SUBREG on OUT.  */
7366   if (GET_CODE (in) == SUBREG
7367       && (GET_MODE_SIZE (GET_MODE (in))
7368           > GET_MODE_SIZE (GET_MODE (SUBREG_REG (in))))
7369       && (tem = gen_lowpart_common (GET_MODE (SUBREG_REG (in)), out)) != 0)
7370     in = SUBREG_REG (in), out = tem;
7371   else if (GET_CODE (out) == SUBREG
7372       && (GET_MODE_SIZE (GET_MODE (out))
7373           > GET_MODE_SIZE (GET_MODE (SUBREG_REG (out))))
7374       && (tem = gen_lowpart_common (GET_MODE (SUBREG_REG (out)), in)) != 0)
7375     out = SUBREG_REG (out), in = tem;
7376
7377   /* How to do this reload can get quite tricky.  Normally, we are being
7378      asked to reload a simple operand, such as a MEM, a constant, or a pseudo
7379      register that didn't get a hard register.  In that case we can just
7380      call emit_move_insn.
7381
7382      We can also be asked to reload a PLUS that adds a register or a MEM to
7383      another register, constant or MEM.  This can occur during frame pointer
7384      elimination and while reloading addresses.  This case is handled by
7385      trying to emit a single insn to perform the add.  If it is not valid,
7386      we use a two insn sequence.
7387
7388      Finally, we could be called to handle an 'o' constraint by putting
7389      an address into a register.  In that case, we first try to do this
7390      with a named pattern of "reload_load_address".  If no such pattern
7391      exists, we just emit a SET insn and hope for the best (it will normally
7392      be valid on machines that use 'o').
7393
7394      This entire process is made complex because reload will never
7395      process the insns we generate here and so we must ensure that
7396      they will fit their constraints and also by the fact that parts of
7397      IN might be being reloaded separately and replaced with spill registers.
7398      Because of this, we are, in some sense, just guessing the right approach
7399      here.  The one listed above seems to work.
7400
7401      ??? At some point, this whole thing needs to be rethought.  */
7402
7403   if (GET_CODE (in) == PLUS
7404       && (GET_CODE (XEXP (in, 0)) == REG
7405           || GET_CODE (XEXP (in, 0)) == SUBREG
7406           || GET_CODE (XEXP (in, 0)) == MEM)
7407       && (GET_CODE (XEXP (in, 1)) == REG
7408           || GET_CODE (XEXP (in, 1)) == SUBREG
7409           || CONSTANT_P (XEXP (in, 1))
7410           || GET_CODE (XEXP (in, 1)) == MEM))
7411     {
7412       /* We need to compute the sum of a register or a MEM and another
7413          register, constant, or MEM, and put it into the reload
7414          register.  The best possible way of doing this is if the machine
7415          has a three-operand ADD insn that accepts the required operands.
7416
7417          The simplest approach is to try to generate such an insn and see if it
7418          is recognized and matches its constraints.  If so, it can be used.
7419
7420          It might be better not to actually emit the insn unless it is valid,
7421          but we need to pass the insn as an operand to `recog' and
7422          `insn_extract' and it is simpler to emit and then delete the insn if
7423          not valid than to dummy things up.  */
7424
7425       rtx op0, op1, tem, insn;
7426       int code;
7427
7428       op0 = find_replacement (&XEXP (in, 0));
7429       op1 = find_replacement (&XEXP (in, 1));
7430
7431       /* Since constraint checking is strict, commutativity won't be
7432          checked, so we need to do that here to avoid spurious failure
7433          if the add instruction is two-address and the second operand
7434          of the add is the same as the reload reg, which is frequently
7435          the case.  If the insn would be A = B + A, rearrange it so
7436          it will be A = A + B as constrain_operands expects.  */
7437
7438       if (GET_CODE (XEXP (in, 1)) == REG
7439           && REGNO (out) == REGNO (XEXP (in, 1)))
7440         tem = op0, op0 = op1, op1 = tem;
7441
7442       if (op0 != XEXP (in, 0) || op1 != XEXP (in, 1))
7443         in = gen_rtx_PLUS (GET_MODE (in), op0, op1);
7444
7445       insn = emit_insn (gen_rtx_SET (VOIDmode, out, in));
7446       code = recog_memoized (insn);
7447
7448       if (code >= 0)
7449         {
7450           insn_extract (insn);
7451           /* We want constrain operands to treat this insn strictly in
7452              its validity determination, i.e., the way it would after reload
7453              has completed.  */
7454           if (constrain_operands (code, 1))
7455             return insn;
7456         }
7457
7458       delete_insns_since (last);
7459
7460       /* If that failed, we must use a conservative two-insn sequence.
7461          use move to copy constant, MEM, or pseudo register to the reload
7462          register since "move" will be able to handle an arbitrary operand,
7463          unlike add which can't, in general.  Then add the registers.
7464
7465          If there is another way to do this for a specific machine, a
7466          DEFINE_PEEPHOLE should be specified that recognizes the sequence
7467          we emit below.  */
7468
7469       if (CONSTANT_P (op1) || GET_CODE (op1) == MEM || GET_CODE (op1) == SUBREG
7470           || (GET_CODE (op1) == REG
7471               && REGNO (op1) >= FIRST_PSEUDO_REGISTER))
7472         tem = op0, op0 = op1, op1 = tem;
7473
7474       gen_reload (out, op0, opnum, type);
7475
7476       /* If OP0 and OP1 are the same, we can use OUT for OP1.
7477          This fixes a problem on the 32K where the stack pointer cannot
7478          be used as an operand of an add insn.  */
7479
7480       if (rtx_equal_p (op0, op1))
7481         op1 = out;
7482
7483       insn = emit_insn (gen_add2_insn (out, op1));
7484
7485       /* If that failed, copy the address register to the reload register.
7486          Then add the constant to the reload register.  */
7487
7488       code = recog_memoized (insn);
7489
7490       if (code >= 0)
7491         {
7492           insn_extract (insn);
7493           /* We want constrain operands to treat this insn strictly in
7494              its validity determination, i.e., the way it would after reload
7495              has completed.  */
7496           if (constrain_operands (code, 1))
7497             {
7498               /* Add a REG_EQUIV note so that find_equiv_reg can find it.  */
7499               REG_NOTES (insn)
7500                 = gen_rtx_EXPR_LIST (REG_EQUIV, in, REG_NOTES (insn));
7501               return insn;
7502             }
7503         }
7504
7505       delete_insns_since (last);
7506
7507       gen_reload (out, op1, opnum, type);
7508       insn = emit_insn (gen_add2_insn (out, op0));
7509       REG_NOTES (insn) = gen_rtx_EXPR_LIST (REG_EQUIV, in, REG_NOTES (insn));
7510     }
7511
7512 #ifdef SECONDARY_MEMORY_NEEDED
7513   /* If we need a memory location to do the move, do it that way.  */
7514   else if (GET_CODE (in) == REG && REGNO (in) < FIRST_PSEUDO_REGISTER
7515            && GET_CODE (out) == REG && REGNO (out) < FIRST_PSEUDO_REGISTER
7516            && SECONDARY_MEMORY_NEEDED (REGNO_REG_CLASS (REGNO (in)),
7517                                        REGNO_REG_CLASS (REGNO (out)),
7518                                        GET_MODE (out)))
7519     {
7520       /* Get the memory to use and rewrite both registers to its mode.  */
7521       rtx loc = get_secondary_mem (in, GET_MODE (out), opnum, type);
7522
7523       if (GET_MODE (loc) != GET_MODE (out))
7524         out = gen_rtx_REG (GET_MODE (loc), REGNO (out));
7525
7526       if (GET_MODE (loc) != GET_MODE (in))
7527         in = gen_rtx_REG (GET_MODE (loc), REGNO (in));
7528
7529       gen_reload (loc, in, opnum, type);
7530       gen_reload (out, loc, opnum, type);
7531     }
7532 #endif
7533
7534   /* If IN is a simple operand, use gen_move_insn.  */
7535   else if (GET_RTX_CLASS (GET_CODE (in)) == 'o' || GET_CODE (in) == SUBREG)
7536     emit_insn (gen_move_insn (out, in));
7537
7538 #ifdef HAVE_reload_load_address
7539   else if (HAVE_reload_load_address)
7540     emit_insn (gen_reload_load_address (out, in));
7541 #endif
7542
7543   /* Otherwise, just write (set OUT IN) and hope for the best.  */
7544   else
7545     emit_insn (gen_rtx_SET (VOIDmode, out, in));
7546
7547   /* Return the first insn emitted.
7548      We can not just return get_last_insn, because there may have
7549      been multiple instructions emitted.  Also note that gen_move_insn may
7550      emit more than one insn itself, so we can not assume that there is one
7551      insn emitted per emit_insn_before call.  */
7552
7553   return last ? NEXT_INSN (last) : get_insns ();
7554 }
7555 \f
7556 /* Delete a previously made output-reload
7557    whose result we now believe is not needed.
7558    First we double-check.
7559
7560    INSN is the insn now being processed.
7561    OUTPUT_RELOAD_INSN is the insn of the output reload.
7562    J is the reload-number for this insn.  */
7563
7564 static void
7565 delete_output_reload (insn, j, output_reload_insn)
7566      rtx insn;
7567      int j;
7568      rtx output_reload_insn;
7569 {
7570   register rtx i1;
7571
7572   /* Get the raw pseudo-register referred to.  */
7573
7574   rtx reg = reload_in[j];
7575   while (GET_CODE (reg) == SUBREG)
7576     reg = SUBREG_REG (reg);
7577
7578   /* If the pseudo-reg we are reloading is no longer referenced
7579      anywhere between the store into it and here,
7580      and no jumps or labels intervene, then the value can get
7581      here through the reload reg alone.
7582      Otherwise, give up--return.  */
7583   for (i1 = NEXT_INSN (output_reload_insn);
7584        i1 != insn; i1 = NEXT_INSN (i1))
7585     {
7586       if (GET_CODE (i1) == CODE_LABEL || GET_CODE (i1) == JUMP_INSN)
7587         return;
7588       if ((GET_CODE (i1) == INSN || GET_CODE (i1) == CALL_INSN)
7589           && reg_mentioned_p (reg, PATTERN (i1)))
7590         {
7591           /* If this is just a single USE with an REG_EQUAL note in front
7592              of INSN, this is no problem, because this mentions just the
7593              address that we are using here.
7594              But if there is more than one such USE, the insn might use
7595              the operand directly, or another reload might do that.
7596              This is analogous to the count_occurences check in the callers.  */
7597           int num_occurences = 0;
7598
7599           while (GET_CODE (i1) == INSN && GET_CODE (PATTERN (i1)) == USE
7600                  && find_reg_note (i1, REG_EQUAL, NULL_RTX))
7601             {
7602               num_occurences += rtx_equal_p (reg, XEXP (PATTERN (i1), 0)) != 0;
7603               i1 = NEXT_INSN (i1);
7604             }
7605           if (num_occurences == 1 && i1 == insn)
7606             break;
7607           return;
7608         }
7609     }
7610
7611   /* The caller has already checked that REG dies or is set in INSN.
7612      It has also checked that we are optimizing, and thus some inaccurancies
7613      in the debugging information are acceptable.
7614      So we could just delete output_reload_insn.
7615      But in some cases we can improve the debugging information without
7616      sacrificing optimization - maybe even improving the code:
7617      See if the pseudo reg has been completely replaced
7618      with reload regs.  If so, delete the store insn
7619      and forget we had a stack slot for the pseudo.  */
7620   if (reload_out[j] != reload_in[j]
7621       && REG_N_DEATHS (REGNO (reg)) == 1
7622       && REG_BASIC_BLOCK (REGNO (reg)) >= 0
7623       && find_regno_note (insn, REG_DEAD, REGNO (reg)))
7624     {
7625       rtx i2;
7626
7627       /* We know that it was used only between here
7628          and the beginning of the current basic block.
7629          (We also know that the last use before INSN was
7630          the output reload we are thinking of deleting, but never mind that.)
7631          Search that range; see if any ref remains.  */
7632       for (i2 = PREV_INSN (insn); i2; i2 = PREV_INSN (i2))
7633         {
7634           rtx set = single_set (i2);
7635
7636           /* Uses which just store in the pseudo don't count,
7637              since if they are the only uses, they are dead.  */
7638           if (set != 0 && SET_DEST (set) == reg)
7639             continue;
7640           if (GET_CODE (i2) == CODE_LABEL
7641               || GET_CODE (i2) == JUMP_INSN)
7642             break;
7643           if ((GET_CODE (i2) == INSN || GET_CODE (i2) == CALL_INSN)
7644               && reg_mentioned_p (reg, PATTERN (i2)))
7645             {
7646               /* Some other ref remains; just delete the output reload we
7647                  know to be dead.  */
7648               delete_insn (output_reload_insn);
7649               return;
7650             }
7651         }
7652
7653       /* Delete the now-dead stores into this pseudo.  */
7654       for (i2 = PREV_INSN (insn); i2; i2 = PREV_INSN (i2))
7655         {
7656           rtx set = single_set (i2);
7657
7658           if (set != 0 && SET_DEST (set) == reg)
7659             {
7660               /* This might be a basic block head,
7661                  thus don't use delete_insn.  */
7662               PUT_CODE (i2, NOTE);
7663               NOTE_SOURCE_FILE (i2) = 0;
7664               NOTE_LINE_NUMBER (i2) = NOTE_INSN_DELETED;
7665             }
7666           if (GET_CODE (i2) == CODE_LABEL
7667               || GET_CODE (i2) == JUMP_INSN)
7668             break;
7669         }
7670
7671       /* For the debugging info,
7672          say the pseudo lives in this reload reg.  */
7673       reg_renumber[REGNO (reg)] = REGNO (reload_reg_rtx[j]);
7674       alter_reg (REGNO (reg), -1);
7675     }
7676   delete_insn (output_reload_insn);
7677
7678 }
7679 \f
7680 /* Output reload-insns to reload VALUE into RELOADREG.
7681    VALUE is an autoincrement or autodecrement RTX whose operand
7682    is a register or memory location;
7683    so reloading involves incrementing that location.
7684
7685    INC_AMOUNT is the number to increment or decrement by (always positive).
7686    This cannot be deduced from VALUE.  */
7687
7688 static void
7689 inc_for_reload (reloadreg, value, inc_amount)
7690      rtx reloadreg;
7691      rtx value;
7692      int inc_amount;
7693 {
7694   /* REG or MEM to be copied and incremented.  */
7695   rtx incloc = XEXP (value, 0);
7696   /* Nonzero if increment after copying.  */
7697   int post = (GET_CODE (value) == POST_DEC || GET_CODE (value) == POST_INC);
7698   rtx last;
7699   rtx inc;
7700   rtx add_insn;
7701   int code;
7702
7703   /* No hard register is equivalent to this register after
7704      inc/dec operation.  If REG_LAST_RELOAD_REG were non-zero,
7705      we could inc/dec that register as well (maybe even using it for
7706      the source), but I'm not sure it's worth worrying about.  */
7707   if (GET_CODE (incloc) == REG)
7708     reg_last_reload_reg[REGNO (incloc)] = 0;
7709
7710   if (GET_CODE (value) == PRE_DEC || GET_CODE (value) == POST_DEC)
7711     inc_amount = - inc_amount;
7712
7713   inc = GEN_INT (inc_amount);
7714
7715   /* If this is post-increment, first copy the location to the reload reg.  */
7716   if (post)
7717     emit_insn (gen_move_insn (reloadreg, incloc));
7718
7719   /* See if we can directly increment INCLOC.  Use a method similar to that
7720      in gen_reload.  */
7721
7722   last = get_last_insn ();
7723   add_insn = emit_insn (gen_rtx_SET (VOIDmode, incloc,
7724                                      gen_rtx_PLUS (GET_MODE (incloc),
7725                                                    incloc, inc)));
7726                                                           
7727   code = recog_memoized (add_insn);
7728   if (code >= 0)
7729     {
7730       insn_extract (add_insn);
7731       if (constrain_operands (code, 1))
7732         {
7733           /* If this is a pre-increment and we have incremented the value
7734              where it lives, copy the incremented value to RELOADREG to
7735              be used as an address.  */
7736
7737           if (! post)
7738             emit_insn (gen_move_insn (reloadreg, incloc));
7739
7740           return;
7741         }
7742     }
7743
7744   delete_insns_since (last);
7745
7746   /* If couldn't do the increment directly, must increment in RELOADREG.
7747      The way we do this depends on whether this is pre- or post-increment.
7748      For pre-increment, copy INCLOC to the reload register, increment it
7749      there, then save back.  */
7750
7751   if (! post)
7752     {
7753       emit_insn (gen_move_insn (reloadreg, incloc));
7754       emit_insn (gen_add2_insn (reloadreg, inc));
7755       emit_insn (gen_move_insn (incloc, reloadreg));
7756     }
7757   else
7758     {
7759       /* Postincrement.
7760          Because this might be a jump insn or a compare, and because RELOADREG
7761          may not be available after the insn in an input reload, we must do
7762          the incrementation before the insn being reloaded for.
7763
7764          We have already copied INCLOC to RELOADREG.  Increment the copy in
7765          RELOADREG, save that back, then decrement RELOADREG so it has
7766          the original value.  */
7767
7768       emit_insn (gen_add2_insn (reloadreg, inc));
7769       emit_insn (gen_move_insn (incloc, reloadreg));
7770       emit_insn (gen_add2_insn (reloadreg, GEN_INT (-inc_amount)));
7771     }
7772
7773   return;
7774 }
7775 \f
7776 /* Return 1 if we are certain that the constraint-string STRING allows
7777    the hard register REG.  Return 0 if we can't be sure of this.  */
7778
7779 static int
7780 constraint_accepts_reg_p (string, reg)
7781      char *string;
7782      rtx reg;
7783 {
7784   int value = 0;
7785   int regno = true_regnum (reg);
7786   int c;
7787
7788   /* Initialize for first alternative.  */
7789   value = 0;
7790   /* Check that each alternative contains `g' or `r'.  */
7791   while (1)
7792     switch (c = *string++)
7793       {
7794       case 0:
7795         /* If an alternative lacks `g' or `r', we lose.  */
7796         return value;
7797       case ',':
7798         /* If an alternative lacks `g' or `r', we lose.  */
7799         if (value == 0)
7800           return 0;
7801         /* Initialize for next alternative.  */
7802         value = 0;
7803         break;
7804       case 'g':
7805       case 'r':
7806         /* Any general reg wins for this alternative.  */
7807         if (TEST_HARD_REG_BIT (reg_class_contents[(int) GENERAL_REGS], regno))
7808           value = 1;
7809         break;
7810       default:
7811         /* Any reg in specified class wins for this alternative.  */
7812         {
7813           enum reg_class class = REG_CLASS_FROM_LETTER (c);
7814
7815           if (TEST_HARD_REG_BIT (reg_class_contents[(int) class], regno))
7816             value = 1;
7817         }
7818       }
7819 }
7820 \f
7821 /* Return the number of places FIND appears within X, but don't count
7822    an occurrence if some SET_DEST is FIND.  */
7823
7824 int
7825 count_occurrences (x, find)
7826      register rtx x, find;
7827 {
7828   register int i, j;
7829   register enum rtx_code code;
7830   register char *format_ptr;
7831   int count;
7832
7833   if (x == find)
7834     return 1;
7835   if (x == 0)
7836     return 0;
7837
7838   code = GET_CODE (x);
7839
7840   switch (code)
7841     {
7842     case REG:
7843     case QUEUED:
7844     case CONST_INT:
7845     case CONST_DOUBLE:
7846     case SYMBOL_REF:
7847     case CODE_LABEL:
7848     case PC:
7849     case CC0:
7850       return 0;
7851
7852     case SET:
7853       if (SET_DEST (x) == find)
7854         return count_occurrences (SET_SRC (x), find);
7855       break;
7856       
7857     default:
7858       break;
7859     }
7860
7861   format_ptr = GET_RTX_FORMAT (code);
7862   count = 0;
7863
7864   for (i = 0; i < GET_RTX_LENGTH (code); i++)
7865     {
7866       switch (*format_ptr++)
7867         {
7868         case 'e':
7869           count += count_occurrences (XEXP (x, i), find);
7870           break;
7871
7872         case 'E':
7873           if (XVEC (x, i) != NULL)
7874             {
7875               for (j = 0; j < XVECLEN (x, i); j++)
7876                 count += count_occurrences (XVECEXP (x, i, j), find);
7877             }
7878           break;
7879         }
7880     }
7881   return count;
7882 }
7883 \f
7884 /* This array holds values which are equivalent to a hard register
7885    during reload_cse_regs.  Each array element is an EXPR_LIST of
7886    values.  Each time a hard register is set, we set the corresponding
7887    array element to the value.  Each time a hard register is copied
7888    into memory, we add the memory location to the corresponding array
7889    element.  We don't store values or memory addresses with side
7890    effects in this array.
7891
7892    If the value is a CONST_INT, then the mode of the containing
7893    EXPR_LIST is the mode in which that CONST_INT was referenced.
7894
7895    We sometimes clobber a specific entry in a list.  In that case, we
7896    just set XEXP (list-entry, 0) to 0.  */
7897
7898 static rtx *reg_values;
7899
7900 /* This is a preallocated REG rtx which we use as a temporary in
7901    reload_cse_invalidate_regno, so that we don't need to allocate a
7902    new one each time through a loop in that function.  */
7903
7904 static rtx invalidate_regno_rtx;
7905
7906 /* This is a set of registers for which we must remove REG_DEAD notes in
7907    previous insns, because our modifications made them invalid.  That can
7908    happen if we introduced the register into the current insn, or we deleted
7909    the current insn which used to set the register.  */
7910
7911 static HARD_REG_SET no_longer_dead_regs;
7912
7913 /* Invalidate any entries in reg_values which depend on REGNO,
7914    including those for REGNO itself.  This is called if REGNO is
7915    changing.  If CLOBBER is true, then always forget anything we
7916    currently know about REGNO.  MODE is the mode of the assignment to
7917    REGNO, which is used to determine how many hard registers are being
7918    changed.  If MODE is VOIDmode, then only REGNO is being changed;
7919    this is used when invalidating call clobbered registers across a
7920    call.  */
7921
7922 static void
7923 reload_cse_invalidate_regno (regno, mode, clobber)
7924      int regno;
7925      enum machine_mode mode;
7926      int clobber;
7927 {
7928   int endregno;
7929   register int i;
7930
7931   /* Our callers don't always go through true_regnum; we may see a
7932      pseudo-register here from a CLOBBER or the like.  We probably
7933      won't ever see a pseudo-register that has a real register number,
7934      for we check anyhow for safety.  */
7935   if (regno >= FIRST_PSEUDO_REGISTER)
7936     regno = reg_renumber[regno];
7937   if (regno < 0)
7938     return;
7939
7940   if (mode == VOIDmode)
7941     endregno = regno + 1;
7942   else
7943     endregno = regno + HARD_REGNO_NREGS (regno, mode);
7944
7945   if (clobber)
7946     for (i = regno; i < endregno; i++)
7947       reg_values[i] = 0;
7948
7949   for (i = 0; i < FIRST_PSEUDO_REGISTER; i++)
7950     {
7951       rtx x;
7952
7953       for (x = reg_values[i]; x; x = XEXP (x, 1))
7954         {
7955           if (XEXP (x, 0) != 0
7956               && refers_to_regno_p (regno, endregno, XEXP (x, 0), NULL_PTR))
7957             {
7958               /* If this is the only entry on the list, clear
7959                  reg_values[i].  Otherwise, just clear this entry on
7960                  the list.  */
7961               if (XEXP (x, 1) == 0 && x == reg_values[i])
7962                 {
7963                   reg_values[i] = 0;
7964                   break;
7965                 }
7966               XEXP (x, 0) = 0;
7967             }
7968         }
7969     }
7970
7971   /* We must look at earlier registers, in case REGNO is part of a
7972      multi word value but is not the first register.  If an earlier
7973      register has a value in a mode which overlaps REGNO, then we must
7974      invalidate that earlier register.  Note that we do not need to
7975      check REGNO or later registers (we must not check REGNO itself,
7976      because we would incorrectly conclude that there was a conflict).  */
7977
7978   for (i = 0; i < regno; i++)
7979     {
7980       rtx x;
7981
7982       for (x = reg_values[i]; x; x = XEXP (x, 1))
7983         {
7984           if (XEXP (x, 0) != 0)
7985             {
7986               PUT_MODE (invalidate_regno_rtx, GET_MODE (x));
7987               REGNO (invalidate_regno_rtx) = i;
7988               if (refers_to_regno_p (regno, endregno, invalidate_regno_rtx,
7989                                      NULL_PTR))
7990                 {
7991                   reload_cse_invalidate_regno (i, VOIDmode, 1);
7992                   break;
7993                 }
7994             }
7995         }
7996     }
7997 }
7998
7999 /* The memory at address MEM_BASE is being changed.
8000    Return whether this change will invalidate VAL.  */
8001
8002 static int
8003 reload_cse_mem_conflict_p (mem_base, val)
8004      rtx mem_base;
8005      rtx val;
8006 {
8007   enum rtx_code code;
8008   char *fmt;
8009   int i;
8010
8011   code = GET_CODE (val);
8012   switch (code)
8013     {
8014       /* Get rid of a few simple cases quickly. */
8015     case REG:
8016     case PC:
8017     case CC0:
8018     case SCRATCH:
8019     case CONST:
8020     case CONST_INT:
8021     case CONST_DOUBLE:
8022     case SYMBOL_REF:
8023     case LABEL_REF:
8024       return 0;
8025
8026     case MEM:
8027       if (GET_MODE (mem_base) == BLKmode
8028           || GET_MODE (val) == BLKmode)
8029         return 1;
8030       if (anti_dependence (val, mem_base))
8031         return 1;
8032       /* The address may contain nested MEMs.  */
8033       break;
8034
8035     default:
8036       break;
8037     }
8038
8039   fmt = GET_RTX_FORMAT (code);
8040
8041   for (i = GET_RTX_LENGTH (code) - 1; i >= 0; i--)
8042     {
8043       if (fmt[i] == 'e')
8044         {
8045           if (reload_cse_mem_conflict_p (mem_base, XEXP (val, i)))
8046             return 1;
8047         }
8048       else if (fmt[i] == 'E')
8049         {
8050           int j;
8051
8052           for (j = 0; j < XVECLEN (val, i); j++)
8053             if (reload_cse_mem_conflict_p (mem_base, XVECEXP (val, i, j)))
8054               return 1;
8055         }
8056     }
8057
8058   return 0;
8059 }
8060
8061 /* Invalidate any entries in reg_values which are changed because of a
8062    store to MEM_RTX.  If this is called because of a non-const call
8063    instruction, MEM_RTX is (mem:BLK const0_rtx).  */
8064
8065 static void
8066 reload_cse_invalidate_mem (mem_rtx)
8067      rtx mem_rtx;
8068 {
8069   register int i;
8070
8071   for (i = 0; i < FIRST_PSEUDO_REGISTER; i++)
8072     {
8073       rtx x;
8074
8075       for (x = reg_values[i]; x; x = XEXP (x, 1))
8076         {
8077           if (XEXP (x, 0) != 0
8078               && reload_cse_mem_conflict_p (mem_rtx, XEXP (x, 0)))
8079             {
8080               /* If this is the only entry on the list, clear
8081                  reg_values[i].  Otherwise, just clear this entry on
8082                  the list.  */
8083               if (XEXP (x, 1) == 0 && x == reg_values[i])
8084                 {
8085                   reg_values[i] = 0;
8086                   break;
8087                 }
8088               XEXP (x, 0) = 0;
8089             }
8090         }
8091     }
8092 }
8093
8094 /* Invalidate DEST, which is being assigned to or clobbered.  The
8095    second parameter exists so that this function can be passed to
8096    note_stores; it is ignored.  */
8097
8098 static void
8099 reload_cse_invalidate_rtx (dest, ignore)
8100      rtx dest;
8101      rtx ignore ATTRIBUTE_UNUSED;
8102 {
8103   while (GET_CODE (dest) == STRICT_LOW_PART
8104          || GET_CODE (dest) == SIGN_EXTRACT
8105          || GET_CODE (dest) == ZERO_EXTRACT
8106          || GET_CODE (dest) == SUBREG)
8107     dest = XEXP (dest, 0);
8108
8109   if (GET_CODE (dest) == REG)
8110     reload_cse_invalidate_regno (REGNO (dest), GET_MODE (dest), 1);
8111   else if (GET_CODE (dest) == MEM)
8112     reload_cse_invalidate_mem (dest);
8113 }
8114
8115 /* Possibly delete death notes on the insns before INSN if modifying INSN
8116    extended the lifespan of the registers.  */
8117
8118 static void
8119 reload_cse_delete_death_notes (insn)
8120      rtx insn;
8121 {
8122   int dreg;
8123
8124   for (dreg = 0; dreg < FIRST_PSEUDO_REGISTER; dreg++)
8125     {
8126       rtx trial;
8127
8128       if (! TEST_HARD_REG_BIT (no_longer_dead_regs, dreg))
8129         continue;
8130
8131       for (trial = prev_nonnote_insn (insn);
8132            (trial
8133             && GET_CODE (trial) != CODE_LABEL
8134             && GET_CODE (trial) != BARRIER);
8135            trial = prev_nonnote_insn (trial))
8136         {
8137           if (find_regno_note (trial, REG_DEAD, dreg))
8138             {
8139               remove_death (dreg, trial);
8140               break;
8141             }
8142         }
8143     }
8144 }
8145
8146 /* Record that the current insn uses hard reg REGNO in mode MODE.  This
8147    will be used in reload_cse_delete_death_notes to delete prior REG_DEAD
8148    notes for this register.  */
8149
8150 static void
8151 reload_cse_no_longer_dead (regno, mode)
8152      int regno;
8153      enum machine_mode mode;
8154 {
8155   int nregs = HARD_REGNO_NREGS (regno, mode);
8156   while (nregs-- > 0)
8157     {
8158       SET_HARD_REG_BIT (no_longer_dead_regs, regno);
8159       regno++;
8160     }
8161 }
8162
8163
8164 /* Do a very simple CSE pass over the hard registers.
8165
8166    This function detects no-op moves where we happened to assign two
8167    different pseudo-registers to the same hard register, and then
8168    copied one to the other.  Reload will generate a useless
8169    instruction copying a register to itself.
8170
8171    This function also detects cases where we load a value from memory
8172    into two different registers, and (if memory is more expensive than
8173    registers) changes it to simply copy the first register into the
8174    second register.  
8175
8176    Another optimization is performed that scans the operands of each
8177    instruction to see whether the value is already available in a
8178    hard register.  It then replaces the operand with the hard register
8179    if possible, much like an optional reload would.  */
8180
8181 void
8182 reload_cse_regs (first)
8183      rtx first;
8184 {
8185   char *firstobj;
8186   rtx callmem;
8187   register int i;
8188   rtx insn;
8189
8190   init_alias_analysis ();
8191
8192   reg_values = (rtx *) alloca (FIRST_PSEUDO_REGISTER * sizeof (rtx));
8193   bzero ((char *)reg_values, FIRST_PSEUDO_REGISTER * sizeof (rtx));
8194
8195   /* Create our EXPR_LIST structures on reload_obstack, so that we can
8196      free them when we are done.  */
8197   push_obstacks (&reload_obstack, &reload_obstack);
8198   firstobj = (char *) obstack_alloc (&reload_obstack, 0);
8199
8200   /* We pass this to reload_cse_invalidate_mem to invalidate all of
8201      memory for a non-const call instruction.  */
8202   callmem = gen_rtx_MEM (BLKmode, const0_rtx);
8203
8204   /* This is used in reload_cse_invalidate_regno to avoid consing a
8205      new REG in a loop in that function.  */
8206   invalidate_regno_rtx = gen_rtx_REG (VOIDmode, 0);
8207
8208   for (insn = first; insn; insn = NEXT_INSN (insn))
8209     {
8210       rtx body;
8211
8212       if (GET_CODE (insn) == CODE_LABEL)
8213         {
8214           /* Forget all the register values at a code label.  We don't
8215              try to do anything clever around jumps.  */
8216           for (i = 0; i < FIRST_PSEUDO_REGISTER; i++)
8217             reg_values[i] = 0;
8218
8219           continue;
8220         }
8221
8222 #ifdef NON_SAVING_SETJMP 
8223       if (NON_SAVING_SETJMP && GET_CODE (insn) == NOTE
8224           && NOTE_LINE_NUMBER (insn) == NOTE_INSN_SETJMP)
8225         {
8226           for (i = 0; i < FIRST_PSEUDO_REGISTER; i++)
8227             reg_values[i] = 0;
8228
8229           continue;
8230         }
8231 #endif
8232
8233       if (GET_RTX_CLASS (GET_CODE (insn)) != 'i')
8234         continue;
8235
8236       CLEAR_HARD_REG_SET (no_longer_dead_regs);
8237
8238       /* If this is a call instruction, forget anything stored in a
8239          call clobbered register, or, if this is not a const call, in
8240          memory.  */
8241       if (GET_CODE (insn) == CALL_INSN)
8242         {
8243           for (i = 0; i < FIRST_PSEUDO_REGISTER; i++)
8244             if (call_used_regs[i])
8245               reload_cse_invalidate_regno (i, VOIDmode, 1);
8246
8247           if (! CONST_CALL_P (insn))
8248             reload_cse_invalidate_mem (callmem);
8249         }
8250
8251       body = PATTERN (insn);
8252       if (GET_CODE (body) == SET)
8253         {
8254           int count = 0;
8255           if (reload_cse_noop_set_p (body, insn))
8256             {
8257               PUT_CODE (insn, NOTE);
8258               NOTE_LINE_NUMBER (insn) = NOTE_INSN_DELETED;
8259               NOTE_SOURCE_FILE (insn) = 0;
8260               reload_cse_delete_death_notes (insn);
8261
8262               /* We're done with this insn.  */
8263               continue;
8264             }
8265
8266           /* It's not a no-op, but we can try to simplify it.  */
8267           CLEAR_HARD_REG_SET (no_longer_dead_regs);
8268           count += reload_cse_simplify_set (body, insn);
8269
8270           if (count > 0 && apply_change_group ())
8271             reload_cse_delete_death_notes (insn);
8272           else if (reload_cse_simplify_operands (insn))
8273             reload_cse_delete_death_notes (insn);
8274             
8275           reload_cse_record_set (body, body);
8276         }
8277       else if (GET_CODE (body) == PARALLEL)
8278         {
8279           int count = 0;
8280
8281           /* If every action in a PARALLEL is a noop, we can delete
8282              the entire PARALLEL.  */
8283           for (i = XVECLEN (body, 0) - 1; i >= 0; --i)
8284             if ((GET_CODE (XVECEXP (body, 0, i)) != SET
8285                  || ! reload_cse_noop_set_p (XVECEXP (body, 0, i), insn))
8286                 && GET_CODE (XVECEXP (body, 0, i)) != CLOBBER)
8287               break;
8288           if (i < 0)
8289             {
8290               PUT_CODE (insn, NOTE);
8291               NOTE_LINE_NUMBER (insn) = NOTE_INSN_DELETED;
8292               NOTE_SOURCE_FILE (insn) = 0;
8293               reload_cse_delete_death_notes (insn);
8294
8295               /* We're done with this insn.  */
8296               continue;
8297             }
8298           
8299           /* It's not a no-op, but we can try to simplify it.  */
8300           CLEAR_HARD_REG_SET (no_longer_dead_regs);
8301           for (i = XVECLEN (body, 0) - 1; i >= 0; --i)
8302             if (GET_CODE (XVECEXP (body, 0, i)) == SET)
8303               count += reload_cse_simplify_set (XVECEXP (body, 0, i), insn);
8304
8305           if (count > 0 && apply_change_group ())
8306             reload_cse_delete_death_notes (insn);
8307           else if (reload_cse_simplify_operands (insn))
8308             reload_cse_delete_death_notes (insn);
8309
8310           /* Look through the PARALLEL and record the values being
8311              set, if possible.  Also handle any CLOBBERs.  */
8312           for (i = XVECLEN (body, 0) - 1; i >= 0; --i)
8313             {
8314               rtx x = XVECEXP (body, 0, i);
8315
8316               if (GET_CODE (x) == SET)
8317                 reload_cse_record_set (x, body);
8318               else
8319                 note_stores (x, reload_cse_invalidate_rtx);
8320             }
8321         }
8322       else
8323         note_stores (body, reload_cse_invalidate_rtx);
8324
8325 #ifdef AUTO_INC_DEC
8326       /* Clobber any registers which appear in REG_INC notes.  We
8327          could keep track of the changes to their values, but it is
8328          unlikely to help.  */
8329       {
8330         rtx x;
8331
8332         for (x = REG_NOTES (insn); x; x = XEXP (x, 1))
8333           if (REG_NOTE_KIND (x) == REG_INC)
8334             reload_cse_invalidate_rtx (XEXP (x, 0), NULL_RTX);
8335       }
8336 #endif
8337
8338       /* Look for any CLOBBERs in CALL_INSN_FUNCTION_USAGE, but only
8339          after we have processed the insn.  */
8340       if (GET_CODE (insn) == CALL_INSN)
8341         {
8342           rtx x;
8343
8344           for (x = CALL_INSN_FUNCTION_USAGE (insn); x; x = XEXP (x, 1))
8345             if (GET_CODE (XEXP (x, 0)) == CLOBBER)
8346               reload_cse_invalidate_rtx (XEXP (XEXP (x, 0), 0), NULL_RTX);
8347         }
8348     }
8349
8350   /* Free all the temporary structures we created, and go back to the
8351      regular obstacks.  */
8352   obstack_free (&reload_obstack, firstobj);
8353   pop_obstacks ();
8354 }
8355
8356 /* Return whether the values known for REGNO are equal to VAL.  MODE
8357    is the mode of the object that VAL is being copied to; this matters
8358    if VAL is a CONST_INT.  */
8359
8360 static int
8361 reload_cse_regno_equal_p (regno, val, mode)
8362      int regno;
8363      rtx val;
8364      enum machine_mode mode;
8365 {
8366   rtx x;
8367
8368   if (val == 0)
8369     return 0;
8370
8371   for (x = reg_values[regno]; x; x = XEXP (x, 1))
8372     if (XEXP (x, 0) != 0
8373         && rtx_equal_p (XEXP (x, 0), val)
8374         && (! flag_float_store || GET_CODE (XEXP (x, 0)) != MEM
8375             || GET_MODE_CLASS (GET_MODE (x)) != MODE_FLOAT)
8376         && (GET_CODE (val) != CONST_INT
8377             || mode == GET_MODE (x)
8378             || (GET_MODE_SIZE (mode) < GET_MODE_SIZE (GET_MODE (x))
8379                 /* On a big endian machine if the value spans more than
8380                    one register then this register holds the high part of
8381                    it and we can't use it.
8382
8383                    ??? We should also compare with the high part of the
8384                    value.  */
8385                 && !(WORDS_BIG_ENDIAN
8386                      && HARD_REGNO_NREGS (regno, GET_MODE (x)) > 1)
8387                 && TRULY_NOOP_TRUNCATION (GET_MODE_BITSIZE (mode),
8388                                           GET_MODE_BITSIZE (GET_MODE (x))))))
8389       return 1;
8390
8391   return 0;
8392 }
8393
8394 /* See whether a single set is a noop.  SET is the set instruction we
8395    are should check, and INSN is the instruction from which it came.  */
8396
8397 static int
8398 reload_cse_noop_set_p (set, insn)
8399      rtx set;
8400      rtx insn;
8401 {
8402   rtx src, dest;
8403   enum machine_mode dest_mode;
8404   int dreg, sreg;
8405   int ret;
8406
8407   src = SET_SRC (set);
8408   dest = SET_DEST (set);
8409   dest_mode = GET_MODE (dest);
8410
8411   if (side_effects_p (src))
8412     return 0;
8413
8414   dreg = true_regnum (dest);
8415   sreg = true_regnum (src);
8416
8417   /* Check for setting a register to itself.  In this case, we don't
8418      have to worry about REG_DEAD notes.  */
8419   if (dreg >= 0 && dreg == sreg)
8420     return 1;
8421
8422   ret = 0;
8423   if (dreg >= 0)
8424     {
8425       /* Check for setting a register to itself.  */
8426       if (dreg == sreg)
8427         ret = 1;
8428
8429       /* Check for setting a register to a value which we already know
8430          is in the register.  */
8431       else if (reload_cse_regno_equal_p (dreg, src, dest_mode))
8432         ret = 1;
8433
8434       /* Check for setting a register DREG to another register SREG
8435          where SREG is equal to a value which is already in DREG.  */
8436       else if (sreg >= 0)
8437         {
8438           rtx x;
8439
8440           for (x = reg_values[sreg]; x; x = XEXP (x, 1))
8441             {
8442               rtx tmp;
8443
8444               if (XEXP (x, 0) == 0)
8445                 continue;
8446
8447               if (dest_mode == GET_MODE (x))
8448                 tmp = XEXP (x, 0);
8449               else if (GET_MODE_BITSIZE (dest_mode)
8450                        < GET_MODE_BITSIZE (GET_MODE (x)))
8451                 tmp = gen_lowpart_common (dest_mode, XEXP (x, 0));
8452               else
8453                 continue;
8454
8455               if (tmp
8456                   && reload_cse_regno_equal_p (dreg, tmp, dest_mode))
8457                 {
8458                   ret = 1;
8459                   break;
8460                 }
8461             }
8462         }
8463     }
8464   else if (GET_CODE (dest) == MEM)
8465     {
8466       /* Check for storing a register to memory when we know that the
8467          register is equivalent to the memory location. */
8468       if (sreg >= 0
8469           && reload_cse_regno_equal_p (sreg, dest, dest_mode)
8470           && ! side_effects_p (dest))
8471         ret = 1;
8472     }
8473
8474   /* If we can delete this SET, then we need to look for an earlier
8475      REG_DEAD note on DREG, and remove it if it exists.  */
8476   if (ret && dreg >= 0)
8477     {
8478       if (! find_regno_note (insn, REG_UNUSED, dreg))
8479         reload_cse_no_longer_dead (dreg, dest_mode);
8480     }
8481
8482   return ret;
8483 }
8484
8485 /* Try to simplify a single SET instruction.  SET is the set pattern.
8486    INSN is the instruction it came from.
8487    This function only handles one case: if we set a register to a value
8488    which is not a register, we try to find that value in some other register
8489    and change the set into a register copy.  */
8490
8491 static int
8492 reload_cse_simplify_set (set, insn)
8493      rtx set;
8494      rtx insn;
8495 {
8496   int dreg;
8497   rtx src;
8498   enum machine_mode dest_mode;
8499   enum reg_class dclass;
8500   register int i;
8501
8502   dreg = true_regnum (SET_DEST (set));
8503   if (dreg < 0)
8504     return 0;
8505
8506   src = SET_SRC (set);
8507   if (side_effects_p (src) || true_regnum (src) >= 0)
8508     return 0;
8509
8510   dclass = REGNO_REG_CLASS (dreg);
8511
8512   /* If memory loads are cheaper than register copies, don't change them.  */
8513   if (GET_CODE (src) == MEM
8514       && MEMORY_MOVE_COST (GET_MODE (src), dclass, 1) < 2)
8515     return 0;
8516
8517   /* If the constant is cheaper than a register, don't change it.  */
8518   if (CONSTANT_P (src)
8519       && rtx_cost (src, SET) < 2)
8520     return 0;
8521
8522   dest_mode = GET_MODE (SET_DEST (set));
8523   for (i = 0; i < FIRST_PSEUDO_REGISTER; i++)
8524     {
8525       if (i != dreg
8526           && REGISTER_MOVE_COST (REGNO_REG_CLASS (i), dclass) == 2
8527           && reload_cse_regno_equal_p (i, src, dest_mode))
8528         {
8529           int validated;
8530
8531           /* Pop back to the real obstacks while changing the insn.  */
8532           pop_obstacks ();
8533
8534           validated = validate_change (insn, &SET_SRC (set),
8535                                        gen_rtx_REG (dest_mode, i), 1);
8536
8537           /* Go back to the obstack we are using for temporary
8538              storage.  */
8539           push_obstacks (&reload_obstack, &reload_obstack);
8540
8541           if (validated && ! find_regno_note (insn, REG_UNUSED, i))
8542             {
8543               reload_cse_no_longer_dead (i, dest_mode);
8544               return 1;
8545             }
8546         }
8547     }
8548   return 0;
8549 }
8550
8551 /* Try to replace operands in INSN with equivalent values that are already
8552    in registers.  This can be viewed as optional reloading.  
8553  
8554    For each non-register operand in the insn, see if any hard regs are
8555    known to be equivalent to that operand.  Record the alternatives which
8556    can accept these hard registers.  Among all alternatives, select the
8557    ones which are better or equal to the one currently matching, where
8558    "better" is in terms of '?' and '!' constraints.  Among the remaining
8559    alternatives, select the one which replaces most operands with
8560    hard registers.  */
8561
8562 static int
8563 reload_cse_simplify_operands (insn)
8564      rtx insn;
8565 {
8566 #ifdef REGISTER_CONSTRAINTS
8567   int insn_code_number, n_operands, n_alternatives;
8568   int i,j;
8569
8570   char *constraints[MAX_RECOG_OPERANDS];
8571   
8572   /* Vector recording how bad an alternative is.  */
8573   int *alternative_reject;
8574   /* Vector recording how many registers can be introduced by choosing
8575      this alternative.  */
8576   int *alternative_nregs;
8577   /* Array of vectors recording, for each operand and each alternative,
8578      which hard register to substitute, or -1 if the operand should be
8579      left as it is.  */
8580   int *op_alt_regno[MAX_RECOG_OPERANDS];
8581   /* Array of alternatives, sorted in order of decreasing desirability.  */
8582   int *alternative_order;
8583   rtx reg = gen_rtx_REG (VOIDmode, -1);
8584   
8585   /* Find out some information about this insn.  */
8586   insn_code_number = recog_memoized (insn);
8587   /* We don't modify asm instructions.  */
8588   if (insn_code_number < 0)
8589     return 0;
8590
8591   n_operands = insn_n_operands[insn_code_number];
8592   n_alternatives = insn_n_alternatives[insn_code_number];
8593   
8594   if (n_alternatives == 0 || n_operands == 0)
8595     return 0;
8596   insn_extract (insn);
8597
8598   /* Figure out which alternative currently matches.  */
8599   if (! constrain_operands (insn_code_number, 1))
8600     fatal_insn_not_found (insn);
8601
8602   alternative_reject = (int *) alloca (n_alternatives * sizeof (int));
8603   alternative_nregs = (int *) alloca (n_alternatives * sizeof (int));
8604   alternative_order = (int *) alloca (n_alternatives * sizeof (int));
8605   bzero ((char *)alternative_reject, n_alternatives * sizeof (int));
8606   bzero ((char *)alternative_nregs, n_alternatives * sizeof (int));
8607
8608   for (i = 0; i < n_operands; i++)
8609     {
8610       enum machine_mode mode;
8611       int regno;
8612       char *p;
8613
8614       op_alt_regno[i] = (int *) alloca (n_alternatives * sizeof (int));
8615       for (j = 0; j < n_alternatives; j++)
8616         op_alt_regno[i][j] = -1;
8617
8618       p = constraints[i] = insn_operand_constraint[insn_code_number][i];
8619       mode = insn_operand_mode[insn_code_number][i];
8620
8621       /* Add the reject values for each alternative given by the constraints
8622          for this operand.  */
8623       j = 0;
8624       while (*p != '\0')
8625         {
8626           char c = *p++;
8627           if (c == ',')
8628             j++;
8629           else if (c == '?')
8630             alternative_reject[j] += 3;
8631           else if (c == '!')
8632             alternative_reject[j] += 300;
8633         }
8634
8635       /* We won't change operands which are already registers.  We
8636          also don't want to modify output operands.  */
8637       regno = true_regnum (recog_operand[i]);
8638       if (regno >= 0
8639           || constraints[i][0] == '='
8640           || constraints[i][0] == '+')
8641         continue;
8642
8643       for (regno = 0; regno < FIRST_PSEUDO_REGISTER; regno++)
8644         {
8645           int class = (int) NO_REGS;
8646
8647           if (! reload_cse_regno_equal_p (regno, recog_operand[i], mode))
8648             continue;
8649
8650           REGNO (reg) = regno;
8651           PUT_MODE (reg, mode);
8652
8653           /* We found a register equal to this operand.  Now look for all
8654              alternatives that can accept this register and have not been
8655              assigned a register they can use yet.  */
8656           j = 0;
8657           p = constraints[i];
8658           for (;;)
8659             {
8660               char c = *p++;
8661               
8662               switch (c)
8663                 {
8664                 case '=':  case '+':  case '?':
8665                 case '#':  case '&':  case '!':
8666                 case '*':  case '%':  
8667                 case '0':  case '1':  case '2':  case '3':  case '4':
8668                 case 'm':  case '<':  case '>':  case 'V':  case 'o':
8669                 case 'E':  case 'F':  case 'G':  case 'H':
8670                 case 's':  case 'i':  case 'n':
8671                 case 'I':  case 'J':  case 'K':  case 'L':
8672                 case 'M':  case 'N':  case 'O':  case 'P':
8673 #ifdef EXTRA_CONSTRAINT
8674                 case 'Q':  case 'R':  case 'S':  case 'T':  case 'U':
8675 #endif
8676                 case 'p': case 'X':
8677                   /* These don't say anything we care about.  */
8678                   break;
8679
8680                 case 'g': case 'r':
8681                   class = reg_class_subunion[(int) class][(int) GENERAL_REGS];
8682                   break;
8683
8684                 default:
8685                   class
8686                     = reg_class_subunion[(int) class][(int) REG_CLASS_FROM_LETTER (c)];
8687                   break;
8688
8689                 case ',': case '\0':
8690                   /* See if REGNO fits this alternative, and set it up as the
8691                      replacement register if we don't have one for this
8692                      alternative yet and the operand being replaced is not
8693                      a cheap CONST_INT. */
8694                   if (op_alt_regno[i][j] == -1
8695                       && reg_fits_class_p (reg, class, 0, mode)
8696                       && (GET_CODE (recog_operand[i]) != CONST_INT
8697                           || rtx_cost (recog_operand[i], SET) > rtx_cost (reg, SET)))
8698                     {
8699                       alternative_nregs[j]++;
8700                       op_alt_regno[i][j] = regno;
8701                     }
8702                   j++;
8703                   break;
8704                 }
8705
8706               if (c == '\0')
8707                 break;
8708             }
8709         }
8710     }
8711
8712   /* Record all alternatives which are better or equal to the currently
8713      matching one in the alternative_order array.  */
8714   for (i = j = 0; i < n_alternatives; i++)
8715     if (alternative_reject[i] <= alternative_reject[which_alternative])
8716       alternative_order[j++] = i;
8717   n_alternatives = j;
8718
8719   /* Sort it.  Given a small number of alternatives, a dumb algorithm
8720      won't hurt too much.  */
8721   for (i = 0; i < n_alternatives - 1; i++)
8722     {
8723       int best = i;
8724       int best_reject = alternative_reject[alternative_order[i]];
8725       int best_nregs = alternative_nregs[alternative_order[i]];
8726       int tmp;
8727
8728       for (j = i + 1; j < n_alternatives; j++)
8729         {
8730           int this_reject = alternative_reject[alternative_order[j]];
8731           int this_nregs = alternative_nregs[alternative_order[j]];
8732
8733           if (this_reject < best_reject
8734               || (this_reject == best_reject && this_nregs < best_nregs))
8735             {
8736               best = j;
8737               best_reject = this_reject;
8738               best_nregs = this_nregs;
8739             }
8740         }
8741       
8742       tmp = alternative_order[best];
8743       alternative_order[best] = alternative_order[i];
8744       alternative_order[i] = tmp;
8745     }
8746   
8747   /* Substitute the operands as determined by op_alt_regno for the best
8748      alternative.  */
8749   j = alternative_order[0];
8750   CLEAR_HARD_REG_SET (no_longer_dead_regs);
8751
8752   /* Pop back to the real obstacks while changing the insn.  */
8753   pop_obstacks ();
8754
8755   for (i = 0; i < n_operands; i++)
8756     {
8757       enum machine_mode mode = insn_operand_mode[insn_code_number][i];
8758       if (op_alt_regno[i][j] == -1)
8759         continue;
8760
8761       reload_cse_no_longer_dead (op_alt_regno[i][j], mode);
8762       validate_change (insn, recog_operand_loc[i],
8763                        gen_rtx_REG (mode, op_alt_regno[i][j]), 1);
8764     }
8765
8766   for (i = insn_n_dups[insn_code_number] - 1; i >= 0; i--)
8767     {
8768       int op = recog_dup_num[i];
8769       enum machine_mode mode = insn_operand_mode[insn_code_number][op];
8770
8771       if (op_alt_regno[op][j] == -1)
8772         continue;
8773
8774       reload_cse_no_longer_dead (op_alt_regno[op][j], mode);
8775       validate_change (insn, recog_dup_loc[i],
8776                        gen_rtx_REG (mode, op_alt_regno[op][j]), 1);
8777     }
8778
8779   /* Go back to the obstack we are using for temporary
8780      storage.  */
8781   push_obstacks (&reload_obstack, &reload_obstack);
8782
8783   return apply_change_group ();
8784 #else
8785   return 0;
8786 #endif
8787 }
8788
8789 /* These two variables are used to pass information from
8790    reload_cse_record_set to reload_cse_check_clobber.  */
8791
8792 static int reload_cse_check_clobbered;
8793 static rtx reload_cse_check_src;
8794
8795 /* See if DEST overlaps with RELOAD_CSE_CHECK_SRC. If it does, set
8796    RELOAD_CSE_CHECK_CLOBBERED.  This is called via note_stores.  The
8797    second argument, which is passed by note_stores, is ignored.  */
8798
8799 static void
8800 reload_cse_check_clobber (dest, ignore)
8801      rtx dest;
8802      rtx ignore ATTRIBUTE_UNUSED;
8803 {
8804   if (reg_overlap_mentioned_p (dest, reload_cse_check_src))
8805     reload_cse_check_clobbered = 1;
8806 }
8807
8808 /* Record the result of a SET instruction.  SET is the set pattern.
8809    BODY is the pattern of the insn that it came from.  */
8810
8811 static void
8812 reload_cse_record_set (set, body)
8813      rtx set;
8814      rtx body;
8815 {
8816   rtx dest, src, x;
8817   int dreg, sreg;
8818   enum machine_mode dest_mode;
8819
8820   dest = SET_DEST (set);
8821   src = SET_SRC (set);
8822   dreg = true_regnum (dest);
8823   sreg = true_regnum (src);
8824   dest_mode = GET_MODE (dest);
8825
8826   /* Some machines don't define AUTO_INC_DEC, but they still use push
8827      instructions.  We need to catch that case here in order to
8828      invalidate the stack pointer correctly.  Note that invalidating
8829      the stack pointer is different from invalidating DEST.  */
8830   x = dest;
8831   while (GET_CODE (x) == SUBREG
8832          || GET_CODE (x) == ZERO_EXTRACT
8833          || GET_CODE (x) == SIGN_EXTRACT
8834          || GET_CODE (x) == STRICT_LOW_PART)
8835     x = XEXP (x, 0);
8836   if (push_operand (x, GET_MODE (x)))
8837     {
8838       reload_cse_invalidate_rtx (stack_pointer_rtx, NULL_RTX);
8839       reload_cse_invalidate_rtx (dest, NULL_RTX);
8840       return;
8841     }
8842
8843   /* We can only handle an assignment to a register, or a store of a
8844      register to a memory location.  For other cases, we just clobber
8845      the destination.  We also have to just clobber if there are side
8846      effects in SRC or DEST.  */
8847   if ((dreg < 0 && GET_CODE (dest) != MEM)
8848       || side_effects_p (src)
8849       || side_effects_p (dest))
8850     {
8851       reload_cse_invalidate_rtx (dest, NULL_RTX);
8852       return;
8853     }
8854
8855 #ifdef HAVE_cc0
8856   /* We don't try to handle values involving CC, because it's a pain
8857      to keep track of when they have to be invalidated.  */
8858   if (reg_mentioned_p (cc0_rtx, src)
8859       || reg_mentioned_p (cc0_rtx, dest))
8860     {
8861       reload_cse_invalidate_rtx (dest, NULL_RTX);
8862       return;
8863     }
8864 #endif
8865
8866   /* If BODY is a PARALLEL, then we need to see whether the source of
8867      SET is clobbered by some other instruction in the PARALLEL.  */
8868   if (GET_CODE (body) == PARALLEL)
8869     {
8870       int i;
8871
8872       for (i = XVECLEN (body, 0) - 1; i >= 0; --i)
8873         {
8874           rtx x;
8875
8876           x = XVECEXP (body, 0, i);
8877           if (x == set)
8878             continue;
8879
8880           reload_cse_check_clobbered = 0;
8881           reload_cse_check_src = src;
8882           note_stores (x, reload_cse_check_clobber);
8883           if (reload_cse_check_clobbered)
8884             {
8885               reload_cse_invalidate_rtx (dest, NULL_RTX);
8886               return;
8887             }
8888         }
8889     }
8890
8891   if (dreg >= 0)
8892     {
8893       int i;
8894
8895       /* This is an assignment to a register.  Update the value we
8896          have stored for the register.  */
8897       if (sreg >= 0)
8898         {
8899           rtx x;
8900
8901           /* This is a copy from one register to another.  Any values
8902              which were valid for SREG are now valid for DREG.  If the
8903              mode changes, we use gen_lowpart_common to extract only
8904              the part of the value that is copied.  */
8905           reg_values[dreg] = 0;
8906           for (x = reg_values[sreg]; x; x = XEXP (x, 1))
8907             {
8908               rtx tmp;
8909
8910               if (XEXP (x, 0) == 0)
8911                 continue;
8912               if (dest_mode == GET_MODE (XEXP (x, 0)))
8913                 tmp = XEXP (x, 0);
8914               else if (GET_MODE_BITSIZE (dest_mode)
8915                         > GET_MODE_BITSIZE (GET_MODE (XEXP (x, 0))))
8916                 continue;
8917               else
8918                 tmp = gen_lowpart_common (dest_mode, XEXP (x, 0));
8919               if (tmp)
8920                 reg_values[dreg] = gen_rtx_EXPR_LIST (dest_mode, tmp,
8921                                                       reg_values[dreg]);
8922             }         
8923         }
8924       else
8925         reg_values[dreg] = gen_rtx_EXPR_LIST (dest_mode, src, NULL_RTX);
8926
8927       /* We've changed DREG, so invalidate any values held by other
8928          registers that depend upon it.  */
8929       reload_cse_invalidate_regno (dreg, dest_mode, 0);
8930
8931       /* If this assignment changes more than one hard register,
8932          forget anything we know about the others.  */
8933       for (i = 1; i < HARD_REGNO_NREGS (dreg, dest_mode); i++)
8934         reg_values[dreg + i] = 0;
8935     }
8936   else if (GET_CODE (dest) == MEM)
8937     {
8938       /* Invalidate conflicting memory locations.  */
8939       reload_cse_invalidate_mem (dest);
8940
8941       /* If we're storing a register to memory, add DEST to the list
8942          in REG_VALUES.  */
8943       if (sreg >= 0 && ! side_effects_p (dest))
8944         reg_values[sreg] = gen_rtx_EXPR_LIST (dest_mode, dest,
8945                                     reg_values[sreg]);
8946     }
8947   else
8948     {
8949       /* We should have bailed out earlier.  */
8950       abort ();
8951     }
8952 }