OSDN Git Service

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