OSDN Git Service

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