* gcc.h (lang_specific_driver): Constify second argument.
[official-gcc.git] / gcc / reload1.c
blob35fbc9ecac7a2f77a164c7c6dd6731e881e11708
1 /* Reload pseudo regs into hard regs for insns that require hard regs.
2 Copyright (C) 1987, 1988, 1989, 1992, 1993, 1994, 1995, 1996, 1997, 1998,
3 1999, 2000 Free Software Foundation, Inc.
5 This file is part of GNU CC.
7 GNU CC is free software; you can redistribute it and/or modify
8 it under the terms of the GNU General Public License as published by
9 the Free Software Foundation; either version 2, or (at your option)
10 any later version.
12 GNU CC is distributed in the hope that it will be useful,
13 but WITHOUT ANY WARRANTY; without even the implied warranty of
14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 GNU General Public License for more details.
17 You should have received a copy of the GNU General Public License
18 along with GNU CC; see the file COPYING. If not, write to
19 the Free Software Foundation, 59 Temple Place - Suite 330,
20 Boston, MA 02111-1307, USA. */
23 #include "config.h"
24 #include "system.h"
26 #include "machmode.h"
27 #include "hard-reg-set.h"
28 #include "rtl.h"
29 #include "tm_p.h"
30 #include "obstack.h"
31 #include "insn-config.h"
32 #include "insn-flags.h"
33 #include "insn-codes.h"
34 #include "flags.h"
35 #include "function.h"
36 #include "expr.h"
37 #include "regs.h"
38 #include "basic-block.h"
39 #include "reload.h"
40 #include "recog.h"
41 #include "output.h"
42 #include "cselib.h"
43 #include "real.h"
44 #include "toplev.h"
46 #if !defined PREFERRED_STACK_BOUNDARY && defined STACK_BOUNDARY
47 #define PREFERRED_STACK_BOUNDARY STACK_BOUNDARY
48 #endif
50 /* This file contains the reload pass of the compiler, which is
51 run after register allocation has been done. It checks that
52 each insn is valid (operands required to be in registers really
53 are in registers of the proper class) and fixes up invalid ones
54 by copying values temporarily into registers for the insns
55 that need them.
57 The results of register allocation are described by the vector
58 reg_renumber; the insns still contain pseudo regs, but reg_renumber
59 can be used to find which hard reg, if any, a pseudo reg is in.
61 The technique we always use is to free up a few hard regs that are
62 called ``reload regs'', and for each place where a pseudo reg
63 must be in a hard reg, copy it temporarily into one of the reload regs.
65 Reload regs are allocated locally for every instruction that needs
66 reloads. When there are pseudos which are allocated to a register that
67 has been chosen as a reload reg, such pseudos must be ``spilled''.
68 This means that they go to other hard regs, or to stack slots if no other
69 available hard regs can be found. Spilling can invalidate more
70 insns, requiring additional need for reloads, so we must keep checking
71 until the process stabilizes.
73 For machines with different classes of registers, we must keep track
74 of the register class needed for each reload, and make sure that
75 we allocate enough reload registers of each class.
77 The file reload.c contains the code that checks one insn for
78 validity and reports the reloads that it needs. This file
79 is in charge of scanning the entire rtl code, accumulating the
80 reload needs, spilling, assigning reload registers to use for
81 fixing up each insn, and generating the new insns to copy values
82 into the reload registers. */
85 #ifndef REGISTER_MOVE_COST
86 #define REGISTER_MOVE_COST(x, y) 2
87 #endif
89 /* During reload_as_needed, element N contains a REG rtx for the hard reg
90 into which reg N has been reloaded (perhaps for a previous insn). */
91 static rtx *reg_last_reload_reg;
93 /* Elt N nonzero if reg_last_reload_reg[N] has been set in this insn
94 for an output reload that stores into reg N. */
95 static char *reg_has_output_reload;
97 /* Indicates which hard regs are reload-registers for an output reload
98 in the current insn. */
99 static HARD_REG_SET reg_is_output_reload;
101 /* Element N is the constant value to which pseudo reg N is equivalent,
102 or zero if pseudo reg N is not equivalent to a constant.
103 find_reloads looks at this in order to replace pseudo reg N
104 with the constant it stands for. */
105 rtx *reg_equiv_constant;
107 /* Element N is a memory location to which pseudo reg N is equivalent,
108 prior to any register elimination (such as frame pointer to stack
109 pointer). Depending on whether or not it is a valid address, this value
110 is transferred to either reg_equiv_address or reg_equiv_mem. */
111 rtx *reg_equiv_memory_loc;
113 /* Element N is the address of stack slot to which pseudo reg N is equivalent.
114 This is used when the address is not valid as a memory address
115 (because its displacement is too big for the machine.) */
116 rtx *reg_equiv_address;
118 /* Element N is the memory slot to which pseudo reg N is equivalent,
119 or zero if pseudo reg N is not equivalent to a memory slot. */
120 rtx *reg_equiv_mem;
122 /* Widest width in which each pseudo reg is referred to (via subreg). */
123 static unsigned int *reg_max_ref_width;
125 /* Element N is the list of insns that initialized reg N from its equivalent
126 constant or memory slot. */
127 static rtx *reg_equiv_init;
129 /* Vector to remember old contents of reg_renumber before spilling. */
130 static short *reg_old_renumber;
132 /* During reload_as_needed, element N contains the last pseudo regno reloaded
133 into hard register N. If that pseudo reg occupied more than one register,
134 reg_reloaded_contents points to that pseudo for each spill register in
135 use; all of these must remain set for an inheritance to occur. */
136 static int reg_reloaded_contents[FIRST_PSEUDO_REGISTER];
138 /* During reload_as_needed, element N contains the insn for which
139 hard register N was last used. Its contents are significant only
140 when reg_reloaded_valid is set for this register. */
141 static rtx reg_reloaded_insn[FIRST_PSEUDO_REGISTER];
143 /* Indicate if reg_reloaded_insn / reg_reloaded_contents is valid */
144 static HARD_REG_SET reg_reloaded_valid;
145 /* Indicate if the register was dead at the end of the reload.
146 This is only valid if reg_reloaded_contents is set and valid. */
147 static HARD_REG_SET reg_reloaded_dead;
149 /* Number of spill-regs so far; number of valid elements of spill_regs. */
150 static int n_spills;
152 /* In parallel with spill_regs, contains REG rtx's for those regs.
153 Holds the last rtx used for any given reg, or 0 if it has never
154 been used for spilling yet. This rtx is reused, provided it has
155 the proper mode. */
156 static rtx spill_reg_rtx[FIRST_PSEUDO_REGISTER];
158 /* In parallel with spill_regs, contains nonzero for a spill reg
159 that was stored after the last time it was used.
160 The precise value is the insn generated to do the store. */
161 static rtx spill_reg_store[FIRST_PSEUDO_REGISTER];
163 /* This is the register that was stored with spill_reg_store. This is a
164 copy of reload_out / reload_out_reg when the value was stored; if
165 reload_out is a MEM, spill_reg_stored_to will be set to reload_out_reg. */
166 static rtx spill_reg_stored_to[FIRST_PSEUDO_REGISTER];
168 /* This table is the inverse mapping of spill_regs:
169 indexed by hard reg number,
170 it contains the position of that reg in spill_regs,
171 or -1 for something that is not in spill_regs.
173 ?!? This is no longer accurate. */
174 static short spill_reg_order[FIRST_PSEUDO_REGISTER];
176 /* This reg set indicates registers that can't be used as spill registers for
177 the currently processed insn. These are the hard registers which are live
178 during the insn, but not allocated to pseudos, as well as fixed
179 registers. */
180 static HARD_REG_SET bad_spill_regs;
182 /* These are the hard registers that can't be used as spill register for any
183 insn. This includes registers used for user variables and registers that
184 we can't eliminate. A register that appears in this set also can't be used
185 to retry register allocation. */
186 static HARD_REG_SET bad_spill_regs_global;
188 /* Describes order of use of registers for reloading
189 of spilled pseudo-registers. `n_spills' is the number of
190 elements that are actually valid; new ones are added at the end.
192 Both spill_regs and spill_reg_order are used on two occasions:
193 once during find_reload_regs, where they keep track of the spill registers
194 for a single insn, but also during reload_as_needed where they show all
195 the registers ever used by reload. For the latter case, the information
196 is calculated during finish_spills. */
197 static short spill_regs[FIRST_PSEUDO_REGISTER];
199 /* This vector of reg sets indicates, for each pseudo, which hard registers
200 may not be used for retrying global allocation because the register was
201 formerly spilled from one of them. If we allowed reallocating a pseudo to
202 a register that it was already allocated to, reload might not
203 terminate. */
204 static HARD_REG_SET *pseudo_previous_regs;
206 /* This vector of reg sets indicates, for each pseudo, which hard
207 registers may not be used for retrying global allocation because they
208 are used as spill registers during one of the insns in which the
209 pseudo is live. */
210 static HARD_REG_SET *pseudo_forbidden_regs;
212 /* All hard regs that have been used as spill registers for any insn are
213 marked in this set. */
214 static HARD_REG_SET used_spill_regs;
216 /* Index of last register assigned as a spill register. We allocate in
217 a round-robin fashion. */
218 static int last_spill_reg;
220 /* Nonzero if indirect addressing is supported on the machine; this means
221 that spilling (REG n) does not require reloading it into a register in
222 order to do (MEM (REG n)) or (MEM (PLUS (REG n) (CONST_INT c))). The
223 value indicates the level of indirect addressing supported, e.g., two
224 means that (MEM (MEM (REG n))) is also valid if (REG n) does not get
225 a hard register. */
226 static char spill_indirect_levels;
228 /* Nonzero if indirect addressing is supported when the innermost MEM is
229 of the form (MEM (SYMBOL_REF sym)). It is assumed that the level to
230 which these are valid is the same as spill_indirect_levels, above. */
231 char indirect_symref_ok;
233 /* Nonzero if an address (plus (reg frame_pointer) (reg ...)) is valid. */
234 char double_reg_address_ok;
236 /* Record the stack slot for each spilled hard register. */
237 static rtx spill_stack_slot[FIRST_PSEUDO_REGISTER];
239 /* Width allocated so far for that stack slot. */
240 static unsigned int spill_stack_slot_width[FIRST_PSEUDO_REGISTER];
242 /* Record which pseudos needed to be spilled. */
243 static regset_head spilled_pseudos;
245 /* Used for communication between order_regs_for_reload and count_pseudo.
246 Used to avoid counting one pseudo twice. */
247 static regset_head pseudos_counted;
249 /* First uid used by insns created by reload in this function.
250 Used in find_equiv_reg. */
251 int reload_first_uid;
253 /* Flag set by local-alloc or global-alloc if anything is live in
254 a call-clobbered reg across calls. */
255 int caller_save_needed;
257 /* Set to 1 while reload_as_needed is operating.
258 Required by some machines to handle any generated moves differently. */
259 int reload_in_progress = 0;
261 /* These arrays record the insn_code of insns that may be needed to
262 perform input and output reloads of special objects. They provide a
263 place to pass a scratch register. */
264 enum insn_code reload_in_optab[NUM_MACHINE_MODES];
265 enum insn_code reload_out_optab[NUM_MACHINE_MODES];
267 /* This obstack is used for allocation of rtl during register elimination.
268 The allocated storage can be freed once find_reloads has processed the
269 insn. */
270 struct obstack reload_obstack;
272 /* Points to the beginning of the reload_obstack. All insn_chain structures
273 are allocated first. */
274 char *reload_startobj;
276 /* The point after all insn_chain structures. Used to quickly deallocate
277 memory allocated in copy_reloads during calculate_needs_all_insns. */
278 char *reload_firstobj;
280 /* This points before all local rtl generated by register elimination.
281 Used to quickly free all memory after processing one insn. */
282 static char *reload_insn_firstobj;
284 #define obstack_chunk_alloc xmalloc
285 #define obstack_chunk_free free
287 /* List of insn_chain instructions, one for every insn that reload needs to
288 examine. */
289 struct insn_chain *reload_insn_chain;
291 #ifdef TREE_CODE
292 extern tree current_function_decl;
293 #else
294 extern union tree_node *current_function_decl;
295 #endif
297 /* List of all insns needing reloads. */
298 static struct insn_chain *insns_need_reload;
300 /* This structure is used to record information about register eliminations.
301 Each array entry describes one possible way of eliminating a register
302 in favor of another. If there is more than one way of eliminating a
303 particular register, the most preferred should be specified first. */
305 struct elim_table
307 int from; /* Register number to be eliminated. */
308 int to; /* Register number used as replacement. */
309 int initial_offset; /* Initial difference between values. */
310 int can_eliminate; /* Non-zero if this elimination can be done. */
311 int can_eliminate_previous; /* Value of CAN_ELIMINATE in previous scan over
312 insns made by reload. */
313 int offset; /* Current offset between the two regs. */
314 int previous_offset; /* Offset at end of previous insn. */
315 int ref_outside_mem; /* "to" has been referenced outside a MEM. */
316 rtx from_rtx; /* REG rtx for the register to be eliminated.
317 We cannot simply compare the number since
318 we might then spuriously replace a hard
319 register corresponding to a pseudo
320 assigned to the reg to be eliminated. */
321 rtx to_rtx; /* REG rtx for the replacement. */
324 static struct elim_table * reg_eliminate = 0;
326 /* This is an intermediate structure to initialize the table. It has
327 exactly the members provided by ELIMINABLE_REGS. */
328 static struct elim_table_1
330 int from;
331 int to;
332 } reg_eliminate_1[] =
334 /* If a set of eliminable registers was specified, define the table from it.
335 Otherwise, default to the normal case of the frame pointer being
336 replaced by the stack pointer. */
338 #ifdef ELIMINABLE_REGS
339 ELIMINABLE_REGS;
340 #else
341 {{ FRAME_POINTER_REGNUM, STACK_POINTER_REGNUM}};
342 #endif
344 #define NUM_ELIMINABLE_REGS (sizeof reg_eliminate_1/sizeof reg_eliminate_1[0])
346 /* Record the number of pending eliminations that have an offset not equal
347 to their initial offset. If non-zero, we use a new copy of each
348 replacement result in any insns encountered. */
349 int num_not_at_initial_offset;
351 /* Count the number of registers that we may be able to eliminate. */
352 static int num_eliminable;
353 /* And the number of registers that are equivalent to a constant that
354 can be eliminated to frame_pointer / arg_pointer + constant. */
355 static int num_eliminable_invariants;
357 /* For each label, we record the offset of each elimination. If we reach
358 a label by more than one path and an offset differs, we cannot do the
359 elimination. This information is indexed by the number of the label.
360 The first table is an array of flags that records whether we have yet
361 encountered a label and the second table is an array of arrays, one
362 entry in the latter array for each elimination. */
364 static char *offsets_known_at;
365 static int (*offsets_at)[NUM_ELIMINABLE_REGS];
367 /* Number of labels in the current function. */
369 static int num_labels;
371 static void maybe_fix_stack_asms PARAMS ((void));
372 static void copy_reloads PARAMS ((struct insn_chain *));
373 static void calculate_needs_all_insns PARAMS ((int));
374 static int find_reg PARAMS ((struct insn_chain *, int,
375 FILE *));
376 static void find_reload_regs PARAMS ((struct insn_chain *, FILE *));
377 static void select_reload_regs PARAMS ((FILE *));
378 static void delete_caller_save_insns PARAMS ((void));
380 static void spill_failure PARAMS ((rtx, enum reg_class));
381 static void count_spilled_pseudo PARAMS ((int, int, int));
382 static void delete_dead_insn PARAMS ((rtx));
383 static void alter_reg PARAMS ((int, int));
384 static void set_label_offsets PARAMS ((rtx, rtx, int));
385 static void check_eliminable_occurrences PARAMS ((rtx));
386 static void elimination_effects PARAMS ((rtx, enum machine_mode));
387 static int eliminate_regs_in_insn PARAMS ((rtx, int));
388 static void update_eliminable_offsets PARAMS ((void));
389 static void mark_not_eliminable PARAMS ((rtx, rtx, void *));
390 static void set_initial_elim_offsets PARAMS ((void));
391 static void verify_initial_elim_offsets PARAMS ((void));
392 static void set_initial_label_offsets PARAMS ((void));
393 static void set_offsets_for_label PARAMS ((rtx));
394 static void init_elim_table PARAMS ((void));
395 static void update_eliminables PARAMS ((HARD_REG_SET *));
396 static void spill_hard_reg PARAMS ((unsigned int, FILE *, int));
397 static int finish_spills PARAMS ((int, FILE *));
398 static void ior_hard_reg_set PARAMS ((HARD_REG_SET *, HARD_REG_SET *));
399 static void scan_paradoxical_subregs PARAMS ((rtx));
400 static void count_pseudo PARAMS ((int));
401 static void order_regs_for_reload PARAMS ((struct insn_chain *));
402 static void reload_as_needed PARAMS ((int));
403 static void forget_old_reloads_1 PARAMS ((rtx, rtx, void *));
404 static int reload_reg_class_lower PARAMS ((const PTR, const PTR));
405 static void mark_reload_reg_in_use PARAMS ((unsigned int, int,
406 enum reload_type,
407 enum machine_mode));
408 static void clear_reload_reg_in_use PARAMS ((unsigned int, int,
409 enum reload_type,
410 enum machine_mode));
411 static int reload_reg_free_p PARAMS ((unsigned int, int,
412 enum reload_type));
413 static int reload_reg_free_for_value_p PARAMS ((int, int, enum reload_type,
414 rtx, rtx, int, int));
415 static int reload_reg_reaches_end_p PARAMS ((unsigned int, int,
416 enum reload_type));
417 static int allocate_reload_reg PARAMS ((struct insn_chain *, int,
418 int));
419 static void failed_reload PARAMS ((rtx, int));
420 static int set_reload_reg PARAMS ((int, int));
421 static void choose_reload_regs_init PARAMS ((struct insn_chain *, rtx *));
422 static void choose_reload_regs PARAMS ((struct insn_chain *));
423 static void merge_assigned_reloads PARAMS ((rtx));
424 static void emit_input_reload_insns PARAMS ((struct insn_chain *,
425 struct reload *, rtx, int));
426 static void emit_output_reload_insns PARAMS ((struct insn_chain *,
427 struct reload *, int));
428 static void do_input_reload PARAMS ((struct insn_chain *,
429 struct reload *, int));
430 static void do_output_reload PARAMS ((struct insn_chain *,
431 struct reload *, int));
432 static void emit_reload_insns PARAMS ((struct insn_chain *));
433 static void delete_output_reload PARAMS ((rtx, int, int));
434 static void delete_address_reloads PARAMS ((rtx, rtx));
435 static void delete_address_reloads_1 PARAMS ((rtx, rtx, rtx));
436 static rtx inc_for_reload PARAMS ((rtx, rtx, rtx, int));
437 static int constraint_accepts_reg_p PARAMS ((const char *, rtx));
438 static void reload_cse_regs_1 PARAMS ((rtx));
439 static int reload_cse_noop_set_p PARAMS ((rtx));
440 static int reload_cse_simplify_set PARAMS ((rtx, rtx));
441 static int reload_cse_simplify_operands PARAMS ((rtx));
442 static void reload_combine PARAMS ((void));
443 static void reload_combine_note_use PARAMS ((rtx *, rtx));
444 static void reload_combine_note_store PARAMS ((rtx, rtx, void *));
445 static void reload_cse_move2add PARAMS ((rtx));
446 static void move2add_note_store PARAMS ((rtx, rtx, void *));
447 #ifdef AUTO_INC_DEC
448 static void add_auto_inc_notes PARAMS ((rtx, rtx));
449 #endif
450 static rtx gen_mode_int PARAMS ((enum machine_mode,
451 HOST_WIDE_INT));
452 static void failed_reload PARAMS ((rtx, int));
453 static int set_reload_reg PARAMS ((int, int));
454 static void reload_cse_delete_noop_set PARAMS ((rtx, rtx));
455 static void reload_cse_simplify PARAMS ((rtx));
456 extern void dump_needs PARAMS ((struct insn_chain *, FILE *));
458 /* Initialize the reload pass once per compilation. */
460 void
461 init_reload ()
463 register int i;
465 /* Often (MEM (REG n)) is still valid even if (REG n) is put on the stack.
466 Set spill_indirect_levels to the number of levels such addressing is
467 permitted, zero if it is not permitted at all. */
469 register rtx tem
470 = gen_rtx_MEM (Pmode,
471 gen_rtx_PLUS (Pmode,
472 gen_rtx_REG (Pmode,
473 LAST_VIRTUAL_REGISTER + 1),
474 GEN_INT (4)));
475 spill_indirect_levels = 0;
477 while (memory_address_p (QImode, tem))
479 spill_indirect_levels++;
480 tem = gen_rtx_MEM (Pmode, tem);
483 /* See if indirect addressing is valid for (MEM (SYMBOL_REF ...)). */
485 tem = gen_rtx_MEM (Pmode, gen_rtx_SYMBOL_REF (Pmode, "foo"));
486 indirect_symref_ok = memory_address_p (QImode, tem);
488 /* See if reg+reg is a valid (and offsettable) address. */
490 for (i = 0; i < FIRST_PSEUDO_REGISTER; i++)
492 tem = gen_rtx_PLUS (Pmode,
493 gen_rtx_REG (Pmode, HARD_FRAME_POINTER_REGNUM),
494 gen_rtx_REG (Pmode, i));
496 /* This way, we make sure that reg+reg is an offsettable address. */
497 tem = plus_constant (tem, 4);
499 if (memory_address_p (QImode, tem))
501 double_reg_address_ok = 1;
502 break;
506 /* Initialize obstack for our rtl allocation. */
507 gcc_obstack_init (&reload_obstack);
508 reload_startobj = (char *) obstack_alloc (&reload_obstack, 0);
510 INIT_REG_SET (&spilled_pseudos);
511 INIT_REG_SET (&pseudos_counted);
514 /* List of insn chains that are currently unused. */
515 static struct insn_chain *unused_insn_chains = 0;
517 /* Allocate an empty insn_chain structure. */
518 struct insn_chain *
519 new_insn_chain ()
521 struct insn_chain *c;
523 if (unused_insn_chains == 0)
525 c = (struct insn_chain *)
526 obstack_alloc (&reload_obstack, sizeof (struct insn_chain));
527 INIT_REG_SET (&c->live_throughout);
528 INIT_REG_SET (&c->dead_or_set);
530 else
532 c = unused_insn_chains;
533 unused_insn_chains = c->next;
535 c->is_caller_save_insn = 0;
536 c->need_operand_change = 0;
537 c->need_reload = 0;
538 c->need_elim = 0;
539 return c;
542 /* Small utility function to set all regs in hard reg set TO which are
543 allocated to pseudos in regset FROM. */
545 void
546 compute_use_by_pseudos (to, from)
547 HARD_REG_SET *to;
548 regset from;
550 unsigned int regno;
552 EXECUTE_IF_SET_IN_REG_SET
553 (from, FIRST_PSEUDO_REGISTER, regno,
555 int r = reg_renumber[regno];
556 int nregs;
558 if (r < 0)
560 /* reload_combine uses the information from
561 BASIC_BLOCK->global_live_at_start, which might still
562 contain registers that have not actually been allocated
563 since they have an equivalence. */
564 if (! reload_completed)
565 abort ();
567 else
569 nregs = HARD_REGNO_NREGS (r, PSEUDO_REGNO_MODE (regno));
570 while (nregs-- > 0)
571 SET_HARD_REG_BIT (*to, r + nregs);
576 /* Global variables used by reload and its subroutines. */
578 /* Set during calculate_needs if an insn needs register elimination. */
579 static int something_needs_elimination;
580 /* Set during calculate_needs if an insn needs an operand changed. */
581 int something_needs_operands_changed;
583 /* Nonzero means we couldn't get enough spill regs. */
584 static int failure;
586 /* Main entry point for the reload pass.
588 FIRST is the first insn of the function being compiled.
590 GLOBAL nonzero means we were called from global_alloc
591 and should attempt to reallocate any pseudoregs that we
592 displace from hard regs we will use for reloads.
593 If GLOBAL is zero, we do not have enough information to do that,
594 so any pseudo reg that is spilled must go to the stack.
596 DUMPFILE is the global-reg debugging dump file stream, or 0.
597 If it is nonzero, messages are written to it to describe
598 which registers are seized as reload regs, which pseudo regs
599 are spilled from them, and where the pseudo regs are reallocated to.
601 Return value is nonzero if reload failed
602 and we must not do any more for this function. */
605 reload (first, global, dumpfile)
606 rtx first;
607 int global;
608 FILE *dumpfile;
610 register int i;
611 register rtx insn;
612 register struct elim_table *ep;
614 /* The two pointers used to track the true location of the memory used
615 for label offsets. */
616 char *real_known_ptr = NULL_PTR;
617 int (*real_at_ptr)[NUM_ELIMINABLE_REGS];
619 /* Make sure even insns with volatile mem refs are recognizable. */
620 init_recog ();
622 failure = 0;
624 reload_firstobj = (char *) obstack_alloc (&reload_obstack, 0);
626 /* Make sure that the last insn in the chain
627 is not something that needs reloading. */
628 emit_note (NULL_PTR, NOTE_INSN_DELETED);
630 /* Enable find_equiv_reg to distinguish insns made by reload. */
631 reload_first_uid = get_max_uid ();
633 #ifdef SECONDARY_MEMORY_NEEDED
634 /* Initialize the secondary memory table. */
635 clear_secondary_mem ();
636 #endif
638 /* We don't have a stack slot for any spill reg yet. */
639 bzero ((char *) spill_stack_slot, sizeof spill_stack_slot);
640 bzero ((char *) spill_stack_slot_width, sizeof spill_stack_slot_width);
642 /* Initialize the save area information for caller-save, in case some
643 are needed. */
644 init_save_areas ();
646 /* Compute which hard registers are now in use
647 as homes for pseudo registers.
648 This is done here rather than (eg) in global_alloc
649 because this point is reached even if not optimizing. */
650 for (i = FIRST_PSEUDO_REGISTER; i < max_regno; i++)
651 mark_home_live (i);
653 /* A function that receives a nonlocal goto must save all call-saved
654 registers. */
655 if (current_function_has_nonlocal_label)
656 for (i = 0; i < FIRST_PSEUDO_REGISTER; i++)
658 if (! call_used_regs[i] && ! fixed_regs[i])
659 regs_ever_live[i] = 1;
662 /* Find all the pseudo registers that didn't get hard regs
663 but do have known equivalent constants or memory slots.
664 These include parameters (known equivalent to parameter slots)
665 and cse'd or loop-moved constant memory addresses.
667 Record constant equivalents in reg_equiv_constant
668 so they will be substituted by find_reloads.
669 Record memory equivalents in reg_mem_equiv so they can
670 be substituted eventually by altering the REG-rtx's. */
672 reg_equiv_constant = (rtx *) xcalloc (max_regno, sizeof (rtx));
673 reg_equiv_memory_loc = (rtx *) xcalloc (max_regno, sizeof (rtx));
674 reg_equiv_mem = (rtx *) xcalloc (max_regno, sizeof (rtx));
675 reg_equiv_init = (rtx *) xcalloc (max_regno, sizeof (rtx));
676 reg_equiv_address = (rtx *) xcalloc (max_regno, sizeof (rtx));
677 reg_max_ref_width = (unsigned int *) xcalloc (max_regno, sizeof (int));
678 reg_old_renumber = (short *) xcalloc (max_regno, sizeof (short));
679 bcopy ((PTR) reg_renumber, (PTR) reg_old_renumber, max_regno * sizeof (short));
680 pseudo_forbidden_regs
681 = (HARD_REG_SET *) xmalloc (max_regno * sizeof (HARD_REG_SET));
682 pseudo_previous_regs
683 = (HARD_REG_SET *) xcalloc (max_regno, sizeof (HARD_REG_SET));
685 CLEAR_HARD_REG_SET (bad_spill_regs_global);
687 /* Look for REG_EQUIV notes; record what each pseudo is equivalent to.
688 Also find all paradoxical subregs and find largest such for each pseudo.
689 On machines with small register classes, record hard registers that
690 are used for user variables. These can never be used for spills.
691 Also look for a "constant" NOTE_INSN_SETJMP. This means that all
692 caller-saved registers must be marked live. */
694 num_eliminable_invariants = 0;
695 for (insn = first; insn; insn = NEXT_INSN (insn))
697 rtx set = single_set (insn);
699 if (GET_CODE (insn) == NOTE && CONST_CALL_P (insn)
700 && NOTE_LINE_NUMBER (insn) == NOTE_INSN_SETJMP)
701 for (i = 0; i < FIRST_PSEUDO_REGISTER; i++)
702 if (! call_used_regs[i])
703 regs_ever_live[i] = 1;
705 if (set != 0 && GET_CODE (SET_DEST (set)) == REG)
707 rtx note = find_reg_note (insn, REG_EQUIV, NULL_RTX);
708 if (note
709 #ifdef LEGITIMATE_PIC_OPERAND_P
710 && (! function_invariant_p (XEXP (note, 0))
711 || ! flag_pic
712 || LEGITIMATE_PIC_OPERAND_P (XEXP (note, 0)))
713 #endif
716 rtx x = XEXP (note, 0);
717 i = REGNO (SET_DEST (set));
718 if (i > LAST_VIRTUAL_REGISTER)
720 if (GET_CODE (x) == MEM)
722 /* If the operand is a PLUS, the MEM may be shared,
723 so make sure we have an unshared copy here. */
724 if (GET_CODE (XEXP (x, 0)) == PLUS)
725 x = copy_rtx (x);
727 reg_equiv_memory_loc[i] = x;
729 else if (function_invariant_p (x))
731 if (GET_CODE (x) == PLUS)
733 /* This is PLUS of frame pointer and a constant,
734 and might be shared. Unshare it. */
735 reg_equiv_constant[i] = copy_rtx (x);
736 num_eliminable_invariants++;
738 else if (x == frame_pointer_rtx
739 || x == arg_pointer_rtx)
741 reg_equiv_constant[i] = x;
742 num_eliminable_invariants++;
744 else if (LEGITIMATE_CONSTANT_P (x))
745 reg_equiv_constant[i] = x;
746 else
747 reg_equiv_memory_loc[i]
748 = force_const_mem (GET_MODE (SET_DEST (set)), x);
750 else
751 continue;
753 /* If this register is being made equivalent to a MEM
754 and the MEM is not SET_SRC, the equivalencing insn
755 is one with the MEM as a SET_DEST and it occurs later.
756 So don't mark this insn now. */
757 if (GET_CODE (x) != MEM
758 || rtx_equal_p (SET_SRC (set), x))
759 reg_equiv_init[i]
760 = gen_rtx_INSN_LIST (VOIDmode, insn, reg_equiv_init[i]);
765 /* If this insn is setting a MEM from a register equivalent to it,
766 this is the equivalencing insn. */
767 else if (set && GET_CODE (SET_DEST (set)) == MEM
768 && GET_CODE (SET_SRC (set)) == REG
769 && reg_equiv_memory_loc[REGNO (SET_SRC (set))]
770 && rtx_equal_p (SET_DEST (set),
771 reg_equiv_memory_loc[REGNO (SET_SRC (set))]))
772 reg_equiv_init[REGNO (SET_SRC (set))]
773 = gen_rtx_INSN_LIST (VOIDmode, insn,
774 reg_equiv_init[REGNO (SET_SRC (set))]);
776 if (GET_RTX_CLASS (GET_CODE (insn)) == 'i')
777 scan_paradoxical_subregs (PATTERN (insn));
780 init_elim_table ();
782 num_labels = max_label_num () - get_first_label_num ();
784 /* Allocate the tables used to store offset information at labels. */
785 /* We used to use alloca here, but the size of what it would try to
786 allocate would occasionally cause it to exceed the stack limit and
787 cause a core dump. */
788 real_known_ptr = xmalloc (num_labels);
789 real_at_ptr
790 = (int (*)[NUM_ELIMINABLE_REGS])
791 xmalloc (num_labels * NUM_ELIMINABLE_REGS * sizeof (int));
793 offsets_known_at = real_known_ptr - get_first_label_num ();
794 offsets_at
795 = (int (*)[NUM_ELIMINABLE_REGS]) (real_at_ptr - get_first_label_num ());
797 /* Alter each pseudo-reg rtx to contain its hard reg number.
798 Assign stack slots to the pseudos that lack hard regs or equivalents.
799 Do not touch virtual registers. */
801 for (i = LAST_VIRTUAL_REGISTER + 1; i < max_regno; i++)
802 alter_reg (i, -1);
804 /* If we have some registers we think can be eliminated, scan all insns to
805 see if there is an insn that sets one of these registers to something
806 other than itself plus a constant. If so, the register cannot be
807 eliminated. Doing this scan here eliminates an extra pass through the
808 main reload loop in the most common case where register elimination
809 cannot be done. */
810 for (insn = first; insn && num_eliminable; insn = NEXT_INSN (insn))
811 if (GET_CODE (insn) == INSN || GET_CODE (insn) == JUMP_INSN
812 || GET_CODE (insn) == CALL_INSN)
813 note_stores (PATTERN (insn), mark_not_eliminable, NULL);
815 maybe_fix_stack_asms ();
817 insns_need_reload = 0;
818 something_needs_elimination = 0;
820 /* Initialize to -1, which means take the first spill register. */
821 last_spill_reg = -1;
823 /* Spill any hard regs that we know we can't eliminate. */
824 CLEAR_HARD_REG_SET (used_spill_regs);
825 for (ep = reg_eliminate; ep < &reg_eliminate[NUM_ELIMINABLE_REGS]; ep++)
826 if (! ep->can_eliminate)
827 spill_hard_reg (ep->from, dumpfile, 1);
829 #if HARD_FRAME_POINTER_REGNUM != FRAME_POINTER_REGNUM
830 if (frame_pointer_needed)
831 spill_hard_reg (HARD_FRAME_POINTER_REGNUM, dumpfile, 1);
832 #endif
833 finish_spills (global, dumpfile);
835 /* From now on, we may need to generate moves differently. We may also
836 allow modifications of insns which cause them to not be recognized.
837 Any such modifications will be cleaned up during reload itself. */
838 reload_in_progress = 1;
840 /* This loop scans the entire function each go-round
841 and repeats until one repetition spills no additional hard regs. */
842 for (;;)
844 int something_changed;
845 int did_spill;
847 HOST_WIDE_INT starting_frame_size;
849 /* Round size of stack frame to stack_alignment_needed. This must be done
850 here because the stack size may be a part of the offset computation
851 for register elimination, and there might have been new stack slots
852 created in the last iteration of this loop. */
853 if (cfun->stack_alignment_needed)
854 assign_stack_local (BLKmode, 0, cfun->stack_alignment_needed);
856 starting_frame_size = get_frame_size ();
858 set_initial_elim_offsets ();
859 set_initial_label_offsets ();
861 /* For each pseudo register that has an equivalent location defined,
862 try to eliminate any eliminable registers (such as the frame pointer)
863 assuming initial offsets for the replacement register, which
864 is the normal case.
866 If the resulting location is directly addressable, substitute
867 the MEM we just got directly for the old REG.
869 If it is not addressable but is a constant or the sum of a hard reg
870 and constant, it is probably not addressable because the constant is
871 out of range, in that case record the address; we will generate
872 hairy code to compute the address in a register each time it is
873 needed. Similarly if it is a hard register, but one that is not
874 valid as an address register.
876 If the location is not addressable, but does not have one of the
877 above forms, assign a stack slot. We have to do this to avoid the
878 potential of producing lots of reloads if, e.g., a location involves
879 a pseudo that didn't get a hard register and has an equivalent memory
880 location that also involves a pseudo that didn't get a hard register.
882 Perhaps at some point we will improve reload_when_needed handling
883 so this problem goes away. But that's very hairy. */
885 for (i = FIRST_PSEUDO_REGISTER; i < max_regno; i++)
886 if (reg_renumber[i] < 0 && reg_equiv_memory_loc[i])
888 rtx x = eliminate_regs (reg_equiv_memory_loc[i], 0, NULL_RTX);
890 if (strict_memory_address_p (GET_MODE (regno_reg_rtx[i]),
891 XEXP (x, 0)))
892 reg_equiv_mem[i] = x, reg_equiv_address[i] = 0;
893 else if (CONSTANT_P (XEXP (x, 0))
894 || (GET_CODE (XEXP (x, 0)) == REG
895 && REGNO (XEXP (x, 0)) < FIRST_PSEUDO_REGISTER)
896 || (GET_CODE (XEXP (x, 0)) == PLUS
897 && GET_CODE (XEXP (XEXP (x, 0), 0)) == REG
898 && (REGNO (XEXP (XEXP (x, 0), 0))
899 < FIRST_PSEUDO_REGISTER)
900 && CONSTANT_P (XEXP (XEXP (x, 0), 1))))
901 reg_equiv_address[i] = XEXP (x, 0), reg_equiv_mem[i] = 0;
902 else
904 /* Make a new stack slot. Then indicate that something
905 changed so we go back and recompute offsets for
906 eliminable registers because the allocation of memory
907 below might change some offset. reg_equiv_{mem,address}
908 will be set up for this pseudo on the next pass around
909 the loop. */
910 reg_equiv_memory_loc[i] = 0;
911 reg_equiv_init[i] = 0;
912 alter_reg (i, -1);
916 if (caller_save_needed)
917 setup_save_areas ();
919 /* If we allocated another stack slot, redo elimination bookkeeping. */
920 if (starting_frame_size != get_frame_size ())
921 continue;
923 if (caller_save_needed)
925 save_call_clobbered_regs ();
926 /* That might have allocated new insn_chain structures. */
927 reload_firstobj = (char *) obstack_alloc (&reload_obstack, 0);
930 calculate_needs_all_insns (global);
932 CLEAR_REG_SET (&spilled_pseudos);
933 did_spill = 0;
935 something_changed = 0;
937 /* If we allocated any new memory locations, make another pass
938 since it might have changed elimination offsets. */
939 if (starting_frame_size != get_frame_size ())
940 something_changed = 1;
943 HARD_REG_SET to_spill;
944 CLEAR_HARD_REG_SET (to_spill);
945 update_eliminables (&to_spill);
946 for (i = 0; i < FIRST_PSEUDO_REGISTER; i++)
947 if (TEST_HARD_REG_BIT (to_spill, i))
949 spill_hard_reg (i, dumpfile, 1);
950 did_spill = 1;
952 /* Regardless of the state of spills, if we previously had
953 a register that we thought we could eliminate, but no can
954 not eliminate, we must run another pass.
956 Consider pseudos which have an entry in reg_equiv_* which
957 reference an eliminable register. We must make another pass
958 to update reg_equiv_* so that we do not substitute in the
959 old value from when we thought the elimination could be
960 performed. */
961 something_changed = 1;
965 select_reload_regs (dumpfile);
966 if (failure)
967 goto failed;
969 if (insns_need_reload != 0 || did_spill)
970 something_changed |= finish_spills (global, dumpfile);
972 if (! something_changed)
973 break;
975 if (caller_save_needed)
976 delete_caller_save_insns ();
978 obstack_free (&reload_obstack, reload_firstobj);
981 /* If global-alloc was run, notify it of any register eliminations we have
982 done. */
983 if (global)
984 for (ep = reg_eliminate; ep < &reg_eliminate[NUM_ELIMINABLE_REGS]; ep++)
985 if (ep->can_eliminate)
986 mark_elimination (ep->from, ep->to);
988 /* If a pseudo has no hard reg, delete the insns that made the equivalence.
989 If that insn didn't set the register (i.e., it copied the register to
990 memory), just delete that insn instead of the equivalencing insn plus
991 anything now dead. If we call delete_dead_insn on that insn, we may
992 delete the insn that actually sets the register if the register dies
993 there and that is incorrect. */
995 for (i = FIRST_PSEUDO_REGISTER; i < max_regno; i++)
997 if (reg_renumber[i] < 0 && reg_equiv_init[i] != 0)
999 rtx list;
1000 for (list = reg_equiv_init[i]; list; list = XEXP (list, 1))
1002 rtx equiv_insn = XEXP (list, 0);
1003 if (GET_CODE (equiv_insn) == NOTE)
1004 continue;
1005 if (reg_set_p (regno_reg_rtx[i], PATTERN (equiv_insn)))
1006 delete_dead_insn (equiv_insn);
1007 else
1009 PUT_CODE (equiv_insn, NOTE);
1010 NOTE_SOURCE_FILE (equiv_insn) = 0;
1011 NOTE_LINE_NUMBER (equiv_insn) = NOTE_INSN_DELETED;
1017 /* Use the reload registers where necessary
1018 by generating move instructions to move the must-be-register
1019 values into or out of the reload registers. */
1021 if (insns_need_reload != 0 || something_needs_elimination
1022 || something_needs_operands_changed)
1024 int old_frame_size = get_frame_size ();
1026 reload_as_needed (global);
1028 if (old_frame_size != get_frame_size ())
1029 abort ();
1031 if (num_eliminable)
1032 verify_initial_elim_offsets ();
1035 /* If we were able to eliminate the frame pointer, show that it is no
1036 longer live at the start of any basic block. If it ls live by
1037 virtue of being in a pseudo, that pseudo will be marked live
1038 and hence the frame pointer will be known to be live via that
1039 pseudo. */
1041 if (! frame_pointer_needed)
1042 for (i = 0; i < n_basic_blocks; i++)
1043 CLEAR_REGNO_REG_SET (BASIC_BLOCK (i)->global_live_at_start,
1044 HARD_FRAME_POINTER_REGNUM);
1046 /* Come here (with failure set nonzero) if we can't get enough spill regs
1047 and we decide not to abort about it. */
1048 failed:
1050 CLEAR_REG_SET (&spilled_pseudos);
1051 reload_in_progress = 0;
1053 /* Now eliminate all pseudo regs by modifying them into
1054 their equivalent memory references.
1055 The REG-rtx's for the pseudos are modified in place,
1056 so all insns that used to refer to them now refer to memory.
1058 For a reg that has a reg_equiv_address, all those insns
1059 were changed by reloading so that no insns refer to it any longer;
1060 but the DECL_RTL of a variable decl may refer to it,
1061 and if so this causes the debugging info to mention the variable. */
1063 for (i = FIRST_PSEUDO_REGISTER; i < max_regno; i++)
1065 rtx addr = 0;
1066 int in_struct = 0;
1067 int is_scalar = 0;
1068 int is_readonly = 0;
1070 if (reg_equiv_memory_loc[i])
1072 in_struct = MEM_IN_STRUCT_P (reg_equiv_memory_loc[i]);
1073 is_scalar = MEM_SCALAR_P (reg_equiv_memory_loc[i]);
1074 is_readonly = RTX_UNCHANGING_P (reg_equiv_memory_loc[i]);
1077 if (reg_equiv_mem[i])
1078 addr = XEXP (reg_equiv_mem[i], 0);
1080 if (reg_equiv_address[i])
1081 addr = reg_equiv_address[i];
1083 if (addr)
1085 if (reg_renumber[i] < 0)
1087 rtx reg = regno_reg_rtx[i];
1088 PUT_CODE (reg, MEM);
1089 XEXP (reg, 0) = addr;
1090 REG_USERVAR_P (reg) = 0;
1091 RTX_UNCHANGING_P (reg) = is_readonly;
1092 MEM_IN_STRUCT_P (reg) = in_struct;
1093 MEM_SCALAR_P (reg) = is_scalar;
1094 /* We have no alias information about this newly created
1095 MEM. */
1096 MEM_ALIAS_SET (reg) = 0;
1098 else if (reg_equiv_mem[i])
1099 XEXP (reg_equiv_mem[i], 0) = addr;
1103 /* We must set reload_completed now since the cleanup_subreg_operands call
1104 below will re-recognize each insn and reload may have generated insns
1105 which are only valid during and after reload. */
1106 reload_completed = 1;
1108 /* Make a pass over all the insns and delete all USEs which we inserted
1109 only to tag a REG_EQUAL note on them. Remove all REG_DEAD and REG_UNUSED
1110 notes. Delete all CLOBBER insns that don't refer to the return value
1111 and simplify (subreg (reg)) operands. Also remove all REG_RETVAL and
1112 REG_LIBCALL notes since they are no longer useful or accurate. Strip
1113 and regenerate REG_INC notes that may have been moved around. */
1115 for (insn = first; insn; insn = NEXT_INSN (insn))
1116 if (GET_RTX_CLASS (GET_CODE (insn)) == 'i')
1118 rtx *pnote;
1120 if ((GET_CODE (PATTERN (insn)) == USE
1121 && find_reg_note (insn, REG_EQUAL, NULL_RTX))
1122 || (GET_CODE (PATTERN (insn)) == CLOBBER
1123 && (GET_CODE (XEXP (PATTERN (insn), 0)) != REG
1124 || ! REG_FUNCTION_VALUE_P (XEXP (PATTERN (insn), 0)))))
1126 PUT_CODE (insn, NOTE);
1127 NOTE_SOURCE_FILE (insn) = 0;
1128 NOTE_LINE_NUMBER (insn) = NOTE_INSN_DELETED;
1129 continue;
1132 pnote = &REG_NOTES (insn);
1133 while (*pnote != 0)
1135 if (REG_NOTE_KIND (*pnote) == REG_DEAD
1136 || REG_NOTE_KIND (*pnote) == REG_UNUSED
1137 || REG_NOTE_KIND (*pnote) == REG_INC
1138 || REG_NOTE_KIND (*pnote) == REG_RETVAL
1139 || REG_NOTE_KIND (*pnote) == REG_LIBCALL)
1140 *pnote = XEXP (*pnote, 1);
1141 else
1142 pnote = &XEXP (*pnote, 1);
1145 #ifdef AUTO_INC_DEC
1146 add_auto_inc_notes (insn, PATTERN (insn));
1147 #endif
1149 /* And simplify (subreg (reg)) if it appears as an operand. */
1150 cleanup_subreg_operands (insn);
1153 /* If we are doing stack checking, give a warning if this function's
1154 frame size is larger than we expect. */
1155 if (flag_stack_check && ! STACK_CHECK_BUILTIN)
1157 HOST_WIDE_INT size = get_frame_size () + STACK_CHECK_FIXED_FRAME_SIZE;
1158 static int verbose_warned = 0;
1160 for (i = 0; i < FIRST_PSEUDO_REGISTER; i++)
1161 if (regs_ever_live[i] && ! fixed_regs[i] && call_used_regs[i])
1162 size += UNITS_PER_WORD;
1164 if (size > STACK_CHECK_MAX_FRAME_SIZE)
1166 warning ("frame size too large for reliable stack checking");
1167 if (! verbose_warned)
1169 warning ("try reducing the number of local variables");
1170 verbose_warned = 1;
1175 /* Indicate that we no longer have known memory locations or constants. */
1176 if (reg_equiv_constant)
1177 free (reg_equiv_constant);
1178 reg_equiv_constant = 0;
1179 if (reg_equiv_memory_loc)
1180 free (reg_equiv_memory_loc);
1181 reg_equiv_memory_loc = 0;
1183 if (real_known_ptr)
1184 free (real_known_ptr);
1185 if (real_at_ptr)
1186 free (real_at_ptr);
1188 free (reg_equiv_mem);
1189 free (reg_equiv_init);
1190 free (reg_equiv_address);
1191 free (reg_max_ref_width);
1192 free (reg_old_renumber);
1193 free (pseudo_previous_regs);
1194 free (pseudo_forbidden_regs);
1196 CLEAR_HARD_REG_SET (used_spill_regs);
1197 for (i = 0; i < n_spills; i++)
1198 SET_HARD_REG_BIT (used_spill_regs, spill_regs[i]);
1200 /* Free all the insn_chain structures at once. */
1201 obstack_free (&reload_obstack, reload_startobj);
1202 unused_insn_chains = 0;
1204 return failure;
1207 /* Yet another special case. Unfortunately, reg-stack forces people to
1208 write incorrect clobbers in asm statements. These clobbers must not
1209 cause the register to appear in bad_spill_regs, otherwise we'll call
1210 fatal_insn later. We clear the corresponding regnos in the live
1211 register sets to avoid this.
1212 The whole thing is rather sick, I'm afraid. */
1214 static void
1215 maybe_fix_stack_asms ()
1217 #ifdef STACK_REGS
1218 const char *constraints[MAX_RECOG_OPERANDS];
1219 enum machine_mode operand_mode[MAX_RECOG_OPERANDS];
1220 struct insn_chain *chain;
1222 for (chain = reload_insn_chain; chain != 0; chain = chain->next)
1224 int i, noperands;
1225 HARD_REG_SET clobbered, allowed;
1226 rtx pat;
1228 if (GET_RTX_CLASS (GET_CODE (chain->insn)) != 'i'
1229 || (noperands = asm_noperands (PATTERN (chain->insn))) < 0)
1230 continue;
1231 pat = PATTERN (chain->insn);
1232 if (GET_CODE (pat) != PARALLEL)
1233 continue;
1235 CLEAR_HARD_REG_SET (clobbered);
1236 CLEAR_HARD_REG_SET (allowed);
1238 /* First, make a mask of all stack regs that are clobbered. */
1239 for (i = 0; i < XVECLEN (pat, 0); i++)
1241 rtx t = XVECEXP (pat, 0, i);
1242 if (GET_CODE (t) == CLOBBER && STACK_REG_P (XEXP (t, 0)))
1243 SET_HARD_REG_BIT (clobbered, REGNO (XEXP (t, 0)));
1246 /* Get the operand values and constraints out of the insn. */
1247 decode_asm_operands (pat, recog_data.operand, recog_data.operand_loc,
1248 constraints, operand_mode);
1250 /* For every operand, see what registers are allowed. */
1251 for (i = 0; i < noperands; i++)
1253 const char *p = constraints[i];
1254 /* For every alternative, we compute the class of registers allowed
1255 for reloading in CLS, and merge its contents into the reg set
1256 ALLOWED. */
1257 int cls = (int) NO_REGS;
1259 for (;;)
1261 char c = *p++;
1263 if (c == '\0' || c == ',' || c == '#')
1265 /* End of one alternative - mark the regs in the current
1266 class, and reset the class. */
1267 IOR_HARD_REG_SET (allowed, reg_class_contents[cls]);
1268 cls = NO_REGS;
1269 if (c == '#')
1270 do {
1271 c = *p++;
1272 } while (c != '\0' && c != ',');
1273 if (c == '\0')
1274 break;
1275 continue;
1278 switch (c)
1280 case '=': case '+': case '*': case '%': case '?': case '!':
1281 case '0': case '1': case '2': case '3': case '4': case 'm':
1282 case '<': case '>': case 'V': case 'o': case '&': case 'E':
1283 case 'F': case 's': case 'i': case 'n': case 'X': case 'I':
1284 case 'J': case 'K': case 'L': case 'M': case 'N': case 'O':
1285 case 'P':
1286 #ifdef EXTRA_CONSTRAINT
1287 case 'Q': case 'R': case 'S': case 'T': case 'U':
1288 #endif
1289 break;
1291 case 'p':
1292 cls = (int) reg_class_subunion[cls][(int) BASE_REG_CLASS];
1293 break;
1295 case 'g':
1296 case 'r':
1297 cls = (int) reg_class_subunion[cls][(int) GENERAL_REGS];
1298 break;
1300 default:
1301 cls = (int) reg_class_subunion[cls][(int) REG_CLASS_FROM_LETTER (c)];
1306 /* Those of the registers which are clobbered, but allowed by the
1307 constraints, must be usable as reload registers. So clear them
1308 out of the life information. */
1309 AND_HARD_REG_SET (allowed, clobbered);
1310 for (i = 0; i < FIRST_PSEUDO_REGISTER; i++)
1311 if (TEST_HARD_REG_BIT (allowed, i))
1313 CLEAR_REGNO_REG_SET (&chain->live_throughout, i);
1314 CLEAR_REGNO_REG_SET (&chain->dead_or_set, i);
1318 #endif
1321 /* Copy the global variables n_reloads and rld into the corresponding elts
1322 of CHAIN. */
1323 static void
1324 copy_reloads (chain)
1325 struct insn_chain *chain;
1327 chain->n_reloads = n_reloads;
1328 chain->rld
1329 = (struct reload *) obstack_alloc (&reload_obstack,
1330 n_reloads * sizeof (struct reload));
1331 memcpy (chain->rld, rld, n_reloads * sizeof (struct reload));
1332 reload_insn_firstobj = (char *) obstack_alloc (&reload_obstack, 0);
1335 /* Walk the chain of insns, and determine for each whether it needs reloads
1336 and/or eliminations. Build the corresponding insns_need_reload list, and
1337 set something_needs_elimination as appropriate. */
1338 static void
1339 calculate_needs_all_insns (global)
1340 int global;
1342 struct insn_chain **pprev_reload = &insns_need_reload;
1343 struct insn_chain *chain;
1345 something_needs_elimination = 0;
1347 reload_insn_firstobj = (char *) obstack_alloc (&reload_obstack, 0);
1348 for (chain = reload_insn_chain; chain != 0; chain = chain->next)
1350 rtx insn = chain->insn;
1352 /* Clear out the shortcuts. */
1353 chain->n_reloads = 0;
1354 chain->need_elim = 0;
1355 chain->need_reload = 0;
1356 chain->need_operand_change = 0;
1358 /* If this is a label, a JUMP_INSN, or has REG_NOTES (which might
1359 include REG_LABEL), we need to see what effects this has on the
1360 known offsets at labels. */
1362 if (GET_CODE (insn) == CODE_LABEL || GET_CODE (insn) == JUMP_INSN
1363 || (GET_RTX_CLASS (GET_CODE (insn)) == 'i'
1364 && REG_NOTES (insn) != 0))
1365 set_label_offsets (insn, insn, 0);
1367 if (GET_RTX_CLASS (GET_CODE (insn)) == 'i')
1369 rtx old_body = PATTERN (insn);
1370 int old_code = INSN_CODE (insn);
1371 rtx old_notes = REG_NOTES (insn);
1372 int did_elimination = 0;
1373 int operands_changed = 0;
1374 rtx set = single_set (insn);
1376 /* Skip insns that only set an equivalence. */
1377 if (set && GET_CODE (SET_DEST (set)) == REG
1378 && reg_renumber[REGNO (SET_DEST (set))] < 0
1379 && reg_equiv_constant[REGNO (SET_DEST (set))])
1380 continue;
1382 /* If needed, eliminate any eliminable registers. */
1383 if (num_eliminable || num_eliminable_invariants)
1384 did_elimination = eliminate_regs_in_insn (insn, 0);
1386 /* Analyze the instruction. */
1387 operands_changed = find_reloads (insn, 0, spill_indirect_levels,
1388 global, spill_reg_order);
1390 /* If a no-op set needs more than one reload, this is likely
1391 to be something that needs input address reloads. We
1392 can't get rid of this cleanly later, and it is of no use
1393 anyway, so discard it now.
1394 We only do this when expensive_optimizations is enabled,
1395 since this complements reload inheritance / output
1396 reload deletion, and it can make debugging harder. */
1397 if (flag_expensive_optimizations && n_reloads > 1)
1399 rtx set = single_set (insn);
1400 if (set
1401 && SET_SRC (set) == SET_DEST (set)
1402 && GET_CODE (SET_SRC (set)) == REG
1403 && REGNO (SET_SRC (set)) >= FIRST_PSEUDO_REGISTER)
1405 PUT_CODE (insn, NOTE);
1406 NOTE_SOURCE_FILE (insn) = 0;
1407 NOTE_LINE_NUMBER (insn) = NOTE_INSN_DELETED;
1408 continue;
1411 if (num_eliminable)
1412 update_eliminable_offsets ();
1414 /* Remember for later shortcuts which insns had any reloads or
1415 register eliminations. */
1416 chain->need_elim = did_elimination;
1417 chain->need_reload = n_reloads > 0;
1418 chain->need_operand_change = operands_changed;
1420 /* Discard any register replacements done. */
1421 if (did_elimination)
1423 obstack_free (&reload_obstack, reload_insn_firstobj);
1424 PATTERN (insn) = old_body;
1425 INSN_CODE (insn) = old_code;
1426 REG_NOTES (insn) = old_notes;
1427 something_needs_elimination = 1;
1430 something_needs_operands_changed |= operands_changed;
1432 if (n_reloads != 0)
1434 copy_reloads (chain);
1435 *pprev_reload = chain;
1436 pprev_reload = &chain->next_need_reload;
1440 *pprev_reload = 0;
1443 /* Comparison function for qsort to decide which of two reloads
1444 should be handled first. *P1 and *P2 are the reload numbers. */
1446 static int
1447 reload_reg_class_lower (r1p, r2p)
1448 const PTR r1p;
1449 const PTR r2p;
1451 register int r1 = *(const short *)r1p, r2 = *(const short *)r2p;
1452 register int t;
1454 /* Consider required reloads before optional ones. */
1455 t = rld[r1].optional - rld[r2].optional;
1456 if (t != 0)
1457 return t;
1459 /* Count all solitary classes before non-solitary ones. */
1460 t = ((reg_class_size[(int) rld[r2].class] == 1)
1461 - (reg_class_size[(int) rld[r1].class] == 1));
1462 if (t != 0)
1463 return t;
1465 /* Aside from solitaires, consider all multi-reg groups first. */
1466 t = rld[r2].nregs - rld[r1].nregs;
1467 if (t != 0)
1468 return t;
1470 /* Consider reloads in order of increasing reg-class number. */
1471 t = (int) rld[r1].class - (int) rld[r2].class;
1472 if (t != 0)
1473 return t;
1475 /* If reloads are equally urgent, sort by reload number,
1476 so that the results of qsort leave nothing to chance. */
1477 return r1 - r2;
1480 /* The cost of spilling each hard reg. */
1481 static int spill_cost[FIRST_PSEUDO_REGISTER];
1483 /* When spilling multiple hard registers, we use SPILL_COST for the first
1484 spilled hard reg and SPILL_ADD_COST for subsequent regs. SPILL_ADD_COST
1485 only the first hard reg for a multi-reg pseudo. */
1486 static int spill_add_cost[FIRST_PSEUDO_REGISTER];
1488 /* Update the spill cost arrays, considering that pseudo REG is live. */
1490 static void
1491 count_pseudo (reg)
1492 int reg;
1494 int n_refs = REG_N_REFS (reg);
1495 int r = reg_renumber[reg];
1496 int nregs;
1498 if (REGNO_REG_SET_P (&pseudos_counted, reg)
1499 || REGNO_REG_SET_P (&spilled_pseudos, reg))
1500 return;
1502 SET_REGNO_REG_SET (&pseudos_counted, reg);
1504 if (r < 0)
1505 abort ();
1507 spill_add_cost[r] += n_refs;
1509 nregs = HARD_REGNO_NREGS (r, PSEUDO_REGNO_MODE (reg));
1510 while (nregs-- > 0)
1511 spill_cost[r + nregs] += n_refs;
1514 /* Calculate the SPILL_COST and SPILL_ADD_COST arrays and determine the
1515 contents of BAD_SPILL_REGS for the insn described by CHAIN. */
1517 static void
1518 order_regs_for_reload (chain)
1519 struct insn_chain *chain;
1521 int i;
1522 HARD_REG_SET used_by_pseudos;
1523 HARD_REG_SET used_by_pseudos2;
1525 COPY_HARD_REG_SET (bad_spill_regs, fixed_reg_set);
1527 memset (spill_cost, 0, sizeof spill_cost);
1528 memset (spill_add_cost, 0, sizeof spill_add_cost);
1530 /* Count number of uses of each hard reg by pseudo regs allocated to it
1531 and then order them by decreasing use. First exclude hard registers
1532 that are live in or across this insn. */
1534 REG_SET_TO_HARD_REG_SET (used_by_pseudos, &chain->live_throughout);
1535 REG_SET_TO_HARD_REG_SET (used_by_pseudos2, &chain->dead_or_set);
1536 IOR_HARD_REG_SET (bad_spill_regs, used_by_pseudos);
1537 IOR_HARD_REG_SET (bad_spill_regs, used_by_pseudos2);
1539 /* Now find out which pseudos are allocated to it, and update
1540 hard_reg_n_uses. */
1541 CLEAR_REG_SET (&pseudos_counted);
1543 EXECUTE_IF_SET_IN_REG_SET
1544 (&chain->live_throughout, FIRST_PSEUDO_REGISTER, i,
1546 count_pseudo (i);
1548 EXECUTE_IF_SET_IN_REG_SET
1549 (&chain->dead_or_set, FIRST_PSEUDO_REGISTER, i,
1551 count_pseudo (i);
1553 CLEAR_REG_SET (&pseudos_counted);
1556 /* Vector of reload-numbers showing the order in which the reloads should
1557 be processed. */
1558 static short reload_order[MAX_RELOADS];
1560 /* This is used to keep track of the spill regs used in one insn. */
1561 static HARD_REG_SET used_spill_regs_local;
1563 /* We decided to spill hard register SPILLED, which has a size of
1564 SPILLED_NREGS. Determine how pseudo REG, which is live during the insn,
1565 is affected. We will add it to SPILLED_PSEUDOS if necessary, and we will
1566 update SPILL_COST/SPILL_ADD_COST. */
1568 static void
1569 count_spilled_pseudo (spilled, spilled_nregs, reg)
1570 int spilled, spilled_nregs, reg;
1572 int r = reg_renumber[reg];
1573 int nregs = HARD_REGNO_NREGS (r, PSEUDO_REGNO_MODE (reg));
1575 if (REGNO_REG_SET_P (&spilled_pseudos, reg)
1576 || spilled + spilled_nregs <= r || r + nregs <= spilled)
1577 return;
1579 SET_REGNO_REG_SET (&spilled_pseudos, reg);
1581 spill_add_cost[r] -= REG_N_REFS (reg);
1582 while (nregs-- > 0)
1583 spill_cost[r + nregs] -= REG_N_REFS (reg);
1586 /* Find reload register to use for reload number ORDER. */
1588 static int
1589 find_reg (chain, order, dumpfile)
1590 struct insn_chain *chain;
1591 int order;
1592 FILE *dumpfile;
1594 int rnum = reload_order[order];
1595 struct reload *rl = rld + rnum;
1596 int best_cost = INT_MAX;
1597 int best_reg = -1;
1598 unsigned int i, j;
1599 int k;
1600 HARD_REG_SET not_usable;
1601 HARD_REG_SET used_by_other_reload;
1603 COPY_HARD_REG_SET (not_usable, bad_spill_regs);
1604 IOR_HARD_REG_SET (not_usable, bad_spill_regs_global);
1605 IOR_COMPL_HARD_REG_SET (not_usable, reg_class_contents[rl->class]);
1607 CLEAR_HARD_REG_SET (used_by_other_reload);
1608 for (k = 0; k < order; k++)
1610 int other = reload_order[k];
1612 if (rld[other].regno >= 0 && reloads_conflict (other, rnum))
1613 for (j = 0; j < rld[other].nregs; j++)
1614 SET_HARD_REG_BIT (used_by_other_reload, rld[other].regno + j);
1617 for (i = 0; i < FIRST_PSEUDO_REGISTER; i++)
1619 unsigned int regno = i;
1621 if (! TEST_HARD_REG_BIT (not_usable, regno)
1622 && ! TEST_HARD_REG_BIT (used_by_other_reload, regno)
1623 && HARD_REGNO_MODE_OK (regno, rl->mode))
1625 int this_cost = spill_cost[regno];
1626 int ok = 1;
1627 unsigned int this_nregs = HARD_REGNO_NREGS (regno, rl->mode);
1629 for (j = 1; j < this_nregs; j++)
1631 this_cost += spill_add_cost[regno + j];
1632 if ((TEST_HARD_REG_BIT (not_usable, regno + j))
1633 || TEST_HARD_REG_BIT (used_by_other_reload, regno + j))
1634 ok = 0;
1636 if (! ok)
1637 continue;
1638 if (rl->in && GET_CODE (rl->in) == REG && REGNO (rl->in) == regno)
1639 this_cost--;
1640 if (rl->out && GET_CODE (rl->out) == REG && REGNO (rl->out) == regno)
1641 this_cost--;
1642 if (this_cost < best_cost
1643 /* Among registers with equal cost, prefer caller-saved ones, or
1644 use REG_ALLOC_ORDER if it is defined. */
1645 || (this_cost == best_cost
1646 #ifdef REG_ALLOC_ORDER
1647 && (inv_reg_alloc_order[regno]
1648 < inv_reg_alloc_order[best_reg])
1649 #else
1650 && call_used_regs[regno]
1651 && ! call_used_regs[best_reg]
1652 #endif
1655 best_reg = regno;
1656 best_cost = this_cost;
1660 if (best_reg == -1)
1661 return 0;
1663 if (dumpfile)
1664 fprintf (dumpfile, "Using reg %d for reload %d\n", best_reg, rnum);
1666 rl->nregs = HARD_REGNO_NREGS (best_reg, rl->mode);
1667 rl->regno = best_reg;
1669 EXECUTE_IF_SET_IN_REG_SET
1670 (&chain->live_throughout, FIRST_PSEUDO_REGISTER, j,
1672 count_spilled_pseudo (best_reg, rl->nregs, j);
1675 EXECUTE_IF_SET_IN_REG_SET
1676 (&chain->dead_or_set, FIRST_PSEUDO_REGISTER, j,
1678 count_spilled_pseudo (best_reg, rl->nregs, j);
1681 for (i = 0; i < rl->nregs; i++)
1683 if (spill_cost[best_reg + i] != 0
1684 || spill_add_cost[best_reg + i] != 0)
1685 abort ();
1686 SET_HARD_REG_BIT (used_spill_regs_local, best_reg + i);
1688 return 1;
1691 /* Find more reload regs to satisfy the remaining need of an insn, which
1692 is given by CHAIN.
1693 Do it by ascending class number, since otherwise a reg
1694 might be spilled for a big class and might fail to count
1695 for a smaller class even though it belongs to that class. */
1697 static void
1698 find_reload_regs (chain, dumpfile)
1699 struct insn_chain *chain;
1700 FILE *dumpfile;
1702 int i;
1704 /* In order to be certain of getting the registers we need,
1705 we must sort the reloads into order of increasing register class.
1706 Then our grabbing of reload registers will parallel the process
1707 that provided the reload registers. */
1708 for (i = 0; i < chain->n_reloads; i++)
1710 /* Show whether this reload already has a hard reg. */
1711 if (chain->rld[i].reg_rtx)
1713 int regno = REGNO (chain->rld[i].reg_rtx);
1714 chain->rld[i].regno = regno;
1715 chain->rld[i].nregs
1716 = HARD_REGNO_NREGS (regno, GET_MODE (chain->rld[i].reg_rtx));
1718 else
1719 chain->rld[i].regno = -1;
1720 reload_order[i] = i;
1723 n_reloads = chain->n_reloads;
1724 memcpy (rld, chain->rld, n_reloads * sizeof (struct reload));
1726 CLEAR_HARD_REG_SET (used_spill_regs_local);
1728 if (dumpfile)
1729 fprintf (dumpfile, "Spilling for insn %d.\n", INSN_UID (chain->insn));
1731 qsort (reload_order, n_reloads, sizeof (short), reload_reg_class_lower);
1733 /* Compute the order of preference for hard registers to spill. */
1735 order_regs_for_reload (chain);
1737 for (i = 0; i < n_reloads; i++)
1739 int r = reload_order[i];
1741 /* Ignore reloads that got marked inoperative. */
1742 if ((rld[r].out != 0 || rld[r].in != 0 || rld[r].secondary_p)
1743 && ! rld[r].optional
1744 && rld[r].regno == -1)
1745 if (! find_reg (chain, i, dumpfile))
1747 spill_failure (chain->insn, rld[r].class);
1748 failure = 1;
1749 return;
1753 COPY_HARD_REG_SET (chain->used_spill_regs, used_spill_regs_local);
1754 IOR_HARD_REG_SET (used_spill_regs, used_spill_regs_local);
1756 memcpy (chain->rld, rld, n_reloads * sizeof (struct reload));
1759 static void
1760 select_reload_regs (dumpfile)
1761 FILE *dumpfile;
1763 struct insn_chain *chain;
1765 /* Try to satisfy the needs for each insn. */
1766 for (chain = insns_need_reload; chain != 0;
1767 chain = chain->next_need_reload)
1768 find_reload_regs (chain, dumpfile);
1771 /* Delete all insns that were inserted by emit_caller_save_insns during
1772 this iteration. */
1773 static void
1774 delete_caller_save_insns ()
1776 struct insn_chain *c = reload_insn_chain;
1778 while (c != 0)
1780 while (c != 0 && c->is_caller_save_insn)
1782 struct insn_chain *next = c->next;
1783 rtx insn = c->insn;
1785 if (insn == BLOCK_HEAD (c->block))
1786 BLOCK_HEAD (c->block) = NEXT_INSN (insn);
1787 if (insn == BLOCK_END (c->block))
1788 BLOCK_END (c->block) = PREV_INSN (insn);
1789 if (c == reload_insn_chain)
1790 reload_insn_chain = next;
1792 if (NEXT_INSN (insn) != 0)
1793 PREV_INSN (NEXT_INSN (insn)) = PREV_INSN (insn);
1794 if (PREV_INSN (insn) != 0)
1795 NEXT_INSN (PREV_INSN (insn)) = NEXT_INSN (insn);
1797 if (next)
1798 next->prev = c->prev;
1799 if (c->prev)
1800 c->prev->next = next;
1801 c->next = unused_insn_chains;
1802 unused_insn_chains = c;
1803 c = next;
1805 if (c != 0)
1806 c = c->next;
1810 /* Handle the failure to find a register to spill.
1811 INSN should be one of the insns which needed this particular spill reg. */
1813 static void
1814 spill_failure (insn, class)
1815 rtx insn;
1816 enum reg_class class;
1818 static const char *const reg_class_names[] = REG_CLASS_NAMES;
1819 if (asm_noperands (PATTERN (insn)) >= 0)
1820 error_for_asm (insn, "Can't find a register in class `%s' while reloading `asm'.",
1821 reg_class_names[class]);
1822 else
1824 error ("Unable to find a register to spill in class `%s'.",
1825 reg_class_names[class]);
1826 fatal_insn ("This is the insn:", insn);
1830 /* Delete an unneeded INSN and any previous insns who sole purpose is loading
1831 data that is dead in INSN. */
1833 static void
1834 delete_dead_insn (insn)
1835 rtx insn;
1837 rtx prev = prev_real_insn (insn);
1838 rtx prev_dest;
1840 /* If the previous insn sets a register that dies in our insn, delete it
1841 too. */
1842 if (prev && GET_CODE (PATTERN (prev)) == SET
1843 && (prev_dest = SET_DEST (PATTERN (prev)), GET_CODE (prev_dest) == REG)
1844 && reg_mentioned_p (prev_dest, PATTERN (insn))
1845 && find_regno_note (insn, REG_DEAD, REGNO (prev_dest))
1846 && ! side_effects_p (SET_SRC (PATTERN (prev))))
1847 delete_dead_insn (prev);
1849 PUT_CODE (insn, NOTE);
1850 NOTE_LINE_NUMBER (insn) = NOTE_INSN_DELETED;
1851 NOTE_SOURCE_FILE (insn) = 0;
1854 /* Modify the home of pseudo-reg I.
1855 The new home is present in reg_renumber[I].
1857 FROM_REG may be the hard reg that the pseudo-reg is being spilled from;
1858 or it may be -1, meaning there is none or it is not relevant.
1859 This is used so that all pseudos spilled from a given hard reg
1860 can share one stack slot. */
1862 static void
1863 alter_reg (i, from_reg)
1864 register int i;
1865 int from_reg;
1867 /* When outputting an inline function, this can happen
1868 for a reg that isn't actually used. */
1869 if (regno_reg_rtx[i] == 0)
1870 return;
1872 /* If the reg got changed to a MEM at rtl-generation time,
1873 ignore it. */
1874 if (GET_CODE (regno_reg_rtx[i]) != REG)
1875 return;
1877 /* Modify the reg-rtx to contain the new hard reg
1878 number or else to contain its pseudo reg number. */
1879 REGNO (regno_reg_rtx[i])
1880 = reg_renumber[i] >= 0 ? reg_renumber[i] : i;
1882 /* If we have a pseudo that is needed but has no hard reg or equivalent,
1883 allocate a stack slot for it. */
1885 if (reg_renumber[i] < 0
1886 && REG_N_REFS (i) > 0
1887 && reg_equiv_constant[i] == 0
1888 && reg_equiv_memory_loc[i] == 0)
1890 register rtx x;
1891 unsigned int inherent_size = PSEUDO_REGNO_BYTES (i);
1892 unsigned int total_size = MAX (inherent_size, reg_max_ref_width[i]);
1893 int adjust = 0;
1895 /* Each pseudo reg has an inherent size which comes from its own mode,
1896 and a total size which provides room for paradoxical subregs
1897 which refer to the pseudo reg in wider modes.
1899 We can use a slot already allocated if it provides both
1900 enough inherent space and enough total space.
1901 Otherwise, we allocate a new slot, making sure that it has no less
1902 inherent space, and no less total space, then the previous slot. */
1903 if (from_reg == -1)
1905 /* No known place to spill from => no slot to reuse. */
1906 x = assign_stack_local (GET_MODE (regno_reg_rtx[i]), total_size,
1907 inherent_size == total_size ? 0 : -1);
1908 if (BYTES_BIG_ENDIAN)
1909 /* Cancel the big-endian correction done in assign_stack_local.
1910 Get the address of the beginning of the slot.
1911 This is so we can do a big-endian correction unconditionally
1912 below. */
1913 adjust = inherent_size - total_size;
1915 RTX_UNCHANGING_P (x) = RTX_UNCHANGING_P (regno_reg_rtx[i]);
1917 /* Nothing can alias this slot except this pseudo. */
1918 MEM_ALIAS_SET (x) = new_alias_set ();
1921 /* Reuse a stack slot if possible. */
1922 else if (spill_stack_slot[from_reg] != 0
1923 && spill_stack_slot_width[from_reg] >= total_size
1924 && (GET_MODE_SIZE (GET_MODE (spill_stack_slot[from_reg]))
1925 >= inherent_size))
1926 x = spill_stack_slot[from_reg];
1928 /* Allocate a bigger slot. */
1929 else
1931 /* Compute maximum size needed, both for inherent size
1932 and for total size. */
1933 enum machine_mode mode = GET_MODE (regno_reg_rtx[i]);
1934 rtx stack_slot;
1936 if (spill_stack_slot[from_reg])
1938 if (GET_MODE_SIZE (GET_MODE (spill_stack_slot[from_reg]))
1939 > inherent_size)
1940 mode = GET_MODE (spill_stack_slot[from_reg]);
1941 if (spill_stack_slot_width[from_reg] > total_size)
1942 total_size = spill_stack_slot_width[from_reg];
1945 /* Make a slot with that size. */
1946 x = assign_stack_local (mode, total_size,
1947 inherent_size == total_size ? 0 : -1);
1948 stack_slot = x;
1950 /* All pseudos mapped to this slot can alias each other. */
1951 if (spill_stack_slot[from_reg])
1952 MEM_ALIAS_SET (x) = MEM_ALIAS_SET (spill_stack_slot[from_reg]);
1953 else
1954 MEM_ALIAS_SET (x) = new_alias_set ();
1956 if (BYTES_BIG_ENDIAN)
1958 /* Cancel the big-endian correction done in assign_stack_local.
1959 Get the address of the beginning of the slot.
1960 This is so we can do a big-endian correction unconditionally
1961 below. */
1962 adjust = GET_MODE_SIZE (mode) - total_size;
1963 if (adjust)
1964 stack_slot = gen_rtx_MEM (mode_for_size (total_size
1965 * BITS_PER_UNIT,
1966 MODE_INT, 1),
1967 plus_constant (XEXP (x, 0), adjust));
1970 spill_stack_slot[from_reg] = stack_slot;
1971 spill_stack_slot_width[from_reg] = total_size;
1974 /* On a big endian machine, the "address" of the slot
1975 is the address of the low part that fits its inherent mode. */
1976 if (BYTES_BIG_ENDIAN && inherent_size < total_size)
1977 adjust += (total_size - inherent_size);
1979 /* If we have any adjustment to make, or if the stack slot is the
1980 wrong mode, make a new stack slot. */
1981 if (adjust != 0 || GET_MODE (x) != GET_MODE (regno_reg_rtx[i]))
1983 rtx new = gen_rtx_MEM (GET_MODE (regno_reg_rtx[i]),
1984 plus_constant (XEXP (x, 0), adjust));
1986 MEM_COPY_ATTRIBUTES (new, x);
1987 x = new;
1990 /* Save the stack slot for later. */
1991 reg_equiv_memory_loc[i] = x;
1995 /* Mark the slots in regs_ever_live for the hard regs
1996 used by pseudo-reg number REGNO. */
1998 void
1999 mark_home_live (regno)
2000 int regno;
2002 register int i, lim;
2004 i = reg_renumber[regno];
2005 if (i < 0)
2006 return;
2007 lim = i + HARD_REGNO_NREGS (i, PSEUDO_REGNO_MODE (regno));
2008 while (i < lim)
2009 regs_ever_live[i++] = 1;
2012 /* This function handles the tracking of elimination offsets around branches.
2014 X is a piece of RTL being scanned.
2016 INSN is the insn that it came from, if any.
2018 INITIAL_P is non-zero if we are to set the offset to be the initial
2019 offset and zero if we are setting the offset of the label to be the
2020 current offset. */
2022 static void
2023 set_label_offsets (x, insn, initial_p)
2024 rtx x;
2025 rtx insn;
2026 int initial_p;
2028 enum rtx_code code = GET_CODE (x);
2029 rtx tem;
2030 unsigned int i;
2031 struct elim_table *p;
2033 switch (code)
2035 case LABEL_REF:
2036 if (LABEL_REF_NONLOCAL_P (x))
2037 return;
2039 x = XEXP (x, 0);
2041 /* ... fall through ... */
2043 case CODE_LABEL:
2044 /* If we know nothing about this label, set the desired offsets. Note
2045 that this sets the offset at a label to be the offset before a label
2046 if we don't know anything about the label. This is not correct for
2047 the label after a BARRIER, but is the best guess we can make. If
2048 we guessed wrong, we will suppress an elimination that might have
2049 been possible had we been able to guess correctly. */
2051 if (! offsets_known_at[CODE_LABEL_NUMBER (x)])
2053 for (i = 0; i < NUM_ELIMINABLE_REGS; i++)
2054 offsets_at[CODE_LABEL_NUMBER (x)][i]
2055 = (initial_p ? reg_eliminate[i].initial_offset
2056 : reg_eliminate[i].offset);
2057 offsets_known_at[CODE_LABEL_NUMBER (x)] = 1;
2060 /* Otherwise, if this is the definition of a label and it is
2061 preceded by a BARRIER, set our offsets to the known offset of
2062 that label. */
2064 else if (x == insn
2065 && (tem = prev_nonnote_insn (insn)) != 0
2066 && GET_CODE (tem) == BARRIER)
2067 set_offsets_for_label (insn);
2068 else
2069 /* If neither of the above cases is true, compare each offset
2070 with those previously recorded and suppress any eliminations
2071 where the offsets disagree. */
2073 for (i = 0; i < NUM_ELIMINABLE_REGS; i++)
2074 if (offsets_at[CODE_LABEL_NUMBER (x)][i]
2075 != (initial_p ? reg_eliminate[i].initial_offset
2076 : reg_eliminate[i].offset))
2077 reg_eliminate[i].can_eliminate = 0;
2079 return;
2081 case JUMP_INSN:
2082 set_label_offsets (PATTERN (insn), insn, initial_p);
2084 /* ... fall through ... */
2086 case INSN:
2087 case CALL_INSN:
2088 /* Any labels mentioned in REG_LABEL notes can be branched to indirectly
2089 and hence must have all eliminations at their initial offsets. */
2090 for (tem = REG_NOTES (x); tem; tem = XEXP (tem, 1))
2091 if (REG_NOTE_KIND (tem) == REG_LABEL)
2092 set_label_offsets (XEXP (tem, 0), insn, 1);
2093 return;
2095 case ADDR_VEC:
2096 case ADDR_DIFF_VEC:
2097 /* Each of the labels in the address vector must be at their initial
2098 offsets. We want the first field for ADDR_VEC and the second
2099 field for ADDR_DIFF_VEC. */
2101 for (i = 0; i < (unsigned) XVECLEN (x, code == ADDR_DIFF_VEC); i++)
2102 set_label_offsets (XVECEXP (x, code == ADDR_DIFF_VEC, i),
2103 insn, initial_p);
2104 return;
2106 case SET:
2107 /* We only care about setting PC. If the source is not RETURN,
2108 IF_THEN_ELSE, or a label, disable any eliminations not at
2109 their initial offsets. Similarly if any arm of the IF_THEN_ELSE
2110 isn't one of those possibilities. For branches to a label,
2111 call ourselves recursively.
2113 Note that this can disable elimination unnecessarily when we have
2114 a non-local goto since it will look like a non-constant jump to
2115 someplace in the current function. This isn't a significant
2116 problem since such jumps will normally be when all elimination
2117 pairs are back to their initial offsets. */
2119 if (SET_DEST (x) != pc_rtx)
2120 return;
2122 switch (GET_CODE (SET_SRC (x)))
2124 case PC:
2125 case RETURN:
2126 return;
2128 case LABEL_REF:
2129 set_label_offsets (XEXP (SET_SRC (x), 0), insn, initial_p);
2130 return;
2132 case IF_THEN_ELSE:
2133 tem = XEXP (SET_SRC (x), 1);
2134 if (GET_CODE (tem) == LABEL_REF)
2135 set_label_offsets (XEXP (tem, 0), insn, initial_p);
2136 else if (GET_CODE (tem) != PC && GET_CODE (tem) != RETURN)
2137 break;
2139 tem = XEXP (SET_SRC (x), 2);
2140 if (GET_CODE (tem) == LABEL_REF)
2141 set_label_offsets (XEXP (tem, 0), insn, initial_p);
2142 else if (GET_CODE (tem) != PC && GET_CODE (tem) != RETURN)
2143 break;
2144 return;
2146 default:
2147 break;
2150 /* If we reach here, all eliminations must be at their initial
2151 offset because we are doing a jump to a variable address. */
2152 for (p = reg_eliminate; p < &reg_eliminate[NUM_ELIMINABLE_REGS]; p++)
2153 if (p->offset != p->initial_offset)
2154 p->can_eliminate = 0;
2155 break;
2157 default:
2158 break;
2162 /* Scan X and replace any eliminable registers (such as fp) with a
2163 replacement (such as sp), plus an offset.
2165 MEM_MODE is the mode of an enclosing MEM. We need this to know how
2166 much to adjust a register for, e.g., PRE_DEC. Also, if we are inside a
2167 MEM, we are allowed to replace a sum of a register and the constant zero
2168 with the register, which we cannot do outside a MEM. In addition, we need
2169 to record the fact that a register is referenced outside a MEM.
2171 If INSN is an insn, it is the insn containing X. If we replace a REG
2172 in a SET_DEST with an equivalent MEM and INSN is non-zero, write a
2173 CLOBBER of the pseudo after INSN so find_equiv_regs will know that
2174 the REG is being modified.
2176 Alternatively, INSN may be a note (an EXPR_LIST or INSN_LIST).
2177 That's used when we eliminate in expressions stored in notes.
2178 This means, do not set ref_outside_mem even if the reference
2179 is outside of MEMs.
2181 REG_EQUIV_MEM and REG_EQUIV_ADDRESS contain address that have had
2182 replacements done assuming all offsets are at their initial values. If
2183 they are not, or if REG_EQUIV_ADDRESS is nonzero for a pseudo we
2184 encounter, return the actual location so that find_reloads will do
2185 the proper thing. */
2188 eliminate_regs (x, mem_mode, insn)
2189 rtx x;
2190 enum machine_mode mem_mode;
2191 rtx insn;
2193 enum rtx_code code = GET_CODE (x);
2194 struct elim_table *ep;
2195 int regno;
2196 rtx new;
2197 int i, j;
2198 const char *fmt;
2199 int copied = 0;
2201 if (! current_function_decl)
2202 return x;
2204 switch (code)
2206 case CONST_INT:
2207 case CONST_DOUBLE:
2208 case CONST:
2209 case SYMBOL_REF:
2210 case CODE_LABEL:
2211 case PC:
2212 case CC0:
2213 case ASM_INPUT:
2214 case ADDR_VEC:
2215 case ADDR_DIFF_VEC:
2216 case RETURN:
2217 return x;
2219 case ADDRESSOF:
2220 /* This is only for the benefit of the debugging backends, which call
2221 eliminate_regs on DECL_RTL; any ADDRESSOFs in the actual insns are
2222 removed after CSE. */
2223 new = eliminate_regs (XEXP (x, 0), 0, insn);
2224 if (GET_CODE (new) == MEM)
2225 return XEXP (new, 0);
2226 return x;
2228 case REG:
2229 regno = REGNO (x);
2231 /* First handle the case where we encounter a bare register that
2232 is eliminable. Replace it with a PLUS. */
2233 if (regno < FIRST_PSEUDO_REGISTER)
2235 for (ep = reg_eliminate; ep < &reg_eliminate[NUM_ELIMINABLE_REGS];
2236 ep++)
2237 if (ep->from_rtx == x && ep->can_eliminate)
2238 return plus_constant (ep->to_rtx, ep->previous_offset);
2241 else if (reg_renumber[regno] < 0 && reg_equiv_constant
2242 && reg_equiv_constant[regno]
2243 && ! CONSTANT_P (reg_equiv_constant[regno]))
2244 return eliminate_regs (copy_rtx (reg_equiv_constant[regno]),
2245 mem_mode, insn);
2246 return x;
2248 /* You might think handling MINUS in a manner similar to PLUS is a
2249 good idea. It is not. It has been tried multiple times and every
2250 time the change has had to have been reverted.
2252 Other parts of reload know a PLUS is special (gen_reload for example)
2253 and require special code to handle code a reloaded PLUS operand.
2255 Also consider backends where the flags register is clobbered by a
2256 MINUS, but we can emit a PLUS that does not clobber flags (ia32,
2257 lea instruction comes to mind). If we try to reload a MINUS, we
2258 may kill the flags register that was holding a useful value.
2260 So, please before trying to handle MINUS, consider reload as a
2261 whole instead of this little section as well as the backend issues. */
2262 case PLUS:
2263 /* If this is the sum of an eliminable register and a constant, rework
2264 the sum. */
2265 if (GET_CODE (XEXP (x, 0)) == REG
2266 && REGNO (XEXP (x, 0)) < FIRST_PSEUDO_REGISTER
2267 && CONSTANT_P (XEXP (x, 1)))
2269 for (ep = reg_eliminate; ep < &reg_eliminate[NUM_ELIMINABLE_REGS];
2270 ep++)
2271 if (ep->from_rtx == XEXP (x, 0) && ep->can_eliminate)
2273 /* The only time we want to replace a PLUS with a REG (this
2274 occurs when the constant operand of the PLUS is the negative
2275 of the offset) is when we are inside a MEM. We won't want
2276 to do so at other times because that would change the
2277 structure of the insn in a way that reload can't handle.
2278 We special-case the commonest situation in
2279 eliminate_regs_in_insn, so just replace a PLUS with a
2280 PLUS here, unless inside a MEM. */
2281 if (mem_mode != 0 && GET_CODE (XEXP (x, 1)) == CONST_INT
2282 && INTVAL (XEXP (x, 1)) == - ep->previous_offset)
2283 return ep->to_rtx;
2284 else
2285 return gen_rtx_PLUS (Pmode, ep->to_rtx,
2286 plus_constant (XEXP (x, 1),
2287 ep->previous_offset));
2290 /* If the register is not eliminable, we are done since the other
2291 operand is a constant. */
2292 return x;
2295 /* If this is part of an address, we want to bring any constant to the
2296 outermost PLUS. We will do this by doing register replacement in
2297 our operands and seeing if a constant shows up in one of them.
2299 Note that there is no risk of modifying the structure of the insn,
2300 since we only get called for its operands, thus we are either
2301 modifying the address inside a MEM, or something like an address
2302 operand of a load-address insn. */
2305 rtx new0 = eliminate_regs (XEXP (x, 0), mem_mode, insn);
2306 rtx new1 = eliminate_regs (XEXP (x, 1), mem_mode, insn);
2308 if (new0 != XEXP (x, 0) || new1 != XEXP (x, 1))
2310 /* If one side is a PLUS and the other side is a pseudo that
2311 didn't get a hard register but has a reg_equiv_constant,
2312 we must replace the constant here since it may no longer
2313 be in the position of any operand. */
2314 if (GET_CODE (new0) == PLUS && GET_CODE (new1) == REG
2315 && REGNO (new1) >= FIRST_PSEUDO_REGISTER
2316 && reg_renumber[REGNO (new1)] < 0
2317 && reg_equiv_constant != 0
2318 && reg_equiv_constant[REGNO (new1)] != 0)
2319 new1 = reg_equiv_constant[REGNO (new1)];
2320 else if (GET_CODE (new1) == PLUS && GET_CODE (new0) == REG
2321 && REGNO (new0) >= FIRST_PSEUDO_REGISTER
2322 && reg_renumber[REGNO (new0)] < 0
2323 && reg_equiv_constant[REGNO (new0)] != 0)
2324 new0 = reg_equiv_constant[REGNO (new0)];
2326 new = form_sum (new0, new1);
2328 /* As above, if we are not inside a MEM we do not want to
2329 turn a PLUS into something else. We might try to do so here
2330 for an addition of 0 if we aren't optimizing. */
2331 if (! mem_mode && GET_CODE (new) != PLUS)
2332 return gen_rtx_PLUS (GET_MODE (x), new, const0_rtx);
2333 else
2334 return new;
2337 return x;
2339 case MULT:
2340 /* If this is the product of an eliminable register and a
2341 constant, apply the distribute law and move the constant out
2342 so that we have (plus (mult ..) ..). This is needed in order
2343 to keep load-address insns valid. This case is pathological.
2344 We ignore the possibility of overflow here. */
2345 if (GET_CODE (XEXP (x, 0)) == REG
2346 && REGNO (XEXP (x, 0)) < FIRST_PSEUDO_REGISTER
2347 && GET_CODE (XEXP (x, 1)) == CONST_INT)
2348 for (ep = reg_eliminate; ep < &reg_eliminate[NUM_ELIMINABLE_REGS];
2349 ep++)
2350 if (ep->from_rtx == XEXP (x, 0) && ep->can_eliminate)
2352 if (! mem_mode
2353 /* Refs inside notes don't count for this purpose. */
2354 && ! (insn != 0 && (GET_CODE (insn) == EXPR_LIST
2355 || GET_CODE (insn) == INSN_LIST)))
2356 ep->ref_outside_mem = 1;
2358 return
2359 plus_constant (gen_rtx_MULT (Pmode, ep->to_rtx, XEXP (x, 1)),
2360 ep->previous_offset * INTVAL (XEXP (x, 1)));
2363 /* ... fall through ... */
2365 case CALL:
2366 case COMPARE:
2367 /* See comments before PLUS about handling MINUS. */
2368 case MINUS:
2369 case DIV: case UDIV:
2370 case MOD: case UMOD:
2371 case AND: case IOR: case XOR:
2372 case ROTATERT: case ROTATE:
2373 case ASHIFTRT: case LSHIFTRT: case ASHIFT:
2374 case NE: case EQ:
2375 case GE: case GT: case GEU: case GTU:
2376 case LE: case LT: case LEU: case LTU:
2378 rtx new0 = eliminate_regs (XEXP (x, 0), mem_mode, insn);
2379 rtx new1
2380 = XEXP (x, 1) ? eliminate_regs (XEXP (x, 1), mem_mode, insn) : 0;
2382 if (new0 != XEXP (x, 0) || new1 != XEXP (x, 1))
2383 return gen_rtx_fmt_ee (code, GET_MODE (x), new0, new1);
2385 return x;
2387 case EXPR_LIST:
2388 /* If we have something in XEXP (x, 0), the usual case, eliminate it. */
2389 if (XEXP (x, 0))
2391 new = eliminate_regs (XEXP (x, 0), mem_mode, insn);
2392 if (new != XEXP (x, 0))
2394 /* If this is a REG_DEAD note, it is not valid anymore.
2395 Using the eliminated version could result in creating a
2396 REG_DEAD note for the stack or frame pointer. */
2397 if (GET_MODE (x) == REG_DEAD)
2398 return (XEXP (x, 1)
2399 ? eliminate_regs (XEXP (x, 1), mem_mode, insn)
2400 : NULL_RTX);
2402 x = gen_rtx_EXPR_LIST (REG_NOTE_KIND (x), new, XEXP (x, 1));
2406 /* ... fall through ... */
2408 case INSN_LIST:
2409 /* Now do eliminations in the rest of the chain. If this was
2410 an EXPR_LIST, this might result in allocating more memory than is
2411 strictly needed, but it simplifies the code. */
2412 if (XEXP (x, 1))
2414 new = eliminate_regs (XEXP (x, 1), mem_mode, insn);
2415 if (new != XEXP (x, 1))
2416 return gen_rtx_fmt_ee (GET_CODE (x), GET_MODE (x), XEXP (x, 0), new);
2418 return x;
2420 case PRE_INC:
2421 case POST_INC:
2422 case PRE_DEC:
2423 case POST_DEC:
2424 case STRICT_LOW_PART:
2425 case NEG: case NOT:
2426 case SIGN_EXTEND: case ZERO_EXTEND:
2427 case TRUNCATE: case FLOAT_EXTEND: case FLOAT_TRUNCATE:
2428 case FLOAT: case FIX:
2429 case UNSIGNED_FIX: case UNSIGNED_FLOAT:
2430 case ABS:
2431 case SQRT:
2432 case FFS:
2433 new = eliminate_regs (XEXP (x, 0), mem_mode, insn);
2434 if (new != XEXP (x, 0))
2435 return gen_rtx_fmt_e (code, GET_MODE (x), new);
2436 return x;
2438 case SUBREG:
2439 /* Similar to above processing, but preserve SUBREG_WORD.
2440 Convert (subreg (mem)) to (mem) if not paradoxical.
2441 Also, if we have a non-paradoxical (subreg (pseudo)) and the
2442 pseudo didn't get a hard reg, we must replace this with the
2443 eliminated version of the memory location because push_reloads
2444 may do the replacement in certain circumstances. */
2445 if (GET_CODE (SUBREG_REG (x)) == REG
2446 && (GET_MODE_SIZE (GET_MODE (x))
2447 <= GET_MODE_SIZE (GET_MODE (SUBREG_REG (x))))
2448 && reg_equiv_memory_loc != 0
2449 && reg_equiv_memory_loc[REGNO (SUBREG_REG (x))] != 0)
2451 new = SUBREG_REG (x);
2453 else
2454 new = eliminate_regs (SUBREG_REG (x), mem_mode, insn);
2456 if (new != XEXP (x, 0))
2458 int x_size = GET_MODE_SIZE (GET_MODE (x));
2459 int new_size = GET_MODE_SIZE (GET_MODE (new));
2461 if (GET_CODE (new) == MEM
2462 && ((x_size < new_size
2463 #ifdef WORD_REGISTER_OPERATIONS
2464 /* On these machines, combine can create rtl of the form
2465 (set (subreg:m1 (reg:m2 R) 0) ...)
2466 where m1 < m2, and expects something interesting to
2467 happen to the entire word. Moreover, it will use the
2468 (reg:m2 R) later, expecting all bits to be preserved.
2469 So if the number of words is the same, preserve the
2470 subreg so that push_reloads can see it. */
2471 && ! ((x_size-1)/UNITS_PER_WORD == (new_size-1)/UNITS_PER_WORD)
2472 #endif
2474 || (x_size == new_size))
2477 int offset = SUBREG_WORD (x) * UNITS_PER_WORD;
2478 enum machine_mode mode = GET_MODE (x);
2480 if (BYTES_BIG_ENDIAN)
2481 offset += (MIN (UNITS_PER_WORD,
2482 GET_MODE_SIZE (GET_MODE (new)))
2483 - MIN (UNITS_PER_WORD, GET_MODE_SIZE (mode)));
2485 PUT_MODE (new, mode);
2486 XEXP (new, 0) = plus_constant (XEXP (new, 0), offset);
2487 return new;
2489 else
2490 return gen_rtx_SUBREG (GET_MODE (x), new, SUBREG_WORD (x));
2493 return x;
2495 case MEM:
2496 /* This is only for the benefit of the debugging backends, which call
2497 eliminate_regs on DECL_RTL; any ADDRESSOFs in the actual insns are
2498 removed after CSE. */
2499 if (GET_CODE (XEXP (x, 0)) == ADDRESSOF)
2500 return eliminate_regs (XEXP (XEXP (x, 0), 0), 0, insn);
2502 /* Our only special processing is to pass the mode of the MEM to our
2503 recursive call and copy the flags. While we are here, handle this
2504 case more efficiently. */
2505 new = eliminate_regs (XEXP (x, 0), GET_MODE (x), insn);
2506 if (new != XEXP (x, 0))
2508 new = gen_rtx_MEM (GET_MODE (x), new);
2509 MEM_COPY_ATTRIBUTES (new, x);
2510 return new;
2512 else
2513 return x;
2515 case USE:
2516 case CLOBBER:
2517 case ASM_OPERANDS:
2518 case SET:
2519 abort ();
2521 default:
2522 break;
2525 /* Process each of our operands recursively. If any have changed, make a
2526 copy of the rtx. */
2527 fmt = GET_RTX_FORMAT (code);
2528 for (i = 0; i < GET_RTX_LENGTH (code); i++, fmt++)
2530 if (*fmt == 'e')
2532 new = eliminate_regs (XEXP (x, i), mem_mode, insn);
2533 if (new != XEXP (x, i) && ! copied)
2535 rtx new_x = rtx_alloc (code);
2536 bcopy ((char *) x, (char *) new_x,
2537 (sizeof (*new_x) - sizeof (new_x->fld)
2538 + sizeof (new_x->fld[0]) * GET_RTX_LENGTH (code)));
2539 x = new_x;
2540 copied = 1;
2542 XEXP (x, i) = new;
2544 else if (*fmt == 'E')
2546 int copied_vec = 0;
2547 for (j = 0; j < XVECLEN (x, i); j++)
2549 new = eliminate_regs (XVECEXP (x, i, j), mem_mode, insn);
2550 if (new != XVECEXP (x, i, j) && ! copied_vec)
2552 rtvec new_v = gen_rtvec_v (XVECLEN (x, i),
2553 XVEC (x, i)->elem);
2554 if (! copied)
2556 rtx new_x = rtx_alloc (code);
2557 bcopy ((char *) x, (char *) new_x,
2558 (sizeof (*new_x) - sizeof (new_x->fld)
2559 + (sizeof (new_x->fld[0])
2560 * GET_RTX_LENGTH (code))));
2561 x = new_x;
2562 copied = 1;
2564 XVEC (x, i) = new_v;
2565 copied_vec = 1;
2567 XVECEXP (x, i, j) = new;
2572 return x;
2575 /* Scan rtx X for modifications of elimination target registers. Update
2576 the table of eliminables to reflect the changed state. MEM_MODE is
2577 the mode of an enclosing MEM rtx, or VOIDmode if not within a MEM. */
2579 static void
2580 elimination_effects (x, mem_mode)
2581 rtx x;
2582 enum machine_mode mem_mode;
2585 enum rtx_code code = GET_CODE (x);
2586 struct elim_table *ep;
2587 int regno;
2588 int i, j;
2589 const char *fmt;
2591 switch (code)
2593 case CONST_INT:
2594 case CONST_DOUBLE:
2595 case CONST:
2596 case SYMBOL_REF:
2597 case CODE_LABEL:
2598 case PC:
2599 case CC0:
2600 case ASM_INPUT:
2601 case ADDR_VEC:
2602 case ADDR_DIFF_VEC:
2603 case RETURN:
2604 return;
2606 case ADDRESSOF:
2607 abort ();
2609 case REG:
2610 regno = REGNO (x);
2612 /* First handle the case where we encounter a bare register that
2613 is eliminable. Replace it with a PLUS. */
2614 if (regno < FIRST_PSEUDO_REGISTER)
2616 for (ep = reg_eliminate; ep < &reg_eliminate[NUM_ELIMINABLE_REGS];
2617 ep++)
2618 if (ep->from_rtx == x && ep->can_eliminate)
2620 if (! mem_mode)
2621 ep->ref_outside_mem = 1;
2622 return;
2626 else if (reg_renumber[regno] < 0 && reg_equiv_constant
2627 && reg_equiv_constant[regno]
2628 && ! CONSTANT_P (reg_equiv_constant[regno]))
2629 elimination_effects (reg_equiv_constant[regno], mem_mode);
2630 return;
2632 case PRE_INC:
2633 case POST_INC:
2634 case PRE_DEC:
2635 case POST_DEC:
2636 case POST_MODIFY:
2637 case PRE_MODIFY:
2638 for (ep = reg_eliminate; ep < &reg_eliminate[NUM_ELIMINABLE_REGS]; ep++)
2639 if (ep->to_rtx == XEXP (x, 0))
2641 int size = GET_MODE_SIZE (mem_mode);
2643 /* If more bytes than MEM_MODE are pushed, account for them. */
2644 #ifdef PUSH_ROUNDING
2645 if (ep->to_rtx == stack_pointer_rtx)
2646 size = PUSH_ROUNDING (size);
2647 #endif
2648 if (code == PRE_DEC || code == POST_DEC)
2649 ep->offset += size;
2650 else if (code == PRE_INC || code == POST_INC)
2651 ep->offset -= size;
2652 else if ((code == PRE_MODIFY || code == POST_MODIFY)
2653 && GET_CODE (XEXP (x, 1)) == PLUS
2654 && XEXP (x, 0) == XEXP (XEXP (x, 1), 0)
2655 && CONSTANT_P (XEXP (XEXP (x, 1), 1)))
2656 ep->offset -= INTVAL (XEXP (XEXP (x, 1), 1));
2659 /* These two aren't unary operators. */
2660 if (code == POST_MODIFY || code == PRE_MODIFY)
2661 break;
2663 /* Fall through to generic unary operation case. */
2664 case STRICT_LOW_PART:
2665 case NEG: case NOT:
2666 case SIGN_EXTEND: case ZERO_EXTEND:
2667 case TRUNCATE: case FLOAT_EXTEND: case FLOAT_TRUNCATE:
2668 case FLOAT: case FIX:
2669 case UNSIGNED_FIX: case UNSIGNED_FLOAT:
2670 case ABS:
2671 case SQRT:
2672 case FFS:
2673 elimination_effects (XEXP (x, 0), mem_mode);
2674 return;
2676 case SUBREG:
2677 if (GET_CODE (SUBREG_REG (x)) == REG
2678 && (GET_MODE_SIZE (GET_MODE (x))
2679 <= GET_MODE_SIZE (GET_MODE (SUBREG_REG (x))))
2680 && reg_equiv_memory_loc != 0
2681 && reg_equiv_memory_loc[REGNO (SUBREG_REG (x))] != 0)
2682 return;
2684 elimination_effects (SUBREG_REG (x), mem_mode);
2685 return;
2687 case USE:
2688 /* If using a register that is the source of an eliminate we still
2689 think can be performed, note it cannot be performed since we don't
2690 know how this register is used. */
2691 for (ep = reg_eliminate; ep < &reg_eliminate[NUM_ELIMINABLE_REGS]; ep++)
2692 if (ep->from_rtx == XEXP (x, 0))
2693 ep->can_eliminate = 0;
2695 elimination_effects (XEXP (x, 0), mem_mode);
2696 return;
2698 case CLOBBER:
2699 /* If clobbering a register that is the replacement register for an
2700 elimination we still think can be performed, note that it cannot
2701 be performed. Otherwise, we need not be concerned about it. */
2702 for (ep = reg_eliminate; ep < &reg_eliminate[NUM_ELIMINABLE_REGS]; ep++)
2703 if (ep->to_rtx == XEXP (x, 0))
2704 ep->can_eliminate = 0;
2706 elimination_effects (XEXP (x, 0), mem_mode);
2707 return;
2709 case SET:
2710 /* Check for setting a register that we know about. */
2711 if (GET_CODE (SET_DEST (x)) == REG)
2713 /* See if this is setting the replacement register for an
2714 elimination.
2716 If DEST is the hard frame pointer, we do nothing because we
2717 assume that all assignments to the frame pointer are for
2718 non-local gotos and are being done at a time when they are valid
2719 and do not disturb anything else. Some machines want to
2720 eliminate a fake argument pointer (or even a fake frame pointer)
2721 with either the real frame or the stack pointer. Assignments to
2722 the hard frame pointer must not prevent this elimination. */
2724 for (ep = reg_eliminate; ep < &reg_eliminate[NUM_ELIMINABLE_REGS];
2725 ep++)
2726 if (ep->to_rtx == SET_DEST (x)
2727 && SET_DEST (x) != hard_frame_pointer_rtx)
2729 /* If it is being incremented, adjust the offset. Otherwise,
2730 this elimination can't be done. */
2731 rtx src = SET_SRC (x);
2733 if (GET_CODE (src) == PLUS
2734 && XEXP (src, 0) == SET_DEST (x)
2735 && GET_CODE (XEXP (src, 1)) == CONST_INT)
2736 ep->offset -= INTVAL (XEXP (src, 1));
2737 else
2738 ep->can_eliminate = 0;
2742 elimination_effects (SET_DEST (x), 0);
2743 elimination_effects (SET_SRC (x), 0);
2744 return;
2746 case MEM:
2747 if (GET_CODE (XEXP (x, 0)) == ADDRESSOF)
2748 abort ();
2750 /* Our only special processing is to pass the mode of the MEM to our
2751 recursive call. */
2752 elimination_effects (XEXP (x, 0), GET_MODE (x));
2753 return;
2755 default:
2756 break;
2759 fmt = GET_RTX_FORMAT (code);
2760 for (i = 0; i < GET_RTX_LENGTH (code); i++, fmt++)
2762 if (*fmt == 'e')
2763 elimination_effects (XEXP (x, i), mem_mode);
2764 else if (*fmt == 'E')
2765 for (j = 0; j < XVECLEN (x, i); j++)
2766 elimination_effects (XVECEXP (x, i, j), mem_mode);
2770 /* Descend through rtx X and verify that no references to eliminable registers
2771 remain. If any do remain, mark the involved register as not
2772 eliminable. */
2774 static void
2775 check_eliminable_occurrences (x)
2776 rtx x;
2778 const char *fmt;
2779 int i;
2780 enum rtx_code code;
2782 if (x == 0)
2783 return;
2785 code = GET_CODE (x);
2787 if (code == REG && REGNO (x) < FIRST_PSEUDO_REGISTER)
2789 struct elim_table *ep;
2791 for (ep = reg_eliminate; ep < &reg_eliminate[NUM_ELIMINABLE_REGS]; ep++)
2792 if (ep->from_rtx == x && ep->can_eliminate)
2793 ep->can_eliminate = 0;
2794 return;
2797 fmt = GET_RTX_FORMAT (code);
2798 for (i = 0; i < GET_RTX_LENGTH (code); i++, fmt++)
2800 if (*fmt == 'e')
2801 check_eliminable_occurrences (XEXP (x, i));
2802 else if (*fmt == 'E')
2804 int j;
2805 for (j = 0; j < XVECLEN (x, i); j++)
2806 check_eliminable_occurrences (XVECEXP (x, i, j));
2811 /* Scan INSN and eliminate all eliminable registers in it.
2813 If REPLACE is nonzero, do the replacement destructively. Also
2814 delete the insn as dead it if it is setting an eliminable register.
2816 If REPLACE is zero, do all our allocations in reload_obstack.
2818 If no eliminations were done and this insn doesn't require any elimination
2819 processing (these are not identical conditions: it might be updating sp,
2820 but not referencing fp; this needs to be seen during reload_as_needed so
2821 that the offset between fp and sp can be taken into consideration), zero
2822 is returned. Otherwise, 1 is returned. */
2824 static int
2825 eliminate_regs_in_insn (insn, replace)
2826 rtx insn;
2827 int replace;
2829 int icode = recog_memoized (insn);
2830 rtx old_body = PATTERN (insn);
2831 int insn_is_asm = asm_noperands (old_body) >= 0;
2832 rtx old_set = single_set (insn);
2833 rtx new_body;
2834 int val = 0;
2835 int i, any_changes;
2836 rtx substed_operand[MAX_RECOG_OPERANDS];
2837 rtx orig_operand[MAX_RECOG_OPERANDS];
2838 struct elim_table *ep;
2840 if (! insn_is_asm && icode < 0)
2842 if (GET_CODE (PATTERN (insn)) == USE
2843 || GET_CODE (PATTERN (insn)) == CLOBBER
2844 || GET_CODE (PATTERN (insn)) == ADDR_VEC
2845 || GET_CODE (PATTERN (insn)) == ADDR_DIFF_VEC
2846 || GET_CODE (PATTERN (insn)) == ASM_INPUT)
2847 return 0;
2848 abort ();
2851 if (! replace)
2852 push_obstacks (&reload_obstack, &reload_obstack);
2854 if (old_set != 0 && GET_CODE (SET_DEST (old_set)) == REG
2855 && REGNO (SET_DEST (old_set)) < FIRST_PSEUDO_REGISTER)
2857 /* Check for setting an eliminable register. */
2858 for (ep = reg_eliminate; ep < &reg_eliminate[NUM_ELIMINABLE_REGS]; ep++)
2859 if (ep->from_rtx == SET_DEST (old_set) && ep->can_eliminate)
2861 #if HARD_FRAME_POINTER_REGNUM != FRAME_POINTER_REGNUM
2862 /* If this is setting the frame pointer register to the
2863 hardware frame pointer register and this is an elimination
2864 that will be done (tested above), this insn is really
2865 adjusting the frame pointer downward to compensate for
2866 the adjustment done before a nonlocal goto. */
2867 if (ep->from == FRAME_POINTER_REGNUM
2868 && ep->to == HARD_FRAME_POINTER_REGNUM)
2870 rtx src = SET_SRC (old_set);
2871 int offset = 0, ok = 0;
2872 rtx prev_insn, prev_set;
2874 if (src == ep->to_rtx)
2875 offset = 0, ok = 1;
2876 else if (GET_CODE (src) == PLUS
2877 && GET_CODE (XEXP (src, 0)) == CONST_INT
2878 && XEXP (src, 1) == ep->to_rtx)
2879 offset = INTVAL (XEXP (src, 0)), ok = 1;
2880 else if (GET_CODE (src) == PLUS
2881 && GET_CODE (XEXP (src, 1)) == CONST_INT
2882 && XEXP (src, 0) == ep->to_rtx)
2883 offset = INTVAL (XEXP (src, 1)), ok = 1;
2884 else if ((prev_insn = prev_nonnote_insn (insn)) != 0
2885 && (prev_set = single_set (prev_insn)) != 0
2886 && rtx_equal_p (SET_DEST (prev_set), src))
2888 src = SET_SRC (prev_set);
2889 if (src == ep->to_rtx)
2890 offset = 0, ok = 1;
2891 else if (GET_CODE (src) == PLUS
2892 && GET_CODE (XEXP (src, 0)) == CONST_INT
2893 && XEXP (src, 1) == ep->to_rtx)
2894 offset = INTVAL (XEXP (src, 0)), ok = 1;
2895 else if (GET_CODE (src) == PLUS
2896 && GET_CODE (XEXP (src, 1)) == CONST_INT
2897 && XEXP (src, 0) == ep->to_rtx)
2898 offset = INTVAL (XEXP (src, 1)), ok = 1;
2901 if (ok)
2903 if (replace)
2905 rtx src
2906 = plus_constant (ep->to_rtx, offset - ep->offset);
2908 /* First see if this insn remains valid when we
2909 make the change. If not, keep the INSN_CODE
2910 the same and let reload fit it up. */
2911 validate_change (insn, &SET_SRC (old_set), src, 1);
2912 validate_change (insn, &SET_DEST (old_set),
2913 ep->to_rtx, 1);
2914 if (! apply_change_group ())
2916 SET_SRC (old_set) = src;
2917 SET_DEST (old_set) = ep->to_rtx;
2921 val = 1;
2922 goto done;
2925 #endif
2927 /* In this case this insn isn't serving a useful purpose. We
2928 will delete it in reload_as_needed once we know that this
2929 elimination is, in fact, being done.
2931 If REPLACE isn't set, we can't delete this insn, but needn't
2932 process it since it won't be used unless something changes. */
2933 if (replace)
2935 delete_dead_insn (insn);
2936 return 1;
2938 val = 1;
2939 goto done;
2943 /* We allow one special case which happens to work on all machines we
2944 currently support: a single set with the source being a PLUS of an
2945 eliminable register and a constant. */
2946 if (old_set
2947 && GET_CODE (SET_SRC (old_set)) == PLUS
2948 && GET_CODE (XEXP (SET_SRC (old_set), 0)) == REG
2949 && GET_CODE (XEXP (SET_SRC (old_set), 1)) == CONST_INT
2950 && REGNO (XEXP (SET_SRC (old_set), 0)) < FIRST_PSEUDO_REGISTER)
2952 rtx reg = XEXP (SET_SRC (old_set), 0);
2953 int offset = INTVAL (XEXP (SET_SRC (old_set), 1));
2955 for (ep = reg_eliminate; ep < &reg_eliminate[NUM_ELIMINABLE_REGS]; ep++)
2956 if (ep->from_rtx == reg && ep->can_eliminate)
2958 offset += ep->offset;
2960 if (offset == 0)
2962 /* We assume here that we don't need a PARALLEL of
2963 any CLOBBERs for this assignment. There's not
2964 much we can do if we do need it. */
2965 PATTERN (insn) = gen_rtx_SET (VOIDmode,
2966 SET_DEST (old_set),
2967 ep->to_rtx);
2968 INSN_CODE (insn) = recog (PATTERN (insn), insn, 0);
2969 if (INSN_CODE (insn) < 0)
2970 abort ();
2972 else
2974 new_body = old_body;
2975 if (! replace)
2977 new_body = copy_insn (old_body);
2978 if (REG_NOTES (insn))
2979 REG_NOTES (insn) = copy_insn_1 (REG_NOTES (insn));
2981 PATTERN (insn) = new_body;
2982 old_set = single_set (insn);
2984 XEXP (SET_SRC (old_set), 0) = ep->to_rtx;
2985 XEXP (SET_SRC (old_set), 1) = GEN_INT (offset);
2987 val = 1;
2988 /* This can't have an effect on elimination offsets, so skip right
2989 to the end. */
2990 goto done;
2994 /* Determine the effects of this insn on elimination offsets. */
2995 elimination_effects (old_body, 0);
2997 /* Eliminate all eliminable registers occurring in operands that
2998 can be handled by reload. */
2999 extract_insn (insn);
3000 any_changes = 0;
3001 for (i = 0; i < recog_data.n_operands; i++)
3003 orig_operand[i] = recog_data.operand[i];
3004 substed_operand[i] = recog_data.operand[i];
3006 /* For an asm statement, every operand is eliminable. */
3007 if (insn_is_asm || insn_data[icode].operand[i].eliminable)
3009 /* Check for setting a register that we know about. */
3010 if (recog_data.operand_type[i] != OP_IN
3011 && GET_CODE (orig_operand[i]) == REG)
3013 /* If we are assigning to a register that can be eliminated, it
3014 must be as part of a PARALLEL, since the code above handles
3015 single SETs. We must indicate that we can no longer
3016 eliminate this reg. */
3017 for (ep = reg_eliminate; ep < &reg_eliminate[NUM_ELIMINABLE_REGS];
3018 ep++)
3019 if (ep->from_rtx == orig_operand[i] && ep->can_eliminate)
3020 ep->can_eliminate = 0;
3023 substed_operand[i] = eliminate_regs (recog_data.operand[i], 0,
3024 replace ? insn : NULL_RTX);
3025 if (substed_operand[i] != orig_operand[i])
3026 val = any_changes = 1;
3027 /* Terminate the search in check_eliminable_occurrences at
3028 this point. */
3029 *recog_data.operand_loc[i] = 0;
3031 /* If an output operand changed from a REG to a MEM and INSN is an
3032 insn, write a CLOBBER insn. */
3033 if (recog_data.operand_type[i] != OP_IN
3034 && GET_CODE (orig_operand[i]) == REG
3035 && GET_CODE (substed_operand[i]) == MEM
3036 && replace)
3037 emit_insn_after (gen_rtx_CLOBBER (VOIDmode, orig_operand[i]),
3038 insn);
3042 for (i = 0; i < recog_data.n_dups; i++)
3043 *recog_data.dup_loc[i]
3044 = *recog_data.operand_loc[(int)recog_data.dup_num[i]];
3046 /* If any eliminable remain, they aren't eliminable anymore. */
3047 check_eliminable_occurrences (old_body);
3049 /* Substitute the operands; the new values are in the substed_operand
3050 array. */
3051 for (i = 0; i < recog_data.n_operands; i++)
3052 *recog_data.operand_loc[i] = substed_operand[i];
3053 for (i = 0; i < recog_data.n_dups; i++)
3054 *recog_data.dup_loc[i] = substed_operand[(int)recog_data.dup_num[i]];
3056 /* If we are replacing a body that was a (set X (plus Y Z)), try to
3057 re-recognize the insn. We do this in case we had a simple addition
3058 but now can do this as a load-address. This saves an insn in this
3059 common case.
3060 If re-recognition fails, the old insn code number will still be used,
3061 and some register operands may have changed into PLUS expressions.
3062 These will be handled by find_reloads by loading them into a register
3063 again.*/
3065 if (val)
3067 /* If we aren't replacing things permanently and we changed something,
3068 make another copy to ensure that all the RTL is new. Otherwise
3069 things can go wrong if find_reload swaps commutative operands
3070 and one is inside RTL that has been copied while the other is not. */
3071 new_body = old_body;
3072 if (! replace)
3074 new_body = copy_insn (old_body);
3075 if (REG_NOTES (insn))
3076 REG_NOTES (insn) = copy_insn_1 (REG_NOTES (insn));
3078 PATTERN (insn) = new_body;
3080 /* If we had a move insn but now we don't, rerecognize it. This will
3081 cause spurious re-recognition if the old move had a PARALLEL since
3082 the new one still will, but we can't call single_set without
3083 having put NEW_BODY into the insn and the re-recognition won't
3084 hurt in this rare case. */
3085 /* ??? Why this huge if statement - why don't we just rerecognize the
3086 thing always? */
3087 if (! insn_is_asm
3088 && old_set != 0
3089 && ((GET_CODE (SET_SRC (old_set)) == REG
3090 && (GET_CODE (new_body) != SET
3091 || GET_CODE (SET_SRC (new_body)) != REG))
3092 /* If this was a load from or store to memory, compare
3093 the MEM in recog_data.operand to the one in the insn.
3094 If they are not equal, then rerecognize the insn. */
3095 || (old_set != 0
3096 && ((GET_CODE (SET_SRC (old_set)) == MEM
3097 && SET_SRC (old_set) != recog_data.operand[1])
3098 || (GET_CODE (SET_DEST (old_set)) == MEM
3099 && SET_DEST (old_set) != recog_data.operand[0])))
3100 /* If this was an add insn before, rerecognize. */
3101 || GET_CODE (SET_SRC (old_set)) == PLUS))
3103 int new_icode = recog (PATTERN (insn), insn, 0);
3104 if (new_icode < 0)
3105 INSN_CODE (insn) = icode;
3109 /* Restore the old body. If there were any changes to it, we made a copy
3110 of it while the changes were still in place, so we'll correctly return
3111 a modified insn below. */
3112 if (! replace)
3114 /* Restore the old body. */
3115 for (i = 0; i < recog_data.n_operands; i++)
3116 *recog_data.operand_loc[i] = orig_operand[i];
3117 for (i = 0; i < recog_data.n_dups; i++)
3118 *recog_data.dup_loc[i] = orig_operand[(int)recog_data.dup_num[i]];
3121 /* Update all elimination pairs to reflect the status after the current
3122 insn. The changes we make were determined by the earlier call to
3123 elimination_effects.
3125 We also detect a cases where register elimination cannot be done,
3126 namely, if a register would be both changed and referenced outside a MEM
3127 in the resulting insn since such an insn is often undefined and, even if
3128 not, we cannot know what meaning will be given to it. Note that it is
3129 valid to have a register used in an address in an insn that changes it
3130 (presumably with a pre- or post-increment or decrement).
3132 If anything changes, return nonzero. */
3134 for (ep = reg_eliminate; ep < &reg_eliminate[NUM_ELIMINABLE_REGS]; ep++)
3136 if (ep->previous_offset != ep->offset && ep->ref_outside_mem)
3137 ep->can_eliminate = 0;
3139 ep->ref_outside_mem = 0;
3141 if (ep->previous_offset != ep->offset)
3142 val = 1;
3145 done:
3146 /* If we changed something, perform elimination in REG_NOTES. This is
3147 needed even when REPLACE is zero because a REG_DEAD note might refer
3148 to a register that we eliminate and could cause a different number
3149 of spill registers to be needed in the final reload pass than in
3150 the pre-passes. */
3151 if (val && REG_NOTES (insn) != 0)
3152 REG_NOTES (insn) = eliminate_regs (REG_NOTES (insn), 0, REG_NOTES (insn));
3154 if (! replace)
3155 pop_obstacks ();
3157 return val;
3160 /* Loop through all elimination pairs.
3161 Recalculate the number not at initial offset.
3163 Compute the maximum offset (minimum offset if the stack does not
3164 grow downward) for each elimination pair. */
3166 static void
3167 update_eliminable_offsets ()
3169 struct elim_table *ep;
3171 num_not_at_initial_offset = 0;
3172 for (ep = reg_eliminate; ep < &reg_eliminate[NUM_ELIMINABLE_REGS]; ep++)
3174 ep->previous_offset = ep->offset;
3175 if (ep->can_eliminate && ep->offset != ep->initial_offset)
3176 num_not_at_initial_offset++;
3180 /* Given X, a SET or CLOBBER of DEST, if DEST is the target of a register
3181 replacement we currently believe is valid, mark it as not eliminable if X
3182 modifies DEST in any way other than by adding a constant integer to it.
3184 If DEST is the frame pointer, we do nothing because we assume that
3185 all assignments to the hard frame pointer are nonlocal gotos and are being
3186 done at a time when they are valid and do not disturb anything else.
3187 Some machines want to eliminate a fake argument pointer with either the
3188 frame or stack pointer. Assignments to the hard frame pointer must not
3189 prevent this elimination.
3191 Called via note_stores from reload before starting its passes to scan
3192 the insns of the function. */
3194 static void
3195 mark_not_eliminable (dest, x, data)
3196 rtx dest;
3197 rtx x;
3198 void *data ATTRIBUTE_UNUSED;
3200 register unsigned int i;
3202 /* A SUBREG of a hard register here is just changing its mode. We should
3203 not see a SUBREG of an eliminable hard register, but check just in
3204 case. */
3205 if (GET_CODE (dest) == SUBREG)
3206 dest = SUBREG_REG (dest);
3208 if (dest == hard_frame_pointer_rtx)
3209 return;
3211 for (i = 0; i < NUM_ELIMINABLE_REGS; i++)
3212 if (reg_eliminate[i].can_eliminate && dest == reg_eliminate[i].to_rtx
3213 && (GET_CODE (x) != SET
3214 || GET_CODE (SET_SRC (x)) != PLUS
3215 || XEXP (SET_SRC (x), 0) != dest
3216 || GET_CODE (XEXP (SET_SRC (x), 1)) != CONST_INT))
3218 reg_eliminate[i].can_eliminate_previous
3219 = reg_eliminate[i].can_eliminate = 0;
3220 num_eliminable--;
3224 /* Verify that the initial elimination offsets did not change since the
3225 last call to set_initial_elim_offsets. This is used to catch cases
3226 where something illegal happened during reload_as_needed that could
3227 cause incorrect code to be generated if we did not check for it. */
3229 static void
3230 verify_initial_elim_offsets ()
3232 int t;
3234 #ifdef ELIMINABLE_REGS
3235 struct elim_table *ep;
3237 for (ep = reg_eliminate; ep < &reg_eliminate[NUM_ELIMINABLE_REGS]; ep++)
3239 INITIAL_ELIMINATION_OFFSET (ep->from, ep->to, t);
3240 if (t != ep->initial_offset)
3241 abort ();
3243 #else
3244 INITIAL_FRAME_POINTER_OFFSET (t);
3245 if (t != reg_eliminate[0].initial_offset)
3246 abort ();
3247 #endif
3250 /* Reset all offsets on eliminable registers to their initial values. */
3252 static void
3253 set_initial_elim_offsets ()
3255 struct elim_table *ep = reg_eliminate;
3257 #ifdef ELIMINABLE_REGS
3258 for (; ep < &reg_eliminate[NUM_ELIMINABLE_REGS]; ep++)
3260 INITIAL_ELIMINATION_OFFSET (ep->from, ep->to, ep->initial_offset);
3261 ep->previous_offset = ep->offset = ep->initial_offset;
3263 #else
3264 INITIAL_FRAME_POINTER_OFFSET (ep->initial_offset);
3265 ep->previous_offset = ep->offset = ep->initial_offset;
3266 #endif
3268 num_not_at_initial_offset = 0;
3271 /* Initialize the known label offsets.
3272 Set a known offset for each forced label to be at the initial offset
3273 of each elimination. We do this because we assume that all
3274 computed jumps occur from a location where each elimination is
3275 at its initial offset.
3276 For all other labels, show that we don't know the offsets. */
3278 static void
3279 set_initial_label_offsets ()
3281 rtx x;
3282 bzero ((char *) &offsets_known_at[get_first_label_num ()], num_labels);
3284 for (x = forced_labels; x; x = XEXP (x, 1))
3285 if (XEXP (x, 0))
3286 set_label_offsets (XEXP (x, 0), NULL_RTX, 1);
3289 /* Set all elimination offsets to the known values for the code label given
3290 by INSN. */
3292 static void
3293 set_offsets_for_label (insn)
3294 rtx insn;
3296 unsigned int i;
3297 int label_nr = CODE_LABEL_NUMBER (insn);
3298 struct elim_table *ep;
3300 num_not_at_initial_offset = 0;
3301 for (i = 0, ep = reg_eliminate; i < NUM_ELIMINABLE_REGS; ep++, i++)
3303 ep->offset = ep->previous_offset = offsets_at[label_nr][i];
3304 if (ep->can_eliminate && ep->offset != ep->initial_offset)
3305 num_not_at_initial_offset++;
3309 /* See if anything that happened changes which eliminations are valid.
3310 For example, on the Sparc, whether or not the frame pointer can
3311 be eliminated can depend on what registers have been used. We need
3312 not check some conditions again (such as flag_omit_frame_pointer)
3313 since they can't have changed. */
3315 static void
3316 update_eliminables (pset)
3317 HARD_REG_SET *pset;
3319 #if HARD_FRAME_POINTER_REGNUM != FRAME_POINTER_REGNUM
3320 int previous_frame_pointer_needed = frame_pointer_needed;
3321 #endif
3322 struct elim_table *ep;
3324 for (ep = reg_eliminate; ep < &reg_eliminate[NUM_ELIMINABLE_REGS]; ep++)
3325 if ((ep->from == HARD_FRAME_POINTER_REGNUM && FRAME_POINTER_REQUIRED)
3326 #ifdef ELIMINABLE_REGS
3327 || ! CAN_ELIMINATE (ep->from, ep->to)
3328 #endif
3330 ep->can_eliminate = 0;
3332 /* Look for the case where we have discovered that we can't replace
3333 register A with register B and that means that we will now be
3334 trying to replace register A with register C. This means we can
3335 no longer replace register C with register B and we need to disable
3336 such an elimination, if it exists. This occurs often with A == ap,
3337 B == sp, and C == fp. */
3339 for (ep = reg_eliminate; ep < &reg_eliminate[NUM_ELIMINABLE_REGS]; ep++)
3341 struct elim_table *op;
3342 register int new_to = -1;
3344 if (! ep->can_eliminate && ep->can_eliminate_previous)
3346 /* Find the current elimination for ep->from, if there is a
3347 new one. */
3348 for (op = reg_eliminate;
3349 op < &reg_eliminate[NUM_ELIMINABLE_REGS]; op++)
3350 if (op->from == ep->from && op->can_eliminate)
3352 new_to = op->to;
3353 break;
3356 /* See if there is an elimination of NEW_TO -> EP->TO. If so,
3357 disable it. */
3358 for (op = reg_eliminate;
3359 op < &reg_eliminate[NUM_ELIMINABLE_REGS]; op++)
3360 if (op->from == new_to && op->to == ep->to)
3361 op->can_eliminate = 0;
3365 /* See if any registers that we thought we could eliminate the previous
3366 time are no longer eliminable. If so, something has changed and we
3367 must spill the register. Also, recompute the number of eliminable
3368 registers and see if the frame pointer is needed; it is if there is
3369 no elimination of the frame pointer that we can perform. */
3371 frame_pointer_needed = 1;
3372 for (ep = reg_eliminate; ep < &reg_eliminate[NUM_ELIMINABLE_REGS]; ep++)
3374 if (ep->can_eliminate && ep->from == FRAME_POINTER_REGNUM
3375 && ep->to != HARD_FRAME_POINTER_REGNUM)
3376 frame_pointer_needed = 0;
3378 if (! ep->can_eliminate && ep->can_eliminate_previous)
3380 ep->can_eliminate_previous = 0;
3381 SET_HARD_REG_BIT (*pset, ep->from);
3382 num_eliminable--;
3386 #if HARD_FRAME_POINTER_REGNUM != FRAME_POINTER_REGNUM
3387 /* If we didn't need a frame pointer last time, but we do now, spill
3388 the hard frame pointer. */
3389 if (frame_pointer_needed && ! previous_frame_pointer_needed)
3390 SET_HARD_REG_BIT (*pset, HARD_FRAME_POINTER_REGNUM);
3391 #endif
3394 /* Initialize the table of registers to eliminate. */
3396 static void
3397 init_elim_table ()
3399 struct elim_table *ep;
3400 #ifdef ELIMINABLE_REGS
3401 struct elim_table_1 *ep1;
3402 #endif
3404 if (!reg_eliminate)
3405 reg_eliminate = (struct elim_table *)
3406 xcalloc(sizeof(struct elim_table), NUM_ELIMINABLE_REGS);
3408 /* Does this function require a frame pointer? */
3410 frame_pointer_needed = (! flag_omit_frame_pointer
3411 #ifdef EXIT_IGNORE_STACK
3412 /* ?? If EXIT_IGNORE_STACK is set, we will not save
3413 and restore sp for alloca. So we can't eliminate
3414 the frame pointer in that case. At some point,
3415 we should improve this by emitting the
3416 sp-adjusting insns for this case. */
3417 || (current_function_calls_alloca
3418 && EXIT_IGNORE_STACK)
3419 #endif
3420 || FRAME_POINTER_REQUIRED);
3422 num_eliminable = 0;
3424 #ifdef ELIMINABLE_REGS
3425 for (ep = reg_eliminate, ep1 = reg_eliminate_1;
3426 ep < &reg_eliminate[NUM_ELIMINABLE_REGS]; ep++, ep1++)
3428 ep->from = ep1->from;
3429 ep->to = ep1->to;
3430 ep->can_eliminate = ep->can_eliminate_previous
3431 = (CAN_ELIMINATE (ep->from, ep->to)
3432 && ! (ep->to == STACK_POINTER_REGNUM && frame_pointer_needed));
3434 #else
3435 reg_eliminate[0].from = reg_eliminate_1[0].from;
3436 reg_eliminate[0].to = reg_eliminate_1[0].to;
3437 reg_eliminate[0].can_eliminate = reg_eliminate[0].can_eliminate_previous
3438 = ! frame_pointer_needed;
3439 #endif
3441 /* Count the number of eliminable registers and build the FROM and TO
3442 REG rtx's. Note that code in gen_rtx will cause, e.g.,
3443 gen_rtx (REG, Pmode, STACK_POINTER_REGNUM) to equal stack_pointer_rtx.
3444 We depend on this. */
3445 for (ep = reg_eliminate; ep < &reg_eliminate[NUM_ELIMINABLE_REGS]; ep++)
3447 num_eliminable += ep->can_eliminate;
3448 ep->from_rtx = gen_rtx_REG (Pmode, ep->from);
3449 ep->to_rtx = gen_rtx_REG (Pmode, ep->to);
3453 /* Kick all pseudos out of hard register REGNO.
3454 If DUMPFILE is nonzero, log actions taken on that file.
3456 If CANT_ELIMINATE is nonzero, it means that we are doing this spill
3457 because we found we can't eliminate some register. In the case, no pseudos
3458 are allowed to be in the register, even if they are only in a block that
3459 doesn't require spill registers, unlike the case when we are spilling this
3460 hard reg to produce another spill register.
3462 Return nonzero if any pseudos needed to be kicked out. */
3464 static void
3465 spill_hard_reg (regno, dumpfile, cant_eliminate)
3466 unsigned int regno;
3467 FILE *dumpfile ATTRIBUTE_UNUSED;
3468 int cant_eliminate;
3470 register int i;
3472 if (cant_eliminate)
3474 SET_HARD_REG_BIT (bad_spill_regs_global, regno);
3475 regs_ever_live[regno] = 1;
3478 /* Spill every pseudo reg that was allocated to this reg
3479 or to something that overlaps this reg. */
3481 for (i = FIRST_PSEUDO_REGISTER; i < max_regno; i++)
3482 if (reg_renumber[i] >= 0
3483 && (unsigned int) reg_renumber[i] <= regno
3484 && ((unsigned int) reg_renumber[i]
3485 + HARD_REGNO_NREGS ((unsigned int) reg_renumber[i],
3486 PSEUDO_REGNO_MODE (i))
3487 > regno))
3488 SET_REGNO_REG_SET (&spilled_pseudos, i);
3491 /* I'm getting weird preprocessor errors if I use IOR_HARD_REG_SET
3492 from within EXECUTE_IF_SET_IN_REG_SET. Hence this awkwardness. */
3494 static void
3495 ior_hard_reg_set (set1, set2)
3496 HARD_REG_SET *set1, *set2;
3498 IOR_HARD_REG_SET (*set1, *set2);
3501 /* After find_reload_regs has been run for all insn that need reloads,
3502 and/or spill_hard_regs was called, this function is used to actually
3503 spill pseudo registers and try to reallocate them. It also sets up the
3504 spill_regs array for use by choose_reload_regs. */
3506 static int
3507 finish_spills (global, dumpfile)
3508 int global;
3509 FILE *dumpfile;
3511 struct insn_chain *chain;
3512 int something_changed = 0;
3513 int i;
3515 /* Build the spill_regs array for the function. */
3516 /* If there are some registers still to eliminate and one of the spill regs
3517 wasn't ever used before, additional stack space may have to be
3518 allocated to store this register. Thus, we may have changed the offset
3519 between the stack and frame pointers, so mark that something has changed.
3521 One might think that we need only set VAL to 1 if this is a call-used
3522 register. However, the set of registers that must be saved by the
3523 prologue is not identical to the call-used set. For example, the
3524 register used by the call insn for the return PC is a call-used register,
3525 but must be saved by the prologue. */
3527 n_spills = 0;
3528 for (i = 0; i < FIRST_PSEUDO_REGISTER; i++)
3529 if (TEST_HARD_REG_BIT (used_spill_regs, i))
3531 spill_reg_order[i] = n_spills;
3532 spill_regs[n_spills++] = i;
3533 if (num_eliminable && ! regs_ever_live[i])
3534 something_changed = 1;
3535 regs_ever_live[i] = 1;
3537 else
3538 spill_reg_order[i] = -1;
3540 EXECUTE_IF_SET_IN_REG_SET
3541 (&spilled_pseudos, FIRST_PSEUDO_REGISTER, i,
3543 /* Record the current hard register the pseudo is allocated to in
3544 pseudo_previous_regs so we avoid reallocating it to the same
3545 hard reg in a later pass. */
3546 if (reg_renumber[i] < 0)
3547 abort ();
3549 SET_HARD_REG_BIT (pseudo_previous_regs[i], reg_renumber[i]);
3550 /* Mark it as no longer having a hard register home. */
3551 reg_renumber[i] = -1;
3552 /* We will need to scan everything again. */
3553 something_changed = 1;
3556 /* Retry global register allocation if possible. */
3557 if (global)
3559 bzero ((char *) pseudo_forbidden_regs, max_regno * sizeof (HARD_REG_SET));
3560 /* For every insn that needs reloads, set the registers used as spill
3561 regs in pseudo_forbidden_regs for every pseudo live across the
3562 insn. */
3563 for (chain = insns_need_reload; chain; chain = chain->next_need_reload)
3565 EXECUTE_IF_SET_IN_REG_SET
3566 (&chain->live_throughout, FIRST_PSEUDO_REGISTER, i,
3568 ior_hard_reg_set (pseudo_forbidden_regs + i,
3569 &chain->used_spill_regs);
3571 EXECUTE_IF_SET_IN_REG_SET
3572 (&chain->dead_or_set, FIRST_PSEUDO_REGISTER, i,
3574 ior_hard_reg_set (pseudo_forbidden_regs + i,
3575 &chain->used_spill_regs);
3579 /* Retry allocating the spilled pseudos. For each reg, merge the
3580 various reg sets that indicate which hard regs can't be used,
3581 and call retry_global_alloc.
3582 We change spill_pseudos here to only contain pseudos that did not
3583 get a new hard register. */
3584 for (i = FIRST_PSEUDO_REGISTER; i < max_regno; i++)
3585 if (reg_old_renumber[i] != reg_renumber[i])
3587 HARD_REG_SET forbidden;
3588 COPY_HARD_REG_SET (forbidden, bad_spill_regs_global);
3589 IOR_HARD_REG_SET (forbidden, pseudo_forbidden_regs[i]);
3590 IOR_HARD_REG_SET (forbidden, pseudo_previous_regs[i]);
3591 retry_global_alloc (i, forbidden);
3592 if (reg_renumber[i] >= 0)
3593 CLEAR_REGNO_REG_SET (&spilled_pseudos, i);
3597 /* Fix up the register information in the insn chain.
3598 This involves deleting those of the spilled pseudos which did not get
3599 a new hard register home from the live_{before,after} sets. */
3600 for (chain = reload_insn_chain; chain; chain = chain->next)
3602 HARD_REG_SET used_by_pseudos;
3603 HARD_REG_SET used_by_pseudos2;
3605 AND_COMPL_REG_SET (&chain->live_throughout, &spilled_pseudos);
3606 AND_COMPL_REG_SET (&chain->dead_or_set, &spilled_pseudos);
3608 /* Mark any unallocated hard regs as available for spills. That
3609 makes inheritance work somewhat better. */
3610 if (chain->need_reload)
3612 REG_SET_TO_HARD_REG_SET (used_by_pseudos, &chain->live_throughout);
3613 REG_SET_TO_HARD_REG_SET (used_by_pseudos2, &chain->dead_or_set);
3614 IOR_HARD_REG_SET (used_by_pseudos, used_by_pseudos2);
3616 /* Save the old value for the sanity test below. */
3617 COPY_HARD_REG_SET (used_by_pseudos2, chain->used_spill_regs);
3619 compute_use_by_pseudos (&used_by_pseudos, &chain->live_throughout);
3620 compute_use_by_pseudos (&used_by_pseudos, &chain->dead_or_set);
3621 COMPL_HARD_REG_SET (chain->used_spill_regs, used_by_pseudos);
3622 AND_HARD_REG_SET (chain->used_spill_regs, used_spill_regs);
3624 /* Make sure we only enlarge the set. */
3625 GO_IF_HARD_REG_SUBSET (used_by_pseudos2, chain->used_spill_regs, ok);
3626 abort ();
3627 ok:;
3631 /* Let alter_reg modify the reg rtx's for the modified pseudos. */
3632 for (i = FIRST_PSEUDO_REGISTER; i < max_regno; i++)
3634 int regno = reg_renumber[i];
3635 if (reg_old_renumber[i] == regno)
3636 continue;
3638 alter_reg (i, reg_old_renumber[i]);
3639 reg_old_renumber[i] = regno;
3640 if (dumpfile)
3642 if (regno == -1)
3643 fprintf (dumpfile, " Register %d now on stack.\n\n", i);
3644 else
3645 fprintf (dumpfile, " Register %d now in %d.\n\n",
3646 i, reg_renumber[i]);
3650 return something_changed;
3653 /* Find all paradoxical subregs within X and update reg_max_ref_width.
3654 Also mark any hard registers used to store user variables as
3655 forbidden from being used for spill registers. */
3657 static void
3658 scan_paradoxical_subregs (x)
3659 register rtx x;
3661 register int i;
3662 register const char *fmt;
3663 register enum rtx_code code = GET_CODE (x);
3665 switch (code)
3667 case REG:
3668 #if 0
3669 if (SMALL_REGISTER_CLASSES && REGNO (x) < FIRST_PSEUDO_REGISTER
3670 && REG_USERVAR_P (x))
3671 SET_HARD_REG_BIT (bad_spill_regs_global, REGNO (x));
3672 #endif
3673 return;
3675 case CONST_INT:
3676 case CONST:
3677 case SYMBOL_REF:
3678 case LABEL_REF:
3679 case CONST_DOUBLE:
3680 case CC0:
3681 case PC:
3682 case USE:
3683 case CLOBBER:
3684 return;
3686 case SUBREG:
3687 if (GET_CODE (SUBREG_REG (x)) == REG
3688 && GET_MODE_SIZE (GET_MODE (x)) > GET_MODE_SIZE (GET_MODE (SUBREG_REG (x))))
3689 reg_max_ref_width[REGNO (SUBREG_REG (x))]
3690 = GET_MODE_SIZE (GET_MODE (x));
3691 return;
3693 default:
3694 break;
3697 fmt = GET_RTX_FORMAT (code);
3698 for (i = GET_RTX_LENGTH (code) - 1; i >= 0; i--)
3700 if (fmt[i] == 'e')
3701 scan_paradoxical_subregs (XEXP (x, i));
3702 else if (fmt[i] == 'E')
3704 register int j;
3705 for (j = XVECLEN (x, i) - 1; j >=0; j--)
3706 scan_paradoxical_subregs (XVECEXP (x, i, j));
3711 /* Reload pseudo-registers into hard regs around each insn as needed.
3712 Additional register load insns are output before the insn that needs it
3713 and perhaps store insns after insns that modify the reloaded pseudo reg.
3715 reg_last_reload_reg and reg_reloaded_contents keep track of
3716 which registers are already available in reload registers.
3717 We update these for the reloads that we perform,
3718 as the insns are scanned. */
3720 static void
3721 reload_as_needed (live_known)
3722 int live_known;
3724 struct insn_chain *chain;
3725 #if defined (AUTO_INC_DEC)
3726 register int i;
3727 #endif
3728 rtx x;
3730 bzero ((char *) spill_reg_rtx, sizeof spill_reg_rtx);
3731 bzero ((char *) spill_reg_store, sizeof spill_reg_store);
3732 reg_last_reload_reg = (rtx *) xcalloc (max_regno, sizeof (rtx));
3733 reg_has_output_reload = (char *) xmalloc (max_regno);
3734 CLEAR_HARD_REG_SET (reg_reloaded_valid);
3736 set_initial_elim_offsets ();
3738 for (chain = reload_insn_chain; chain; chain = chain->next)
3740 rtx prev;
3741 rtx insn = chain->insn;
3742 rtx old_next = NEXT_INSN (insn);
3744 /* If we pass a label, copy the offsets from the label information
3745 into the current offsets of each elimination. */
3746 if (GET_CODE (insn) == CODE_LABEL)
3747 set_offsets_for_label (insn);
3749 else if (GET_RTX_CLASS (GET_CODE (insn)) == 'i')
3751 rtx oldpat = PATTERN (insn);
3753 /* If this is a USE and CLOBBER of a MEM, ensure that any
3754 references to eliminable registers have been removed. */
3756 if ((GET_CODE (PATTERN (insn)) == USE
3757 || GET_CODE (PATTERN (insn)) == CLOBBER)
3758 && GET_CODE (XEXP (PATTERN (insn), 0)) == MEM)
3759 XEXP (XEXP (PATTERN (insn), 0), 0)
3760 = eliminate_regs (XEXP (XEXP (PATTERN (insn), 0), 0),
3761 GET_MODE (XEXP (PATTERN (insn), 0)),
3762 NULL_RTX);
3764 /* If we need to do register elimination processing, do so.
3765 This might delete the insn, in which case we are done. */
3766 if ((num_eliminable || num_eliminable_invariants) && chain->need_elim)
3768 eliminate_regs_in_insn (insn, 1);
3769 if (GET_CODE (insn) == NOTE)
3771 update_eliminable_offsets ();
3772 continue;
3776 /* If need_elim is nonzero but need_reload is zero, one might think
3777 that we could simply set n_reloads to 0. However, find_reloads
3778 could have done some manipulation of the insn (such as swapping
3779 commutative operands), and these manipulations are lost during
3780 the first pass for every insn that needs register elimination.
3781 So the actions of find_reloads must be redone here. */
3783 if (! chain->need_elim && ! chain->need_reload
3784 && ! chain->need_operand_change)
3785 n_reloads = 0;
3786 /* First find the pseudo regs that must be reloaded for this insn.
3787 This info is returned in the tables reload_... (see reload.h).
3788 Also modify the body of INSN by substituting RELOAD
3789 rtx's for those pseudo regs. */
3790 else
3792 bzero (reg_has_output_reload, max_regno);
3793 CLEAR_HARD_REG_SET (reg_is_output_reload);
3795 find_reloads (insn, 1, spill_indirect_levels, live_known,
3796 spill_reg_order);
3799 if (num_eliminable && chain->need_elim)
3800 update_eliminable_offsets ();
3802 if (n_reloads > 0)
3804 rtx next = NEXT_INSN (insn);
3805 rtx p;
3807 prev = PREV_INSN (insn);
3809 /* Now compute which reload regs to reload them into. Perhaps
3810 reusing reload regs from previous insns, or else output
3811 load insns to reload them. Maybe output store insns too.
3812 Record the choices of reload reg in reload_reg_rtx. */
3813 choose_reload_regs (chain);
3815 /* Merge any reloads that we didn't combine for fear of
3816 increasing the number of spill registers needed but now
3817 discover can be safely merged. */
3818 if (SMALL_REGISTER_CLASSES)
3819 merge_assigned_reloads (insn);
3821 /* Generate the insns to reload operands into or out of
3822 their reload regs. */
3823 emit_reload_insns (chain);
3825 /* Substitute the chosen reload regs from reload_reg_rtx
3826 into the insn's body (or perhaps into the bodies of other
3827 load and store insn that we just made for reloading
3828 and that we moved the structure into). */
3829 subst_reloads ();
3831 /* If this was an ASM, make sure that all the reload insns
3832 we have generated are valid. If not, give an error
3833 and delete them. */
3835 if (asm_noperands (PATTERN (insn)) >= 0)
3836 for (p = NEXT_INSN (prev); p != next; p = NEXT_INSN (p))
3837 if (p != insn && GET_RTX_CLASS (GET_CODE (p)) == 'i'
3838 && (recog_memoized (p) < 0
3839 || (extract_insn (p), ! constrain_operands (1))))
3841 error_for_asm (insn,
3842 "`asm' operand requires impossible reload");
3843 PUT_CODE (p, NOTE);
3844 NOTE_SOURCE_FILE (p) = 0;
3845 NOTE_LINE_NUMBER (p) = NOTE_INSN_DELETED;
3848 /* Any previously reloaded spilled pseudo reg, stored in this insn,
3849 is no longer validly lying around to save a future reload.
3850 Note that this does not detect pseudos that were reloaded
3851 for this insn in order to be stored in
3852 (obeying register constraints). That is correct; such reload
3853 registers ARE still valid. */
3854 note_stores (oldpat, forget_old_reloads_1, NULL);
3856 /* There may have been CLOBBER insns placed after INSN. So scan
3857 between INSN and NEXT and use them to forget old reloads. */
3858 for (x = NEXT_INSN (insn); x != old_next; x = NEXT_INSN (x))
3859 if (GET_CODE (x) == INSN && GET_CODE (PATTERN (x)) == CLOBBER)
3860 note_stores (PATTERN (x), forget_old_reloads_1, NULL);
3862 #ifdef AUTO_INC_DEC
3863 /* Likewise for regs altered by auto-increment in this insn.
3864 REG_INC notes have been changed by reloading:
3865 find_reloads_address_1 records substitutions for them,
3866 which have been performed by subst_reloads above. */
3867 for (i = n_reloads - 1; i >= 0; i--)
3869 rtx in_reg = rld[i].in_reg;
3870 if (in_reg)
3872 enum rtx_code code = GET_CODE (in_reg);
3873 /* PRE_INC / PRE_DEC will have the reload register ending up
3874 with the same value as the stack slot, but that doesn't
3875 hold true for POST_INC / POST_DEC. Either we have to
3876 convert the memory access to a true POST_INC / POST_DEC,
3877 or we can't use the reload register for inheritance. */
3878 if ((code == POST_INC || code == POST_DEC)
3879 && TEST_HARD_REG_BIT (reg_reloaded_valid,
3880 REGNO (rld[i].reg_rtx))
3881 /* Make sure it is the inc/dec pseudo, and not
3882 some other (e.g. output operand) pseudo. */
3883 && (reg_reloaded_contents[REGNO (rld[i].reg_rtx)]
3884 == REGNO (XEXP (in_reg, 0))))
3887 rtx reload_reg = rld[i].reg_rtx;
3888 enum machine_mode mode = GET_MODE (reload_reg);
3889 int n = 0;
3890 rtx p;
3892 for (p = PREV_INSN (old_next); p != prev; p = PREV_INSN (p))
3894 /* We really want to ignore REG_INC notes here, so
3895 use PATTERN (p) as argument to reg_set_p . */
3896 if (reg_set_p (reload_reg, PATTERN (p)))
3897 break;
3898 n = count_occurrences (PATTERN (p), reload_reg, 0);
3899 if (! n)
3900 continue;
3901 if (n == 1)
3903 n = validate_replace_rtx (reload_reg,
3904 gen_rtx (code, mode,
3905 reload_reg),
3908 /* We must also verify that the constraints
3909 are met after the replacement. */
3910 extract_insn (p);
3911 if (n)
3912 n = constrain_operands (1);
3913 else
3914 break;
3916 /* If the constraints were not met, then
3917 undo the replacement. */
3918 if (!n)
3920 validate_replace_rtx (gen_rtx (code, mode,
3921 reload_reg),
3922 reload_reg, p);
3923 break;
3927 break;
3929 if (n == 1)
3931 REG_NOTES (p)
3932 = gen_rtx_EXPR_LIST (REG_INC, reload_reg,
3933 REG_NOTES (p));
3934 /* Mark this as having an output reload so that the
3935 REG_INC processing code below won't invalidate
3936 the reload for inheritance. */
3937 SET_HARD_REG_BIT (reg_is_output_reload,
3938 REGNO (reload_reg));
3939 reg_has_output_reload[REGNO (XEXP (in_reg, 0))] = 1;
3941 else
3942 forget_old_reloads_1 (XEXP (in_reg, 0), NULL_RTX,
3943 NULL);
3945 else if ((code == PRE_INC || code == PRE_DEC)
3946 && TEST_HARD_REG_BIT (reg_reloaded_valid,
3947 REGNO (rld[i].reg_rtx))
3948 /* Make sure it is the inc/dec pseudo, and not
3949 some other (e.g. output operand) pseudo. */
3950 && (reg_reloaded_contents[REGNO (rld[i].reg_rtx)]
3951 == REGNO (XEXP (in_reg, 0))))
3953 SET_HARD_REG_BIT (reg_is_output_reload,
3954 REGNO (rld[i].reg_rtx));
3955 reg_has_output_reload[REGNO (XEXP (in_reg, 0))] = 1;
3959 /* If a pseudo that got a hard register is auto-incremented,
3960 we must purge records of copying it into pseudos without
3961 hard registers. */
3962 for (x = REG_NOTES (insn); x; x = XEXP (x, 1))
3963 if (REG_NOTE_KIND (x) == REG_INC)
3965 /* See if this pseudo reg was reloaded in this insn.
3966 If so, its last-reload info is still valid
3967 because it is based on this insn's reload. */
3968 for (i = 0; i < n_reloads; i++)
3969 if (rld[i].out == XEXP (x, 0))
3970 break;
3972 if (i == n_reloads)
3973 forget_old_reloads_1 (XEXP (x, 0), NULL_RTX, NULL);
3975 #endif
3977 /* A reload reg's contents are unknown after a label. */
3978 if (GET_CODE (insn) == CODE_LABEL)
3979 CLEAR_HARD_REG_SET (reg_reloaded_valid);
3981 /* Don't assume a reload reg is still good after a call insn
3982 if it is a call-used reg. */
3983 else if (GET_CODE (insn) == CALL_INSN)
3984 AND_COMPL_HARD_REG_SET(reg_reloaded_valid, call_used_reg_set);
3987 /* Clean up. */
3988 free (reg_last_reload_reg);
3989 free (reg_has_output_reload);
3992 /* Discard all record of any value reloaded from X,
3993 or reloaded in X from someplace else;
3994 unless X is an output reload reg of the current insn.
3996 X may be a hard reg (the reload reg)
3997 or it may be a pseudo reg that was reloaded from. */
3999 static void
4000 forget_old_reloads_1 (x, ignored, data)
4001 rtx x;
4002 rtx ignored ATTRIBUTE_UNUSED;
4003 void *data ATTRIBUTE_UNUSED;
4005 unsigned int regno;
4006 unsigned int nr;
4007 int offset = 0;
4009 /* note_stores does give us subregs of hard regs. */
4010 while (GET_CODE (x) == SUBREG)
4012 offset += SUBREG_WORD (x);
4013 x = SUBREG_REG (x);
4016 if (GET_CODE (x) != REG)
4017 return;
4019 regno = REGNO (x) + offset;
4021 if (regno >= FIRST_PSEUDO_REGISTER)
4022 nr = 1;
4023 else
4025 unsigned int i;
4027 nr = HARD_REGNO_NREGS (regno, GET_MODE (x));
4028 /* Storing into a spilled-reg invalidates its contents.
4029 This can happen if a block-local pseudo is allocated to that reg
4030 and it wasn't spilled because this block's total need is 0.
4031 Then some insn might have an optional reload and use this reg. */
4032 for (i = 0; i < nr; i++)
4033 /* But don't do this if the reg actually serves as an output
4034 reload reg in the current instruction. */
4035 if (n_reloads == 0
4036 || ! TEST_HARD_REG_BIT (reg_is_output_reload, regno + i))
4037 CLEAR_HARD_REG_BIT (reg_reloaded_valid, regno + i);
4040 /* Since value of X has changed,
4041 forget any value previously copied from it. */
4043 while (nr-- > 0)
4044 /* But don't forget a copy if this is the output reload
4045 that establishes the copy's validity. */
4046 if (n_reloads == 0 || reg_has_output_reload[regno + nr] == 0)
4047 reg_last_reload_reg[regno + nr] = 0;
4050 /* The following HARD_REG_SETs indicate when each hard register is
4051 used for a reload of various parts of the current insn. */
4053 /* If reg is unavailable for all reloads. */
4054 static HARD_REG_SET reload_reg_unavailable;
4055 /* If reg is in use as a reload reg for a RELOAD_OTHER reload. */
4056 static HARD_REG_SET reload_reg_used;
4057 /* If reg is in use for a RELOAD_FOR_INPUT_ADDRESS reload for operand I. */
4058 static HARD_REG_SET reload_reg_used_in_input_addr[MAX_RECOG_OPERANDS];
4059 /* If reg is in use for a RELOAD_FOR_INPADDR_ADDRESS reload for operand I. */
4060 static HARD_REG_SET reload_reg_used_in_inpaddr_addr[MAX_RECOG_OPERANDS];
4061 /* If reg is in use for a RELOAD_FOR_OUTPUT_ADDRESS reload for operand I. */
4062 static HARD_REG_SET reload_reg_used_in_output_addr[MAX_RECOG_OPERANDS];
4063 /* If reg is in use for a RELOAD_FOR_OUTADDR_ADDRESS reload for operand I. */
4064 static HARD_REG_SET reload_reg_used_in_outaddr_addr[MAX_RECOG_OPERANDS];
4065 /* If reg is in use for a RELOAD_FOR_INPUT reload for operand I. */
4066 static HARD_REG_SET reload_reg_used_in_input[MAX_RECOG_OPERANDS];
4067 /* If reg is in use for a RELOAD_FOR_OUTPUT reload for operand I. */
4068 static HARD_REG_SET reload_reg_used_in_output[MAX_RECOG_OPERANDS];
4069 /* If reg is in use for a RELOAD_FOR_OPERAND_ADDRESS reload. */
4070 static HARD_REG_SET reload_reg_used_in_op_addr;
4071 /* If reg is in use for a RELOAD_FOR_OPADDR_ADDR reload. */
4072 static HARD_REG_SET reload_reg_used_in_op_addr_reload;
4073 /* If reg is in use for a RELOAD_FOR_INSN reload. */
4074 static HARD_REG_SET reload_reg_used_in_insn;
4075 /* If reg is in use for a RELOAD_FOR_OTHER_ADDRESS reload. */
4076 static HARD_REG_SET reload_reg_used_in_other_addr;
4078 /* If reg is in use as a reload reg for any sort of reload. */
4079 static HARD_REG_SET reload_reg_used_at_all;
4081 /* If reg is use as an inherited reload. We just mark the first register
4082 in the group. */
4083 static HARD_REG_SET reload_reg_used_for_inherit;
4085 /* Records which hard regs are used in any way, either as explicit use or
4086 by being allocated to a pseudo during any point of the current insn. */
4087 static HARD_REG_SET reg_used_in_insn;
4089 /* Mark reg REGNO as in use for a reload of the sort spec'd by OPNUM and
4090 TYPE. MODE is used to indicate how many consecutive regs are
4091 actually used. */
4093 static void
4094 mark_reload_reg_in_use (regno, opnum, type, mode)
4095 unsigned int regno;
4096 int opnum;
4097 enum reload_type type;
4098 enum machine_mode mode;
4100 unsigned int nregs = HARD_REGNO_NREGS (regno, mode);
4101 unsigned int i;
4103 for (i = regno; i < nregs + regno; i++)
4105 switch (type)
4107 case RELOAD_OTHER:
4108 SET_HARD_REG_BIT (reload_reg_used, i);
4109 break;
4111 case RELOAD_FOR_INPUT_ADDRESS:
4112 SET_HARD_REG_BIT (reload_reg_used_in_input_addr[opnum], i);
4113 break;
4115 case RELOAD_FOR_INPADDR_ADDRESS:
4116 SET_HARD_REG_BIT (reload_reg_used_in_inpaddr_addr[opnum], i);
4117 break;
4119 case RELOAD_FOR_OUTPUT_ADDRESS:
4120 SET_HARD_REG_BIT (reload_reg_used_in_output_addr[opnum], i);
4121 break;
4123 case RELOAD_FOR_OUTADDR_ADDRESS:
4124 SET_HARD_REG_BIT (reload_reg_used_in_outaddr_addr[opnum], i);
4125 break;
4127 case RELOAD_FOR_OPERAND_ADDRESS:
4128 SET_HARD_REG_BIT (reload_reg_used_in_op_addr, i);
4129 break;
4131 case RELOAD_FOR_OPADDR_ADDR:
4132 SET_HARD_REG_BIT (reload_reg_used_in_op_addr_reload, i);
4133 break;
4135 case RELOAD_FOR_OTHER_ADDRESS:
4136 SET_HARD_REG_BIT (reload_reg_used_in_other_addr, i);
4137 break;
4139 case RELOAD_FOR_INPUT:
4140 SET_HARD_REG_BIT (reload_reg_used_in_input[opnum], i);
4141 break;
4143 case RELOAD_FOR_OUTPUT:
4144 SET_HARD_REG_BIT (reload_reg_used_in_output[opnum], i);
4145 break;
4147 case RELOAD_FOR_INSN:
4148 SET_HARD_REG_BIT (reload_reg_used_in_insn, i);
4149 break;
4152 SET_HARD_REG_BIT (reload_reg_used_at_all, i);
4156 /* Similarly, but show REGNO is no longer in use for a reload. */
4158 static void
4159 clear_reload_reg_in_use (regno, opnum, type, mode)
4160 unsigned int regno;
4161 int opnum;
4162 enum reload_type type;
4163 enum machine_mode mode;
4165 unsigned int nregs = HARD_REGNO_NREGS (regno, mode);
4166 unsigned int start_regno, end_regno, r;
4167 int i;
4168 /* A complication is that for some reload types, inheritance might
4169 allow multiple reloads of the same types to share a reload register.
4170 We set check_opnum if we have to check only reloads with the same
4171 operand number, and check_any if we have to check all reloads. */
4172 int check_opnum = 0;
4173 int check_any = 0;
4174 HARD_REG_SET *used_in_set;
4176 switch (type)
4178 case RELOAD_OTHER:
4179 used_in_set = &reload_reg_used;
4180 break;
4182 case RELOAD_FOR_INPUT_ADDRESS:
4183 used_in_set = &reload_reg_used_in_input_addr[opnum];
4184 break;
4186 case RELOAD_FOR_INPADDR_ADDRESS:
4187 check_opnum = 1;
4188 used_in_set = &reload_reg_used_in_inpaddr_addr[opnum];
4189 break;
4191 case RELOAD_FOR_OUTPUT_ADDRESS:
4192 used_in_set = &reload_reg_used_in_output_addr[opnum];
4193 break;
4195 case RELOAD_FOR_OUTADDR_ADDRESS:
4196 check_opnum = 1;
4197 used_in_set = &reload_reg_used_in_outaddr_addr[opnum];
4198 break;
4200 case RELOAD_FOR_OPERAND_ADDRESS:
4201 used_in_set = &reload_reg_used_in_op_addr;
4202 break;
4204 case RELOAD_FOR_OPADDR_ADDR:
4205 check_any = 1;
4206 used_in_set = &reload_reg_used_in_op_addr_reload;
4207 break;
4209 case RELOAD_FOR_OTHER_ADDRESS:
4210 used_in_set = &reload_reg_used_in_other_addr;
4211 check_any = 1;
4212 break;
4214 case RELOAD_FOR_INPUT:
4215 used_in_set = &reload_reg_used_in_input[opnum];
4216 break;
4218 case RELOAD_FOR_OUTPUT:
4219 used_in_set = &reload_reg_used_in_output[opnum];
4220 break;
4222 case RELOAD_FOR_INSN:
4223 used_in_set = &reload_reg_used_in_insn;
4224 break;
4225 default:
4226 abort ();
4228 /* We resolve conflicts with remaining reloads of the same type by
4229 excluding the intervals of of reload registers by them from the
4230 interval of freed reload registers. Since we only keep track of
4231 one set of interval bounds, we might have to exclude somewhat
4232 more then what would be necessary if we used a HARD_REG_SET here.
4233 But this should only happen very infrequently, so there should
4234 be no reason to worry about it. */
4236 start_regno = regno;
4237 end_regno = regno + nregs;
4238 if (check_opnum || check_any)
4240 for (i = n_reloads - 1; i >= 0; i--)
4242 if (rld[i].when_needed == type
4243 && (check_any || rld[i].opnum == opnum)
4244 && rld[i].reg_rtx)
4246 unsigned int conflict_start = true_regnum (rld[i].reg_rtx);
4247 unsigned int conflict_end
4248 = (conflict_start
4249 + HARD_REGNO_NREGS (conflict_start, rld[i].mode));
4251 /* If there is an overlap with the first to-be-freed register,
4252 adjust the interval start. */
4253 if (conflict_start <= start_regno && conflict_end > start_regno)
4254 start_regno = conflict_end;
4255 /* Otherwise, if there is a conflict with one of the other
4256 to-be-freed registers, adjust the interval end. */
4257 if (conflict_start > start_regno && conflict_start < end_regno)
4258 end_regno = conflict_start;
4263 for (r = start_regno; r < end_regno; r++)
4264 CLEAR_HARD_REG_BIT (*used_in_set, r);
4267 /* 1 if reg REGNO is free as a reload reg for a reload of the sort
4268 specified by OPNUM and TYPE. */
4270 static int
4271 reload_reg_free_p (regno, opnum, type)
4272 unsigned int regno;
4273 int opnum;
4274 enum reload_type type;
4276 int i;
4278 /* In use for a RELOAD_OTHER means it's not available for anything. */
4279 if (TEST_HARD_REG_BIT (reload_reg_used, regno)
4280 || TEST_HARD_REG_BIT (reload_reg_unavailable, regno))
4281 return 0;
4283 switch (type)
4285 case RELOAD_OTHER:
4286 /* In use for anything means we can't use it for RELOAD_OTHER. */
4287 if (TEST_HARD_REG_BIT (reload_reg_used_in_other_addr, regno)
4288 || TEST_HARD_REG_BIT (reload_reg_used_in_op_addr, regno)
4289 || TEST_HARD_REG_BIT (reload_reg_used_in_insn, regno))
4290 return 0;
4292 for (i = 0; i < reload_n_operands; i++)
4293 if (TEST_HARD_REG_BIT (reload_reg_used_in_input_addr[i], regno)
4294 || TEST_HARD_REG_BIT (reload_reg_used_in_inpaddr_addr[i], regno)
4295 || TEST_HARD_REG_BIT (reload_reg_used_in_output_addr[i], regno)
4296 || TEST_HARD_REG_BIT (reload_reg_used_in_outaddr_addr[i], regno)
4297 || TEST_HARD_REG_BIT (reload_reg_used_in_input[i], regno)
4298 || TEST_HARD_REG_BIT (reload_reg_used_in_output[i], regno))
4299 return 0;
4301 return 1;
4303 case RELOAD_FOR_INPUT:
4304 if (TEST_HARD_REG_BIT (reload_reg_used_in_insn, regno)
4305 || TEST_HARD_REG_BIT (reload_reg_used_in_op_addr, regno))
4306 return 0;
4308 if (TEST_HARD_REG_BIT (reload_reg_used_in_op_addr_reload, regno))
4309 return 0;
4311 /* If it is used for some other input, can't use it. */
4312 for (i = 0; i < reload_n_operands; i++)
4313 if (TEST_HARD_REG_BIT (reload_reg_used_in_input[i], regno))
4314 return 0;
4316 /* If it is used in a later operand's address, can't use it. */
4317 for (i = opnum + 1; i < reload_n_operands; i++)
4318 if (TEST_HARD_REG_BIT (reload_reg_used_in_input_addr[i], regno)
4319 || TEST_HARD_REG_BIT (reload_reg_used_in_inpaddr_addr[i], regno))
4320 return 0;
4322 return 1;
4324 case RELOAD_FOR_INPUT_ADDRESS:
4325 /* Can't use a register if it is used for an input address for this
4326 operand or used as an input in an earlier one. */
4327 if (TEST_HARD_REG_BIT (reload_reg_used_in_input_addr[opnum], regno)
4328 || TEST_HARD_REG_BIT (reload_reg_used_in_inpaddr_addr[opnum], regno))
4329 return 0;
4331 for (i = 0; i < opnum; i++)
4332 if (TEST_HARD_REG_BIT (reload_reg_used_in_input[i], regno))
4333 return 0;
4335 return 1;
4337 case RELOAD_FOR_INPADDR_ADDRESS:
4338 /* Can't use a register if it is used for an input address
4339 for this operand or used as an input in an earlier
4340 one. */
4341 if (TEST_HARD_REG_BIT (reload_reg_used_in_inpaddr_addr[opnum], regno))
4342 return 0;
4344 for (i = 0; i < opnum; i++)
4345 if (TEST_HARD_REG_BIT (reload_reg_used_in_input[i], regno))
4346 return 0;
4348 return 1;
4350 case RELOAD_FOR_OUTPUT_ADDRESS:
4351 /* Can't use a register if it is used for an output address for this
4352 operand or used as an output in this or a later operand. */
4353 if (TEST_HARD_REG_BIT (reload_reg_used_in_output_addr[opnum], regno))
4354 return 0;
4356 for (i = opnum; i < reload_n_operands; i++)
4357 if (TEST_HARD_REG_BIT (reload_reg_used_in_output[i], regno))
4358 return 0;
4360 return 1;
4362 case RELOAD_FOR_OUTADDR_ADDRESS:
4363 /* Can't use a register if it is used for an output address
4364 for this operand or used as an output in this or a
4365 later operand. */
4366 if (TEST_HARD_REG_BIT (reload_reg_used_in_outaddr_addr[opnum], regno))
4367 return 0;
4369 for (i = opnum; i < reload_n_operands; i++)
4370 if (TEST_HARD_REG_BIT (reload_reg_used_in_output[i], regno))
4371 return 0;
4373 return 1;
4375 case RELOAD_FOR_OPERAND_ADDRESS:
4376 for (i = 0; i < reload_n_operands; i++)
4377 if (TEST_HARD_REG_BIT (reload_reg_used_in_input[i], regno))
4378 return 0;
4380 return (! TEST_HARD_REG_BIT (reload_reg_used_in_insn, regno)
4381 && ! TEST_HARD_REG_BIT (reload_reg_used_in_op_addr, regno));
4383 case RELOAD_FOR_OPADDR_ADDR:
4384 for (i = 0; i < reload_n_operands; i++)
4385 if (TEST_HARD_REG_BIT (reload_reg_used_in_input[i], regno))
4386 return 0;
4388 return (!TEST_HARD_REG_BIT (reload_reg_used_in_op_addr_reload, regno));
4390 case RELOAD_FOR_OUTPUT:
4391 /* This cannot share a register with RELOAD_FOR_INSN reloads, other
4392 outputs, or an operand address for this or an earlier output. */
4393 if (TEST_HARD_REG_BIT (reload_reg_used_in_insn, regno))
4394 return 0;
4396 for (i = 0; i < reload_n_operands; i++)
4397 if (TEST_HARD_REG_BIT (reload_reg_used_in_output[i], regno))
4398 return 0;
4400 for (i = 0; i <= opnum; i++)
4401 if (TEST_HARD_REG_BIT (reload_reg_used_in_output_addr[i], regno)
4402 || TEST_HARD_REG_BIT (reload_reg_used_in_outaddr_addr[i], regno))
4403 return 0;
4405 return 1;
4407 case RELOAD_FOR_INSN:
4408 for (i = 0; i < reload_n_operands; i++)
4409 if (TEST_HARD_REG_BIT (reload_reg_used_in_input[i], regno)
4410 || TEST_HARD_REG_BIT (reload_reg_used_in_output[i], regno))
4411 return 0;
4413 return (! TEST_HARD_REG_BIT (reload_reg_used_in_insn, regno)
4414 && ! TEST_HARD_REG_BIT (reload_reg_used_in_op_addr, regno));
4416 case RELOAD_FOR_OTHER_ADDRESS:
4417 return ! TEST_HARD_REG_BIT (reload_reg_used_in_other_addr, regno);
4419 abort ();
4422 /* Return 1 if the value in reload reg REGNO, as used by a reload
4423 needed for the part of the insn specified by OPNUM and TYPE,
4424 is still available in REGNO at the end of the insn.
4426 We can assume that the reload reg was already tested for availability
4427 at the time it is needed, and we should not check this again,
4428 in case the reg has already been marked in use. */
4430 static int
4431 reload_reg_reaches_end_p (regno, opnum, type)
4432 unsigned int regno;
4433 int opnum;
4434 enum reload_type type;
4436 int i;
4438 switch (type)
4440 case RELOAD_OTHER:
4441 /* Since a RELOAD_OTHER reload claims the reg for the entire insn,
4442 its value must reach the end. */
4443 return 1;
4445 /* If this use is for part of the insn,
4446 its value reaches if no subsequent part uses the same register.
4447 Just like the above function, don't try to do this with lots
4448 of fallthroughs. */
4450 case RELOAD_FOR_OTHER_ADDRESS:
4451 /* Here we check for everything else, since these don't conflict
4452 with anything else and everything comes later. */
4454 for (i = 0; i < reload_n_operands; i++)
4455 if (TEST_HARD_REG_BIT (reload_reg_used_in_output_addr[i], regno)
4456 || TEST_HARD_REG_BIT (reload_reg_used_in_outaddr_addr[i], regno)
4457 || TEST_HARD_REG_BIT (reload_reg_used_in_output[i], regno)
4458 || TEST_HARD_REG_BIT (reload_reg_used_in_input_addr[i], regno)
4459 || TEST_HARD_REG_BIT (reload_reg_used_in_inpaddr_addr[i], regno)
4460 || TEST_HARD_REG_BIT (reload_reg_used_in_input[i], regno))
4461 return 0;
4463 return (! TEST_HARD_REG_BIT (reload_reg_used_in_op_addr, regno)
4464 && ! TEST_HARD_REG_BIT (reload_reg_used_in_insn, regno)
4465 && ! TEST_HARD_REG_BIT (reload_reg_used, regno));
4467 case RELOAD_FOR_INPUT_ADDRESS:
4468 case RELOAD_FOR_INPADDR_ADDRESS:
4469 /* Similar, except that we check only for this and subsequent inputs
4470 and the address of only subsequent inputs and we do not need
4471 to check for RELOAD_OTHER objects since they are known not to
4472 conflict. */
4474 for (i = opnum; i < reload_n_operands; i++)
4475 if (TEST_HARD_REG_BIT (reload_reg_used_in_input[i], regno))
4476 return 0;
4478 for (i = opnum + 1; i < reload_n_operands; i++)
4479 if (TEST_HARD_REG_BIT (reload_reg_used_in_input_addr[i], regno)
4480 || TEST_HARD_REG_BIT (reload_reg_used_in_inpaddr_addr[i], regno))
4481 return 0;
4483 for (i = 0; i < reload_n_operands; i++)
4484 if (TEST_HARD_REG_BIT (reload_reg_used_in_output_addr[i], regno)
4485 || TEST_HARD_REG_BIT (reload_reg_used_in_outaddr_addr[i], regno)
4486 || TEST_HARD_REG_BIT (reload_reg_used_in_output[i], regno))
4487 return 0;
4489 if (TEST_HARD_REG_BIT (reload_reg_used_in_op_addr_reload, regno))
4490 return 0;
4492 return (! TEST_HARD_REG_BIT (reload_reg_used_in_op_addr, regno)
4493 && ! TEST_HARD_REG_BIT (reload_reg_used_in_insn, regno));
4495 case RELOAD_FOR_INPUT:
4496 /* Similar to input address, except we start at the next operand for
4497 both input and input address and we do not check for
4498 RELOAD_FOR_OPERAND_ADDRESS and RELOAD_FOR_INSN since these
4499 would conflict. */
4501 for (i = opnum + 1; i < reload_n_operands; i++)
4502 if (TEST_HARD_REG_BIT (reload_reg_used_in_input_addr[i], regno)
4503 || TEST_HARD_REG_BIT (reload_reg_used_in_inpaddr_addr[i], regno)
4504 || TEST_HARD_REG_BIT (reload_reg_used_in_input[i], regno))
4505 return 0;
4507 /* ... fall through ... */
4509 case RELOAD_FOR_OPERAND_ADDRESS:
4510 /* Check outputs and their addresses. */
4512 for (i = 0; i < reload_n_operands; i++)
4513 if (TEST_HARD_REG_BIT (reload_reg_used_in_output_addr[i], regno)
4514 || TEST_HARD_REG_BIT (reload_reg_used_in_outaddr_addr[i], regno)
4515 || TEST_HARD_REG_BIT (reload_reg_used_in_output[i], regno))
4516 return 0;
4518 return 1;
4520 case RELOAD_FOR_OPADDR_ADDR:
4521 for (i = 0; i < reload_n_operands; i++)
4522 if (TEST_HARD_REG_BIT (reload_reg_used_in_output_addr[i], regno)
4523 || TEST_HARD_REG_BIT (reload_reg_used_in_outaddr_addr[i], regno)
4524 || TEST_HARD_REG_BIT (reload_reg_used_in_output[i], regno))
4525 return 0;
4527 return (! TEST_HARD_REG_BIT (reload_reg_used_in_op_addr, regno)
4528 && !TEST_HARD_REG_BIT (reload_reg_used_in_insn, regno));
4530 case RELOAD_FOR_INSN:
4531 /* These conflict with other outputs with RELOAD_OTHER. So
4532 we need only check for output addresses. */
4534 opnum = -1;
4536 /* ... fall through ... */
4538 case RELOAD_FOR_OUTPUT:
4539 case RELOAD_FOR_OUTPUT_ADDRESS:
4540 case RELOAD_FOR_OUTADDR_ADDRESS:
4541 /* We already know these can't conflict with a later output. So the
4542 only thing to check are later output addresses. */
4543 for (i = opnum + 1; i < reload_n_operands; i++)
4544 if (TEST_HARD_REG_BIT (reload_reg_used_in_output_addr[i], regno)
4545 || TEST_HARD_REG_BIT (reload_reg_used_in_outaddr_addr[i], regno))
4546 return 0;
4548 return 1;
4551 abort ();
4554 /* Return 1 if the reloads denoted by R1 and R2 cannot share a register.
4555 Return 0 otherwise.
4557 This function uses the same algorithm as reload_reg_free_p above. */
4560 reloads_conflict (r1, r2)
4561 int r1, r2;
4563 enum reload_type r1_type = rld[r1].when_needed;
4564 enum reload_type r2_type = rld[r2].when_needed;
4565 int r1_opnum = rld[r1].opnum;
4566 int r2_opnum = rld[r2].opnum;
4568 /* RELOAD_OTHER conflicts with everything. */
4569 if (r2_type == RELOAD_OTHER)
4570 return 1;
4572 /* Otherwise, check conflicts differently for each type. */
4574 switch (r1_type)
4576 case RELOAD_FOR_INPUT:
4577 return (r2_type == RELOAD_FOR_INSN
4578 || r2_type == RELOAD_FOR_OPERAND_ADDRESS
4579 || r2_type == RELOAD_FOR_OPADDR_ADDR
4580 || r2_type == RELOAD_FOR_INPUT
4581 || ((r2_type == RELOAD_FOR_INPUT_ADDRESS
4582 || r2_type == RELOAD_FOR_INPADDR_ADDRESS)
4583 && r2_opnum > r1_opnum));
4585 case RELOAD_FOR_INPUT_ADDRESS:
4586 return ((r2_type == RELOAD_FOR_INPUT_ADDRESS && r1_opnum == r2_opnum)
4587 || (r2_type == RELOAD_FOR_INPUT && r2_opnum < r1_opnum));
4589 case RELOAD_FOR_INPADDR_ADDRESS:
4590 return ((r2_type == RELOAD_FOR_INPADDR_ADDRESS && r1_opnum == r2_opnum)
4591 || (r2_type == RELOAD_FOR_INPUT && r2_opnum < r1_opnum));
4593 case RELOAD_FOR_OUTPUT_ADDRESS:
4594 return ((r2_type == RELOAD_FOR_OUTPUT_ADDRESS && r2_opnum == r1_opnum)
4595 || (r2_type == RELOAD_FOR_OUTPUT && r2_opnum >= r1_opnum));
4597 case RELOAD_FOR_OUTADDR_ADDRESS:
4598 return ((r2_type == RELOAD_FOR_OUTADDR_ADDRESS && r2_opnum == r1_opnum)
4599 || (r2_type == RELOAD_FOR_OUTPUT && r2_opnum >= r1_opnum));
4601 case RELOAD_FOR_OPERAND_ADDRESS:
4602 return (r2_type == RELOAD_FOR_INPUT || r2_type == RELOAD_FOR_INSN
4603 || r2_type == RELOAD_FOR_OPERAND_ADDRESS);
4605 case RELOAD_FOR_OPADDR_ADDR:
4606 return (r2_type == RELOAD_FOR_INPUT
4607 || r2_type == RELOAD_FOR_OPADDR_ADDR);
4609 case RELOAD_FOR_OUTPUT:
4610 return (r2_type == RELOAD_FOR_INSN || r2_type == RELOAD_FOR_OUTPUT
4611 || ((r2_type == RELOAD_FOR_OUTPUT_ADDRESS
4612 || r2_type == RELOAD_FOR_OUTADDR_ADDRESS)
4613 && r2_opnum <= r1_opnum));
4615 case RELOAD_FOR_INSN:
4616 return (r2_type == RELOAD_FOR_INPUT || r2_type == RELOAD_FOR_OUTPUT
4617 || r2_type == RELOAD_FOR_INSN
4618 || r2_type == RELOAD_FOR_OPERAND_ADDRESS);
4620 case RELOAD_FOR_OTHER_ADDRESS:
4621 return r2_type == RELOAD_FOR_OTHER_ADDRESS;
4623 case RELOAD_OTHER:
4624 return 1;
4626 default:
4627 abort ();
4631 /* Indexed by reload number, 1 if incoming value
4632 inherited from previous insns. */
4633 char reload_inherited[MAX_RELOADS];
4635 /* For an inherited reload, this is the insn the reload was inherited from,
4636 if we know it. Otherwise, this is 0. */
4637 rtx reload_inheritance_insn[MAX_RELOADS];
4639 /* If non-zero, this is a place to get the value of the reload,
4640 rather than using reload_in. */
4641 rtx reload_override_in[MAX_RELOADS];
4643 /* For each reload, the hard register number of the register used,
4644 or -1 if we did not need a register for this reload. */
4645 int reload_spill_index[MAX_RELOADS];
4647 /* Return 1 if the value in reload reg REGNO, as used by a reload
4648 needed for the part of the insn specified by OPNUM and TYPE,
4649 may be used to load VALUE into it.
4651 Other read-only reloads with the same value do not conflict
4652 unless OUT is non-zero and these other reloads have to live while
4653 output reloads live.
4654 If OUT is CONST0_RTX, this is a special case: it means that the
4655 test should not be for using register REGNO as reload register, but
4656 for copying from register REGNO into the reload register.
4658 RELOADNUM is the number of the reload we want to load this value for;
4659 a reload does not conflict with itself.
4661 When IGNORE_ADDRESS_RELOADS is set, we can not have conflicts with
4662 reloads that load an address for the very reload we are considering.
4664 The caller has to make sure that there is no conflict with the return
4665 register. */
4666 static int
4667 reload_reg_free_for_value_p (regno, opnum, type, value, out, reloadnum,
4668 ignore_address_reloads)
4669 int regno;
4670 int opnum;
4671 enum reload_type type;
4672 rtx value, out;
4673 int reloadnum;
4674 int ignore_address_reloads;
4676 int time1;
4677 /* Set if we see an input reload that must not share its reload register
4678 with any new earlyclobber, but might otherwise share the reload
4679 register with an output or input-output reload. */
4680 int check_earlyclobber = 0;
4681 int i;
4682 int copy = 0;
4684 if (TEST_HARD_REG_BIT (reload_reg_unavailable, regno))
4685 return 0;
4687 if (out == const0_rtx)
4689 copy = 1;
4690 out = NULL_RTX;
4693 /* We use some pseudo 'time' value to check if the lifetimes of the
4694 new register use would overlap with the one of a previous reload
4695 that is not read-only or uses a different value.
4696 The 'time' used doesn't have to be linear in any shape or form, just
4697 monotonic.
4698 Some reload types use different 'buckets' for each operand.
4699 So there are MAX_RECOG_OPERANDS different time values for each
4700 such reload type.
4701 We compute TIME1 as the time when the register for the prospective
4702 new reload ceases to be live, and TIME2 for each existing
4703 reload as the time when that the reload register of that reload
4704 becomes live.
4705 Where there is little to be gained by exact lifetime calculations,
4706 we just make conservative assumptions, i.e. a longer lifetime;
4707 this is done in the 'default:' cases. */
4708 switch (type)
4710 case RELOAD_FOR_OTHER_ADDRESS:
4711 /* RELOAD_FOR_OTHER_ADDRESS conflicts with RELOAD_OTHER reloads. */
4712 time1 = copy ? 0 : 1;
4713 break;
4714 case RELOAD_OTHER:
4715 time1 = copy ? 1 : MAX_RECOG_OPERANDS * 5 + 5;
4716 break;
4717 /* For each input, we may have a sequence of RELOAD_FOR_INPADDR_ADDRESS,
4718 RELOAD_FOR_INPUT_ADDRESS and RELOAD_FOR_INPUT. By adding 0 / 1 / 2 ,
4719 respectively, to the time values for these, we get distinct time
4720 values. To get distinct time values for each operand, we have to
4721 multiply opnum by at least three. We round that up to four because
4722 multiply by four is often cheaper. */
4723 case RELOAD_FOR_INPADDR_ADDRESS:
4724 time1 = opnum * 4 + 2;
4725 break;
4726 case RELOAD_FOR_INPUT_ADDRESS:
4727 time1 = opnum * 4 + 3;
4728 break;
4729 case RELOAD_FOR_INPUT:
4730 /* All RELOAD_FOR_INPUT reloads remain live till the instruction
4731 executes (inclusive). */
4732 time1 = copy ? opnum * 4 + 4 : MAX_RECOG_OPERANDS * 4 + 3;
4733 break;
4734 case RELOAD_FOR_OPADDR_ADDR:
4735 /* opnum * 4 + 4
4736 <= (MAX_RECOG_OPERANDS - 1) * 4 + 4 == MAX_RECOG_OPERANDS * 4 */
4737 time1 = MAX_RECOG_OPERANDS * 4 + 1;
4738 break;
4739 case RELOAD_FOR_OPERAND_ADDRESS:
4740 /* RELOAD_FOR_OPERAND_ADDRESS reloads are live even while the insn
4741 is executed. */
4742 time1 = copy ? MAX_RECOG_OPERANDS * 4 + 2 : MAX_RECOG_OPERANDS * 4 + 3;
4743 break;
4744 case RELOAD_FOR_OUTADDR_ADDRESS:
4745 time1 = MAX_RECOG_OPERANDS * 4 + 4 + opnum;
4746 break;
4747 case RELOAD_FOR_OUTPUT_ADDRESS:
4748 time1 = MAX_RECOG_OPERANDS * 4 + 5 + opnum;
4749 break;
4750 default:
4751 time1 = MAX_RECOG_OPERANDS * 5 + 5;
4754 for (i = 0; i < n_reloads; i++)
4756 rtx reg = rld[i].reg_rtx;
4757 if (reg && GET_CODE (reg) == REG
4758 && ((unsigned) regno - true_regnum (reg)
4759 <= HARD_REGNO_NREGS (REGNO (reg), GET_MODE (reg)) - (unsigned)1)
4760 && i != reloadnum)
4762 if (! rld[i].in || ! rtx_equal_p (rld[i].in, value)
4763 || rld[i].out || out)
4765 int time2;
4766 switch (rld[i].when_needed)
4768 case RELOAD_FOR_OTHER_ADDRESS:
4769 time2 = 0;
4770 break;
4771 case RELOAD_FOR_INPADDR_ADDRESS:
4772 /* find_reloads makes sure that a
4773 RELOAD_FOR_{INP,OP,OUT}ADDR_ADDRESS reload is only used
4774 by at most one - the first -
4775 RELOAD_FOR_{INPUT,OPERAND,OUTPUT}_ADDRESS . If the
4776 address reload is inherited, the address address reload
4777 goes away, so we can ignore this conflict. */
4778 if (type == RELOAD_FOR_INPUT_ADDRESS && reloadnum == i + 1
4779 && ignore_address_reloads
4780 /* Unless the RELOAD_FOR_INPUT is an auto_inc expression.
4781 Then the address address is still needed to store
4782 back the new address. */
4783 && ! rld[reloadnum].out)
4784 continue;
4785 /* Likewise, if a RELOAD_FOR_INPUT can inherit a value, its
4786 RELOAD_FOR_INPUT_ADDRESS / RELOAD_FOR_INPADDR_ADDRESS
4787 reloads go away. */
4788 if (type == RELOAD_FOR_INPUT && opnum == rld[i].opnum
4789 && ignore_address_reloads
4790 /* Unless we are reloading an auto_inc expression. */
4791 && ! rld[reloadnum].out)
4792 continue;
4793 time2 = rld[i].opnum * 4 + 2;
4794 break;
4795 case RELOAD_FOR_INPUT_ADDRESS:
4796 if (type == RELOAD_FOR_INPUT && opnum == rld[i].opnum
4797 && ignore_address_reloads
4798 && ! rld[reloadnum].out)
4799 continue;
4800 time2 = rld[i].opnum * 4 + 3;
4801 break;
4802 case RELOAD_FOR_INPUT:
4803 time2 = rld[i].opnum * 4 + 4;
4804 check_earlyclobber = 1;
4805 break;
4806 /* rld[i].opnum * 4 + 4 <= (MAX_RECOG_OPERAND - 1) * 4 + 4
4807 == MAX_RECOG_OPERAND * 4 */
4808 case RELOAD_FOR_OPADDR_ADDR:
4809 if (type == RELOAD_FOR_OPERAND_ADDRESS && reloadnum == i + 1
4810 && ignore_address_reloads
4811 && ! rld[reloadnum].out)
4812 continue;
4813 time2 = MAX_RECOG_OPERANDS * 4 + 1;
4814 break;
4815 case RELOAD_FOR_OPERAND_ADDRESS:
4816 time2 = MAX_RECOG_OPERANDS * 4 + 2;
4817 check_earlyclobber = 1;
4818 break;
4819 case RELOAD_FOR_INSN:
4820 time2 = MAX_RECOG_OPERANDS * 4 + 3;
4821 break;
4822 case RELOAD_FOR_OUTPUT:
4823 /* All RELOAD_FOR_OUTPUT reloads become live just after the
4824 instruction is executed. */
4825 time2 = MAX_RECOG_OPERANDS * 4 + 4;
4826 break;
4827 /* The first RELOAD_FOR_OUTADDR_ADDRESS reload conflicts with
4828 the RELOAD_FOR_OUTPUT reloads, so assign it the same time
4829 value. */
4830 case RELOAD_FOR_OUTADDR_ADDRESS:
4831 if (type == RELOAD_FOR_OUTPUT_ADDRESS && reloadnum == i + 1
4832 && ignore_address_reloads
4833 && ! rld[reloadnum].out)
4834 continue;
4835 time2 = MAX_RECOG_OPERANDS * 4 + 4 + rld[i].opnum;
4836 break;
4837 case RELOAD_FOR_OUTPUT_ADDRESS:
4838 time2 = MAX_RECOG_OPERANDS * 4 + 5 + rld[i].opnum;
4839 break;
4840 case RELOAD_OTHER:
4841 /* If there is no conflict in the input part, handle this
4842 like an output reload. */
4843 if (! rld[i].in || rtx_equal_p (rld[i].in, value))
4845 time2 = MAX_RECOG_OPERANDS * 4 + 4;
4846 /* Earlyclobbered outputs must conflict with inputs. */
4847 if (earlyclobber_operand_p (rld[i].out))
4848 time2 = MAX_RECOG_OPERANDS * 4 + 3;
4850 break;
4852 time2 = 1;
4853 /* RELOAD_OTHER might be live beyond instruction execution,
4854 but this is not obvious when we set time2 = 1. So check
4855 here if there might be a problem with the new reload
4856 clobbering the register used by the RELOAD_OTHER. */
4857 if (out)
4858 return 0;
4859 break;
4860 default:
4861 return 0;
4863 if ((time1 >= time2
4864 && (! rld[i].in || rld[i].out
4865 || ! rtx_equal_p (rld[i].in, value)))
4866 || (out && rld[reloadnum].out_reg
4867 && time2 >= MAX_RECOG_OPERANDS * 4 + 3))
4868 return 0;
4873 /* Earlyclobbered outputs must conflict with inputs. */
4874 if (check_earlyclobber && out && earlyclobber_operand_p (out))
4875 return 0;
4877 return 1;
4880 /* Give an error message saying we failed to find a reload for INSN,
4881 and clear out reload R. */
4882 static void
4883 failed_reload (insn, r)
4884 rtx insn;
4885 int r;
4887 if (asm_noperands (PATTERN (insn)) < 0)
4888 /* It's the compiler's fault. */
4889 fatal_insn ("Could not find a spill register", insn);
4891 /* It's the user's fault; the operand's mode and constraint
4892 don't match. Disable this reload so we don't crash in final. */
4893 error_for_asm (insn,
4894 "`asm' operand constraint incompatible with operand size");
4895 rld[r].in = 0;
4896 rld[r].out = 0;
4897 rld[r].reg_rtx = 0;
4898 rld[r].optional = 1;
4899 rld[r].secondary_p = 1;
4902 /* I is the index in SPILL_REG_RTX of the reload register we are to allocate
4903 for reload R. If it's valid, get an rtx for it. Return nonzero if
4904 successful. */
4905 static int
4906 set_reload_reg (i, r)
4907 int i, r;
4909 int regno;
4910 rtx reg = spill_reg_rtx[i];
4912 if (reg == 0 || GET_MODE (reg) != rld[r].mode)
4913 spill_reg_rtx[i] = reg
4914 = gen_rtx_REG (rld[r].mode, spill_regs[i]);
4916 regno = true_regnum (reg);
4918 /* Detect when the reload reg can't hold the reload mode.
4919 This used to be one `if', but Sequent compiler can't handle that. */
4920 if (HARD_REGNO_MODE_OK (regno, rld[r].mode))
4922 enum machine_mode test_mode = VOIDmode;
4923 if (rld[r].in)
4924 test_mode = GET_MODE (rld[r].in);
4925 /* If rld[r].in has VOIDmode, it means we will load it
4926 in whatever mode the reload reg has: to wit, rld[r].mode.
4927 We have already tested that for validity. */
4928 /* Aside from that, we need to test that the expressions
4929 to reload from or into have modes which are valid for this
4930 reload register. Otherwise the reload insns would be invalid. */
4931 if (! (rld[r].in != 0 && test_mode != VOIDmode
4932 && ! HARD_REGNO_MODE_OK (regno, test_mode)))
4933 if (! (rld[r].out != 0
4934 && ! HARD_REGNO_MODE_OK (regno, GET_MODE (rld[r].out))))
4936 /* The reg is OK. */
4937 last_spill_reg = i;
4939 /* Mark as in use for this insn the reload regs we use
4940 for this. */
4941 mark_reload_reg_in_use (spill_regs[i], rld[r].opnum,
4942 rld[r].when_needed, rld[r].mode);
4944 rld[r].reg_rtx = reg;
4945 reload_spill_index[r] = spill_regs[i];
4946 return 1;
4949 return 0;
4952 /* Find a spill register to use as a reload register for reload R.
4953 LAST_RELOAD is non-zero if this is the last reload for the insn being
4954 processed.
4956 Set rld[R].reg_rtx to the register allocated.
4958 We return 1 if successful, or 0 if we couldn't find a spill reg and
4959 we didn't change anything. */
4961 static int
4962 allocate_reload_reg (chain, r, last_reload)
4963 struct insn_chain *chain ATTRIBUTE_UNUSED;
4964 int r;
4965 int last_reload;
4967 int i, pass, count;
4969 /* If we put this reload ahead, thinking it is a group,
4970 then insist on finding a group. Otherwise we can grab a
4971 reg that some other reload needs.
4972 (That can happen when we have a 68000 DATA_OR_FP_REG
4973 which is a group of data regs or one fp reg.)
4974 We need not be so restrictive if there are no more reloads
4975 for this insn.
4977 ??? Really it would be nicer to have smarter handling
4978 for that kind of reg class, where a problem like this is normal.
4979 Perhaps those classes should be avoided for reloading
4980 by use of more alternatives. */
4982 int force_group = rld[r].nregs > 1 && ! last_reload;
4984 /* If we want a single register and haven't yet found one,
4985 take any reg in the right class and not in use.
4986 If we want a consecutive group, here is where we look for it.
4988 We use two passes so we can first look for reload regs to
4989 reuse, which are already in use for other reloads in this insn,
4990 and only then use additional registers.
4991 I think that maximizing reuse is needed to make sure we don't
4992 run out of reload regs. Suppose we have three reloads, and
4993 reloads A and B can share regs. These need two regs.
4994 Suppose A and B are given different regs.
4995 That leaves none for C. */
4996 for (pass = 0; pass < 2; pass++)
4998 /* I is the index in spill_regs.
4999 We advance it round-robin between insns to use all spill regs
5000 equally, so that inherited reloads have a chance
5001 of leapfrogging each other. */
5003 i = last_spill_reg;
5005 for (count = 0; count < n_spills; count++)
5007 int class = (int) rld[r].class;
5008 int regnum;
5010 i++;
5011 if (i >= n_spills)
5012 i -= n_spills;
5013 regnum = spill_regs[i];
5015 if ((reload_reg_free_p (regnum, rld[r].opnum,
5016 rld[r].when_needed)
5017 || (rld[r].in
5018 /* We check reload_reg_used to make sure we
5019 don't clobber the return register. */
5020 && ! TEST_HARD_REG_BIT (reload_reg_used, regnum)
5021 && reload_reg_free_for_value_p (regnum,
5022 rld[r].opnum,
5023 rld[r].when_needed,
5024 rld[r].in,
5025 rld[r].out, r, 1)))
5026 && TEST_HARD_REG_BIT (reg_class_contents[class], regnum)
5027 && HARD_REGNO_MODE_OK (regnum, rld[r].mode)
5028 /* Look first for regs to share, then for unshared. But
5029 don't share regs used for inherited reloads; they are
5030 the ones we want to preserve. */
5031 && (pass
5032 || (TEST_HARD_REG_BIT (reload_reg_used_at_all,
5033 regnum)
5034 && ! TEST_HARD_REG_BIT (reload_reg_used_for_inherit,
5035 regnum))))
5037 int nr = HARD_REGNO_NREGS (regnum, rld[r].mode);
5038 /* Avoid the problem where spilling a GENERAL_OR_FP_REG
5039 (on 68000) got us two FP regs. If NR is 1,
5040 we would reject both of them. */
5041 if (force_group)
5042 nr = rld[r].nregs;
5043 /* If we need only one reg, we have already won. */
5044 if (nr == 1)
5046 /* But reject a single reg if we demand a group. */
5047 if (force_group)
5048 continue;
5049 break;
5051 /* Otherwise check that as many consecutive regs as we need
5052 are available here. */
5053 while (nr > 1)
5055 int regno = regnum + nr - 1;
5056 if (!(TEST_HARD_REG_BIT (reg_class_contents[class], regno)
5057 && spill_reg_order[regno] >= 0
5058 && reload_reg_free_p (regno, rld[r].opnum,
5059 rld[r].when_needed)))
5060 break;
5061 nr--;
5063 if (nr == 1)
5064 break;
5068 /* If we found something on pass 1, omit pass 2. */
5069 if (count < n_spills)
5070 break;
5073 /* We should have found a spill register by now. */
5074 if (count >= n_spills)
5075 return 0;
5077 /* I is the index in SPILL_REG_RTX of the reload register we are to
5078 allocate. Get an rtx for it and find its register number. */
5080 return set_reload_reg (i, r);
5083 /* Initialize all the tables needed to allocate reload registers.
5084 CHAIN is the insn currently being processed; SAVE_RELOAD_REG_RTX
5085 is the array we use to restore the reg_rtx field for every reload. */
5087 static void
5088 choose_reload_regs_init (chain, save_reload_reg_rtx)
5089 struct insn_chain *chain;
5090 rtx *save_reload_reg_rtx;
5092 int i;
5094 for (i = 0; i < n_reloads; i++)
5095 rld[i].reg_rtx = save_reload_reg_rtx[i];
5097 bzero (reload_inherited, MAX_RELOADS);
5098 bzero ((char *) reload_inheritance_insn, MAX_RELOADS * sizeof (rtx));
5099 bzero ((char *) reload_override_in, MAX_RELOADS * sizeof (rtx));
5101 CLEAR_HARD_REG_SET (reload_reg_used);
5102 CLEAR_HARD_REG_SET (reload_reg_used_at_all);
5103 CLEAR_HARD_REG_SET (reload_reg_used_in_op_addr);
5104 CLEAR_HARD_REG_SET (reload_reg_used_in_op_addr_reload);
5105 CLEAR_HARD_REG_SET (reload_reg_used_in_insn);
5106 CLEAR_HARD_REG_SET (reload_reg_used_in_other_addr);
5108 CLEAR_HARD_REG_SET (reg_used_in_insn);
5110 HARD_REG_SET tmp;
5111 REG_SET_TO_HARD_REG_SET (tmp, &chain->live_throughout);
5112 IOR_HARD_REG_SET (reg_used_in_insn, tmp);
5113 REG_SET_TO_HARD_REG_SET (tmp, &chain->dead_or_set);
5114 IOR_HARD_REG_SET (reg_used_in_insn, tmp);
5115 compute_use_by_pseudos (&reg_used_in_insn, &chain->live_throughout);
5116 compute_use_by_pseudos (&reg_used_in_insn, &chain->dead_or_set);
5119 for (i = 0; i < reload_n_operands; i++)
5121 CLEAR_HARD_REG_SET (reload_reg_used_in_output[i]);
5122 CLEAR_HARD_REG_SET (reload_reg_used_in_input[i]);
5123 CLEAR_HARD_REG_SET (reload_reg_used_in_input_addr[i]);
5124 CLEAR_HARD_REG_SET (reload_reg_used_in_inpaddr_addr[i]);
5125 CLEAR_HARD_REG_SET (reload_reg_used_in_output_addr[i]);
5126 CLEAR_HARD_REG_SET (reload_reg_used_in_outaddr_addr[i]);
5129 COMPL_HARD_REG_SET (reload_reg_unavailable, chain->used_spill_regs);
5131 CLEAR_HARD_REG_SET (reload_reg_used_for_inherit);
5133 for (i = 0; i < n_reloads; i++)
5134 /* If we have already decided to use a certain register,
5135 don't use it in another way. */
5136 if (rld[i].reg_rtx)
5137 mark_reload_reg_in_use (REGNO (rld[i].reg_rtx), rld[i].opnum,
5138 rld[i].when_needed, rld[i].mode);
5141 /* Assign hard reg targets for the pseudo-registers we must reload
5142 into hard regs for this insn.
5143 Also output the instructions to copy them in and out of the hard regs.
5145 For machines with register classes, we are responsible for
5146 finding a reload reg in the proper class. */
5148 static void
5149 choose_reload_regs (chain)
5150 struct insn_chain *chain;
5152 rtx insn = chain->insn;
5153 register int i, j;
5154 unsigned int max_group_size = 1;
5155 enum reg_class group_class = NO_REGS;
5156 int pass, win, inheritance;
5158 rtx save_reload_reg_rtx[MAX_RELOADS];
5160 /* In order to be certain of getting the registers we need,
5161 we must sort the reloads into order of increasing register class.
5162 Then our grabbing of reload registers will parallel the process
5163 that provided the reload registers.
5165 Also note whether any of the reloads wants a consecutive group of regs.
5166 If so, record the maximum size of the group desired and what
5167 register class contains all the groups needed by this insn. */
5169 for (j = 0; j < n_reloads; j++)
5171 reload_order[j] = j;
5172 reload_spill_index[j] = -1;
5174 if (rld[j].nregs > 1)
5176 max_group_size = MAX (rld[j].nregs, max_group_size);
5177 group_class
5178 = reg_class_superunion[(int)rld[j].class][(int)group_class];
5181 save_reload_reg_rtx[j] = rld[j].reg_rtx;
5184 if (n_reloads > 1)
5185 qsort (reload_order, n_reloads, sizeof (short), reload_reg_class_lower);
5187 /* If -O, try first with inheritance, then turning it off.
5188 If not -O, don't do inheritance.
5189 Using inheritance when not optimizing leads to paradoxes
5190 with fp on the 68k: fp numbers (not NaNs) fail to be equal to themselves
5191 because one side of the comparison might be inherited. */
5192 win = 0;
5193 for (inheritance = optimize > 0; inheritance >= 0; inheritance--)
5195 choose_reload_regs_init (chain, save_reload_reg_rtx);
5197 /* Process the reloads in order of preference just found.
5198 Beyond this point, subregs can be found in reload_reg_rtx.
5200 This used to look for an existing reloaded home for all of the
5201 reloads, and only then perform any new reloads. But that could lose
5202 if the reloads were done out of reg-class order because a later
5203 reload with a looser constraint might have an old home in a register
5204 needed by an earlier reload with a tighter constraint.
5206 To solve this, we make two passes over the reloads, in the order
5207 described above. In the first pass we try to inherit a reload
5208 from a previous insn. If there is a later reload that needs a
5209 class that is a proper subset of the class being processed, we must
5210 also allocate a spill register during the first pass.
5212 Then make a second pass over the reloads to allocate any reloads
5213 that haven't been given registers yet. */
5215 for (j = 0; j < n_reloads; j++)
5217 register int r = reload_order[j];
5218 rtx search_equiv = NULL_RTX;
5220 /* Ignore reloads that got marked inoperative. */
5221 if (rld[r].out == 0 && rld[r].in == 0
5222 && ! rld[r].secondary_p)
5223 continue;
5225 /* If find_reloads chose to use reload_in or reload_out as a reload
5226 register, we don't need to chose one. Otherwise, try even if it
5227 found one since we might save an insn if we find the value lying
5228 around.
5229 Try also when reload_in is a pseudo without a hard reg. */
5230 if (rld[r].in != 0 && rld[r].reg_rtx != 0
5231 && (rtx_equal_p (rld[r].in, rld[r].reg_rtx)
5232 || (rtx_equal_p (rld[r].out, rld[r].reg_rtx)
5233 && GET_CODE (rld[r].in) != MEM
5234 && true_regnum (rld[r].in) < FIRST_PSEUDO_REGISTER)))
5235 continue;
5237 #if 0 /* No longer needed for correct operation.
5238 It might give better code, or might not; worth an experiment? */
5239 /* If this is an optional reload, we can't inherit from earlier insns
5240 until we are sure that any non-optional reloads have been allocated.
5241 The following code takes advantage of the fact that optional reloads
5242 are at the end of reload_order. */
5243 if (rld[r].optional != 0)
5244 for (i = 0; i < j; i++)
5245 if ((rld[reload_order[i]].out != 0
5246 || rld[reload_order[i]].in != 0
5247 || rld[reload_order[i]].secondary_p)
5248 && ! rld[reload_order[i]].optional
5249 && rld[reload_order[i]].reg_rtx == 0)
5250 allocate_reload_reg (chain, reload_order[i], 0);
5251 #endif
5253 /* First see if this pseudo is already available as reloaded
5254 for a previous insn. We cannot try to inherit for reloads
5255 that are smaller than the maximum number of registers needed
5256 for groups unless the register we would allocate cannot be used
5257 for the groups.
5259 We could check here to see if this is a secondary reload for
5260 an object that is already in a register of the desired class.
5261 This would avoid the need for the secondary reload register.
5262 But this is complex because we can't easily determine what
5263 objects might want to be loaded via this reload. So let a
5264 register be allocated here. In `emit_reload_insns' we suppress
5265 one of the loads in the case described above. */
5267 if (inheritance)
5269 int word = 0;
5270 register int regno = -1;
5271 enum machine_mode mode = VOIDmode;
5273 if (rld[r].in == 0)
5275 else if (GET_CODE (rld[r].in) == REG)
5277 regno = REGNO (rld[r].in);
5278 mode = GET_MODE (rld[r].in);
5280 else if (GET_CODE (rld[r].in_reg) == REG)
5282 regno = REGNO (rld[r].in_reg);
5283 mode = GET_MODE (rld[r].in_reg);
5285 else if (GET_CODE (rld[r].in_reg) == SUBREG
5286 && GET_CODE (SUBREG_REG (rld[r].in_reg)) == REG)
5288 word = SUBREG_WORD (rld[r].in_reg);
5289 regno = REGNO (SUBREG_REG (rld[r].in_reg));
5290 if (regno < FIRST_PSEUDO_REGISTER)
5291 regno += word;
5292 mode = GET_MODE (rld[r].in_reg);
5294 #ifdef AUTO_INC_DEC
5295 else if ((GET_CODE (rld[r].in_reg) == PRE_INC
5296 || GET_CODE (rld[r].in_reg) == PRE_DEC
5297 || GET_CODE (rld[r].in_reg) == POST_INC
5298 || GET_CODE (rld[r].in_reg) == POST_DEC)
5299 && GET_CODE (XEXP (rld[r].in_reg, 0)) == REG)
5301 regno = REGNO (XEXP (rld[r].in_reg, 0));
5302 mode = GET_MODE (XEXP (rld[r].in_reg, 0));
5303 rld[r].out = rld[r].in;
5305 #endif
5306 #if 0
5307 /* This won't work, since REGNO can be a pseudo reg number.
5308 Also, it takes much more hair to keep track of all the things
5309 that can invalidate an inherited reload of part of a pseudoreg. */
5310 else if (GET_CODE (rld[r].in) == SUBREG
5311 && GET_CODE (SUBREG_REG (rld[r].in)) == REG)
5312 regno = REGNO (SUBREG_REG (rld[r].in)) + SUBREG_WORD (rld[r].in);
5313 #endif
5315 if (regno >= 0 && reg_last_reload_reg[regno] != 0)
5317 enum reg_class class = rld[r].class, last_class;
5318 rtx last_reg = reg_last_reload_reg[regno];
5319 enum machine_mode need_mode;
5321 i = REGNO (last_reg) + word;
5322 last_class = REGNO_REG_CLASS (i);
5324 need_mode = smallest_mode_for_size ((word+1) * UNITS_PER_WORD,
5325 GET_MODE_CLASS (mode));
5327 if (
5328 #ifdef CLASS_CANNOT_CHANGE_MODE
5329 (TEST_HARD_REG_BIT
5330 (reg_class_contents[(int) CLASS_CANNOT_CHANGE_MODE], i)
5331 ? ! CLASS_CANNOT_CHANGE_MODE_P (GET_MODE (last_reg),
5332 need_mode)
5333 : (GET_MODE_SIZE (GET_MODE (last_reg))
5334 >= GET_MODE_SIZE (need_mode)))
5335 #else
5336 (GET_MODE_SIZE (GET_MODE (last_reg))
5337 >= GET_MODE_SIZE (need_mode))
5338 #endif
5339 && reg_reloaded_contents[i] == regno
5340 && TEST_HARD_REG_BIT (reg_reloaded_valid, i)
5341 && HARD_REGNO_MODE_OK (i, rld[r].mode)
5342 && (TEST_HARD_REG_BIT (reg_class_contents[(int) class], i)
5343 /* Even if we can't use this register as a reload
5344 register, we might use it for reload_override_in,
5345 if copying it to the desired class is cheap
5346 enough. */
5347 || ((REGISTER_MOVE_COST (last_class, class)
5348 < MEMORY_MOVE_COST (mode, class, 1))
5349 #ifdef SECONDARY_INPUT_RELOAD_CLASS
5350 && (SECONDARY_INPUT_RELOAD_CLASS (class, mode,
5351 last_reg)
5352 == NO_REGS)
5353 #endif
5354 #ifdef SECONDARY_MEMORY_NEEDED
5355 && ! SECONDARY_MEMORY_NEEDED (last_class, class,
5356 mode)
5357 #endif
5360 && (rld[r].nregs == max_group_size
5361 || ! TEST_HARD_REG_BIT (reg_class_contents[(int) group_class],
5363 && reload_reg_free_for_value_p (i, rld[r].opnum,
5364 rld[r].when_needed,
5365 rld[r].in,
5366 const0_rtx, r, 1))
5368 /* If a group is needed, verify that all the subsequent
5369 registers still have their values intact. */
5370 int nr
5371 = HARD_REGNO_NREGS (i, rld[r].mode);
5372 int k;
5374 for (k = 1; k < nr; k++)
5375 if (reg_reloaded_contents[i + k] != regno
5376 || ! TEST_HARD_REG_BIT (reg_reloaded_valid, i + k))
5377 break;
5379 if (k == nr)
5381 int i1;
5383 last_reg = (GET_MODE (last_reg) == mode
5384 ? last_reg : gen_rtx_REG (mode, i));
5386 /* We found a register that contains the
5387 value we need. If this register is the
5388 same as an `earlyclobber' operand of the
5389 current insn, just mark it as a place to
5390 reload from since we can't use it as the
5391 reload register itself. */
5393 for (i1 = 0; i1 < n_earlyclobbers; i1++)
5394 if (reg_overlap_mentioned_for_reload_p
5395 (reg_last_reload_reg[regno],
5396 reload_earlyclobbers[i1]))
5397 break;
5399 if (i1 != n_earlyclobbers
5400 || ! (reload_reg_free_for_value_p
5401 (i, rld[r].opnum, rld[r].when_needed,
5402 rld[r].in, rld[r].out, r, 1))
5403 /* Don't use it if we'd clobber a pseudo reg. */
5404 || (TEST_HARD_REG_BIT (reg_used_in_insn, i)
5405 && rld[r].out
5406 && ! TEST_HARD_REG_BIT (reg_reloaded_dead, i))
5407 /* Don't clobber the frame pointer. */
5408 || (i == HARD_FRAME_POINTER_REGNUM && rld[r].out)
5409 /* Don't really use the inherited spill reg
5410 if we need it wider than we've got it. */
5411 || (GET_MODE_SIZE (rld[r].mode)
5412 > GET_MODE_SIZE (mode))
5413 || ! TEST_HARD_REG_BIT (reg_class_contents[(int) rld[r].class],
5416 /* If find_reloads chose reload_out as reload
5417 register, stay with it - that leaves the
5418 inherited register for subsequent reloads. */
5419 || (rld[r].out && rld[r].reg_rtx
5420 && rtx_equal_p (rld[r].out, rld[r].reg_rtx)))
5422 reload_override_in[r] = last_reg;
5423 reload_inheritance_insn[r]
5424 = reg_reloaded_insn[i];
5426 else
5428 int k;
5429 /* We can use this as a reload reg. */
5430 /* Mark the register as in use for this part of
5431 the insn. */
5432 mark_reload_reg_in_use (i,
5433 rld[r].opnum,
5434 rld[r].when_needed,
5435 rld[r].mode);
5436 rld[r].reg_rtx = last_reg;
5437 reload_inherited[r] = 1;
5438 reload_inheritance_insn[r]
5439 = reg_reloaded_insn[i];
5440 reload_spill_index[r] = i;
5441 for (k = 0; k < nr; k++)
5442 SET_HARD_REG_BIT (reload_reg_used_for_inherit,
5443 i + k);
5450 /* Here's another way to see if the value is already lying around. */
5451 if (inheritance
5452 && rld[r].in != 0
5453 && ! reload_inherited[r]
5454 && rld[r].out == 0
5455 && (CONSTANT_P (rld[r].in)
5456 || GET_CODE (rld[r].in) == PLUS
5457 || GET_CODE (rld[r].in) == REG
5458 || GET_CODE (rld[r].in) == MEM)
5459 && (rld[r].nregs == max_group_size
5460 || ! reg_classes_intersect_p (rld[r].class, group_class)))
5461 search_equiv = rld[r].in;
5462 /* If this is an output reload from a simple move insn, look
5463 if an equivalence for the input is available. */
5464 else if (inheritance && rld[r].in == 0 && rld[r].out != 0)
5466 rtx set = single_set (insn);
5468 if (set
5469 && rtx_equal_p (rld[r].out, SET_DEST (set))
5470 && CONSTANT_P (SET_SRC (set)))
5471 search_equiv = SET_SRC (set);
5474 if (search_equiv)
5476 register rtx equiv
5477 = find_equiv_reg (search_equiv, insn, rld[r].class,
5478 -1, NULL_PTR, 0, rld[r].mode);
5479 int regno = 0;
5481 if (equiv != 0)
5483 if (GET_CODE (equiv) == REG)
5484 regno = REGNO (equiv);
5485 else if (GET_CODE (equiv) == SUBREG)
5487 /* This must be a SUBREG of a hard register.
5488 Make a new REG since this might be used in an
5489 address and not all machines support SUBREGs
5490 there. */
5491 regno = REGNO (SUBREG_REG (equiv)) + SUBREG_WORD (equiv);
5492 equiv = gen_rtx_REG (rld[r].mode, regno);
5494 else
5495 abort ();
5498 /* If we found a spill reg, reject it unless it is free
5499 and of the desired class. */
5500 if (equiv != 0
5501 && ((TEST_HARD_REG_BIT (reload_reg_used_at_all, regno)
5502 && ! reload_reg_free_for_value_p (regno, rld[r].opnum,
5503 rld[r].when_needed,
5504 rld[r].in,
5505 rld[r].out, r, 1))
5506 || ! TEST_HARD_REG_BIT (reg_class_contents[(int) rld[r].class],
5507 regno)))
5508 equiv = 0;
5510 if (equiv != 0 && ! HARD_REGNO_MODE_OK (regno, rld[r].mode))
5511 equiv = 0;
5513 /* We found a register that contains the value we need.
5514 If this register is the same as an `earlyclobber' operand
5515 of the current insn, just mark it as a place to reload from
5516 since we can't use it as the reload register itself. */
5518 if (equiv != 0)
5519 for (i = 0; i < n_earlyclobbers; i++)
5520 if (reg_overlap_mentioned_for_reload_p (equiv,
5521 reload_earlyclobbers[i]))
5523 reload_override_in[r] = equiv;
5524 equiv = 0;
5525 break;
5528 /* If the equiv register we have found is explicitly clobbered
5529 in the current insn, it depends on the reload type if we
5530 can use it, use it for reload_override_in, or not at all.
5531 In particular, we then can't use EQUIV for a
5532 RELOAD_FOR_OUTPUT_ADDRESS reload. */
5534 if (equiv != 0 && regno_clobbered_p (regno, insn))
5536 switch (rld[r].when_needed)
5538 case RELOAD_FOR_OTHER_ADDRESS:
5539 case RELOAD_FOR_INPADDR_ADDRESS:
5540 case RELOAD_FOR_INPUT_ADDRESS:
5541 case RELOAD_FOR_OPADDR_ADDR:
5542 break;
5543 case RELOAD_OTHER:
5544 case RELOAD_FOR_INPUT:
5545 case RELOAD_FOR_OPERAND_ADDRESS:
5546 reload_override_in[r] = equiv;
5547 /* Fall through. */
5548 default:
5549 equiv = 0;
5550 break;
5554 /* If we found an equivalent reg, say no code need be generated
5555 to load it, and use it as our reload reg. */
5556 if (equiv != 0 && regno != HARD_FRAME_POINTER_REGNUM)
5558 int nr = HARD_REGNO_NREGS (regno, rld[r].mode);
5559 int k;
5560 rld[r].reg_rtx = equiv;
5561 reload_inherited[r] = 1;
5563 /* If reg_reloaded_valid is not set for this register,
5564 there might be a stale spill_reg_store lying around.
5565 We must clear it, since otherwise emit_reload_insns
5566 might delete the store. */
5567 if (! TEST_HARD_REG_BIT (reg_reloaded_valid, regno))
5568 spill_reg_store[regno] = NULL_RTX;
5569 /* If any of the hard registers in EQUIV are spill
5570 registers, mark them as in use for this insn. */
5571 for (k = 0; k < nr; k++)
5573 i = spill_reg_order[regno + k];
5574 if (i >= 0)
5576 mark_reload_reg_in_use (regno, rld[r].opnum,
5577 rld[r].when_needed,
5578 rld[r].mode);
5579 SET_HARD_REG_BIT (reload_reg_used_for_inherit,
5580 regno + k);
5586 /* If we found a register to use already, or if this is an optional
5587 reload, we are done. */
5588 if (rld[r].reg_rtx != 0 || rld[r].optional != 0)
5589 continue;
5591 #if 0 /* No longer needed for correct operation. Might or might not
5592 give better code on the average. Want to experiment? */
5594 /* See if there is a later reload that has a class different from our
5595 class that intersects our class or that requires less register
5596 than our reload. If so, we must allocate a register to this
5597 reload now, since that reload might inherit a previous reload
5598 and take the only available register in our class. Don't do this
5599 for optional reloads since they will force all previous reloads
5600 to be allocated. Also don't do this for reloads that have been
5601 turned off. */
5603 for (i = j + 1; i < n_reloads; i++)
5605 int s = reload_order[i];
5607 if ((rld[s].in == 0 && rld[s].out == 0
5608 && ! rld[s].secondary_p)
5609 || rld[s].optional)
5610 continue;
5612 if ((rld[s].class != rld[r].class
5613 && reg_classes_intersect_p (rld[r].class,
5614 rld[s].class))
5615 || rld[s].nregs < rld[r].nregs)
5616 break;
5619 if (i == n_reloads)
5620 continue;
5622 allocate_reload_reg (chain, r, j == n_reloads - 1);
5623 #endif
5626 /* Now allocate reload registers for anything non-optional that
5627 didn't get one yet. */
5628 for (j = 0; j < n_reloads; j++)
5630 register int r = reload_order[j];
5632 /* Ignore reloads that got marked inoperative. */
5633 if (rld[r].out == 0 && rld[r].in == 0 && ! rld[r].secondary_p)
5634 continue;
5636 /* Skip reloads that already have a register allocated or are
5637 optional. */
5638 if (rld[r].reg_rtx != 0 || rld[r].optional)
5639 continue;
5641 if (! allocate_reload_reg (chain, r, j == n_reloads - 1))
5642 break;
5645 /* If that loop got all the way, we have won. */
5646 if (j == n_reloads)
5648 win = 1;
5649 break;
5652 /* Loop around and try without any inheritance. */
5655 if (! win)
5657 /* First undo everything done by the failed attempt
5658 to allocate with inheritance. */
5659 choose_reload_regs_init (chain, save_reload_reg_rtx);
5661 /* Some sanity tests to verify that the reloads found in the first
5662 pass are identical to the ones we have now. */
5663 if (chain->n_reloads != n_reloads)
5664 abort ();
5666 for (i = 0; i < n_reloads; i++)
5668 if (chain->rld[i].regno < 0 || chain->rld[i].reg_rtx != 0)
5669 continue;
5670 if (chain->rld[i].when_needed != rld[i].when_needed)
5671 abort ();
5672 for (j = 0; j < n_spills; j++)
5673 if (spill_regs[j] == chain->rld[i].regno)
5674 if (! set_reload_reg (j, i))
5675 failed_reload (chain->insn, i);
5679 /* If we thought we could inherit a reload, because it seemed that
5680 nothing else wanted the same reload register earlier in the insn,
5681 verify that assumption, now that all reloads have been assigned.
5682 Likewise for reloads where reload_override_in has been set. */
5684 /* If doing expensive optimizations, do one preliminary pass that doesn't
5685 cancel any inheritance, but removes reloads that have been needed only
5686 for reloads that we know can be inherited. */
5687 for (pass = flag_expensive_optimizations; pass >= 0; pass--)
5689 for (j = 0; j < n_reloads; j++)
5691 register int r = reload_order[j];
5692 rtx check_reg;
5693 if (reload_inherited[r] && rld[r].reg_rtx)
5694 check_reg = rld[r].reg_rtx;
5695 else if (reload_override_in[r]
5696 && (GET_CODE (reload_override_in[r]) == REG
5697 || GET_CODE (reload_override_in[r]) == SUBREG))
5698 check_reg = reload_override_in[r];
5699 else
5700 continue;
5701 if (! reload_reg_free_for_value_p (true_regnum (check_reg),
5702 rld[r].opnum,
5703 rld[r].when_needed,
5704 rld[r].in,
5705 (reload_inherited[r]
5706 ? rld[r].out : const0_rtx),
5707 r, 1))
5709 if (pass)
5710 continue;
5711 reload_inherited[r] = 0;
5712 reload_override_in[r] = 0;
5714 /* If we can inherit a RELOAD_FOR_INPUT, or can use a
5715 reload_override_in, then we do not need its related
5716 RELOAD_FOR_INPUT_ADDRESS / RELOAD_FOR_INPADDR_ADDRESS reloads;
5717 likewise for other reload types.
5718 We handle this by removing a reload when its only replacement
5719 is mentioned in reload_in of the reload we are going to inherit.
5720 A special case are auto_inc expressions; even if the input is
5721 inherited, we still need the address for the output. We can
5722 recognize them because they have RELOAD_OUT set to RELOAD_IN.
5723 If we suceeded removing some reload and we are doing a preliminary
5724 pass just to remove such reloads, make another pass, since the
5725 removal of one reload might allow us to inherit another one. */
5726 else if (rld[r].in
5727 && rld[r].out != rld[r].in
5728 && remove_address_replacements (rld[r].in) && pass)
5729 pass = 2;
5733 /* Now that reload_override_in is known valid,
5734 actually override reload_in. */
5735 for (j = 0; j < n_reloads; j++)
5736 if (reload_override_in[j])
5737 rld[j].in = reload_override_in[j];
5739 /* If this reload won't be done because it has been cancelled or is
5740 optional and not inherited, clear reload_reg_rtx so other
5741 routines (such as subst_reloads) don't get confused. */
5742 for (j = 0; j < n_reloads; j++)
5743 if (rld[j].reg_rtx != 0
5744 && ((rld[j].optional && ! reload_inherited[j])
5745 || (rld[j].in == 0 && rld[j].out == 0
5746 && ! rld[j].secondary_p)))
5748 int regno = true_regnum (rld[j].reg_rtx);
5750 if (spill_reg_order[regno] >= 0)
5751 clear_reload_reg_in_use (regno, rld[j].opnum,
5752 rld[j].when_needed, rld[j].mode);
5753 rld[j].reg_rtx = 0;
5754 reload_spill_index[j] = -1;
5757 /* Record which pseudos and which spill regs have output reloads. */
5758 for (j = 0; j < n_reloads; j++)
5760 register int r = reload_order[j];
5762 i = reload_spill_index[r];
5764 /* I is nonneg if this reload uses a register.
5765 If rld[r].reg_rtx is 0, this is an optional reload
5766 that we opted to ignore. */
5767 if (rld[r].out_reg != 0 && GET_CODE (rld[r].out_reg) == REG
5768 && rld[r].reg_rtx != 0)
5770 register int nregno = REGNO (rld[r].out_reg);
5771 int nr = 1;
5773 if (nregno < FIRST_PSEUDO_REGISTER)
5774 nr = HARD_REGNO_NREGS (nregno, rld[r].mode);
5776 while (--nr >= 0)
5777 reg_has_output_reload[nregno + nr] = 1;
5779 if (i >= 0)
5781 nr = HARD_REGNO_NREGS (i, rld[r].mode);
5782 while (--nr >= 0)
5783 SET_HARD_REG_BIT (reg_is_output_reload, i + nr);
5786 if (rld[r].when_needed != RELOAD_OTHER
5787 && rld[r].when_needed != RELOAD_FOR_OUTPUT
5788 && rld[r].when_needed != RELOAD_FOR_INSN)
5789 abort ();
5794 /* Deallocate the reload register for reload R. This is called from
5795 remove_address_replacements. */
5797 void
5798 deallocate_reload_reg (r)
5799 int r;
5801 int regno;
5803 if (! rld[r].reg_rtx)
5804 return;
5805 regno = true_regnum (rld[r].reg_rtx);
5806 rld[r].reg_rtx = 0;
5807 if (spill_reg_order[regno] >= 0)
5808 clear_reload_reg_in_use (regno, rld[r].opnum, rld[r].when_needed,
5809 rld[r].mode);
5810 reload_spill_index[r] = -1;
5813 /* If SMALL_REGISTER_CLASSES is non-zero, we may not have merged two
5814 reloads of the same item for fear that we might not have enough reload
5815 registers. However, normally they will get the same reload register
5816 and hence actually need not be loaded twice.
5818 Here we check for the most common case of this phenomenon: when we have
5819 a number of reloads for the same object, each of which were allocated
5820 the same reload_reg_rtx, that reload_reg_rtx is not used for any other
5821 reload, and is not modified in the insn itself. If we find such,
5822 merge all the reloads and set the resulting reload to RELOAD_OTHER.
5823 This will not increase the number of spill registers needed and will
5824 prevent redundant code. */
5826 static void
5827 merge_assigned_reloads (insn)
5828 rtx insn;
5830 int i, j;
5832 /* Scan all the reloads looking for ones that only load values and
5833 are not already RELOAD_OTHER and ones whose reload_reg_rtx are
5834 assigned and not modified by INSN. */
5836 for (i = 0; i < n_reloads; i++)
5838 int conflicting_input = 0;
5839 int max_input_address_opnum = -1;
5840 int min_conflicting_input_opnum = MAX_RECOG_OPERANDS;
5842 if (rld[i].in == 0 || rld[i].when_needed == RELOAD_OTHER
5843 || rld[i].out != 0 || rld[i].reg_rtx == 0
5844 || reg_set_p (rld[i].reg_rtx, insn))
5845 continue;
5847 /* Look at all other reloads. Ensure that the only use of this
5848 reload_reg_rtx is in a reload that just loads the same value
5849 as we do. Note that any secondary reloads must be of the identical
5850 class since the values, modes, and result registers are the
5851 same, so we need not do anything with any secondary reloads. */
5853 for (j = 0; j < n_reloads; j++)
5855 if (i == j || rld[j].reg_rtx == 0
5856 || ! reg_overlap_mentioned_p (rld[j].reg_rtx,
5857 rld[i].reg_rtx))
5858 continue;
5860 if (rld[j].when_needed == RELOAD_FOR_INPUT_ADDRESS
5861 && rld[j].opnum > max_input_address_opnum)
5862 max_input_address_opnum = rld[j].opnum;
5864 /* If the reload regs aren't exactly the same (e.g, different modes)
5865 or if the values are different, we can't merge this reload.
5866 But if it is an input reload, we might still merge
5867 RELOAD_FOR_INPUT_ADDRESS and RELOAD_FOR_OTHER_ADDRESS reloads. */
5869 if (! rtx_equal_p (rld[i].reg_rtx, rld[j].reg_rtx)
5870 || rld[j].out != 0 || rld[j].in == 0
5871 || ! rtx_equal_p (rld[i].in, rld[j].in))
5873 if (rld[j].when_needed != RELOAD_FOR_INPUT
5874 || ((rld[i].when_needed != RELOAD_FOR_INPUT_ADDRESS
5875 || rld[i].opnum > rld[j].opnum)
5876 && rld[i].when_needed != RELOAD_FOR_OTHER_ADDRESS))
5877 break;
5878 conflicting_input = 1;
5879 if (min_conflicting_input_opnum > rld[j].opnum)
5880 min_conflicting_input_opnum = rld[j].opnum;
5884 /* If all is OK, merge the reloads. Only set this to RELOAD_OTHER if
5885 we, in fact, found any matching reloads. */
5887 if (j == n_reloads
5888 && max_input_address_opnum <= min_conflicting_input_opnum)
5890 for (j = 0; j < n_reloads; j++)
5891 if (i != j && rld[j].reg_rtx != 0
5892 && rtx_equal_p (rld[i].reg_rtx, rld[j].reg_rtx)
5893 && (! conflicting_input
5894 || rld[j].when_needed == RELOAD_FOR_INPUT_ADDRESS
5895 || rld[j].when_needed == RELOAD_FOR_OTHER_ADDRESS))
5897 rld[i].when_needed = RELOAD_OTHER;
5898 rld[j].in = 0;
5899 reload_spill_index[j] = -1;
5900 transfer_replacements (i, j);
5903 /* If this is now RELOAD_OTHER, look for any reloads that load
5904 parts of this operand and set them to RELOAD_FOR_OTHER_ADDRESS
5905 if they were for inputs, RELOAD_OTHER for outputs. Note that
5906 this test is equivalent to looking for reloads for this operand
5907 number. */
5909 if (rld[i].when_needed == RELOAD_OTHER)
5910 for (j = 0; j < n_reloads; j++)
5911 if (rld[j].in != 0
5912 && rld[i].when_needed != RELOAD_OTHER
5913 && reg_overlap_mentioned_for_reload_p (rld[j].in,
5914 rld[i].in))
5915 rld[j].when_needed
5916 = ((rld[i].when_needed == RELOAD_FOR_INPUT_ADDRESS
5917 || rld[i].when_needed == RELOAD_FOR_INPADDR_ADDRESS)
5918 ? RELOAD_FOR_OTHER_ADDRESS : RELOAD_OTHER);
5924 /* These arrays are filled by emit_reload_insns and its subroutines. */
5925 static rtx input_reload_insns[MAX_RECOG_OPERANDS];
5926 static rtx other_input_address_reload_insns = 0;
5927 static rtx other_input_reload_insns = 0;
5928 static rtx input_address_reload_insns[MAX_RECOG_OPERANDS];
5929 static rtx inpaddr_address_reload_insns[MAX_RECOG_OPERANDS];
5930 static rtx output_reload_insns[MAX_RECOG_OPERANDS];
5931 static rtx output_address_reload_insns[MAX_RECOG_OPERANDS];
5932 static rtx outaddr_address_reload_insns[MAX_RECOG_OPERANDS];
5933 static rtx operand_reload_insns = 0;
5934 static rtx other_operand_reload_insns = 0;
5935 static rtx other_output_reload_insns[MAX_RECOG_OPERANDS];
5937 /* Values to be put in spill_reg_store are put here first. */
5938 static rtx new_spill_reg_store[FIRST_PSEUDO_REGISTER];
5939 static HARD_REG_SET reg_reloaded_died;
5941 /* Generate insns to perform reload RL, which is for the insn in CHAIN and
5942 has the number J. OLD contains the value to be used as input. */
5944 static void
5945 emit_input_reload_insns (chain, rl, old, j)
5946 struct insn_chain *chain;
5947 struct reload *rl;
5948 rtx old;
5949 int j;
5951 rtx insn = chain->insn;
5952 register rtx reloadreg = rl->reg_rtx;
5953 rtx oldequiv_reg = 0;
5954 rtx oldequiv = 0;
5955 int special = 0;
5956 enum machine_mode mode;
5957 rtx *where;
5959 /* Determine the mode to reload in.
5960 This is very tricky because we have three to choose from.
5961 There is the mode the insn operand wants (rl->inmode).
5962 There is the mode of the reload register RELOADREG.
5963 There is the intrinsic mode of the operand, which we could find
5964 by stripping some SUBREGs.
5965 It turns out that RELOADREG's mode is irrelevant:
5966 we can change that arbitrarily.
5968 Consider (SUBREG:SI foo:QI) as an operand that must be SImode;
5969 then the reload reg may not support QImode moves, so use SImode.
5970 If foo is in memory due to spilling a pseudo reg, this is safe,
5971 because the QImode value is in the least significant part of a
5972 slot big enough for a SImode. If foo is some other sort of
5973 memory reference, then it is impossible to reload this case,
5974 so previous passes had better make sure this never happens.
5976 Then consider a one-word union which has SImode and one of its
5977 members is a float, being fetched as (SUBREG:SF union:SI).
5978 We must fetch that as SFmode because we could be loading into
5979 a float-only register. In this case OLD's mode is correct.
5981 Consider an immediate integer: it has VOIDmode. Here we need
5982 to get a mode from something else.
5984 In some cases, there is a fourth mode, the operand's
5985 containing mode. If the insn specifies a containing mode for
5986 this operand, it overrides all others.
5988 I am not sure whether the algorithm here is always right,
5989 but it does the right things in those cases. */
5991 mode = GET_MODE (old);
5992 if (mode == VOIDmode)
5993 mode = rl->inmode;
5995 #ifdef SECONDARY_INPUT_RELOAD_CLASS
5996 /* If we need a secondary register for this operation, see if
5997 the value is already in a register in that class. Don't
5998 do this if the secondary register will be used as a scratch
5999 register. */
6001 if (rl->secondary_in_reload >= 0
6002 && rl->secondary_in_icode == CODE_FOR_nothing
6003 && optimize)
6004 oldequiv
6005 = find_equiv_reg (old, insn,
6006 rld[rl->secondary_in_reload].class,
6007 -1, NULL_PTR, 0, mode);
6008 #endif
6010 /* If reloading from memory, see if there is a register
6011 that already holds the same value. If so, reload from there.
6012 We can pass 0 as the reload_reg_p argument because
6013 any other reload has either already been emitted,
6014 in which case find_equiv_reg will see the reload-insn,
6015 or has yet to be emitted, in which case it doesn't matter
6016 because we will use this equiv reg right away. */
6018 if (oldequiv == 0 && optimize
6019 && (GET_CODE (old) == MEM
6020 || (GET_CODE (old) == REG
6021 && REGNO (old) >= FIRST_PSEUDO_REGISTER
6022 && reg_renumber[REGNO (old)] < 0)))
6023 oldequiv = find_equiv_reg (old, insn, ALL_REGS,
6024 -1, NULL_PTR, 0, mode);
6026 if (oldequiv)
6028 unsigned int regno = true_regnum (oldequiv);
6030 /* Don't use OLDEQUIV if any other reload changes it at an
6031 earlier stage of this insn or at this stage. */
6032 if (! reload_reg_free_for_value_p (regno, rl->opnum,
6033 rl->when_needed,
6034 rl->in, const0_rtx, j,
6036 oldequiv = 0;
6038 /* If it is no cheaper to copy from OLDEQUIV into the
6039 reload register than it would be to move from memory,
6040 don't use it. Likewise, if we need a secondary register
6041 or memory. */
6043 if (oldequiv != 0
6044 && ((REGNO_REG_CLASS (regno) != rl->class
6045 && (REGISTER_MOVE_COST (REGNO_REG_CLASS (regno),
6046 rl->class)
6047 >= MEMORY_MOVE_COST (mode, rl->class, 1)))
6048 #ifdef SECONDARY_INPUT_RELOAD_CLASS
6049 || (SECONDARY_INPUT_RELOAD_CLASS (rl->class,
6050 mode, oldequiv)
6051 != NO_REGS)
6052 #endif
6053 #ifdef SECONDARY_MEMORY_NEEDED
6054 || SECONDARY_MEMORY_NEEDED (REGNO_REG_CLASS (regno),
6055 rl->class,
6056 mode)
6057 #endif
6059 oldequiv = 0;
6062 /* delete_output_reload is only invoked properly if old contains
6063 the original pseudo register. Since this is replaced with a
6064 hard reg when RELOAD_OVERRIDE_IN is set, see if we can
6065 find the pseudo in RELOAD_IN_REG. */
6066 if (oldequiv == 0
6067 && reload_override_in[j]
6068 && GET_CODE (rl->in_reg) == REG)
6070 oldequiv = old;
6071 old = rl->in_reg;
6073 if (oldequiv == 0)
6074 oldequiv = old;
6075 else if (GET_CODE (oldequiv) == REG)
6076 oldequiv_reg = oldequiv;
6077 else if (GET_CODE (oldequiv) == SUBREG)
6078 oldequiv_reg = SUBREG_REG (oldequiv);
6080 /* If we are reloading from a register that was recently stored in
6081 with an output-reload, see if we can prove there was
6082 actually no need to store the old value in it. */
6084 if (optimize && GET_CODE (oldequiv) == REG
6085 && REGNO (oldequiv) < FIRST_PSEUDO_REGISTER
6086 && spill_reg_store[REGNO (oldequiv)]
6087 && GET_CODE (old) == REG
6088 && (dead_or_set_p (insn, spill_reg_stored_to[REGNO (oldequiv)])
6089 || rtx_equal_p (spill_reg_stored_to[REGNO (oldequiv)],
6090 rl->out_reg)))
6091 delete_output_reload (insn, j, REGNO (oldequiv));
6093 /* Encapsulate both RELOADREG and OLDEQUIV into that mode,
6094 then load RELOADREG from OLDEQUIV. Note that we cannot use
6095 gen_lowpart_common since it can do the wrong thing when
6096 RELOADREG has a multi-word mode. Note that RELOADREG
6097 must always be a REG here. */
6099 if (GET_MODE (reloadreg) != mode)
6100 reloadreg = gen_rtx_REG (mode, REGNO (reloadreg));
6101 while (GET_CODE (oldequiv) == SUBREG && GET_MODE (oldequiv) != mode)
6102 oldequiv = SUBREG_REG (oldequiv);
6103 if (GET_MODE (oldequiv) != VOIDmode
6104 && mode != GET_MODE (oldequiv))
6105 oldequiv = gen_rtx_SUBREG (mode, oldequiv, 0);
6107 /* Switch to the right place to emit the reload insns. */
6108 switch (rl->when_needed)
6110 case RELOAD_OTHER:
6111 where = &other_input_reload_insns;
6112 break;
6113 case RELOAD_FOR_INPUT:
6114 where = &input_reload_insns[rl->opnum];
6115 break;
6116 case RELOAD_FOR_INPUT_ADDRESS:
6117 where = &input_address_reload_insns[rl->opnum];
6118 break;
6119 case RELOAD_FOR_INPADDR_ADDRESS:
6120 where = &inpaddr_address_reload_insns[rl->opnum];
6121 break;
6122 case RELOAD_FOR_OUTPUT_ADDRESS:
6123 where = &output_address_reload_insns[rl->opnum];
6124 break;
6125 case RELOAD_FOR_OUTADDR_ADDRESS:
6126 where = &outaddr_address_reload_insns[rl->opnum];
6127 break;
6128 case RELOAD_FOR_OPERAND_ADDRESS:
6129 where = &operand_reload_insns;
6130 break;
6131 case RELOAD_FOR_OPADDR_ADDR:
6132 where = &other_operand_reload_insns;
6133 break;
6134 case RELOAD_FOR_OTHER_ADDRESS:
6135 where = &other_input_address_reload_insns;
6136 break;
6137 default:
6138 abort ();
6141 push_to_sequence (*where);
6143 /* Auto-increment addresses must be reloaded in a special way. */
6144 if (rl->out && ! rl->out_reg)
6146 /* We are not going to bother supporting the case where a
6147 incremented register can't be copied directly from
6148 OLDEQUIV since this seems highly unlikely. */
6149 if (rl->secondary_in_reload >= 0)
6150 abort ();
6152 if (reload_inherited[j])
6153 oldequiv = reloadreg;
6155 old = XEXP (rl->in_reg, 0);
6157 if (optimize && GET_CODE (oldequiv) == REG
6158 && REGNO (oldequiv) < FIRST_PSEUDO_REGISTER
6159 && spill_reg_store[REGNO (oldequiv)]
6160 && GET_CODE (old) == REG
6161 && (dead_or_set_p (insn,
6162 spill_reg_stored_to[REGNO (oldequiv)])
6163 || rtx_equal_p (spill_reg_stored_to[REGNO (oldequiv)],
6164 old)))
6165 delete_output_reload (insn, j, REGNO (oldequiv));
6167 /* Prevent normal processing of this reload. */
6168 special = 1;
6169 /* Output a special code sequence for this case. */
6170 new_spill_reg_store[REGNO (reloadreg)]
6171 = inc_for_reload (reloadreg, oldequiv, rl->out,
6172 rl->inc);
6175 /* If we are reloading a pseudo-register that was set by the previous
6176 insn, see if we can get rid of that pseudo-register entirely
6177 by redirecting the previous insn into our reload register. */
6179 else if (optimize && GET_CODE (old) == REG
6180 && REGNO (old) >= FIRST_PSEUDO_REGISTER
6181 && dead_or_set_p (insn, old)
6182 /* This is unsafe if some other reload
6183 uses the same reg first. */
6184 && reload_reg_free_for_value_p (REGNO (reloadreg),
6185 rl->opnum,
6186 rl->when_needed,
6187 old, rl->out,
6188 j, 0))
6190 rtx temp = PREV_INSN (insn);
6191 while (temp && GET_CODE (temp) == NOTE)
6192 temp = PREV_INSN (temp);
6193 if (temp
6194 && GET_CODE (temp) == INSN
6195 && GET_CODE (PATTERN (temp)) == SET
6196 && SET_DEST (PATTERN (temp)) == old
6197 /* Make sure we can access insn_operand_constraint. */
6198 && asm_noperands (PATTERN (temp)) < 0
6199 /* This is unsafe if prev insn rejects our reload reg. */
6200 && constraint_accepts_reg_p (insn_data[recog_memoized (temp)].operand[0].constraint,
6201 reloadreg)
6202 /* This is unsafe if operand occurs more than once in current
6203 insn. Perhaps some occurrences aren't reloaded. */
6204 && count_occurrences (PATTERN (insn), old, 0) == 1
6205 /* Don't risk splitting a matching pair of operands. */
6206 && ! reg_mentioned_p (old, SET_SRC (PATTERN (temp))))
6208 /* Store into the reload register instead of the pseudo. */
6209 SET_DEST (PATTERN (temp)) = reloadreg;
6211 /* If the previous insn is an output reload, the source is
6212 a reload register, and its spill_reg_store entry will
6213 contain the previous destination. This is now
6214 invalid. */
6215 if (GET_CODE (SET_SRC (PATTERN (temp))) == REG
6216 && REGNO (SET_SRC (PATTERN (temp))) < FIRST_PSEUDO_REGISTER)
6218 spill_reg_store[REGNO (SET_SRC (PATTERN (temp)))] = 0;
6219 spill_reg_stored_to[REGNO (SET_SRC (PATTERN (temp)))] = 0;
6222 /* If these are the only uses of the pseudo reg,
6223 pretend for GDB it lives in the reload reg we used. */
6224 if (REG_N_DEATHS (REGNO (old)) == 1
6225 && REG_N_SETS (REGNO (old)) == 1)
6227 reg_renumber[REGNO (old)] = REGNO (rl->reg_rtx);
6228 alter_reg (REGNO (old), -1);
6230 special = 1;
6234 /* We can't do that, so output an insn to load RELOADREG. */
6236 #ifdef SECONDARY_INPUT_RELOAD_CLASS
6237 /* If we have a secondary reload, pick up the secondary register
6238 and icode, if any. If OLDEQUIV and OLD are different or
6239 if this is an in-out reload, recompute whether or not we
6240 still need a secondary register and what the icode should
6241 be. If we still need a secondary register and the class or
6242 icode is different, go back to reloading from OLD if using
6243 OLDEQUIV means that we got the wrong type of register. We
6244 cannot have different class or icode due to an in-out reload
6245 because we don't make such reloads when both the input and
6246 output need secondary reload registers. */
6248 if (! special && rl->secondary_in_reload >= 0)
6250 rtx second_reload_reg = 0;
6251 int secondary_reload = rl->secondary_in_reload;
6252 rtx real_oldequiv = oldequiv;
6253 rtx real_old = old;
6254 rtx tmp;
6255 enum insn_code icode;
6257 /* If OLDEQUIV is a pseudo with a MEM, get the real MEM
6258 and similarly for OLD.
6259 See comments in get_secondary_reload in reload.c. */
6260 /* If it is a pseudo that cannot be replaced with its
6261 equivalent MEM, we must fall back to reload_in, which
6262 will have all the necessary substitutions registered.
6263 Likewise for a pseudo that can't be replaced with its
6264 equivalent constant.
6266 Take extra care for subregs of such pseudos. Note that
6267 we cannot use reg_equiv_mem in this case because it is
6268 not in the right mode. */
6270 tmp = oldequiv;
6271 if (GET_CODE (tmp) == SUBREG)
6272 tmp = SUBREG_REG (tmp);
6273 if (GET_CODE (tmp) == REG
6274 && REGNO (tmp) >= FIRST_PSEUDO_REGISTER
6275 && (reg_equiv_memory_loc[REGNO (tmp)] != 0
6276 || reg_equiv_constant[REGNO (tmp)] != 0))
6278 if (! reg_equiv_mem[REGNO (tmp)]
6279 || num_not_at_initial_offset
6280 || GET_CODE (oldequiv) == SUBREG)
6281 real_oldequiv = rl->in;
6282 else
6283 real_oldequiv = reg_equiv_mem[REGNO (tmp)];
6286 tmp = old;
6287 if (GET_CODE (tmp) == SUBREG)
6288 tmp = SUBREG_REG (tmp);
6289 if (GET_CODE (tmp) == REG
6290 && REGNO (tmp) >= FIRST_PSEUDO_REGISTER
6291 && (reg_equiv_memory_loc[REGNO (tmp)] != 0
6292 || reg_equiv_constant[REGNO (tmp)] != 0))
6294 if (! reg_equiv_mem[REGNO (tmp)]
6295 || num_not_at_initial_offset
6296 || GET_CODE (old) == SUBREG)
6297 real_old = rl->in;
6298 else
6299 real_old = reg_equiv_mem[REGNO (tmp)];
6302 second_reload_reg = rld[secondary_reload].reg_rtx;
6303 icode = rl->secondary_in_icode;
6305 if ((old != oldequiv && ! rtx_equal_p (old, oldequiv))
6306 || (rl->in != 0 && rl->out != 0))
6308 enum reg_class new_class
6309 = SECONDARY_INPUT_RELOAD_CLASS (rl->class,
6310 mode, real_oldequiv);
6312 if (new_class == NO_REGS)
6313 second_reload_reg = 0;
6314 else
6316 enum insn_code new_icode;
6317 enum machine_mode new_mode;
6319 if (! TEST_HARD_REG_BIT (reg_class_contents[(int) new_class],
6320 REGNO (second_reload_reg)))
6321 oldequiv = old, real_oldequiv = real_old;
6322 else
6324 new_icode = reload_in_optab[(int) mode];
6325 if (new_icode != CODE_FOR_nothing
6326 && ((insn_data[(int) new_icode].operand[0].predicate
6327 && ! ((*insn_data[(int) new_icode].operand[0].predicate)
6328 (reloadreg, mode)))
6329 || (insn_data[(int) new_icode].operand[1].predicate
6330 && ! ((*insn_data[(int) new_icode].operand[1].predicate)
6331 (real_oldequiv, mode)))))
6332 new_icode = CODE_FOR_nothing;
6334 if (new_icode == CODE_FOR_nothing)
6335 new_mode = mode;
6336 else
6337 new_mode = insn_data[(int) new_icode].operand[2].mode;
6339 if (GET_MODE (second_reload_reg) != new_mode)
6341 if (!HARD_REGNO_MODE_OK (REGNO (second_reload_reg),
6342 new_mode))
6343 oldequiv = old, real_oldequiv = real_old;
6344 else
6345 second_reload_reg
6346 = gen_rtx_REG (new_mode,
6347 REGNO (second_reload_reg));
6353 /* If we still need a secondary reload register, check
6354 to see if it is being used as a scratch or intermediate
6355 register and generate code appropriately. If we need
6356 a scratch register, use REAL_OLDEQUIV since the form of
6357 the insn may depend on the actual address if it is
6358 a MEM. */
6360 if (second_reload_reg)
6362 if (icode != CODE_FOR_nothing)
6364 emit_insn (GEN_FCN (icode) (reloadreg, real_oldequiv,
6365 second_reload_reg));
6366 special = 1;
6368 else
6370 /* See if we need a scratch register to load the
6371 intermediate register (a tertiary reload). */
6372 enum insn_code tertiary_icode
6373 = rld[secondary_reload].secondary_in_icode;
6375 if (tertiary_icode != CODE_FOR_nothing)
6377 rtx third_reload_reg
6378 = rld[rld[secondary_reload].secondary_in_reload].reg_rtx;
6380 emit_insn ((GEN_FCN (tertiary_icode)
6381 (second_reload_reg, real_oldequiv,
6382 third_reload_reg)));
6384 else
6385 gen_reload (second_reload_reg, real_oldequiv,
6386 rl->opnum,
6387 rl->when_needed);
6389 oldequiv = second_reload_reg;
6393 #endif
6395 if (! special && ! rtx_equal_p (reloadreg, oldequiv))
6397 rtx real_oldequiv = oldequiv;
6399 if ((GET_CODE (oldequiv) == REG
6400 && REGNO (oldequiv) >= FIRST_PSEUDO_REGISTER
6401 && (reg_equiv_memory_loc[REGNO (oldequiv)] != 0
6402 || reg_equiv_constant[REGNO (oldequiv)] != 0))
6403 || (GET_CODE (oldequiv) == SUBREG
6404 && GET_CODE (SUBREG_REG (oldequiv)) == REG
6405 && (REGNO (SUBREG_REG (oldequiv))
6406 >= FIRST_PSEUDO_REGISTER)
6407 && ((reg_equiv_memory_loc
6408 [REGNO (SUBREG_REG (oldequiv))] != 0)
6409 || (reg_equiv_constant
6410 [REGNO (SUBREG_REG (oldequiv))] != 0))))
6411 real_oldequiv = rl->in;
6412 gen_reload (reloadreg, real_oldequiv, rl->opnum,
6413 rl->when_needed);
6416 /* End this sequence. */
6417 *where = get_insns ();
6418 end_sequence ();
6420 /* Update reload_override_in so that delete_address_reloads_1
6421 can see the actual register usage. */
6422 if (oldequiv_reg)
6423 reload_override_in[j] = oldequiv;
6426 /* Generate insns to for the output reload RL, which is for the insn described
6427 by CHAIN and has the number J. */
6428 static void
6429 emit_output_reload_insns (chain, rl, j)
6430 struct insn_chain *chain;
6431 struct reload *rl;
6432 int j;
6434 rtx reloadreg = rl->reg_rtx;
6435 rtx insn = chain->insn;
6436 int special = 0;
6437 rtx old = rl->out;
6438 enum machine_mode mode = GET_MODE (old);
6439 rtx p;
6441 if (rl->when_needed == RELOAD_OTHER)
6442 start_sequence ();
6443 else
6444 push_to_sequence (output_reload_insns[rl->opnum]);
6446 /* Determine the mode to reload in.
6447 See comments above (for input reloading). */
6449 if (mode == VOIDmode)
6451 /* VOIDmode should never happen for an output. */
6452 if (asm_noperands (PATTERN (insn)) < 0)
6453 /* It's the compiler's fault. */
6454 fatal_insn ("VOIDmode on an output", insn);
6455 error_for_asm (insn, "output operand is constant in `asm'");
6456 /* Prevent crash--use something we know is valid. */
6457 mode = word_mode;
6458 old = gen_rtx_REG (mode, REGNO (reloadreg));
6461 if (GET_MODE (reloadreg) != mode)
6462 reloadreg = gen_rtx_REG (mode, REGNO (reloadreg));
6464 #ifdef SECONDARY_OUTPUT_RELOAD_CLASS
6466 /* If we need two reload regs, set RELOADREG to the intermediate
6467 one, since it will be stored into OLD. We might need a secondary
6468 register only for an input reload, so check again here. */
6470 if (rl->secondary_out_reload >= 0)
6472 rtx real_old = old;
6474 if (GET_CODE (old) == REG && REGNO (old) >= FIRST_PSEUDO_REGISTER
6475 && reg_equiv_mem[REGNO (old)] != 0)
6476 real_old = reg_equiv_mem[REGNO (old)];
6478 if ((SECONDARY_OUTPUT_RELOAD_CLASS (rl->class,
6479 mode, real_old)
6480 != NO_REGS))
6482 rtx second_reloadreg = reloadreg;
6483 reloadreg = rld[rl->secondary_out_reload].reg_rtx;
6485 /* See if RELOADREG is to be used as a scratch register
6486 or as an intermediate register. */
6487 if (rl->secondary_out_icode != CODE_FOR_nothing)
6489 emit_insn ((GEN_FCN (rl->secondary_out_icode)
6490 (real_old, second_reloadreg, reloadreg)));
6491 special = 1;
6493 else
6495 /* See if we need both a scratch and intermediate reload
6496 register. */
6498 int secondary_reload = rl->secondary_out_reload;
6499 enum insn_code tertiary_icode
6500 = rld[secondary_reload].secondary_out_icode;
6502 if (GET_MODE (reloadreg) != mode)
6503 reloadreg = gen_rtx_REG (mode, REGNO (reloadreg));
6505 if (tertiary_icode != CODE_FOR_nothing)
6507 rtx third_reloadreg
6508 = rld[rld[secondary_reload].secondary_out_reload].reg_rtx;
6509 rtx tem;
6511 /* Copy primary reload reg to secondary reload reg.
6512 (Note that these have been swapped above, then
6513 secondary reload reg to OLD using our insn. */
6515 /* If REAL_OLD is a paradoxical SUBREG, remove it
6516 and try to put the opposite SUBREG on
6517 RELOADREG. */
6518 if (GET_CODE (real_old) == SUBREG
6519 && (GET_MODE_SIZE (GET_MODE (real_old))
6520 > GET_MODE_SIZE (GET_MODE (SUBREG_REG (real_old))))
6521 && 0 != (tem = gen_lowpart_common
6522 (GET_MODE (SUBREG_REG (real_old)),
6523 reloadreg)))
6524 real_old = SUBREG_REG (real_old), reloadreg = tem;
6526 gen_reload (reloadreg, second_reloadreg,
6527 rl->opnum, rl->when_needed);
6528 emit_insn ((GEN_FCN (tertiary_icode)
6529 (real_old, reloadreg, third_reloadreg)));
6530 special = 1;
6533 else
6534 /* Copy between the reload regs here and then to
6535 OUT later. */
6537 gen_reload (reloadreg, second_reloadreg,
6538 rl->opnum, rl->when_needed);
6542 #endif
6544 /* Output the last reload insn. */
6545 if (! special)
6547 rtx set;
6549 /* Don't output the last reload if OLD is not the dest of
6550 INSN and is in the src and is clobbered by INSN. */
6551 if (! flag_expensive_optimizations
6552 || GET_CODE (old) != REG
6553 || !(set = single_set (insn))
6554 || rtx_equal_p (old, SET_DEST (set))
6555 || !reg_mentioned_p (old, SET_SRC (set))
6556 || !regno_clobbered_p (REGNO (old), insn))
6557 gen_reload (old, reloadreg, rl->opnum,
6558 rl->when_needed);
6561 /* Look at all insns we emitted, just to be safe. */
6562 for (p = get_insns (); p; p = NEXT_INSN (p))
6563 if (GET_RTX_CLASS (GET_CODE (p)) == 'i')
6565 rtx pat = PATTERN (p);
6567 /* If this output reload doesn't come from a spill reg,
6568 clear any memory of reloaded copies of the pseudo reg.
6569 If this output reload comes from a spill reg,
6570 reg_has_output_reload will make this do nothing. */
6571 note_stores (pat, forget_old_reloads_1, NULL);
6573 if (reg_mentioned_p (rl->reg_rtx, pat))
6575 rtx set = single_set (insn);
6576 if (reload_spill_index[j] < 0
6577 && set
6578 && SET_SRC (set) == rl->reg_rtx)
6580 int src = REGNO (SET_SRC (set));
6582 reload_spill_index[j] = src;
6583 SET_HARD_REG_BIT (reg_is_output_reload, src);
6584 if (find_regno_note (insn, REG_DEAD, src))
6585 SET_HARD_REG_BIT (reg_reloaded_died, src);
6587 if (REGNO (rl->reg_rtx) < FIRST_PSEUDO_REGISTER)
6589 int s = rl->secondary_out_reload;
6590 set = single_set (p);
6591 /* If this reload copies only to the secondary reload
6592 register, the secondary reload does the actual
6593 store. */
6594 if (s >= 0 && set == NULL_RTX)
6595 ; /* We can't tell what function the secondary reload
6596 has and where the actual store to the pseudo is
6597 made; leave new_spill_reg_store alone. */
6598 else if (s >= 0
6599 && SET_SRC (set) == rl->reg_rtx
6600 && SET_DEST (set) == rld[s].reg_rtx)
6602 /* Usually the next instruction will be the
6603 secondary reload insn; if we can confirm
6604 that it is, setting new_spill_reg_store to
6605 that insn will allow an extra optimization. */
6606 rtx s_reg = rld[s].reg_rtx;
6607 rtx next = NEXT_INSN (p);
6608 rld[s].out = rl->out;
6609 rld[s].out_reg = rl->out_reg;
6610 set = single_set (next);
6611 if (set && SET_SRC (set) == s_reg
6612 && ! new_spill_reg_store[REGNO (s_reg)])
6614 SET_HARD_REG_BIT (reg_is_output_reload,
6615 REGNO (s_reg));
6616 new_spill_reg_store[REGNO (s_reg)] = next;
6619 else
6620 new_spill_reg_store[REGNO (rl->reg_rtx)] = p;
6625 if (rl->when_needed == RELOAD_OTHER)
6627 emit_insns (other_output_reload_insns[rl->opnum]);
6628 other_output_reload_insns[rl->opnum] = get_insns ();
6630 else
6631 output_reload_insns[rl->opnum] = get_insns ();
6633 end_sequence ();
6636 /* Do input reloading for reload RL, which is for the insn described by CHAIN
6637 and has the number J. */
6638 static void
6639 do_input_reload (chain, rl, j)
6640 struct insn_chain *chain;
6641 struct reload *rl;
6642 int j;
6644 int expect_occurrences = 1;
6645 rtx insn = chain->insn;
6646 rtx old = (rl->in && GET_CODE (rl->in) == MEM
6647 ? rl->in_reg : rl->in);
6649 if (old != 0
6650 /* AUTO_INC reloads need to be handled even if inherited. We got an
6651 AUTO_INC reload if reload_out is set but reload_out_reg isn't. */
6652 && (! reload_inherited[j] || (rl->out && ! rl->out_reg))
6653 && ! rtx_equal_p (rl->reg_rtx, old)
6654 && rl->reg_rtx != 0)
6655 emit_input_reload_insns (chain, rld + j, old, j);
6657 /* When inheriting a wider reload, we have a MEM in rl->in,
6658 e.g. inheriting a SImode output reload for
6659 (mem:HI (plus:SI (reg:SI 14 fp) (const_int 10))) */
6660 if (optimize && reload_inherited[j] && rl->in
6661 && GET_CODE (rl->in) == MEM
6662 && GET_CODE (rl->in_reg) == MEM
6663 && reload_spill_index[j] >= 0
6664 && TEST_HARD_REG_BIT (reg_reloaded_valid, reload_spill_index[j]))
6666 expect_occurrences
6667 = count_occurrences (PATTERN (insn), rl->in, 0) == 1 ? 0 : -1;
6668 rl->in
6669 = regno_reg_rtx[reg_reloaded_contents[reload_spill_index[j]]];
6672 /* If we are reloading a register that was recently stored in with an
6673 output-reload, see if we can prove there was
6674 actually no need to store the old value in it. */
6676 if (optimize
6677 && (reload_inherited[j] || reload_override_in[j])
6678 && rl->reg_rtx
6679 && GET_CODE (rl->reg_rtx) == REG
6680 && spill_reg_store[REGNO (rl->reg_rtx)] != 0
6681 #if 0
6682 /* There doesn't seem to be any reason to restrict this to pseudos
6683 and doing so loses in the case where we are copying from a
6684 register of the wrong class. */
6685 && (REGNO (spill_reg_stored_to[REGNO (rl->reg_rtx)])
6686 >= FIRST_PSEUDO_REGISTER)
6687 #endif
6688 /* The insn might have already some references to stackslots
6689 replaced by MEMs, while reload_out_reg still names the
6690 original pseudo. */
6691 && (dead_or_set_p (insn,
6692 spill_reg_stored_to[REGNO (rl->reg_rtx)])
6693 || rtx_equal_p (spill_reg_stored_to[REGNO (rl->reg_rtx)],
6694 rl->out_reg)))
6695 delete_output_reload (insn, j, REGNO (rl->reg_rtx));
6698 /* Do output reloading for reload RL, which is for the insn described by
6699 CHAIN and has the number J.
6700 ??? At some point we need to support handling output reloads of
6701 JUMP_INSNs or insns that set cc0. */
6702 static void
6703 do_output_reload (chain, rl, j)
6704 struct insn_chain *chain;
6705 struct reload *rl;
6706 int j;
6708 rtx note, old;
6709 rtx insn = chain->insn;
6710 /* If this is an output reload that stores something that is
6711 not loaded in this same reload, see if we can eliminate a previous
6712 store. */
6713 rtx pseudo = rl->out_reg;
6715 if (pseudo
6716 && GET_CODE (pseudo) == REG
6717 && ! rtx_equal_p (rl->in_reg, pseudo)
6718 && REGNO (pseudo) >= FIRST_PSEUDO_REGISTER
6719 && reg_last_reload_reg[REGNO (pseudo)])
6721 int pseudo_no = REGNO (pseudo);
6722 int last_regno = REGNO (reg_last_reload_reg[pseudo_no]);
6724 /* We don't need to test full validity of last_regno for
6725 inherit here; we only want to know if the store actually
6726 matches the pseudo. */
6727 if (TEST_HARD_REG_BIT (reg_reloaded_valid, last_regno)
6728 && reg_reloaded_contents[last_regno] == pseudo_no
6729 && spill_reg_store[last_regno]
6730 && rtx_equal_p (pseudo, spill_reg_stored_to[last_regno]))
6731 delete_output_reload (insn, j, last_regno);
6734 old = rl->out_reg;
6735 if (old == 0
6736 || rl->reg_rtx == old
6737 || rl->reg_rtx == 0)
6738 return;
6740 /* An output operand that dies right away does need a reload,
6741 but need not be copied from it. Show the new location in the
6742 REG_UNUSED note. */
6743 if ((GET_CODE (old) == REG || GET_CODE (old) == SCRATCH)
6744 && (note = find_reg_note (insn, REG_UNUSED, old)) != 0)
6746 XEXP (note, 0) = rl->reg_rtx;
6747 return;
6749 /* Likewise for a SUBREG of an operand that dies. */
6750 else if (GET_CODE (old) == SUBREG
6751 && GET_CODE (SUBREG_REG (old)) == REG
6752 && 0 != (note = find_reg_note (insn, REG_UNUSED,
6753 SUBREG_REG (old))))
6755 XEXP (note, 0) = gen_lowpart_common (GET_MODE (old),
6756 rl->reg_rtx);
6757 return;
6759 else if (GET_CODE (old) == SCRATCH)
6760 /* If we aren't optimizing, there won't be a REG_UNUSED note,
6761 but we don't want to make an output reload. */
6762 return;
6764 /* If is a JUMP_INSN, we can't support output reloads yet. */
6765 if (GET_CODE (insn) == JUMP_INSN)
6766 abort ();
6768 emit_output_reload_insns (chain, rld + j, j);
6771 /* Output insns to reload values in and out of the chosen reload regs. */
6773 static void
6774 emit_reload_insns (chain)
6775 struct insn_chain *chain;
6777 rtx insn = chain->insn;
6779 register int j;
6780 rtx following_insn = NEXT_INSN (insn);
6781 rtx before_insn = PREV_INSN (insn);
6783 CLEAR_HARD_REG_SET (reg_reloaded_died);
6785 for (j = 0; j < reload_n_operands; j++)
6786 input_reload_insns[j] = input_address_reload_insns[j]
6787 = inpaddr_address_reload_insns[j]
6788 = output_reload_insns[j] = output_address_reload_insns[j]
6789 = outaddr_address_reload_insns[j]
6790 = other_output_reload_insns[j] = 0;
6791 other_input_address_reload_insns = 0;
6792 other_input_reload_insns = 0;
6793 operand_reload_insns = 0;
6794 other_operand_reload_insns = 0;
6796 /* Now output the instructions to copy the data into and out of the
6797 reload registers. Do these in the order that the reloads were reported,
6798 since reloads of base and index registers precede reloads of operands
6799 and the operands may need the base and index registers reloaded. */
6801 for (j = 0; j < n_reloads; j++)
6803 if (rld[j].reg_rtx
6804 && REGNO (rld[j].reg_rtx) < FIRST_PSEUDO_REGISTER)
6805 new_spill_reg_store[REGNO (rld[j].reg_rtx)] = 0;
6807 do_input_reload (chain, rld + j, j);
6808 do_output_reload (chain, rld + j, j);
6811 /* Now write all the insns we made for reloads in the order expected by
6812 the allocation functions. Prior to the insn being reloaded, we write
6813 the following reloads:
6815 RELOAD_FOR_OTHER_ADDRESS reloads for input addresses.
6817 RELOAD_OTHER reloads.
6819 For each operand, any RELOAD_FOR_INPADDR_ADDRESS reloads followed
6820 by any RELOAD_FOR_INPUT_ADDRESS reloads followed by the
6821 RELOAD_FOR_INPUT reload for the operand.
6823 RELOAD_FOR_OPADDR_ADDRS reloads.
6825 RELOAD_FOR_OPERAND_ADDRESS reloads.
6827 After the insn being reloaded, we write the following:
6829 For each operand, any RELOAD_FOR_OUTADDR_ADDRESS reloads followed
6830 by any RELOAD_FOR_OUTPUT_ADDRESS reload followed by the
6831 RELOAD_FOR_OUTPUT reload, followed by any RELOAD_OTHER output
6832 reloads for the operand. The RELOAD_OTHER output reloads are
6833 output in descending order by reload number. */
6835 emit_insns_before (other_input_address_reload_insns, insn);
6836 emit_insns_before (other_input_reload_insns, insn);
6838 for (j = 0; j < reload_n_operands; j++)
6840 emit_insns_before (inpaddr_address_reload_insns[j], insn);
6841 emit_insns_before (input_address_reload_insns[j], insn);
6842 emit_insns_before (input_reload_insns[j], insn);
6845 emit_insns_before (other_operand_reload_insns, insn);
6846 emit_insns_before (operand_reload_insns, insn);
6848 for (j = 0; j < reload_n_operands; j++)
6850 emit_insns_before (outaddr_address_reload_insns[j], following_insn);
6851 emit_insns_before (output_address_reload_insns[j], following_insn);
6852 emit_insns_before (output_reload_insns[j], following_insn);
6853 emit_insns_before (other_output_reload_insns[j], following_insn);
6856 /* Keep basic block info up to date. */
6857 if (n_basic_blocks)
6859 if (BLOCK_HEAD (chain->block) == insn)
6860 BLOCK_HEAD (chain->block) = NEXT_INSN (before_insn);
6861 if (BLOCK_END (chain->block) == insn)
6862 BLOCK_END (chain->block) = PREV_INSN (following_insn);
6865 /* For all the spill regs newly reloaded in this instruction,
6866 record what they were reloaded from, so subsequent instructions
6867 can inherit the reloads.
6869 Update spill_reg_store for the reloads of this insn.
6870 Copy the elements that were updated in the loop above. */
6872 for (j = 0; j < n_reloads; j++)
6874 register int r = reload_order[j];
6875 register int i = reload_spill_index[r];
6877 /* If this is a non-inherited input reload from a pseudo, we must
6878 clear any memory of a previous store to the same pseudo. Only do
6879 something if there will not be an output reload for the pseudo
6880 being reloaded. */
6881 if (rld[r].in_reg != 0
6882 && ! (reload_inherited[r] || reload_override_in[r]))
6884 rtx reg = rld[r].in_reg;
6886 if (GET_CODE (reg) == SUBREG)
6887 reg = SUBREG_REG (reg);
6889 if (GET_CODE (reg) == REG
6890 && REGNO (reg) >= FIRST_PSEUDO_REGISTER
6891 && ! reg_has_output_reload[REGNO (reg)])
6893 int nregno = REGNO (reg);
6895 if (reg_last_reload_reg[nregno])
6897 int last_regno = REGNO (reg_last_reload_reg[nregno]);
6899 if (reg_reloaded_contents[last_regno] == nregno)
6900 spill_reg_store[last_regno] = 0;
6905 /* I is nonneg if this reload used a register.
6906 If rld[r].reg_rtx is 0, this is an optional reload
6907 that we opted to ignore. */
6909 if (i >= 0 && rld[r].reg_rtx != 0)
6911 int nr
6912 = HARD_REGNO_NREGS (i, GET_MODE (rld[r].reg_rtx));
6913 int k;
6914 int part_reaches_end = 0;
6915 int all_reaches_end = 1;
6917 /* For a multi register reload, we need to check if all or part
6918 of the value lives to the end. */
6919 for (k = 0; k < nr; k++)
6921 if (reload_reg_reaches_end_p (i + k, rld[r].opnum,
6922 rld[r].when_needed))
6923 part_reaches_end = 1;
6924 else
6925 all_reaches_end = 0;
6928 /* Ignore reloads that don't reach the end of the insn in
6929 entirety. */
6930 if (all_reaches_end)
6932 /* First, clear out memory of what used to be in this spill reg.
6933 If consecutive registers are used, clear them all. */
6935 for (k = 0; k < nr; k++)
6936 CLEAR_HARD_REG_BIT (reg_reloaded_valid, i + k);
6938 /* Maybe the spill reg contains a copy of reload_out. */
6939 if (rld[r].out != 0
6940 && (GET_CODE (rld[r].out) == REG
6941 #ifdef AUTO_INC_DEC
6942 || ! rld[r].out_reg
6943 #endif
6944 || GET_CODE (rld[r].out_reg) == REG))
6946 rtx out = (GET_CODE (rld[r].out) == REG
6947 ? rld[r].out
6948 : rld[r].out_reg
6949 ? rld[r].out_reg
6950 /* AUTO_INC */ : XEXP (rld[r].in_reg, 0));
6951 register int nregno = REGNO (out);
6952 int nnr = (nregno >= FIRST_PSEUDO_REGISTER ? 1
6953 : HARD_REGNO_NREGS (nregno,
6954 GET_MODE (rld[r].reg_rtx)));
6956 spill_reg_store[i] = new_spill_reg_store[i];
6957 spill_reg_stored_to[i] = out;
6958 reg_last_reload_reg[nregno] = rld[r].reg_rtx;
6960 /* If NREGNO is a hard register, it may occupy more than
6961 one register. If it does, say what is in the
6962 rest of the registers assuming that both registers
6963 agree on how many words the object takes. If not,
6964 invalidate the subsequent registers. */
6966 if (nregno < FIRST_PSEUDO_REGISTER)
6967 for (k = 1; k < nnr; k++)
6968 reg_last_reload_reg[nregno + k]
6969 = (nr == nnr
6970 ? gen_rtx_REG (reg_raw_mode[REGNO (rld[r].reg_rtx) + k],
6971 REGNO (rld[r].reg_rtx) + k)
6972 : 0);
6974 /* Now do the inverse operation. */
6975 for (k = 0; k < nr; k++)
6977 CLEAR_HARD_REG_BIT (reg_reloaded_dead, i + k);
6978 reg_reloaded_contents[i + k]
6979 = (nregno >= FIRST_PSEUDO_REGISTER || nr != nnr
6980 ? nregno
6981 : nregno + k);
6982 reg_reloaded_insn[i + k] = insn;
6983 SET_HARD_REG_BIT (reg_reloaded_valid, i + k);
6987 /* Maybe the spill reg contains a copy of reload_in. Only do
6988 something if there will not be an output reload for
6989 the register being reloaded. */
6990 else if (rld[r].out_reg == 0
6991 && rld[r].in != 0
6992 && ((GET_CODE (rld[r].in) == REG
6993 && REGNO (rld[r].in) >= FIRST_PSEUDO_REGISTER
6994 && ! reg_has_output_reload[REGNO (rld[r].in)])
6995 || (GET_CODE (rld[r].in_reg) == REG
6996 && ! reg_has_output_reload[REGNO (rld[r].in_reg)]))
6997 && ! reg_set_p (rld[r].reg_rtx, PATTERN (insn)))
6999 register int nregno;
7000 int nnr;
7002 if (GET_CODE (rld[r].in) == REG
7003 && REGNO (rld[r].in) >= FIRST_PSEUDO_REGISTER)
7004 nregno = REGNO (rld[r].in);
7005 else if (GET_CODE (rld[r].in_reg) == REG)
7006 nregno = REGNO (rld[r].in_reg);
7007 else
7008 nregno = REGNO (XEXP (rld[r].in_reg, 0));
7010 nnr = (nregno >= FIRST_PSEUDO_REGISTER ? 1
7011 : HARD_REGNO_NREGS (nregno,
7012 GET_MODE (rld[r].reg_rtx)));
7014 reg_last_reload_reg[nregno] = rld[r].reg_rtx;
7016 if (nregno < FIRST_PSEUDO_REGISTER)
7017 for (k = 1; k < nnr; k++)
7018 reg_last_reload_reg[nregno + k]
7019 = (nr == nnr
7020 ? gen_rtx_REG (reg_raw_mode[REGNO (rld[r].reg_rtx) + k],
7021 REGNO (rld[r].reg_rtx) + k)
7022 : 0);
7024 /* Unless we inherited this reload, show we haven't
7025 recently done a store.
7026 Previous stores of inherited auto_inc expressions
7027 also have to be discarded. */
7028 if (! reload_inherited[r]
7029 || (rld[r].out && ! rld[r].out_reg))
7030 spill_reg_store[i] = 0;
7032 for (k = 0; k < nr; k++)
7034 CLEAR_HARD_REG_BIT (reg_reloaded_dead, i + k);
7035 reg_reloaded_contents[i + k]
7036 = (nregno >= FIRST_PSEUDO_REGISTER || nr != nnr
7037 ? nregno
7038 : nregno + k);
7039 reg_reloaded_insn[i + k] = insn;
7040 SET_HARD_REG_BIT (reg_reloaded_valid, i + k);
7045 /* However, if part of the reload reaches the end, then we must
7046 invalidate the old info for the part that survives to the end. */
7047 else if (part_reaches_end)
7049 for (k = 0; k < nr; k++)
7050 if (reload_reg_reaches_end_p (i + k,
7051 rld[r].opnum,
7052 rld[r].when_needed))
7053 CLEAR_HARD_REG_BIT (reg_reloaded_valid, i + k);
7057 /* The following if-statement was #if 0'd in 1.34 (or before...).
7058 It's reenabled in 1.35 because supposedly nothing else
7059 deals with this problem. */
7061 /* If a register gets output-reloaded from a non-spill register,
7062 that invalidates any previous reloaded copy of it.
7063 But forget_old_reloads_1 won't get to see it, because
7064 it thinks only about the original insn. So invalidate it here. */
7065 if (i < 0 && rld[r].out != 0
7066 && (GET_CODE (rld[r].out) == REG
7067 || (GET_CODE (rld[r].out) == MEM
7068 && GET_CODE (rld[r].out_reg) == REG)))
7070 rtx out = (GET_CODE (rld[r].out) == REG
7071 ? rld[r].out : rld[r].out_reg);
7072 register int nregno = REGNO (out);
7073 if (nregno >= FIRST_PSEUDO_REGISTER)
7075 rtx src_reg, store_insn = NULL_RTX;
7077 reg_last_reload_reg[nregno] = 0;
7079 /* If we can find a hard register that is stored, record
7080 the storing insn so that we may delete this insn with
7081 delete_output_reload. */
7082 src_reg = rld[r].reg_rtx;
7084 /* If this is an optional reload, try to find the source reg
7085 from an input reload. */
7086 if (! src_reg)
7088 rtx set = single_set (insn);
7089 if (set && SET_DEST (set) == rld[r].out)
7091 int k;
7093 src_reg = SET_SRC (set);
7094 store_insn = insn;
7095 for (k = 0; k < n_reloads; k++)
7097 if (rld[k].in == src_reg)
7099 src_reg = rld[k].reg_rtx;
7100 break;
7105 else
7106 store_insn = new_spill_reg_store[REGNO (src_reg)];
7107 if (src_reg && GET_CODE (src_reg) == REG
7108 && REGNO (src_reg) < FIRST_PSEUDO_REGISTER)
7110 int src_regno = REGNO (src_reg);
7111 int nr = HARD_REGNO_NREGS (src_regno, rld[r].mode);
7112 /* The place where to find a death note varies with
7113 PRESERVE_DEATH_INFO_REGNO_P . The condition is not
7114 necessarily checked exactly in the code that moves
7115 notes, so just check both locations. */
7116 rtx note = find_regno_note (insn, REG_DEAD, src_regno);
7117 if (! note)
7118 note = find_regno_note (store_insn, REG_DEAD, src_regno);
7119 while (nr-- > 0)
7121 spill_reg_store[src_regno + nr] = store_insn;
7122 spill_reg_stored_to[src_regno + nr] = out;
7123 reg_reloaded_contents[src_regno + nr] = nregno;
7124 reg_reloaded_insn[src_regno + nr] = store_insn;
7125 CLEAR_HARD_REG_BIT (reg_reloaded_dead, src_regno + nr);
7126 SET_HARD_REG_BIT (reg_reloaded_valid, src_regno + nr);
7127 SET_HARD_REG_BIT (reg_is_output_reload, src_regno + nr);
7128 if (note)
7129 SET_HARD_REG_BIT (reg_reloaded_died, src_regno);
7130 else
7131 CLEAR_HARD_REG_BIT (reg_reloaded_died, src_regno);
7133 reg_last_reload_reg[nregno] = src_reg;
7136 else
7138 int num_regs = HARD_REGNO_NREGS (nregno,GET_MODE (rld[r].out));
7140 while (num_regs-- > 0)
7141 reg_last_reload_reg[nregno + num_regs] = 0;
7145 IOR_HARD_REG_SET (reg_reloaded_dead, reg_reloaded_died);
7148 /* Emit code to perform a reload from IN (which may be a reload register) to
7149 OUT (which may also be a reload register). IN or OUT is from operand
7150 OPNUM with reload type TYPE.
7152 Returns first insn emitted. */
7155 gen_reload (out, in, opnum, type)
7156 rtx out;
7157 rtx in;
7158 int opnum;
7159 enum reload_type type;
7161 rtx last = get_last_insn ();
7162 rtx tem;
7164 /* If IN is a paradoxical SUBREG, remove it and try to put the
7165 opposite SUBREG on OUT. Likewise for a paradoxical SUBREG on OUT. */
7166 if (GET_CODE (in) == SUBREG
7167 && (GET_MODE_SIZE (GET_MODE (in))
7168 > GET_MODE_SIZE (GET_MODE (SUBREG_REG (in))))
7169 && (tem = gen_lowpart_common (GET_MODE (SUBREG_REG (in)), out)) != 0)
7170 in = SUBREG_REG (in), out = tem;
7171 else if (GET_CODE (out) == SUBREG
7172 && (GET_MODE_SIZE (GET_MODE (out))
7173 > GET_MODE_SIZE (GET_MODE (SUBREG_REG (out))))
7174 && (tem = gen_lowpart_common (GET_MODE (SUBREG_REG (out)), in)) != 0)
7175 out = SUBREG_REG (out), in = tem;
7177 /* How to do this reload can get quite tricky. Normally, we are being
7178 asked to reload a simple operand, such as a MEM, a constant, or a pseudo
7179 register that didn't get a hard register. In that case we can just
7180 call emit_move_insn.
7182 We can also be asked to reload a PLUS that adds a register or a MEM to
7183 another register, constant or MEM. This can occur during frame pointer
7184 elimination and while reloading addresses. This case is handled by
7185 trying to emit a single insn to perform the add. If it is not valid,
7186 we use a two insn sequence.
7188 Finally, we could be called to handle an 'o' constraint by putting
7189 an address into a register. In that case, we first try to do this
7190 with a named pattern of "reload_load_address". If no such pattern
7191 exists, we just emit a SET insn and hope for the best (it will normally
7192 be valid on machines that use 'o').
7194 This entire process is made complex because reload will never
7195 process the insns we generate here and so we must ensure that
7196 they will fit their constraints and also by the fact that parts of
7197 IN might be being reloaded separately and replaced with spill registers.
7198 Because of this, we are, in some sense, just guessing the right approach
7199 here. The one listed above seems to work.
7201 ??? At some point, this whole thing needs to be rethought. */
7203 if (GET_CODE (in) == PLUS
7204 && (GET_CODE (XEXP (in, 0)) == REG
7205 || GET_CODE (XEXP (in, 0)) == SUBREG
7206 || GET_CODE (XEXP (in, 0)) == MEM)
7207 && (GET_CODE (XEXP (in, 1)) == REG
7208 || GET_CODE (XEXP (in, 1)) == SUBREG
7209 || CONSTANT_P (XEXP (in, 1))
7210 || GET_CODE (XEXP (in, 1)) == MEM))
7212 /* We need to compute the sum of a register or a MEM and another
7213 register, constant, or MEM, and put it into the reload
7214 register. The best possible way of doing this is if the machine
7215 has a three-operand ADD insn that accepts the required operands.
7217 The simplest approach is to try to generate such an insn and see if it
7218 is recognized and matches its constraints. If so, it can be used.
7220 It might be better not to actually emit the insn unless it is valid,
7221 but we need to pass the insn as an operand to `recog' and
7222 `extract_insn' and it is simpler to emit and then delete the insn if
7223 not valid than to dummy things up. */
7225 rtx op0, op1, tem, insn;
7226 int code;
7228 op0 = find_replacement (&XEXP (in, 0));
7229 op1 = find_replacement (&XEXP (in, 1));
7231 /* Since constraint checking is strict, commutativity won't be
7232 checked, so we need to do that here to avoid spurious failure
7233 if the add instruction is two-address and the second operand
7234 of the add is the same as the reload reg, which is frequently
7235 the case. If the insn would be A = B + A, rearrange it so
7236 it will be A = A + B as constrain_operands expects. */
7238 if (GET_CODE (XEXP (in, 1)) == REG
7239 && REGNO (out) == REGNO (XEXP (in, 1)))
7240 tem = op0, op0 = op1, op1 = tem;
7242 if (op0 != XEXP (in, 0) || op1 != XEXP (in, 1))
7243 in = gen_rtx_PLUS (GET_MODE (in), op0, op1);
7245 insn = emit_insn (gen_rtx_SET (VOIDmode, out, in));
7246 code = recog_memoized (insn);
7248 if (code >= 0)
7250 extract_insn (insn);
7251 /* We want constrain operands to treat this insn strictly in
7252 its validity determination, i.e., the way it would after reload
7253 has completed. */
7254 if (constrain_operands (1))
7255 return insn;
7258 delete_insns_since (last);
7260 /* If that failed, we must use a conservative two-insn sequence.
7262 Use a move to copy one operand into the reload register. Prefer
7263 to reload a constant, MEM or pseudo since the move patterns can
7264 handle an arbitrary operand. If OP1 is not a constant, MEM or
7265 pseudo and OP1 is not a valid operand for an add instruction, then
7266 reload OP1.
7268 After reloading one of the operands into the reload register, add
7269 the reload register to the output register.
7271 If there is another way to do this for a specific machine, a
7272 DEFINE_PEEPHOLE should be specified that recognizes the sequence
7273 we emit below. */
7275 code = (int) add_optab->handlers[(int) GET_MODE (out)].insn_code;
7277 if (CONSTANT_P (op1) || GET_CODE (op1) == MEM || GET_CODE (op1) == SUBREG
7278 || (GET_CODE (op1) == REG
7279 && REGNO (op1) >= FIRST_PSEUDO_REGISTER)
7280 || (code != CODE_FOR_nothing
7281 && ! ((*insn_data[code].operand[2].predicate)
7282 (op1, insn_data[code].operand[2].mode))))
7283 tem = op0, op0 = op1, op1 = tem;
7285 gen_reload (out, op0, opnum, type);
7287 /* If OP0 and OP1 are the same, we can use OUT for OP1.
7288 This fixes a problem on the 32K where the stack pointer cannot
7289 be used as an operand of an add insn. */
7291 if (rtx_equal_p (op0, op1))
7292 op1 = out;
7294 insn = emit_insn (gen_add2_insn (out, op1));
7296 /* If that failed, copy the address register to the reload register.
7297 Then add the constant to the reload register. */
7299 code = recog_memoized (insn);
7301 if (code >= 0)
7303 extract_insn (insn);
7304 /* We want constrain operands to treat this insn strictly in
7305 its validity determination, i.e., the way it would after reload
7306 has completed. */
7307 if (constrain_operands (1))
7309 /* Add a REG_EQUIV note so that find_equiv_reg can find it. */
7310 REG_NOTES (insn)
7311 = gen_rtx_EXPR_LIST (REG_EQUIV, in, REG_NOTES (insn));
7312 return insn;
7316 delete_insns_since (last);
7318 gen_reload (out, op1, opnum, type);
7319 insn = emit_insn (gen_add2_insn (out, op0));
7320 REG_NOTES (insn) = gen_rtx_EXPR_LIST (REG_EQUIV, in, REG_NOTES (insn));
7323 #ifdef SECONDARY_MEMORY_NEEDED
7324 /* If we need a memory location to do the move, do it that way. */
7325 else if (GET_CODE (in) == REG && REGNO (in) < FIRST_PSEUDO_REGISTER
7326 && GET_CODE (out) == REG && REGNO (out) < FIRST_PSEUDO_REGISTER
7327 && SECONDARY_MEMORY_NEEDED (REGNO_REG_CLASS (REGNO (in)),
7328 REGNO_REG_CLASS (REGNO (out)),
7329 GET_MODE (out)))
7331 /* Get the memory to use and rewrite both registers to its mode. */
7332 rtx loc = get_secondary_mem (in, GET_MODE (out), opnum, type);
7334 if (GET_MODE (loc) != GET_MODE (out))
7335 out = gen_rtx_REG (GET_MODE (loc), REGNO (out));
7337 if (GET_MODE (loc) != GET_MODE (in))
7338 in = gen_rtx_REG (GET_MODE (loc), REGNO (in));
7340 gen_reload (loc, in, opnum, type);
7341 gen_reload (out, loc, opnum, type);
7343 #endif
7345 /* If IN is a simple operand, use gen_move_insn. */
7346 else if (GET_RTX_CLASS (GET_CODE (in)) == 'o' || GET_CODE (in) == SUBREG)
7347 emit_insn (gen_move_insn (out, in));
7349 #ifdef HAVE_reload_load_address
7350 else if (HAVE_reload_load_address)
7351 emit_insn (gen_reload_load_address (out, in));
7352 #endif
7354 /* Otherwise, just write (set OUT IN) and hope for the best. */
7355 else
7356 emit_insn (gen_rtx_SET (VOIDmode, out, in));
7358 /* Return the first insn emitted.
7359 We can not just return get_last_insn, because there may have
7360 been multiple instructions emitted. Also note that gen_move_insn may
7361 emit more than one insn itself, so we can not assume that there is one
7362 insn emitted per emit_insn_before call. */
7364 return last ? NEXT_INSN (last) : get_insns ();
7367 /* Delete a previously made output-reload
7368 whose result we now believe is not needed.
7369 First we double-check.
7371 INSN is the insn now being processed.
7372 LAST_RELOAD_REG is the hard register number for which we want to delete
7373 the last output reload.
7374 J is the reload-number that originally used REG. The caller has made
7375 certain that reload J doesn't use REG any longer for input. */
7377 static void
7378 delete_output_reload (insn, j, last_reload_reg)
7379 rtx insn;
7380 int j;
7381 int last_reload_reg;
7383 rtx output_reload_insn = spill_reg_store[last_reload_reg];
7384 rtx reg = spill_reg_stored_to[last_reload_reg];
7385 int k;
7386 int n_occurrences;
7387 int n_inherited = 0;
7388 register rtx i1;
7389 rtx substed;
7391 /* Get the raw pseudo-register referred to. */
7393 while (GET_CODE (reg) == SUBREG)
7394 reg = SUBREG_REG (reg);
7395 substed = reg_equiv_memory_loc[REGNO (reg)];
7397 /* This is unsafe if the operand occurs more often in the current
7398 insn than it is inherited. */
7399 for (k = n_reloads - 1; k >= 0; k--)
7401 rtx reg2 = rld[k].in;
7402 if (! reg2)
7403 continue;
7404 if (GET_CODE (reg2) == MEM || reload_override_in[k])
7405 reg2 = rld[k].in_reg;
7406 #ifdef AUTO_INC_DEC
7407 if (rld[k].out && ! rld[k].out_reg)
7408 reg2 = XEXP (rld[k].in_reg, 0);
7409 #endif
7410 while (GET_CODE (reg2) == SUBREG)
7411 reg2 = SUBREG_REG (reg2);
7412 if (rtx_equal_p (reg2, reg))
7414 if (reload_inherited[k] || reload_override_in[k] || k == j)
7416 n_inherited++;
7417 reg2 = rld[k].out_reg;
7418 if (! reg2)
7419 continue;
7420 while (GET_CODE (reg2) == SUBREG)
7421 reg2 = XEXP (reg2, 0);
7422 if (rtx_equal_p (reg2, reg))
7423 n_inherited++;
7425 else
7426 return;
7429 n_occurrences = count_occurrences (PATTERN (insn), reg, 0);
7430 if (substed)
7431 n_occurrences += count_occurrences (PATTERN (insn), substed, 0);
7432 if (n_occurrences > n_inherited)
7433 return;
7435 /* If the pseudo-reg we are reloading is no longer referenced
7436 anywhere between the store into it and here,
7437 and no jumps or labels intervene, then the value can get
7438 here through the reload reg alone.
7439 Otherwise, give up--return. */
7440 for (i1 = NEXT_INSN (output_reload_insn);
7441 i1 != insn; i1 = NEXT_INSN (i1))
7443 if (GET_CODE (i1) == CODE_LABEL || GET_CODE (i1) == JUMP_INSN)
7444 return;
7445 if ((GET_CODE (i1) == INSN || GET_CODE (i1) == CALL_INSN)
7446 && reg_mentioned_p (reg, PATTERN (i1)))
7448 /* If this is USE in front of INSN, we only have to check that
7449 there are no more references than accounted for by inheritance. */
7450 while (GET_CODE (i1) == INSN && GET_CODE (PATTERN (i1)) == USE)
7452 n_occurrences += rtx_equal_p (reg, XEXP (PATTERN (i1), 0)) != 0;
7453 i1 = NEXT_INSN (i1);
7455 if (n_occurrences <= n_inherited && i1 == insn)
7456 break;
7457 return;
7461 /* The caller has already checked that REG dies or is set in INSN.
7462 It has also checked that we are optimizing, and thus some inaccurancies
7463 in the debugging information are acceptable.
7464 So we could just delete output_reload_insn.
7465 But in some cases we can improve the debugging information without
7466 sacrificing optimization - maybe even improving the code:
7467 See if the pseudo reg has been completely replaced
7468 with reload regs. If so, delete the store insn
7469 and forget we had a stack slot for the pseudo. */
7470 if (rld[j].out != rld[j].in
7471 && REG_N_DEATHS (REGNO (reg)) == 1
7472 && REG_N_SETS (REGNO (reg)) == 1
7473 && REG_BASIC_BLOCK (REGNO (reg)) >= 0
7474 && find_regno_note (insn, REG_DEAD, REGNO (reg)))
7476 rtx i2;
7478 /* We know that it was used only between here
7479 and the beginning of the current basic block.
7480 (We also know that the last use before INSN was
7481 the output reload we are thinking of deleting, but never mind that.)
7482 Search that range; see if any ref remains. */
7483 for (i2 = PREV_INSN (insn); i2; i2 = PREV_INSN (i2))
7485 rtx set = single_set (i2);
7487 /* Uses which just store in the pseudo don't count,
7488 since if they are the only uses, they are dead. */
7489 if (set != 0 && SET_DEST (set) == reg)
7490 continue;
7491 if (GET_CODE (i2) == CODE_LABEL
7492 || GET_CODE (i2) == JUMP_INSN)
7493 break;
7494 if ((GET_CODE (i2) == INSN || GET_CODE (i2) == CALL_INSN)
7495 && reg_mentioned_p (reg, PATTERN (i2)))
7497 /* Some other ref remains; just delete the output reload we
7498 know to be dead. */
7499 delete_address_reloads (output_reload_insn, insn);
7500 PUT_CODE (output_reload_insn, NOTE);
7501 NOTE_SOURCE_FILE (output_reload_insn) = 0;
7502 NOTE_LINE_NUMBER (output_reload_insn) = NOTE_INSN_DELETED;
7503 return;
7507 /* Delete the now-dead stores into this pseudo. */
7508 for (i2 = PREV_INSN (insn); i2; i2 = PREV_INSN (i2))
7510 rtx set = single_set (i2);
7512 if (set != 0 && SET_DEST (set) == reg)
7514 delete_address_reloads (i2, insn);
7515 /* This might be a basic block head,
7516 thus don't use delete_insn. */
7517 PUT_CODE (i2, NOTE);
7518 NOTE_SOURCE_FILE (i2) = 0;
7519 NOTE_LINE_NUMBER (i2) = NOTE_INSN_DELETED;
7521 if (GET_CODE (i2) == CODE_LABEL
7522 || GET_CODE (i2) == JUMP_INSN)
7523 break;
7526 /* For the debugging info,
7527 say the pseudo lives in this reload reg. */
7528 reg_renumber[REGNO (reg)] = REGNO (rld[j].reg_rtx);
7529 alter_reg (REGNO (reg), -1);
7531 delete_address_reloads (output_reload_insn, insn);
7532 PUT_CODE (output_reload_insn, NOTE);
7533 NOTE_SOURCE_FILE (output_reload_insn) = 0;
7534 NOTE_LINE_NUMBER (output_reload_insn) = NOTE_INSN_DELETED;
7538 /* We are going to delete DEAD_INSN. Recursively delete loads of
7539 reload registers used in DEAD_INSN that are not used till CURRENT_INSN.
7540 CURRENT_INSN is being reloaded, so we have to check its reloads too. */
7541 static void
7542 delete_address_reloads (dead_insn, current_insn)
7543 rtx dead_insn, current_insn;
7545 rtx set = single_set (dead_insn);
7546 rtx set2, dst, prev, next;
7547 if (set)
7549 rtx dst = SET_DEST (set);
7550 if (GET_CODE (dst) == MEM)
7551 delete_address_reloads_1 (dead_insn, XEXP (dst, 0), current_insn);
7553 /* If we deleted the store from a reloaded post_{in,de}c expression,
7554 we can delete the matching adds. */
7555 prev = PREV_INSN (dead_insn);
7556 next = NEXT_INSN (dead_insn);
7557 if (! prev || ! next)
7558 return;
7559 set = single_set (next);
7560 set2 = single_set (prev);
7561 if (! set || ! set2
7562 || GET_CODE (SET_SRC (set)) != PLUS || GET_CODE (SET_SRC (set2)) != PLUS
7563 || GET_CODE (XEXP (SET_SRC (set), 1)) != CONST_INT
7564 || GET_CODE (XEXP (SET_SRC (set2), 1)) != CONST_INT)
7565 return;
7566 dst = SET_DEST (set);
7567 if (! rtx_equal_p (dst, SET_DEST (set2))
7568 || ! rtx_equal_p (dst, XEXP (SET_SRC (set), 0))
7569 || ! rtx_equal_p (dst, XEXP (SET_SRC (set2), 0))
7570 || (INTVAL (XEXP (SET_SRC (set), 1))
7571 != - INTVAL (XEXP (SET_SRC (set2), 1))))
7572 return;
7573 delete_insn (prev);
7574 delete_insn (next);
7577 /* Subfunction of delete_address_reloads: process registers found in X. */
7578 static void
7579 delete_address_reloads_1 (dead_insn, x, current_insn)
7580 rtx dead_insn, x, current_insn;
7582 rtx prev, set, dst, i2;
7583 int i, j;
7584 enum rtx_code code = GET_CODE (x);
7586 if (code != REG)
7588 const char *fmt= GET_RTX_FORMAT (code);
7589 for (i = GET_RTX_LENGTH (code) - 1; i >= 0; i--)
7591 if (fmt[i] == 'e')
7592 delete_address_reloads_1 (dead_insn, XEXP (x, i), current_insn);
7593 else if (fmt[i] == 'E')
7595 for (j = XVECLEN (x, i) - 1; j >=0; j--)
7596 delete_address_reloads_1 (dead_insn, XVECEXP (x, i, j),
7597 current_insn);
7600 return;
7603 if (spill_reg_order[REGNO (x)] < 0)
7604 return;
7606 /* Scan backwards for the insn that sets x. This might be a way back due
7607 to inheritance. */
7608 for (prev = PREV_INSN (dead_insn); prev; prev = PREV_INSN (prev))
7610 code = GET_CODE (prev);
7611 if (code == CODE_LABEL || code == JUMP_INSN)
7612 return;
7613 if (GET_RTX_CLASS (code) != 'i')
7614 continue;
7615 if (reg_set_p (x, PATTERN (prev)))
7616 break;
7617 if (reg_referenced_p (x, PATTERN (prev)))
7618 return;
7620 if (! prev || INSN_UID (prev) < reload_first_uid)
7621 return;
7622 /* Check that PREV only sets the reload register. */
7623 set = single_set (prev);
7624 if (! set)
7625 return;
7626 dst = SET_DEST (set);
7627 if (GET_CODE (dst) != REG
7628 || ! rtx_equal_p (dst, x))
7629 return;
7630 if (! reg_set_p (dst, PATTERN (dead_insn)))
7632 /* Check if DST was used in a later insn -
7633 it might have been inherited. */
7634 for (i2 = NEXT_INSN (dead_insn); i2; i2 = NEXT_INSN (i2))
7636 if (GET_CODE (i2) == CODE_LABEL)
7637 break;
7638 if (GET_RTX_CLASS (GET_CODE (i2)) != 'i')
7639 continue;
7640 if (reg_referenced_p (dst, PATTERN (i2)))
7642 /* If there is a reference to the register in the current insn,
7643 it might be loaded in a non-inherited reload. If no other
7644 reload uses it, that means the register is set before
7645 referenced. */
7646 if (i2 == current_insn)
7648 for (j = n_reloads - 1; j >= 0; j--)
7649 if ((rld[j].reg_rtx == dst && reload_inherited[j])
7650 || reload_override_in[j] == dst)
7651 return;
7652 for (j = n_reloads - 1; j >= 0; j--)
7653 if (rld[j].in && rld[j].reg_rtx == dst)
7654 break;
7655 if (j >= 0)
7656 break;
7658 return;
7660 if (GET_CODE (i2) == JUMP_INSN)
7661 break;
7662 /* If DST is still live at CURRENT_INSN, check if it is used for
7663 any reload. Note that even if CURRENT_INSN sets DST, we still
7664 have to check the reloads. */
7665 if (i2 == current_insn)
7667 for (j = n_reloads - 1; j >= 0; j--)
7668 if ((rld[j].reg_rtx == dst && reload_inherited[j])
7669 || reload_override_in[j] == dst)
7670 return;
7671 /* ??? We can't finish the loop here, because dst might be
7672 allocated to a pseudo in this block if no reload in this
7673 block needs any of the clsses containing DST - see
7674 spill_hard_reg. There is no easy way to tell this, so we
7675 have to scan till the end of the basic block. */
7677 if (reg_set_p (dst, PATTERN (i2)))
7678 break;
7681 delete_address_reloads_1 (prev, SET_SRC (set), current_insn);
7682 reg_reloaded_contents[REGNO (dst)] = -1;
7683 /* Can't use delete_insn here because PREV might be a basic block head. */
7684 PUT_CODE (prev, NOTE);
7685 NOTE_LINE_NUMBER (prev) = NOTE_INSN_DELETED;
7686 NOTE_SOURCE_FILE (prev) = 0;
7689 /* Output reload-insns to reload VALUE into RELOADREG.
7690 VALUE is an autoincrement or autodecrement RTX whose operand
7691 is a register or memory location;
7692 so reloading involves incrementing that location.
7693 IN is either identical to VALUE, or some cheaper place to reload from.
7695 INC_AMOUNT is the number to increment or decrement by (always positive).
7696 This cannot be deduced from VALUE.
7698 Return the instruction that stores into RELOADREG. */
7700 static rtx
7701 inc_for_reload (reloadreg, in, value, inc_amount)
7702 rtx reloadreg;
7703 rtx in, value;
7704 int inc_amount;
7706 /* REG or MEM to be copied and incremented. */
7707 rtx incloc = XEXP (value, 0);
7708 /* Nonzero if increment after copying. */
7709 int post = (GET_CODE (value) == POST_DEC || GET_CODE (value) == POST_INC);
7710 rtx last;
7711 rtx inc;
7712 rtx add_insn;
7713 int code;
7714 rtx store;
7715 rtx real_in = in == value ? XEXP (in, 0) : in;
7717 /* No hard register is equivalent to this register after
7718 inc/dec operation. If REG_LAST_RELOAD_REG were non-zero,
7719 we could inc/dec that register as well (maybe even using it for
7720 the source), but I'm not sure it's worth worrying about. */
7721 if (GET_CODE (incloc) == REG)
7722 reg_last_reload_reg[REGNO (incloc)] = 0;
7724 if (GET_CODE (value) == PRE_DEC || GET_CODE (value) == POST_DEC)
7725 inc_amount = - inc_amount;
7727 inc = GEN_INT (inc_amount);
7729 /* If this is post-increment, first copy the location to the reload reg. */
7730 if (post && real_in != reloadreg)
7731 emit_insn (gen_move_insn (reloadreg, real_in));
7733 if (in == value)
7735 /* See if we can directly increment INCLOC. Use a method similar to
7736 that in gen_reload. */
7738 last = get_last_insn ();
7739 add_insn = emit_insn (gen_rtx_SET (VOIDmode, incloc,
7740 gen_rtx_PLUS (GET_MODE (incloc),
7741 incloc, inc)));
7743 code = recog_memoized (add_insn);
7744 if (code >= 0)
7746 extract_insn (add_insn);
7747 if (constrain_operands (1))
7749 /* If this is a pre-increment and we have incremented the value
7750 where it lives, copy the incremented value to RELOADREG to
7751 be used as an address. */
7753 if (! post)
7754 emit_insn (gen_move_insn (reloadreg, incloc));
7756 return add_insn;
7759 delete_insns_since (last);
7762 /* If couldn't do the increment directly, must increment in RELOADREG.
7763 The way we do this depends on whether this is pre- or post-increment.
7764 For pre-increment, copy INCLOC to the reload register, increment it
7765 there, then save back. */
7767 if (! post)
7769 if (in != reloadreg)
7770 emit_insn (gen_move_insn (reloadreg, real_in));
7771 emit_insn (gen_add2_insn (reloadreg, inc));
7772 store = emit_insn (gen_move_insn (incloc, reloadreg));
7774 else
7776 /* Postincrement.
7777 Because this might be a jump insn or a compare, and because RELOADREG
7778 may not be available after the insn in an input reload, we must do
7779 the incrementation before the insn being reloaded for.
7781 We have already copied IN to RELOADREG. Increment the copy in
7782 RELOADREG, save that back, then decrement RELOADREG so it has
7783 the original value. */
7785 emit_insn (gen_add2_insn (reloadreg, inc));
7786 store = emit_insn (gen_move_insn (incloc, reloadreg));
7787 emit_insn (gen_add2_insn (reloadreg, GEN_INT (-inc_amount)));
7790 return store;
7793 /* Return 1 if we are certain that the constraint-string STRING allows
7794 the hard register REG. Return 0 if we can't be sure of this. */
7796 static int
7797 constraint_accepts_reg_p (string, reg)
7798 const char *string;
7799 rtx reg;
7801 int value = 0;
7802 int regno = true_regnum (reg);
7803 int c;
7805 /* Initialize for first alternative. */
7806 value = 0;
7807 /* Check that each alternative contains `g' or `r'. */
7808 while (1)
7809 switch (c = *string++)
7811 case 0:
7812 /* If an alternative lacks `g' or `r', we lose. */
7813 return value;
7814 case ',':
7815 /* If an alternative lacks `g' or `r', we lose. */
7816 if (value == 0)
7817 return 0;
7818 /* Initialize for next alternative. */
7819 value = 0;
7820 break;
7821 case 'g':
7822 case 'r':
7823 /* Any general reg wins for this alternative. */
7824 if (TEST_HARD_REG_BIT (reg_class_contents[(int) GENERAL_REGS], regno))
7825 value = 1;
7826 break;
7827 default:
7828 /* Any reg in specified class wins for this alternative. */
7830 enum reg_class class = REG_CLASS_FROM_LETTER (c);
7832 if (TEST_HARD_REG_BIT (reg_class_contents[(int) class], regno))
7833 value = 1;
7838 /* INSN is a no-op; delete it.
7839 If this sets the return value of the function, we must keep a USE around,
7840 in case this is in a different basic block than the final USE. Otherwise,
7841 we could loose important register lifeness information on
7842 SMALL_REGISTER_CLASSES machines, where return registers might be used as
7843 spills: subsequent passes assume that spill registers are dead at the end
7844 of a basic block.
7845 VALUE must be the return value in such a case, NULL otherwise. */
7846 static void
7847 reload_cse_delete_noop_set (insn, value)
7848 rtx insn, value;
7850 if (value)
7852 PATTERN (insn) = gen_rtx_USE (VOIDmode, value);
7853 INSN_CODE (insn) = -1;
7854 REG_NOTES (insn) = NULL_RTX;
7856 else
7858 PUT_CODE (insn, NOTE);
7859 NOTE_LINE_NUMBER (insn) = NOTE_INSN_DELETED;
7860 NOTE_SOURCE_FILE (insn) = 0;
7864 /* See whether a single set SET is a noop. */
7865 static int
7866 reload_cse_noop_set_p (set)
7867 rtx set;
7869 return rtx_equal_for_cselib_p (SET_DEST (set), SET_SRC (set));
7872 /* Try to simplify INSN. */
7873 static void
7874 reload_cse_simplify (insn)
7875 rtx insn;
7877 rtx body = PATTERN (insn);
7879 if (GET_CODE (body) == SET)
7881 int count = 0;
7882 if (reload_cse_noop_set_p (body))
7884 rtx value = SET_DEST (body);
7885 if (! REG_FUNCTION_VALUE_P (SET_DEST (body)))
7886 value = 0;
7887 reload_cse_delete_noop_set (insn, value);
7888 return;
7891 /* It's not a no-op, but we can try to simplify it. */
7892 count += reload_cse_simplify_set (body, insn);
7894 if (count > 0)
7895 apply_change_group ();
7896 else
7897 reload_cse_simplify_operands (insn);
7899 else if (GET_CODE (body) == PARALLEL)
7901 int i;
7902 int count = 0;
7903 rtx value = NULL_RTX;
7905 /* If every action in a PARALLEL is a noop, we can delete
7906 the entire PARALLEL. */
7907 for (i = XVECLEN (body, 0) - 1; i >= 0; --i)
7909 rtx part = XVECEXP (body, 0, i);
7910 if (GET_CODE (part) == SET)
7912 if (! reload_cse_noop_set_p (part))
7913 break;
7914 if (REG_FUNCTION_VALUE_P (SET_DEST (part)))
7916 if (value)
7917 break;
7918 value = SET_DEST (part);
7921 else if (GET_CODE (part) != CLOBBER)
7922 break;
7925 if (i < 0)
7927 reload_cse_delete_noop_set (insn, value);
7928 /* We're done with this insn. */
7929 return;
7932 /* It's not a no-op, but we can try to simplify it. */
7933 for (i = XVECLEN (body, 0) - 1; i >= 0; --i)
7934 if (GET_CODE (XVECEXP (body, 0, i)) == SET)
7935 count += reload_cse_simplify_set (XVECEXP (body, 0, i), insn);
7937 if (count > 0)
7938 apply_change_group ();
7939 else
7940 reload_cse_simplify_operands (insn);
7944 /* Do a very simple CSE pass over the hard registers.
7946 This function detects no-op moves where we happened to assign two
7947 different pseudo-registers to the same hard register, and then
7948 copied one to the other. Reload will generate a useless
7949 instruction copying a register to itself.
7951 This function also detects cases where we load a value from memory
7952 into two different registers, and (if memory is more expensive than
7953 registers) changes it to simply copy the first register into the
7954 second register.
7956 Another optimization is performed that scans the operands of each
7957 instruction to see whether the value is already available in a
7958 hard register. It then replaces the operand with the hard register
7959 if possible, much like an optional reload would. */
7961 static void
7962 reload_cse_regs_1 (first)
7963 rtx first;
7965 rtx insn;
7967 cselib_init ();
7968 init_alias_analysis ();
7970 for (insn = first; insn; insn = NEXT_INSN (insn))
7972 if (GET_RTX_CLASS (GET_CODE (insn)) == 'i')
7973 reload_cse_simplify (insn);
7975 cselib_process_insn (insn);
7978 /* Clean up. */
7979 end_alias_analysis ();
7980 cselib_finish ();
7983 /* Call cse / combine like post-reload optimization phases.
7984 FIRST is the first instruction. */
7985 void
7986 reload_cse_regs (first)
7987 rtx first;
7989 reload_cse_regs_1 (first);
7990 reload_combine ();
7991 reload_cse_move2add (first);
7992 if (flag_expensive_optimizations)
7993 reload_cse_regs_1 (first);
7996 /* Try to simplify a single SET instruction. SET is the set pattern.
7997 INSN is the instruction it came from.
7998 This function only handles one case: if we set a register to a value
7999 which is not a register, we try to find that value in some other register
8000 and change the set into a register copy. */
8002 static int
8003 reload_cse_simplify_set (set, insn)
8004 rtx set;
8005 rtx insn;
8007 int did_change = 0;
8008 int dreg;
8009 rtx src;
8010 enum reg_class dclass;
8011 int old_cost;
8012 cselib_val *val;
8013 struct elt_loc_list *l;
8015 dreg = true_regnum (SET_DEST (set));
8016 if (dreg < 0)
8017 return 0;
8019 src = SET_SRC (set);
8020 if (side_effects_p (src) || true_regnum (src) >= 0)
8021 return 0;
8023 dclass = REGNO_REG_CLASS (dreg);
8025 /* If memory loads are cheaper than register copies, don't change them. */
8026 if (GET_CODE (src) == MEM)
8027 old_cost = MEMORY_MOVE_COST (GET_MODE (src), dclass, 1);
8028 else if (CONSTANT_P (src))
8029 old_cost = rtx_cost (src, SET);
8030 else if (GET_CODE (src) == REG)
8031 old_cost = REGISTER_MOVE_COST (REGNO_REG_CLASS (REGNO (src)), dclass);
8032 else
8033 /* ??? */
8034 old_cost = rtx_cost (src, SET);
8036 val = cselib_lookup (src, VOIDmode, 0);
8037 if (! val)
8038 return 0;
8039 for (l = val->locs; l; l = l->next)
8041 int this_cost;
8042 if (CONSTANT_P (l->loc) && ! references_value_p (l->loc, 0))
8043 this_cost = rtx_cost (l->loc, SET);
8044 else if (GET_CODE (l->loc) == REG)
8045 this_cost = REGISTER_MOVE_COST (REGNO_REG_CLASS (REGNO (l->loc)),
8046 dclass);
8047 else
8048 continue;
8049 /* If equal costs, prefer registers over anything else. That tends to
8050 lead to smaller instructions on some machines. */
8051 if ((this_cost < old_cost
8052 || (this_cost == old_cost
8053 && GET_CODE (l->loc) == REG
8054 && GET_CODE (SET_SRC (set)) != REG))
8055 && validate_change (insn, &SET_SRC (set), copy_rtx (l->loc), 1))
8056 old_cost = this_cost, did_change = 1;
8059 return did_change;
8062 /* Try to replace operands in INSN with equivalent values that are already
8063 in registers. This can be viewed as optional reloading.
8065 For each non-register operand in the insn, see if any hard regs are
8066 known to be equivalent to that operand. Record the alternatives which
8067 can accept these hard registers. Among all alternatives, select the
8068 ones which are better or equal to the one currently matching, where
8069 "better" is in terms of '?' and '!' constraints. Among the remaining
8070 alternatives, select the one which replaces most operands with
8071 hard registers. */
8073 static int
8074 reload_cse_simplify_operands (insn)
8075 rtx insn;
8077 int i,j;
8079 /* For each operand, all registers that are equivalent to it. */
8080 HARD_REG_SET equiv_regs[MAX_RECOG_OPERANDS];
8082 const char *constraints[MAX_RECOG_OPERANDS];
8084 /* Vector recording how bad an alternative is. */
8085 int *alternative_reject;
8086 /* Vector recording how many registers can be introduced by choosing
8087 this alternative. */
8088 int *alternative_nregs;
8089 /* Array of vectors recording, for each operand and each alternative,
8090 which hard register to substitute, or -1 if the operand should be
8091 left as it is. */
8092 int *op_alt_regno[MAX_RECOG_OPERANDS];
8093 /* Array of alternatives, sorted in order of decreasing desirability. */
8094 int *alternative_order;
8095 rtx reg = gen_rtx_REG (VOIDmode, -1);
8097 extract_insn (insn);
8099 if (recog_data.n_alternatives == 0 || recog_data.n_operands == 0)
8100 return 0;
8102 /* Figure out which alternative currently matches. */
8103 if (! constrain_operands (1))
8104 fatal_insn_not_found (insn);
8106 alternative_reject = (int *) alloca (recog_data.n_alternatives * sizeof (int));
8107 alternative_nregs = (int *) alloca (recog_data.n_alternatives * sizeof (int));
8108 alternative_order = (int *) alloca (recog_data.n_alternatives * sizeof (int));
8109 bzero ((char *)alternative_reject, recog_data.n_alternatives * sizeof (int));
8110 bzero ((char *)alternative_nregs, recog_data.n_alternatives * sizeof (int));
8112 /* For each operand, find out which regs are equivalent. */
8113 for (i = 0; i < recog_data.n_operands; i++)
8115 cselib_val *v;
8116 struct elt_loc_list *l;
8118 CLEAR_HARD_REG_SET (equiv_regs[i]);
8120 /* cselib blows up on CODE_LABELs. Trying to fix that doesn't seem
8121 right, so avoid the problem here. */
8122 if (GET_CODE (recog_data.operand[i]) == CODE_LABEL)
8123 continue;
8125 v = cselib_lookup (recog_data.operand[i], recog_data.operand_mode[i], 0);
8126 if (! v)
8127 continue;
8129 for (l = v->locs; l; l = l->next)
8130 if (GET_CODE (l->loc) == REG)
8131 SET_HARD_REG_BIT (equiv_regs[i], REGNO (l->loc));
8134 for (i = 0; i < recog_data.n_operands; i++)
8136 enum machine_mode mode;
8137 int regno;
8138 const char *p;
8140 op_alt_regno[i] = (int *) alloca (recog_data.n_alternatives * sizeof (int));
8141 for (j = 0; j < recog_data.n_alternatives; j++)
8142 op_alt_regno[i][j] = -1;
8144 p = constraints[i] = recog_data.constraints[i];
8145 mode = recog_data.operand_mode[i];
8147 /* Add the reject values for each alternative given by the constraints
8148 for this operand. */
8149 j = 0;
8150 while (*p != '\0')
8152 char c = *p++;
8153 if (c == ',')
8154 j++;
8155 else if (c == '?')
8156 alternative_reject[j] += 3;
8157 else if (c == '!')
8158 alternative_reject[j] += 300;
8161 /* We won't change operands which are already registers. We
8162 also don't want to modify output operands. */
8163 regno = true_regnum (recog_data.operand[i]);
8164 if (regno >= 0
8165 || constraints[i][0] == '='
8166 || constraints[i][0] == '+')
8167 continue;
8169 for (regno = 0; regno < FIRST_PSEUDO_REGISTER; regno++)
8171 int class = (int) NO_REGS;
8173 if (! TEST_HARD_REG_BIT (equiv_regs[i], regno))
8174 continue;
8176 REGNO (reg) = regno;
8177 PUT_MODE (reg, mode);
8179 /* We found a register equal to this operand. Now look for all
8180 alternatives that can accept this register and have not been
8181 assigned a register they can use yet. */
8182 j = 0;
8183 p = constraints[i];
8184 for (;;)
8186 char c = *p++;
8188 switch (c)
8190 case '=': case '+': case '?':
8191 case '#': case '&': case '!':
8192 case '*': case '%':
8193 case '0': case '1': case '2': case '3': case '4':
8194 case '5': case '6': case '7': case '8': case '9':
8195 case 'm': case '<': case '>': case 'V': case 'o':
8196 case 'E': case 'F': case 'G': case 'H':
8197 case 's': case 'i': case 'n':
8198 case 'I': case 'J': case 'K': case 'L':
8199 case 'M': case 'N': case 'O': case 'P':
8200 #ifdef EXTRA_CONSTRAINT
8201 case 'Q': case 'R': case 'S': case 'T': case 'U':
8202 #endif
8203 case 'p': case 'X':
8204 /* These don't say anything we care about. */
8205 break;
8207 case 'g': case 'r':
8208 class = reg_class_subunion[(int) class][(int) GENERAL_REGS];
8209 break;
8211 default:
8212 class
8213 = reg_class_subunion[(int) class][(int) REG_CLASS_FROM_LETTER ((unsigned char)c)];
8214 break;
8216 case ',': case '\0':
8217 /* See if REGNO fits this alternative, and set it up as the
8218 replacement register if we don't have one for this
8219 alternative yet and the operand being replaced is not
8220 a cheap CONST_INT. */
8221 if (op_alt_regno[i][j] == -1
8222 && reg_fits_class_p (reg, class, 0, mode)
8223 && (GET_CODE (recog_data.operand[i]) != CONST_INT
8224 || (rtx_cost (recog_data.operand[i], SET)
8225 > rtx_cost (reg, SET))))
8227 alternative_nregs[j]++;
8228 op_alt_regno[i][j] = regno;
8230 j++;
8231 break;
8234 if (c == '\0')
8235 break;
8240 /* Record all alternatives which are better or equal to the currently
8241 matching one in the alternative_order array. */
8242 for (i = j = 0; i < recog_data.n_alternatives; i++)
8243 if (alternative_reject[i] <= alternative_reject[which_alternative])
8244 alternative_order[j++] = i;
8245 recog_data.n_alternatives = j;
8247 /* Sort it. Given a small number of alternatives, a dumb algorithm
8248 won't hurt too much. */
8249 for (i = 0; i < recog_data.n_alternatives - 1; i++)
8251 int best = i;
8252 int best_reject = alternative_reject[alternative_order[i]];
8253 int best_nregs = alternative_nregs[alternative_order[i]];
8254 int tmp;
8256 for (j = i + 1; j < recog_data.n_alternatives; j++)
8258 int this_reject = alternative_reject[alternative_order[j]];
8259 int this_nregs = alternative_nregs[alternative_order[j]];
8261 if (this_reject < best_reject
8262 || (this_reject == best_reject && this_nregs < best_nregs))
8264 best = j;
8265 best_reject = this_reject;
8266 best_nregs = this_nregs;
8270 tmp = alternative_order[best];
8271 alternative_order[best] = alternative_order[i];
8272 alternative_order[i] = tmp;
8275 /* Substitute the operands as determined by op_alt_regno for the best
8276 alternative. */
8277 j = alternative_order[0];
8279 for (i = 0; i < recog_data.n_operands; i++)
8281 enum machine_mode mode = recog_data.operand_mode[i];
8282 if (op_alt_regno[i][j] == -1)
8283 continue;
8285 validate_change (insn, recog_data.operand_loc[i],
8286 gen_rtx_REG (mode, op_alt_regno[i][j]), 1);
8289 for (i = recog_data.n_dups - 1; i >= 0; i--)
8291 int op = recog_data.dup_num[i];
8292 enum machine_mode mode = recog_data.operand_mode[op];
8294 if (op_alt_regno[op][j] == -1)
8295 continue;
8297 validate_change (insn, recog_data.dup_loc[i],
8298 gen_rtx_REG (mode, op_alt_regno[op][j]), 1);
8301 return apply_change_group ();
8304 /* If reload couldn't use reg+reg+offset addressing, try to use reg+reg
8305 addressing now.
8306 This code might also be useful when reload gave up on reg+reg addresssing
8307 because of clashes between the return register and INDEX_REG_CLASS. */
8309 /* The maximum number of uses of a register we can keep track of to
8310 replace them with reg+reg addressing. */
8311 #define RELOAD_COMBINE_MAX_USES 6
8313 /* INSN is the insn where a register has ben used, and USEP points to the
8314 location of the register within the rtl. */
8315 struct reg_use { rtx insn, *usep; };
8317 /* If the register is used in some unknown fashion, USE_INDEX is negative.
8318 If it is dead, USE_INDEX is RELOAD_COMBINE_MAX_USES, and STORE_RUID
8319 indicates where it becomes live again.
8320 Otherwise, USE_INDEX is the index of the last encountered use of the
8321 register (which is first among these we have seen since we scan backwards),
8322 OFFSET contains the constant offset that is added to the register in
8323 all encountered uses, and USE_RUID indicates the first encountered, i.e.
8324 last, of these uses.
8325 STORE_RUID is always meaningful if we only want to use a value in a
8326 register in a different place: it denotes the next insn in the insn
8327 stream (i.e. the last ecountered) that sets or clobbers the register. */
8328 static struct
8330 struct reg_use reg_use[RELOAD_COMBINE_MAX_USES];
8331 int use_index;
8332 rtx offset;
8333 int store_ruid;
8334 int use_ruid;
8335 } reg_state[FIRST_PSEUDO_REGISTER];
8337 /* Reverse linear uid. This is increased in reload_combine while scanning
8338 the instructions from last to first. It is used to set last_label_ruid
8339 and the store_ruid / use_ruid fields in reg_state. */
8340 static int reload_combine_ruid;
8342 #define LABEL_LIVE(LABEL) \
8343 (label_live[CODE_LABEL_NUMBER (LABEL) - min_labelno])
8345 static void
8346 reload_combine ()
8348 rtx insn, set;
8349 int first_index_reg = 1, last_index_reg = 0;
8350 int i;
8351 unsigned int r;
8352 int last_label_ruid;
8353 int min_labelno, n_labels;
8354 HARD_REG_SET ever_live_at_start, *label_live;
8356 /* If reg+reg can be used in offsetable memory adresses, the main chunk of
8357 reload has already used it where appropriate, so there is no use in
8358 trying to generate it now. */
8359 if (double_reg_address_ok && INDEX_REG_CLASS != NO_REGS)
8360 return;
8362 /* To avoid wasting too much time later searching for an index register,
8363 determine the minimum and maximum index register numbers. */
8364 for (r = 0; r < FIRST_PSEUDO_REGISTER; r++)
8365 if (TEST_HARD_REG_BIT (reg_class_contents[INDEX_REG_CLASS], r))
8367 if (! first_index_reg)
8368 first_index_reg = r;
8370 last_index_reg = r;
8373 /* If no index register is available, we can quit now. */
8374 if (first_index_reg > last_index_reg)
8375 return;
8377 /* Set up LABEL_LIVE and EVER_LIVE_AT_START. The register lifetime
8378 information is a bit fuzzy immediately after reload, but it's
8379 still good enough to determine which registers are live at a jump
8380 destination. */
8381 min_labelno = get_first_label_num ();
8382 n_labels = max_label_num () - min_labelno;
8383 label_live = (HARD_REG_SET *) xmalloc (n_labels * sizeof (HARD_REG_SET));
8384 CLEAR_HARD_REG_SET (ever_live_at_start);
8386 for (i = n_basic_blocks - 1; i >= 0; i--)
8388 insn = BLOCK_HEAD (i);
8389 if (GET_CODE (insn) == CODE_LABEL)
8391 HARD_REG_SET live;
8393 REG_SET_TO_HARD_REG_SET (live,
8394 BASIC_BLOCK (i)->global_live_at_start);
8395 compute_use_by_pseudos (&live,
8396 BASIC_BLOCK (i)->global_live_at_start);
8397 COPY_HARD_REG_SET (LABEL_LIVE (insn), live);
8398 IOR_HARD_REG_SET (ever_live_at_start, live);
8402 /* Initialize last_label_ruid, reload_combine_ruid and reg_state. */
8403 last_label_ruid = reload_combine_ruid = 0;
8404 for (r = 0; r < FIRST_PSEUDO_REGISTER; r++)
8406 reg_state[r].store_ruid = reload_combine_ruid;
8407 if (fixed_regs[r])
8408 reg_state[r].use_index = -1;
8409 else
8410 reg_state[r].use_index = RELOAD_COMBINE_MAX_USES;
8413 for (insn = get_last_insn (); insn; insn = PREV_INSN (insn))
8415 rtx note;
8417 /* We cannot do our optimization across labels. Invalidating all the use
8418 information we have would be costly, so we just note where the label
8419 is and then later disable any optimization that would cross it. */
8420 if (GET_CODE (insn) == CODE_LABEL)
8421 last_label_ruid = reload_combine_ruid;
8422 else if (GET_CODE (insn) == BARRIER)
8423 for (r = 0; r < FIRST_PSEUDO_REGISTER; r++)
8424 if (! fixed_regs[r])
8425 reg_state[r].use_index = RELOAD_COMBINE_MAX_USES;
8427 if (GET_RTX_CLASS (GET_CODE (insn)) != 'i')
8428 continue;
8430 reload_combine_ruid++;
8432 /* Look for (set (REGX) (CONST_INT))
8433 (set (REGX) (PLUS (REGX) (REGY)))
8435 ... (MEM (REGX)) ...
8436 and convert it to
8437 (set (REGZ) (CONST_INT))
8439 ... (MEM (PLUS (REGZ) (REGY)))... .
8441 First, check that we have (set (REGX) (PLUS (REGX) (REGY)))
8442 and that we know all uses of REGX before it dies. */
8443 set = single_set (insn);
8444 if (set != NULL_RTX
8445 && GET_CODE (SET_DEST (set)) == REG
8446 && (HARD_REGNO_NREGS (REGNO (SET_DEST (set)),
8447 GET_MODE (SET_DEST (set)))
8448 == 1)
8449 && GET_CODE (SET_SRC (set)) == PLUS
8450 && GET_CODE (XEXP (SET_SRC (set), 1)) == REG
8451 && rtx_equal_p (XEXP (SET_SRC (set), 0), SET_DEST (set))
8452 && last_label_ruid < reg_state[REGNO (SET_DEST (set))].use_ruid)
8454 rtx reg = SET_DEST (set);
8455 rtx plus = SET_SRC (set);
8456 rtx base = XEXP (plus, 1);
8457 rtx prev = prev_nonnote_insn (insn);
8458 rtx prev_set = prev ? single_set (prev) : NULL_RTX;
8459 unsigned int regno = REGNO (reg);
8460 rtx const_reg = NULL_RTX;
8461 rtx reg_sum = NULL_RTX;
8463 /* Now, we need an index register.
8464 We'll set index_reg to this index register, const_reg to the
8465 register that is to be loaded with the constant
8466 (denoted as REGZ in the substitution illustration above),
8467 and reg_sum to the register-register that we want to use to
8468 substitute uses of REG (typically in MEMs) with.
8469 First check REG and BASE for being index registers;
8470 we can use them even if they are not dead. */
8471 if (TEST_HARD_REG_BIT (reg_class_contents[INDEX_REG_CLASS], regno)
8472 || TEST_HARD_REG_BIT (reg_class_contents[INDEX_REG_CLASS],
8473 REGNO (base)))
8475 const_reg = reg;
8476 reg_sum = plus;
8478 else
8480 /* Otherwise, look for a free index register. Since we have
8481 checked above that neiter REG nor BASE are index registers,
8482 if we find anything at all, it will be different from these
8483 two registers. */
8484 for (i = first_index_reg; i <= last_index_reg; i++)
8486 if (TEST_HARD_REG_BIT (reg_class_contents[INDEX_REG_CLASS],
8488 && reg_state[i].use_index == RELOAD_COMBINE_MAX_USES
8489 && reg_state[i].store_ruid <= reg_state[regno].use_ruid
8490 && HARD_REGNO_NREGS (i, GET_MODE (reg)) == 1)
8492 rtx index_reg = gen_rtx_REG (GET_MODE (reg), i);
8494 const_reg = index_reg;
8495 reg_sum = gen_rtx_PLUS (GET_MODE (reg), index_reg, base);
8496 break;
8501 /* Check that PREV_SET is indeed (set (REGX) (CONST_INT)) and that
8502 (REGY), i.e. BASE, is not clobbered before the last use we'll
8503 create. */
8504 if (prev_set != 0
8505 && GET_CODE (SET_SRC (prev_set)) == CONST_INT
8506 && rtx_equal_p (SET_DEST (prev_set), reg)
8507 && reg_state[regno].use_index >= 0
8508 && (reg_state[REGNO (base)].store_ruid
8509 <= reg_state[regno].use_ruid)
8510 && reg_sum != 0)
8512 int i;
8514 /* Change destination register and, if necessary, the
8515 constant value in PREV, the constant loading instruction. */
8516 validate_change (prev, &SET_DEST (prev_set), const_reg, 1);
8517 if (reg_state[regno].offset != const0_rtx)
8518 validate_change (prev,
8519 &SET_SRC (prev_set),
8520 GEN_INT (INTVAL (SET_SRC (prev_set))
8521 + INTVAL (reg_state[regno].offset)),
8524 /* Now for every use of REG that we have recorded, replace REG
8525 with REG_SUM. */
8526 for (i = reg_state[regno].use_index;
8527 i < RELOAD_COMBINE_MAX_USES; i++)
8528 validate_change (reg_state[regno].reg_use[i].insn,
8529 reg_state[regno].reg_use[i].usep,
8530 reg_sum, 1);
8532 if (apply_change_group ())
8534 rtx *np;
8536 /* Delete the reg-reg addition. */
8537 PUT_CODE (insn, NOTE);
8538 NOTE_LINE_NUMBER (insn) = NOTE_INSN_DELETED;
8539 NOTE_SOURCE_FILE (insn) = 0;
8541 if (reg_state[regno].offset != const0_rtx)
8542 /* Previous REG_EQUIV / REG_EQUAL notes for PREV
8543 are now invalid. */
8544 for (np = &REG_NOTES (prev); *np; )
8546 if (REG_NOTE_KIND (*np) == REG_EQUAL
8547 || REG_NOTE_KIND (*np) == REG_EQUIV)
8548 *np = XEXP (*np, 1);
8549 else
8550 np = &XEXP (*np, 1);
8553 reg_state[regno].use_index = RELOAD_COMBINE_MAX_USES;
8554 reg_state[REGNO (const_reg)].store_ruid
8555 = reload_combine_ruid;
8556 continue;
8561 note_stores (PATTERN (insn), reload_combine_note_store, NULL);
8563 if (GET_CODE (insn) == CALL_INSN)
8565 rtx link;
8567 for (r = 0; r < FIRST_PSEUDO_REGISTER; r++)
8568 if (call_used_regs[r])
8570 reg_state[r].use_index = RELOAD_COMBINE_MAX_USES;
8571 reg_state[r].store_ruid = reload_combine_ruid;
8574 for (link = CALL_INSN_FUNCTION_USAGE (insn); link;
8575 link = XEXP (link, 1))
8576 if (GET_CODE (XEXP (XEXP (link, 0), 0)) == REG)
8578 unsigned int regno = REGNO (XEXP (XEXP (link, 0), 0));
8580 if (GET_CODE (XEXP (link, 0)) == CLOBBER)
8582 reg_state[regno].use_index = RELOAD_COMBINE_MAX_USES;
8583 reg_state[regno].store_ruid = reload_combine_ruid;
8585 else
8586 reg_state[regno].use_index = -1;
8590 else if (GET_CODE (insn) == JUMP_INSN
8591 && GET_CODE (PATTERN (insn)) != RETURN)
8593 /* Non-spill registers might be used at the call destination in
8594 some unknown fashion, so we have to mark the unknown use. */
8595 HARD_REG_SET *live;
8597 if ((condjump_p (insn) || condjump_in_parallel_p (insn))
8598 && JUMP_LABEL (insn))
8599 live = &LABEL_LIVE (JUMP_LABEL (insn));
8600 else
8601 live = &ever_live_at_start;
8603 for (i = FIRST_PSEUDO_REGISTER - 1; i >= 0; --i)
8604 if (TEST_HARD_REG_BIT (*live, i))
8605 reg_state[i].use_index = -1;
8608 reload_combine_note_use (&PATTERN (insn), insn);
8609 for (note = REG_NOTES (insn); note; note = XEXP (note, 1))
8611 if (REG_NOTE_KIND (note) == REG_INC
8612 && GET_CODE (XEXP (note, 0)) == REG)
8614 int regno = REGNO (XEXP (note, 0));
8616 reg_state[regno].store_ruid = reload_combine_ruid;
8617 reg_state[regno].use_index = -1;
8622 free (label_live);
8625 /* Check if DST is a register or a subreg of a register; if it is,
8626 update reg_state[regno].store_ruid and reg_state[regno].use_index
8627 accordingly. Called via note_stores from reload_combine. */
8629 static void
8630 reload_combine_note_store (dst, set, data)
8631 rtx dst, set;
8632 void *data ATTRIBUTE_UNUSED;
8634 int regno = 0;
8635 int i;
8636 enum machine_mode mode = GET_MODE (dst);
8638 if (GET_CODE (dst) == SUBREG)
8640 regno = SUBREG_WORD (dst);
8641 dst = SUBREG_REG (dst);
8643 if (GET_CODE (dst) != REG)
8644 return;
8645 regno += REGNO (dst);
8647 /* note_stores might have stripped a STRICT_LOW_PART, so we have to be
8648 careful with registers / register parts that are not full words.
8650 Similarly for ZERO_EXTRACT and SIGN_EXTRACT. */
8651 if (GET_CODE (set) != SET
8652 || GET_CODE (SET_DEST (set)) == ZERO_EXTRACT
8653 || GET_CODE (SET_DEST (set)) == SIGN_EXTRACT
8654 || GET_CODE (SET_DEST (set)) == STRICT_LOW_PART)
8656 for (i = HARD_REGNO_NREGS (regno, mode) - 1 + regno; i >= regno; i--)
8658 reg_state[i].use_index = -1;
8659 reg_state[i].store_ruid = reload_combine_ruid;
8662 else
8664 for (i = HARD_REGNO_NREGS (regno, mode) - 1 + regno; i >= regno; i--)
8666 reg_state[i].store_ruid = reload_combine_ruid;
8667 reg_state[i].use_index = RELOAD_COMBINE_MAX_USES;
8672 /* XP points to a piece of rtl that has to be checked for any uses of
8673 registers.
8674 *XP is the pattern of INSN, or a part of it.
8675 Called from reload_combine, and recursively by itself. */
8676 static void
8677 reload_combine_note_use (xp, insn)
8678 rtx *xp, insn;
8680 rtx x = *xp;
8681 enum rtx_code code = x->code;
8682 const char *fmt;
8683 int i, j;
8684 rtx offset = const0_rtx; /* For the REG case below. */
8686 switch (code)
8688 case SET:
8689 if (GET_CODE (SET_DEST (x)) == REG)
8691 reload_combine_note_use (&SET_SRC (x), insn);
8692 return;
8694 break;
8696 case USE:
8697 /* If this is the USE of a return value, we can't change it. */
8698 if (GET_CODE (XEXP (x, 0)) == REG && REG_FUNCTION_VALUE_P (XEXP (x, 0)))
8700 /* Mark the return register as used in an unknown fashion. */
8701 rtx reg = XEXP (x, 0);
8702 int regno = REGNO (reg);
8703 int nregs = HARD_REGNO_NREGS (regno, GET_MODE (reg));
8705 while (--nregs >= 0)
8706 reg_state[regno + nregs].use_index = -1;
8707 return;
8709 break;
8711 case CLOBBER:
8712 if (GET_CODE (SET_DEST (x)) == REG)
8713 return;
8714 break;
8716 case PLUS:
8717 /* We are interested in (plus (reg) (const_int)) . */
8718 if (GET_CODE (XEXP (x, 0)) != REG || GET_CODE (XEXP (x, 1)) != CONST_INT)
8719 break;
8720 offset = XEXP (x, 1);
8721 x = XEXP (x, 0);
8722 /* Fall through. */
8723 case REG:
8725 int regno = REGNO (x);
8726 int use_index;
8727 int nregs;
8729 /* Some spurious USEs of pseudo registers might remain.
8730 Just ignore them. */
8731 if (regno >= FIRST_PSEUDO_REGISTER)
8732 return;
8734 nregs = HARD_REGNO_NREGS (regno, GET_MODE (x));
8736 /* We can't substitute into multi-hard-reg uses. */
8737 if (nregs > 1)
8739 while (--nregs >= 0)
8740 reg_state[regno + nregs].use_index = -1;
8741 return;
8744 /* If this register is already used in some unknown fashion, we
8745 can't do anything.
8746 If we decrement the index from zero to -1, we can't store more
8747 uses, so this register becomes used in an unknown fashion. */
8748 use_index = --reg_state[regno].use_index;
8749 if (use_index < 0)
8750 return;
8752 if (use_index != RELOAD_COMBINE_MAX_USES - 1)
8754 /* We have found another use for a register that is already
8755 used later. Check if the offsets match; if not, mark the
8756 register as used in an unknown fashion. */
8757 if (! rtx_equal_p (offset, reg_state[regno].offset))
8759 reg_state[regno].use_index = -1;
8760 return;
8763 else
8765 /* This is the first use of this register we have seen since we
8766 marked it as dead. */
8767 reg_state[regno].offset = offset;
8768 reg_state[regno].use_ruid = reload_combine_ruid;
8770 reg_state[regno].reg_use[use_index].insn = insn;
8771 reg_state[regno].reg_use[use_index].usep = xp;
8772 return;
8775 default:
8776 break;
8779 /* Recursively process the components of X. */
8780 fmt = GET_RTX_FORMAT (code);
8781 for (i = GET_RTX_LENGTH (code) - 1; i >= 0; i--)
8783 if (fmt[i] == 'e')
8784 reload_combine_note_use (&XEXP (x, i), insn);
8785 else if (fmt[i] == 'E')
8787 for (j = XVECLEN (x, i) - 1; j >= 0; j--)
8788 reload_combine_note_use (&XVECEXP (x, i, j), insn);
8793 /* See if we can reduce the cost of a constant by replacing a move with
8794 an add. */
8795 /* We cannot do our optimization across labels. Invalidating all the
8796 information about register contents we have would be costly, so we
8797 use last_label_luid (local variable of reload_cse_move2add) to note
8798 where the label is and then later disable any optimization that would
8799 cross it.
8800 reg_offset[n] / reg_base_reg[n] / reg_mode[n] are only valid if
8801 reg_set_luid[n] is larger than last_label_luid[n] . */
8802 static int reg_set_luid[FIRST_PSEUDO_REGISTER];
8804 /* reg_offset[n] has to be CONST_INT for it and reg_base_reg[n] /
8805 reg_mode[n] to be valid.
8806 If reg_offset[n] is a CONST_INT and reg_base_reg[n] is negative, register n
8807 has been set to reg_offset[n] in mode reg_mode[n] .
8808 If reg_offset[n] is a CONST_INT and reg_base_reg[n] is non-negative,
8809 register n has been set to the sum of reg_offset[n] and register
8810 reg_base_reg[n], calculated in mode reg_mode[n] . */
8811 static rtx reg_offset[FIRST_PSEUDO_REGISTER];
8812 static int reg_base_reg[FIRST_PSEUDO_REGISTER];
8813 static enum machine_mode reg_mode[FIRST_PSEUDO_REGISTER];
8815 /* move2add_luid is linearily increased while scanning the instructions
8816 from first to last. It is used to set reg_set_luid in
8817 reload_cse_move2add and move2add_note_store. */
8818 static int move2add_luid;
8820 /* Generate a CONST_INT and force it in the range of MODE. */
8822 static rtx
8823 gen_mode_int (mode, value)
8824 enum machine_mode mode;
8825 HOST_WIDE_INT value;
8827 HOST_WIDE_INT cval = value & GET_MODE_MASK (mode);
8828 int width = GET_MODE_BITSIZE (mode);
8830 /* If MODE is narrower than HOST_WIDE_INT and CVAL is a negative number,
8831 sign extend it. */
8832 if (width > 0 && width < HOST_BITS_PER_WIDE_INT
8833 && (cval & ((HOST_WIDE_INT) 1 << (width - 1))) != 0)
8834 cval |= (HOST_WIDE_INT) -1 << width;
8836 return GEN_INT (cval);
8839 static void
8840 reload_cse_move2add (first)
8841 rtx first;
8843 int i;
8844 rtx insn;
8845 int last_label_luid;
8847 for (i = FIRST_PSEUDO_REGISTER-1; i >= 0; i--)
8848 reg_set_luid[i] = 0;
8850 last_label_luid = 0;
8851 move2add_luid = 1;
8852 for (insn = first; insn; insn = NEXT_INSN (insn), move2add_luid++)
8854 rtx pat, note;
8856 if (GET_CODE (insn) == CODE_LABEL)
8857 last_label_luid = move2add_luid;
8858 if (GET_RTX_CLASS (GET_CODE (insn)) != 'i')
8859 continue;
8860 pat = PATTERN (insn);
8861 /* For simplicity, we only perform this optimization on
8862 straightforward SETs. */
8863 if (GET_CODE (pat) == SET
8864 && GET_CODE (SET_DEST (pat)) == REG)
8866 rtx reg = SET_DEST (pat);
8867 int regno = REGNO (reg);
8868 rtx src = SET_SRC (pat);
8870 /* Check if we have valid information on the contents of this
8871 register in the mode of REG. */
8872 /* ??? We don't know how zero / sign extension is handled, hence
8873 we can't go from a narrower to a wider mode. */
8874 if (reg_set_luid[regno] > last_label_luid
8875 && ((GET_MODE_SIZE (GET_MODE (reg))
8876 == GET_MODE_SIZE (reg_mode[regno]))
8877 || ((GET_MODE_SIZE (GET_MODE (reg))
8878 <= GET_MODE_SIZE (reg_mode[regno]))
8879 && TRULY_NOOP_TRUNCATION (GET_MODE_BITSIZE (GET_MODE (reg)),
8880 GET_MODE_BITSIZE (reg_mode[regno]))))
8881 && GET_CODE (reg_offset[regno]) == CONST_INT)
8883 /* Try to transform (set (REGX) (CONST_INT A))
8885 (set (REGX) (CONST_INT B))
8887 (set (REGX) (CONST_INT A))
8889 (set (REGX) (plus (REGX) (CONST_INT B-A))) */
8891 if (GET_CODE (src) == CONST_INT && reg_base_reg[regno] < 0)
8893 int success = 0;
8894 rtx new_src
8895 = gen_mode_int (GET_MODE (reg),
8896 INTVAL (src) - INTVAL (reg_offset[regno]));
8897 /* (set (reg) (plus (reg) (const_int 0))) is not canonical;
8898 use (set (reg) (reg)) instead.
8899 We don't delete this insn, nor do we convert it into a
8900 note, to avoid losing register notes or the return
8901 value flag. jump2 already knowns how to get rid of
8902 no-op moves. */
8903 if (new_src == const0_rtx)
8904 success = validate_change (insn, &SET_SRC (pat), reg, 0);
8905 else if (rtx_cost (new_src, PLUS) < rtx_cost (src, SET)
8906 && have_add2_insn (GET_MODE (reg)))
8907 success = validate_change (insn, &PATTERN (insn),
8908 gen_add2_insn (reg, new_src), 0);
8909 reg_set_luid[regno] = move2add_luid;
8910 reg_mode[regno] = GET_MODE (reg);
8911 reg_offset[regno] = src;
8912 continue;
8915 /* Try to transform (set (REGX) (REGY))
8916 (set (REGX) (PLUS (REGX) (CONST_INT A)))
8918 (set (REGX) (REGY))
8919 (set (REGX) (PLUS (REGX) (CONST_INT B)))
8921 (REGX) (REGY))
8922 (set (REGX) (PLUS (REGX) (CONST_INT A)))
8924 (set (REGX) (plus (REGX) (CONST_INT B-A))) */
8925 else if (GET_CODE (src) == REG
8926 && reg_base_reg[regno] == (int) REGNO (src)
8927 && reg_set_luid[regno] > reg_set_luid[REGNO (src)])
8929 rtx next = next_nonnote_insn (insn);
8930 rtx set = NULL_RTX;
8931 if (next)
8932 set = single_set (next);
8933 if (next
8934 && set
8935 && SET_DEST (set) == reg
8936 && GET_CODE (SET_SRC (set)) == PLUS
8937 && XEXP (SET_SRC (set), 0) == reg
8938 && GET_CODE (XEXP (SET_SRC (set), 1)) == CONST_INT)
8940 rtx src3 = XEXP (SET_SRC (set), 1);
8941 rtx new_src
8942 = gen_mode_int (GET_MODE (reg),
8943 INTVAL (src3)
8944 - INTVAL (reg_offset[regno]));
8945 int success = 0;
8947 if (new_src == const0_rtx)
8948 /* See above why we create (set (reg) (reg)) here. */
8949 success
8950 = validate_change (next, &SET_SRC (set), reg, 0);
8951 else if ((rtx_cost (new_src, PLUS)
8952 < 2 + rtx_cost (src3, SET))
8953 && have_add2_insn (GET_MODE (reg)))
8954 success
8955 = validate_change (next, &PATTERN (next),
8956 gen_add2_insn (reg, new_src), 0);
8957 if (success)
8959 /* INSN might be the first insn in a basic block
8960 if the preceding insn is a conditional jump
8961 or a possible-throwing call. */
8962 PUT_CODE (insn, NOTE);
8963 NOTE_LINE_NUMBER (insn) = NOTE_INSN_DELETED;
8964 NOTE_SOURCE_FILE (insn) = 0;
8966 insn = next;
8967 reg_set_luid[regno] = move2add_luid;
8968 reg_mode[regno] = GET_MODE (reg);
8969 reg_offset[regno] = src3;
8970 continue;
8976 for (note = REG_NOTES (insn); note; note = XEXP (note, 1))
8978 if (REG_NOTE_KIND (note) == REG_INC
8979 && GET_CODE (XEXP (note, 0)) == REG)
8981 /* Indicate that this register has been recently written to,
8982 but the exact contents are not available. */
8983 int regno = REGNO (XEXP (note, 0));
8984 if (regno < FIRST_PSEUDO_REGISTER)
8986 reg_set_luid[regno] = move2add_luid;
8987 reg_offset[regno] = note;
8991 note_stores (PATTERN (insn), move2add_note_store, NULL);
8992 /* If this is a CALL_INSN, all call used registers are stored with
8993 unknown values. */
8994 if (GET_CODE (insn) == CALL_INSN)
8996 for (i = FIRST_PSEUDO_REGISTER-1; i >= 0; i--)
8998 if (call_used_regs[i])
9000 reg_set_luid[i] = move2add_luid;
9001 reg_offset[i] = insn; /* Invalidate contents. */
9008 /* SET is a SET or CLOBBER that sets DST.
9009 Update reg_set_luid, reg_offset and reg_base_reg accordingly.
9010 Called from reload_cse_move2add via note_stores. */
9012 static void
9013 move2add_note_store (dst, set, data)
9014 rtx dst, set;
9015 void *data ATTRIBUTE_UNUSED;
9017 unsigned int regno = 0;
9018 unsigned int i;
9019 enum machine_mode mode = GET_MODE (dst);
9021 if (GET_CODE (dst) == SUBREG)
9023 regno = SUBREG_WORD (dst);
9024 dst = SUBREG_REG (dst);
9027 if (GET_CODE (dst) != REG)
9028 return;
9030 regno += REGNO (dst);
9032 if (HARD_REGNO_NREGS (regno, mode) == 1 && GET_CODE (set) == SET
9033 && GET_CODE (SET_DEST (set)) != ZERO_EXTRACT
9034 && GET_CODE (SET_DEST (set)) != SIGN_EXTRACT
9035 && GET_CODE (SET_DEST (set)) != STRICT_LOW_PART)
9037 rtx src = SET_SRC (set);
9039 reg_mode[regno] = mode;
9040 switch (GET_CODE (src))
9042 case PLUS:
9044 rtx src0 = XEXP (src, 0);
9046 if (GET_CODE (src0) == REG)
9048 if (REGNO (src0) != regno
9049 || reg_offset[regno] != const0_rtx)
9051 reg_base_reg[regno] = REGNO (src0);
9052 reg_set_luid[regno] = move2add_luid;
9055 reg_offset[regno] = XEXP (src, 1);
9056 break;
9059 reg_set_luid[regno] = move2add_luid;
9060 reg_offset[regno] = set; /* Invalidate contents. */
9061 break;
9064 case REG:
9065 reg_base_reg[regno] = REGNO (SET_SRC (set));
9066 reg_offset[regno] = const0_rtx;
9067 reg_set_luid[regno] = move2add_luid;
9068 break;
9070 default:
9071 reg_base_reg[regno] = -1;
9072 reg_offset[regno] = SET_SRC (set);
9073 reg_set_luid[regno] = move2add_luid;
9074 break;
9077 else
9079 unsigned int endregno = regno + HARD_REGNO_NREGS (regno, mode);
9081 for (i = regno; i < endregno; i++)
9083 /* Indicate that this register has been recently written to,
9084 but the exact contents are not available. */
9085 reg_set_luid[i] = move2add_luid;
9086 reg_offset[i] = dst;
9091 #ifdef AUTO_INC_DEC
9092 static void
9093 add_auto_inc_notes (insn, x)
9094 rtx insn;
9095 rtx x;
9097 enum rtx_code code = GET_CODE (x);
9098 const char *fmt;
9099 int i, j;
9101 if (code == MEM && auto_inc_p (XEXP (x, 0)))
9103 REG_NOTES (insn)
9104 = gen_rtx_EXPR_LIST (REG_INC, XEXP (XEXP (x, 0), 0), REG_NOTES (insn));
9105 return;
9108 /* Scan all the operand sub-expressions. */
9109 fmt = GET_RTX_FORMAT (code);
9110 for (i = GET_RTX_LENGTH (code) - 1; i >= 0; i--)
9112 if (fmt[i] == 'e')
9113 add_auto_inc_notes (insn, XEXP (x, i));
9114 else if (fmt[i] == 'E')
9115 for (j = XVECLEN (x, i) - 1; j >= 0; j--)
9116 add_auto_inc_notes (insn, XVECEXP (x, i, j));
9119 #endif