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