PR preprocessor/60723 - missing system-ness marks for macro tokens
[official-gcc.git] / gcc / reload1.c
blob25adf446e1d824c8666a9e818d8d5a63bf0c899f
1 /* Reload pseudo regs into hard regs for insns that require hard regs.
2 Copyright (C) 1987-2014 Free Software Foundation, Inc.
4 This file is part of GCC.
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.
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.
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/>. */
20 #include "config.h"
21 #include "system.h"
22 #include "coretypes.h"
23 #include "tm.h"
25 #include "machmode.h"
26 #include "hard-reg-set.h"
27 #include "rtl-error.h"
28 #include "tm_p.h"
29 #include "obstack.h"
30 #include "insn-config.h"
31 #include "ggc.h"
32 #include "flags.h"
33 #include "function.h"
34 #include "expr.h"
35 #include "optabs.h"
36 #include "regs.h"
37 #include "addresses.h"
38 #include "basic-block.h"
39 #include "df.h"
40 #include "reload.h"
41 #include "recog.h"
42 #include "except.h"
43 #include "tree.h"
44 #include "ira.h"
45 #include "target.h"
46 #include "emit-rtl.h"
47 #include "dumpfile.h"
49 /* This file contains the reload pass of the compiler, which is
50 run after register allocation has been done. It checks that
51 each insn is valid (operands required to be in registers really
52 are in registers of the proper class) and fixes up invalid ones
53 by copying values temporarily into registers for the insns
54 that need them.
56 The results of register allocation are described by the vector
57 reg_renumber; the insns still contain pseudo regs, but reg_renumber
58 can be used to find which hard reg, if any, a pseudo reg is in.
60 The technique we always use is to free up a few hard regs that are
61 called ``reload regs'', and for each place where a pseudo reg
62 must be in a hard reg, copy it temporarily into one of the reload regs.
64 Reload regs are allocated locally for every instruction that needs
65 reloads. When there are pseudos which are allocated to a register that
66 has been chosen as a reload reg, such pseudos must be ``spilled''.
67 This means that they go to other hard regs, or to stack slots if no other
68 available hard regs can be found. Spilling can invalidate more
69 insns, requiring additional need for reloads, so we must keep checking
70 until the process stabilizes.
72 For machines with different classes of registers, we must keep track
73 of the register class needed for each reload, and make sure that
74 we allocate enough reload registers of each class.
76 The file reload.c contains the code that checks one insn for
77 validity and reports the reloads that it needs. This file
78 is in charge of scanning the entire rtl code, accumulating the
79 reload needs, spilling, assigning reload registers to use for
80 fixing up each insn, and generating the new insns to copy values
81 into the reload registers. */
83 struct target_reload default_target_reload;
84 #if SWITCHABLE_TARGET
85 struct target_reload *this_target_reload = &default_target_reload;
86 #endif
88 #define spill_indirect_levels \
89 (this_target_reload->x_spill_indirect_levels)
91 /* During reload_as_needed, element N contains a REG rtx for the hard reg
92 into which reg N has been reloaded (perhaps for a previous insn). */
93 static rtx *reg_last_reload_reg;
95 /* Elt N nonzero if reg_last_reload_reg[N] has been set in this insn
96 for an output reload that stores into reg N. */
97 static regset_head reg_has_output_reload;
99 /* Indicates which hard regs are reload-registers for an output reload
100 in the current insn. */
101 static HARD_REG_SET reg_is_output_reload;
103 /* Widest width in which each pseudo reg is referred to (via subreg). */
104 static unsigned int *reg_max_ref_width;
106 /* Vector to remember old contents of reg_renumber before spilling. */
107 static short *reg_old_renumber;
109 /* During reload_as_needed, element N contains the last pseudo regno reloaded
110 into hard register N. If that pseudo reg occupied more than one register,
111 reg_reloaded_contents points to that pseudo for each spill register in
112 use; all of these must remain set for an inheritance to occur. */
113 static int reg_reloaded_contents[FIRST_PSEUDO_REGISTER];
115 /* During reload_as_needed, element N contains the insn for which
116 hard register N was last used. Its contents are significant only
117 when reg_reloaded_valid is set for this register. */
118 static rtx reg_reloaded_insn[FIRST_PSEUDO_REGISTER];
120 /* Indicate if reg_reloaded_insn / reg_reloaded_contents is valid. */
121 static HARD_REG_SET reg_reloaded_valid;
122 /* Indicate if the register was dead at the end of the reload.
123 This is only valid if reg_reloaded_contents is set and valid. */
124 static HARD_REG_SET reg_reloaded_dead;
126 /* Indicate whether the register's current value is one that is not
127 safe to retain across a call, even for registers that are normally
128 call-saved. This is only meaningful for members of reg_reloaded_valid. */
129 static HARD_REG_SET reg_reloaded_call_part_clobbered;
131 /* Number of spill-regs so far; number of valid elements of spill_regs. */
132 static int n_spills;
134 /* In parallel with spill_regs, contains REG rtx's for those regs.
135 Holds the last rtx used for any given reg, or 0 if it has never
136 been used for spilling yet. This rtx is reused, provided it has
137 the proper mode. */
138 static rtx spill_reg_rtx[FIRST_PSEUDO_REGISTER];
140 /* In parallel with spill_regs, contains nonzero for a spill reg
141 that was stored after the last time it was used.
142 The precise value is the insn generated to do the store. */
143 static rtx spill_reg_store[FIRST_PSEUDO_REGISTER];
145 /* This is the register that was stored with spill_reg_store. This is a
146 copy of reload_out / reload_out_reg when the value was stored; if
147 reload_out is a MEM, spill_reg_stored_to will be set to reload_out_reg. */
148 static rtx spill_reg_stored_to[FIRST_PSEUDO_REGISTER];
150 /* This table is the inverse mapping of spill_regs:
151 indexed by hard reg number,
152 it contains the position of that reg in spill_regs,
153 or -1 for something that is not in spill_regs.
155 ?!? This is no longer accurate. */
156 static short spill_reg_order[FIRST_PSEUDO_REGISTER];
158 /* This reg set indicates registers that can't be used as spill registers for
159 the currently processed insn. These are the hard registers which are live
160 during the insn, but not allocated to pseudos, as well as fixed
161 registers. */
162 static HARD_REG_SET bad_spill_regs;
164 /* These are the hard registers that can't be used as spill register for any
165 insn. This includes registers used for user variables and registers that
166 we can't eliminate. A register that appears in this set also can't be used
167 to retry register allocation. */
168 static HARD_REG_SET bad_spill_regs_global;
170 /* Describes order of use of registers for reloading
171 of spilled pseudo-registers. `n_spills' is the number of
172 elements that are actually valid; new ones are added at the end.
174 Both spill_regs and spill_reg_order are used on two occasions:
175 once during find_reload_regs, where they keep track of the spill registers
176 for a single insn, but also during reload_as_needed where they show all
177 the registers ever used by reload. For the latter case, the information
178 is calculated during finish_spills. */
179 static short spill_regs[FIRST_PSEUDO_REGISTER];
181 /* This vector of reg sets indicates, for each pseudo, which hard registers
182 may not be used for retrying global allocation because the register was
183 formerly spilled from one of them. If we allowed reallocating a pseudo to
184 a register that it was already allocated to, reload might not
185 terminate. */
186 static HARD_REG_SET *pseudo_previous_regs;
188 /* This vector of reg sets indicates, for each pseudo, which hard
189 registers may not be used for retrying global allocation because they
190 are used as spill registers during one of the insns in which the
191 pseudo is live. */
192 static HARD_REG_SET *pseudo_forbidden_regs;
194 /* All hard regs that have been used as spill registers for any insn are
195 marked in this set. */
196 static HARD_REG_SET used_spill_regs;
198 /* Index of last register assigned as a spill register. We allocate in
199 a round-robin fashion. */
200 static int last_spill_reg;
202 /* Record the stack slot for each spilled hard register. */
203 static rtx spill_stack_slot[FIRST_PSEUDO_REGISTER];
205 /* Width allocated so far for that stack slot. */
206 static unsigned int spill_stack_slot_width[FIRST_PSEUDO_REGISTER];
208 /* Record which pseudos needed to be spilled. */
209 static regset_head spilled_pseudos;
211 /* Record which pseudos changed their allocation in finish_spills. */
212 static regset_head changed_allocation_pseudos;
214 /* Used for communication between order_regs_for_reload and count_pseudo.
215 Used to avoid counting one pseudo twice. */
216 static regset_head pseudos_counted;
218 /* First uid used by insns created by reload in this function.
219 Used in find_equiv_reg. */
220 int reload_first_uid;
222 /* Flag set by local-alloc or global-alloc if anything is live in
223 a call-clobbered reg across calls. */
224 int caller_save_needed;
226 /* Set to 1 while reload_as_needed is operating.
227 Required by some machines to handle any generated moves differently. */
228 int reload_in_progress = 0;
230 /* This obstack is used for allocation of rtl during register elimination.
231 The allocated storage can be freed once find_reloads has processed the
232 insn. */
233 static struct obstack reload_obstack;
235 /* Points to the beginning of the reload_obstack. All insn_chain structures
236 are allocated first. */
237 static char *reload_startobj;
239 /* The point after all insn_chain structures. Used to quickly deallocate
240 memory allocated in copy_reloads during calculate_needs_all_insns. */
241 static char *reload_firstobj;
243 /* This points before all local rtl generated by register elimination.
244 Used to quickly free all memory after processing one insn. */
245 static char *reload_insn_firstobj;
247 /* List of insn_chain instructions, one for every insn that reload needs to
248 examine. */
249 struct insn_chain *reload_insn_chain;
251 /* TRUE if we potentially left dead insns in the insn stream and want to
252 run DCE immediately after reload, FALSE otherwise. */
253 static bool need_dce;
255 /* List of all insns needing reloads. */
256 static struct insn_chain *insns_need_reload;
258 /* This structure is used to record information about register eliminations.
259 Each array entry describes one possible way of eliminating a register
260 in favor of another. If there is more than one way of eliminating a
261 particular register, the most preferred should be specified first. */
263 struct elim_table
265 int from; /* Register number to be eliminated. */
266 int to; /* Register number used as replacement. */
267 HOST_WIDE_INT initial_offset; /* Initial difference between values. */
268 int can_eliminate; /* Nonzero if this elimination can be done. */
269 int can_eliminate_previous; /* Value returned by TARGET_CAN_ELIMINATE
270 target hook in previous scan over insns
271 made by reload. */
272 HOST_WIDE_INT offset; /* Current offset between the two regs. */
273 HOST_WIDE_INT previous_offset;/* Offset at end of previous insn. */
274 int ref_outside_mem; /* "to" has been referenced outside a MEM. */
275 rtx from_rtx; /* REG rtx for the register to be eliminated.
276 We cannot simply compare the number since
277 we might then spuriously replace a hard
278 register corresponding to a pseudo
279 assigned to the reg to be eliminated. */
280 rtx to_rtx; /* REG rtx for the replacement. */
283 static struct elim_table *reg_eliminate = 0;
285 /* This is an intermediate structure to initialize the table. It has
286 exactly the members provided by ELIMINABLE_REGS. */
287 static const struct elim_table_1
289 const int from;
290 const int to;
291 } reg_eliminate_1[] =
293 /* If a set of eliminable registers was specified, define the table from it.
294 Otherwise, default to the normal case of the frame pointer being
295 replaced by the stack pointer. */
297 #ifdef ELIMINABLE_REGS
298 ELIMINABLE_REGS;
299 #else
300 {{ FRAME_POINTER_REGNUM, STACK_POINTER_REGNUM}};
301 #endif
303 #define NUM_ELIMINABLE_REGS ARRAY_SIZE (reg_eliminate_1)
305 /* Record the number of pending eliminations that have an offset not equal
306 to their initial offset. If nonzero, we use a new copy of each
307 replacement result in any insns encountered. */
308 int num_not_at_initial_offset;
310 /* Count the number of registers that we may be able to eliminate. */
311 static int num_eliminable;
312 /* And the number of registers that are equivalent to a constant that
313 can be eliminated to frame_pointer / arg_pointer + constant. */
314 static int num_eliminable_invariants;
316 /* For each label, we record the offset of each elimination. If we reach
317 a label by more than one path and an offset differs, we cannot do the
318 elimination. This information is indexed by the difference of the
319 number of the label and the first label number. We can't offset the
320 pointer itself as this can cause problems on machines with segmented
321 memory. The first table is an array of flags that records whether we
322 have yet encountered a label and the second table is an array of arrays,
323 one entry in the latter array for each elimination. */
325 static int first_label_num;
326 static char *offsets_known_at;
327 static HOST_WIDE_INT (*offsets_at)[NUM_ELIMINABLE_REGS];
329 vec<reg_equivs_t, va_gc> *reg_equivs;
331 /* Stack of addresses where an rtx has been changed. We can undo the
332 changes by popping items off the stack and restoring the original
333 value at each location.
335 We use this simplistic undo capability rather than copy_rtx as copy_rtx
336 will not make a deep copy of a normally sharable rtx, such as
337 (const (plus (symbol_ref) (const_int))). If such an expression appears
338 as R1 in gen_reload_chain_without_interm_reg_p, then a shared
339 rtx expression would be changed. See PR 42431. */
341 typedef rtx *rtx_p;
342 static vec<rtx_p> substitute_stack;
344 /* Number of labels in the current function. */
346 static int num_labels;
348 static void replace_pseudos_in (rtx *, enum machine_mode, rtx);
349 static void maybe_fix_stack_asms (void);
350 static void copy_reloads (struct insn_chain *);
351 static void calculate_needs_all_insns (int);
352 static int find_reg (struct insn_chain *, int);
353 static void find_reload_regs (struct insn_chain *);
354 static void select_reload_regs (void);
355 static void delete_caller_save_insns (void);
357 static void spill_failure (rtx, enum reg_class);
358 static void count_spilled_pseudo (int, int, int);
359 static void delete_dead_insn (rtx);
360 static void alter_reg (int, int, bool);
361 static void set_label_offsets (rtx, rtx, int);
362 static void check_eliminable_occurrences (rtx);
363 static void elimination_effects (rtx, enum machine_mode);
364 static rtx eliminate_regs_1 (rtx, enum machine_mode, rtx, bool, bool);
365 static int eliminate_regs_in_insn (rtx, int);
366 static void update_eliminable_offsets (void);
367 static void mark_not_eliminable (rtx, const_rtx, void *);
368 static void set_initial_elim_offsets (void);
369 static bool verify_initial_elim_offsets (void);
370 static void set_initial_label_offsets (void);
371 static void set_offsets_for_label (rtx);
372 static void init_eliminable_invariants (rtx, bool);
373 static void init_elim_table (void);
374 static void free_reg_equiv (void);
375 static void update_eliminables (HARD_REG_SET *);
376 static bool update_eliminables_and_spill (void);
377 static void elimination_costs_in_insn (rtx);
378 static void spill_hard_reg (unsigned int, int);
379 static int finish_spills (int);
380 static void scan_paradoxical_subregs (rtx);
381 static void count_pseudo (int);
382 static void order_regs_for_reload (struct insn_chain *);
383 static void reload_as_needed (int);
384 static void forget_old_reloads_1 (rtx, const_rtx, void *);
385 static void forget_marked_reloads (regset);
386 static int reload_reg_class_lower (const void *, const void *);
387 static void mark_reload_reg_in_use (unsigned int, int, enum reload_type,
388 enum machine_mode);
389 static void clear_reload_reg_in_use (unsigned int, int, enum reload_type,
390 enum machine_mode);
391 static int reload_reg_free_p (unsigned int, int, enum reload_type);
392 static int reload_reg_free_for_value_p (int, int, int, enum reload_type,
393 rtx, rtx, int, int);
394 static int free_for_value_p (int, enum machine_mode, int, enum reload_type,
395 rtx, rtx, int, int);
396 static int allocate_reload_reg (struct insn_chain *, int, int);
397 static int conflicts_with_override (rtx);
398 static void failed_reload (rtx, int);
399 static int set_reload_reg (int, int);
400 static void choose_reload_regs_init (struct insn_chain *, rtx *);
401 static void choose_reload_regs (struct insn_chain *);
402 static void emit_input_reload_insns (struct insn_chain *, struct reload *,
403 rtx, int);
404 static void emit_output_reload_insns (struct insn_chain *, struct reload *,
405 int);
406 static void do_input_reload (struct insn_chain *, struct reload *, int);
407 static void do_output_reload (struct insn_chain *, struct reload *, int);
408 static void emit_reload_insns (struct insn_chain *);
409 static void delete_output_reload (rtx, int, int, rtx);
410 static void delete_address_reloads (rtx, rtx);
411 static void delete_address_reloads_1 (rtx, rtx, rtx);
412 static void inc_for_reload (rtx, rtx, rtx, int);
413 #ifdef AUTO_INC_DEC
414 static void add_auto_inc_notes (rtx, rtx);
415 #endif
416 static void substitute (rtx *, const_rtx, rtx);
417 static bool gen_reload_chain_without_interm_reg_p (int, int);
418 static int reloads_conflict (int, int);
419 static rtx gen_reload (rtx, rtx, int, enum reload_type);
420 static rtx emit_insn_if_valid_for_reload (rtx);
422 /* Initialize the reload pass. This is called at the beginning of compilation
423 and may be called again if the target is reinitialized. */
425 void
426 init_reload (void)
428 int i;
430 /* Often (MEM (REG n)) is still valid even if (REG n) is put on the stack.
431 Set spill_indirect_levels to the number of levels such addressing is
432 permitted, zero if it is not permitted at all. */
434 rtx tem
435 = gen_rtx_MEM (Pmode,
436 gen_rtx_PLUS (Pmode,
437 gen_rtx_REG (Pmode,
438 LAST_VIRTUAL_REGISTER + 1),
439 gen_int_mode (4, Pmode)));
440 spill_indirect_levels = 0;
442 while (memory_address_p (QImode, tem))
444 spill_indirect_levels++;
445 tem = gen_rtx_MEM (Pmode, tem);
448 /* See if indirect addressing is valid for (MEM (SYMBOL_REF ...)). */
450 tem = gen_rtx_MEM (Pmode, gen_rtx_SYMBOL_REF (Pmode, "foo"));
451 indirect_symref_ok = memory_address_p (QImode, tem);
453 /* See if reg+reg is a valid (and offsettable) address. */
455 for (i = 0; i < FIRST_PSEUDO_REGISTER; i++)
457 tem = gen_rtx_PLUS (Pmode,
458 gen_rtx_REG (Pmode, HARD_FRAME_POINTER_REGNUM),
459 gen_rtx_REG (Pmode, i));
461 /* This way, we make sure that reg+reg is an offsettable address. */
462 tem = plus_constant (Pmode, tem, 4);
464 if (memory_address_p (QImode, tem))
466 double_reg_address_ok = 1;
467 break;
471 /* Initialize obstack for our rtl allocation. */
472 if (reload_startobj == NULL)
474 gcc_obstack_init (&reload_obstack);
475 reload_startobj = XOBNEWVAR (&reload_obstack, char, 0);
478 INIT_REG_SET (&spilled_pseudos);
479 INIT_REG_SET (&changed_allocation_pseudos);
480 INIT_REG_SET (&pseudos_counted);
483 /* List of insn chains that are currently unused. */
484 static struct insn_chain *unused_insn_chains = 0;
486 /* Allocate an empty insn_chain structure. */
487 struct insn_chain *
488 new_insn_chain (void)
490 struct insn_chain *c;
492 if (unused_insn_chains == 0)
494 c = XOBNEW (&reload_obstack, struct insn_chain);
495 INIT_REG_SET (&c->live_throughout);
496 INIT_REG_SET (&c->dead_or_set);
498 else
500 c = unused_insn_chains;
501 unused_insn_chains = c->next;
503 c->is_caller_save_insn = 0;
504 c->need_operand_change = 0;
505 c->need_reload = 0;
506 c->need_elim = 0;
507 return c;
510 /* Small utility function to set all regs in hard reg set TO which are
511 allocated to pseudos in regset FROM. */
513 void
514 compute_use_by_pseudos (HARD_REG_SET *to, regset from)
516 unsigned int regno;
517 reg_set_iterator rsi;
519 EXECUTE_IF_SET_IN_REG_SET (from, FIRST_PSEUDO_REGISTER, regno, rsi)
521 int r = reg_renumber[regno];
523 if (r < 0)
525 /* reload_combine uses the information from DF_LIVE_IN,
526 which might still contain registers that have not
527 actually been allocated since they have an
528 equivalence. */
529 gcc_assert (ira_conflicts_p || reload_completed);
531 else
532 add_to_hard_reg_set (to, PSEUDO_REGNO_MODE (regno), r);
536 /* Replace all pseudos found in LOC with their corresponding
537 equivalences. */
539 static void
540 replace_pseudos_in (rtx *loc, enum machine_mode mem_mode, rtx usage)
542 rtx x = *loc;
543 enum rtx_code code;
544 const char *fmt;
545 int i, j;
547 if (! x)
548 return;
550 code = GET_CODE (x);
551 if (code == REG)
553 unsigned int regno = REGNO (x);
555 if (regno < FIRST_PSEUDO_REGISTER)
556 return;
558 x = eliminate_regs_1 (x, mem_mode, usage, true, false);
559 if (x != *loc)
561 *loc = x;
562 replace_pseudos_in (loc, mem_mode, usage);
563 return;
566 if (reg_equiv_constant (regno))
567 *loc = reg_equiv_constant (regno);
568 else if (reg_equiv_invariant (regno))
569 *loc = reg_equiv_invariant (regno);
570 else if (reg_equiv_mem (regno))
571 *loc = reg_equiv_mem (regno);
572 else if (reg_equiv_address (regno))
573 *loc = gen_rtx_MEM (GET_MODE (x), reg_equiv_address (regno));
574 else
576 gcc_assert (!REG_P (regno_reg_rtx[regno])
577 || REGNO (regno_reg_rtx[regno]) != regno);
578 *loc = regno_reg_rtx[regno];
581 return;
583 else if (code == MEM)
585 replace_pseudos_in (& XEXP (x, 0), GET_MODE (x), usage);
586 return;
589 /* Process each of our operands recursively. */
590 fmt = GET_RTX_FORMAT (code);
591 for (i = 0; i < GET_RTX_LENGTH (code); i++, fmt++)
592 if (*fmt == 'e')
593 replace_pseudos_in (&XEXP (x, i), mem_mode, usage);
594 else if (*fmt == 'E')
595 for (j = 0; j < XVECLEN (x, i); j++)
596 replace_pseudos_in (& XVECEXP (x, i, j), mem_mode, usage);
599 /* Determine if the current function has an exception receiver block
600 that reaches the exit block via non-exceptional edges */
602 static bool
603 has_nonexceptional_receiver (void)
605 edge e;
606 edge_iterator ei;
607 basic_block *tos, *worklist, bb;
609 /* If we're not optimizing, then just err on the safe side. */
610 if (!optimize)
611 return true;
613 /* First determine which blocks can reach exit via normal paths. */
614 tos = worklist = XNEWVEC (basic_block, n_basic_blocks_for_fn (cfun) + 1);
616 FOR_EACH_BB_FN (bb, cfun)
617 bb->flags &= ~BB_REACHABLE;
619 /* Place the exit block on our worklist. */
620 EXIT_BLOCK_PTR_FOR_FN (cfun)->flags |= BB_REACHABLE;
621 *tos++ = EXIT_BLOCK_PTR_FOR_FN (cfun);
623 /* Iterate: find everything reachable from what we've already seen. */
624 while (tos != worklist)
626 bb = *--tos;
628 FOR_EACH_EDGE (e, ei, bb->preds)
629 if (!(e->flags & EDGE_ABNORMAL))
631 basic_block src = e->src;
633 if (!(src->flags & BB_REACHABLE))
635 src->flags |= BB_REACHABLE;
636 *tos++ = src;
640 free (worklist);
642 /* Now see if there's a reachable block with an exceptional incoming
643 edge. */
644 FOR_EACH_BB_FN (bb, cfun)
645 if (bb->flags & BB_REACHABLE && bb_has_abnormal_pred (bb))
646 return true;
648 /* No exceptional block reached exit unexceptionally. */
649 return false;
652 /* Grow (or allocate) the REG_EQUIVS array from its current size (which may be
653 zero elements) to MAX_REG_NUM elements.
655 Initialize all new fields to NULL and update REG_EQUIVS_SIZE. */
656 void
657 grow_reg_equivs (void)
659 int old_size = vec_safe_length (reg_equivs);
660 int max_regno = max_reg_num ();
661 int i;
662 reg_equivs_t ze;
664 memset (&ze, 0, sizeof (reg_equivs_t));
665 vec_safe_reserve (reg_equivs, max_regno);
666 for (i = old_size; i < max_regno; i++)
667 reg_equivs->quick_insert (i, ze);
671 /* Global variables used by reload and its subroutines. */
673 /* The current basic block while in calculate_elim_costs_all_insns. */
674 static basic_block elim_bb;
676 /* Set during calculate_needs if an insn needs register elimination. */
677 static int something_needs_elimination;
678 /* Set during calculate_needs if an insn needs an operand changed. */
679 static int something_needs_operands_changed;
680 /* Set by alter_regs if we spilled a register to the stack. */
681 static bool something_was_spilled;
683 /* Nonzero means we couldn't get enough spill regs. */
684 static int failure;
686 /* Temporary array of pseudo-register number. */
687 static int *temp_pseudo_reg_arr;
689 /* If a pseudo has no hard reg, delete the insns that made the equivalence.
690 If that insn didn't set the register (i.e., it copied the register to
691 memory), just delete that insn instead of the equivalencing insn plus
692 anything now dead. If we call delete_dead_insn on that insn, we may
693 delete the insn that actually sets the register if the register dies
694 there and that is incorrect. */
695 static void
696 remove_init_insns ()
698 for (int i = FIRST_PSEUDO_REGISTER; i < max_regno; i++)
700 if (reg_renumber[i] < 0 && reg_equiv_init (i) != 0)
702 rtx list;
703 for (list = reg_equiv_init (i); list; list = XEXP (list, 1))
705 rtx equiv_insn = XEXP (list, 0);
707 /* If we already deleted the insn or if it may trap, we can't
708 delete it. The latter case shouldn't happen, but can
709 if an insn has a variable address, gets a REG_EH_REGION
710 note added to it, and then gets converted into a load
711 from a constant address. */
712 if (NOTE_P (equiv_insn)
713 || can_throw_internal (equiv_insn))
715 else if (reg_set_p (regno_reg_rtx[i], PATTERN (equiv_insn)))
716 delete_dead_insn (equiv_insn);
717 else
718 SET_INSN_DELETED (equiv_insn);
724 /* Return true if remove_init_insns will delete INSN. */
725 static bool
726 will_delete_init_insn_p (rtx insn)
728 rtx set = single_set (insn);
729 if (!set || !REG_P (SET_DEST (set)))
730 return false;
731 unsigned regno = REGNO (SET_DEST (set));
733 if (can_throw_internal (insn))
734 return false;
736 if (regno < FIRST_PSEUDO_REGISTER || reg_renumber[regno] >= 0)
737 return false;
739 for (rtx list = reg_equiv_init (regno); list; list = XEXP (list, 1))
741 rtx equiv_insn = XEXP (list, 0);
742 if (equiv_insn == insn)
743 return true;
745 return false;
748 /* Main entry point for the reload pass.
750 FIRST is the first insn of the function being compiled.
752 GLOBAL nonzero means we were called from global_alloc
753 and should attempt to reallocate any pseudoregs that we
754 displace from hard regs we will use for reloads.
755 If GLOBAL is zero, we do not have enough information to do that,
756 so any pseudo reg that is spilled must go to the stack.
758 Return value is TRUE if reload likely left dead insns in the
759 stream and a DCE pass should be run to elimiante them. Else the
760 return value is FALSE. */
762 bool
763 reload (rtx first, int global)
765 int i, n;
766 rtx insn;
767 struct elim_table *ep;
768 basic_block bb;
769 bool inserted;
771 /* Make sure even insns with volatile mem refs are recognizable. */
772 init_recog ();
774 failure = 0;
776 reload_firstobj = XOBNEWVAR (&reload_obstack, char, 0);
778 /* Make sure that the last insn in the chain
779 is not something that needs reloading. */
780 emit_note (NOTE_INSN_DELETED);
782 /* Enable find_equiv_reg to distinguish insns made by reload. */
783 reload_first_uid = get_max_uid ();
785 #ifdef SECONDARY_MEMORY_NEEDED
786 /* Initialize the secondary memory table. */
787 clear_secondary_mem ();
788 #endif
790 /* We don't have a stack slot for any spill reg yet. */
791 memset (spill_stack_slot, 0, sizeof spill_stack_slot);
792 memset (spill_stack_slot_width, 0, sizeof spill_stack_slot_width);
794 /* Initialize the save area information for caller-save, in case some
795 are needed. */
796 init_save_areas ();
798 /* Compute which hard registers are now in use
799 as homes for pseudo registers.
800 This is done here rather than (eg) in global_alloc
801 because this point is reached even if not optimizing. */
802 for (i = FIRST_PSEUDO_REGISTER; i < max_regno; i++)
803 mark_home_live (i);
805 /* A function that has a nonlocal label that can reach the exit
806 block via non-exceptional paths must save all call-saved
807 registers. */
808 if (cfun->has_nonlocal_label
809 && has_nonexceptional_receiver ())
810 crtl->saves_all_registers = 1;
812 if (crtl->saves_all_registers)
813 for (i = 0; i < FIRST_PSEUDO_REGISTER; i++)
814 if (! call_used_regs[i] && ! fixed_regs[i] && ! LOCAL_REGNO (i))
815 df_set_regs_ever_live (i, true);
817 /* Find all the pseudo registers that didn't get hard regs
818 but do have known equivalent constants or memory slots.
819 These include parameters (known equivalent to parameter slots)
820 and cse'd or loop-moved constant memory addresses.
822 Record constant equivalents in reg_equiv_constant
823 so they will be substituted by find_reloads.
824 Record memory equivalents in reg_mem_equiv so they can
825 be substituted eventually by altering the REG-rtx's. */
827 grow_reg_equivs ();
828 reg_old_renumber = XCNEWVEC (short, max_regno);
829 memcpy (reg_old_renumber, reg_renumber, max_regno * sizeof (short));
830 pseudo_forbidden_regs = XNEWVEC (HARD_REG_SET, max_regno);
831 pseudo_previous_regs = XCNEWVEC (HARD_REG_SET, max_regno);
833 CLEAR_HARD_REG_SET (bad_spill_regs_global);
835 init_eliminable_invariants (first, true);
836 init_elim_table ();
838 /* Alter each pseudo-reg rtx to contain its hard reg number. Assign
839 stack slots to the pseudos that lack hard regs or equivalents.
840 Do not touch virtual registers. */
842 temp_pseudo_reg_arr = XNEWVEC (int, max_regno - LAST_VIRTUAL_REGISTER - 1);
843 for (n = 0, i = LAST_VIRTUAL_REGISTER + 1; i < max_regno; i++)
844 temp_pseudo_reg_arr[n++] = i;
846 if (ira_conflicts_p)
847 /* Ask IRA to order pseudo-registers for better stack slot
848 sharing. */
849 ira_sort_regnos_for_alter_reg (temp_pseudo_reg_arr, n, reg_max_ref_width);
851 for (i = 0; i < n; i++)
852 alter_reg (temp_pseudo_reg_arr[i], -1, false);
854 /* If we have some registers we think can be eliminated, scan all insns to
855 see if there is an insn that sets one of these registers to something
856 other than itself plus a constant. If so, the register cannot be
857 eliminated. Doing this scan here eliminates an extra pass through the
858 main reload loop in the most common case where register elimination
859 cannot be done. */
860 for (insn = first; insn && num_eliminable; insn = NEXT_INSN (insn))
861 if (INSN_P (insn))
862 note_stores (PATTERN (insn), mark_not_eliminable, NULL);
864 maybe_fix_stack_asms ();
866 insns_need_reload = 0;
867 something_needs_elimination = 0;
869 /* Initialize to -1, which means take the first spill register. */
870 last_spill_reg = -1;
872 /* Spill any hard regs that we know we can't eliminate. */
873 CLEAR_HARD_REG_SET (used_spill_regs);
874 /* There can be multiple ways to eliminate a register;
875 they should be listed adjacently.
876 Elimination for any register fails only if all possible ways fail. */
877 for (ep = reg_eliminate; ep < &reg_eliminate[NUM_ELIMINABLE_REGS]; )
879 int from = ep->from;
880 int can_eliminate = 0;
883 can_eliminate |= ep->can_eliminate;
884 ep++;
886 while (ep < &reg_eliminate[NUM_ELIMINABLE_REGS] && ep->from == from);
887 if (! can_eliminate)
888 spill_hard_reg (from, 1);
891 #if !HARD_FRAME_POINTER_IS_FRAME_POINTER
892 if (frame_pointer_needed)
893 spill_hard_reg (HARD_FRAME_POINTER_REGNUM, 1);
894 #endif
895 finish_spills (global);
897 /* From now on, we may need to generate moves differently. We may also
898 allow modifications of insns which cause them to not be recognized.
899 Any such modifications will be cleaned up during reload itself. */
900 reload_in_progress = 1;
902 /* This loop scans the entire function each go-round
903 and repeats until one repetition spills no additional hard regs. */
904 for (;;)
906 int something_changed;
907 int did_spill;
908 HOST_WIDE_INT starting_frame_size;
910 starting_frame_size = get_frame_size ();
911 something_was_spilled = false;
913 set_initial_elim_offsets ();
914 set_initial_label_offsets ();
916 /* For each pseudo register that has an equivalent location defined,
917 try to eliminate any eliminable registers (such as the frame pointer)
918 assuming initial offsets for the replacement register, which
919 is the normal case.
921 If the resulting location is directly addressable, substitute
922 the MEM we just got directly for the old REG.
924 If it is not addressable but is a constant or the sum of a hard reg
925 and constant, it is probably not addressable because the constant is
926 out of range, in that case record the address; we will generate
927 hairy code to compute the address in a register each time it is
928 needed. Similarly if it is a hard register, but one that is not
929 valid as an address register.
931 If the location is not addressable, but does not have one of the
932 above forms, assign a stack slot. We have to do this to avoid the
933 potential of producing lots of reloads if, e.g., a location involves
934 a pseudo that didn't get a hard register and has an equivalent memory
935 location that also involves a pseudo that didn't get a hard register.
937 Perhaps at some point we will improve reload_when_needed handling
938 so this problem goes away. But that's very hairy. */
940 for (i = FIRST_PSEUDO_REGISTER; i < max_regno; i++)
941 if (reg_renumber[i] < 0 && reg_equiv_memory_loc (i))
943 rtx x = eliminate_regs (reg_equiv_memory_loc (i), VOIDmode,
944 NULL_RTX);
946 if (strict_memory_address_addr_space_p
947 (GET_MODE (regno_reg_rtx[i]), XEXP (x, 0),
948 MEM_ADDR_SPACE (x)))
949 reg_equiv_mem (i) = x, reg_equiv_address (i) = 0;
950 else if (CONSTANT_P (XEXP (x, 0))
951 || (REG_P (XEXP (x, 0))
952 && REGNO (XEXP (x, 0)) < FIRST_PSEUDO_REGISTER)
953 || (GET_CODE (XEXP (x, 0)) == PLUS
954 && REG_P (XEXP (XEXP (x, 0), 0))
955 && (REGNO (XEXP (XEXP (x, 0), 0))
956 < FIRST_PSEUDO_REGISTER)
957 && CONSTANT_P (XEXP (XEXP (x, 0), 1))))
958 reg_equiv_address (i) = XEXP (x, 0), reg_equiv_mem (i) = 0;
959 else
961 /* Make a new stack slot. Then indicate that something
962 changed so we go back and recompute offsets for
963 eliminable registers because the allocation of memory
964 below might change some offset. reg_equiv_{mem,address}
965 will be set up for this pseudo on the next pass around
966 the loop. */
967 reg_equiv_memory_loc (i) = 0;
968 reg_equiv_init (i) = 0;
969 alter_reg (i, -1, true);
973 if (caller_save_needed)
974 setup_save_areas ();
976 if (starting_frame_size && crtl->stack_alignment_needed)
978 /* If we have a stack frame, we must align it now. The
979 stack size may be a part of the offset computation for
980 register elimination. So if this changes the stack size,
981 then repeat the elimination bookkeeping. We don't
982 realign when there is no stack, as that will cause a
983 stack frame when none is needed should
984 STARTING_FRAME_OFFSET not be already aligned to
985 STACK_BOUNDARY. */
986 assign_stack_local (BLKmode, 0, crtl->stack_alignment_needed);
988 /* If we allocated another stack slot, redo elimination bookkeeping. */
989 if (something_was_spilled || starting_frame_size != get_frame_size ())
991 update_eliminables_and_spill ();
992 continue;
995 if (caller_save_needed)
997 save_call_clobbered_regs ();
998 /* That might have allocated new insn_chain structures. */
999 reload_firstobj = XOBNEWVAR (&reload_obstack, char, 0);
1002 calculate_needs_all_insns (global);
1004 if (! ira_conflicts_p)
1005 /* Don't do it for IRA. We need this info because we don't
1006 change live_throughout and dead_or_set for chains when IRA
1007 is used. */
1008 CLEAR_REG_SET (&spilled_pseudos);
1010 did_spill = 0;
1012 something_changed = 0;
1014 /* If we allocated any new memory locations, make another pass
1015 since it might have changed elimination offsets. */
1016 if (something_was_spilled || starting_frame_size != get_frame_size ())
1017 something_changed = 1;
1019 /* Even if the frame size remained the same, we might still have
1020 changed elimination offsets, e.g. if find_reloads called
1021 force_const_mem requiring the back end to allocate a constant
1022 pool base register that needs to be saved on the stack. */
1023 else if (!verify_initial_elim_offsets ())
1024 something_changed = 1;
1026 if (update_eliminables_and_spill ())
1028 did_spill = 1;
1029 something_changed = 1;
1032 select_reload_regs ();
1033 if (failure)
1034 goto failed;
1036 if (insns_need_reload != 0 || did_spill)
1037 something_changed |= finish_spills (global);
1039 if (! something_changed)
1040 break;
1042 if (caller_save_needed)
1043 delete_caller_save_insns ();
1045 obstack_free (&reload_obstack, reload_firstobj);
1048 /* If global-alloc was run, notify it of any register eliminations we have
1049 done. */
1050 if (global)
1051 for (ep = reg_eliminate; ep < &reg_eliminate[NUM_ELIMINABLE_REGS]; ep++)
1052 if (ep->can_eliminate)
1053 mark_elimination (ep->from, ep->to);
1055 remove_init_insns ();
1057 /* Use the reload registers where necessary
1058 by generating move instructions to move the must-be-register
1059 values into or out of the reload registers. */
1061 if (insns_need_reload != 0 || something_needs_elimination
1062 || something_needs_operands_changed)
1064 HOST_WIDE_INT old_frame_size = get_frame_size ();
1066 reload_as_needed (global);
1068 gcc_assert (old_frame_size == get_frame_size ());
1070 gcc_assert (verify_initial_elim_offsets ());
1073 /* If we were able to eliminate the frame pointer, show that it is no
1074 longer live at the start of any basic block. If it ls live by
1075 virtue of being in a pseudo, that pseudo will be marked live
1076 and hence the frame pointer will be known to be live via that
1077 pseudo. */
1079 if (! frame_pointer_needed)
1080 FOR_EACH_BB_FN (bb, cfun)
1081 bitmap_clear_bit (df_get_live_in (bb), HARD_FRAME_POINTER_REGNUM);
1083 /* Come here (with failure set nonzero) if we can't get enough spill
1084 regs. */
1085 failed:
1087 CLEAR_REG_SET (&changed_allocation_pseudos);
1088 CLEAR_REG_SET (&spilled_pseudos);
1089 reload_in_progress = 0;
1091 /* Now eliminate all pseudo regs by modifying them into
1092 their equivalent memory references.
1093 The REG-rtx's for the pseudos are modified in place,
1094 so all insns that used to refer to them now refer to memory.
1096 For a reg that has a reg_equiv_address, all those insns
1097 were changed by reloading so that no insns refer to it any longer;
1098 but the DECL_RTL of a variable decl may refer to it,
1099 and if so this causes the debugging info to mention the variable. */
1101 for (i = FIRST_PSEUDO_REGISTER; i < max_regno; i++)
1103 rtx addr = 0;
1105 if (reg_equiv_mem (i))
1106 addr = XEXP (reg_equiv_mem (i), 0);
1108 if (reg_equiv_address (i))
1109 addr = reg_equiv_address (i);
1111 if (addr)
1113 if (reg_renumber[i] < 0)
1115 rtx reg = regno_reg_rtx[i];
1117 REG_USERVAR_P (reg) = 0;
1118 PUT_CODE (reg, MEM);
1119 XEXP (reg, 0) = addr;
1120 if (reg_equiv_memory_loc (i))
1121 MEM_COPY_ATTRIBUTES (reg, reg_equiv_memory_loc (i));
1122 else
1123 MEM_ATTRS (reg) = 0;
1124 MEM_NOTRAP_P (reg) = 1;
1126 else if (reg_equiv_mem (i))
1127 XEXP (reg_equiv_mem (i), 0) = addr;
1130 /* We don't want complex addressing modes in debug insns
1131 if simpler ones will do, so delegitimize equivalences
1132 in debug insns. */
1133 if (MAY_HAVE_DEBUG_INSNS && reg_renumber[i] < 0)
1135 rtx reg = regno_reg_rtx[i];
1136 rtx equiv = 0;
1137 df_ref use, next;
1139 if (reg_equiv_constant (i))
1140 equiv = reg_equiv_constant (i);
1141 else if (reg_equiv_invariant (i))
1142 equiv = reg_equiv_invariant (i);
1143 else if (reg && MEM_P (reg))
1144 equiv = targetm.delegitimize_address (reg);
1145 else if (reg && REG_P (reg) && (int)REGNO (reg) != i)
1146 equiv = reg;
1148 if (equiv == reg)
1149 continue;
1151 for (use = DF_REG_USE_CHAIN (i); use; use = next)
1153 insn = DF_REF_INSN (use);
1155 /* Make sure the next ref is for a different instruction,
1156 so that we're not affected by the rescan. */
1157 next = DF_REF_NEXT_REG (use);
1158 while (next && DF_REF_INSN (next) == insn)
1159 next = DF_REF_NEXT_REG (next);
1161 if (DEBUG_INSN_P (insn))
1163 if (!equiv)
1165 INSN_VAR_LOCATION_LOC (insn) = gen_rtx_UNKNOWN_VAR_LOC ();
1166 df_insn_rescan_debug_internal (insn);
1168 else
1169 INSN_VAR_LOCATION_LOC (insn)
1170 = simplify_replace_rtx (INSN_VAR_LOCATION_LOC (insn),
1171 reg, equiv);
1177 /* We must set reload_completed now since the cleanup_subreg_operands call
1178 below will re-recognize each insn and reload may have generated insns
1179 which are only valid during and after reload. */
1180 reload_completed = 1;
1182 /* Make a pass over all the insns and delete all USEs which we inserted
1183 only to tag a REG_EQUAL note on them. Remove all REG_DEAD and REG_UNUSED
1184 notes. Delete all CLOBBER insns, except those that refer to the return
1185 value and the special mem:BLK CLOBBERs added to prevent the scheduler
1186 from misarranging variable-array code, and simplify (subreg (reg))
1187 operands. Strip and regenerate REG_INC notes that may have been moved
1188 around. */
1190 for (insn = first; insn; insn = NEXT_INSN (insn))
1191 if (INSN_P (insn))
1193 rtx *pnote;
1195 if (CALL_P (insn))
1196 replace_pseudos_in (& CALL_INSN_FUNCTION_USAGE (insn),
1197 VOIDmode, CALL_INSN_FUNCTION_USAGE (insn));
1199 if ((GET_CODE (PATTERN (insn)) == USE
1200 /* We mark with QImode USEs introduced by reload itself. */
1201 && (GET_MODE (insn) == QImode
1202 || find_reg_note (insn, REG_EQUAL, NULL_RTX)))
1203 || (GET_CODE (PATTERN (insn)) == CLOBBER
1204 && (!MEM_P (XEXP (PATTERN (insn), 0))
1205 || GET_MODE (XEXP (PATTERN (insn), 0)) != BLKmode
1206 || (GET_CODE (XEXP (XEXP (PATTERN (insn), 0), 0)) != SCRATCH
1207 && XEXP (XEXP (PATTERN (insn), 0), 0)
1208 != stack_pointer_rtx))
1209 && (!REG_P (XEXP (PATTERN (insn), 0))
1210 || ! REG_FUNCTION_VALUE_P (XEXP (PATTERN (insn), 0)))))
1212 delete_insn (insn);
1213 continue;
1216 /* Some CLOBBERs may survive until here and still reference unassigned
1217 pseudos with const equivalent, which may in turn cause ICE in later
1218 passes if the reference remains in place. */
1219 if (GET_CODE (PATTERN (insn)) == CLOBBER)
1220 replace_pseudos_in (& XEXP (PATTERN (insn), 0),
1221 VOIDmode, PATTERN (insn));
1223 /* Discard obvious no-ops, even without -O. This optimization
1224 is fast and doesn't interfere with debugging. */
1225 if (NONJUMP_INSN_P (insn)
1226 && GET_CODE (PATTERN (insn)) == SET
1227 && REG_P (SET_SRC (PATTERN (insn)))
1228 && REG_P (SET_DEST (PATTERN (insn)))
1229 && (REGNO (SET_SRC (PATTERN (insn)))
1230 == REGNO (SET_DEST (PATTERN (insn)))))
1232 delete_insn (insn);
1233 continue;
1236 pnote = &REG_NOTES (insn);
1237 while (*pnote != 0)
1239 if (REG_NOTE_KIND (*pnote) == REG_DEAD
1240 || REG_NOTE_KIND (*pnote) == REG_UNUSED
1241 || REG_NOTE_KIND (*pnote) == REG_INC)
1242 *pnote = XEXP (*pnote, 1);
1243 else
1244 pnote = &XEXP (*pnote, 1);
1247 #ifdef AUTO_INC_DEC
1248 add_auto_inc_notes (insn, PATTERN (insn));
1249 #endif
1251 /* Simplify (subreg (reg)) if it appears as an operand. */
1252 cleanup_subreg_operands (insn);
1254 /* Clean up invalid ASMs so that they don't confuse later passes.
1255 See PR 21299. */
1256 if (asm_noperands (PATTERN (insn)) >= 0)
1258 extract_insn (insn);
1259 if (!constrain_operands (1))
1261 error_for_asm (insn,
1262 "%<asm%> operand has impossible constraints");
1263 delete_insn (insn);
1264 continue;
1269 /* If we are doing generic stack checking, give a warning if this
1270 function's frame size is larger than we expect. */
1271 if (flag_stack_check == GENERIC_STACK_CHECK)
1273 HOST_WIDE_INT size = get_frame_size () + STACK_CHECK_FIXED_FRAME_SIZE;
1274 static int verbose_warned = 0;
1276 for (i = 0; i < FIRST_PSEUDO_REGISTER; i++)
1277 if (df_regs_ever_live_p (i) && ! fixed_regs[i] && call_used_regs[i])
1278 size += UNITS_PER_WORD;
1280 if (size > STACK_CHECK_MAX_FRAME_SIZE)
1282 warning (0, "frame size too large for reliable stack checking");
1283 if (! verbose_warned)
1285 warning (0, "try reducing the number of local variables");
1286 verbose_warned = 1;
1291 free (temp_pseudo_reg_arr);
1293 /* Indicate that we no longer have known memory locations or constants. */
1294 free_reg_equiv ();
1296 free (reg_max_ref_width);
1297 free (reg_old_renumber);
1298 free (pseudo_previous_regs);
1299 free (pseudo_forbidden_regs);
1301 CLEAR_HARD_REG_SET (used_spill_regs);
1302 for (i = 0; i < n_spills; i++)
1303 SET_HARD_REG_BIT (used_spill_regs, spill_regs[i]);
1305 /* Free all the insn_chain structures at once. */
1306 obstack_free (&reload_obstack, reload_startobj);
1307 unused_insn_chains = 0;
1309 inserted = fixup_abnormal_edges ();
1311 /* We've possibly turned single trapping insn into multiple ones. */
1312 if (cfun->can_throw_non_call_exceptions)
1314 sbitmap blocks;
1315 blocks = sbitmap_alloc (last_basic_block_for_fn (cfun));
1316 bitmap_ones (blocks);
1317 find_many_sub_basic_blocks (blocks);
1318 sbitmap_free (blocks);
1321 if (inserted)
1322 commit_edge_insertions ();
1324 /* Replacing pseudos with their memory equivalents might have
1325 created shared rtx. Subsequent passes would get confused
1326 by this, so unshare everything here. */
1327 unshare_all_rtl_again (first);
1329 #ifdef STACK_BOUNDARY
1330 /* init_emit has set the alignment of the hard frame pointer
1331 to STACK_BOUNDARY. It is very likely no longer valid if
1332 the hard frame pointer was used for register allocation. */
1333 if (!frame_pointer_needed)
1334 REGNO_POINTER_ALIGN (HARD_FRAME_POINTER_REGNUM) = BITS_PER_UNIT;
1335 #endif
1337 substitute_stack.release ();
1339 gcc_assert (bitmap_empty_p (&spilled_pseudos));
1341 reload_completed = !failure;
1343 return need_dce;
1346 /* Yet another special case. Unfortunately, reg-stack forces people to
1347 write incorrect clobbers in asm statements. These clobbers must not
1348 cause the register to appear in bad_spill_regs, otherwise we'll call
1349 fatal_insn later. We clear the corresponding regnos in the live
1350 register sets to avoid this.
1351 The whole thing is rather sick, I'm afraid. */
1353 static void
1354 maybe_fix_stack_asms (void)
1356 #ifdef STACK_REGS
1357 const char *constraints[MAX_RECOG_OPERANDS];
1358 enum machine_mode operand_mode[MAX_RECOG_OPERANDS];
1359 struct insn_chain *chain;
1361 for (chain = reload_insn_chain; chain != 0; chain = chain->next)
1363 int i, noperands;
1364 HARD_REG_SET clobbered, allowed;
1365 rtx pat;
1367 if (! INSN_P (chain->insn)
1368 || (noperands = asm_noperands (PATTERN (chain->insn))) < 0)
1369 continue;
1370 pat = PATTERN (chain->insn);
1371 if (GET_CODE (pat) != PARALLEL)
1372 continue;
1374 CLEAR_HARD_REG_SET (clobbered);
1375 CLEAR_HARD_REG_SET (allowed);
1377 /* First, make a mask of all stack regs that are clobbered. */
1378 for (i = 0; i < XVECLEN (pat, 0); i++)
1380 rtx t = XVECEXP (pat, 0, i);
1381 if (GET_CODE (t) == CLOBBER && STACK_REG_P (XEXP (t, 0)))
1382 SET_HARD_REG_BIT (clobbered, REGNO (XEXP (t, 0)));
1385 /* Get the operand values and constraints out of the insn. */
1386 decode_asm_operands (pat, recog_data.operand, recog_data.operand_loc,
1387 constraints, operand_mode, NULL);
1389 /* For every operand, see what registers are allowed. */
1390 for (i = 0; i < noperands; i++)
1392 const char *p = constraints[i];
1393 /* For every alternative, we compute the class of registers allowed
1394 for reloading in CLS, and merge its contents into the reg set
1395 ALLOWED. */
1396 int cls = (int) NO_REGS;
1398 for (;;)
1400 char c = *p;
1402 if (c == '\0' || c == ',' || c == '#')
1404 /* End of one alternative - mark the regs in the current
1405 class, and reset the class. */
1406 IOR_HARD_REG_SET (allowed, reg_class_contents[cls]);
1407 cls = NO_REGS;
1408 p++;
1409 if (c == '#')
1410 do {
1411 c = *p++;
1412 } while (c != '\0' && c != ',');
1413 if (c == '\0')
1414 break;
1415 continue;
1418 switch (c)
1420 case 'g':
1421 cls = (int) reg_class_subunion[cls][(int) GENERAL_REGS];
1422 break;
1424 default:
1425 enum constraint_num cn = lookup_constraint (p);
1426 if (insn_extra_address_constraint (cn))
1427 cls = (int) reg_class_subunion[cls]
1428 [(int) base_reg_class (VOIDmode, ADDR_SPACE_GENERIC,
1429 ADDRESS, SCRATCH)];
1430 else
1431 cls = (int) reg_class_subunion[cls]
1432 [reg_class_for_constraint (cn)];
1433 break;
1435 p += CONSTRAINT_LEN (c, p);
1438 /* Those of the registers which are clobbered, but allowed by the
1439 constraints, must be usable as reload registers. So clear them
1440 out of the life information. */
1441 AND_HARD_REG_SET (allowed, clobbered);
1442 for (i = 0; i < FIRST_PSEUDO_REGISTER; i++)
1443 if (TEST_HARD_REG_BIT (allowed, i))
1445 CLEAR_REGNO_REG_SET (&chain->live_throughout, i);
1446 CLEAR_REGNO_REG_SET (&chain->dead_or_set, i);
1450 #endif
1453 /* Copy the global variables n_reloads and rld into the corresponding elts
1454 of CHAIN. */
1455 static void
1456 copy_reloads (struct insn_chain *chain)
1458 chain->n_reloads = n_reloads;
1459 chain->rld = XOBNEWVEC (&reload_obstack, struct reload, n_reloads);
1460 memcpy (chain->rld, rld, n_reloads * sizeof (struct reload));
1461 reload_insn_firstobj = XOBNEWVAR (&reload_obstack, char, 0);
1464 /* Walk the chain of insns, and determine for each whether it needs reloads
1465 and/or eliminations. Build the corresponding insns_need_reload list, and
1466 set something_needs_elimination as appropriate. */
1467 static void
1468 calculate_needs_all_insns (int global)
1470 struct insn_chain **pprev_reload = &insns_need_reload;
1471 struct insn_chain *chain, *next = 0;
1473 something_needs_elimination = 0;
1475 reload_insn_firstobj = XOBNEWVAR (&reload_obstack, char, 0);
1476 for (chain = reload_insn_chain; chain != 0; chain = next)
1478 rtx insn = chain->insn;
1480 next = chain->next;
1482 /* Clear out the shortcuts. */
1483 chain->n_reloads = 0;
1484 chain->need_elim = 0;
1485 chain->need_reload = 0;
1486 chain->need_operand_change = 0;
1488 /* If this is a label, a JUMP_INSN, or has REG_NOTES (which might
1489 include REG_LABEL_OPERAND and REG_LABEL_TARGET), we need to see
1490 what effects this has on the known offsets at labels. */
1492 if (LABEL_P (insn) || JUMP_P (insn) || JUMP_TABLE_DATA_P (insn)
1493 || (INSN_P (insn) && REG_NOTES (insn) != 0))
1494 set_label_offsets (insn, insn, 0);
1496 if (INSN_P (insn))
1498 rtx old_body = PATTERN (insn);
1499 int old_code = INSN_CODE (insn);
1500 rtx old_notes = REG_NOTES (insn);
1501 int did_elimination = 0;
1502 int operands_changed = 0;
1504 /* Skip insns that only set an equivalence. */
1505 if (will_delete_init_insn_p (insn))
1506 continue;
1508 /* If needed, eliminate any eliminable registers. */
1509 if (num_eliminable || num_eliminable_invariants)
1510 did_elimination = eliminate_regs_in_insn (insn, 0);
1512 /* Analyze the instruction. */
1513 operands_changed = find_reloads (insn, 0, spill_indirect_levels,
1514 global, spill_reg_order);
1516 /* If a no-op set needs more than one reload, this is likely
1517 to be something that needs input address reloads. We
1518 can't get rid of this cleanly later, and it is of no use
1519 anyway, so discard it now.
1520 We only do this when expensive_optimizations is enabled,
1521 since this complements reload inheritance / output
1522 reload deletion, and it can make debugging harder. */
1523 if (flag_expensive_optimizations && n_reloads > 1)
1525 rtx set = single_set (insn);
1526 if (set
1528 ((SET_SRC (set) == SET_DEST (set)
1529 && REG_P (SET_SRC (set))
1530 && REGNO (SET_SRC (set)) >= FIRST_PSEUDO_REGISTER)
1531 || (REG_P (SET_SRC (set)) && REG_P (SET_DEST (set))
1532 && reg_renumber[REGNO (SET_SRC (set))] < 0
1533 && reg_renumber[REGNO (SET_DEST (set))] < 0
1534 && reg_equiv_memory_loc (REGNO (SET_SRC (set))) != NULL
1535 && reg_equiv_memory_loc (REGNO (SET_DEST (set))) != NULL
1536 && rtx_equal_p (reg_equiv_memory_loc (REGNO (SET_SRC (set))),
1537 reg_equiv_memory_loc (REGNO (SET_DEST (set)))))))
1539 if (ira_conflicts_p)
1540 /* Inform IRA about the insn deletion. */
1541 ira_mark_memory_move_deletion (REGNO (SET_DEST (set)),
1542 REGNO (SET_SRC (set)));
1543 delete_insn (insn);
1544 /* Delete it from the reload chain. */
1545 if (chain->prev)
1546 chain->prev->next = next;
1547 else
1548 reload_insn_chain = next;
1549 if (next)
1550 next->prev = chain->prev;
1551 chain->next = unused_insn_chains;
1552 unused_insn_chains = chain;
1553 continue;
1556 if (num_eliminable)
1557 update_eliminable_offsets ();
1559 /* Remember for later shortcuts which insns had any reloads or
1560 register eliminations. */
1561 chain->need_elim = did_elimination;
1562 chain->need_reload = n_reloads > 0;
1563 chain->need_operand_change = operands_changed;
1565 /* Discard any register replacements done. */
1566 if (did_elimination)
1568 obstack_free (&reload_obstack, reload_insn_firstobj);
1569 PATTERN (insn) = old_body;
1570 INSN_CODE (insn) = old_code;
1571 REG_NOTES (insn) = old_notes;
1572 something_needs_elimination = 1;
1575 something_needs_operands_changed |= operands_changed;
1577 if (n_reloads != 0)
1579 copy_reloads (chain);
1580 *pprev_reload = chain;
1581 pprev_reload = &chain->next_need_reload;
1585 *pprev_reload = 0;
1588 /* This function is called from the register allocator to set up estimates
1589 for the cost of eliminating pseudos which have REG_EQUIV equivalences to
1590 an invariant. The structure is similar to calculate_needs_all_insns. */
1592 void
1593 calculate_elim_costs_all_insns (void)
1595 int *reg_equiv_init_cost;
1596 basic_block bb;
1597 int i;
1599 reg_equiv_init_cost = XCNEWVEC (int, max_regno);
1600 init_elim_table ();
1601 init_eliminable_invariants (get_insns (), false);
1603 set_initial_elim_offsets ();
1604 set_initial_label_offsets ();
1606 FOR_EACH_BB_FN (bb, cfun)
1608 rtx insn;
1609 elim_bb = bb;
1611 FOR_BB_INSNS (bb, insn)
1613 /* If this is a label, a JUMP_INSN, or has REG_NOTES (which might
1614 include REG_LABEL_OPERAND and REG_LABEL_TARGET), we need to see
1615 what effects this has on the known offsets at labels. */
1617 if (LABEL_P (insn) || JUMP_P (insn) || JUMP_TABLE_DATA_P (insn)
1618 || (INSN_P (insn) && REG_NOTES (insn) != 0))
1619 set_label_offsets (insn, insn, 0);
1621 if (INSN_P (insn))
1623 rtx set = single_set (insn);
1625 /* Skip insns that only set an equivalence. */
1626 if (set && REG_P (SET_DEST (set))
1627 && reg_renumber[REGNO (SET_DEST (set))] < 0
1628 && (reg_equiv_constant (REGNO (SET_DEST (set)))
1629 || reg_equiv_invariant (REGNO (SET_DEST (set)))))
1631 unsigned regno = REGNO (SET_DEST (set));
1632 rtx init = reg_equiv_init (regno);
1633 if (init)
1635 rtx t = eliminate_regs_1 (SET_SRC (set), VOIDmode, insn,
1636 false, true);
1637 int cost = set_src_cost (t, optimize_bb_for_speed_p (bb));
1638 int freq = REG_FREQ_FROM_BB (bb);
1640 reg_equiv_init_cost[regno] = cost * freq;
1641 continue;
1644 /* If needed, eliminate any eliminable registers. */
1645 if (num_eliminable || num_eliminable_invariants)
1646 elimination_costs_in_insn (insn);
1648 if (num_eliminable)
1649 update_eliminable_offsets ();
1653 for (i = FIRST_PSEUDO_REGISTER; i < max_regno; i++)
1655 if (reg_equiv_invariant (i))
1657 if (reg_equiv_init (i))
1659 int cost = reg_equiv_init_cost[i];
1660 if (dump_file)
1661 fprintf (dump_file,
1662 "Reg %d has equivalence, initial gains %d\n", i, cost);
1663 if (cost != 0)
1664 ira_adjust_equiv_reg_cost (i, cost);
1666 else
1668 if (dump_file)
1669 fprintf (dump_file,
1670 "Reg %d had equivalence, but can't be eliminated\n",
1672 ira_adjust_equiv_reg_cost (i, 0);
1677 free (reg_equiv_init_cost);
1678 free (offsets_known_at);
1679 free (offsets_at);
1680 offsets_at = NULL;
1681 offsets_known_at = NULL;
1684 /* Comparison function for qsort to decide which of two reloads
1685 should be handled first. *P1 and *P2 are the reload numbers. */
1687 static int
1688 reload_reg_class_lower (const void *r1p, const void *r2p)
1690 int r1 = *(const short *) r1p, r2 = *(const short *) r2p;
1691 int t;
1693 /* Consider required reloads before optional ones. */
1694 t = rld[r1].optional - rld[r2].optional;
1695 if (t != 0)
1696 return t;
1698 /* Count all solitary classes before non-solitary ones. */
1699 t = ((reg_class_size[(int) rld[r2].rclass] == 1)
1700 - (reg_class_size[(int) rld[r1].rclass] == 1));
1701 if (t != 0)
1702 return t;
1704 /* Aside from solitaires, consider all multi-reg groups first. */
1705 t = rld[r2].nregs - rld[r1].nregs;
1706 if (t != 0)
1707 return t;
1709 /* Consider reloads in order of increasing reg-class number. */
1710 t = (int) rld[r1].rclass - (int) rld[r2].rclass;
1711 if (t != 0)
1712 return t;
1714 /* If reloads are equally urgent, sort by reload number,
1715 so that the results of qsort leave nothing to chance. */
1716 return r1 - r2;
1719 /* The cost of spilling each hard reg. */
1720 static int spill_cost[FIRST_PSEUDO_REGISTER];
1722 /* When spilling multiple hard registers, we use SPILL_COST for the first
1723 spilled hard reg and SPILL_ADD_COST for subsequent regs. SPILL_ADD_COST
1724 only the first hard reg for a multi-reg pseudo. */
1725 static int spill_add_cost[FIRST_PSEUDO_REGISTER];
1727 /* Map of hard regno to pseudo regno currently occupying the hard
1728 reg. */
1729 static int hard_regno_to_pseudo_regno[FIRST_PSEUDO_REGISTER];
1731 /* Update the spill cost arrays, considering that pseudo REG is live. */
1733 static void
1734 count_pseudo (int reg)
1736 int freq = REG_FREQ (reg);
1737 int r = reg_renumber[reg];
1738 int nregs;
1740 /* Ignore spilled pseudo-registers which can be here only if IRA is used. */
1741 if (ira_conflicts_p && r < 0)
1742 return;
1744 if (REGNO_REG_SET_P (&pseudos_counted, reg)
1745 || REGNO_REG_SET_P (&spilled_pseudos, reg))
1746 return;
1748 SET_REGNO_REG_SET (&pseudos_counted, reg);
1750 gcc_assert (r >= 0);
1752 spill_add_cost[r] += freq;
1753 nregs = hard_regno_nregs[r][PSEUDO_REGNO_MODE (reg)];
1754 while (nregs-- > 0)
1756 hard_regno_to_pseudo_regno[r + nregs] = reg;
1757 spill_cost[r + nregs] += freq;
1761 /* Calculate the SPILL_COST and SPILL_ADD_COST arrays and determine the
1762 contents of BAD_SPILL_REGS for the insn described by CHAIN. */
1764 static void
1765 order_regs_for_reload (struct insn_chain *chain)
1767 unsigned i;
1768 HARD_REG_SET used_by_pseudos;
1769 HARD_REG_SET used_by_pseudos2;
1770 reg_set_iterator rsi;
1772 COPY_HARD_REG_SET (bad_spill_regs, fixed_reg_set);
1774 memset (spill_cost, 0, sizeof spill_cost);
1775 memset (spill_add_cost, 0, sizeof spill_add_cost);
1776 for (i = 0; i < FIRST_PSEUDO_REGISTER; i++)
1777 hard_regno_to_pseudo_regno[i] = -1;
1779 /* Count number of uses of each hard reg by pseudo regs allocated to it
1780 and then order them by decreasing use. First exclude hard registers
1781 that are live in or across this insn. */
1783 REG_SET_TO_HARD_REG_SET (used_by_pseudos, &chain->live_throughout);
1784 REG_SET_TO_HARD_REG_SET (used_by_pseudos2, &chain->dead_or_set);
1785 IOR_HARD_REG_SET (bad_spill_regs, used_by_pseudos);
1786 IOR_HARD_REG_SET (bad_spill_regs, used_by_pseudos2);
1788 /* Now find out which pseudos are allocated to it, and update
1789 hard_reg_n_uses. */
1790 CLEAR_REG_SET (&pseudos_counted);
1792 EXECUTE_IF_SET_IN_REG_SET
1793 (&chain->live_throughout, FIRST_PSEUDO_REGISTER, i, rsi)
1795 count_pseudo (i);
1797 EXECUTE_IF_SET_IN_REG_SET
1798 (&chain->dead_or_set, FIRST_PSEUDO_REGISTER, i, rsi)
1800 count_pseudo (i);
1802 CLEAR_REG_SET (&pseudos_counted);
1805 /* Vector of reload-numbers showing the order in which the reloads should
1806 be processed. */
1807 static short reload_order[MAX_RELOADS];
1809 /* This is used to keep track of the spill regs used in one insn. */
1810 static HARD_REG_SET used_spill_regs_local;
1812 /* We decided to spill hard register SPILLED, which has a size of
1813 SPILLED_NREGS. Determine how pseudo REG, which is live during the insn,
1814 is affected. We will add it to SPILLED_PSEUDOS if necessary, and we will
1815 update SPILL_COST/SPILL_ADD_COST. */
1817 static void
1818 count_spilled_pseudo (int spilled, int spilled_nregs, int reg)
1820 int freq = REG_FREQ (reg);
1821 int r = reg_renumber[reg];
1822 int nregs;
1824 /* Ignore spilled pseudo-registers which can be here only if IRA is used. */
1825 if (ira_conflicts_p && r < 0)
1826 return;
1828 gcc_assert (r >= 0);
1830 nregs = hard_regno_nregs[r][PSEUDO_REGNO_MODE (reg)];
1832 if (REGNO_REG_SET_P (&spilled_pseudos, reg)
1833 || spilled + spilled_nregs <= r || r + nregs <= spilled)
1834 return;
1836 SET_REGNO_REG_SET (&spilled_pseudos, reg);
1838 spill_add_cost[r] -= freq;
1839 while (nregs-- > 0)
1841 hard_regno_to_pseudo_regno[r + nregs] = -1;
1842 spill_cost[r + nregs] -= freq;
1846 /* Find reload register to use for reload number ORDER. */
1848 static int
1849 find_reg (struct insn_chain *chain, int order)
1851 int rnum = reload_order[order];
1852 struct reload *rl = rld + rnum;
1853 int best_cost = INT_MAX;
1854 int best_reg = -1;
1855 unsigned int i, j, n;
1856 int k;
1857 HARD_REG_SET not_usable;
1858 HARD_REG_SET used_by_other_reload;
1859 reg_set_iterator rsi;
1860 static int regno_pseudo_regs[FIRST_PSEUDO_REGISTER];
1861 static int best_regno_pseudo_regs[FIRST_PSEUDO_REGISTER];
1863 COPY_HARD_REG_SET (not_usable, bad_spill_regs);
1864 IOR_HARD_REG_SET (not_usable, bad_spill_regs_global);
1865 IOR_COMPL_HARD_REG_SET (not_usable, reg_class_contents[rl->rclass]);
1867 CLEAR_HARD_REG_SET (used_by_other_reload);
1868 for (k = 0; k < order; k++)
1870 int other = reload_order[k];
1872 if (rld[other].regno >= 0 && reloads_conflict (other, rnum))
1873 for (j = 0; j < rld[other].nregs; j++)
1874 SET_HARD_REG_BIT (used_by_other_reload, rld[other].regno + j);
1877 for (i = 0; i < FIRST_PSEUDO_REGISTER; i++)
1879 #ifdef REG_ALLOC_ORDER
1880 unsigned int regno = reg_alloc_order[i];
1881 #else
1882 unsigned int regno = i;
1883 #endif
1885 if (! TEST_HARD_REG_BIT (not_usable, regno)
1886 && ! TEST_HARD_REG_BIT (used_by_other_reload, regno)
1887 && HARD_REGNO_MODE_OK (regno, rl->mode))
1889 int this_cost = spill_cost[regno];
1890 int ok = 1;
1891 unsigned int this_nregs = hard_regno_nregs[regno][rl->mode];
1893 for (j = 1; j < this_nregs; j++)
1895 this_cost += spill_add_cost[regno + j];
1896 if ((TEST_HARD_REG_BIT (not_usable, regno + j))
1897 || TEST_HARD_REG_BIT (used_by_other_reload, regno + j))
1898 ok = 0;
1900 if (! ok)
1901 continue;
1903 if (ira_conflicts_p)
1905 /* Ask IRA to find a better pseudo-register for
1906 spilling. */
1907 for (n = j = 0; j < this_nregs; j++)
1909 int r = hard_regno_to_pseudo_regno[regno + j];
1911 if (r < 0)
1912 continue;
1913 if (n == 0 || regno_pseudo_regs[n - 1] != r)
1914 regno_pseudo_regs[n++] = r;
1916 regno_pseudo_regs[n++] = -1;
1917 if (best_reg < 0
1918 || ira_better_spill_reload_regno_p (regno_pseudo_regs,
1919 best_regno_pseudo_regs,
1920 rl->in, rl->out,
1921 chain->insn))
1923 best_reg = regno;
1924 for (j = 0;; j++)
1926 best_regno_pseudo_regs[j] = regno_pseudo_regs[j];
1927 if (regno_pseudo_regs[j] < 0)
1928 break;
1931 continue;
1934 if (rl->in && REG_P (rl->in) && REGNO (rl->in) == regno)
1935 this_cost--;
1936 if (rl->out && REG_P (rl->out) && REGNO (rl->out) == regno)
1937 this_cost--;
1938 if (this_cost < best_cost
1939 /* Among registers with equal cost, prefer caller-saved ones, or
1940 use REG_ALLOC_ORDER if it is defined. */
1941 || (this_cost == best_cost
1942 #ifdef REG_ALLOC_ORDER
1943 && (inv_reg_alloc_order[regno]
1944 < inv_reg_alloc_order[best_reg])
1945 #else
1946 && call_used_regs[regno]
1947 && ! call_used_regs[best_reg]
1948 #endif
1951 best_reg = regno;
1952 best_cost = this_cost;
1956 if (best_reg == -1)
1957 return 0;
1959 if (dump_file)
1960 fprintf (dump_file, "Using reg %d for reload %d\n", best_reg, rnum);
1962 rl->nregs = hard_regno_nregs[best_reg][rl->mode];
1963 rl->regno = best_reg;
1965 EXECUTE_IF_SET_IN_REG_SET
1966 (&chain->live_throughout, FIRST_PSEUDO_REGISTER, j, rsi)
1968 count_spilled_pseudo (best_reg, rl->nregs, j);
1971 EXECUTE_IF_SET_IN_REG_SET
1972 (&chain->dead_or_set, FIRST_PSEUDO_REGISTER, j, rsi)
1974 count_spilled_pseudo (best_reg, rl->nregs, j);
1977 for (i = 0; i < rl->nregs; i++)
1979 gcc_assert (spill_cost[best_reg + i] == 0);
1980 gcc_assert (spill_add_cost[best_reg + i] == 0);
1981 gcc_assert (hard_regno_to_pseudo_regno[best_reg + i] == -1);
1982 SET_HARD_REG_BIT (used_spill_regs_local, best_reg + i);
1984 return 1;
1987 /* Find more reload regs to satisfy the remaining need of an insn, which
1988 is given by CHAIN.
1989 Do it by ascending class number, since otherwise a reg
1990 might be spilled for a big class and might fail to count
1991 for a smaller class even though it belongs to that class. */
1993 static void
1994 find_reload_regs (struct insn_chain *chain)
1996 int i;
1998 /* In order to be certain of getting the registers we need,
1999 we must sort the reloads into order of increasing register class.
2000 Then our grabbing of reload registers will parallel the process
2001 that provided the reload registers. */
2002 for (i = 0; i < chain->n_reloads; i++)
2004 /* Show whether this reload already has a hard reg. */
2005 if (chain->rld[i].reg_rtx)
2007 int regno = REGNO (chain->rld[i].reg_rtx);
2008 chain->rld[i].regno = regno;
2009 chain->rld[i].nregs
2010 = hard_regno_nregs[regno][GET_MODE (chain->rld[i].reg_rtx)];
2012 else
2013 chain->rld[i].regno = -1;
2014 reload_order[i] = i;
2017 n_reloads = chain->n_reloads;
2018 memcpy (rld, chain->rld, n_reloads * sizeof (struct reload));
2020 CLEAR_HARD_REG_SET (used_spill_regs_local);
2022 if (dump_file)
2023 fprintf (dump_file, "Spilling for insn %d.\n", INSN_UID (chain->insn));
2025 qsort (reload_order, n_reloads, sizeof (short), reload_reg_class_lower);
2027 /* Compute the order of preference for hard registers to spill. */
2029 order_regs_for_reload (chain);
2031 for (i = 0; i < n_reloads; i++)
2033 int r = reload_order[i];
2035 /* Ignore reloads that got marked inoperative. */
2036 if ((rld[r].out != 0 || rld[r].in != 0 || rld[r].secondary_p)
2037 && ! rld[r].optional
2038 && rld[r].regno == -1)
2039 if (! find_reg (chain, i))
2041 if (dump_file)
2042 fprintf (dump_file, "reload failure for reload %d\n", r);
2043 spill_failure (chain->insn, rld[r].rclass);
2044 failure = 1;
2045 return;
2049 COPY_HARD_REG_SET (chain->used_spill_regs, used_spill_regs_local);
2050 IOR_HARD_REG_SET (used_spill_regs, used_spill_regs_local);
2052 memcpy (chain->rld, rld, n_reloads * sizeof (struct reload));
2055 static void
2056 select_reload_regs (void)
2058 struct insn_chain *chain;
2060 /* Try to satisfy the needs for each insn. */
2061 for (chain = insns_need_reload; chain != 0;
2062 chain = chain->next_need_reload)
2063 find_reload_regs (chain);
2066 /* Delete all insns that were inserted by emit_caller_save_insns during
2067 this iteration. */
2068 static void
2069 delete_caller_save_insns (void)
2071 struct insn_chain *c = reload_insn_chain;
2073 while (c != 0)
2075 while (c != 0 && c->is_caller_save_insn)
2077 struct insn_chain *next = c->next;
2078 rtx insn = c->insn;
2080 if (c == reload_insn_chain)
2081 reload_insn_chain = next;
2082 delete_insn (insn);
2084 if (next)
2085 next->prev = c->prev;
2086 if (c->prev)
2087 c->prev->next = next;
2088 c->next = unused_insn_chains;
2089 unused_insn_chains = c;
2090 c = next;
2092 if (c != 0)
2093 c = c->next;
2097 /* Handle the failure to find a register to spill.
2098 INSN should be one of the insns which needed this particular spill reg. */
2100 static void
2101 spill_failure (rtx insn, enum reg_class rclass)
2103 if (asm_noperands (PATTERN (insn)) >= 0)
2104 error_for_asm (insn, "can%'t find a register in class %qs while "
2105 "reloading %<asm%>",
2106 reg_class_names[rclass]);
2107 else
2109 error ("unable to find a register to spill in class %qs",
2110 reg_class_names[rclass]);
2112 if (dump_file)
2114 fprintf (dump_file, "\nReloads for insn # %d\n", INSN_UID (insn));
2115 debug_reload_to_stream (dump_file);
2117 fatal_insn ("this is the insn:", insn);
2121 /* Delete an unneeded INSN and any previous insns who sole purpose is loading
2122 data that is dead in INSN. */
2124 static void
2125 delete_dead_insn (rtx insn)
2127 rtx prev = prev_active_insn (insn);
2128 rtx prev_dest;
2130 /* If the previous insn sets a register that dies in our insn make
2131 a note that we want to run DCE immediately after reload.
2133 We used to delete the previous insn & recurse, but that's wrong for
2134 block local equivalences. Instead of trying to figure out the exact
2135 circumstances where we can delete the potentially dead insns, just
2136 let DCE do the job. */
2137 if (prev && BLOCK_FOR_INSN (prev) == BLOCK_FOR_INSN (insn)
2138 && GET_CODE (PATTERN (prev)) == SET
2139 && (prev_dest = SET_DEST (PATTERN (prev)), REG_P (prev_dest))
2140 && reg_mentioned_p (prev_dest, PATTERN (insn))
2141 && find_regno_note (insn, REG_DEAD, REGNO (prev_dest))
2142 && ! side_effects_p (SET_SRC (PATTERN (prev))))
2143 need_dce = 1;
2145 SET_INSN_DELETED (insn);
2148 /* Modify the home of pseudo-reg I.
2149 The new home is present in reg_renumber[I].
2151 FROM_REG may be the hard reg that the pseudo-reg is being spilled from;
2152 or it may be -1, meaning there is none or it is not relevant.
2153 This is used so that all pseudos spilled from a given hard reg
2154 can share one stack slot. */
2156 static void
2157 alter_reg (int i, int from_reg, bool dont_share_p)
2159 /* When outputting an inline function, this can happen
2160 for a reg that isn't actually used. */
2161 if (regno_reg_rtx[i] == 0)
2162 return;
2164 /* If the reg got changed to a MEM at rtl-generation time,
2165 ignore it. */
2166 if (!REG_P (regno_reg_rtx[i]))
2167 return;
2169 /* Modify the reg-rtx to contain the new hard reg
2170 number or else to contain its pseudo reg number. */
2171 SET_REGNO (regno_reg_rtx[i],
2172 reg_renumber[i] >= 0 ? reg_renumber[i] : i);
2174 /* If we have a pseudo that is needed but has no hard reg or equivalent,
2175 allocate a stack slot for it. */
2177 if (reg_renumber[i] < 0
2178 && REG_N_REFS (i) > 0
2179 && reg_equiv_constant (i) == 0
2180 && (reg_equiv_invariant (i) == 0
2181 || reg_equiv_init (i) == 0)
2182 && reg_equiv_memory_loc (i) == 0)
2184 rtx x = NULL_RTX;
2185 enum machine_mode mode = GET_MODE (regno_reg_rtx[i]);
2186 unsigned int inherent_size = PSEUDO_REGNO_BYTES (i);
2187 unsigned int inherent_align = GET_MODE_ALIGNMENT (mode);
2188 unsigned int total_size = MAX (inherent_size, reg_max_ref_width[i]);
2189 unsigned int min_align = reg_max_ref_width[i] * BITS_PER_UNIT;
2190 int adjust = 0;
2192 something_was_spilled = true;
2194 if (ira_conflicts_p)
2196 /* Mark the spill for IRA. */
2197 SET_REGNO_REG_SET (&spilled_pseudos, i);
2198 if (!dont_share_p)
2199 x = ira_reuse_stack_slot (i, inherent_size, total_size);
2202 if (x)
2205 /* Each pseudo reg has an inherent size which comes from its own mode,
2206 and a total size which provides room for paradoxical subregs
2207 which refer to the pseudo reg in wider modes.
2209 We can use a slot already allocated if it provides both
2210 enough inherent space and enough total space.
2211 Otherwise, we allocate a new slot, making sure that it has no less
2212 inherent space, and no less total space, then the previous slot. */
2213 else if (from_reg == -1 || (!dont_share_p && ira_conflicts_p))
2215 rtx stack_slot;
2217 /* No known place to spill from => no slot to reuse. */
2218 x = assign_stack_local (mode, total_size,
2219 min_align > inherent_align
2220 || total_size > inherent_size ? -1 : 0);
2222 stack_slot = x;
2224 /* Cancel the big-endian correction done in assign_stack_local.
2225 Get the address of the beginning of the slot. This is so we
2226 can do a big-endian correction unconditionally below. */
2227 if (BYTES_BIG_ENDIAN)
2229 adjust = inherent_size - total_size;
2230 if (adjust)
2231 stack_slot
2232 = adjust_address_nv (x, mode_for_size (total_size
2233 * BITS_PER_UNIT,
2234 MODE_INT, 1),
2235 adjust);
2238 if (! dont_share_p && ira_conflicts_p)
2239 /* Inform IRA about allocation a new stack slot. */
2240 ira_mark_new_stack_slot (stack_slot, i, total_size);
2243 /* Reuse a stack slot if possible. */
2244 else if (spill_stack_slot[from_reg] != 0
2245 && spill_stack_slot_width[from_reg] >= total_size
2246 && (GET_MODE_SIZE (GET_MODE (spill_stack_slot[from_reg]))
2247 >= inherent_size)
2248 && MEM_ALIGN (spill_stack_slot[from_reg]) >= min_align)
2249 x = spill_stack_slot[from_reg];
2251 /* Allocate a bigger slot. */
2252 else
2254 /* Compute maximum size needed, both for inherent size
2255 and for total size. */
2256 rtx stack_slot;
2258 if (spill_stack_slot[from_reg])
2260 if (GET_MODE_SIZE (GET_MODE (spill_stack_slot[from_reg]))
2261 > inherent_size)
2262 mode = GET_MODE (spill_stack_slot[from_reg]);
2263 if (spill_stack_slot_width[from_reg] > total_size)
2264 total_size = spill_stack_slot_width[from_reg];
2265 if (MEM_ALIGN (spill_stack_slot[from_reg]) > min_align)
2266 min_align = MEM_ALIGN (spill_stack_slot[from_reg]);
2269 /* Make a slot with that size. */
2270 x = assign_stack_local (mode, total_size,
2271 min_align > inherent_align
2272 || total_size > inherent_size ? -1 : 0);
2273 stack_slot = x;
2275 /* Cancel the big-endian correction done in assign_stack_local.
2276 Get the address of the beginning of the slot. This is so we
2277 can do a big-endian correction unconditionally below. */
2278 if (BYTES_BIG_ENDIAN)
2280 adjust = GET_MODE_SIZE (mode) - total_size;
2281 if (adjust)
2282 stack_slot
2283 = adjust_address_nv (x, mode_for_size (total_size
2284 * BITS_PER_UNIT,
2285 MODE_INT, 1),
2286 adjust);
2289 spill_stack_slot[from_reg] = stack_slot;
2290 spill_stack_slot_width[from_reg] = total_size;
2293 /* On a big endian machine, the "address" of the slot
2294 is the address of the low part that fits its inherent mode. */
2295 if (BYTES_BIG_ENDIAN && inherent_size < total_size)
2296 adjust += (total_size - inherent_size);
2298 /* If we have any adjustment to make, or if the stack slot is the
2299 wrong mode, make a new stack slot. */
2300 x = adjust_address_nv (x, GET_MODE (regno_reg_rtx[i]), adjust);
2302 /* Set all of the memory attributes as appropriate for a spill. */
2303 set_mem_attrs_for_spill (x);
2305 /* Save the stack slot for later. */
2306 reg_equiv_memory_loc (i) = x;
2310 /* Mark the slots in regs_ever_live for the hard regs used by
2311 pseudo-reg number REGNO, accessed in MODE. */
2313 static void
2314 mark_home_live_1 (int regno, enum machine_mode mode)
2316 int i, lim;
2318 i = reg_renumber[regno];
2319 if (i < 0)
2320 return;
2321 lim = end_hard_regno (mode, i);
2322 while (i < lim)
2323 df_set_regs_ever_live (i++, true);
2326 /* Mark the slots in regs_ever_live for the hard regs
2327 used by pseudo-reg number REGNO. */
2329 void
2330 mark_home_live (int regno)
2332 if (reg_renumber[regno] >= 0)
2333 mark_home_live_1 (regno, PSEUDO_REGNO_MODE (regno));
2336 /* This function handles the tracking of elimination offsets around branches.
2338 X is a piece of RTL being scanned.
2340 INSN is the insn that it came from, if any.
2342 INITIAL_P is nonzero if we are to set the offset to be the initial
2343 offset and zero if we are setting the offset of the label to be the
2344 current offset. */
2346 static void
2347 set_label_offsets (rtx x, rtx insn, int initial_p)
2349 enum rtx_code code = GET_CODE (x);
2350 rtx tem;
2351 unsigned int i;
2352 struct elim_table *p;
2354 switch (code)
2356 case LABEL_REF:
2357 if (LABEL_REF_NONLOCAL_P (x))
2358 return;
2360 x = XEXP (x, 0);
2362 /* ... fall through ... */
2364 case CODE_LABEL:
2365 /* If we know nothing about this label, set the desired offsets. Note
2366 that this sets the offset at a label to be the offset before a label
2367 if we don't know anything about the label. This is not correct for
2368 the label after a BARRIER, but is the best guess we can make. If
2369 we guessed wrong, we will suppress an elimination that might have
2370 been possible had we been able to guess correctly. */
2372 if (! offsets_known_at[CODE_LABEL_NUMBER (x) - first_label_num])
2374 for (i = 0; i < NUM_ELIMINABLE_REGS; i++)
2375 offsets_at[CODE_LABEL_NUMBER (x) - first_label_num][i]
2376 = (initial_p ? reg_eliminate[i].initial_offset
2377 : reg_eliminate[i].offset);
2378 offsets_known_at[CODE_LABEL_NUMBER (x) - first_label_num] = 1;
2381 /* Otherwise, if this is the definition of a label and it is
2382 preceded by a BARRIER, set our offsets to the known offset of
2383 that label. */
2385 else if (x == insn
2386 && (tem = prev_nonnote_insn (insn)) != 0
2387 && BARRIER_P (tem))
2388 set_offsets_for_label (insn);
2389 else
2390 /* If neither of the above cases is true, compare each offset
2391 with those previously recorded and suppress any eliminations
2392 where the offsets disagree. */
2394 for (i = 0; i < NUM_ELIMINABLE_REGS; i++)
2395 if (offsets_at[CODE_LABEL_NUMBER (x) - first_label_num][i]
2396 != (initial_p ? reg_eliminate[i].initial_offset
2397 : reg_eliminate[i].offset))
2398 reg_eliminate[i].can_eliminate = 0;
2400 return;
2402 case JUMP_TABLE_DATA:
2403 set_label_offsets (PATTERN (insn), insn, initial_p);
2404 return;
2406 case JUMP_INSN:
2407 set_label_offsets (PATTERN (insn), insn, initial_p);
2409 /* ... fall through ... */
2411 case INSN:
2412 case CALL_INSN:
2413 /* Any labels mentioned in REG_LABEL_OPERAND notes can be branched
2414 to indirectly and hence must have all eliminations at their
2415 initial offsets. */
2416 for (tem = REG_NOTES (x); tem; tem = XEXP (tem, 1))
2417 if (REG_NOTE_KIND (tem) == REG_LABEL_OPERAND)
2418 set_label_offsets (XEXP (tem, 0), insn, 1);
2419 return;
2421 case PARALLEL:
2422 case ADDR_VEC:
2423 case ADDR_DIFF_VEC:
2424 /* Each of the labels in the parallel or address vector must be
2425 at their initial offsets. We want the first field for PARALLEL
2426 and ADDR_VEC and the second field for ADDR_DIFF_VEC. */
2428 for (i = 0; i < (unsigned) XVECLEN (x, code == ADDR_DIFF_VEC); i++)
2429 set_label_offsets (XVECEXP (x, code == ADDR_DIFF_VEC, i),
2430 insn, initial_p);
2431 return;
2433 case SET:
2434 /* We only care about setting PC. If the source is not RETURN,
2435 IF_THEN_ELSE, or a label, disable any eliminations not at
2436 their initial offsets. Similarly if any arm of the IF_THEN_ELSE
2437 isn't one of those possibilities. For branches to a label,
2438 call ourselves recursively.
2440 Note that this can disable elimination unnecessarily when we have
2441 a non-local goto since it will look like a non-constant jump to
2442 someplace in the current function. This isn't a significant
2443 problem since such jumps will normally be when all elimination
2444 pairs are back to their initial offsets. */
2446 if (SET_DEST (x) != pc_rtx)
2447 return;
2449 switch (GET_CODE (SET_SRC (x)))
2451 case PC:
2452 case RETURN:
2453 return;
2455 case LABEL_REF:
2456 set_label_offsets (SET_SRC (x), insn, initial_p);
2457 return;
2459 case IF_THEN_ELSE:
2460 tem = XEXP (SET_SRC (x), 1);
2461 if (GET_CODE (tem) == LABEL_REF)
2462 set_label_offsets (XEXP (tem, 0), insn, initial_p);
2463 else if (GET_CODE (tem) != PC && GET_CODE (tem) != RETURN)
2464 break;
2466 tem = XEXP (SET_SRC (x), 2);
2467 if (GET_CODE (tem) == LABEL_REF)
2468 set_label_offsets (XEXP (tem, 0), insn, initial_p);
2469 else if (GET_CODE (tem) != PC && GET_CODE (tem) != RETURN)
2470 break;
2471 return;
2473 default:
2474 break;
2477 /* If we reach here, all eliminations must be at their initial
2478 offset because we are doing a jump to a variable address. */
2479 for (p = reg_eliminate; p < &reg_eliminate[NUM_ELIMINABLE_REGS]; p++)
2480 if (p->offset != p->initial_offset)
2481 p->can_eliminate = 0;
2482 break;
2484 default:
2485 break;
2489 /* Called through for_each_rtx, this function examines every reg that occurs
2490 in PX and adjusts the costs for its elimination which are gathered by IRA.
2491 DATA is the insn in which PX occurs. We do not recurse into MEM
2492 expressions. */
2494 static int
2495 note_reg_elim_costly (rtx *px, void *data)
2497 rtx insn = (rtx)data;
2498 rtx x = *px;
2500 if (MEM_P (x))
2501 return -1;
2503 if (REG_P (x)
2504 && REGNO (x) >= FIRST_PSEUDO_REGISTER
2505 && reg_equiv_init (REGNO (x))
2506 && reg_equiv_invariant (REGNO (x)))
2508 rtx t = reg_equiv_invariant (REGNO (x));
2509 rtx new_rtx = eliminate_regs_1 (t, Pmode, insn, true, true);
2510 int cost = set_src_cost (new_rtx, optimize_bb_for_speed_p (elim_bb));
2511 int freq = REG_FREQ_FROM_BB (elim_bb);
2513 if (cost != 0)
2514 ira_adjust_equiv_reg_cost (REGNO (x), -cost * freq);
2516 return 0;
2519 /* Scan X and replace any eliminable registers (such as fp) with a
2520 replacement (such as sp), plus an offset.
2522 MEM_MODE is the mode of an enclosing MEM. We need this to know how
2523 much to adjust a register for, e.g., PRE_DEC. Also, if we are inside a
2524 MEM, we are allowed to replace a sum of a register and the constant zero
2525 with the register, which we cannot do outside a MEM. In addition, we need
2526 to record the fact that a register is referenced outside a MEM.
2528 If INSN is an insn, it is the insn containing X. If we replace a REG
2529 in a SET_DEST with an equivalent MEM and INSN is nonzero, write a
2530 CLOBBER of the pseudo after INSN so find_equiv_regs will know that
2531 the REG is being modified.
2533 Alternatively, INSN may be a note (an EXPR_LIST or INSN_LIST).
2534 That's used when we eliminate in expressions stored in notes.
2535 This means, do not set ref_outside_mem even if the reference
2536 is outside of MEMs.
2538 If FOR_COSTS is true, we are being called before reload in order to
2539 estimate the costs of keeping registers with an equivalence unallocated.
2541 REG_EQUIV_MEM and REG_EQUIV_ADDRESS contain address that have had
2542 replacements done assuming all offsets are at their initial values. If
2543 they are not, or if REG_EQUIV_ADDRESS is nonzero for a pseudo we
2544 encounter, return the actual location so that find_reloads will do
2545 the proper thing. */
2547 static rtx
2548 eliminate_regs_1 (rtx x, enum machine_mode mem_mode, rtx insn,
2549 bool may_use_invariant, bool for_costs)
2551 enum rtx_code code = GET_CODE (x);
2552 struct elim_table *ep;
2553 int regno;
2554 rtx new_rtx;
2555 int i, j;
2556 const char *fmt;
2557 int copied = 0;
2559 if (! current_function_decl)
2560 return x;
2562 switch (code)
2564 CASE_CONST_ANY:
2565 case CONST:
2566 case SYMBOL_REF:
2567 case CODE_LABEL:
2568 case PC:
2569 case CC0:
2570 case ASM_INPUT:
2571 case ADDR_VEC:
2572 case ADDR_DIFF_VEC:
2573 case RETURN:
2574 return x;
2576 case REG:
2577 regno = REGNO (x);
2579 /* First handle the case where we encounter a bare register that
2580 is eliminable. Replace it with a PLUS. */
2581 if (regno < FIRST_PSEUDO_REGISTER)
2583 for (ep = reg_eliminate; ep < &reg_eliminate[NUM_ELIMINABLE_REGS];
2584 ep++)
2585 if (ep->from_rtx == x && ep->can_eliminate)
2586 return plus_constant (Pmode, ep->to_rtx, ep->previous_offset);
2589 else if (reg_renumber && reg_renumber[regno] < 0
2590 && reg_equivs
2591 && reg_equiv_invariant (regno))
2593 if (may_use_invariant || (insn && DEBUG_INSN_P (insn)))
2594 return eliminate_regs_1 (copy_rtx (reg_equiv_invariant (regno)),
2595 mem_mode, insn, true, for_costs);
2596 /* There exists at least one use of REGNO that cannot be
2597 eliminated. Prevent the defining insn from being deleted. */
2598 reg_equiv_init (regno) = NULL_RTX;
2599 if (!for_costs)
2600 alter_reg (regno, -1, true);
2602 return x;
2604 /* You might think handling MINUS in a manner similar to PLUS is a
2605 good idea. It is not. It has been tried multiple times and every
2606 time the change has had to have been reverted.
2608 Other parts of reload know a PLUS is special (gen_reload for example)
2609 and require special code to handle code a reloaded PLUS operand.
2611 Also consider backends where the flags register is clobbered by a
2612 MINUS, but we can emit a PLUS that does not clobber flags (IA-32,
2613 lea instruction comes to mind). If we try to reload a MINUS, we
2614 may kill the flags register that was holding a useful value.
2616 So, please before trying to handle MINUS, consider reload as a
2617 whole instead of this little section as well as the backend issues. */
2618 case PLUS:
2619 /* If this is the sum of an eliminable register and a constant, rework
2620 the sum. */
2621 if (REG_P (XEXP (x, 0))
2622 && REGNO (XEXP (x, 0)) < FIRST_PSEUDO_REGISTER
2623 && CONSTANT_P (XEXP (x, 1)))
2625 for (ep = reg_eliminate; ep < &reg_eliminate[NUM_ELIMINABLE_REGS];
2626 ep++)
2627 if (ep->from_rtx == XEXP (x, 0) && ep->can_eliminate)
2629 /* The only time we want to replace a PLUS with a REG (this
2630 occurs when the constant operand of the PLUS is the negative
2631 of the offset) is when we are inside a MEM. We won't want
2632 to do so at other times because that would change the
2633 structure of the insn in a way that reload can't handle.
2634 We special-case the commonest situation in
2635 eliminate_regs_in_insn, so just replace a PLUS with a
2636 PLUS here, unless inside a MEM. */
2637 if (mem_mode != 0 && CONST_INT_P (XEXP (x, 1))
2638 && INTVAL (XEXP (x, 1)) == - ep->previous_offset)
2639 return ep->to_rtx;
2640 else
2641 return gen_rtx_PLUS (Pmode, ep->to_rtx,
2642 plus_constant (Pmode, XEXP (x, 1),
2643 ep->previous_offset));
2646 /* If the register is not eliminable, we are done since the other
2647 operand is a constant. */
2648 return x;
2651 /* If this is part of an address, we want to bring any constant to the
2652 outermost PLUS. We will do this by doing register replacement in
2653 our operands and seeing if a constant shows up in one of them.
2655 Note that there is no risk of modifying the structure of the insn,
2656 since we only get called for its operands, thus we are either
2657 modifying the address inside a MEM, or something like an address
2658 operand of a load-address insn. */
2661 rtx new0 = eliminate_regs_1 (XEXP (x, 0), mem_mode, insn, true,
2662 for_costs);
2663 rtx new1 = eliminate_regs_1 (XEXP (x, 1), mem_mode, insn, true,
2664 for_costs);
2666 if (reg_renumber && (new0 != XEXP (x, 0) || new1 != XEXP (x, 1)))
2668 /* If one side is a PLUS and the other side is a pseudo that
2669 didn't get a hard register but has a reg_equiv_constant,
2670 we must replace the constant here since it may no longer
2671 be in the position of any operand. */
2672 if (GET_CODE (new0) == PLUS && REG_P (new1)
2673 && REGNO (new1) >= FIRST_PSEUDO_REGISTER
2674 && reg_renumber[REGNO (new1)] < 0
2675 && reg_equivs
2676 && reg_equiv_constant (REGNO (new1)) != 0)
2677 new1 = reg_equiv_constant (REGNO (new1));
2678 else if (GET_CODE (new1) == PLUS && REG_P (new0)
2679 && REGNO (new0) >= FIRST_PSEUDO_REGISTER
2680 && reg_renumber[REGNO (new0)] < 0
2681 && reg_equiv_constant (REGNO (new0)) != 0)
2682 new0 = reg_equiv_constant (REGNO (new0));
2684 new_rtx = form_sum (GET_MODE (x), new0, new1);
2686 /* As above, if we are not inside a MEM we do not want to
2687 turn a PLUS into something else. We might try to do so here
2688 for an addition of 0 if we aren't optimizing. */
2689 if (! mem_mode && GET_CODE (new_rtx) != PLUS)
2690 return gen_rtx_PLUS (GET_MODE (x), new_rtx, const0_rtx);
2691 else
2692 return new_rtx;
2695 return x;
2697 case MULT:
2698 /* If this is the product of an eliminable register and a
2699 constant, apply the distribute law and move the constant out
2700 so that we have (plus (mult ..) ..). This is needed in order
2701 to keep load-address insns valid. This case is pathological.
2702 We ignore the possibility of overflow here. */
2703 if (REG_P (XEXP (x, 0))
2704 && REGNO (XEXP (x, 0)) < FIRST_PSEUDO_REGISTER
2705 && CONST_INT_P (XEXP (x, 1)))
2706 for (ep = reg_eliminate; ep < &reg_eliminate[NUM_ELIMINABLE_REGS];
2707 ep++)
2708 if (ep->from_rtx == XEXP (x, 0) && ep->can_eliminate)
2710 if (! mem_mode
2711 /* Refs inside notes or in DEBUG_INSNs don't count for
2712 this purpose. */
2713 && ! (insn != 0 && (GET_CODE (insn) == EXPR_LIST
2714 || GET_CODE (insn) == INSN_LIST
2715 || DEBUG_INSN_P (insn))))
2716 ep->ref_outside_mem = 1;
2718 return
2719 plus_constant (Pmode,
2720 gen_rtx_MULT (Pmode, ep->to_rtx, XEXP (x, 1)),
2721 ep->previous_offset * INTVAL (XEXP (x, 1)));
2724 /* ... fall through ... */
2726 case CALL:
2727 case COMPARE:
2728 /* See comments before PLUS about handling MINUS. */
2729 case MINUS:
2730 case DIV: case UDIV:
2731 case MOD: case UMOD:
2732 case AND: case IOR: case XOR:
2733 case ROTATERT: case ROTATE:
2734 case ASHIFTRT: case LSHIFTRT: case ASHIFT:
2735 case NE: case EQ:
2736 case GE: case GT: case GEU: case GTU:
2737 case LE: case LT: case LEU: case LTU:
2739 rtx new0 = eliminate_regs_1 (XEXP (x, 0), mem_mode, insn, false,
2740 for_costs);
2741 rtx new1 = XEXP (x, 1)
2742 ? eliminate_regs_1 (XEXP (x, 1), mem_mode, insn, false,
2743 for_costs) : 0;
2745 if (new0 != XEXP (x, 0) || new1 != XEXP (x, 1))
2746 return gen_rtx_fmt_ee (code, GET_MODE (x), new0, new1);
2748 return x;
2750 case EXPR_LIST:
2751 /* If we have something in XEXP (x, 0), the usual case, eliminate it. */
2752 if (XEXP (x, 0))
2754 new_rtx = eliminate_regs_1 (XEXP (x, 0), mem_mode, insn, true,
2755 for_costs);
2756 if (new_rtx != XEXP (x, 0))
2758 /* If this is a REG_DEAD note, it is not valid anymore.
2759 Using the eliminated version could result in creating a
2760 REG_DEAD note for the stack or frame pointer. */
2761 if (REG_NOTE_KIND (x) == REG_DEAD)
2762 return (XEXP (x, 1)
2763 ? eliminate_regs_1 (XEXP (x, 1), mem_mode, insn, true,
2764 for_costs)
2765 : NULL_RTX);
2767 x = alloc_reg_note (REG_NOTE_KIND (x), new_rtx, XEXP (x, 1));
2771 /* ... fall through ... */
2773 case INSN_LIST:
2774 case INT_LIST:
2775 /* Now do eliminations in the rest of the chain. If this was
2776 an EXPR_LIST, this might result in allocating more memory than is
2777 strictly needed, but it simplifies the code. */
2778 if (XEXP (x, 1))
2780 new_rtx = eliminate_regs_1 (XEXP (x, 1), mem_mode, insn, true,
2781 for_costs);
2782 if (new_rtx != XEXP (x, 1))
2783 return
2784 gen_rtx_fmt_ee (GET_CODE (x), GET_MODE (x), XEXP (x, 0), new_rtx);
2786 return x;
2788 case PRE_INC:
2789 case POST_INC:
2790 case PRE_DEC:
2791 case POST_DEC:
2792 /* We do not support elimination of a register that is modified.
2793 elimination_effects has already make sure that this does not
2794 happen. */
2795 return x;
2797 case PRE_MODIFY:
2798 case POST_MODIFY:
2799 /* We do not support elimination of a register that is modified.
2800 elimination_effects has already make sure that this does not
2801 happen. The only remaining case we need to consider here is
2802 that the increment value may be an eliminable register. */
2803 if (GET_CODE (XEXP (x, 1)) == PLUS
2804 && XEXP (XEXP (x, 1), 0) == XEXP (x, 0))
2806 rtx new_rtx = eliminate_regs_1 (XEXP (XEXP (x, 1), 1), mem_mode,
2807 insn, true, for_costs);
2809 if (new_rtx != XEXP (XEXP (x, 1), 1))
2810 return gen_rtx_fmt_ee (code, GET_MODE (x), XEXP (x, 0),
2811 gen_rtx_PLUS (GET_MODE (x),
2812 XEXP (x, 0), new_rtx));
2814 return x;
2816 case STRICT_LOW_PART:
2817 case NEG: case NOT:
2818 case SIGN_EXTEND: case ZERO_EXTEND:
2819 case TRUNCATE: case FLOAT_EXTEND: case FLOAT_TRUNCATE:
2820 case FLOAT: case FIX:
2821 case UNSIGNED_FIX: case UNSIGNED_FLOAT:
2822 case ABS:
2823 case SQRT:
2824 case FFS:
2825 case CLZ:
2826 case CTZ:
2827 case POPCOUNT:
2828 case PARITY:
2829 case BSWAP:
2830 new_rtx = eliminate_regs_1 (XEXP (x, 0), mem_mode, insn, false,
2831 for_costs);
2832 if (new_rtx != XEXP (x, 0))
2833 return gen_rtx_fmt_e (code, GET_MODE (x), new_rtx);
2834 return x;
2836 case SUBREG:
2837 /* Similar to above processing, but preserve SUBREG_BYTE.
2838 Convert (subreg (mem)) to (mem) if not paradoxical.
2839 Also, if we have a non-paradoxical (subreg (pseudo)) and the
2840 pseudo didn't get a hard reg, we must replace this with the
2841 eliminated version of the memory location because push_reload
2842 may do the replacement in certain circumstances. */
2843 if (REG_P (SUBREG_REG (x))
2844 && !paradoxical_subreg_p (x)
2845 && reg_equivs
2846 && reg_equiv_memory_loc (REGNO (SUBREG_REG (x))) != 0)
2848 new_rtx = SUBREG_REG (x);
2850 else
2851 new_rtx = eliminate_regs_1 (SUBREG_REG (x), mem_mode, insn, false, for_costs);
2853 if (new_rtx != SUBREG_REG (x))
2855 int x_size = GET_MODE_SIZE (GET_MODE (x));
2856 int new_size = GET_MODE_SIZE (GET_MODE (new_rtx));
2858 if (MEM_P (new_rtx)
2859 && ((x_size < new_size
2860 #ifdef WORD_REGISTER_OPERATIONS
2861 /* On these machines, combine can create rtl of the form
2862 (set (subreg:m1 (reg:m2 R) 0) ...)
2863 where m1 < m2, and expects something interesting to
2864 happen to the entire word. Moreover, it will use the
2865 (reg:m2 R) later, expecting all bits to be preserved.
2866 So if the number of words is the same, preserve the
2867 subreg so that push_reload can see it. */
2868 && ! ((x_size - 1) / UNITS_PER_WORD
2869 == (new_size -1 ) / UNITS_PER_WORD)
2870 #endif
2872 || x_size == new_size)
2874 return adjust_address_nv (new_rtx, GET_MODE (x), SUBREG_BYTE (x));
2875 else
2876 return gen_rtx_SUBREG (GET_MODE (x), new_rtx, SUBREG_BYTE (x));
2879 return x;
2881 case MEM:
2882 /* Our only special processing is to pass the mode of the MEM to our
2883 recursive call and copy the flags. While we are here, handle this
2884 case more efficiently. */
2886 new_rtx = eliminate_regs_1 (XEXP (x, 0), GET_MODE (x), insn, true,
2887 for_costs);
2888 if (for_costs
2889 && memory_address_p (GET_MODE (x), XEXP (x, 0))
2890 && !memory_address_p (GET_MODE (x), new_rtx))
2891 for_each_rtx (&XEXP (x, 0), note_reg_elim_costly, insn);
2893 return replace_equiv_address_nv (x, new_rtx);
2895 case USE:
2896 /* Handle insn_list USE that a call to a pure function may generate. */
2897 new_rtx = eliminate_regs_1 (XEXP (x, 0), VOIDmode, insn, false,
2898 for_costs);
2899 if (new_rtx != XEXP (x, 0))
2900 return gen_rtx_USE (GET_MODE (x), new_rtx);
2901 return x;
2903 case CLOBBER:
2904 case ASM_OPERANDS:
2905 gcc_assert (insn && DEBUG_INSN_P (insn));
2906 break;
2908 case SET:
2909 gcc_unreachable ();
2911 default:
2912 break;
2915 /* Process each of our operands recursively. If any have changed, make a
2916 copy of the rtx. */
2917 fmt = GET_RTX_FORMAT (code);
2918 for (i = 0; i < GET_RTX_LENGTH (code); i++, fmt++)
2920 if (*fmt == 'e')
2922 new_rtx = eliminate_regs_1 (XEXP (x, i), mem_mode, insn, false,
2923 for_costs);
2924 if (new_rtx != XEXP (x, i) && ! copied)
2926 x = shallow_copy_rtx (x);
2927 copied = 1;
2929 XEXP (x, i) = new_rtx;
2931 else if (*fmt == 'E')
2933 int copied_vec = 0;
2934 for (j = 0; j < XVECLEN (x, i); j++)
2936 new_rtx = eliminate_regs_1 (XVECEXP (x, i, j), mem_mode, insn, false,
2937 for_costs);
2938 if (new_rtx != XVECEXP (x, i, j) && ! copied_vec)
2940 rtvec new_v = gen_rtvec_v (XVECLEN (x, i),
2941 XVEC (x, i)->elem);
2942 if (! copied)
2944 x = shallow_copy_rtx (x);
2945 copied = 1;
2947 XVEC (x, i) = new_v;
2948 copied_vec = 1;
2950 XVECEXP (x, i, j) = new_rtx;
2955 return x;
2959 eliminate_regs (rtx x, enum machine_mode mem_mode, rtx insn)
2961 return eliminate_regs_1 (x, mem_mode, insn, false, false);
2964 /* Scan rtx X for modifications of elimination target registers. Update
2965 the table of eliminables to reflect the changed state. MEM_MODE is
2966 the mode of an enclosing MEM rtx, or VOIDmode if not within a MEM. */
2968 static void
2969 elimination_effects (rtx x, enum machine_mode mem_mode)
2971 enum rtx_code code = GET_CODE (x);
2972 struct elim_table *ep;
2973 int regno;
2974 int i, j;
2975 const char *fmt;
2977 switch (code)
2979 CASE_CONST_ANY:
2980 case CONST:
2981 case SYMBOL_REF:
2982 case CODE_LABEL:
2983 case PC:
2984 case CC0:
2985 case ASM_INPUT:
2986 case ADDR_VEC:
2987 case ADDR_DIFF_VEC:
2988 case RETURN:
2989 return;
2991 case REG:
2992 regno = REGNO (x);
2994 /* First handle the case where we encounter a bare register that
2995 is eliminable. Replace it with a PLUS. */
2996 if (regno < FIRST_PSEUDO_REGISTER)
2998 for (ep = reg_eliminate; ep < &reg_eliminate[NUM_ELIMINABLE_REGS];
2999 ep++)
3000 if (ep->from_rtx == x && ep->can_eliminate)
3002 if (! mem_mode)
3003 ep->ref_outside_mem = 1;
3004 return;
3008 else if (reg_renumber[regno] < 0
3009 && reg_equivs
3010 && reg_equiv_constant (regno)
3011 && ! function_invariant_p (reg_equiv_constant (regno)))
3012 elimination_effects (reg_equiv_constant (regno), mem_mode);
3013 return;
3015 case PRE_INC:
3016 case POST_INC:
3017 case PRE_DEC:
3018 case POST_DEC:
3019 case POST_MODIFY:
3020 case PRE_MODIFY:
3021 /* If we modify the source of an elimination rule, disable it. */
3022 for (ep = reg_eliminate; ep < &reg_eliminate[NUM_ELIMINABLE_REGS]; ep++)
3023 if (ep->from_rtx == XEXP (x, 0))
3024 ep->can_eliminate = 0;
3026 /* If we modify the target of an elimination rule by adding a constant,
3027 update its offset. If we modify the target in any other way, we'll
3028 have to disable the rule as well. */
3029 for (ep = reg_eliminate; ep < &reg_eliminate[NUM_ELIMINABLE_REGS]; ep++)
3030 if (ep->to_rtx == XEXP (x, 0))
3032 int size = GET_MODE_SIZE (mem_mode);
3034 /* If more bytes than MEM_MODE are pushed, account for them. */
3035 #ifdef PUSH_ROUNDING
3036 if (ep->to_rtx == stack_pointer_rtx)
3037 size = PUSH_ROUNDING (size);
3038 #endif
3039 if (code == PRE_DEC || code == POST_DEC)
3040 ep->offset += size;
3041 else if (code == PRE_INC || code == POST_INC)
3042 ep->offset -= size;
3043 else if (code == PRE_MODIFY || code == POST_MODIFY)
3045 if (GET_CODE (XEXP (x, 1)) == PLUS
3046 && XEXP (x, 0) == XEXP (XEXP (x, 1), 0)
3047 && CONST_INT_P (XEXP (XEXP (x, 1), 1)))
3048 ep->offset -= INTVAL (XEXP (XEXP (x, 1), 1));
3049 else
3050 ep->can_eliminate = 0;
3054 /* These two aren't unary operators. */
3055 if (code == POST_MODIFY || code == PRE_MODIFY)
3056 break;
3058 /* Fall through to generic unary operation case. */
3059 case STRICT_LOW_PART:
3060 case NEG: case NOT:
3061 case SIGN_EXTEND: case ZERO_EXTEND:
3062 case TRUNCATE: case FLOAT_EXTEND: case FLOAT_TRUNCATE:
3063 case FLOAT: case FIX:
3064 case UNSIGNED_FIX: case UNSIGNED_FLOAT:
3065 case ABS:
3066 case SQRT:
3067 case FFS:
3068 case CLZ:
3069 case CTZ:
3070 case POPCOUNT:
3071 case PARITY:
3072 case BSWAP:
3073 elimination_effects (XEXP (x, 0), mem_mode);
3074 return;
3076 case SUBREG:
3077 if (REG_P (SUBREG_REG (x))
3078 && (GET_MODE_SIZE (GET_MODE (x))
3079 <= GET_MODE_SIZE (GET_MODE (SUBREG_REG (x))))
3080 && reg_equivs
3081 && reg_equiv_memory_loc (REGNO (SUBREG_REG (x))) != 0)
3082 return;
3084 elimination_effects (SUBREG_REG (x), mem_mode);
3085 return;
3087 case USE:
3088 /* If using a register that is the source of an eliminate we still
3089 think can be performed, note it cannot be performed since we don't
3090 know how this register is used. */
3091 for (ep = reg_eliminate; ep < &reg_eliminate[NUM_ELIMINABLE_REGS]; ep++)
3092 if (ep->from_rtx == XEXP (x, 0))
3093 ep->can_eliminate = 0;
3095 elimination_effects (XEXP (x, 0), mem_mode);
3096 return;
3098 case CLOBBER:
3099 /* If clobbering a register that is the replacement register for an
3100 elimination we still think can be performed, note that it cannot
3101 be performed. Otherwise, we need not be concerned about it. */
3102 for (ep = reg_eliminate; ep < &reg_eliminate[NUM_ELIMINABLE_REGS]; ep++)
3103 if (ep->to_rtx == XEXP (x, 0))
3104 ep->can_eliminate = 0;
3106 elimination_effects (XEXP (x, 0), mem_mode);
3107 return;
3109 case SET:
3110 /* Check for setting a register that we know about. */
3111 if (REG_P (SET_DEST (x)))
3113 /* See if this is setting the replacement register for an
3114 elimination.
3116 If DEST is the hard frame pointer, we do nothing because we
3117 assume that all assignments to the frame pointer are for
3118 non-local gotos and are being done at a time when they are valid
3119 and do not disturb anything else. Some machines want to
3120 eliminate a fake argument pointer (or even a fake frame pointer)
3121 with either the real frame or the stack pointer. Assignments to
3122 the hard frame pointer must not prevent this elimination. */
3124 for (ep = reg_eliminate; ep < &reg_eliminate[NUM_ELIMINABLE_REGS];
3125 ep++)
3126 if (ep->to_rtx == SET_DEST (x)
3127 && SET_DEST (x) != hard_frame_pointer_rtx)
3129 /* If it is being incremented, adjust the offset. Otherwise,
3130 this elimination can't be done. */
3131 rtx src = SET_SRC (x);
3133 if (GET_CODE (src) == PLUS
3134 && XEXP (src, 0) == SET_DEST (x)
3135 && CONST_INT_P (XEXP (src, 1)))
3136 ep->offset -= INTVAL (XEXP (src, 1));
3137 else
3138 ep->can_eliminate = 0;
3142 elimination_effects (SET_DEST (x), VOIDmode);
3143 elimination_effects (SET_SRC (x), VOIDmode);
3144 return;
3146 case MEM:
3147 /* Our only special processing is to pass the mode of the MEM to our
3148 recursive call. */
3149 elimination_effects (XEXP (x, 0), GET_MODE (x));
3150 return;
3152 default:
3153 break;
3156 fmt = GET_RTX_FORMAT (code);
3157 for (i = 0; i < GET_RTX_LENGTH (code); i++, fmt++)
3159 if (*fmt == 'e')
3160 elimination_effects (XEXP (x, i), mem_mode);
3161 else if (*fmt == 'E')
3162 for (j = 0; j < XVECLEN (x, i); j++)
3163 elimination_effects (XVECEXP (x, i, j), mem_mode);
3167 /* Descend through rtx X and verify that no references to eliminable registers
3168 remain. If any do remain, mark the involved register as not
3169 eliminable. */
3171 static void
3172 check_eliminable_occurrences (rtx x)
3174 const char *fmt;
3175 int i;
3176 enum rtx_code code;
3178 if (x == 0)
3179 return;
3181 code = GET_CODE (x);
3183 if (code == REG && REGNO (x) < FIRST_PSEUDO_REGISTER)
3185 struct elim_table *ep;
3187 for (ep = reg_eliminate; ep < &reg_eliminate[NUM_ELIMINABLE_REGS]; ep++)
3188 if (ep->from_rtx == x)
3189 ep->can_eliminate = 0;
3190 return;
3193 fmt = GET_RTX_FORMAT (code);
3194 for (i = 0; i < GET_RTX_LENGTH (code); i++, fmt++)
3196 if (*fmt == 'e')
3197 check_eliminable_occurrences (XEXP (x, i));
3198 else if (*fmt == 'E')
3200 int j;
3201 for (j = 0; j < XVECLEN (x, i); j++)
3202 check_eliminable_occurrences (XVECEXP (x, i, j));
3207 /* Scan INSN and eliminate all eliminable registers in it.
3209 If REPLACE is nonzero, do the replacement destructively. Also
3210 delete the insn as dead it if it is setting an eliminable register.
3212 If REPLACE is zero, do all our allocations in reload_obstack.
3214 If no eliminations were done and this insn doesn't require any elimination
3215 processing (these are not identical conditions: it might be updating sp,
3216 but not referencing fp; this needs to be seen during reload_as_needed so
3217 that the offset between fp and sp can be taken into consideration), zero
3218 is returned. Otherwise, 1 is returned. */
3220 static int
3221 eliminate_regs_in_insn (rtx insn, int replace)
3223 int icode = recog_memoized (insn);
3224 rtx old_body = PATTERN (insn);
3225 int insn_is_asm = asm_noperands (old_body) >= 0;
3226 rtx old_set = single_set (insn);
3227 rtx new_body;
3228 int val = 0;
3229 int i;
3230 rtx substed_operand[MAX_RECOG_OPERANDS];
3231 rtx orig_operand[MAX_RECOG_OPERANDS];
3232 struct elim_table *ep;
3233 rtx plus_src, plus_cst_src;
3235 if (! insn_is_asm && icode < 0)
3237 gcc_assert (DEBUG_INSN_P (insn)
3238 || GET_CODE (PATTERN (insn)) == USE
3239 || GET_CODE (PATTERN (insn)) == CLOBBER
3240 || GET_CODE (PATTERN (insn)) == ASM_INPUT);
3241 if (DEBUG_INSN_P (insn))
3242 INSN_VAR_LOCATION_LOC (insn)
3243 = eliminate_regs (INSN_VAR_LOCATION_LOC (insn), VOIDmode, insn);
3244 return 0;
3247 if (old_set != 0 && REG_P (SET_DEST (old_set))
3248 && REGNO (SET_DEST (old_set)) < FIRST_PSEUDO_REGISTER)
3250 /* Check for setting an eliminable register. */
3251 for (ep = reg_eliminate; ep < &reg_eliminate[NUM_ELIMINABLE_REGS]; ep++)
3252 if (ep->from_rtx == SET_DEST (old_set) && ep->can_eliminate)
3254 #if !HARD_FRAME_POINTER_IS_FRAME_POINTER
3255 /* If this is setting the frame pointer register to the
3256 hardware frame pointer register and this is an elimination
3257 that will be done (tested above), this insn is really
3258 adjusting the frame pointer downward to compensate for
3259 the adjustment done before a nonlocal goto. */
3260 if (ep->from == FRAME_POINTER_REGNUM
3261 && ep->to == HARD_FRAME_POINTER_REGNUM)
3263 rtx base = SET_SRC (old_set);
3264 rtx base_insn = insn;
3265 HOST_WIDE_INT offset = 0;
3267 while (base != ep->to_rtx)
3269 rtx prev_insn, prev_set;
3271 if (GET_CODE (base) == PLUS
3272 && CONST_INT_P (XEXP (base, 1)))
3274 offset += INTVAL (XEXP (base, 1));
3275 base = XEXP (base, 0);
3277 else if ((prev_insn = prev_nonnote_insn (base_insn)) != 0
3278 && (prev_set = single_set (prev_insn)) != 0
3279 && rtx_equal_p (SET_DEST (prev_set), base))
3281 base = SET_SRC (prev_set);
3282 base_insn = prev_insn;
3284 else
3285 break;
3288 if (base == ep->to_rtx)
3290 rtx src = plus_constant (Pmode, ep->to_rtx,
3291 offset - ep->offset);
3293 new_body = old_body;
3294 if (! replace)
3296 new_body = copy_insn (old_body);
3297 if (REG_NOTES (insn))
3298 REG_NOTES (insn) = copy_insn_1 (REG_NOTES (insn));
3300 PATTERN (insn) = new_body;
3301 old_set = single_set (insn);
3303 /* First see if this insn remains valid when we
3304 make the change. If not, keep the INSN_CODE
3305 the same and let reload fit it up. */
3306 validate_change (insn, &SET_SRC (old_set), src, 1);
3307 validate_change (insn, &SET_DEST (old_set),
3308 ep->to_rtx, 1);
3309 if (! apply_change_group ())
3311 SET_SRC (old_set) = src;
3312 SET_DEST (old_set) = ep->to_rtx;
3315 val = 1;
3316 goto done;
3319 #endif
3321 /* In this case this insn isn't serving a useful purpose. We
3322 will delete it in reload_as_needed once we know that this
3323 elimination is, in fact, being done.
3325 If REPLACE isn't set, we can't delete this insn, but needn't
3326 process it since it won't be used unless something changes. */
3327 if (replace)
3329 delete_dead_insn (insn);
3330 return 1;
3332 val = 1;
3333 goto done;
3337 /* We allow one special case which happens to work on all machines we
3338 currently support: a single set with the source or a REG_EQUAL
3339 note being a PLUS of an eliminable register and a constant. */
3340 plus_src = plus_cst_src = 0;
3341 if (old_set && REG_P (SET_DEST (old_set)))
3343 if (GET_CODE (SET_SRC (old_set)) == PLUS)
3344 plus_src = SET_SRC (old_set);
3345 /* First see if the source is of the form (plus (...) CST). */
3346 if (plus_src
3347 && CONST_INT_P (XEXP (plus_src, 1)))
3348 plus_cst_src = plus_src;
3349 else if (REG_P (SET_SRC (old_set))
3350 || plus_src)
3352 /* Otherwise, see if we have a REG_EQUAL note of the form
3353 (plus (...) CST). */
3354 rtx links;
3355 for (links = REG_NOTES (insn); links; links = XEXP (links, 1))
3357 if ((REG_NOTE_KIND (links) == REG_EQUAL
3358 || REG_NOTE_KIND (links) == REG_EQUIV)
3359 && GET_CODE (XEXP (links, 0)) == PLUS
3360 && CONST_INT_P (XEXP (XEXP (links, 0), 1)))
3362 plus_cst_src = XEXP (links, 0);
3363 break;
3368 /* Check that the first operand of the PLUS is a hard reg or
3369 the lowpart subreg of one. */
3370 if (plus_cst_src)
3372 rtx reg = XEXP (plus_cst_src, 0);
3373 if (GET_CODE (reg) == SUBREG && subreg_lowpart_p (reg))
3374 reg = SUBREG_REG (reg);
3376 if (!REG_P (reg) || REGNO (reg) >= FIRST_PSEUDO_REGISTER)
3377 plus_cst_src = 0;
3380 if (plus_cst_src)
3382 rtx reg = XEXP (plus_cst_src, 0);
3383 HOST_WIDE_INT offset = INTVAL (XEXP (plus_cst_src, 1));
3385 if (GET_CODE (reg) == SUBREG)
3386 reg = SUBREG_REG (reg);
3388 for (ep = reg_eliminate; ep < &reg_eliminate[NUM_ELIMINABLE_REGS]; ep++)
3389 if (ep->from_rtx == reg && ep->can_eliminate)
3391 rtx to_rtx = ep->to_rtx;
3392 offset += ep->offset;
3393 offset = trunc_int_for_mode (offset, GET_MODE (plus_cst_src));
3395 if (GET_CODE (XEXP (plus_cst_src, 0)) == SUBREG)
3396 to_rtx = gen_lowpart (GET_MODE (XEXP (plus_cst_src, 0)),
3397 to_rtx);
3398 /* If we have a nonzero offset, and the source is already
3399 a simple REG, the following transformation would
3400 increase the cost of the insn by replacing a simple REG
3401 with (plus (reg sp) CST). So try only when we already
3402 had a PLUS before. */
3403 if (offset == 0 || plus_src)
3405 rtx new_src = plus_constant (GET_MODE (to_rtx),
3406 to_rtx, offset);
3408 new_body = old_body;
3409 if (! replace)
3411 new_body = copy_insn (old_body);
3412 if (REG_NOTES (insn))
3413 REG_NOTES (insn) = copy_insn_1 (REG_NOTES (insn));
3415 PATTERN (insn) = new_body;
3416 old_set = single_set (insn);
3418 /* First see if this insn remains valid when we make the
3419 change. If not, try to replace the whole pattern with
3420 a simple set (this may help if the original insn was a
3421 PARALLEL that was only recognized as single_set due to
3422 REG_UNUSED notes). If this isn't valid either, keep
3423 the INSN_CODE the same and let reload fix it up. */
3424 if (!validate_change (insn, &SET_SRC (old_set), new_src, 0))
3426 rtx new_pat = gen_rtx_SET (VOIDmode,
3427 SET_DEST (old_set), new_src);
3429 if (!validate_change (insn, &PATTERN (insn), new_pat, 0))
3430 SET_SRC (old_set) = new_src;
3433 else
3434 break;
3436 val = 1;
3437 /* This can't have an effect on elimination offsets, so skip right
3438 to the end. */
3439 goto done;
3443 /* Determine the effects of this insn on elimination offsets. */
3444 elimination_effects (old_body, VOIDmode);
3446 /* Eliminate all eliminable registers occurring in operands that
3447 can be handled by reload. */
3448 extract_insn (insn);
3449 for (i = 0; i < recog_data.n_operands; i++)
3451 orig_operand[i] = recog_data.operand[i];
3452 substed_operand[i] = recog_data.operand[i];
3454 /* For an asm statement, every operand is eliminable. */
3455 if (insn_is_asm || insn_data[icode].operand[i].eliminable)
3457 bool is_set_src, in_plus;
3459 /* Check for setting a register that we know about. */
3460 if (recog_data.operand_type[i] != OP_IN
3461 && REG_P (orig_operand[i]))
3463 /* If we are assigning to a register that can be eliminated, it
3464 must be as part of a PARALLEL, since the code above handles
3465 single SETs. We must indicate that we can no longer
3466 eliminate this reg. */
3467 for (ep = reg_eliminate; ep < &reg_eliminate[NUM_ELIMINABLE_REGS];
3468 ep++)
3469 if (ep->from_rtx == orig_operand[i])
3470 ep->can_eliminate = 0;
3473 /* Companion to the above plus substitution, we can allow
3474 invariants as the source of a plain move. */
3475 is_set_src = false;
3476 if (old_set
3477 && recog_data.operand_loc[i] == &SET_SRC (old_set))
3478 is_set_src = true;
3479 in_plus = false;
3480 if (plus_src
3481 && (recog_data.operand_loc[i] == &XEXP (plus_src, 0)
3482 || recog_data.operand_loc[i] == &XEXP (plus_src, 1)))
3483 in_plus = true;
3485 substed_operand[i]
3486 = eliminate_regs_1 (recog_data.operand[i], VOIDmode,
3487 replace ? insn : NULL_RTX,
3488 is_set_src || in_plus, false);
3489 if (substed_operand[i] != orig_operand[i])
3490 val = 1;
3491 /* Terminate the search in check_eliminable_occurrences at
3492 this point. */
3493 *recog_data.operand_loc[i] = 0;
3495 /* If an output operand changed from a REG to a MEM and INSN is an
3496 insn, write a CLOBBER insn. */
3497 if (recog_data.operand_type[i] != OP_IN
3498 && REG_P (orig_operand[i])
3499 && MEM_P (substed_operand[i])
3500 && replace)
3501 emit_insn_after (gen_clobber (orig_operand[i]), insn);
3505 for (i = 0; i < recog_data.n_dups; i++)
3506 *recog_data.dup_loc[i]
3507 = *recog_data.operand_loc[(int) recog_data.dup_num[i]];
3509 /* If any eliminable remain, they aren't eliminable anymore. */
3510 check_eliminable_occurrences (old_body);
3512 /* Substitute the operands; the new values are in the substed_operand
3513 array. */
3514 for (i = 0; i < recog_data.n_operands; i++)
3515 *recog_data.operand_loc[i] = substed_operand[i];
3516 for (i = 0; i < recog_data.n_dups; i++)
3517 *recog_data.dup_loc[i] = substed_operand[(int) recog_data.dup_num[i]];
3519 /* If we are replacing a body that was a (set X (plus Y Z)), try to
3520 re-recognize the insn. We do this in case we had a simple addition
3521 but now can do this as a load-address. This saves an insn in this
3522 common case.
3523 If re-recognition fails, the old insn code number will still be used,
3524 and some register operands may have changed into PLUS expressions.
3525 These will be handled by find_reloads by loading them into a register
3526 again. */
3528 if (val)
3530 /* If we aren't replacing things permanently and we changed something,
3531 make another copy to ensure that all the RTL is new. Otherwise
3532 things can go wrong if find_reload swaps commutative operands
3533 and one is inside RTL that has been copied while the other is not. */
3534 new_body = old_body;
3535 if (! replace)
3537 new_body = copy_insn (old_body);
3538 if (REG_NOTES (insn))
3539 REG_NOTES (insn) = copy_insn_1 (REG_NOTES (insn));
3541 PATTERN (insn) = new_body;
3543 /* If we had a move insn but now we don't, rerecognize it. This will
3544 cause spurious re-recognition if the old move had a PARALLEL since
3545 the new one still will, but we can't call single_set without
3546 having put NEW_BODY into the insn and the re-recognition won't
3547 hurt in this rare case. */
3548 /* ??? Why this huge if statement - why don't we just rerecognize the
3549 thing always? */
3550 if (! insn_is_asm
3551 && old_set != 0
3552 && ((REG_P (SET_SRC (old_set))
3553 && (GET_CODE (new_body) != SET
3554 || !REG_P (SET_SRC (new_body))))
3555 /* If this was a load from or store to memory, compare
3556 the MEM in recog_data.operand to the one in the insn.
3557 If they are not equal, then rerecognize the insn. */
3558 || (old_set != 0
3559 && ((MEM_P (SET_SRC (old_set))
3560 && SET_SRC (old_set) != recog_data.operand[1])
3561 || (MEM_P (SET_DEST (old_set))
3562 && SET_DEST (old_set) != recog_data.operand[0])))
3563 /* If this was an add insn before, rerecognize. */
3564 || GET_CODE (SET_SRC (old_set)) == PLUS))
3566 int new_icode = recog (PATTERN (insn), insn, 0);
3567 if (new_icode >= 0)
3568 INSN_CODE (insn) = new_icode;
3572 /* Restore the old body. If there were any changes to it, we made a copy
3573 of it while the changes were still in place, so we'll correctly return
3574 a modified insn below. */
3575 if (! replace)
3577 /* Restore the old body. */
3578 for (i = 0; i < recog_data.n_operands; i++)
3579 /* Restoring a top-level match_parallel would clobber the new_body
3580 we installed in the insn. */
3581 if (recog_data.operand_loc[i] != &PATTERN (insn))
3582 *recog_data.operand_loc[i] = orig_operand[i];
3583 for (i = 0; i < recog_data.n_dups; i++)
3584 *recog_data.dup_loc[i] = orig_operand[(int) recog_data.dup_num[i]];
3587 /* Update all elimination pairs to reflect the status after the current
3588 insn. The changes we make were determined by the earlier call to
3589 elimination_effects.
3591 We also detect cases where register elimination cannot be done,
3592 namely, if a register would be both changed and referenced outside a MEM
3593 in the resulting insn since such an insn is often undefined and, even if
3594 not, we cannot know what meaning will be given to it. Note that it is
3595 valid to have a register used in an address in an insn that changes it
3596 (presumably with a pre- or post-increment or decrement).
3598 If anything changes, return nonzero. */
3600 for (ep = reg_eliminate; ep < &reg_eliminate[NUM_ELIMINABLE_REGS]; ep++)
3602 if (ep->previous_offset != ep->offset && ep->ref_outside_mem)
3603 ep->can_eliminate = 0;
3605 ep->ref_outside_mem = 0;
3607 if (ep->previous_offset != ep->offset)
3608 val = 1;
3611 done:
3612 /* If we changed something, perform elimination in REG_NOTES. This is
3613 needed even when REPLACE is zero because a REG_DEAD note might refer
3614 to a register that we eliminate and could cause a different number
3615 of spill registers to be needed in the final reload pass than in
3616 the pre-passes. */
3617 if (val && REG_NOTES (insn) != 0)
3618 REG_NOTES (insn)
3619 = eliminate_regs_1 (REG_NOTES (insn), VOIDmode, REG_NOTES (insn), true,
3620 false);
3622 return val;
3625 /* Like eliminate_regs_in_insn, but only estimate costs for the use of the
3626 register allocator. INSN is the instruction we need to examine, we perform
3627 eliminations in its operands and record cases where eliminating a reg with
3628 an invariant equivalence would add extra cost. */
3630 static void
3631 elimination_costs_in_insn (rtx insn)
3633 int icode = recog_memoized (insn);
3634 rtx old_body = PATTERN (insn);
3635 int insn_is_asm = asm_noperands (old_body) >= 0;
3636 rtx old_set = single_set (insn);
3637 int i;
3638 rtx orig_operand[MAX_RECOG_OPERANDS];
3639 rtx orig_dup[MAX_RECOG_OPERANDS];
3640 struct elim_table *ep;
3641 rtx plus_src, plus_cst_src;
3642 bool sets_reg_p;
3644 if (! insn_is_asm && icode < 0)
3646 gcc_assert (DEBUG_INSN_P (insn)
3647 || GET_CODE (PATTERN (insn)) == USE
3648 || GET_CODE (PATTERN (insn)) == CLOBBER
3649 || GET_CODE (PATTERN (insn)) == ASM_INPUT);
3650 return;
3653 if (old_set != 0 && REG_P (SET_DEST (old_set))
3654 && REGNO (SET_DEST (old_set)) < FIRST_PSEUDO_REGISTER)
3656 /* Check for setting an eliminable register. */
3657 for (ep = reg_eliminate; ep < &reg_eliminate[NUM_ELIMINABLE_REGS]; ep++)
3658 if (ep->from_rtx == SET_DEST (old_set) && ep->can_eliminate)
3659 return;
3662 /* We allow one special case which happens to work on all machines we
3663 currently support: a single set with the source or a REG_EQUAL
3664 note being a PLUS of an eliminable register and a constant. */
3665 plus_src = plus_cst_src = 0;
3666 sets_reg_p = false;
3667 if (old_set && REG_P (SET_DEST (old_set)))
3669 sets_reg_p = true;
3670 if (GET_CODE (SET_SRC (old_set)) == PLUS)
3671 plus_src = SET_SRC (old_set);
3672 /* First see if the source is of the form (plus (...) CST). */
3673 if (plus_src
3674 && CONST_INT_P (XEXP (plus_src, 1)))
3675 plus_cst_src = plus_src;
3676 else if (REG_P (SET_SRC (old_set))
3677 || plus_src)
3679 /* Otherwise, see if we have a REG_EQUAL note of the form
3680 (plus (...) CST). */
3681 rtx links;
3682 for (links = REG_NOTES (insn); links; links = XEXP (links, 1))
3684 if ((REG_NOTE_KIND (links) == REG_EQUAL
3685 || REG_NOTE_KIND (links) == REG_EQUIV)
3686 && GET_CODE (XEXP (links, 0)) == PLUS
3687 && CONST_INT_P (XEXP (XEXP (links, 0), 1)))
3689 plus_cst_src = XEXP (links, 0);
3690 break;
3696 /* Determine the effects of this insn on elimination offsets. */
3697 elimination_effects (old_body, VOIDmode);
3699 /* Eliminate all eliminable registers occurring in operands that
3700 can be handled by reload. */
3701 extract_insn (insn);
3702 for (i = 0; i < recog_data.n_dups; i++)
3703 orig_dup[i] = *recog_data.dup_loc[i];
3705 for (i = 0; i < recog_data.n_operands; i++)
3707 orig_operand[i] = recog_data.operand[i];
3709 /* For an asm statement, every operand is eliminable. */
3710 if (insn_is_asm || insn_data[icode].operand[i].eliminable)
3712 bool is_set_src, in_plus;
3714 /* Check for setting a register that we know about. */
3715 if (recog_data.operand_type[i] != OP_IN
3716 && REG_P (orig_operand[i]))
3718 /* If we are assigning to a register that can be eliminated, it
3719 must be as part of a PARALLEL, since the code above handles
3720 single SETs. We must indicate that we can no longer
3721 eliminate this reg. */
3722 for (ep = reg_eliminate; ep < &reg_eliminate[NUM_ELIMINABLE_REGS];
3723 ep++)
3724 if (ep->from_rtx == orig_operand[i])
3725 ep->can_eliminate = 0;
3728 /* Companion to the above plus substitution, we can allow
3729 invariants as the source of a plain move. */
3730 is_set_src = false;
3731 if (old_set && recog_data.operand_loc[i] == &SET_SRC (old_set))
3732 is_set_src = true;
3733 if (is_set_src && !sets_reg_p)
3734 note_reg_elim_costly (&SET_SRC (old_set), insn);
3735 in_plus = false;
3736 if (plus_src && sets_reg_p
3737 && (recog_data.operand_loc[i] == &XEXP (plus_src, 0)
3738 || recog_data.operand_loc[i] == &XEXP (plus_src, 1)))
3739 in_plus = true;
3741 eliminate_regs_1 (recog_data.operand[i], VOIDmode,
3742 NULL_RTX,
3743 is_set_src || in_plus, true);
3744 /* Terminate the search in check_eliminable_occurrences at
3745 this point. */
3746 *recog_data.operand_loc[i] = 0;
3750 for (i = 0; i < recog_data.n_dups; i++)
3751 *recog_data.dup_loc[i]
3752 = *recog_data.operand_loc[(int) recog_data.dup_num[i]];
3754 /* If any eliminable remain, they aren't eliminable anymore. */
3755 check_eliminable_occurrences (old_body);
3757 /* Restore the old body. */
3758 for (i = 0; i < recog_data.n_operands; i++)
3759 *recog_data.operand_loc[i] = orig_operand[i];
3760 for (i = 0; i < recog_data.n_dups; i++)
3761 *recog_data.dup_loc[i] = orig_dup[i];
3763 /* Update all elimination pairs to reflect the status after the current
3764 insn. The changes we make were determined by the earlier call to
3765 elimination_effects. */
3767 for (ep = reg_eliminate; ep < &reg_eliminate[NUM_ELIMINABLE_REGS]; ep++)
3769 if (ep->previous_offset != ep->offset && ep->ref_outside_mem)
3770 ep->can_eliminate = 0;
3772 ep->ref_outside_mem = 0;
3775 return;
3778 /* Loop through all elimination pairs.
3779 Recalculate the number not at initial offset.
3781 Compute the maximum offset (minimum offset if the stack does not
3782 grow downward) for each elimination pair. */
3784 static void
3785 update_eliminable_offsets (void)
3787 struct elim_table *ep;
3789 num_not_at_initial_offset = 0;
3790 for (ep = reg_eliminate; ep < &reg_eliminate[NUM_ELIMINABLE_REGS]; ep++)
3792 ep->previous_offset = ep->offset;
3793 if (ep->can_eliminate && ep->offset != ep->initial_offset)
3794 num_not_at_initial_offset++;
3798 /* Given X, a SET or CLOBBER of DEST, if DEST is the target of a register
3799 replacement we currently believe is valid, mark it as not eliminable if X
3800 modifies DEST in any way other than by adding a constant integer to it.
3802 If DEST is the frame pointer, we do nothing because we assume that
3803 all assignments to the hard frame pointer are nonlocal gotos and are being
3804 done at a time when they are valid and do not disturb anything else.
3805 Some machines want to eliminate a fake argument pointer with either the
3806 frame or stack pointer. Assignments to the hard frame pointer must not
3807 prevent this elimination.
3809 Called via note_stores from reload before starting its passes to scan
3810 the insns of the function. */
3812 static void
3813 mark_not_eliminable (rtx dest, const_rtx x, void *data ATTRIBUTE_UNUSED)
3815 unsigned int i;
3817 /* A SUBREG of a hard register here is just changing its mode. We should
3818 not see a SUBREG of an eliminable hard register, but check just in
3819 case. */
3820 if (GET_CODE (dest) == SUBREG)
3821 dest = SUBREG_REG (dest);
3823 if (dest == hard_frame_pointer_rtx)
3824 return;
3826 for (i = 0; i < NUM_ELIMINABLE_REGS; i++)
3827 if (reg_eliminate[i].can_eliminate && dest == reg_eliminate[i].to_rtx
3828 && (GET_CODE (x) != SET
3829 || GET_CODE (SET_SRC (x)) != PLUS
3830 || XEXP (SET_SRC (x), 0) != dest
3831 || !CONST_INT_P (XEXP (SET_SRC (x), 1))))
3833 reg_eliminate[i].can_eliminate_previous
3834 = reg_eliminate[i].can_eliminate = 0;
3835 num_eliminable--;
3839 /* Verify that the initial elimination offsets did not change since the
3840 last call to set_initial_elim_offsets. This is used to catch cases
3841 where something illegal happened during reload_as_needed that could
3842 cause incorrect code to be generated if we did not check for it. */
3844 static bool
3845 verify_initial_elim_offsets (void)
3847 HOST_WIDE_INT t;
3849 if (!num_eliminable)
3850 return true;
3852 #ifdef ELIMINABLE_REGS
3854 struct elim_table *ep;
3856 for (ep = reg_eliminate; ep < &reg_eliminate[NUM_ELIMINABLE_REGS]; ep++)
3858 INITIAL_ELIMINATION_OFFSET (ep->from, ep->to, t);
3859 if (t != ep->initial_offset)
3860 return false;
3863 #else
3864 INITIAL_FRAME_POINTER_OFFSET (t);
3865 if (t != reg_eliminate[0].initial_offset)
3866 return false;
3867 #endif
3869 return true;
3872 /* Reset all offsets on eliminable registers to their initial values. */
3874 static void
3875 set_initial_elim_offsets (void)
3877 struct elim_table *ep = reg_eliminate;
3879 #ifdef ELIMINABLE_REGS
3880 for (; ep < &reg_eliminate[NUM_ELIMINABLE_REGS]; ep++)
3882 INITIAL_ELIMINATION_OFFSET (ep->from, ep->to, ep->initial_offset);
3883 ep->previous_offset = ep->offset = ep->initial_offset;
3885 #else
3886 INITIAL_FRAME_POINTER_OFFSET (ep->initial_offset);
3887 ep->previous_offset = ep->offset = ep->initial_offset;
3888 #endif
3890 num_not_at_initial_offset = 0;
3893 /* Subroutine of set_initial_label_offsets called via for_each_eh_label. */
3895 static void
3896 set_initial_eh_label_offset (rtx label)
3898 set_label_offsets (label, NULL_RTX, 1);
3901 /* Initialize the known label offsets.
3902 Set a known offset for each forced label to be at the initial offset
3903 of each elimination. We do this because we assume that all
3904 computed jumps occur from a location where each elimination is
3905 at its initial offset.
3906 For all other labels, show that we don't know the offsets. */
3908 static void
3909 set_initial_label_offsets (void)
3911 rtx x;
3912 memset (offsets_known_at, 0, num_labels);
3914 for (x = forced_labels; x; x = XEXP (x, 1))
3915 if (XEXP (x, 0))
3916 set_label_offsets (XEXP (x, 0), NULL_RTX, 1);
3918 for (x = nonlocal_goto_handler_labels; x; x = XEXP (x, 1))
3919 if (XEXP (x, 0))
3920 set_label_offsets (XEXP (x, 0), NULL_RTX, 1);
3922 for_each_eh_label (set_initial_eh_label_offset);
3925 /* Set all elimination offsets to the known values for the code label given
3926 by INSN. */
3928 static void
3929 set_offsets_for_label (rtx insn)
3931 unsigned int i;
3932 int label_nr = CODE_LABEL_NUMBER (insn);
3933 struct elim_table *ep;
3935 num_not_at_initial_offset = 0;
3936 for (i = 0, ep = reg_eliminate; i < NUM_ELIMINABLE_REGS; ep++, i++)
3938 ep->offset = ep->previous_offset
3939 = offsets_at[label_nr - first_label_num][i];
3940 if (ep->can_eliminate && ep->offset != ep->initial_offset)
3941 num_not_at_initial_offset++;
3945 /* See if anything that happened changes which eliminations are valid.
3946 For example, on the SPARC, whether or not the frame pointer can
3947 be eliminated can depend on what registers have been used. We need
3948 not check some conditions again (such as flag_omit_frame_pointer)
3949 since they can't have changed. */
3951 static void
3952 update_eliminables (HARD_REG_SET *pset)
3954 int previous_frame_pointer_needed = frame_pointer_needed;
3955 struct elim_table *ep;
3957 for (ep = reg_eliminate; ep < &reg_eliminate[NUM_ELIMINABLE_REGS]; ep++)
3958 if ((ep->from == HARD_FRAME_POINTER_REGNUM
3959 && targetm.frame_pointer_required ())
3960 #ifdef ELIMINABLE_REGS
3961 || ! targetm.can_eliminate (ep->from, ep->to)
3962 #endif
3964 ep->can_eliminate = 0;
3966 /* Look for the case where we have discovered that we can't replace
3967 register A with register B and that means that we will now be
3968 trying to replace register A with register C. This means we can
3969 no longer replace register C with register B and we need to disable
3970 such an elimination, if it exists. This occurs often with A == ap,
3971 B == sp, and C == fp. */
3973 for (ep = reg_eliminate; ep < &reg_eliminate[NUM_ELIMINABLE_REGS]; ep++)
3975 struct elim_table *op;
3976 int new_to = -1;
3978 if (! ep->can_eliminate && ep->can_eliminate_previous)
3980 /* Find the current elimination for ep->from, if there is a
3981 new one. */
3982 for (op = reg_eliminate;
3983 op < &reg_eliminate[NUM_ELIMINABLE_REGS]; op++)
3984 if (op->from == ep->from && op->can_eliminate)
3986 new_to = op->to;
3987 break;
3990 /* See if there is an elimination of NEW_TO -> EP->TO. If so,
3991 disable it. */
3992 for (op = reg_eliminate;
3993 op < &reg_eliminate[NUM_ELIMINABLE_REGS]; op++)
3994 if (op->from == new_to && op->to == ep->to)
3995 op->can_eliminate = 0;
3999 /* See if any registers that we thought we could eliminate the previous
4000 time are no longer eliminable. If so, something has changed and we
4001 must spill the register. Also, recompute the number of eliminable
4002 registers and see if the frame pointer is needed; it is if there is
4003 no elimination of the frame pointer that we can perform. */
4005 frame_pointer_needed = 1;
4006 for (ep = reg_eliminate; ep < &reg_eliminate[NUM_ELIMINABLE_REGS]; ep++)
4008 if (ep->can_eliminate
4009 && ep->from == FRAME_POINTER_REGNUM
4010 && ep->to != HARD_FRAME_POINTER_REGNUM
4011 && (! SUPPORTS_STACK_ALIGNMENT
4012 || ! crtl->stack_realign_needed))
4013 frame_pointer_needed = 0;
4015 if (! ep->can_eliminate && ep->can_eliminate_previous)
4017 ep->can_eliminate_previous = 0;
4018 SET_HARD_REG_BIT (*pset, ep->from);
4019 num_eliminable--;
4023 /* If we didn't need a frame pointer last time, but we do now, spill
4024 the hard frame pointer. */
4025 if (frame_pointer_needed && ! previous_frame_pointer_needed)
4026 SET_HARD_REG_BIT (*pset, HARD_FRAME_POINTER_REGNUM);
4029 /* Call update_eliminables an spill any registers we can't eliminate anymore.
4030 Return true iff a register was spilled. */
4032 static bool
4033 update_eliminables_and_spill (void)
4035 int i;
4036 bool did_spill = false;
4037 HARD_REG_SET to_spill;
4038 CLEAR_HARD_REG_SET (to_spill);
4039 update_eliminables (&to_spill);
4040 AND_COMPL_HARD_REG_SET (used_spill_regs, to_spill);
4042 for (i = 0; i < FIRST_PSEUDO_REGISTER; i++)
4043 if (TEST_HARD_REG_BIT (to_spill, i))
4045 spill_hard_reg (i, 1);
4046 did_spill = true;
4048 /* Regardless of the state of spills, if we previously had
4049 a register that we thought we could eliminate, but now can
4050 not eliminate, we must run another pass.
4052 Consider pseudos which have an entry in reg_equiv_* which
4053 reference an eliminable register. We must make another pass
4054 to update reg_equiv_* so that we do not substitute in the
4055 old value from when we thought the elimination could be
4056 performed. */
4058 return did_spill;
4061 /* Return true if X is used as the target register of an elimination. */
4063 bool
4064 elimination_target_reg_p (rtx x)
4066 struct elim_table *ep;
4068 for (ep = reg_eliminate; ep < &reg_eliminate[NUM_ELIMINABLE_REGS]; ep++)
4069 if (ep->to_rtx == x && ep->can_eliminate)
4070 return true;
4072 return false;
4075 /* Initialize the table of registers to eliminate.
4076 Pre-condition: global flag frame_pointer_needed has been set before
4077 calling this function. */
4079 static void
4080 init_elim_table (void)
4082 struct elim_table *ep;
4083 #ifdef ELIMINABLE_REGS
4084 const struct elim_table_1 *ep1;
4085 #endif
4087 if (!reg_eliminate)
4088 reg_eliminate = XCNEWVEC (struct elim_table, NUM_ELIMINABLE_REGS);
4090 num_eliminable = 0;
4092 #ifdef ELIMINABLE_REGS
4093 for (ep = reg_eliminate, ep1 = reg_eliminate_1;
4094 ep < &reg_eliminate[NUM_ELIMINABLE_REGS]; ep++, ep1++)
4096 ep->from = ep1->from;
4097 ep->to = ep1->to;
4098 ep->can_eliminate = ep->can_eliminate_previous
4099 = (targetm.can_eliminate (ep->from, ep->to)
4100 && ! (ep->to == STACK_POINTER_REGNUM
4101 && frame_pointer_needed
4102 && (! SUPPORTS_STACK_ALIGNMENT
4103 || ! stack_realign_fp)));
4105 #else
4106 reg_eliminate[0].from = reg_eliminate_1[0].from;
4107 reg_eliminate[0].to = reg_eliminate_1[0].to;
4108 reg_eliminate[0].can_eliminate = reg_eliminate[0].can_eliminate_previous
4109 = ! frame_pointer_needed;
4110 #endif
4112 /* Count the number of eliminable registers and build the FROM and TO
4113 REG rtx's. Note that code in gen_rtx_REG will cause, e.g.,
4114 gen_rtx_REG (Pmode, STACK_POINTER_REGNUM) to equal stack_pointer_rtx.
4115 We depend on this. */
4116 for (ep = reg_eliminate; ep < &reg_eliminate[NUM_ELIMINABLE_REGS]; ep++)
4118 num_eliminable += ep->can_eliminate;
4119 ep->from_rtx = gen_rtx_REG (Pmode, ep->from);
4120 ep->to_rtx = gen_rtx_REG (Pmode, ep->to);
4124 /* Find all the pseudo registers that didn't get hard regs
4125 but do have known equivalent constants or memory slots.
4126 These include parameters (known equivalent to parameter slots)
4127 and cse'd or loop-moved constant memory addresses.
4129 Record constant equivalents in reg_equiv_constant
4130 so they will be substituted by find_reloads.
4131 Record memory equivalents in reg_mem_equiv so they can
4132 be substituted eventually by altering the REG-rtx's. */
4134 static void
4135 init_eliminable_invariants (rtx first, bool do_subregs)
4137 int i;
4138 rtx insn;
4140 grow_reg_equivs ();
4141 if (do_subregs)
4142 reg_max_ref_width = XCNEWVEC (unsigned int, max_regno);
4143 else
4144 reg_max_ref_width = NULL;
4146 num_eliminable_invariants = 0;
4148 first_label_num = get_first_label_num ();
4149 num_labels = max_label_num () - first_label_num;
4151 /* Allocate the tables used to store offset information at labels. */
4152 offsets_known_at = XNEWVEC (char, num_labels);
4153 offsets_at = (HOST_WIDE_INT (*)[NUM_ELIMINABLE_REGS]) xmalloc (num_labels * NUM_ELIMINABLE_REGS * sizeof (HOST_WIDE_INT));
4155 /* Look for REG_EQUIV notes; record what each pseudo is equivalent
4156 to. If DO_SUBREGS is true, also find all paradoxical subregs and
4157 find largest such for each pseudo. FIRST is the head of the insn
4158 list. */
4160 for (insn = first; insn; insn = NEXT_INSN (insn))
4162 rtx set = single_set (insn);
4164 /* We may introduce USEs that we want to remove at the end, so
4165 we'll mark them with QImode. Make sure there are no
4166 previously-marked insns left by say regmove. */
4167 if (INSN_P (insn) && GET_CODE (PATTERN (insn)) == USE
4168 && GET_MODE (insn) != VOIDmode)
4169 PUT_MODE (insn, VOIDmode);
4171 if (do_subregs && NONDEBUG_INSN_P (insn))
4172 scan_paradoxical_subregs (PATTERN (insn));
4174 if (set != 0 && REG_P (SET_DEST (set)))
4176 rtx note = find_reg_note (insn, REG_EQUIV, NULL_RTX);
4177 rtx x;
4179 if (! note)
4180 continue;
4182 i = REGNO (SET_DEST (set));
4183 x = XEXP (note, 0);
4185 if (i <= LAST_VIRTUAL_REGISTER)
4186 continue;
4188 /* If flag_pic and we have constant, verify it's legitimate. */
4189 if (!CONSTANT_P (x)
4190 || !flag_pic || LEGITIMATE_PIC_OPERAND_P (x))
4192 /* It can happen that a REG_EQUIV note contains a MEM
4193 that is not a legitimate memory operand. As later
4194 stages of reload assume that all addresses found
4195 in the reg_equiv_* arrays were originally legitimate,
4196 we ignore such REG_EQUIV notes. */
4197 if (memory_operand (x, VOIDmode))
4199 /* Always unshare the equivalence, so we can
4200 substitute into this insn without touching the
4201 equivalence. */
4202 reg_equiv_memory_loc (i) = copy_rtx (x);
4204 else if (function_invariant_p (x))
4206 enum machine_mode mode;
4208 mode = GET_MODE (SET_DEST (set));
4209 if (GET_CODE (x) == PLUS)
4211 /* This is PLUS of frame pointer and a constant,
4212 and might be shared. Unshare it. */
4213 reg_equiv_invariant (i) = copy_rtx (x);
4214 num_eliminable_invariants++;
4216 else if (x == frame_pointer_rtx || x == arg_pointer_rtx)
4218 reg_equiv_invariant (i) = x;
4219 num_eliminable_invariants++;
4221 else if (targetm.legitimate_constant_p (mode, x))
4222 reg_equiv_constant (i) = x;
4223 else
4225 reg_equiv_memory_loc (i) = force_const_mem (mode, x);
4226 if (! reg_equiv_memory_loc (i))
4227 reg_equiv_init (i) = NULL_RTX;
4230 else
4232 reg_equiv_init (i) = NULL_RTX;
4233 continue;
4236 else
4237 reg_equiv_init (i) = NULL_RTX;
4241 if (dump_file)
4242 for (i = FIRST_PSEUDO_REGISTER; i < max_regno; i++)
4243 if (reg_equiv_init (i))
4245 fprintf (dump_file, "init_insns for %u: ", i);
4246 print_inline_rtx (dump_file, reg_equiv_init (i), 20);
4247 fprintf (dump_file, "\n");
4251 /* Indicate that we no longer have known memory locations or constants.
4252 Free all data involved in tracking these. */
4254 static void
4255 free_reg_equiv (void)
4257 int i;
4259 free (offsets_known_at);
4260 free (offsets_at);
4261 offsets_at = 0;
4262 offsets_known_at = 0;
4264 for (i = 0; i < FIRST_PSEUDO_REGISTER; i++)
4265 if (reg_equiv_alt_mem_list (i))
4266 free_EXPR_LIST_list (&reg_equiv_alt_mem_list (i));
4267 vec_free (reg_equivs);
4270 /* Kick all pseudos out of hard register REGNO.
4272 If CANT_ELIMINATE is nonzero, it means that we are doing this spill
4273 because we found we can't eliminate some register. In the case, no pseudos
4274 are allowed to be in the register, even if they are only in a block that
4275 doesn't require spill registers, unlike the case when we are spilling this
4276 hard reg to produce another spill register.
4278 Return nonzero if any pseudos needed to be kicked out. */
4280 static void
4281 spill_hard_reg (unsigned int regno, int cant_eliminate)
4283 int i;
4285 if (cant_eliminate)
4287 SET_HARD_REG_BIT (bad_spill_regs_global, regno);
4288 df_set_regs_ever_live (regno, true);
4291 /* Spill every pseudo reg that was allocated to this reg
4292 or to something that overlaps this reg. */
4294 for (i = FIRST_PSEUDO_REGISTER; i < max_regno; i++)
4295 if (reg_renumber[i] >= 0
4296 && (unsigned int) reg_renumber[i] <= regno
4297 && end_hard_regno (PSEUDO_REGNO_MODE (i), reg_renumber[i]) > regno)
4298 SET_REGNO_REG_SET (&spilled_pseudos, i);
4301 /* After find_reload_regs has been run for all insn that need reloads,
4302 and/or spill_hard_regs was called, this function is used to actually
4303 spill pseudo registers and try to reallocate them. It also sets up the
4304 spill_regs array for use by choose_reload_regs. */
4306 static int
4307 finish_spills (int global)
4309 struct insn_chain *chain;
4310 int something_changed = 0;
4311 unsigned i;
4312 reg_set_iterator rsi;
4314 /* Build the spill_regs array for the function. */
4315 /* If there are some registers still to eliminate and one of the spill regs
4316 wasn't ever used before, additional stack space may have to be
4317 allocated to store this register. Thus, we may have changed the offset
4318 between the stack and frame pointers, so mark that something has changed.
4320 One might think that we need only set VAL to 1 if this is a call-used
4321 register. However, the set of registers that must be saved by the
4322 prologue is not identical to the call-used set. For example, the
4323 register used by the call insn for the return PC is a call-used register,
4324 but must be saved by the prologue. */
4326 n_spills = 0;
4327 for (i = 0; i < FIRST_PSEUDO_REGISTER; i++)
4328 if (TEST_HARD_REG_BIT (used_spill_regs, i))
4330 spill_reg_order[i] = n_spills;
4331 spill_regs[n_spills++] = i;
4332 if (num_eliminable && ! df_regs_ever_live_p (i))
4333 something_changed = 1;
4334 df_set_regs_ever_live (i, true);
4336 else
4337 spill_reg_order[i] = -1;
4339 EXECUTE_IF_SET_IN_REG_SET (&spilled_pseudos, FIRST_PSEUDO_REGISTER, i, rsi)
4340 if (! ira_conflicts_p || reg_renumber[i] >= 0)
4342 /* Record the current hard register the pseudo is allocated to
4343 in pseudo_previous_regs so we avoid reallocating it to the
4344 same hard reg in a later pass. */
4345 gcc_assert (reg_renumber[i] >= 0);
4347 SET_HARD_REG_BIT (pseudo_previous_regs[i], reg_renumber[i]);
4348 /* Mark it as no longer having a hard register home. */
4349 reg_renumber[i] = -1;
4350 if (ira_conflicts_p)
4351 /* Inform IRA about the change. */
4352 ira_mark_allocation_change (i);
4353 /* We will need to scan everything again. */
4354 something_changed = 1;
4357 /* Retry global register allocation if possible. */
4358 if (global && ira_conflicts_p)
4360 unsigned int n;
4362 memset (pseudo_forbidden_regs, 0, max_regno * sizeof (HARD_REG_SET));
4363 /* For every insn that needs reloads, set the registers used as spill
4364 regs in pseudo_forbidden_regs for every pseudo live across the
4365 insn. */
4366 for (chain = insns_need_reload; chain; chain = chain->next_need_reload)
4368 EXECUTE_IF_SET_IN_REG_SET
4369 (&chain->live_throughout, FIRST_PSEUDO_REGISTER, i, rsi)
4371 IOR_HARD_REG_SET (pseudo_forbidden_regs[i],
4372 chain->used_spill_regs);
4374 EXECUTE_IF_SET_IN_REG_SET
4375 (&chain->dead_or_set, FIRST_PSEUDO_REGISTER, i, rsi)
4377 IOR_HARD_REG_SET (pseudo_forbidden_regs[i],
4378 chain->used_spill_regs);
4382 /* Retry allocating the pseudos spilled in IRA and the
4383 reload. For each reg, merge the various reg sets that
4384 indicate which hard regs can't be used, and call
4385 ira_reassign_pseudos. */
4386 for (n = 0, i = FIRST_PSEUDO_REGISTER; i < (unsigned) max_regno; i++)
4387 if (reg_old_renumber[i] != reg_renumber[i])
4389 if (reg_renumber[i] < 0)
4390 temp_pseudo_reg_arr[n++] = i;
4391 else
4392 CLEAR_REGNO_REG_SET (&spilled_pseudos, i);
4394 if (ira_reassign_pseudos (temp_pseudo_reg_arr, n,
4395 bad_spill_regs_global,
4396 pseudo_forbidden_regs, pseudo_previous_regs,
4397 &spilled_pseudos))
4398 something_changed = 1;
4400 /* Fix up the register information in the insn chain.
4401 This involves deleting those of the spilled pseudos which did not get
4402 a new hard register home from the live_{before,after} sets. */
4403 for (chain = reload_insn_chain; chain; chain = chain->next)
4405 HARD_REG_SET used_by_pseudos;
4406 HARD_REG_SET used_by_pseudos2;
4408 if (! ira_conflicts_p)
4410 /* Don't do it for IRA because IRA and the reload still can
4411 assign hard registers to the spilled pseudos on next
4412 reload iterations. */
4413 AND_COMPL_REG_SET (&chain->live_throughout, &spilled_pseudos);
4414 AND_COMPL_REG_SET (&chain->dead_or_set, &spilled_pseudos);
4416 /* Mark any unallocated hard regs as available for spills. That
4417 makes inheritance work somewhat better. */
4418 if (chain->need_reload)
4420 REG_SET_TO_HARD_REG_SET (used_by_pseudos, &chain->live_throughout);
4421 REG_SET_TO_HARD_REG_SET (used_by_pseudos2, &chain->dead_or_set);
4422 IOR_HARD_REG_SET (used_by_pseudos, used_by_pseudos2);
4424 compute_use_by_pseudos (&used_by_pseudos, &chain->live_throughout);
4425 compute_use_by_pseudos (&used_by_pseudos, &chain->dead_or_set);
4426 /* Value of chain->used_spill_regs from previous iteration
4427 may be not included in the value calculated here because
4428 of possible removing caller-saves insns (see function
4429 delete_caller_save_insns. */
4430 COMPL_HARD_REG_SET (chain->used_spill_regs, used_by_pseudos);
4431 AND_HARD_REG_SET (chain->used_spill_regs, used_spill_regs);
4435 CLEAR_REG_SET (&changed_allocation_pseudos);
4436 /* Let alter_reg modify the reg rtx's for the modified pseudos. */
4437 for (i = FIRST_PSEUDO_REGISTER; i < (unsigned)max_regno; i++)
4439 int regno = reg_renumber[i];
4440 if (reg_old_renumber[i] == regno)
4441 continue;
4443 SET_REGNO_REG_SET (&changed_allocation_pseudos, i);
4445 alter_reg (i, reg_old_renumber[i], false);
4446 reg_old_renumber[i] = regno;
4447 if (dump_file)
4449 if (regno == -1)
4450 fprintf (dump_file, " Register %d now on stack.\n\n", i);
4451 else
4452 fprintf (dump_file, " Register %d now in %d.\n\n",
4453 i, reg_renumber[i]);
4457 return something_changed;
4460 /* Find all paradoxical subregs within X and update reg_max_ref_width. */
4462 static void
4463 scan_paradoxical_subregs (rtx x)
4465 int i;
4466 const char *fmt;
4467 enum rtx_code code = GET_CODE (x);
4469 switch (code)
4471 case REG:
4472 case CONST:
4473 case SYMBOL_REF:
4474 case LABEL_REF:
4475 CASE_CONST_ANY:
4476 case CC0:
4477 case PC:
4478 case USE:
4479 case CLOBBER:
4480 return;
4482 case SUBREG:
4483 if (REG_P (SUBREG_REG (x))
4484 && (GET_MODE_SIZE (GET_MODE (x))
4485 > reg_max_ref_width[REGNO (SUBREG_REG (x))]))
4487 reg_max_ref_width[REGNO (SUBREG_REG (x))]
4488 = GET_MODE_SIZE (GET_MODE (x));
4489 mark_home_live_1 (REGNO (SUBREG_REG (x)), GET_MODE (x));
4491 return;
4493 default:
4494 break;
4497 fmt = GET_RTX_FORMAT (code);
4498 for (i = GET_RTX_LENGTH (code) - 1; i >= 0; i--)
4500 if (fmt[i] == 'e')
4501 scan_paradoxical_subregs (XEXP (x, i));
4502 else if (fmt[i] == 'E')
4504 int j;
4505 for (j = XVECLEN (x, i) - 1; j >= 0; j--)
4506 scan_paradoxical_subregs (XVECEXP (x, i, j));
4511 /* *OP_PTR and *OTHER_PTR are two operands to a conceptual reload.
4512 If *OP_PTR is a paradoxical subreg, try to remove that subreg
4513 and apply the corresponding narrowing subreg to *OTHER_PTR.
4514 Return true if the operands were changed, false otherwise. */
4516 static bool
4517 strip_paradoxical_subreg (rtx *op_ptr, rtx *other_ptr)
4519 rtx op, inner, other, tem;
4521 op = *op_ptr;
4522 if (!paradoxical_subreg_p (op))
4523 return false;
4524 inner = SUBREG_REG (op);
4526 other = *other_ptr;
4527 tem = gen_lowpart_common (GET_MODE (inner), other);
4528 if (!tem)
4529 return false;
4531 /* If the lowpart operation turned a hard register into a subreg,
4532 rather than simplifying it to another hard register, then the
4533 mode change cannot be properly represented. For example, OTHER
4534 might be valid in its current mode, but not in the new one. */
4535 if (GET_CODE (tem) == SUBREG
4536 && REG_P (other)
4537 && HARD_REGISTER_P (other))
4538 return false;
4540 *op_ptr = inner;
4541 *other_ptr = tem;
4542 return true;
4545 /* A subroutine of reload_as_needed. If INSN has a REG_EH_REGION note,
4546 examine all of the reload insns between PREV and NEXT exclusive, and
4547 annotate all that may trap. */
4549 static void
4550 fixup_eh_region_note (rtx insn, rtx prev, rtx next)
4552 rtx note = find_reg_note (insn, REG_EH_REGION, NULL_RTX);
4553 if (note == NULL)
4554 return;
4555 if (!insn_could_throw_p (insn))
4556 remove_note (insn, note);
4557 copy_reg_eh_region_note_forward (note, NEXT_INSN (prev), next);
4560 /* Reload pseudo-registers into hard regs around each insn as needed.
4561 Additional register load insns are output before the insn that needs it
4562 and perhaps store insns after insns that modify the reloaded pseudo reg.
4564 reg_last_reload_reg and reg_reloaded_contents keep track of
4565 which registers are already available in reload registers.
4566 We update these for the reloads that we perform,
4567 as the insns are scanned. */
4569 static void
4570 reload_as_needed (int live_known)
4572 struct insn_chain *chain;
4573 #if defined (AUTO_INC_DEC)
4574 int i;
4575 #endif
4576 rtx x, marker;
4578 memset (spill_reg_rtx, 0, sizeof spill_reg_rtx);
4579 memset (spill_reg_store, 0, sizeof spill_reg_store);
4580 reg_last_reload_reg = XCNEWVEC (rtx, max_regno);
4581 INIT_REG_SET (&reg_has_output_reload);
4582 CLEAR_HARD_REG_SET (reg_reloaded_valid);
4583 CLEAR_HARD_REG_SET (reg_reloaded_call_part_clobbered);
4585 set_initial_elim_offsets ();
4587 /* Generate a marker insn that we will move around. */
4588 marker = emit_note (NOTE_INSN_DELETED);
4589 unlink_insn_chain (marker, marker);
4591 for (chain = reload_insn_chain; chain; chain = chain->next)
4593 rtx prev = 0;
4594 rtx insn = chain->insn;
4595 rtx old_next = NEXT_INSN (insn);
4596 #ifdef AUTO_INC_DEC
4597 rtx old_prev = PREV_INSN (insn);
4598 #endif
4600 if (will_delete_init_insn_p (insn))
4601 continue;
4603 /* If we pass a label, copy the offsets from the label information
4604 into the current offsets of each elimination. */
4605 if (LABEL_P (insn))
4606 set_offsets_for_label (insn);
4608 else if (INSN_P (insn))
4610 regset_head regs_to_forget;
4611 INIT_REG_SET (&regs_to_forget);
4612 note_stores (PATTERN (insn), forget_old_reloads_1, &regs_to_forget);
4614 /* If this is a USE and CLOBBER of a MEM, ensure that any
4615 references to eliminable registers have been removed. */
4617 if ((GET_CODE (PATTERN (insn)) == USE
4618 || GET_CODE (PATTERN (insn)) == CLOBBER)
4619 && MEM_P (XEXP (PATTERN (insn), 0)))
4620 XEXP (XEXP (PATTERN (insn), 0), 0)
4621 = eliminate_regs (XEXP (XEXP (PATTERN (insn), 0), 0),
4622 GET_MODE (XEXP (PATTERN (insn), 0)),
4623 NULL_RTX);
4625 /* If we need to do register elimination processing, do so.
4626 This might delete the insn, in which case we are done. */
4627 if ((num_eliminable || num_eliminable_invariants) && chain->need_elim)
4629 eliminate_regs_in_insn (insn, 1);
4630 if (NOTE_P (insn))
4632 update_eliminable_offsets ();
4633 CLEAR_REG_SET (&regs_to_forget);
4634 continue;
4638 /* If need_elim is nonzero but need_reload is zero, one might think
4639 that we could simply set n_reloads to 0. However, find_reloads
4640 could have done some manipulation of the insn (such as swapping
4641 commutative operands), and these manipulations are lost during
4642 the first pass for every insn that needs register elimination.
4643 So the actions of find_reloads must be redone here. */
4645 if (! chain->need_elim && ! chain->need_reload
4646 && ! chain->need_operand_change)
4647 n_reloads = 0;
4648 /* First find the pseudo regs that must be reloaded for this insn.
4649 This info is returned in the tables reload_... (see reload.h).
4650 Also modify the body of INSN by substituting RELOAD
4651 rtx's for those pseudo regs. */
4652 else
4654 CLEAR_REG_SET (&reg_has_output_reload);
4655 CLEAR_HARD_REG_SET (reg_is_output_reload);
4657 find_reloads (insn, 1, spill_indirect_levels, live_known,
4658 spill_reg_order);
4661 if (n_reloads > 0)
4663 rtx next = NEXT_INSN (insn);
4664 rtx p;
4666 /* ??? PREV can get deleted by reload inheritance.
4667 Work around this by emitting a marker note. */
4668 prev = PREV_INSN (insn);
4669 reorder_insns_nobb (marker, marker, prev);
4671 /* Now compute which reload regs to reload them into. Perhaps
4672 reusing reload regs from previous insns, or else output
4673 load insns to reload them. Maybe output store insns too.
4674 Record the choices of reload reg in reload_reg_rtx. */
4675 choose_reload_regs (chain);
4677 /* Generate the insns to reload operands into or out of
4678 their reload regs. */
4679 emit_reload_insns (chain);
4681 /* Substitute the chosen reload regs from reload_reg_rtx
4682 into the insn's body (or perhaps into the bodies of other
4683 load and store insn that we just made for reloading
4684 and that we moved the structure into). */
4685 subst_reloads (insn);
4687 prev = PREV_INSN (marker);
4688 unlink_insn_chain (marker, marker);
4690 /* Adjust the exception region notes for loads and stores. */
4691 if (cfun->can_throw_non_call_exceptions && !CALL_P (insn))
4692 fixup_eh_region_note (insn, prev, next);
4694 /* Adjust the location of REG_ARGS_SIZE. */
4695 p = find_reg_note (insn, REG_ARGS_SIZE, NULL_RTX);
4696 if (p)
4698 remove_note (insn, p);
4699 fixup_args_size_notes (prev, PREV_INSN (next),
4700 INTVAL (XEXP (p, 0)));
4703 /* If this was an ASM, make sure that all the reload insns
4704 we have generated are valid. If not, give an error
4705 and delete them. */
4706 if (asm_noperands (PATTERN (insn)) >= 0)
4707 for (p = NEXT_INSN (prev); p != next; p = NEXT_INSN (p))
4708 if (p != insn && INSN_P (p)
4709 && GET_CODE (PATTERN (p)) != USE
4710 && (recog_memoized (p) < 0
4711 || (extract_insn (p), ! constrain_operands (1))))
4713 error_for_asm (insn,
4714 "%<asm%> operand requires "
4715 "impossible reload");
4716 delete_insn (p);
4720 if (num_eliminable && chain->need_elim)
4721 update_eliminable_offsets ();
4723 /* Any previously reloaded spilled pseudo reg, stored in this insn,
4724 is no longer validly lying around to save a future reload.
4725 Note that this does not detect pseudos that were reloaded
4726 for this insn in order to be stored in
4727 (obeying register constraints). That is correct; such reload
4728 registers ARE still valid. */
4729 forget_marked_reloads (&regs_to_forget);
4730 CLEAR_REG_SET (&regs_to_forget);
4732 /* There may have been CLOBBER insns placed after INSN. So scan
4733 between INSN and NEXT and use them to forget old reloads. */
4734 for (x = NEXT_INSN (insn); x != old_next; x = NEXT_INSN (x))
4735 if (NONJUMP_INSN_P (x) && GET_CODE (PATTERN (x)) == CLOBBER)
4736 note_stores (PATTERN (x), forget_old_reloads_1, NULL);
4738 #ifdef AUTO_INC_DEC
4739 /* Likewise for regs altered by auto-increment in this insn.
4740 REG_INC notes have been changed by reloading:
4741 find_reloads_address_1 records substitutions for them,
4742 which have been performed by subst_reloads above. */
4743 for (i = n_reloads - 1; i >= 0; i--)
4745 rtx in_reg = rld[i].in_reg;
4746 if (in_reg)
4748 enum rtx_code code = GET_CODE (in_reg);
4749 /* PRE_INC / PRE_DEC will have the reload register ending up
4750 with the same value as the stack slot, but that doesn't
4751 hold true for POST_INC / POST_DEC. Either we have to
4752 convert the memory access to a true POST_INC / POST_DEC,
4753 or we can't use the reload register for inheritance. */
4754 if ((code == POST_INC || code == POST_DEC)
4755 && TEST_HARD_REG_BIT (reg_reloaded_valid,
4756 REGNO (rld[i].reg_rtx))
4757 /* Make sure it is the inc/dec pseudo, and not
4758 some other (e.g. output operand) pseudo. */
4759 && ((unsigned) reg_reloaded_contents[REGNO (rld[i].reg_rtx)]
4760 == REGNO (XEXP (in_reg, 0))))
4763 rtx reload_reg = rld[i].reg_rtx;
4764 enum machine_mode mode = GET_MODE (reload_reg);
4765 int n = 0;
4766 rtx p;
4768 for (p = PREV_INSN (old_next); p != prev; p = PREV_INSN (p))
4770 /* We really want to ignore REG_INC notes here, so
4771 use PATTERN (p) as argument to reg_set_p . */
4772 if (reg_set_p (reload_reg, PATTERN (p)))
4773 break;
4774 n = count_occurrences (PATTERN (p), reload_reg, 0);
4775 if (! n)
4776 continue;
4777 if (n == 1)
4779 rtx replace_reg
4780 = gen_rtx_fmt_e (code, mode, reload_reg);
4782 validate_replace_rtx_group (reload_reg,
4783 replace_reg, p);
4784 n = verify_changes (0);
4786 /* We must also verify that the constraints
4787 are met after the replacement. Make sure
4788 extract_insn is only called for an insn
4789 where the replacements were found to be
4790 valid so far. */
4791 if (n)
4793 extract_insn (p);
4794 n = constrain_operands (1);
4797 /* If the constraints were not met, then
4798 undo the replacement, else confirm it. */
4799 if (!n)
4800 cancel_changes (0);
4801 else
4802 confirm_change_group ();
4804 break;
4806 if (n == 1)
4808 add_reg_note (p, REG_INC, reload_reg);
4809 /* Mark this as having an output reload so that the
4810 REG_INC processing code below won't invalidate
4811 the reload for inheritance. */
4812 SET_HARD_REG_BIT (reg_is_output_reload,
4813 REGNO (reload_reg));
4814 SET_REGNO_REG_SET (&reg_has_output_reload,
4815 REGNO (XEXP (in_reg, 0)));
4817 else
4818 forget_old_reloads_1 (XEXP (in_reg, 0), NULL_RTX,
4819 NULL);
4821 else if ((code == PRE_INC || code == PRE_DEC)
4822 && TEST_HARD_REG_BIT (reg_reloaded_valid,
4823 REGNO (rld[i].reg_rtx))
4824 /* Make sure it is the inc/dec pseudo, and not
4825 some other (e.g. output operand) pseudo. */
4826 && ((unsigned) reg_reloaded_contents[REGNO (rld[i].reg_rtx)]
4827 == REGNO (XEXP (in_reg, 0))))
4829 SET_HARD_REG_BIT (reg_is_output_reload,
4830 REGNO (rld[i].reg_rtx));
4831 SET_REGNO_REG_SET (&reg_has_output_reload,
4832 REGNO (XEXP (in_reg, 0)));
4834 else if (code == PRE_INC || code == PRE_DEC
4835 || code == POST_INC || code == POST_DEC)
4837 int in_regno = REGNO (XEXP (in_reg, 0));
4839 if (reg_last_reload_reg[in_regno] != NULL_RTX)
4841 int in_hard_regno;
4842 bool forget_p = true;
4844 in_hard_regno = REGNO (reg_last_reload_reg[in_regno]);
4845 if (TEST_HARD_REG_BIT (reg_reloaded_valid,
4846 in_hard_regno))
4848 for (x = old_prev ? NEXT_INSN (old_prev) : insn;
4849 x != old_next;
4850 x = NEXT_INSN (x))
4851 if (x == reg_reloaded_insn[in_hard_regno])
4853 forget_p = false;
4854 break;
4857 /* If for some reasons, we didn't set up
4858 reg_last_reload_reg in this insn,
4859 invalidate inheritance from previous
4860 insns for the incremented/decremented
4861 register. Such registers will be not in
4862 reg_has_output_reload. Invalidate it
4863 also if the corresponding element in
4864 reg_reloaded_insn is also
4865 invalidated. */
4866 if (forget_p)
4867 forget_old_reloads_1 (XEXP (in_reg, 0),
4868 NULL_RTX, NULL);
4873 /* If a pseudo that got a hard register is auto-incremented,
4874 we must purge records of copying it into pseudos without
4875 hard registers. */
4876 for (x = REG_NOTES (insn); x; x = XEXP (x, 1))
4877 if (REG_NOTE_KIND (x) == REG_INC)
4879 /* See if this pseudo reg was reloaded in this insn.
4880 If so, its last-reload info is still valid
4881 because it is based on this insn's reload. */
4882 for (i = 0; i < n_reloads; i++)
4883 if (rld[i].out == XEXP (x, 0))
4884 break;
4886 if (i == n_reloads)
4887 forget_old_reloads_1 (XEXP (x, 0), NULL_RTX, NULL);
4889 #endif
4891 /* A reload reg's contents are unknown after a label. */
4892 if (LABEL_P (insn))
4893 CLEAR_HARD_REG_SET (reg_reloaded_valid);
4895 /* Don't assume a reload reg is still good after a call insn
4896 if it is a call-used reg, or if it contains a value that will
4897 be partially clobbered by the call. */
4898 else if (CALL_P (insn))
4900 AND_COMPL_HARD_REG_SET (reg_reloaded_valid, call_used_reg_set);
4901 AND_COMPL_HARD_REG_SET (reg_reloaded_valid, reg_reloaded_call_part_clobbered);
4903 /* If this is a call to a setjmp-type function, we must not
4904 reuse any reload reg contents across the call; that will
4905 just be clobbered by other uses of the register in later
4906 code, before the longjmp. */
4907 if (find_reg_note (insn, REG_SETJMP, NULL_RTX))
4908 CLEAR_HARD_REG_SET (reg_reloaded_valid);
4912 /* Clean up. */
4913 free (reg_last_reload_reg);
4914 CLEAR_REG_SET (&reg_has_output_reload);
4917 /* Discard all record of any value reloaded from X,
4918 or reloaded in X from someplace else;
4919 unless X is an output reload reg of the current insn.
4921 X may be a hard reg (the reload reg)
4922 or it may be a pseudo reg that was reloaded from.
4924 When DATA is non-NULL just mark the registers in regset
4925 to be forgotten later. */
4927 static void
4928 forget_old_reloads_1 (rtx x, const_rtx ignored ATTRIBUTE_UNUSED,
4929 void *data)
4931 unsigned int regno;
4932 unsigned int nr;
4933 regset regs = (regset) data;
4935 /* note_stores does give us subregs of hard regs,
4936 subreg_regno_offset requires a hard reg. */
4937 while (GET_CODE (x) == SUBREG)
4939 /* We ignore the subreg offset when calculating the regno,
4940 because we are using the entire underlying hard register
4941 below. */
4942 x = SUBREG_REG (x);
4945 if (!REG_P (x))
4946 return;
4948 regno = REGNO (x);
4950 if (regno >= FIRST_PSEUDO_REGISTER)
4951 nr = 1;
4952 else
4954 unsigned int i;
4956 nr = hard_regno_nregs[regno][GET_MODE (x)];
4957 /* Storing into a spilled-reg invalidates its contents.
4958 This can happen if a block-local pseudo is allocated to that reg
4959 and it wasn't spilled because this block's total need is 0.
4960 Then some insn might have an optional reload and use this reg. */
4961 if (!regs)
4962 for (i = 0; i < nr; i++)
4963 /* But don't do this if the reg actually serves as an output
4964 reload reg in the current instruction. */
4965 if (n_reloads == 0
4966 || ! TEST_HARD_REG_BIT (reg_is_output_reload, regno + i))
4968 CLEAR_HARD_REG_BIT (reg_reloaded_valid, regno + i);
4969 spill_reg_store[regno + i] = 0;
4973 if (regs)
4974 while (nr-- > 0)
4975 SET_REGNO_REG_SET (regs, regno + nr);
4976 else
4978 /* Since value of X has changed,
4979 forget any value previously copied from it. */
4981 while (nr-- > 0)
4982 /* But don't forget a copy if this is the output reload
4983 that establishes the copy's validity. */
4984 if (n_reloads == 0
4985 || !REGNO_REG_SET_P (&reg_has_output_reload, regno + nr))
4986 reg_last_reload_reg[regno + nr] = 0;
4990 /* Forget the reloads marked in regset by previous function. */
4991 static void
4992 forget_marked_reloads (regset regs)
4994 unsigned int reg;
4995 reg_set_iterator rsi;
4996 EXECUTE_IF_SET_IN_REG_SET (regs, 0, reg, rsi)
4998 if (reg < FIRST_PSEUDO_REGISTER
4999 /* But don't do this if the reg actually serves as an output
5000 reload reg in the current instruction. */
5001 && (n_reloads == 0
5002 || ! TEST_HARD_REG_BIT (reg_is_output_reload, reg)))
5004 CLEAR_HARD_REG_BIT (reg_reloaded_valid, reg);
5005 spill_reg_store[reg] = 0;
5007 if (n_reloads == 0
5008 || !REGNO_REG_SET_P (&reg_has_output_reload, reg))
5009 reg_last_reload_reg[reg] = 0;
5013 /* The following HARD_REG_SETs indicate when each hard register is
5014 used for a reload of various parts of the current insn. */
5016 /* If reg is unavailable for all reloads. */
5017 static HARD_REG_SET reload_reg_unavailable;
5018 /* If reg is in use as a reload reg for a RELOAD_OTHER reload. */
5019 static HARD_REG_SET reload_reg_used;
5020 /* If reg is in use for a RELOAD_FOR_INPUT_ADDRESS reload for operand I. */
5021 static HARD_REG_SET reload_reg_used_in_input_addr[MAX_RECOG_OPERANDS];
5022 /* If reg is in use for a RELOAD_FOR_INPADDR_ADDRESS reload for operand I. */
5023 static HARD_REG_SET reload_reg_used_in_inpaddr_addr[MAX_RECOG_OPERANDS];
5024 /* If reg is in use for a RELOAD_FOR_OUTPUT_ADDRESS reload for operand I. */
5025 static HARD_REG_SET reload_reg_used_in_output_addr[MAX_RECOG_OPERANDS];
5026 /* If reg is in use for a RELOAD_FOR_OUTADDR_ADDRESS reload for operand I. */
5027 static HARD_REG_SET reload_reg_used_in_outaddr_addr[MAX_RECOG_OPERANDS];
5028 /* If reg is in use for a RELOAD_FOR_INPUT reload for operand I. */
5029 static HARD_REG_SET reload_reg_used_in_input[MAX_RECOG_OPERANDS];
5030 /* If reg is in use for a RELOAD_FOR_OUTPUT reload for operand I. */
5031 static HARD_REG_SET reload_reg_used_in_output[MAX_RECOG_OPERANDS];
5032 /* If reg is in use for a RELOAD_FOR_OPERAND_ADDRESS reload. */
5033 static HARD_REG_SET reload_reg_used_in_op_addr;
5034 /* If reg is in use for a RELOAD_FOR_OPADDR_ADDR reload. */
5035 static HARD_REG_SET reload_reg_used_in_op_addr_reload;
5036 /* If reg is in use for a RELOAD_FOR_INSN reload. */
5037 static HARD_REG_SET reload_reg_used_in_insn;
5038 /* If reg is in use for a RELOAD_FOR_OTHER_ADDRESS reload. */
5039 static HARD_REG_SET reload_reg_used_in_other_addr;
5041 /* If reg is in use as a reload reg for any sort of reload. */
5042 static HARD_REG_SET reload_reg_used_at_all;
5044 /* If reg is use as an inherited reload. We just mark the first register
5045 in the group. */
5046 static HARD_REG_SET reload_reg_used_for_inherit;
5048 /* Records which hard regs are used in any way, either as explicit use or
5049 by being allocated to a pseudo during any point of the current insn. */
5050 static HARD_REG_SET reg_used_in_insn;
5052 /* Mark reg REGNO as in use for a reload of the sort spec'd by OPNUM and
5053 TYPE. MODE is used to indicate how many consecutive regs are
5054 actually used. */
5056 static void
5057 mark_reload_reg_in_use (unsigned int regno, int opnum, enum reload_type type,
5058 enum machine_mode mode)
5060 switch (type)
5062 case RELOAD_OTHER:
5063 add_to_hard_reg_set (&reload_reg_used, mode, regno);
5064 break;
5066 case RELOAD_FOR_INPUT_ADDRESS:
5067 add_to_hard_reg_set (&reload_reg_used_in_input_addr[opnum], mode, regno);
5068 break;
5070 case RELOAD_FOR_INPADDR_ADDRESS:
5071 add_to_hard_reg_set (&reload_reg_used_in_inpaddr_addr[opnum], mode, regno);
5072 break;
5074 case RELOAD_FOR_OUTPUT_ADDRESS:
5075 add_to_hard_reg_set (&reload_reg_used_in_output_addr[opnum], mode, regno);
5076 break;
5078 case RELOAD_FOR_OUTADDR_ADDRESS:
5079 add_to_hard_reg_set (&reload_reg_used_in_outaddr_addr[opnum], mode, regno);
5080 break;
5082 case RELOAD_FOR_OPERAND_ADDRESS:
5083 add_to_hard_reg_set (&reload_reg_used_in_op_addr, mode, regno);
5084 break;
5086 case RELOAD_FOR_OPADDR_ADDR:
5087 add_to_hard_reg_set (&reload_reg_used_in_op_addr_reload, mode, regno);
5088 break;
5090 case RELOAD_FOR_OTHER_ADDRESS:
5091 add_to_hard_reg_set (&reload_reg_used_in_other_addr, mode, regno);
5092 break;
5094 case RELOAD_FOR_INPUT:
5095 add_to_hard_reg_set (&reload_reg_used_in_input[opnum], mode, regno);
5096 break;
5098 case RELOAD_FOR_OUTPUT:
5099 add_to_hard_reg_set (&reload_reg_used_in_output[opnum], mode, regno);
5100 break;
5102 case RELOAD_FOR_INSN:
5103 add_to_hard_reg_set (&reload_reg_used_in_insn, mode, regno);
5104 break;
5107 add_to_hard_reg_set (&reload_reg_used_at_all, mode, regno);
5110 /* Similarly, but show REGNO is no longer in use for a reload. */
5112 static void
5113 clear_reload_reg_in_use (unsigned int regno, int opnum,
5114 enum reload_type type, enum machine_mode mode)
5116 unsigned int nregs = hard_regno_nregs[regno][mode];
5117 unsigned int start_regno, end_regno, r;
5118 int i;
5119 /* A complication is that for some reload types, inheritance might
5120 allow multiple reloads of the same types to share a reload register.
5121 We set check_opnum if we have to check only reloads with the same
5122 operand number, and check_any if we have to check all reloads. */
5123 int check_opnum = 0;
5124 int check_any = 0;
5125 HARD_REG_SET *used_in_set;
5127 switch (type)
5129 case RELOAD_OTHER:
5130 used_in_set = &reload_reg_used;
5131 break;
5133 case RELOAD_FOR_INPUT_ADDRESS:
5134 used_in_set = &reload_reg_used_in_input_addr[opnum];
5135 break;
5137 case RELOAD_FOR_INPADDR_ADDRESS:
5138 check_opnum = 1;
5139 used_in_set = &reload_reg_used_in_inpaddr_addr[opnum];
5140 break;
5142 case RELOAD_FOR_OUTPUT_ADDRESS:
5143 used_in_set = &reload_reg_used_in_output_addr[opnum];
5144 break;
5146 case RELOAD_FOR_OUTADDR_ADDRESS:
5147 check_opnum = 1;
5148 used_in_set = &reload_reg_used_in_outaddr_addr[opnum];
5149 break;
5151 case RELOAD_FOR_OPERAND_ADDRESS:
5152 used_in_set = &reload_reg_used_in_op_addr;
5153 break;
5155 case RELOAD_FOR_OPADDR_ADDR:
5156 check_any = 1;
5157 used_in_set = &reload_reg_used_in_op_addr_reload;
5158 break;
5160 case RELOAD_FOR_OTHER_ADDRESS:
5161 used_in_set = &reload_reg_used_in_other_addr;
5162 check_any = 1;
5163 break;
5165 case RELOAD_FOR_INPUT:
5166 used_in_set = &reload_reg_used_in_input[opnum];
5167 break;
5169 case RELOAD_FOR_OUTPUT:
5170 used_in_set = &reload_reg_used_in_output[opnum];
5171 break;
5173 case RELOAD_FOR_INSN:
5174 used_in_set = &reload_reg_used_in_insn;
5175 break;
5176 default:
5177 gcc_unreachable ();
5179 /* We resolve conflicts with remaining reloads of the same type by
5180 excluding the intervals of reload registers by them from the
5181 interval of freed reload registers. Since we only keep track of
5182 one set of interval bounds, we might have to exclude somewhat
5183 more than what would be necessary if we used a HARD_REG_SET here.
5184 But this should only happen very infrequently, so there should
5185 be no reason to worry about it. */
5187 start_regno = regno;
5188 end_regno = regno + nregs;
5189 if (check_opnum || check_any)
5191 for (i = n_reloads - 1; i >= 0; i--)
5193 if (rld[i].when_needed == type
5194 && (check_any || rld[i].opnum == opnum)
5195 && rld[i].reg_rtx)
5197 unsigned int conflict_start = true_regnum (rld[i].reg_rtx);
5198 unsigned int conflict_end
5199 = end_hard_regno (rld[i].mode, conflict_start);
5201 /* If there is an overlap with the first to-be-freed register,
5202 adjust the interval start. */
5203 if (conflict_start <= start_regno && conflict_end > start_regno)
5204 start_regno = conflict_end;
5205 /* Otherwise, if there is a conflict with one of the other
5206 to-be-freed registers, adjust the interval end. */
5207 if (conflict_start > start_regno && conflict_start < end_regno)
5208 end_regno = conflict_start;
5213 for (r = start_regno; r < end_regno; r++)
5214 CLEAR_HARD_REG_BIT (*used_in_set, r);
5217 /* 1 if reg REGNO is free as a reload reg for a reload of the sort
5218 specified by OPNUM and TYPE. */
5220 static int
5221 reload_reg_free_p (unsigned int regno, int opnum, enum reload_type type)
5223 int i;
5225 /* In use for a RELOAD_OTHER means it's not available for anything. */
5226 if (TEST_HARD_REG_BIT (reload_reg_used, regno)
5227 || TEST_HARD_REG_BIT (reload_reg_unavailable, regno))
5228 return 0;
5230 switch (type)
5232 case RELOAD_OTHER:
5233 /* In use for anything means we can't use it for RELOAD_OTHER. */
5234 if (TEST_HARD_REG_BIT (reload_reg_used_in_other_addr, regno)
5235 || TEST_HARD_REG_BIT (reload_reg_used_in_op_addr, regno)
5236 || TEST_HARD_REG_BIT (reload_reg_used_in_op_addr_reload, regno)
5237 || TEST_HARD_REG_BIT (reload_reg_used_in_insn, regno))
5238 return 0;
5240 for (i = 0; i < reload_n_operands; i++)
5241 if (TEST_HARD_REG_BIT (reload_reg_used_in_input_addr[i], regno)
5242 || TEST_HARD_REG_BIT (reload_reg_used_in_inpaddr_addr[i], regno)
5243 || TEST_HARD_REG_BIT (reload_reg_used_in_output_addr[i], regno)
5244 || TEST_HARD_REG_BIT (reload_reg_used_in_outaddr_addr[i], regno)
5245 || TEST_HARD_REG_BIT (reload_reg_used_in_input[i], regno)
5246 || TEST_HARD_REG_BIT (reload_reg_used_in_output[i], regno))
5247 return 0;
5249 return 1;
5251 case RELOAD_FOR_INPUT:
5252 if (TEST_HARD_REG_BIT (reload_reg_used_in_insn, regno)
5253 || TEST_HARD_REG_BIT (reload_reg_used_in_op_addr, regno))
5254 return 0;
5256 if (TEST_HARD_REG_BIT (reload_reg_used_in_op_addr_reload, regno))
5257 return 0;
5259 /* If it is used for some other input, can't use it. */
5260 for (i = 0; i < reload_n_operands; i++)
5261 if (TEST_HARD_REG_BIT (reload_reg_used_in_input[i], regno))
5262 return 0;
5264 /* If it is used in a later operand's address, can't use it. */
5265 for (i = opnum + 1; i < reload_n_operands; i++)
5266 if (TEST_HARD_REG_BIT (reload_reg_used_in_input_addr[i], regno)
5267 || TEST_HARD_REG_BIT (reload_reg_used_in_inpaddr_addr[i], regno))
5268 return 0;
5270 return 1;
5272 case RELOAD_FOR_INPUT_ADDRESS:
5273 /* Can't use a register if it is used for an input address for this
5274 operand or used as an input in an earlier one. */
5275 if (TEST_HARD_REG_BIT (reload_reg_used_in_input_addr[opnum], regno)
5276 || TEST_HARD_REG_BIT (reload_reg_used_in_inpaddr_addr[opnum], regno))
5277 return 0;
5279 for (i = 0; i < opnum; i++)
5280 if (TEST_HARD_REG_BIT (reload_reg_used_in_input[i], regno))
5281 return 0;
5283 return 1;
5285 case RELOAD_FOR_INPADDR_ADDRESS:
5286 /* Can't use a register if it is used for an input address
5287 for this operand or used as an input in an earlier
5288 one. */
5289 if (TEST_HARD_REG_BIT (reload_reg_used_in_inpaddr_addr[opnum], regno))
5290 return 0;
5292 for (i = 0; i < opnum; i++)
5293 if (TEST_HARD_REG_BIT (reload_reg_used_in_input[i], regno))
5294 return 0;
5296 return 1;
5298 case RELOAD_FOR_OUTPUT_ADDRESS:
5299 /* Can't use a register if it is used for an output address for this
5300 operand or used as an output in this or a later operand. Note
5301 that multiple output operands are emitted in reverse order, so
5302 the conflicting ones are those with lower indices. */
5303 if (TEST_HARD_REG_BIT (reload_reg_used_in_output_addr[opnum], regno))
5304 return 0;
5306 for (i = 0; i <= opnum; i++)
5307 if (TEST_HARD_REG_BIT (reload_reg_used_in_output[i], regno))
5308 return 0;
5310 return 1;
5312 case RELOAD_FOR_OUTADDR_ADDRESS:
5313 /* Can't use a register if it is used for an output address
5314 for this operand or used as an output in this or a
5315 later operand. Note that multiple output operands are
5316 emitted in reverse order, so the conflicting ones are
5317 those with lower indices. */
5318 if (TEST_HARD_REG_BIT (reload_reg_used_in_outaddr_addr[opnum], regno))
5319 return 0;
5321 for (i = 0; i <= opnum; i++)
5322 if (TEST_HARD_REG_BIT (reload_reg_used_in_output[i], regno))
5323 return 0;
5325 return 1;
5327 case RELOAD_FOR_OPERAND_ADDRESS:
5328 for (i = 0; i < reload_n_operands; i++)
5329 if (TEST_HARD_REG_BIT (reload_reg_used_in_input[i], regno))
5330 return 0;
5332 return (! TEST_HARD_REG_BIT (reload_reg_used_in_insn, regno)
5333 && ! TEST_HARD_REG_BIT (reload_reg_used_in_op_addr, regno));
5335 case RELOAD_FOR_OPADDR_ADDR:
5336 for (i = 0; i < reload_n_operands; i++)
5337 if (TEST_HARD_REG_BIT (reload_reg_used_in_input[i], regno))
5338 return 0;
5340 return (!TEST_HARD_REG_BIT (reload_reg_used_in_op_addr_reload, regno));
5342 case RELOAD_FOR_OUTPUT:
5343 /* This cannot share a register with RELOAD_FOR_INSN reloads, other
5344 outputs, or an operand address for this or an earlier output.
5345 Note that multiple output operands are emitted in reverse order,
5346 so the conflicting ones are those with higher indices. */
5347 if (TEST_HARD_REG_BIT (reload_reg_used_in_insn, regno))
5348 return 0;
5350 for (i = 0; i < reload_n_operands; i++)
5351 if (TEST_HARD_REG_BIT (reload_reg_used_in_output[i], regno))
5352 return 0;
5354 for (i = opnum; i < reload_n_operands; i++)
5355 if (TEST_HARD_REG_BIT (reload_reg_used_in_output_addr[i], regno)
5356 || TEST_HARD_REG_BIT (reload_reg_used_in_outaddr_addr[i], regno))
5357 return 0;
5359 return 1;
5361 case RELOAD_FOR_INSN:
5362 for (i = 0; i < reload_n_operands; i++)
5363 if (TEST_HARD_REG_BIT (reload_reg_used_in_input[i], regno)
5364 || TEST_HARD_REG_BIT (reload_reg_used_in_output[i], regno))
5365 return 0;
5367 return (! TEST_HARD_REG_BIT (reload_reg_used_in_insn, regno)
5368 && ! TEST_HARD_REG_BIT (reload_reg_used_in_op_addr, regno));
5370 case RELOAD_FOR_OTHER_ADDRESS:
5371 return ! TEST_HARD_REG_BIT (reload_reg_used_in_other_addr, regno);
5373 default:
5374 gcc_unreachable ();
5378 /* Return 1 if the value in reload reg REGNO, as used by the reload with
5379 the number RELOADNUM, is still available in REGNO at the end of the insn.
5381 We can assume that the reload reg was already tested for availability
5382 at the time it is needed, and we should not check this again,
5383 in case the reg has already been marked in use. */
5385 static int
5386 reload_reg_reaches_end_p (unsigned int regno, int reloadnum)
5388 int opnum = rld[reloadnum].opnum;
5389 enum reload_type type = rld[reloadnum].when_needed;
5390 int i;
5392 /* See if there is a reload with the same type for this operand, using
5393 the same register. This case is not handled by the code below. */
5394 for (i = reloadnum + 1; i < n_reloads; i++)
5396 rtx reg;
5397 int nregs;
5399 if (rld[i].opnum != opnum || rld[i].when_needed != type)
5400 continue;
5401 reg = rld[i].reg_rtx;
5402 if (reg == NULL_RTX)
5403 continue;
5404 nregs = hard_regno_nregs[REGNO (reg)][GET_MODE (reg)];
5405 if (regno >= REGNO (reg) && regno < REGNO (reg) + nregs)
5406 return 0;
5409 switch (type)
5411 case RELOAD_OTHER:
5412 /* Since a RELOAD_OTHER reload claims the reg for the entire insn,
5413 its value must reach the end. */
5414 return 1;
5416 /* If this use is for part of the insn,
5417 its value reaches if no subsequent part uses the same register.
5418 Just like the above function, don't try to do this with lots
5419 of fallthroughs. */
5421 case RELOAD_FOR_OTHER_ADDRESS:
5422 /* Here we check for everything else, since these don't conflict
5423 with anything else and everything comes later. */
5425 for (i = 0; i < reload_n_operands; i++)
5426 if (TEST_HARD_REG_BIT (reload_reg_used_in_output_addr[i], regno)
5427 || TEST_HARD_REG_BIT (reload_reg_used_in_outaddr_addr[i], regno)
5428 || TEST_HARD_REG_BIT (reload_reg_used_in_output[i], regno)
5429 || TEST_HARD_REG_BIT (reload_reg_used_in_input_addr[i], regno)
5430 || TEST_HARD_REG_BIT (reload_reg_used_in_inpaddr_addr[i], regno)
5431 || TEST_HARD_REG_BIT (reload_reg_used_in_input[i], regno))
5432 return 0;
5434 return (! TEST_HARD_REG_BIT (reload_reg_used_in_op_addr, regno)
5435 && ! TEST_HARD_REG_BIT (reload_reg_used_in_op_addr_reload, regno)
5436 && ! TEST_HARD_REG_BIT (reload_reg_used_in_insn, regno)
5437 && ! TEST_HARD_REG_BIT (reload_reg_used, regno));
5439 case RELOAD_FOR_INPUT_ADDRESS:
5440 case RELOAD_FOR_INPADDR_ADDRESS:
5441 /* Similar, except that we check only for this and subsequent inputs
5442 and the address of only subsequent inputs and we do not need
5443 to check for RELOAD_OTHER objects since they are known not to
5444 conflict. */
5446 for (i = opnum; i < reload_n_operands; i++)
5447 if (TEST_HARD_REG_BIT (reload_reg_used_in_input[i], regno))
5448 return 0;
5450 /* Reload register of reload with type RELOAD_FOR_INPADDR_ADDRESS
5451 could be killed if the register is also used by reload with type
5452 RELOAD_FOR_INPUT_ADDRESS, so check it. */
5453 if (type == RELOAD_FOR_INPADDR_ADDRESS
5454 && TEST_HARD_REG_BIT (reload_reg_used_in_input_addr[opnum], regno))
5455 return 0;
5457 for (i = opnum + 1; i < reload_n_operands; i++)
5458 if (TEST_HARD_REG_BIT (reload_reg_used_in_input_addr[i], regno)
5459 || TEST_HARD_REG_BIT (reload_reg_used_in_inpaddr_addr[i], regno))
5460 return 0;
5462 for (i = 0; i < reload_n_operands; i++)
5463 if (TEST_HARD_REG_BIT (reload_reg_used_in_output_addr[i], regno)
5464 || TEST_HARD_REG_BIT (reload_reg_used_in_outaddr_addr[i], regno)
5465 || TEST_HARD_REG_BIT (reload_reg_used_in_output[i], regno))
5466 return 0;
5468 if (TEST_HARD_REG_BIT (reload_reg_used_in_op_addr_reload, regno))
5469 return 0;
5471 return (!TEST_HARD_REG_BIT (reload_reg_used_in_op_addr, regno)
5472 && !TEST_HARD_REG_BIT (reload_reg_used_in_insn, regno)
5473 && !TEST_HARD_REG_BIT (reload_reg_used, regno));
5475 case RELOAD_FOR_INPUT:
5476 /* Similar to input address, except we start at the next operand for
5477 both input and input address and we do not check for
5478 RELOAD_FOR_OPERAND_ADDRESS and RELOAD_FOR_INSN since these
5479 would conflict. */
5481 for (i = opnum + 1; i < reload_n_operands; i++)
5482 if (TEST_HARD_REG_BIT (reload_reg_used_in_input_addr[i], regno)
5483 || TEST_HARD_REG_BIT (reload_reg_used_in_inpaddr_addr[i], regno)
5484 || TEST_HARD_REG_BIT (reload_reg_used_in_input[i], regno))
5485 return 0;
5487 /* ... fall through ... */
5489 case RELOAD_FOR_OPERAND_ADDRESS:
5490 /* Check outputs and their addresses. */
5492 for (i = 0; i < reload_n_operands; i++)
5493 if (TEST_HARD_REG_BIT (reload_reg_used_in_output_addr[i], regno)
5494 || TEST_HARD_REG_BIT (reload_reg_used_in_outaddr_addr[i], regno)
5495 || TEST_HARD_REG_BIT (reload_reg_used_in_output[i], regno))
5496 return 0;
5498 return (!TEST_HARD_REG_BIT (reload_reg_used, regno));
5500 case RELOAD_FOR_OPADDR_ADDR:
5501 for (i = 0; i < reload_n_operands; i++)
5502 if (TEST_HARD_REG_BIT (reload_reg_used_in_output_addr[i], regno)
5503 || TEST_HARD_REG_BIT (reload_reg_used_in_outaddr_addr[i], regno)
5504 || TEST_HARD_REG_BIT (reload_reg_used_in_output[i], regno))
5505 return 0;
5507 return (!TEST_HARD_REG_BIT (reload_reg_used_in_op_addr, regno)
5508 && !TEST_HARD_REG_BIT (reload_reg_used_in_insn, regno)
5509 && !TEST_HARD_REG_BIT (reload_reg_used, regno));
5511 case RELOAD_FOR_INSN:
5512 /* These conflict with other outputs with RELOAD_OTHER. So
5513 we need only check for output addresses. */
5515 opnum = reload_n_operands;
5517 /* ... fall through ... */
5519 case RELOAD_FOR_OUTPUT:
5520 case RELOAD_FOR_OUTPUT_ADDRESS:
5521 case RELOAD_FOR_OUTADDR_ADDRESS:
5522 /* We already know these can't conflict with a later output. So the
5523 only thing to check are later output addresses.
5524 Note that multiple output operands are emitted in reverse order,
5525 so the conflicting ones are those with lower indices. */
5526 for (i = 0; i < opnum; i++)
5527 if (TEST_HARD_REG_BIT (reload_reg_used_in_output_addr[i], regno)
5528 || TEST_HARD_REG_BIT (reload_reg_used_in_outaddr_addr[i], regno))
5529 return 0;
5531 /* Reload register of reload with type RELOAD_FOR_OUTADDR_ADDRESS
5532 could be killed if the register is also used by reload with type
5533 RELOAD_FOR_OUTPUT_ADDRESS, so check it. */
5534 if (type == RELOAD_FOR_OUTADDR_ADDRESS
5535 && TEST_HARD_REG_BIT (reload_reg_used_in_outaddr_addr[opnum], regno))
5536 return 0;
5538 return 1;
5540 default:
5541 gcc_unreachable ();
5545 /* Like reload_reg_reaches_end_p, but check that the condition holds for
5546 every register in REG. */
5548 static bool
5549 reload_reg_rtx_reaches_end_p (rtx reg, int reloadnum)
5551 unsigned int i;
5553 for (i = REGNO (reg); i < END_REGNO (reg); i++)
5554 if (!reload_reg_reaches_end_p (i, reloadnum))
5555 return false;
5556 return true;
5560 /* Returns whether R1 and R2 are uniquely chained: the value of one
5561 is used by the other, and that value is not used by any other
5562 reload for this insn. This is used to partially undo the decision
5563 made in find_reloads when in the case of multiple
5564 RELOAD_FOR_OPERAND_ADDRESS reloads it converts all
5565 RELOAD_FOR_OPADDR_ADDR reloads into RELOAD_FOR_OPERAND_ADDRESS
5566 reloads. This code tries to avoid the conflict created by that
5567 change. It might be cleaner to explicitly keep track of which
5568 RELOAD_FOR_OPADDR_ADDR reload is associated with which
5569 RELOAD_FOR_OPERAND_ADDRESS reload, rather than to try to detect
5570 this after the fact. */
5571 static bool
5572 reloads_unique_chain_p (int r1, int r2)
5574 int i;
5576 /* We only check input reloads. */
5577 if (! rld[r1].in || ! rld[r2].in)
5578 return false;
5580 /* Avoid anything with output reloads. */
5581 if (rld[r1].out || rld[r2].out)
5582 return false;
5584 /* "chained" means one reload is a component of the other reload,
5585 not the same as the other reload. */
5586 if (rld[r1].opnum != rld[r2].opnum
5587 || rtx_equal_p (rld[r1].in, rld[r2].in)
5588 || rld[r1].optional || rld[r2].optional
5589 || ! (reg_mentioned_p (rld[r1].in, rld[r2].in)
5590 || reg_mentioned_p (rld[r2].in, rld[r1].in)))
5591 return false;
5593 /* The following loop assumes that r1 is the reload that feeds r2. */
5594 if (r1 > r2)
5596 int tmp = r2;
5597 r2 = r1;
5598 r1 = tmp;
5601 for (i = 0; i < n_reloads; i ++)
5602 /* Look for input reloads that aren't our two */
5603 if (i != r1 && i != r2 && rld[i].in)
5605 /* If our reload is mentioned at all, it isn't a simple chain. */
5606 if (reg_mentioned_p (rld[r1].in, rld[i].in))
5607 return false;
5609 return true;
5612 /* The recursive function change all occurrences of WHAT in *WHERE
5613 to REPL. */
5614 static void
5615 substitute (rtx *where, const_rtx what, rtx repl)
5617 const char *fmt;
5618 int i;
5619 enum rtx_code code;
5621 if (*where == 0)
5622 return;
5624 if (*where == what || rtx_equal_p (*where, what))
5626 /* Record the location of the changed rtx. */
5627 substitute_stack.safe_push (where);
5628 *where = repl;
5629 return;
5632 code = GET_CODE (*where);
5633 fmt = GET_RTX_FORMAT (code);
5634 for (i = GET_RTX_LENGTH (code) - 1; i >= 0; i--)
5636 if (fmt[i] == 'E')
5638 int j;
5640 for (j = XVECLEN (*where, i) - 1; j >= 0; j--)
5641 substitute (&XVECEXP (*where, i, j), what, repl);
5643 else if (fmt[i] == 'e')
5644 substitute (&XEXP (*where, i), what, repl);
5648 /* The function returns TRUE if chain of reload R1 and R2 (in any
5649 order) can be evaluated without usage of intermediate register for
5650 the reload containing another reload. It is important to see
5651 gen_reload to understand what the function is trying to do. As an
5652 example, let us have reload chain
5654 r2: const
5655 r1: <something> + const
5657 and reload R2 got reload reg HR. The function returns true if
5658 there is a correct insn HR = HR + <something>. Otherwise,
5659 gen_reload will use intermediate register (and this is the reload
5660 reg for R1) to reload <something>.
5662 We need this function to find a conflict for chain reloads. In our
5663 example, if HR = HR + <something> is incorrect insn, then we cannot
5664 use HR as a reload register for R2. If we do use it then we get a
5665 wrong code:
5667 HR = const
5668 HR = <something>
5669 HR = HR + HR
5672 static bool
5673 gen_reload_chain_without_interm_reg_p (int r1, int r2)
5675 /* Assume other cases in gen_reload are not possible for
5676 chain reloads or do need an intermediate hard registers. */
5677 bool result = true;
5678 int regno, n, code;
5679 rtx out, in, insn;
5680 rtx last = get_last_insn ();
5682 /* Make r2 a component of r1. */
5683 if (reg_mentioned_p (rld[r1].in, rld[r2].in))
5685 n = r1;
5686 r1 = r2;
5687 r2 = n;
5689 gcc_assert (reg_mentioned_p (rld[r2].in, rld[r1].in));
5690 regno = rld[r1].regno >= 0 ? rld[r1].regno : rld[r2].regno;
5691 gcc_assert (regno >= 0);
5692 out = gen_rtx_REG (rld[r1].mode, regno);
5693 in = rld[r1].in;
5694 substitute (&in, rld[r2].in, gen_rtx_REG (rld[r2].mode, regno));
5696 /* If IN is a paradoxical SUBREG, remove it and try to put the
5697 opposite SUBREG on OUT. Likewise for a paradoxical SUBREG on OUT. */
5698 strip_paradoxical_subreg (&in, &out);
5700 if (GET_CODE (in) == PLUS
5701 && (REG_P (XEXP (in, 0))
5702 || GET_CODE (XEXP (in, 0)) == SUBREG
5703 || MEM_P (XEXP (in, 0)))
5704 && (REG_P (XEXP (in, 1))
5705 || GET_CODE (XEXP (in, 1)) == SUBREG
5706 || CONSTANT_P (XEXP (in, 1))
5707 || MEM_P (XEXP (in, 1))))
5709 insn = emit_insn (gen_rtx_SET (VOIDmode, out, in));
5710 code = recog_memoized (insn);
5711 result = false;
5713 if (code >= 0)
5715 extract_insn (insn);
5716 /* We want constrain operands to treat this insn strictly in
5717 its validity determination, i.e., the way it would after
5718 reload has completed. */
5719 result = constrain_operands (1);
5722 delete_insns_since (last);
5725 /* Restore the original value at each changed address within R1. */
5726 while (!substitute_stack.is_empty ())
5728 rtx *where = substitute_stack.pop ();
5729 *where = rld[r2].in;
5732 return result;
5735 /* Return 1 if the reloads denoted by R1 and R2 cannot share a register.
5736 Return 0 otherwise.
5738 This function uses the same algorithm as reload_reg_free_p above. */
5740 static int
5741 reloads_conflict (int r1, int r2)
5743 enum reload_type r1_type = rld[r1].when_needed;
5744 enum reload_type r2_type = rld[r2].when_needed;
5745 int r1_opnum = rld[r1].opnum;
5746 int r2_opnum = rld[r2].opnum;
5748 /* RELOAD_OTHER conflicts with everything. */
5749 if (r2_type == RELOAD_OTHER)
5750 return 1;
5752 /* Otherwise, check conflicts differently for each type. */
5754 switch (r1_type)
5756 case RELOAD_FOR_INPUT:
5757 return (r2_type == RELOAD_FOR_INSN
5758 || r2_type == RELOAD_FOR_OPERAND_ADDRESS
5759 || r2_type == RELOAD_FOR_OPADDR_ADDR
5760 || r2_type == RELOAD_FOR_INPUT
5761 || ((r2_type == RELOAD_FOR_INPUT_ADDRESS
5762 || r2_type == RELOAD_FOR_INPADDR_ADDRESS)
5763 && r2_opnum > r1_opnum));
5765 case RELOAD_FOR_INPUT_ADDRESS:
5766 return ((r2_type == RELOAD_FOR_INPUT_ADDRESS && r1_opnum == r2_opnum)
5767 || (r2_type == RELOAD_FOR_INPUT && r2_opnum < r1_opnum));
5769 case RELOAD_FOR_INPADDR_ADDRESS:
5770 return ((r2_type == RELOAD_FOR_INPADDR_ADDRESS && r1_opnum == r2_opnum)
5771 || (r2_type == RELOAD_FOR_INPUT && r2_opnum < r1_opnum));
5773 case RELOAD_FOR_OUTPUT_ADDRESS:
5774 return ((r2_type == RELOAD_FOR_OUTPUT_ADDRESS && r2_opnum == r1_opnum)
5775 || (r2_type == RELOAD_FOR_OUTPUT && r2_opnum <= r1_opnum));
5777 case RELOAD_FOR_OUTADDR_ADDRESS:
5778 return ((r2_type == RELOAD_FOR_OUTADDR_ADDRESS && r2_opnum == r1_opnum)
5779 || (r2_type == RELOAD_FOR_OUTPUT && r2_opnum <= r1_opnum));
5781 case RELOAD_FOR_OPERAND_ADDRESS:
5782 return (r2_type == RELOAD_FOR_INPUT || r2_type == RELOAD_FOR_INSN
5783 || (r2_type == RELOAD_FOR_OPERAND_ADDRESS
5784 && (!reloads_unique_chain_p (r1, r2)
5785 || !gen_reload_chain_without_interm_reg_p (r1, r2))));
5787 case RELOAD_FOR_OPADDR_ADDR:
5788 return (r2_type == RELOAD_FOR_INPUT
5789 || r2_type == RELOAD_FOR_OPADDR_ADDR);
5791 case RELOAD_FOR_OUTPUT:
5792 return (r2_type == RELOAD_FOR_INSN || r2_type == RELOAD_FOR_OUTPUT
5793 || ((r2_type == RELOAD_FOR_OUTPUT_ADDRESS
5794 || r2_type == RELOAD_FOR_OUTADDR_ADDRESS)
5795 && r2_opnum >= r1_opnum));
5797 case RELOAD_FOR_INSN:
5798 return (r2_type == RELOAD_FOR_INPUT || r2_type == RELOAD_FOR_OUTPUT
5799 || r2_type == RELOAD_FOR_INSN
5800 || r2_type == RELOAD_FOR_OPERAND_ADDRESS);
5802 case RELOAD_FOR_OTHER_ADDRESS:
5803 return r2_type == RELOAD_FOR_OTHER_ADDRESS;
5805 case RELOAD_OTHER:
5806 return 1;
5808 default:
5809 gcc_unreachable ();
5813 /* Indexed by reload number, 1 if incoming value
5814 inherited from previous insns. */
5815 static char reload_inherited[MAX_RELOADS];
5817 /* For an inherited reload, this is the insn the reload was inherited from,
5818 if we know it. Otherwise, this is 0. */
5819 static rtx reload_inheritance_insn[MAX_RELOADS];
5821 /* If nonzero, this is a place to get the value of the reload,
5822 rather than using reload_in. */
5823 static rtx reload_override_in[MAX_RELOADS];
5825 /* For each reload, the hard register number of the register used,
5826 or -1 if we did not need a register for this reload. */
5827 static int reload_spill_index[MAX_RELOADS];
5829 /* Index X is the value of rld[X].reg_rtx, adjusted for the input mode. */
5830 static rtx reload_reg_rtx_for_input[MAX_RELOADS];
5832 /* Index X is the value of rld[X].reg_rtx, adjusted for the output mode. */
5833 static rtx reload_reg_rtx_for_output[MAX_RELOADS];
5835 /* Subroutine of free_for_value_p, used to check a single register.
5836 START_REGNO is the starting regno of the full reload register
5837 (possibly comprising multiple hard registers) that we are considering. */
5839 static int
5840 reload_reg_free_for_value_p (int start_regno, int regno, int opnum,
5841 enum reload_type type, rtx value, rtx out,
5842 int reloadnum, int ignore_address_reloads)
5844 int time1;
5845 /* Set if we see an input reload that must not share its reload register
5846 with any new earlyclobber, but might otherwise share the reload
5847 register with an output or input-output reload. */
5848 int check_earlyclobber = 0;
5849 int i;
5850 int copy = 0;
5852 if (TEST_HARD_REG_BIT (reload_reg_unavailable, regno))
5853 return 0;
5855 if (out == const0_rtx)
5857 copy = 1;
5858 out = NULL_RTX;
5861 /* We use some pseudo 'time' value to check if the lifetimes of the
5862 new register use would overlap with the one of a previous reload
5863 that is not read-only or uses a different value.
5864 The 'time' used doesn't have to be linear in any shape or form, just
5865 monotonic.
5866 Some reload types use different 'buckets' for each operand.
5867 So there are MAX_RECOG_OPERANDS different time values for each
5868 such reload type.
5869 We compute TIME1 as the time when the register for the prospective
5870 new reload ceases to be live, and TIME2 for each existing
5871 reload as the time when that the reload register of that reload
5872 becomes live.
5873 Where there is little to be gained by exact lifetime calculations,
5874 we just make conservative assumptions, i.e. a longer lifetime;
5875 this is done in the 'default:' cases. */
5876 switch (type)
5878 case RELOAD_FOR_OTHER_ADDRESS:
5879 /* RELOAD_FOR_OTHER_ADDRESS conflicts with RELOAD_OTHER reloads. */
5880 time1 = copy ? 0 : 1;
5881 break;
5882 case RELOAD_OTHER:
5883 time1 = copy ? 1 : MAX_RECOG_OPERANDS * 5 + 5;
5884 break;
5885 /* For each input, we may have a sequence of RELOAD_FOR_INPADDR_ADDRESS,
5886 RELOAD_FOR_INPUT_ADDRESS and RELOAD_FOR_INPUT. By adding 0 / 1 / 2 ,
5887 respectively, to the time values for these, we get distinct time
5888 values. To get distinct time values for each operand, we have to
5889 multiply opnum by at least three. We round that up to four because
5890 multiply by four is often cheaper. */
5891 case RELOAD_FOR_INPADDR_ADDRESS:
5892 time1 = opnum * 4 + 2;
5893 break;
5894 case RELOAD_FOR_INPUT_ADDRESS:
5895 time1 = opnum * 4 + 3;
5896 break;
5897 case RELOAD_FOR_INPUT:
5898 /* All RELOAD_FOR_INPUT reloads remain live till the instruction
5899 executes (inclusive). */
5900 time1 = copy ? opnum * 4 + 4 : MAX_RECOG_OPERANDS * 4 + 3;
5901 break;
5902 case RELOAD_FOR_OPADDR_ADDR:
5903 /* opnum * 4 + 4
5904 <= (MAX_RECOG_OPERANDS - 1) * 4 + 4 == MAX_RECOG_OPERANDS * 4 */
5905 time1 = MAX_RECOG_OPERANDS * 4 + 1;
5906 break;
5907 case RELOAD_FOR_OPERAND_ADDRESS:
5908 /* RELOAD_FOR_OPERAND_ADDRESS reloads are live even while the insn
5909 is executed. */
5910 time1 = copy ? MAX_RECOG_OPERANDS * 4 + 2 : MAX_RECOG_OPERANDS * 4 + 3;
5911 break;
5912 case RELOAD_FOR_OUTADDR_ADDRESS:
5913 time1 = MAX_RECOG_OPERANDS * 4 + 4 + opnum;
5914 break;
5915 case RELOAD_FOR_OUTPUT_ADDRESS:
5916 time1 = MAX_RECOG_OPERANDS * 4 + 5 + opnum;
5917 break;
5918 default:
5919 time1 = MAX_RECOG_OPERANDS * 5 + 5;
5922 for (i = 0; i < n_reloads; i++)
5924 rtx reg = rld[i].reg_rtx;
5925 if (reg && REG_P (reg)
5926 && ((unsigned) regno - true_regnum (reg)
5927 <= hard_regno_nregs[REGNO (reg)][GET_MODE (reg)] - (unsigned) 1)
5928 && i != reloadnum)
5930 rtx other_input = rld[i].in;
5932 /* If the other reload loads the same input value, that
5933 will not cause a conflict only if it's loading it into
5934 the same register. */
5935 if (true_regnum (reg) != start_regno)
5936 other_input = NULL_RTX;
5937 if (! other_input || ! rtx_equal_p (other_input, value)
5938 || rld[i].out || out)
5940 int time2;
5941 switch (rld[i].when_needed)
5943 case RELOAD_FOR_OTHER_ADDRESS:
5944 time2 = 0;
5945 break;
5946 case RELOAD_FOR_INPADDR_ADDRESS:
5947 /* find_reloads makes sure that a
5948 RELOAD_FOR_{INP,OP,OUT}ADDR_ADDRESS reload is only used
5949 by at most one - the first -
5950 RELOAD_FOR_{INPUT,OPERAND,OUTPUT}_ADDRESS . If the
5951 address reload is inherited, the address address reload
5952 goes away, so we can ignore this conflict. */
5953 if (type == RELOAD_FOR_INPUT_ADDRESS && reloadnum == i + 1
5954 && ignore_address_reloads
5955 /* Unless the RELOAD_FOR_INPUT is an auto_inc expression.
5956 Then the address address is still needed to store
5957 back the new address. */
5958 && ! rld[reloadnum].out)
5959 continue;
5960 /* Likewise, if a RELOAD_FOR_INPUT can inherit a value, its
5961 RELOAD_FOR_INPUT_ADDRESS / RELOAD_FOR_INPADDR_ADDRESS
5962 reloads go away. */
5963 if (type == RELOAD_FOR_INPUT && opnum == rld[i].opnum
5964 && ignore_address_reloads
5965 /* Unless we are reloading an auto_inc expression. */
5966 && ! rld[reloadnum].out)
5967 continue;
5968 time2 = rld[i].opnum * 4 + 2;
5969 break;
5970 case RELOAD_FOR_INPUT_ADDRESS:
5971 if (type == RELOAD_FOR_INPUT && opnum == rld[i].opnum
5972 && ignore_address_reloads
5973 && ! rld[reloadnum].out)
5974 continue;
5975 time2 = rld[i].opnum * 4 + 3;
5976 break;
5977 case RELOAD_FOR_INPUT:
5978 time2 = rld[i].opnum * 4 + 4;
5979 check_earlyclobber = 1;
5980 break;
5981 /* rld[i].opnum * 4 + 4 <= (MAX_RECOG_OPERAND - 1) * 4 + 4
5982 == MAX_RECOG_OPERAND * 4 */
5983 case RELOAD_FOR_OPADDR_ADDR:
5984 if (type == RELOAD_FOR_OPERAND_ADDRESS && reloadnum == i + 1
5985 && ignore_address_reloads
5986 && ! rld[reloadnum].out)
5987 continue;
5988 time2 = MAX_RECOG_OPERANDS * 4 + 1;
5989 break;
5990 case RELOAD_FOR_OPERAND_ADDRESS:
5991 time2 = MAX_RECOG_OPERANDS * 4 + 2;
5992 check_earlyclobber = 1;
5993 break;
5994 case RELOAD_FOR_INSN:
5995 time2 = MAX_RECOG_OPERANDS * 4 + 3;
5996 break;
5997 case RELOAD_FOR_OUTPUT:
5998 /* All RELOAD_FOR_OUTPUT reloads become live just after the
5999 instruction is executed. */
6000 time2 = MAX_RECOG_OPERANDS * 4 + 4;
6001 break;
6002 /* The first RELOAD_FOR_OUTADDR_ADDRESS reload conflicts with
6003 the RELOAD_FOR_OUTPUT reloads, so assign it the same time
6004 value. */
6005 case RELOAD_FOR_OUTADDR_ADDRESS:
6006 if (type == RELOAD_FOR_OUTPUT_ADDRESS && reloadnum == i + 1
6007 && ignore_address_reloads
6008 && ! rld[reloadnum].out)
6009 continue;
6010 time2 = MAX_RECOG_OPERANDS * 4 + 4 + rld[i].opnum;
6011 break;
6012 case RELOAD_FOR_OUTPUT_ADDRESS:
6013 time2 = MAX_RECOG_OPERANDS * 4 + 5 + rld[i].opnum;
6014 break;
6015 case RELOAD_OTHER:
6016 /* If there is no conflict in the input part, handle this
6017 like an output reload. */
6018 if (! rld[i].in || rtx_equal_p (other_input, value))
6020 time2 = MAX_RECOG_OPERANDS * 4 + 4;
6021 /* Earlyclobbered outputs must conflict with inputs. */
6022 if (earlyclobber_operand_p (rld[i].out))
6023 time2 = MAX_RECOG_OPERANDS * 4 + 3;
6025 break;
6027 time2 = 1;
6028 /* RELOAD_OTHER might be live beyond instruction execution,
6029 but this is not obvious when we set time2 = 1. So check
6030 here if there might be a problem with the new reload
6031 clobbering the register used by the RELOAD_OTHER. */
6032 if (out)
6033 return 0;
6034 break;
6035 default:
6036 return 0;
6038 if ((time1 >= time2
6039 && (! rld[i].in || rld[i].out
6040 || ! rtx_equal_p (other_input, value)))
6041 || (out && rld[reloadnum].out_reg
6042 && time2 >= MAX_RECOG_OPERANDS * 4 + 3))
6043 return 0;
6048 /* Earlyclobbered outputs must conflict with inputs. */
6049 if (check_earlyclobber && out && earlyclobber_operand_p (out))
6050 return 0;
6052 return 1;
6055 /* Return 1 if the value in reload reg REGNO, as used by a reload
6056 needed for the part of the insn specified by OPNUM and TYPE,
6057 may be used to load VALUE into it.
6059 MODE is the mode in which the register is used, this is needed to
6060 determine how many hard regs to test.
6062 Other read-only reloads with the same value do not conflict
6063 unless OUT is nonzero and these other reloads have to live while
6064 output reloads live.
6065 If OUT is CONST0_RTX, this is a special case: it means that the
6066 test should not be for using register REGNO as reload register, but
6067 for copying from register REGNO into the reload register.
6069 RELOADNUM is the number of the reload we want to load this value for;
6070 a reload does not conflict with itself.
6072 When IGNORE_ADDRESS_RELOADS is set, we can not have conflicts with
6073 reloads that load an address for the very reload we are considering.
6075 The caller has to make sure that there is no conflict with the return
6076 register. */
6078 static int
6079 free_for_value_p (int regno, enum machine_mode mode, int opnum,
6080 enum reload_type type, rtx value, rtx out, int reloadnum,
6081 int ignore_address_reloads)
6083 int nregs = hard_regno_nregs[regno][mode];
6084 while (nregs-- > 0)
6085 if (! reload_reg_free_for_value_p (regno, regno + nregs, opnum, type,
6086 value, out, reloadnum,
6087 ignore_address_reloads))
6088 return 0;
6089 return 1;
6092 /* Return nonzero if the rtx X is invariant over the current function. */
6093 /* ??? Actually, the places where we use this expect exactly what is
6094 tested here, and not everything that is function invariant. In
6095 particular, the frame pointer and arg pointer are special cased;
6096 pic_offset_table_rtx is not, and we must not spill these things to
6097 memory. */
6100 function_invariant_p (const_rtx x)
6102 if (CONSTANT_P (x))
6103 return 1;
6104 if (x == frame_pointer_rtx || x == arg_pointer_rtx)
6105 return 1;
6106 if (GET_CODE (x) == PLUS
6107 && (XEXP (x, 0) == frame_pointer_rtx || XEXP (x, 0) == arg_pointer_rtx)
6108 && GET_CODE (XEXP (x, 1)) == CONST_INT)
6109 return 1;
6110 return 0;
6113 /* Determine whether the reload reg X overlaps any rtx'es used for
6114 overriding inheritance. Return nonzero if so. */
6116 static int
6117 conflicts_with_override (rtx x)
6119 int i;
6120 for (i = 0; i < n_reloads; i++)
6121 if (reload_override_in[i]
6122 && reg_overlap_mentioned_p (x, reload_override_in[i]))
6123 return 1;
6124 return 0;
6127 /* Give an error message saying we failed to find a reload for INSN,
6128 and clear out reload R. */
6129 static void
6130 failed_reload (rtx insn, int r)
6132 if (asm_noperands (PATTERN (insn)) < 0)
6133 /* It's the compiler's fault. */
6134 fatal_insn ("could not find a spill register", insn);
6136 /* It's the user's fault; the operand's mode and constraint
6137 don't match. Disable this reload so we don't crash in final. */
6138 error_for_asm (insn,
6139 "%<asm%> operand constraint incompatible with operand size");
6140 rld[r].in = 0;
6141 rld[r].out = 0;
6142 rld[r].reg_rtx = 0;
6143 rld[r].optional = 1;
6144 rld[r].secondary_p = 1;
6147 /* I is the index in SPILL_REG_RTX of the reload register we are to allocate
6148 for reload R. If it's valid, get an rtx for it. Return nonzero if
6149 successful. */
6150 static int
6151 set_reload_reg (int i, int r)
6153 /* regno is 'set but not used' if HARD_REGNO_MODE_OK doesn't use its first
6154 parameter. */
6155 int regno ATTRIBUTE_UNUSED;
6156 rtx reg = spill_reg_rtx[i];
6158 if (reg == 0 || GET_MODE (reg) != rld[r].mode)
6159 spill_reg_rtx[i] = reg
6160 = gen_rtx_REG (rld[r].mode, spill_regs[i]);
6162 regno = true_regnum (reg);
6164 /* Detect when the reload reg can't hold the reload mode.
6165 This used to be one `if', but Sequent compiler can't handle that. */
6166 if (HARD_REGNO_MODE_OK (regno, rld[r].mode))
6168 enum machine_mode test_mode = VOIDmode;
6169 if (rld[r].in)
6170 test_mode = GET_MODE (rld[r].in);
6171 /* If rld[r].in has VOIDmode, it means we will load it
6172 in whatever mode the reload reg has: to wit, rld[r].mode.
6173 We have already tested that for validity. */
6174 /* Aside from that, we need to test that the expressions
6175 to reload from or into have modes which are valid for this
6176 reload register. Otherwise the reload insns would be invalid. */
6177 if (! (rld[r].in != 0 && test_mode != VOIDmode
6178 && ! HARD_REGNO_MODE_OK (regno, test_mode)))
6179 if (! (rld[r].out != 0
6180 && ! HARD_REGNO_MODE_OK (regno, GET_MODE (rld[r].out))))
6182 /* The reg is OK. */
6183 last_spill_reg = i;
6185 /* Mark as in use for this insn the reload regs we use
6186 for this. */
6187 mark_reload_reg_in_use (spill_regs[i], rld[r].opnum,
6188 rld[r].when_needed, rld[r].mode);
6190 rld[r].reg_rtx = reg;
6191 reload_spill_index[r] = spill_regs[i];
6192 return 1;
6195 return 0;
6198 /* Find a spill register to use as a reload register for reload R.
6199 LAST_RELOAD is nonzero if this is the last reload for the insn being
6200 processed.
6202 Set rld[R].reg_rtx to the register allocated.
6204 We return 1 if successful, or 0 if we couldn't find a spill reg and
6205 we didn't change anything. */
6207 static int
6208 allocate_reload_reg (struct insn_chain *chain ATTRIBUTE_UNUSED, int r,
6209 int last_reload)
6211 int i, pass, count;
6213 /* If we put this reload ahead, thinking it is a group,
6214 then insist on finding a group. Otherwise we can grab a
6215 reg that some other reload needs.
6216 (That can happen when we have a 68000 DATA_OR_FP_REG
6217 which is a group of data regs or one fp reg.)
6218 We need not be so restrictive if there are no more reloads
6219 for this insn.
6221 ??? Really it would be nicer to have smarter handling
6222 for that kind of reg class, where a problem like this is normal.
6223 Perhaps those classes should be avoided for reloading
6224 by use of more alternatives. */
6226 int force_group = rld[r].nregs > 1 && ! last_reload;
6228 /* If we want a single register and haven't yet found one,
6229 take any reg in the right class and not in use.
6230 If we want a consecutive group, here is where we look for it.
6232 We use three passes so we can first look for reload regs to
6233 reuse, which are already in use for other reloads in this insn,
6234 and only then use additional registers which are not "bad", then
6235 finally any register.
6237 I think that maximizing reuse is needed to make sure we don't
6238 run out of reload regs. Suppose we have three reloads, and
6239 reloads A and B can share regs. These need two regs.
6240 Suppose A and B are given different regs.
6241 That leaves none for C. */
6242 for (pass = 0; pass < 3; pass++)
6244 /* I is the index in spill_regs.
6245 We advance it round-robin between insns to use all spill regs
6246 equally, so that inherited reloads have a chance
6247 of leapfrogging each other. */
6249 i = last_spill_reg;
6251 for (count = 0; count < n_spills; count++)
6253 int rclass = (int) rld[r].rclass;
6254 int regnum;
6256 i++;
6257 if (i >= n_spills)
6258 i -= n_spills;
6259 regnum = spill_regs[i];
6261 if ((reload_reg_free_p (regnum, rld[r].opnum,
6262 rld[r].when_needed)
6263 || (rld[r].in
6264 /* We check reload_reg_used to make sure we
6265 don't clobber the return register. */
6266 && ! TEST_HARD_REG_BIT (reload_reg_used, regnum)
6267 && free_for_value_p (regnum, rld[r].mode, rld[r].opnum,
6268 rld[r].when_needed, rld[r].in,
6269 rld[r].out, r, 1)))
6270 && TEST_HARD_REG_BIT (reg_class_contents[rclass], regnum)
6271 && HARD_REGNO_MODE_OK (regnum, rld[r].mode)
6272 /* Look first for regs to share, then for unshared. But
6273 don't share regs used for inherited reloads; they are
6274 the ones we want to preserve. */
6275 && (pass
6276 || (TEST_HARD_REG_BIT (reload_reg_used_at_all,
6277 regnum)
6278 && ! TEST_HARD_REG_BIT (reload_reg_used_for_inherit,
6279 regnum))))
6281 int nr = hard_regno_nregs[regnum][rld[r].mode];
6283 /* During the second pass we want to avoid reload registers
6284 which are "bad" for this reload. */
6285 if (pass == 1
6286 && ira_bad_reload_regno (regnum, rld[r].in, rld[r].out))
6287 continue;
6289 /* Avoid the problem where spilling a GENERAL_OR_FP_REG
6290 (on 68000) got us two FP regs. If NR is 1,
6291 we would reject both of them. */
6292 if (force_group)
6293 nr = rld[r].nregs;
6294 /* If we need only one reg, we have already won. */
6295 if (nr == 1)
6297 /* But reject a single reg if we demand a group. */
6298 if (force_group)
6299 continue;
6300 break;
6302 /* Otherwise check that as many consecutive regs as we need
6303 are available here. */
6304 while (nr > 1)
6306 int regno = regnum + nr - 1;
6307 if (!(TEST_HARD_REG_BIT (reg_class_contents[rclass], regno)
6308 && spill_reg_order[regno] >= 0
6309 && reload_reg_free_p (regno, rld[r].opnum,
6310 rld[r].when_needed)))
6311 break;
6312 nr--;
6314 if (nr == 1)
6315 break;
6319 /* If we found something on the current pass, omit later passes. */
6320 if (count < n_spills)
6321 break;
6324 /* We should have found a spill register by now. */
6325 if (count >= n_spills)
6326 return 0;
6328 /* I is the index in SPILL_REG_RTX of the reload register we are to
6329 allocate. Get an rtx for it and find its register number. */
6331 return set_reload_reg (i, r);
6334 /* Initialize all the tables needed to allocate reload registers.
6335 CHAIN is the insn currently being processed; SAVE_RELOAD_REG_RTX
6336 is the array we use to restore the reg_rtx field for every reload. */
6338 static void
6339 choose_reload_regs_init (struct insn_chain *chain, rtx *save_reload_reg_rtx)
6341 int i;
6343 for (i = 0; i < n_reloads; i++)
6344 rld[i].reg_rtx = save_reload_reg_rtx[i];
6346 memset (reload_inherited, 0, MAX_RELOADS);
6347 memset (reload_inheritance_insn, 0, MAX_RELOADS * sizeof (rtx));
6348 memset (reload_override_in, 0, MAX_RELOADS * sizeof (rtx));
6350 CLEAR_HARD_REG_SET (reload_reg_used);
6351 CLEAR_HARD_REG_SET (reload_reg_used_at_all);
6352 CLEAR_HARD_REG_SET (reload_reg_used_in_op_addr);
6353 CLEAR_HARD_REG_SET (reload_reg_used_in_op_addr_reload);
6354 CLEAR_HARD_REG_SET (reload_reg_used_in_insn);
6355 CLEAR_HARD_REG_SET (reload_reg_used_in_other_addr);
6357 CLEAR_HARD_REG_SET (reg_used_in_insn);
6359 HARD_REG_SET tmp;
6360 REG_SET_TO_HARD_REG_SET (tmp, &chain->live_throughout);
6361 IOR_HARD_REG_SET (reg_used_in_insn, tmp);
6362 REG_SET_TO_HARD_REG_SET (tmp, &chain->dead_or_set);
6363 IOR_HARD_REG_SET (reg_used_in_insn, tmp);
6364 compute_use_by_pseudos (&reg_used_in_insn, &chain->live_throughout);
6365 compute_use_by_pseudos (&reg_used_in_insn, &chain->dead_or_set);
6368 for (i = 0; i < reload_n_operands; i++)
6370 CLEAR_HARD_REG_SET (reload_reg_used_in_output[i]);
6371 CLEAR_HARD_REG_SET (reload_reg_used_in_input[i]);
6372 CLEAR_HARD_REG_SET (reload_reg_used_in_input_addr[i]);
6373 CLEAR_HARD_REG_SET (reload_reg_used_in_inpaddr_addr[i]);
6374 CLEAR_HARD_REG_SET (reload_reg_used_in_output_addr[i]);
6375 CLEAR_HARD_REG_SET (reload_reg_used_in_outaddr_addr[i]);
6378 COMPL_HARD_REG_SET (reload_reg_unavailable, chain->used_spill_regs);
6380 CLEAR_HARD_REG_SET (reload_reg_used_for_inherit);
6382 for (i = 0; i < n_reloads; i++)
6383 /* If we have already decided to use a certain register,
6384 don't use it in another way. */
6385 if (rld[i].reg_rtx)
6386 mark_reload_reg_in_use (REGNO (rld[i].reg_rtx), rld[i].opnum,
6387 rld[i].when_needed, rld[i].mode);
6390 #ifdef SECONDARY_MEMORY_NEEDED
6391 /* If X is not a subreg, return it unmodified. If it is a subreg,
6392 look up whether we made a replacement for the SUBREG_REG. Return
6393 either the replacement or the SUBREG_REG. */
6395 static rtx
6396 replaced_subreg (rtx x)
6398 if (GET_CODE (x) == SUBREG)
6399 return find_replacement (&SUBREG_REG (x));
6400 return x;
6402 #endif
6404 /* Compute the offset to pass to subreg_regno_offset, for a pseudo of
6405 mode OUTERMODE that is available in a hard reg of mode INNERMODE.
6406 SUBREG is non-NULL if the pseudo is a subreg whose reg is a pseudo,
6407 otherwise it is NULL. */
6409 static int
6410 compute_reload_subreg_offset (enum machine_mode outermode,
6411 rtx subreg,
6412 enum machine_mode innermode)
6414 int outer_offset;
6415 enum machine_mode middlemode;
6417 if (!subreg)
6418 return subreg_lowpart_offset (outermode, innermode);
6420 outer_offset = SUBREG_BYTE (subreg);
6421 middlemode = GET_MODE (SUBREG_REG (subreg));
6423 /* If SUBREG is paradoxical then return the normal lowpart offset
6424 for OUTERMODE and INNERMODE. Our caller has already checked
6425 that OUTERMODE fits in INNERMODE. */
6426 if (outer_offset == 0
6427 && GET_MODE_SIZE (outermode) > GET_MODE_SIZE (middlemode))
6428 return subreg_lowpart_offset (outermode, innermode);
6430 /* SUBREG is normal, but may not be lowpart; return OUTER_OFFSET
6431 plus the normal lowpart offset for MIDDLEMODE and INNERMODE. */
6432 return outer_offset + subreg_lowpart_offset (middlemode, innermode);
6435 /* Assign hard reg targets for the pseudo-registers we must reload
6436 into hard regs for this insn.
6437 Also output the instructions to copy them in and out of the hard regs.
6439 For machines with register classes, we are responsible for
6440 finding a reload reg in the proper class. */
6442 static void
6443 choose_reload_regs (struct insn_chain *chain)
6445 rtx insn = chain->insn;
6446 int i, j;
6447 unsigned int max_group_size = 1;
6448 enum reg_class group_class = NO_REGS;
6449 int pass, win, inheritance;
6451 rtx save_reload_reg_rtx[MAX_RELOADS];
6453 /* In order to be certain of getting the registers we need,
6454 we must sort the reloads into order of increasing register class.
6455 Then our grabbing of reload registers will parallel the process
6456 that provided the reload registers.
6458 Also note whether any of the reloads wants a consecutive group of regs.
6459 If so, record the maximum size of the group desired and what
6460 register class contains all the groups needed by this insn. */
6462 for (j = 0; j < n_reloads; j++)
6464 reload_order[j] = j;
6465 if (rld[j].reg_rtx != NULL_RTX)
6467 gcc_assert (REG_P (rld[j].reg_rtx)
6468 && HARD_REGISTER_P (rld[j].reg_rtx));
6469 reload_spill_index[j] = REGNO (rld[j].reg_rtx);
6471 else
6472 reload_spill_index[j] = -1;
6474 if (rld[j].nregs > 1)
6476 max_group_size = MAX (rld[j].nregs, max_group_size);
6477 group_class
6478 = reg_class_superunion[(int) rld[j].rclass][(int) group_class];
6481 save_reload_reg_rtx[j] = rld[j].reg_rtx;
6484 if (n_reloads > 1)
6485 qsort (reload_order, n_reloads, sizeof (short), reload_reg_class_lower);
6487 /* If -O, try first with inheritance, then turning it off.
6488 If not -O, don't do inheritance.
6489 Using inheritance when not optimizing leads to paradoxes
6490 with fp on the 68k: fp numbers (not NaNs) fail to be equal to themselves
6491 because one side of the comparison might be inherited. */
6492 win = 0;
6493 for (inheritance = optimize > 0; inheritance >= 0; inheritance--)
6495 choose_reload_regs_init (chain, save_reload_reg_rtx);
6497 /* Process the reloads in order of preference just found.
6498 Beyond this point, subregs can be found in reload_reg_rtx.
6500 This used to look for an existing reloaded home for all of the
6501 reloads, and only then perform any new reloads. But that could lose
6502 if the reloads were done out of reg-class order because a later
6503 reload with a looser constraint might have an old home in a register
6504 needed by an earlier reload with a tighter constraint.
6506 To solve this, we make two passes over the reloads, in the order
6507 described above. In the first pass we try to inherit a reload
6508 from a previous insn. If there is a later reload that needs a
6509 class that is a proper subset of the class being processed, we must
6510 also allocate a spill register during the first pass.
6512 Then make a second pass over the reloads to allocate any reloads
6513 that haven't been given registers yet. */
6515 for (j = 0; j < n_reloads; j++)
6517 int r = reload_order[j];
6518 rtx search_equiv = NULL_RTX;
6520 /* Ignore reloads that got marked inoperative. */
6521 if (rld[r].out == 0 && rld[r].in == 0
6522 && ! rld[r].secondary_p)
6523 continue;
6525 /* If find_reloads chose to use reload_in or reload_out as a reload
6526 register, we don't need to chose one. Otherwise, try even if it
6527 found one since we might save an insn if we find the value lying
6528 around.
6529 Try also when reload_in is a pseudo without a hard reg. */
6530 if (rld[r].in != 0 && rld[r].reg_rtx != 0
6531 && (rtx_equal_p (rld[r].in, rld[r].reg_rtx)
6532 || (rtx_equal_p (rld[r].out, rld[r].reg_rtx)
6533 && !MEM_P (rld[r].in)
6534 && true_regnum (rld[r].in) < FIRST_PSEUDO_REGISTER)))
6535 continue;
6537 #if 0 /* No longer needed for correct operation.
6538 It might give better code, or might not; worth an experiment? */
6539 /* If this is an optional reload, we can't inherit from earlier insns
6540 until we are sure that any non-optional reloads have been allocated.
6541 The following code takes advantage of the fact that optional reloads
6542 are at the end of reload_order. */
6543 if (rld[r].optional != 0)
6544 for (i = 0; i < j; i++)
6545 if ((rld[reload_order[i]].out != 0
6546 || rld[reload_order[i]].in != 0
6547 || rld[reload_order[i]].secondary_p)
6548 && ! rld[reload_order[i]].optional
6549 && rld[reload_order[i]].reg_rtx == 0)
6550 allocate_reload_reg (chain, reload_order[i], 0);
6551 #endif
6553 /* First see if this pseudo is already available as reloaded
6554 for a previous insn. We cannot try to inherit for reloads
6555 that are smaller than the maximum number of registers needed
6556 for groups unless the register we would allocate cannot be used
6557 for the groups.
6559 We could check here to see if this is a secondary reload for
6560 an object that is already in a register of the desired class.
6561 This would avoid the need for the secondary reload register.
6562 But this is complex because we can't easily determine what
6563 objects might want to be loaded via this reload. So let a
6564 register be allocated here. In `emit_reload_insns' we suppress
6565 one of the loads in the case described above. */
6567 if (inheritance)
6569 int byte = 0;
6570 int regno = -1;
6571 enum machine_mode mode = VOIDmode;
6572 rtx subreg = NULL_RTX;
6574 if (rld[r].in == 0)
6576 else if (REG_P (rld[r].in))
6578 regno = REGNO (rld[r].in);
6579 mode = GET_MODE (rld[r].in);
6581 else if (REG_P (rld[r].in_reg))
6583 regno = REGNO (rld[r].in_reg);
6584 mode = GET_MODE (rld[r].in_reg);
6586 else if (GET_CODE (rld[r].in_reg) == SUBREG
6587 && REG_P (SUBREG_REG (rld[r].in_reg)))
6589 regno = REGNO (SUBREG_REG (rld[r].in_reg));
6590 if (regno < FIRST_PSEUDO_REGISTER)
6591 regno = subreg_regno (rld[r].in_reg);
6592 else
6594 subreg = rld[r].in_reg;
6595 byte = SUBREG_BYTE (subreg);
6597 mode = GET_MODE (rld[r].in_reg);
6599 #ifdef AUTO_INC_DEC
6600 else if (GET_RTX_CLASS (GET_CODE (rld[r].in_reg)) == RTX_AUTOINC
6601 && REG_P (XEXP (rld[r].in_reg, 0)))
6603 regno = REGNO (XEXP (rld[r].in_reg, 0));
6604 mode = GET_MODE (XEXP (rld[r].in_reg, 0));
6605 rld[r].out = rld[r].in;
6607 #endif
6608 #if 0
6609 /* This won't work, since REGNO can be a pseudo reg number.
6610 Also, it takes much more hair to keep track of all the things
6611 that can invalidate an inherited reload of part of a pseudoreg. */
6612 else if (GET_CODE (rld[r].in) == SUBREG
6613 && REG_P (SUBREG_REG (rld[r].in)))
6614 regno = subreg_regno (rld[r].in);
6615 #endif
6617 if (regno >= 0
6618 && reg_last_reload_reg[regno] != 0
6619 && (GET_MODE_SIZE (GET_MODE (reg_last_reload_reg[regno]))
6620 >= GET_MODE_SIZE (mode) + byte)
6621 #ifdef CANNOT_CHANGE_MODE_CLASS
6622 /* Verify that the register it's in can be used in
6623 mode MODE. */
6624 && !REG_CANNOT_CHANGE_MODE_P (REGNO (reg_last_reload_reg[regno]),
6625 GET_MODE (reg_last_reload_reg[regno]),
6626 mode)
6627 #endif
6630 enum reg_class rclass = rld[r].rclass, last_class;
6631 rtx last_reg = reg_last_reload_reg[regno];
6633 i = REGNO (last_reg);
6634 byte = compute_reload_subreg_offset (mode,
6635 subreg,
6636 GET_MODE (last_reg));
6637 i += subreg_regno_offset (i, GET_MODE (last_reg), byte, mode);
6638 last_class = REGNO_REG_CLASS (i);
6640 if (reg_reloaded_contents[i] == regno
6641 && TEST_HARD_REG_BIT (reg_reloaded_valid, i)
6642 && HARD_REGNO_MODE_OK (i, rld[r].mode)
6643 && (TEST_HARD_REG_BIT (reg_class_contents[(int) rclass], i)
6644 /* Even if we can't use this register as a reload
6645 register, we might use it for reload_override_in,
6646 if copying it to the desired class is cheap
6647 enough. */
6648 || ((register_move_cost (mode, last_class, rclass)
6649 < memory_move_cost (mode, rclass, true))
6650 && (secondary_reload_class (1, rclass, mode,
6651 last_reg)
6652 == NO_REGS)
6653 #ifdef SECONDARY_MEMORY_NEEDED
6654 && ! SECONDARY_MEMORY_NEEDED (last_class, rclass,
6655 mode)
6656 #endif
6659 && (rld[r].nregs == max_group_size
6660 || ! TEST_HARD_REG_BIT (reg_class_contents[(int) group_class],
6662 && free_for_value_p (i, rld[r].mode, rld[r].opnum,
6663 rld[r].when_needed, rld[r].in,
6664 const0_rtx, r, 1))
6666 /* If a group is needed, verify that all the subsequent
6667 registers still have their values intact. */
6668 int nr = hard_regno_nregs[i][rld[r].mode];
6669 int k;
6671 for (k = 1; k < nr; k++)
6672 if (reg_reloaded_contents[i + k] != regno
6673 || ! TEST_HARD_REG_BIT (reg_reloaded_valid, i + k))
6674 break;
6676 if (k == nr)
6678 int i1;
6679 int bad_for_class;
6681 last_reg = (GET_MODE (last_reg) == mode
6682 ? last_reg : gen_rtx_REG (mode, i));
6684 bad_for_class = 0;
6685 for (k = 0; k < nr; k++)
6686 bad_for_class |= ! TEST_HARD_REG_BIT (reg_class_contents[(int) rld[r].rclass],
6687 i+k);
6689 /* We found a register that contains the
6690 value we need. If this register is the
6691 same as an `earlyclobber' operand of the
6692 current insn, just mark it as a place to
6693 reload from since we can't use it as the
6694 reload register itself. */
6696 for (i1 = 0; i1 < n_earlyclobbers; i1++)
6697 if (reg_overlap_mentioned_for_reload_p
6698 (reg_last_reload_reg[regno],
6699 reload_earlyclobbers[i1]))
6700 break;
6702 if (i1 != n_earlyclobbers
6703 || ! (free_for_value_p (i, rld[r].mode,
6704 rld[r].opnum,
6705 rld[r].when_needed, rld[r].in,
6706 rld[r].out, r, 1))
6707 /* Don't use it if we'd clobber a pseudo reg. */
6708 || (TEST_HARD_REG_BIT (reg_used_in_insn, i)
6709 && rld[r].out
6710 && ! TEST_HARD_REG_BIT (reg_reloaded_dead, i))
6711 /* Don't clobber the frame pointer. */
6712 || (i == HARD_FRAME_POINTER_REGNUM
6713 && frame_pointer_needed
6714 && rld[r].out)
6715 /* Don't really use the inherited spill reg
6716 if we need it wider than we've got it. */
6717 || (GET_MODE_SIZE (rld[r].mode)
6718 > GET_MODE_SIZE (mode))
6719 || bad_for_class
6721 /* If find_reloads chose reload_out as reload
6722 register, stay with it - that leaves the
6723 inherited register for subsequent reloads. */
6724 || (rld[r].out && rld[r].reg_rtx
6725 && rtx_equal_p (rld[r].out, rld[r].reg_rtx)))
6727 if (! rld[r].optional)
6729 reload_override_in[r] = last_reg;
6730 reload_inheritance_insn[r]
6731 = reg_reloaded_insn[i];
6734 else
6736 int k;
6737 /* We can use this as a reload reg. */
6738 /* Mark the register as in use for this part of
6739 the insn. */
6740 mark_reload_reg_in_use (i,
6741 rld[r].opnum,
6742 rld[r].when_needed,
6743 rld[r].mode);
6744 rld[r].reg_rtx = last_reg;
6745 reload_inherited[r] = 1;
6746 reload_inheritance_insn[r]
6747 = reg_reloaded_insn[i];
6748 reload_spill_index[r] = i;
6749 for (k = 0; k < nr; k++)
6750 SET_HARD_REG_BIT (reload_reg_used_for_inherit,
6751 i + k);
6758 /* Here's another way to see if the value is already lying around. */
6759 if (inheritance
6760 && rld[r].in != 0
6761 && ! reload_inherited[r]
6762 && rld[r].out == 0
6763 && (CONSTANT_P (rld[r].in)
6764 || GET_CODE (rld[r].in) == PLUS
6765 || REG_P (rld[r].in)
6766 || MEM_P (rld[r].in))
6767 && (rld[r].nregs == max_group_size
6768 || ! reg_classes_intersect_p (rld[r].rclass, group_class)))
6769 search_equiv = rld[r].in;
6771 if (search_equiv)
6773 rtx equiv
6774 = find_equiv_reg (search_equiv, insn, rld[r].rclass,
6775 -1, NULL, 0, rld[r].mode);
6776 int regno = 0;
6778 if (equiv != 0)
6780 if (REG_P (equiv))
6781 regno = REGNO (equiv);
6782 else
6784 /* This must be a SUBREG of a hard register.
6785 Make a new REG since this might be used in an
6786 address and not all machines support SUBREGs
6787 there. */
6788 gcc_assert (GET_CODE (equiv) == SUBREG);
6789 regno = subreg_regno (equiv);
6790 equiv = gen_rtx_REG (rld[r].mode, regno);
6791 /* If we choose EQUIV as the reload register, but the
6792 loop below decides to cancel the inheritance, we'll
6793 end up reloading EQUIV in rld[r].mode, not the mode
6794 it had originally. That isn't safe when EQUIV isn't
6795 available as a spill register since its value might
6796 still be live at this point. */
6797 for (i = regno; i < regno + (int) rld[r].nregs; i++)
6798 if (TEST_HARD_REG_BIT (reload_reg_unavailable, i))
6799 equiv = 0;
6803 /* If we found a spill reg, reject it unless it is free
6804 and of the desired class. */
6805 if (equiv != 0)
6807 int regs_used = 0;
6808 int bad_for_class = 0;
6809 int max_regno = regno + rld[r].nregs;
6811 for (i = regno; i < max_regno; i++)
6813 regs_used |= TEST_HARD_REG_BIT (reload_reg_used_at_all,
6815 bad_for_class |= ! TEST_HARD_REG_BIT (reg_class_contents[(int) rld[r].rclass],
6819 if ((regs_used
6820 && ! free_for_value_p (regno, rld[r].mode,
6821 rld[r].opnum, rld[r].when_needed,
6822 rld[r].in, rld[r].out, r, 1))
6823 || bad_for_class)
6824 equiv = 0;
6827 if (equiv != 0 && ! HARD_REGNO_MODE_OK (regno, rld[r].mode))
6828 equiv = 0;
6830 /* We found a register that contains the value we need.
6831 If this register is the same as an `earlyclobber' operand
6832 of the current insn, just mark it as a place to reload from
6833 since we can't use it as the reload register itself. */
6835 if (equiv != 0)
6836 for (i = 0; i < n_earlyclobbers; i++)
6837 if (reg_overlap_mentioned_for_reload_p (equiv,
6838 reload_earlyclobbers[i]))
6840 if (! rld[r].optional)
6841 reload_override_in[r] = equiv;
6842 equiv = 0;
6843 break;
6846 /* If the equiv register we have found is explicitly clobbered
6847 in the current insn, it depends on the reload type if we
6848 can use it, use it for reload_override_in, or not at all.
6849 In particular, we then can't use EQUIV for a
6850 RELOAD_FOR_OUTPUT_ADDRESS reload. */
6852 if (equiv != 0)
6854 if (regno_clobbered_p (regno, insn, rld[r].mode, 2))
6855 switch (rld[r].when_needed)
6857 case RELOAD_FOR_OTHER_ADDRESS:
6858 case RELOAD_FOR_INPADDR_ADDRESS:
6859 case RELOAD_FOR_INPUT_ADDRESS:
6860 case RELOAD_FOR_OPADDR_ADDR:
6861 break;
6862 case RELOAD_OTHER:
6863 case RELOAD_FOR_INPUT:
6864 case RELOAD_FOR_OPERAND_ADDRESS:
6865 if (! rld[r].optional)
6866 reload_override_in[r] = equiv;
6867 /* Fall through. */
6868 default:
6869 equiv = 0;
6870 break;
6872 else if (regno_clobbered_p (regno, insn, rld[r].mode, 1))
6873 switch (rld[r].when_needed)
6875 case RELOAD_FOR_OTHER_ADDRESS:
6876 case RELOAD_FOR_INPADDR_ADDRESS:
6877 case RELOAD_FOR_INPUT_ADDRESS:
6878 case RELOAD_FOR_OPADDR_ADDR:
6879 case RELOAD_FOR_OPERAND_ADDRESS:
6880 case RELOAD_FOR_INPUT:
6881 break;
6882 case RELOAD_OTHER:
6883 if (! rld[r].optional)
6884 reload_override_in[r] = equiv;
6885 /* Fall through. */
6886 default:
6887 equiv = 0;
6888 break;
6892 /* If we found an equivalent reg, say no code need be generated
6893 to load it, and use it as our reload reg. */
6894 if (equiv != 0
6895 && (regno != HARD_FRAME_POINTER_REGNUM
6896 || !frame_pointer_needed))
6898 int nr = hard_regno_nregs[regno][rld[r].mode];
6899 int k;
6900 rld[r].reg_rtx = equiv;
6901 reload_spill_index[r] = regno;
6902 reload_inherited[r] = 1;
6904 /* If reg_reloaded_valid is not set for this register,
6905 there might be a stale spill_reg_store lying around.
6906 We must clear it, since otherwise emit_reload_insns
6907 might delete the store. */
6908 if (! TEST_HARD_REG_BIT (reg_reloaded_valid, regno))
6909 spill_reg_store[regno] = NULL_RTX;
6910 /* If any of the hard registers in EQUIV are spill
6911 registers, mark them as in use for this insn. */
6912 for (k = 0; k < nr; k++)
6914 i = spill_reg_order[regno + k];
6915 if (i >= 0)
6917 mark_reload_reg_in_use (regno, rld[r].opnum,
6918 rld[r].when_needed,
6919 rld[r].mode);
6920 SET_HARD_REG_BIT (reload_reg_used_for_inherit,
6921 regno + k);
6927 /* If we found a register to use already, or if this is an optional
6928 reload, we are done. */
6929 if (rld[r].reg_rtx != 0 || rld[r].optional != 0)
6930 continue;
6932 #if 0
6933 /* No longer needed for correct operation. Might or might
6934 not give better code on the average. Want to experiment? */
6936 /* See if there is a later reload that has a class different from our
6937 class that intersects our class or that requires less register
6938 than our reload. If so, we must allocate a register to this
6939 reload now, since that reload might inherit a previous reload
6940 and take the only available register in our class. Don't do this
6941 for optional reloads since they will force all previous reloads
6942 to be allocated. Also don't do this for reloads that have been
6943 turned off. */
6945 for (i = j + 1; i < n_reloads; i++)
6947 int s = reload_order[i];
6949 if ((rld[s].in == 0 && rld[s].out == 0
6950 && ! rld[s].secondary_p)
6951 || rld[s].optional)
6952 continue;
6954 if ((rld[s].rclass != rld[r].rclass
6955 && reg_classes_intersect_p (rld[r].rclass,
6956 rld[s].rclass))
6957 || rld[s].nregs < rld[r].nregs)
6958 break;
6961 if (i == n_reloads)
6962 continue;
6964 allocate_reload_reg (chain, r, j == n_reloads - 1);
6965 #endif
6968 /* Now allocate reload registers for anything non-optional that
6969 didn't get one yet. */
6970 for (j = 0; j < n_reloads; j++)
6972 int r = reload_order[j];
6974 /* Ignore reloads that got marked inoperative. */
6975 if (rld[r].out == 0 && rld[r].in == 0 && ! rld[r].secondary_p)
6976 continue;
6978 /* Skip reloads that already have a register allocated or are
6979 optional. */
6980 if (rld[r].reg_rtx != 0 || rld[r].optional)
6981 continue;
6983 if (! allocate_reload_reg (chain, r, j == n_reloads - 1))
6984 break;
6987 /* If that loop got all the way, we have won. */
6988 if (j == n_reloads)
6990 win = 1;
6991 break;
6994 /* Loop around and try without any inheritance. */
6997 if (! win)
6999 /* First undo everything done by the failed attempt
7000 to allocate with inheritance. */
7001 choose_reload_regs_init (chain, save_reload_reg_rtx);
7003 /* Some sanity tests to verify that the reloads found in the first
7004 pass are identical to the ones we have now. */
7005 gcc_assert (chain->n_reloads == n_reloads);
7007 for (i = 0; i < n_reloads; i++)
7009 if (chain->rld[i].regno < 0 || chain->rld[i].reg_rtx != 0)
7010 continue;
7011 gcc_assert (chain->rld[i].when_needed == rld[i].when_needed);
7012 for (j = 0; j < n_spills; j++)
7013 if (spill_regs[j] == chain->rld[i].regno)
7014 if (! set_reload_reg (j, i))
7015 failed_reload (chain->insn, i);
7019 /* If we thought we could inherit a reload, because it seemed that
7020 nothing else wanted the same reload register earlier in the insn,
7021 verify that assumption, now that all reloads have been assigned.
7022 Likewise for reloads where reload_override_in has been set. */
7024 /* If doing expensive optimizations, do one preliminary pass that doesn't
7025 cancel any inheritance, but removes reloads that have been needed only
7026 for reloads that we know can be inherited. */
7027 for (pass = flag_expensive_optimizations; pass >= 0; pass--)
7029 for (j = 0; j < n_reloads; j++)
7031 int r = reload_order[j];
7032 rtx check_reg;
7033 #ifdef SECONDARY_MEMORY_NEEDED
7034 rtx tem;
7035 #endif
7036 if (reload_inherited[r] && rld[r].reg_rtx)
7037 check_reg = rld[r].reg_rtx;
7038 else if (reload_override_in[r]
7039 && (REG_P (reload_override_in[r])
7040 || GET_CODE (reload_override_in[r]) == SUBREG))
7041 check_reg = reload_override_in[r];
7042 else
7043 continue;
7044 if (! free_for_value_p (true_regnum (check_reg), rld[r].mode,
7045 rld[r].opnum, rld[r].when_needed, rld[r].in,
7046 (reload_inherited[r]
7047 ? rld[r].out : const0_rtx),
7048 r, 1))
7050 if (pass)
7051 continue;
7052 reload_inherited[r] = 0;
7053 reload_override_in[r] = 0;
7055 /* If we can inherit a RELOAD_FOR_INPUT, or can use a
7056 reload_override_in, then we do not need its related
7057 RELOAD_FOR_INPUT_ADDRESS / RELOAD_FOR_INPADDR_ADDRESS reloads;
7058 likewise for other reload types.
7059 We handle this by removing a reload when its only replacement
7060 is mentioned in reload_in of the reload we are going to inherit.
7061 A special case are auto_inc expressions; even if the input is
7062 inherited, we still need the address for the output. We can
7063 recognize them because they have RELOAD_OUT set to RELOAD_IN.
7064 If we succeeded removing some reload and we are doing a preliminary
7065 pass just to remove such reloads, make another pass, since the
7066 removal of one reload might allow us to inherit another one. */
7067 else if (rld[r].in
7068 && rld[r].out != rld[r].in
7069 && remove_address_replacements (rld[r].in))
7071 if (pass)
7072 pass = 2;
7074 #ifdef SECONDARY_MEMORY_NEEDED
7075 /* If we needed a memory location for the reload, we also have to
7076 remove its related reloads. */
7077 else if (rld[r].in
7078 && rld[r].out != rld[r].in
7079 && (tem = replaced_subreg (rld[r].in), REG_P (tem))
7080 && REGNO (tem) < FIRST_PSEUDO_REGISTER
7081 && SECONDARY_MEMORY_NEEDED (REGNO_REG_CLASS (REGNO (tem)),
7082 rld[r].rclass, rld[r].inmode)
7083 && remove_address_replacements
7084 (get_secondary_mem (tem, rld[r].inmode, rld[r].opnum,
7085 rld[r].when_needed)))
7087 if (pass)
7088 pass = 2;
7090 #endif
7094 /* Now that reload_override_in is known valid,
7095 actually override reload_in. */
7096 for (j = 0; j < n_reloads; j++)
7097 if (reload_override_in[j])
7098 rld[j].in = reload_override_in[j];
7100 /* If this reload won't be done because it has been canceled or is
7101 optional and not inherited, clear reload_reg_rtx so other
7102 routines (such as subst_reloads) don't get confused. */
7103 for (j = 0; j < n_reloads; j++)
7104 if (rld[j].reg_rtx != 0
7105 && ((rld[j].optional && ! reload_inherited[j])
7106 || (rld[j].in == 0 && rld[j].out == 0
7107 && ! rld[j].secondary_p)))
7109 int regno = true_regnum (rld[j].reg_rtx);
7111 if (spill_reg_order[regno] >= 0)
7112 clear_reload_reg_in_use (regno, rld[j].opnum,
7113 rld[j].when_needed, rld[j].mode);
7114 rld[j].reg_rtx = 0;
7115 reload_spill_index[j] = -1;
7118 /* Record which pseudos and which spill regs have output reloads. */
7119 for (j = 0; j < n_reloads; j++)
7121 int r = reload_order[j];
7123 i = reload_spill_index[r];
7125 /* I is nonneg if this reload uses a register.
7126 If rld[r].reg_rtx is 0, this is an optional reload
7127 that we opted to ignore. */
7128 if (rld[r].out_reg != 0 && REG_P (rld[r].out_reg)
7129 && rld[r].reg_rtx != 0)
7131 int nregno = REGNO (rld[r].out_reg);
7132 int nr = 1;
7134 if (nregno < FIRST_PSEUDO_REGISTER)
7135 nr = hard_regno_nregs[nregno][rld[r].mode];
7137 while (--nr >= 0)
7138 SET_REGNO_REG_SET (&reg_has_output_reload,
7139 nregno + nr);
7141 if (i >= 0)
7142 add_to_hard_reg_set (&reg_is_output_reload, rld[r].mode, i);
7144 gcc_assert (rld[r].when_needed == RELOAD_OTHER
7145 || rld[r].when_needed == RELOAD_FOR_OUTPUT
7146 || rld[r].when_needed == RELOAD_FOR_INSN);
7151 /* Deallocate the reload register for reload R. This is called from
7152 remove_address_replacements. */
7154 void
7155 deallocate_reload_reg (int r)
7157 int regno;
7159 if (! rld[r].reg_rtx)
7160 return;
7161 regno = true_regnum (rld[r].reg_rtx);
7162 rld[r].reg_rtx = 0;
7163 if (spill_reg_order[regno] >= 0)
7164 clear_reload_reg_in_use (regno, rld[r].opnum, rld[r].when_needed,
7165 rld[r].mode);
7166 reload_spill_index[r] = -1;
7169 /* These arrays are filled by emit_reload_insns and its subroutines. */
7170 static rtx input_reload_insns[MAX_RECOG_OPERANDS];
7171 static rtx other_input_address_reload_insns = 0;
7172 static rtx other_input_reload_insns = 0;
7173 static rtx input_address_reload_insns[MAX_RECOG_OPERANDS];
7174 static rtx inpaddr_address_reload_insns[MAX_RECOG_OPERANDS];
7175 static rtx output_reload_insns[MAX_RECOG_OPERANDS];
7176 static rtx output_address_reload_insns[MAX_RECOG_OPERANDS];
7177 static rtx outaddr_address_reload_insns[MAX_RECOG_OPERANDS];
7178 static rtx operand_reload_insns = 0;
7179 static rtx other_operand_reload_insns = 0;
7180 static rtx other_output_reload_insns[MAX_RECOG_OPERANDS];
7182 /* Values to be put in spill_reg_store are put here first. Instructions
7183 must only be placed here if the associated reload register reaches
7184 the end of the instruction's reload sequence. */
7185 static rtx new_spill_reg_store[FIRST_PSEUDO_REGISTER];
7186 static HARD_REG_SET reg_reloaded_died;
7188 /* Check if *RELOAD_REG is suitable as an intermediate or scratch register
7189 of class NEW_CLASS with mode NEW_MODE. Or alternatively, if alt_reload_reg
7190 is nonzero, if that is suitable. On success, change *RELOAD_REG to the
7191 adjusted register, and return true. Otherwise, return false. */
7192 static bool
7193 reload_adjust_reg_for_temp (rtx *reload_reg, rtx alt_reload_reg,
7194 enum reg_class new_class,
7195 enum machine_mode new_mode)
7198 rtx reg;
7200 for (reg = *reload_reg; reg; reg = alt_reload_reg, alt_reload_reg = 0)
7202 unsigned regno = REGNO (reg);
7204 if (!TEST_HARD_REG_BIT (reg_class_contents[(int) new_class], regno))
7205 continue;
7206 if (GET_MODE (reg) != new_mode)
7208 if (!HARD_REGNO_MODE_OK (regno, new_mode))
7209 continue;
7210 if (hard_regno_nregs[regno][new_mode]
7211 > hard_regno_nregs[regno][GET_MODE (reg)])
7212 continue;
7213 reg = reload_adjust_reg_for_mode (reg, new_mode);
7215 *reload_reg = reg;
7216 return true;
7218 return false;
7221 /* Check if *RELOAD_REG is suitable as a scratch register for the reload
7222 pattern with insn_code ICODE, or alternatively, if alt_reload_reg is
7223 nonzero, if that is suitable. On success, change *RELOAD_REG to the
7224 adjusted register, and return true. Otherwise, return false. */
7225 static bool
7226 reload_adjust_reg_for_icode (rtx *reload_reg, rtx alt_reload_reg,
7227 enum insn_code icode)
7230 enum reg_class new_class = scratch_reload_class (icode);
7231 enum machine_mode new_mode = insn_data[(int) icode].operand[2].mode;
7233 return reload_adjust_reg_for_temp (reload_reg, alt_reload_reg,
7234 new_class, new_mode);
7237 /* Generate insns to perform reload RL, which is for the insn in CHAIN and
7238 has the number J. OLD contains the value to be used as input. */
7240 static void
7241 emit_input_reload_insns (struct insn_chain *chain, struct reload *rl,
7242 rtx old, int j)
7244 rtx insn = chain->insn;
7245 rtx reloadreg;
7246 rtx oldequiv_reg = 0;
7247 rtx oldequiv = 0;
7248 int special = 0;
7249 enum machine_mode mode;
7250 rtx *where;
7252 /* delete_output_reload is only invoked properly if old contains
7253 the original pseudo register. Since this is replaced with a
7254 hard reg when RELOAD_OVERRIDE_IN is set, see if we can
7255 find the pseudo in RELOAD_IN_REG. This is also used to
7256 determine whether a secondary reload is needed. */
7257 if (reload_override_in[j]
7258 && (REG_P (rl->in_reg)
7259 || (GET_CODE (rl->in_reg) == SUBREG
7260 && REG_P (SUBREG_REG (rl->in_reg)))))
7262 oldequiv = old;
7263 old = rl->in_reg;
7265 if (oldequiv == 0)
7266 oldequiv = old;
7267 else if (REG_P (oldequiv))
7268 oldequiv_reg = oldequiv;
7269 else if (GET_CODE (oldequiv) == SUBREG)
7270 oldequiv_reg = SUBREG_REG (oldequiv);
7272 reloadreg = reload_reg_rtx_for_input[j];
7273 mode = GET_MODE (reloadreg);
7275 /* If we are reloading from a register that was recently stored in
7276 with an output-reload, see if we can prove there was
7277 actually no need to store the old value in it. */
7279 if (optimize && REG_P (oldequiv)
7280 && REGNO (oldequiv) < FIRST_PSEUDO_REGISTER
7281 && spill_reg_store[REGNO (oldequiv)]
7282 && REG_P (old)
7283 && (dead_or_set_p (insn, spill_reg_stored_to[REGNO (oldequiv)])
7284 || rtx_equal_p (spill_reg_stored_to[REGNO (oldequiv)],
7285 rl->out_reg)))
7286 delete_output_reload (insn, j, REGNO (oldequiv), reloadreg);
7288 /* Encapsulate OLDEQUIV into the reload mode, then load RELOADREG from
7289 OLDEQUIV. */
7291 while (GET_CODE (oldequiv) == SUBREG && GET_MODE (oldequiv) != mode)
7292 oldequiv = SUBREG_REG (oldequiv);
7293 if (GET_MODE (oldequiv) != VOIDmode
7294 && mode != GET_MODE (oldequiv))
7295 oldequiv = gen_lowpart_SUBREG (mode, oldequiv);
7297 /* Switch to the right place to emit the reload insns. */
7298 switch (rl->when_needed)
7300 case RELOAD_OTHER:
7301 where = &other_input_reload_insns;
7302 break;
7303 case RELOAD_FOR_INPUT:
7304 where = &input_reload_insns[rl->opnum];
7305 break;
7306 case RELOAD_FOR_INPUT_ADDRESS:
7307 where = &input_address_reload_insns[rl->opnum];
7308 break;
7309 case RELOAD_FOR_INPADDR_ADDRESS:
7310 where = &inpaddr_address_reload_insns[rl->opnum];
7311 break;
7312 case RELOAD_FOR_OUTPUT_ADDRESS:
7313 where = &output_address_reload_insns[rl->opnum];
7314 break;
7315 case RELOAD_FOR_OUTADDR_ADDRESS:
7316 where = &outaddr_address_reload_insns[rl->opnum];
7317 break;
7318 case RELOAD_FOR_OPERAND_ADDRESS:
7319 where = &operand_reload_insns;
7320 break;
7321 case RELOAD_FOR_OPADDR_ADDR:
7322 where = &other_operand_reload_insns;
7323 break;
7324 case RELOAD_FOR_OTHER_ADDRESS:
7325 where = &other_input_address_reload_insns;
7326 break;
7327 default:
7328 gcc_unreachable ();
7331 push_to_sequence (*where);
7333 /* Auto-increment addresses must be reloaded in a special way. */
7334 if (rl->out && ! rl->out_reg)
7336 /* We are not going to bother supporting the case where a
7337 incremented register can't be copied directly from
7338 OLDEQUIV since this seems highly unlikely. */
7339 gcc_assert (rl->secondary_in_reload < 0);
7341 if (reload_inherited[j])
7342 oldequiv = reloadreg;
7344 old = XEXP (rl->in_reg, 0);
7346 /* Prevent normal processing of this reload. */
7347 special = 1;
7348 /* Output a special code sequence for this case. */
7349 inc_for_reload (reloadreg, oldequiv, rl->out, rl->inc);
7352 /* If we are reloading a pseudo-register that was set by the previous
7353 insn, see if we can get rid of that pseudo-register entirely
7354 by redirecting the previous insn into our reload register. */
7356 else if (optimize && REG_P (old)
7357 && REGNO (old) >= FIRST_PSEUDO_REGISTER
7358 && dead_or_set_p (insn, old)
7359 /* This is unsafe if some other reload
7360 uses the same reg first. */
7361 && ! conflicts_with_override (reloadreg)
7362 && free_for_value_p (REGNO (reloadreg), rl->mode, rl->opnum,
7363 rl->when_needed, old, rl->out, j, 0))
7365 rtx temp = PREV_INSN (insn);
7366 while (temp && (NOTE_P (temp) || DEBUG_INSN_P (temp)))
7367 temp = PREV_INSN (temp);
7368 if (temp
7369 && NONJUMP_INSN_P (temp)
7370 && GET_CODE (PATTERN (temp)) == SET
7371 && SET_DEST (PATTERN (temp)) == old
7372 /* Make sure we can access insn_operand_constraint. */
7373 && asm_noperands (PATTERN (temp)) < 0
7374 /* This is unsafe if operand occurs more than once in current
7375 insn. Perhaps some occurrences aren't reloaded. */
7376 && count_occurrences (PATTERN (insn), old, 0) == 1)
7378 rtx old = SET_DEST (PATTERN (temp));
7379 /* Store into the reload register instead of the pseudo. */
7380 SET_DEST (PATTERN (temp)) = reloadreg;
7382 /* Verify that resulting insn is valid.
7384 Note that we have replaced the destination of TEMP with
7385 RELOADREG. If TEMP references RELOADREG within an
7386 autoincrement addressing mode, then the resulting insn
7387 is ill-formed and we must reject this optimization. */
7388 extract_insn (temp);
7389 if (constrain_operands (1)
7390 #ifdef AUTO_INC_DEC
7391 && ! find_reg_note (temp, REG_INC, reloadreg)
7392 #endif
7395 /* If the previous insn is an output reload, the source is
7396 a reload register, and its spill_reg_store entry will
7397 contain the previous destination. This is now
7398 invalid. */
7399 if (REG_P (SET_SRC (PATTERN (temp)))
7400 && REGNO (SET_SRC (PATTERN (temp))) < FIRST_PSEUDO_REGISTER)
7402 spill_reg_store[REGNO (SET_SRC (PATTERN (temp)))] = 0;
7403 spill_reg_stored_to[REGNO (SET_SRC (PATTERN (temp)))] = 0;
7406 /* If these are the only uses of the pseudo reg,
7407 pretend for GDB it lives in the reload reg we used. */
7408 if (REG_N_DEATHS (REGNO (old)) == 1
7409 && REG_N_SETS (REGNO (old)) == 1)
7411 reg_renumber[REGNO (old)] = REGNO (reloadreg);
7412 if (ira_conflicts_p)
7413 /* Inform IRA about the change. */
7414 ira_mark_allocation_change (REGNO (old));
7415 alter_reg (REGNO (old), -1, false);
7417 special = 1;
7419 /* Adjust any debug insns between temp and insn. */
7420 while ((temp = NEXT_INSN (temp)) != insn)
7421 if (DEBUG_INSN_P (temp))
7422 replace_rtx (PATTERN (temp), old, reloadreg);
7423 else
7424 gcc_assert (NOTE_P (temp));
7426 else
7428 SET_DEST (PATTERN (temp)) = old;
7433 /* We can't do that, so output an insn to load RELOADREG. */
7435 /* If we have a secondary reload, pick up the secondary register
7436 and icode, if any. If OLDEQUIV and OLD are different or
7437 if this is an in-out reload, recompute whether or not we
7438 still need a secondary register and what the icode should
7439 be. If we still need a secondary register and the class or
7440 icode is different, go back to reloading from OLD if using
7441 OLDEQUIV means that we got the wrong type of register. We
7442 cannot have different class or icode due to an in-out reload
7443 because we don't make such reloads when both the input and
7444 output need secondary reload registers. */
7446 if (! special && rl->secondary_in_reload >= 0)
7448 rtx second_reload_reg = 0;
7449 rtx third_reload_reg = 0;
7450 int secondary_reload = rl->secondary_in_reload;
7451 rtx real_oldequiv = oldequiv;
7452 rtx real_old = old;
7453 rtx tmp;
7454 enum insn_code icode;
7455 enum insn_code tertiary_icode = CODE_FOR_nothing;
7457 /* If OLDEQUIV is a pseudo with a MEM, get the real MEM
7458 and similarly for OLD.
7459 See comments in get_secondary_reload in reload.c. */
7460 /* If it is a pseudo that cannot be replaced with its
7461 equivalent MEM, we must fall back to reload_in, which
7462 will have all the necessary substitutions registered.
7463 Likewise for a pseudo that can't be replaced with its
7464 equivalent constant.
7466 Take extra care for subregs of such pseudos. Note that
7467 we cannot use reg_equiv_mem in this case because it is
7468 not in the right mode. */
7470 tmp = oldequiv;
7471 if (GET_CODE (tmp) == SUBREG)
7472 tmp = SUBREG_REG (tmp);
7473 if (REG_P (tmp)
7474 && REGNO (tmp) >= FIRST_PSEUDO_REGISTER
7475 && (reg_equiv_memory_loc (REGNO (tmp)) != 0
7476 || reg_equiv_constant (REGNO (tmp)) != 0))
7478 if (! reg_equiv_mem (REGNO (tmp))
7479 || num_not_at_initial_offset
7480 || GET_CODE (oldequiv) == SUBREG)
7481 real_oldequiv = rl->in;
7482 else
7483 real_oldequiv = reg_equiv_mem (REGNO (tmp));
7486 tmp = old;
7487 if (GET_CODE (tmp) == SUBREG)
7488 tmp = SUBREG_REG (tmp);
7489 if (REG_P (tmp)
7490 && REGNO (tmp) >= FIRST_PSEUDO_REGISTER
7491 && (reg_equiv_memory_loc (REGNO (tmp)) != 0
7492 || reg_equiv_constant (REGNO (tmp)) != 0))
7494 if (! reg_equiv_mem (REGNO (tmp))
7495 || num_not_at_initial_offset
7496 || GET_CODE (old) == SUBREG)
7497 real_old = rl->in;
7498 else
7499 real_old = reg_equiv_mem (REGNO (tmp));
7502 second_reload_reg = rld[secondary_reload].reg_rtx;
7503 if (rld[secondary_reload].secondary_in_reload >= 0)
7505 int tertiary_reload = rld[secondary_reload].secondary_in_reload;
7507 third_reload_reg = rld[tertiary_reload].reg_rtx;
7508 tertiary_icode = rld[secondary_reload].secondary_in_icode;
7509 /* We'd have to add more code for quartary reloads. */
7510 gcc_assert (rld[tertiary_reload].secondary_in_reload < 0);
7512 icode = rl->secondary_in_icode;
7514 if ((old != oldequiv && ! rtx_equal_p (old, oldequiv))
7515 || (rl->in != 0 && rl->out != 0))
7517 secondary_reload_info sri, sri2;
7518 enum reg_class new_class, new_t_class;
7520 sri.icode = CODE_FOR_nothing;
7521 sri.prev_sri = NULL;
7522 new_class
7523 = (enum reg_class) targetm.secondary_reload (1, real_oldequiv,
7524 rl->rclass, mode,
7525 &sri);
7527 if (new_class == NO_REGS && sri.icode == CODE_FOR_nothing)
7528 second_reload_reg = 0;
7529 else if (new_class == NO_REGS)
7531 if (reload_adjust_reg_for_icode (&second_reload_reg,
7532 third_reload_reg,
7533 (enum insn_code) sri.icode))
7535 icode = (enum insn_code) sri.icode;
7536 third_reload_reg = 0;
7538 else
7540 oldequiv = old;
7541 real_oldequiv = real_old;
7544 else if (sri.icode != CODE_FOR_nothing)
7545 /* We currently lack a way to express this in reloads. */
7546 gcc_unreachable ();
7547 else
7549 sri2.icode = CODE_FOR_nothing;
7550 sri2.prev_sri = &sri;
7551 new_t_class
7552 = (enum reg_class) targetm.secondary_reload (1, real_oldequiv,
7553 new_class, mode,
7554 &sri);
7555 if (new_t_class == NO_REGS && sri2.icode == CODE_FOR_nothing)
7557 if (reload_adjust_reg_for_temp (&second_reload_reg,
7558 third_reload_reg,
7559 new_class, mode))
7561 third_reload_reg = 0;
7562 tertiary_icode = (enum insn_code) sri2.icode;
7564 else
7566 oldequiv = old;
7567 real_oldequiv = real_old;
7570 else if (new_t_class == NO_REGS && sri2.icode != CODE_FOR_nothing)
7572 rtx intermediate = second_reload_reg;
7574 if (reload_adjust_reg_for_temp (&intermediate, NULL,
7575 new_class, mode)
7576 && reload_adjust_reg_for_icode (&third_reload_reg, NULL,
7577 ((enum insn_code)
7578 sri2.icode)))
7580 second_reload_reg = intermediate;
7581 tertiary_icode = (enum insn_code) sri2.icode;
7583 else
7585 oldequiv = old;
7586 real_oldequiv = real_old;
7589 else if (new_t_class != NO_REGS && sri2.icode == CODE_FOR_nothing)
7591 rtx intermediate = second_reload_reg;
7593 if (reload_adjust_reg_for_temp (&intermediate, NULL,
7594 new_class, mode)
7595 && reload_adjust_reg_for_temp (&third_reload_reg, NULL,
7596 new_t_class, mode))
7598 second_reload_reg = intermediate;
7599 tertiary_icode = (enum insn_code) sri2.icode;
7601 else
7603 oldequiv = old;
7604 real_oldequiv = real_old;
7607 else
7609 /* This could be handled more intelligently too. */
7610 oldequiv = old;
7611 real_oldequiv = real_old;
7616 /* If we still need a secondary reload register, check
7617 to see if it is being used as a scratch or intermediate
7618 register and generate code appropriately. If we need
7619 a scratch register, use REAL_OLDEQUIV since the form of
7620 the insn may depend on the actual address if it is
7621 a MEM. */
7623 if (second_reload_reg)
7625 if (icode != CODE_FOR_nothing)
7627 /* We'd have to add extra code to handle this case. */
7628 gcc_assert (!third_reload_reg);
7630 emit_insn (GEN_FCN (icode) (reloadreg, real_oldequiv,
7631 second_reload_reg));
7632 special = 1;
7634 else
7636 /* See if we need a scratch register to load the
7637 intermediate register (a tertiary reload). */
7638 if (tertiary_icode != CODE_FOR_nothing)
7640 emit_insn ((GEN_FCN (tertiary_icode)
7641 (second_reload_reg, real_oldequiv,
7642 third_reload_reg)));
7644 else if (third_reload_reg)
7646 gen_reload (third_reload_reg, real_oldequiv,
7647 rl->opnum,
7648 rl->when_needed);
7649 gen_reload (second_reload_reg, third_reload_reg,
7650 rl->opnum,
7651 rl->when_needed);
7653 else
7654 gen_reload (second_reload_reg, real_oldequiv,
7655 rl->opnum,
7656 rl->when_needed);
7658 oldequiv = second_reload_reg;
7663 if (! special && ! rtx_equal_p (reloadreg, oldequiv))
7665 rtx real_oldequiv = oldequiv;
7667 if ((REG_P (oldequiv)
7668 && REGNO (oldequiv) >= FIRST_PSEUDO_REGISTER
7669 && (reg_equiv_memory_loc (REGNO (oldequiv)) != 0
7670 || reg_equiv_constant (REGNO (oldequiv)) != 0))
7671 || (GET_CODE (oldequiv) == SUBREG
7672 && REG_P (SUBREG_REG (oldequiv))
7673 && (REGNO (SUBREG_REG (oldequiv))
7674 >= FIRST_PSEUDO_REGISTER)
7675 && ((reg_equiv_memory_loc (REGNO (SUBREG_REG (oldequiv))) != 0)
7676 || (reg_equiv_constant (REGNO (SUBREG_REG (oldequiv))) != 0)))
7677 || (CONSTANT_P (oldequiv)
7678 && (targetm.preferred_reload_class (oldequiv,
7679 REGNO_REG_CLASS (REGNO (reloadreg)))
7680 == NO_REGS)))
7681 real_oldequiv = rl->in;
7682 gen_reload (reloadreg, real_oldequiv, rl->opnum,
7683 rl->when_needed);
7686 if (cfun->can_throw_non_call_exceptions)
7687 copy_reg_eh_region_note_forward (insn, get_insns (), NULL);
7689 /* End this sequence. */
7690 *where = get_insns ();
7691 end_sequence ();
7693 /* Update reload_override_in so that delete_address_reloads_1
7694 can see the actual register usage. */
7695 if (oldequiv_reg)
7696 reload_override_in[j] = oldequiv;
7699 /* Generate insns to for the output reload RL, which is for the insn described
7700 by CHAIN and has the number J. */
7701 static void
7702 emit_output_reload_insns (struct insn_chain *chain, struct reload *rl,
7703 int j)
7705 rtx reloadreg;
7706 rtx insn = chain->insn;
7707 int special = 0;
7708 rtx old = rl->out;
7709 enum machine_mode mode;
7710 rtx p;
7711 rtx rl_reg_rtx;
7713 if (rl->when_needed == RELOAD_OTHER)
7714 start_sequence ();
7715 else
7716 push_to_sequence (output_reload_insns[rl->opnum]);
7718 rl_reg_rtx = reload_reg_rtx_for_output[j];
7719 mode = GET_MODE (rl_reg_rtx);
7721 reloadreg = rl_reg_rtx;
7723 /* If we need two reload regs, set RELOADREG to the intermediate
7724 one, since it will be stored into OLD. We might need a secondary
7725 register only for an input reload, so check again here. */
7727 if (rl->secondary_out_reload >= 0)
7729 rtx real_old = old;
7730 int secondary_reload = rl->secondary_out_reload;
7731 int tertiary_reload = rld[secondary_reload].secondary_out_reload;
7733 if (REG_P (old) && REGNO (old) >= FIRST_PSEUDO_REGISTER
7734 && reg_equiv_mem (REGNO (old)) != 0)
7735 real_old = reg_equiv_mem (REGNO (old));
7737 if (secondary_reload_class (0, rl->rclass, mode, real_old) != NO_REGS)
7739 rtx second_reloadreg = reloadreg;
7740 reloadreg = rld[secondary_reload].reg_rtx;
7742 /* See if RELOADREG is to be used as a scratch register
7743 or as an intermediate register. */
7744 if (rl->secondary_out_icode != CODE_FOR_nothing)
7746 /* We'd have to add extra code to handle this case. */
7747 gcc_assert (tertiary_reload < 0);
7749 emit_insn ((GEN_FCN (rl->secondary_out_icode)
7750 (real_old, second_reloadreg, reloadreg)));
7751 special = 1;
7753 else
7755 /* See if we need both a scratch and intermediate reload
7756 register. */
7758 enum insn_code tertiary_icode
7759 = rld[secondary_reload].secondary_out_icode;
7761 /* We'd have to add more code for quartary reloads. */
7762 gcc_assert (tertiary_reload < 0
7763 || rld[tertiary_reload].secondary_out_reload < 0);
7765 if (GET_MODE (reloadreg) != mode)
7766 reloadreg = reload_adjust_reg_for_mode (reloadreg, mode);
7768 if (tertiary_icode != CODE_FOR_nothing)
7770 rtx third_reloadreg = rld[tertiary_reload].reg_rtx;
7772 /* Copy primary reload reg to secondary reload reg.
7773 (Note that these have been swapped above, then
7774 secondary reload reg to OLD using our insn.) */
7776 /* If REAL_OLD is a paradoxical SUBREG, remove it
7777 and try to put the opposite SUBREG on
7778 RELOADREG. */
7779 strip_paradoxical_subreg (&real_old, &reloadreg);
7781 gen_reload (reloadreg, second_reloadreg,
7782 rl->opnum, rl->when_needed);
7783 emit_insn ((GEN_FCN (tertiary_icode)
7784 (real_old, reloadreg, third_reloadreg)));
7785 special = 1;
7788 else
7790 /* Copy between the reload regs here and then to
7791 OUT later. */
7793 gen_reload (reloadreg, second_reloadreg,
7794 rl->opnum, rl->when_needed);
7795 if (tertiary_reload >= 0)
7797 rtx third_reloadreg = rld[tertiary_reload].reg_rtx;
7799 gen_reload (third_reloadreg, reloadreg,
7800 rl->opnum, rl->when_needed);
7801 reloadreg = third_reloadreg;
7808 /* Output the last reload insn. */
7809 if (! special)
7811 rtx set;
7813 /* Don't output the last reload if OLD is not the dest of
7814 INSN and is in the src and is clobbered by INSN. */
7815 if (! flag_expensive_optimizations
7816 || !REG_P (old)
7817 || !(set = single_set (insn))
7818 || rtx_equal_p (old, SET_DEST (set))
7819 || !reg_mentioned_p (old, SET_SRC (set))
7820 || !((REGNO (old) < FIRST_PSEUDO_REGISTER)
7821 && regno_clobbered_p (REGNO (old), insn, rl->mode, 0)))
7822 gen_reload (old, reloadreg, rl->opnum,
7823 rl->when_needed);
7826 /* Look at all insns we emitted, just to be safe. */
7827 for (p = get_insns (); p; p = NEXT_INSN (p))
7828 if (INSN_P (p))
7830 rtx pat = PATTERN (p);
7832 /* If this output reload doesn't come from a spill reg,
7833 clear any memory of reloaded copies of the pseudo reg.
7834 If this output reload comes from a spill reg,
7835 reg_has_output_reload will make this do nothing. */
7836 note_stores (pat, forget_old_reloads_1, NULL);
7838 if (reg_mentioned_p (rl_reg_rtx, pat))
7840 rtx set = single_set (insn);
7841 if (reload_spill_index[j] < 0
7842 && set
7843 && SET_SRC (set) == rl_reg_rtx)
7845 int src = REGNO (SET_SRC (set));
7847 reload_spill_index[j] = src;
7848 SET_HARD_REG_BIT (reg_is_output_reload, src);
7849 if (find_regno_note (insn, REG_DEAD, src))
7850 SET_HARD_REG_BIT (reg_reloaded_died, src);
7852 if (HARD_REGISTER_P (rl_reg_rtx))
7854 int s = rl->secondary_out_reload;
7855 set = single_set (p);
7856 /* If this reload copies only to the secondary reload
7857 register, the secondary reload does the actual
7858 store. */
7859 if (s >= 0 && set == NULL_RTX)
7860 /* We can't tell what function the secondary reload
7861 has and where the actual store to the pseudo is
7862 made; leave new_spill_reg_store alone. */
7864 else if (s >= 0
7865 && SET_SRC (set) == rl_reg_rtx
7866 && SET_DEST (set) == rld[s].reg_rtx)
7868 /* Usually the next instruction will be the
7869 secondary reload insn; if we can confirm
7870 that it is, setting new_spill_reg_store to
7871 that insn will allow an extra optimization. */
7872 rtx s_reg = rld[s].reg_rtx;
7873 rtx next = NEXT_INSN (p);
7874 rld[s].out = rl->out;
7875 rld[s].out_reg = rl->out_reg;
7876 set = single_set (next);
7877 if (set && SET_SRC (set) == s_reg
7878 && reload_reg_rtx_reaches_end_p (s_reg, s))
7880 SET_HARD_REG_BIT (reg_is_output_reload,
7881 REGNO (s_reg));
7882 new_spill_reg_store[REGNO (s_reg)] = next;
7885 else if (reload_reg_rtx_reaches_end_p (rl_reg_rtx, j))
7886 new_spill_reg_store[REGNO (rl_reg_rtx)] = p;
7891 if (rl->when_needed == RELOAD_OTHER)
7893 emit_insn (other_output_reload_insns[rl->opnum]);
7894 other_output_reload_insns[rl->opnum] = get_insns ();
7896 else
7897 output_reload_insns[rl->opnum] = get_insns ();
7899 if (cfun->can_throw_non_call_exceptions)
7900 copy_reg_eh_region_note_forward (insn, get_insns (), NULL);
7902 end_sequence ();
7905 /* Do input reloading for reload RL, which is for the insn described by CHAIN
7906 and has the number J. */
7907 static void
7908 do_input_reload (struct insn_chain *chain, struct reload *rl, int j)
7910 rtx insn = chain->insn;
7911 rtx old = (rl->in && MEM_P (rl->in)
7912 ? rl->in_reg : rl->in);
7913 rtx reg_rtx = rl->reg_rtx;
7915 if (old && reg_rtx)
7917 enum machine_mode mode;
7919 /* Determine the mode to reload in.
7920 This is very tricky because we have three to choose from.
7921 There is the mode the insn operand wants (rl->inmode).
7922 There is the mode of the reload register RELOADREG.
7923 There is the intrinsic mode of the operand, which we could find
7924 by stripping some SUBREGs.
7925 It turns out that RELOADREG's mode is irrelevant:
7926 we can change that arbitrarily.
7928 Consider (SUBREG:SI foo:QI) as an operand that must be SImode;
7929 then the reload reg may not support QImode moves, so use SImode.
7930 If foo is in memory due to spilling a pseudo reg, this is safe,
7931 because the QImode value is in the least significant part of a
7932 slot big enough for a SImode. If foo is some other sort of
7933 memory reference, then it is impossible to reload this case,
7934 so previous passes had better make sure this never happens.
7936 Then consider a one-word union which has SImode and one of its
7937 members is a float, being fetched as (SUBREG:SF union:SI).
7938 We must fetch that as SFmode because we could be loading into
7939 a float-only register. In this case OLD's mode is correct.
7941 Consider an immediate integer: it has VOIDmode. Here we need
7942 to get a mode from something else.
7944 In some cases, there is a fourth mode, the operand's
7945 containing mode. If the insn specifies a containing mode for
7946 this operand, it overrides all others.
7948 I am not sure whether the algorithm here is always right,
7949 but it does the right things in those cases. */
7951 mode = GET_MODE (old);
7952 if (mode == VOIDmode)
7953 mode = rl->inmode;
7955 /* We cannot use gen_lowpart_common since it can do the wrong thing
7956 when REG_RTX has a multi-word mode. Note that REG_RTX must
7957 always be a REG here. */
7958 if (GET_MODE (reg_rtx) != mode)
7959 reg_rtx = reload_adjust_reg_for_mode (reg_rtx, mode);
7961 reload_reg_rtx_for_input[j] = reg_rtx;
7963 if (old != 0
7964 /* AUTO_INC reloads need to be handled even if inherited. We got an
7965 AUTO_INC reload if reload_out is set but reload_out_reg isn't. */
7966 && (! reload_inherited[j] || (rl->out && ! rl->out_reg))
7967 && ! rtx_equal_p (reg_rtx, old)
7968 && reg_rtx != 0)
7969 emit_input_reload_insns (chain, rld + j, old, j);
7971 /* When inheriting a wider reload, we have a MEM in rl->in,
7972 e.g. inheriting a SImode output reload for
7973 (mem:HI (plus:SI (reg:SI 14 fp) (const_int 10))) */
7974 if (optimize && reload_inherited[j] && rl->in
7975 && MEM_P (rl->in)
7976 && MEM_P (rl->in_reg)
7977 && reload_spill_index[j] >= 0
7978 && TEST_HARD_REG_BIT (reg_reloaded_valid, reload_spill_index[j]))
7979 rl->in = regno_reg_rtx[reg_reloaded_contents[reload_spill_index[j]]];
7981 /* If we are reloading a register that was recently stored in with an
7982 output-reload, see if we can prove there was
7983 actually no need to store the old value in it. */
7985 if (optimize
7986 && (reload_inherited[j] || reload_override_in[j])
7987 && reg_rtx
7988 && REG_P (reg_rtx)
7989 && spill_reg_store[REGNO (reg_rtx)] != 0
7990 #if 0
7991 /* There doesn't seem to be any reason to restrict this to pseudos
7992 and doing so loses in the case where we are copying from a
7993 register of the wrong class. */
7994 && !HARD_REGISTER_P (spill_reg_stored_to[REGNO (reg_rtx)])
7995 #endif
7996 /* The insn might have already some references to stackslots
7997 replaced by MEMs, while reload_out_reg still names the
7998 original pseudo. */
7999 && (dead_or_set_p (insn, spill_reg_stored_to[REGNO (reg_rtx)])
8000 || rtx_equal_p (spill_reg_stored_to[REGNO (reg_rtx)], rl->out_reg)))
8001 delete_output_reload (insn, j, REGNO (reg_rtx), reg_rtx);
8004 /* Do output reloading for reload RL, which is for the insn described by
8005 CHAIN and has the number J.
8006 ??? At some point we need to support handling output reloads of
8007 JUMP_INSNs or insns that set cc0. */
8008 static void
8009 do_output_reload (struct insn_chain *chain, struct reload *rl, int j)
8011 rtx note, old;
8012 rtx insn = chain->insn;
8013 /* If this is an output reload that stores something that is
8014 not loaded in this same reload, see if we can eliminate a previous
8015 store. */
8016 rtx pseudo = rl->out_reg;
8017 rtx reg_rtx = rl->reg_rtx;
8019 if (rl->out && reg_rtx)
8021 enum machine_mode mode;
8023 /* Determine the mode to reload in.
8024 See comments above (for input reloading). */
8025 mode = GET_MODE (rl->out);
8026 if (mode == VOIDmode)
8028 /* VOIDmode should never happen for an output. */
8029 if (asm_noperands (PATTERN (insn)) < 0)
8030 /* It's the compiler's fault. */
8031 fatal_insn ("VOIDmode on an output", insn);
8032 error_for_asm (insn, "output operand is constant in %<asm%>");
8033 /* Prevent crash--use something we know is valid. */
8034 mode = word_mode;
8035 rl->out = gen_rtx_REG (mode, REGNO (reg_rtx));
8037 if (GET_MODE (reg_rtx) != mode)
8038 reg_rtx = reload_adjust_reg_for_mode (reg_rtx, mode);
8040 reload_reg_rtx_for_output[j] = reg_rtx;
8042 if (pseudo
8043 && optimize
8044 && REG_P (pseudo)
8045 && ! rtx_equal_p (rl->in_reg, pseudo)
8046 && REGNO (pseudo) >= FIRST_PSEUDO_REGISTER
8047 && reg_last_reload_reg[REGNO (pseudo)])
8049 int pseudo_no = REGNO (pseudo);
8050 int last_regno = REGNO (reg_last_reload_reg[pseudo_no]);
8052 /* We don't need to test full validity of last_regno for
8053 inherit here; we only want to know if the store actually
8054 matches the pseudo. */
8055 if (TEST_HARD_REG_BIT (reg_reloaded_valid, last_regno)
8056 && reg_reloaded_contents[last_regno] == pseudo_no
8057 && spill_reg_store[last_regno]
8058 && rtx_equal_p (pseudo, spill_reg_stored_to[last_regno]))
8059 delete_output_reload (insn, j, last_regno, reg_rtx);
8062 old = rl->out_reg;
8063 if (old == 0
8064 || reg_rtx == 0
8065 || rtx_equal_p (old, reg_rtx))
8066 return;
8068 /* An output operand that dies right away does need a reload,
8069 but need not be copied from it. Show the new location in the
8070 REG_UNUSED note. */
8071 if ((REG_P (old) || GET_CODE (old) == SCRATCH)
8072 && (note = find_reg_note (insn, REG_UNUSED, old)) != 0)
8074 XEXP (note, 0) = reg_rtx;
8075 return;
8077 /* Likewise for a SUBREG of an operand that dies. */
8078 else if (GET_CODE (old) == SUBREG
8079 && REG_P (SUBREG_REG (old))
8080 && 0 != (note = find_reg_note (insn, REG_UNUSED,
8081 SUBREG_REG (old))))
8083 XEXP (note, 0) = gen_lowpart_common (GET_MODE (old), reg_rtx);
8084 return;
8086 else if (GET_CODE (old) == SCRATCH)
8087 /* If we aren't optimizing, there won't be a REG_UNUSED note,
8088 but we don't want to make an output reload. */
8089 return;
8091 /* If is a JUMP_INSN, we can't support output reloads yet. */
8092 gcc_assert (NONJUMP_INSN_P (insn));
8094 emit_output_reload_insns (chain, rld + j, j);
8097 /* A reload copies values of MODE from register SRC to register DEST.
8098 Return true if it can be treated for inheritance purposes like a
8099 group of reloads, each one reloading a single hard register. The
8100 caller has already checked that (reg:MODE SRC) and (reg:MODE DEST)
8101 occupy the same number of hard registers. */
8103 static bool
8104 inherit_piecemeal_p (int dest ATTRIBUTE_UNUSED,
8105 int src ATTRIBUTE_UNUSED,
8106 enum machine_mode mode ATTRIBUTE_UNUSED)
8108 #ifdef CANNOT_CHANGE_MODE_CLASS
8109 return (!REG_CANNOT_CHANGE_MODE_P (dest, mode, reg_raw_mode[dest])
8110 && !REG_CANNOT_CHANGE_MODE_P (src, mode, reg_raw_mode[src]));
8111 #else
8112 return true;
8113 #endif
8116 /* Output insns to reload values in and out of the chosen reload regs. */
8118 static void
8119 emit_reload_insns (struct insn_chain *chain)
8121 rtx insn = chain->insn;
8123 int j;
8125 CLEAR_HARD_REG_SET (reg_reloaded_died);
8127 for (j = 0; j < reload_n_operands; j++)
8128 input_reload_insns[j] = input_address_reload_insns[j]
8129 = inpaddr_address_reload_insns[j]
8130 = output_reload_insns[j] = output_address_reload_insns[j]
8131 = outaddr_address_reload_insns[j]
8132 = other_output_reload_insns[j] = 0;
8133 other_input_address_reload_insns = 0;
8134 other_input_reload_insns = 0;
8135 operand_reload_insns = 0;
8136 other_operand_reload_insns = 0;
8138 /* Dump reloads into the dump file. */
8139 if (dump_file)
8141 fprintf (dump_file, "\nReloads for insn # %d\n", INSN_UID (insn));
8142 debug_reload_to_stream (dump_file);
8145 for (j = 0; j < n_reloads; j++)
8146 if (rld[j].reg_rtx && HARD_REGISTER_P (rld[j].reg_rtx))
8148 unsigned int i;
8150 for (i = REGNO (rld[j].reg_rtx); i < END_REGNO (rld[j].reg_rtx); i++)
8151 new_spill_reg_store[i] = 0;
8154 /* Now output the instructions to copy the data into and out of the
8155 reload registers. Do these in the order that the reloads were reported,
8156 since reloads of base and index registers precede reloads of operands
8157 and the operands may need the base and index registers reloaded. */
8159 for (j = 0; j < n_reloads; j++)
8161 do_input_reload (chain, rld + j, j);
8162 do_output_reload (chain, rld + j, j);
8165 /* Now write all the insns we made for reloads in the order expected by
8166 the allocation functions. Prior to the insn being reloaded, we write
8167 the following reloads:
8169 RELOAD_FOR_OTHER_ADDRESS reloads for input addresses.
8171 RELOAD_OTHER reloads.
8173 For each operand, any RELOAD_FOR_INPADDR_ADDRESS reloads followed
8174 by any RELOAD_FOR_INPUT_ADDRESS reloads followed by the
8175 RELOAD_FOR_INPUT reload for the operand.
8177 RELOAD_FOR_OPADDR_ADDRS reloads.
8179 RELOAD_FOR_OPERAND_ADDRESS reloads.
8181 After the insn being reloaded, we write the following:
8183 For each operand, any RELOAD_FOR_OUTADDR_ADDRESS reloads followed
8184 by any RELOAD_FOR_OUTPUT_ADDRESS reload followed by the
8185 RELOAD_FOR_OUTPUT reload, followed by any RELOAD_OTHER output
8186 reloads for the operand. The RELOAD_OTHER output reloads are
8187 output in descending order by reload number. */
8189 emit_insn_before (other_input_address_reload_insns, insn);
8190 emit_insn_before (other_input_reload_insns, insn);
8192 for (j = 0; j < reload_n_operands; j++)
8194 emit_insn_before (inpaddr_address_reload_insns[j], insn);
8195 emit_insn_before (input_address_reload_insns[j], insn);
8196 emit_insn_before (input_reload_insns[j], insn);
8199 emit_insn_before (other_operand_reload_insns, insn);
8200 emit_insn_before (operand_reload_insns, insn);
8202 for (j = 0; j < reload_n_operands; j++)
8204 rtx x = emit_insn_after (outaddr_address_reload_insns[j], insn);
8205 x = emit_insn_after (output_address_reload_insns[j], x);
8206 x = emit_insn_after (output_reload_insns[j], x);
8207 emit_insn_after (other_output_reload_insns[j], x);
8210 /* For all the spill regs newly reloaded in this instruction,
8211 record what they were reloaded from, so subsequent instructions
8212 can inherit the reloads.
8214 Update spill_reg_store for the reloads of this insn.
8215 Copy the elements that were updated in the loop above. */
8217 for (j = 0; j < n_reloads; j++)
8219 int r = reload_order[j];
8220 int i = reload_spill_index[r];
8222 /* If this is a non-inherited input reload from a pseudo, we must
8223 clear any memory of a previous store to the same pseudo. Only do
8224 something if there will not be an output reload for the pseudo
8225 being reloaded. */
8226 if (rld[r].in_reg != 0
8227 && ! (reload_inherited[r] || reload_override_in[r]))
8229 rtx reg = rld[r].in_reg;
8231 if (GET_CODE (reg) == SUBREG)
8232 reg = SUBREG_REG (reg);
8234 if (REG_P (reg)
8235 && REGNO (reg) >= FIRST_PSEUDO_REGISTER
8236 && !REGNO_REG_SET_P (&reg_has_output_reload, REGNO (reg)))
8238 int nregno = REGNO (reg);
8240 if (reg_last_reload_reg[nregno])
8242 int last_regno = REGNO (reg_last_reload_reg[nregno]);
8244 if (reg_reloaded_contents[last_regno] == nregno)
8245 spill_reg_store[last_regno] = 0;
8250 /* I is nonneg if this reload used a register.
8251 If rld[r].reg_rtx is 0, this is an optional reload
8252 that we opted to ignore. */
8254 if (i >= 0 && rld[r].reg_rtx != 0)
8256 int nr = hard_regno_nregs[i][GET_MODE (rld[r].reg_rtx)];
8257 int k;
8259 /* For a multi register reload, we need to check if all or part
8260 of the value lives to the end. */
8261 for (k = 0; k < nr; k++)
8262 if (reload_reg_reaches_end_p (i + k, r))
8263 CLEAR_HARD_REG_BIT (reg_reloaded_valid, i + k);
8265 /* Maybe the spill reg contains a copy of reload_out. */
8266 if (rld[r].out != 0
8267 && (REG_P (rld[r].out)
8268 || (rld[r].out_reg
8269 ? REG_P (rld[r].out_reg)
8270 /* The reload value is an auto-modification of
8271 some kind. For PRE_INC, POST_INC, PRE_DEC
8272 and POST_DEC, we record an equivalence
8273 between the reload register and the operand
8274 on the optimistic assumption that we can make
8275 the equivalence hold. reload_as_needed must
8276 then either make it hold or invalidate the
8277 equivalence.
8279 PRE_MODIFY and POST_MODIFY addresses are reloaded
8280 somewhat differently, and allowing them here leads
8281 to problems. */
8282 : (GET_CODE (rld[r].out) != POST_MODIFY
8283 && GET_CODE (rld[r].out) != PRE_MODIFY))))
8285 rtx reg;
8287 reg = reload_reg_rtx_for_output[r];
8288 if (reload_reg_rtx_reaches_end_p (reg, r))
8290 enum machine_mode mode = GET_MODE (reg);
8291 int regno = REGNO (reg);
8292 int nregs = hard_regno_nregs[regno][mode];
8293 rtx out = (REG_P (rld[r].out)
8294 ? rld[r].out
8295 : rld[r].out_reg
8296 ? rld[r].out_reg
8297 /* AUTO_INC */ : XEXP (rld[r].in_reg, 0));
8298 int out_regno = REGNO (out);
8299 int out_nregs = (!HARD_REGISTER_NUM_P (out_regno) ? 1
8300 : hard_regno_nregs[out_regno][mode]);
8301 bool piecemeal;
8303 spill_reg_store[regno] = new_spill_reg_store[regno];
8304 spill_reg_stored_to[regno] = out;
8305 reg_last_reload_reg[out_regno] = reg;
8307 piecemeal = (HARD_REGISTER_NUM_P (out_regno)
8308 && nregs == out_nregs
8309 && inherit_piecemeal_p (out_regno, regno, mode));
8311 /* If OUT_REGNO is a hard register, it may occupy more than
8312 one register. If it does, say what is in the
8313 rest of the registers assuming that both registers
8314 agree on how many words the object takes. If not,
8315 invalidate the subsequent registers. */
8317 if (HARD_REGISTER_NUM_P (out_regno))
8318 for (k = 1; k < out_nregs; k++)
8319 reg_last_reload_reg[out_regno + k]
8320 = (piecemeal ? regno_reg_rtx[regno + k] : 0);
8322 /* Now do the inverse operation. */
8323 for (k = 0; k < nregs; k++)
8325 CLEAR_HARD_REG_BIT (reg_reloaded_dead, regno + k);
8326 reg_reloaded_contents[regno + k]
8327 = (!HARD_REGISTER_NUM_P (out_regno) || !piecemeal
8328 ? out_regno
8329 : out_regno + k);
8330 reg_reloaded_insn[regno + k] = insn;
8331 SET_HARD_REG_BIT (reg_reloaded_valid, regno + k);
8332 if (HARD_REGNO_CALL_PART_CLOBBERED (regno + k, mode))
8333 SET_HARD_REG_BIT (reg_reloaded_call_part_clobbered,
8334 regno + k);
8335 else
8336 CLEAR_HARD_REG_BIT (reg_reloaded_call_part_clobbered,
8337 regno + k);
8341 /* Maybe the spill reg contains a copy of reload_in. Only do
8342 something if there will not be an output reload for
8343 the register being reloaded. */
8344 else if (rld[r].out_reg == 0
8345 && rld[r].in != 0
8346 && ((REG_P (rld[r].in)
8347 && !HARD_REGISTER_P (rld[r].in)
8348 && !REGNO_REG_SET_P (&reg_has_output_reload,
8349 REGNO (rld[r].in)))
8350 || (REG_P (rld[r].in_reg)
8351 && !REGNO_REG_SET_P (&reg_has_output_reload,
8352 REGNO (rld[r].in_reg))))
8353 && !reg_set_p (reload_reg_rtx_for_input[r], PATTERN (insn)))
8355 rtx reg;
8357 reg = reload_reg_rtx_for_input[r];
8358 if (reload_reg_rtx_reaches_end_p (reg, r))
8360 enum machine_mode mode;
8361 int regno;
8362 int nregs;
8363 int in_regno;
8364 int in_nregs;
8365 rtx in;
8366 bool piecemeal;
8368 mode = GET_MODE (reg);
8369 regno = REGNO (reg);
8370 nregs = hard_regno_nregs[regno][mode];
8371 if (REG_P (rld[r].in)
8372 && REGNO (rld[r].in) >= FIRST_PSEUDO_REGISTER)
8373 in = rld[r].in;
8374 else if (REG_P (rld[r].in_reg))
8375 in = rld[r].in_reg;
8376 else
8377 in = XEXP (rld[r].in_reg, 0);
8378 in_regno = REGNO (in);
8380 in_nregs = (!HARD_REGISTER_NUM_P (in_regno) ? 1
8381 : hard_regno_nregs[in_regno][mode]);
8383 reg_last_reload_reg[in_regno] = reg;
8385 piecemeal = (HARD_REGISTER_NUM_P (in_regno)
8386 && nregs == in_nregs
8387 && inherit_piecemeal_p (regno, in_regno, mode));
8389 if (HARD_REGISTER_NUM_P (in_regno))
8390 for (k = 1; k < in_nregs; k++)
8391 reg_last_reload_reg[in_regno + k]
8392 = (piecemeal ? regno_reg_rtx[regno + k] : 0);
8394 /* Unless we inherited this reload, show we haven't
8395 recently done a store.
8396 Previous stores of inherited auto_inc expressions
8397 also have to be discarded. */
8398 if (! reload_inherited[r]
8399 || (rld[r].out && ! rld[r].out_reg))
8400 spill_reg_store[regno] = 0;
8402 for (k = 0; k < nregs; k++)
8404 CLEAR_HARD_REG_BIT (reg_reloaded_dead, regno + k);
8405 reg_reloaded_contents[regno + k]
8406 = (!HARD_REGISTER_NUM_P (in_regno) || !piecemeal
8407 ? in_regno
8408 : in_regno + k);
8409 reg_reloaded_insn[regno + k] = insn;
8410 SET_HARD_REG_BIT (reg_reloaded_valid, regno + k);
8411 if (HARD_REGNO_CALL_PART_CLOBBERED (regno + k, mode))
8412 SET_HARD_REG_BIT (reg_reloaded_call_part_clobbered,
8413 regno + k);
8414 else
8415 CLEAR_HARD_REG_BIT (reg_reloaded_call_part_clobbered,
8416 regno + k);
8422 /* The following if-statement was #if 0'd in 1.34 (or before...).
8423 It's reenabled in 1.35 because supposedly nothing else
8424 deals with this problem. */
8426 /* If a register gets output-reloaded from a non-spill register,
8427 that invalidates any previous reloaded copy of it.
8428 But forget_old_reloads_1 won't get to see it, because
8429 it thinks only about the original insn. So invalidate it here.
8430 Also do the same thing for RELOAD_OTHER constraints where the
8431 output is discarded. */
8432 if (i < 0
8433 && ((rld[r].out != 0
8434 && (REG_P (rld[r].out)
8435 || (MEM_P (rld[r].out)
8436 && REG_P (rld[r].out_reg))))
8437 || (rld[r].out == 0 && rld[r].out_reg
8438 && REG_P (rld[r].out_reg))))
8440 rtx out = ((rld[r].out && REG_P (rld[r].out))
8441 ? rld[r].out : rld[r].out_reg);
8442 int out_regno = REGNO (out);
8443 enum machine_mode mode = GET_MODE (out);
8445 /* REG_RTX is now set or clobbered by the main instruction.
8446 As the comment above explains, forget_old_reloads_1 only
8447 sees the original instruction, and there is no guarantee
8448 that the original instruction also clobbered REG_RTX.
8449 For example, if find_reloads sees that the input side of
8450 a matched operand pair dies in this instruction, it may
8451 use the input register as the reload register.
8453 Calling forget_old_reloads_1 is a waste of effort if
8454 REG_RTX is also the output register.
8456 If we know that REG_RTX holds the value of a pseudo
8457 register, the code after the call will record that fact. */
8458 if (rld[r].reg_rtx && rld[r].reg_rtx != out)
8459 forget_old_reloads_1 (rld[r].reg_rtx, NULL_RTX, NULL);
8461 if (!HARD_REGISTER_NUM_P (out_regno))
8463 rtx src_reg, store_insn = NULL_RTX;
8465 reg_last_reload_reg[out_regno] = 0;
8467 /* If we can find a hard register that is stored, record
8468 the storing insn so that we may delete this insn with
8469 delete_output_reload. */
8470 src_reg = reload_reg_rtx_for_output[r];
8472 if (src_reg)
8474 if (reload_reg_rtx_reaches_end_p (src_reg, r))
8475 store_insn = new_spill_reg_store[REGNO (src_reg)];
8476 else
8477 src_reg = NULL_RTX;
8479 else
8481 /* If this is an optional reload, try to find the
8482 source reg from an input reload. */
8483 rtx set = single_set (insn);
8484 if (set && SET_DEST (set) == rld[r].out)
8486 int k;
8488 src_reg = SET_SRC (set);
8489 store_insn = insn;
8490 for (k = 0; k < n_reloads; k++)
8492 if (rld[k].in == src_reg)
8494 src_reg = reload_reg_rtx_for_input[k];
8495 break;
8500 if (src_reg && REG_P (src_reg)
8501 && REGNO (src_reg) < FIRST_PSEUDO_REGISTER)
8503 int src_regno, src_nregs, k;
8504 rtx note;
8506 gcc_assert (GET_MODE (src_reg) == mode);
8507 src_regno = REGNO (src_reg);
8508 src_nregs = hard_regno_nregs[src_regno][mode];
8509 /* The place where to find a death note varies with
8510 PRESERVE_DEATH_INFO_REGNO_P . The condition is not
8511 necessarily checked exactly in the code that moves
8512 notes, so just check both locations. */
8513 note = find_regno_note (insn, REG_DEAD, src_regno);
8514 if (! note && store_insn)
8515 note = find_regno_note (store_insn, REG_DEAD, src_regno);
8516 for (k = 0; k < src_nregs; k++)
8518 spill_reg_store[src_regno + k] = store_insn;
8519 spill_reg_stored_to[src_regno + k] = out;
8520 reg_reloaded_contents[src_regno + k] = out_regno;
8521 reg_reloaded_insn[src_regno + k] = store_insn;
8522 CLEAR_HARD_REG_BIT (reg_reloaded_dead, src_regno + k);
8523 SET_HARD_REG_BIT (reg_reloaded_valid, src_regno + k);
8524 if (HARD_REGNO_CALL_PART_CLOBBERED (src_regno + k,
8525 mode))
8526 SET_HARD_REG_BIT (reg_reloaded_call_part_clobbered,
8527 src_regno + k);
8528 else
8529 CLEAR_HARD_REG_BIT (reg_reloaded_call_part_clobbered,
8530 src_regno + k);
8531 SET_HARD_REG_BIT (reg_is_output_reload, src_regno + k);
8532 if (note)
8533 SET_HARD_REG_BIT (reg_reloaded_died, src_regno);
8534 else
8535 CLEAR_HARD_REG_BIT (reg_reloaded_died, src_regno);
8537 reg_last_reload_reg[out_regno] = src_reg;
8538 /* We have to set reg_has_output_reload here, or else
8539 forget_old_reloads_1 will clear reg_last_reload_reg
8540 right away. */
8541 SET_REGNO_REG_SET (&reg_has_output_reload,
8542 out_regno);
8545 else
8547 int k, out_nregs = hard_regno_nregs[out_regno][mode];
8549 for (k = 0; k < out_nregs; k++)
8550 reg_last_reload_reg[out_regno + k] = 0;
8554 IOR_HARD_REG_SET (reg_reloaded_dead, reg_reloaded_died);
8557 /* Go through the motions to emit INSN and test if it is strictly valid.
8558 Return the emitted insn if valid, else return NULL. */
8560 static rtx
8561 emit_insn_if_valid_for_reload (rtx insn)
8563 rtx last = get_last_insn ();
8564 int code;
8566 insn = emit_insn (insn);
8567 code = recog_memoized (insn);
8569 if (code >= 0)
8571 extract_insn (insn);
8572 /* We want constrain operands to treat this insn strictly in its
8573 validity determination, i.e., the way it would after reload has
8574 completed. */
8575 if (constrain_operands (1))
8576 return insn;
8579 delete_insns_since (last);
8580 return NULL;
8583 /* Emit code to perform a reload from IN (which may be a reload register) to
8584 OUT (which may also be a reload register). IN or OUT is from operand
8585 OPNUM with reload type TYPE.
8587 Returns first insn emitted. */
8589 static rtx
8590 gen_reload (rtx out, rtx in, int opnum, enum reload_type type)
8592 rtx last = get_last_insn ();
8593 rtx tem;
8594 #ifdef SECONDARY_MEMORY_NEEDED
8595 rtx tem1, tem2;
8596 #endif
8598 /* If IN is a paradoxical SUBREG, remove it and try to put the
8599 opposite SUBREG on OUT. Likewise for a paradoxical SUBREG on OUT. */
8600 if (!strip_paradoxical_subreg (&in, &out))
8601 strip_paradoxical_subreg (&out, &in);
8603 /* How to do this reload can get quite tricky. Normally, we are being
8604 asked to reload a simple operand, such as a MEM, a constant, or a pseudo
8605 register that didn't get a hard register. In that case we can just
8606 call emit_move_insn.
8608 We can also be asked to reload a PLUS that adds a register or a MEM to
8609 another register, constant or MEM. This can occur during frame pointer
8610 elimination and while reloading addresses. This case is handled by
8611 trying to emit a single insn to perform the add. If it is not valid,
8612 we use a two insn sequence.
8614 Or we can be asked to reload an unary operand that was a fragment of
8615 an addressing mode, into a register. If it isn't recognized as-is,
8616 we try making the unop operand and the reload-register the same:
8617 (set reg:X (unop:X expr:Y))
8618 -> (set reg:Y expr:Y) (set reg:X (unop:X reg:Y)).
8620 Finally, we could be called to handle an 'o' constraint by putting
8621 an address into a register. In that case, we first try to do this
8622 with a named pattern of "reload_load_address". If no such pattern
8623 exists, we just emit a SET insn and hope for the best (it will normally
8624 be valid on machines that use 'o').
8626 This entire process is made complex because reload will never
8627 process the insns we generate here and so we must ensure that
8628 they will fit their constraints and also by the fact that parts of
8629 IN might be being reloaded separately and replaced with spill registers.
8630 Because of this, we are, in some sense, just guessing the right approach
8631 here. The one listed above seems to work.
8633 ??? At some point, this whole thing needs to be rethought. */
8635 if (GET_CODE (in) == PLUS
8636 && (REG_P (XEXP (in, 0))
8637 || GET_CODE (XEXP (in, 0)) == SUBREG
8638 || MEM_P (XEXP (in, 0)))
8639 && (REG_P (XEXP (in, 1))
8640 || GET_CODE (XEXP (in, 1)) == SUBREG
8641 || CONSTANT_P (XEXP (in, 1))
8642 || MEM_P (XEXP (in, 1))))
8644 /* We need to compute the sum of a register or a MEM and another
8645 register, constant, or MEM, and put it into the reload
8646 register. The best possible way of doing this is if the machine
8647 has a three-operand ADD insn that accepts the required operands.
8649 The simplest approach is to try to generate such an insn and see if it
8650 is recognized and matches its constraints. If so, it can be used.
8652 It might be better not to actually emit the insn unless it is valid,
8653 but we need to pass the insn as an operand to `recog' and
8654 `extract_insn' and it is simpler to emit and then delete the insn if
8655 not valid than to dummy things up. */
8657 rtx op0, op1, tem, insn;
8658 enum insn_code code;
8660 op0 = find_replacement (&XEXP (in, 0));
8661 op1 = find_replacement (&XEXP (in, 1));
8663 /* Since constraint checking is strict, commutativity won't be
8664 checked, so we need to do that here to avoid spurious failure
8665 if the add instruction is two-address and the second operand
8666 of the add is the same as the reload reg, which is frequently
8667 the case. If the insn would be A = B + A, rearrange it so
8668 it will be A = A + B as constrain_operands expects. */
8670 if (REG_P (XEXP (in, 1))
8671 && REGNO (out) == REGNO (XEXP (in, 1)))
8672 tem = op0, op0 = op1, op1 = tem;
8674 if (op0 != XEXP (in, 0) || op1 != XEXP (in, 1))
8675 in = gen_rtx_PLUS (GET_MODE (in), op0, op1);
8677 insn = emit_insn_if_valid_for_reload (gen_rtx_SET (VOIDmode, out, in));
8678 if (insn)
8679 return insn;
8681 /* If that failed, we must use a conservative two-insn sequence.
8683 Use a move to copy one operand into the reload register. Prefer
8684 to reload a constant, MEM or pseudo since the move patterns can
8685 handle an arbitrary operand. If OP1 is not a constant, MEM or
8686 pseudo and OP1 is not a valid operand for an add instruction, then
8687 reload OP1.
8689 After reloading one of the operands into the reload register, add
8690 the reload register to the output register.
8692 If there is another way to do this for a specific machine, a
8693 DEFINE_PEEPHOLE should be specified that recognizes the sequence
8694 we emit below. */
8696 code = optab_handler (add_optab, GET_MODE (out));
8698 if (CONSTANT_P (op1) || MEM_P (op1) || GET_CODE (op1) == SUBREG
8699 || (REG_P (op1)
8700 && REGNO (op1) >= FIRST_PSEUDO_REGISTER)
8701 || (code != CODE_FOR_nothing
8702 && !insn_operand_matches (code, 2, op1)))
8703 tem = op0, op0 = op1, op1 = tem;
8705 gen_reload (out, op0, opnum, type);
8707 /* If OP0 and OP1 are the same, we can use OUT for OP1.
8708 This fixes a problem on the 32K where the stack pointer cannot
8709 be used as an operand of an add insn. */
8711 if (rtx_equal_p (op0, op1))
8712 op1 = out;
8714 insn = emit_insn_if_valid_for_reload (gen_add2_insn (out, op1));
8715 if (insn)
8717 /* Add a REG_EQUIV note so that find_equiv_reg can find it. */
8718 set_dst_reg_note (insn, REG_EQUIV, in, out);
8719 return insn;
8722 /* If that failed, copy the address register to the reload register.
8723 Then add the constant to the reload register. */
8725 gcc_assert (!reg_overlap_mentioned_p (out, op0));
8726 gen_reload (out, op1, opnum, type);
8727 insn = emit_insn (gen_add2_insn (out, op0));
8728 set_dst_reg_note (insn, REG_EQUIV, in, out);
8731 #ifdef SECONDARY_MEMORY_NEEDED
8732 /* If we need a memory location to do the move, do it that way. */
8733 else if ((tem1 = replaced_subreg (in), tem2 = replaced_subreg (out),
8734 (REG_P (tem1) && REG_P (tem2)))
8735 && REGNO (tem1) < FIRST_PSEUDO_REGISTER
8736 && REGNO (tem2) < FIRST_PSEUDO_REGISTER
8737 && SECONDARY_MEMORY_NEEDED (REGNO_REG_CLASS (REGNO (tem1)),
8738 REGNO_REG_CLASS (REGNO (tem2)),
8739 GET_MODE (out)))
8741 /* Get the memory to use and rewrite both registers to its mode. */
8742 rtx loc = get_secondary_mem (in, GET_MODE (out), opnum, type);
8744 if (GET_MODE (loc) != GET_MODE (out))
8745 out = gen_rtx_REG (GET_MODE (loc), reg_or_subregno (out));
8747 if (GET_MODE (loc) != GET_MODE (in))
8748 in = gen_rtx_REG (GET_MODE (loc), reg_or_subregno (in));
8750 gen_reload (loc, in, opnum, type);
8751 gen_reload (out, loc, opnum, type);
8753 #endif
8754 else if (REG_P (out) && UNARY_P (in))
8756 rtx insn;
8757 rtx op1;
8758 rtx out_moded;
8759 rtx set;
8761 op1 = find_replacement (&XEXP (in, 0));
8762 if (op1 != XEXP (in, 0))
8763 in = gen_rtx_fmt_e (GET_CODE (in), GET_MODE (in), op1);
8765 /* First, try a plain SET. */
8766 set = emit_insn_if_valid_for_reload (gen_rtx_SET (VOIDmode, out, in));
8767 if (set)
8768 return set;
8770 /* If that failed, move the inner operand to the reload
8771 register, and try the same unop with the inner expression
8772 replaced with the reload register. */
8774 if (GET_MODE (op1) != GET_MODE (out))
8775 out_moded = gen_rtx_REG (GET_MODE (op1), REGNO (out));
8776 else
8777 out_moded = out;
8779 gen_reload (out_moded, op1, opnum, type);
8781 insn
8782 = gen_rtx_SET (VOIDmode, out,
8783 gen_rtx_fmt_e (GET_CODE (in), GET_MODE (in),
8784 out_moded));
8785 insn = emit_insn_if_valid_for_reload (insn);
8786 if (insn)
8788 set_unique_reg_note (insn, REG_EQUIV, in);
8789 return insn;
8792 fatal_insn ("failure trying to reload:", set);
8794 /* If IN is a simple operand, use gen_move_insn. */
8795 else if (OBJECT_P (in) || GET_CODE (in) == SUBREG)
8797 tem = emit_insn (gen_move_insn (out, in));
8798 /* IN may contain a LABEL_REF, if so add a REG_LABEL_OPERAND note. */
8799 mark_jump_label (in, tem, 0);
8802 #ifdef HAVE_reload_load_address
8803 else if (HAVE_reload_load_address)
8804 emit_insn (gen_reload_load_address (out, in));
8805 #endif
8807 /* Otherwise, just write (set OUT IN) and hope for the best. */
8808 else
8809 emit_insn (gen_rtx_SET (VOIDmode, out, in));
8811 /* Return the first insn emitted.
8812 We can not just return get_last_insn, because there may have
8813 been multiple instructions emitted. Also note that gen_move_insn may
8814 emit more than one insn itself, so we can not assume that there is one
8815 insn emitted per emit_insn_before call. */
8817 return last ? NEXT_INSN (last) : get_insns ();
8820 /* Delete a previously made output-reload whose result we now believe
8821 is not needed. First we double-check.
8823 INSN is the insn now being processed.
8824 LAST_RELOAD_REG is the hard register number for which we want to delete
8825 the last output reload.
8826 J is the reload-number that originally used REG. The caller has made
8827 certain that reload J doesn't use REG any longer for input.
8828 NEW_RELOAD_REG is reload register that reload J is using for REG. */
8830 static void
8831 delete_output_reload (rtx insn, int j, int last_reload_reg, rtx new_reload_reg)
8833 rtx output_reload_insn = spill_reg_store[last_reload_reg];
8834 rtx reg = spill_reg_stored_to[last_reload_reg];
8835 int k;
8836 int n_occurrences;
8837 int n_inherited = 0;
8838 rtx i1;
8839 rtx substed;
8840 unsigned regno;
8841 int nregs;
8843 /* It is possible that this reload has been only used to set another reload
8844 we eliminated earlier and thus deleted this instruction too. */
8845 if (INSN_DELETED_P (output_reload_insn))
8846 return;
8848 /* Get the raw pseudo-register referred to. */
8850 while (GET_CODE (reg) == SUBREG)
8851 reg = SUBREG_REG (reg);
8852 substed = reg_equiv_memory_loc (REGNO (reg));
8854 /* This is unsafe if the operand occurs more often in the current
8855 insn than it is inherited. */
8856 for (k = n_reloads - 1; k >= 0; k--)
8858 rtx reg2 = rld[k].in;
8859 if (! reg2)
8860 continue;
8861 if (MEM_P (reg2) || reload_override_in[k])
8862 reg2 = rld[k].in_reg;
8863 #ifdef AUTO_INC_DEC
8864 if (rld[k].out && ! rld[k].out_reg)
8865 reg2 = XEXP (rld[k].in_reg, 0);
8866 #endif
8867 while (GET_CODE (reg2) == SUBREG)
8868 reg2 = SUBREG_REG (reg2);
8869 if (rtx_equal_p (reg2, reg))
8871 if (reload_inherited[k] || reload_override_in[k] || k == j)
8872 n_inherited++;
8873 else
8874 return;
8877 n_occurrences = count_occurrences (PATTERN (insn), reg, 0);
8878 if (CALL_P (insn) && CALL_INSN_FUNCTION_USAGE (insn))
8879 n_occurrences += count_occurrences (CALL_INSN_FUNCTION_USAGE (insn),
8880 reg, 0);
8881 if (substed)
8882 n_occurrences += count_occurrences (PATTERN (insn),
8883 eliminate_regs (substed, VOIDmode,
8884 NULL_RTX), 0);
8885 for (i1 = reg_equiv_alt_mem_list (REGNO (reg)); i1; i1 = XEXP (i1, 1))
8887 gcc_assert (!rtx_equal_p (XEXP (i1, 0), substed));
8888 n_occurrences += count_occurrences (PATTERN (insn), XEXP (i1, 0), 0);
8890 if (n_occurrences > n_inherited)
8891 return;
8893 regno = REGNO (reg);
8894 if (regno >= FIRST_PSEUDO_REGISTER)
8895 nregs = 1;
8896 else
8897 nregs = hard_regno_nregs[regno][GET_MODE (reg)];
8899 /* If the pseudo-reg we are reloading is no longer referenced
8900 anywhere between the store into it and here,
8901 and we're within the same basic block, then the value can only
8902 pass through the reload reg and end up here.
8903 Otherwise, give up--return. */
8904 for (i1 = NEXT_INSN (output_reload_insn);
8905 i1 != insn; i1 = NEXT_INSN (i1))
8907 if (NOTE_INSN_BASIC_BLOCK_P (i1))
8908 return;
8909 if ((NONJUMP_INSN_P (i1) || CALL_P (i1))
8910 && refers_to_regno_p (regno, regno + nregs, PATTERN (i1), NULL))
8912 /* If this is USE in front of INSN, we only have to check that
8913 there are no more references than accounted for by inheritance. */
8914 while (NONJUMP_INSN_P (i1) && GET_CODE (PATTERN (i1)) == USE)
8916 n_occurrences += rtx_equal_p (reg, XEXP (PATTERN (i1), 0)) != 0;
8917 i1 = NEXT_INSN (i1);
8919 if (n_occurrences <= n_inherited && i1 == insn)
8920 break;
8921 return;
8925 /* We will be deleting the insn. Remove the spill reg information. */
8926 for (k = hard_regno_nregs[last_reload_reg][GET_MODE (reg)]; k-- > 0; )
8928 spill_reg_store[last_reload_reg + k] = 0;
8929 spill_reg_stored_to[last_reload_reg + k] = 0;
8932 /* The caller has already checked that REG dies or is set in INSN.
8933 It has also checked that we are optimizing, and thus some
8934 inaccuracies in the debugging information are acceptable.
8935 So we could just delete output_reload_insn. But in some cases
8936 we can improve the debugging information without sacrificing
8937 optimization - maybe even improving the code: See if the pseudo
8938 reg has been completely replaced with reload regs. If so, delete
8939 the store insn and forget we had a stack slot for the pseudo. */
8940 if (rld[j].out != rld[j].in
8941 && REG_N_DEATHS (REGNO (reg)) == 1
8942 && REG_N_SETS (REGNO (reg)) == 1
8943 && REG_BASIC_BLOCK (REGNO (reg)) >= NUM_FIXED_BLOCKS
8944 && find_regno_note (insn, REG_DEAD, REGNO (reg)))
8946 rtx i2;
8948 /* We know that it was used only between here and the beginning of
8949 the current basic block. (We also know that the last use before
8950 INSN was the output reload we are thinking of deleting, but never
8951 mind that.) Search that range; see if any ref remains. */
8952 for (i2 = PREV_INSN (insn); i2; i2 = PREV_INSN (i2))
8954 rtx set = single_set (i2);
8956 /* Uses which just store in the pseudo don't count,
8957 since if they are the only uses, they are dead. */
8958 if (set != 0 && SET_DEST (set) == reg)
8959 continue;
8960 if (LABEL_P (i2) || JUMP_P (i2))
8961 break;
8962 if ((NONJUMP_INSN_P (i2) || CALL_P (i2))
8963 && reg_mentioned_p (reg, PATTERN (i2)))
8965 /* Some other ref remains; just delete the output reload we
8966 know to be dead. */
8967 delete_address_reloads (output_reload_insn, insn);
8968 delete_insn (output_reload_insn);
8969 return;
8973 /* Delete the now-dead stores into this pseudo. Note that this
8974 loop also takes care of deleting output_reload_insn. */
8975 for (i2 = PREV_INSN (insn); i2; i2 = PREV_INSN (i2))
8977 rtx set = single_set (i2);
8979 if (set != 0 && SET_DEST (set) == reg)
8981 delete_address_reloads (i2, insn);
8982 delete_insn (i2);
8984 if (LABEL_P (i2) || JUMP_P (i2))
8985 break;
8988 /* For the debugging info, say the pseudo lives in this reload reg. */
8989 reg_renumber[REGNO (reg)] = REGNO (new_reload_reg);
8990 if (ira_conflicts_p)
8991 /* Inform IRA about the change. */
8992 ira_mark_allocation_change (REGNO (reg));
8993 alter_reg (REGNO (reg), -1, false);
8995 else
8997 delete_address_reloads (output_reload_insn, insn);
8998 delete_insn (output_reload_insn);
9002 /* We are going to delete DEAD_INSN. Recursively delete loads of
9003 reload registers used in DEAD_INSN that are not used till CURRENT_INSN.
9004 CURRENT_INSN is being reloaded, so we have to check its reloads too. */
9005 static void
9006 delete_address_reloads (rtx dead_insn, rtx current_insn)
9008 rtx set = single_set (dead_insn);
9009 rtx set2, dst, prev, next;
9010 if (set)
9012 rtx dst = SET_DEST (set);
9013 if (MEM_P (dst))
9014 delete_address_reloads_1 (dead_insn, XEXP (dst, 0), current_insn);
9016 /* If we deleted the store from a reloaded post_{in,de}c expression,
9017 we can delete the matching adds. */
9018 prev = PREV_INSN (dead_insn);
9019 next = NEXT_INSN (dead_insn);
9020 if (! prev || ! next)
9021 return;
9022 set = single_set (next);
9023 set2 = single_set (prev);
9024 if (! set || ! set2
9025 || GET_CODE (SET_SRC (set)) != PLUS || GET_CODE (SET_SRC (set2)) != PLUS
9026 || !CONST_INT_P (XEXP (SET_SRC (set), 1))
9027 || !CONST_INT_P (XEXP (SET_SRC (set2), 1)))
9028 return;
9029 dst = SET_DEST (set);
9030 if (! rtx_equal_p (dst, SET_DEST (set2))
9031 || ! rtx_equal_p (dst, XEXP (SET_SRC (set), 0))
9032 || ! rtx_equal_p (dst, XEXP (SET_SRC (set2), 0))
9033 || (INTVAL (XEXP (SET_SRC (set), 1))
9034 != -INTVAL (XEXP (SET_SRC (set2), 1))))
9035 return;
9036 delete_related_insns (prev);
9037 delete_related_insns (next);
9040 /* Subfunction of delete_address_reloads: process registers found in X. */
9041 static void
9042 delete_address_reloads_1 (rtx dead_insn, rtx x, rtx current_insn)
9044 rtx prev, set, dst, i2;
9045 int i, j;
9046 enum rtx_code code = GET_CODE (x);
9048 if (code != REG)
9050 const char *fmt = GET_RTX_FORMAT (code);
9051 for (i = GET_RTX_LENGTH (code) - 1; i >= 0; i--)
9053 if (fmt[i] == 'e')
9054 delete_address_reloads_1 (dead_insn, XEXP (x, i), current_insn);
9055 else if (fmt[i] == 'E')
9057 for (j = XVECLEN (x, i) - 1; j >= 0; j--)
9058 delete_address_reloads_1 (dead_insn, XVECEXP (x, i, j),
9059 current_insn);
9062 return;
9065 if (spill_reg_order[REGNO (x)] < 0)
9066 return;
9068 /* Scan backwards for the insn that sets x. This might be a way back due
9069 to inheritance. */
9070 for (prev = PREV_INSN (dead_insn); prev; prev = PREV_INSN (prev))
9072 code = GET_CODE (prev);
9073 if (code == CODE_LABEL || code == JUMP_INSN)
9074 return;
9075 if (!INSN_P (prev))
9076 continue;
9077 if (reg_set_p (x, PATTERN (prev)))
9078 break;
9079 if (reg_referenced_p (x, PATTERN (prev)))
9080 return;
9082 if (! prev || INSN_UID (prev) < reload_first_uid)
9083 return;
9084 /* Check that PREV only sets the reload register. */
9085 set = single_set (prev);
9086 if (! set)
9087 return;
9088 dst = SET_DEST (set);
9089 if (!REG_P (dst)
9090 || ! rtx_equal_p (dst, x))
9091 return;
9092 if (! reg_set_p (dst, PATTERN (dead_insn)))
9094 /* Check if DST was used in a later insn -
9095 it might have been inherited. */
9096 for (i2 = NEXT_INSN (dead_insn); i2; i2 = NEXT_INSN (i2))
9098 if (LABEL_P (i2))
9099 break;
9100 if (! INSN_P (i2))
9101 continue;
9102 if (reg_referenced_p (dst, PATTERN (i2)))
9104 /* If there is a reference to the register in the current insn,
9105 it might be loaded in a non-inherited reload. If no other
9106 reload uses it, that means the register is set before
9107 referenced. */
9108 if (i2 == current_insn)
9110 for (j = n_reloads - 1; j >= 0; j--)
9111 if ((rld[j].reg_rtx == dst && reload_inherited[j])
9112 || reload_override_in[j] == dst)
9113 return;
9114 for (j = n_reloads - 1; j >= 0; j--)
9115 if (rld[j].in && rld[j].reg_rtx == dst)
9116 break;
9117 if (j >= 0)
9118 break;
9120 return;
9122 if (JUMP_P (i2))
9123 break;
9124 /* If DST is still live at CURRENT_INSN, check if it is used for
9125 any reload. Note that even if CURRENT_INSN sets DST, we still
9126 have to check the reloads. */
9127 if (i2 == current_insn)
9129 for (j = n_reloads - 1; j >= 0; j--)
9130 if ((rld[j].reg_rtx == dst && reload_inherited[j])
9131 || reload_override_in[j] == dst)
9132 return;
9133 /* ??? We can't finish the loop here, because dst might be
9134 allocated to a pseudo in this block if no reload in this
9135 block needs any of the classes containing DST - see
9136 spill_hard_reg. There is no easy way to tell this, so we
9137 have to scan till the end of the basic block. */
9139 if (reg_set_p (dst, PATTERN (i2)))
9140 break;
9143 delete_address_reloads_1 (prev, SET_SRC (set), current_insn);
9144 reg_reloaded_contents[REGNO (dst)] = -1;
9145 delete_insn (prev);
9148 /* Output reload-insns to reload VALUE into RELOADREG.
9149 VALUE is an autoincrement or autodecrement RTX whose operand
9150 is a register or memory location;
9151 so reloading involves incrementing that location.
9152 IN is either identical to VALUE, or some cheaper place to reload from.
9154 INC_AMOUNT is the number to increment or decrement by (always positive).
9155 This cannot be deduced from VALUE. */
9157 static void
9158 inc_for_reload (rtx reloadreg, rtx in, rtx value, int inc_amount)
9160 /* REG or MEM to be copied and incremented. */
9161 rtx incloc = find_replacement (&XEXP (value, 0));
9162 /* Nonzero if increment after copying. */
9163 int post = (GET_CODE (value) == POST_DEC || GET_CODE (value) == POST_INC
9164 || GET_CODE (value) == POST_MODIFY);
9165 rtx last;
9166 rtx inc;
9167 rtx add_insn;
9168 int code;
9169 rtx real_in = in == value ? incloc : in;
9171 /* No hard register is equivalent to this register after
9172 inc/dec operation. If REG_LAST_RELOAD_REG were nonzero,
9173 we could inc/dec that register as well (maybe even using it for
9174 the source), but I'm not sure it's worth worrying about. */
9175 if (REG_P (incloc))
9176 reg_last_reload_reg[REGNO (incloc)] = 0;
9178 if (GET_CODE (value) == PRE_MODIFY || GET_CODE (value) == POST_MODIFY)
9180 gcc_assert (GET_CODE (XEXP (value, 1)) == PLUS);
9181 inc = find_replacement (&XEXP (XEXP (value, 1), 1));
9183 else
9185 if (GET_CODE (value) == PRE_DEC || GET_CODE (value) == POST_DEC)
9186 inc_amount = -inc_amount;
9188 inc = GEN_INT (inc_amount);
9191 /* If this is post-increment, first copy the location to the reload reg. */
9192 if (post && real_in != reloadreg)
9193 emit_insn (gen_move_insn (reloadreg, real_in));
9195 if (in == value)
9197 /* See if we can directly increment INCLOC. Use a method similar to
9198 that in gen_reload. */
9200 last = get_last_insn ();
9201 add_insn = emit_insn (gen_rtx_SET (VOIDmode, incloc,
9202 gen_rtx_PLUS (GET_MODE (incloc),
9203 incloc, inc)));
9205 code = recog_memoized (add_insn);
9206 if (code >= 0)
9208 extract_insn (add_insn);
9209 if (constrain_operands (1))
9211 /* If this is a pre-increment and we have incremented the value
9212 where it lives, copy the incremented value to RELOADREG to
9213 be used as an address. */
9215 if (! post)
9216 emit_insn (gen_move_insn (reloadreg, incloc));
9217 return;
9220 delete_insns_since (last);
9223 /* If couldn't do the increment directly, must increment in RELOADREG.
9224 The way we do this depends on whether this is pre- or post-increment.
9225 For pre-increment, copy INCLOC to the reload register, increment it
9226 there, then save back. */
9228 if (! post)
9230 if (in != reloadreg)
9231 emit_insn (gen_move_insn (reloadreg, real_in));
9232 emit_insn (gen_add2_insn (reloadreg, inc));
9233 emit_insn (gen_move_insn (incloc, reloadreg));
9235 else
9237 /* Postincrement.
9238 Because this might be a jump insn or a compare, and because RELOADREG
9239 may not be available after the insn in an input reload, we must do
9240 the incrementation before the insn being reloaded for.
9242 We have already copied IN to RELOADREG. Increment the copy in
9243 RELOADREG, save that back, then decrement RELOADREG so it has
9244 the original value. */
9246 emit_insn (gen_add2_insn (reloadreg, inc));
9247 emit_insn (gen_move_insn (incloc, reloadreg));
9248 if (CONST_INT_P (inc))
9249 emit_insn (gen_add2_insn (reloadreg,
9250 gen_int_mode (-INTVAL (inc),
9251 GET_MODE (reloadreg))));
9252 else
9253 emit_insn (gen_sub2_insn (reloadreg, inc));
9257 #ifdef AUTO_INC_DEC
9258 static void
9259 add_auto_inc_notes (rtx insn, rtx x)
9261 enum rtx_code code = GET_CODE (x);
9262 const char *fmt;
9263 int i, j;
9265 if (code == MEM && auto_inc_p (XEXP (x, 0)))
9267 add_reg_note (insn, REG_INC, XEXP (XEXP (x, 0), 0));
9268 return;
9271 /* Scan all the operand sub-expressions. */
9272 fmt = GET_RTX_FORMAT (code);
9273 for (i = GET_RTX_LENGTH (code) - 1; i >= 0; i--)
9275 if (fmt[i] == 'e')
9276 add_auto_inc_notes (insn, XEXP (x, i));
9277 else if (fmt[i] == 'E')
9278 for (j = XVECLEN (x, i) - 1; j >= 0; j--)
9279 add_auto_inc_notes (insn, XVECEXP (x, i, j));
9282 #endif