|
|
1.1 root 1: /* Reload pseudo regs into hard regs for insns that require hard regs.
2: Copyright (C) 1987, 1988, 1989, 1992 Free Software Foundation, Inc.
3:
4: This file is part of GNU CC.
5:
6: GNU CC is free software; you can redistribute it and/or modify
7: it under the terms of the GNU General Public License as published by
8: the Free Software Foundation; either version 2, or (at your option)
9: any later version.
10:
11: GNU CC is distributed in the hope that it will be useful,
12: but WITHOUT ANY WARRANTY; without even the implied warranty of
13: MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14: GNU General Public License for more details.
15:
16: You should have received a copy of the GNU General Public License
17: along with GNU CC; see the file COPYING. If not, write to
18: the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. */
19:
20:
21: #include "config.h"
22: #include "rtl.h"
23: #include "obstack.h"
24: #include "insn-config.h"
25: #include "insn-flags.h"
26: #include "insn-codes.h"
27: #include "flags.h"
28: #include "expr.h"
29: #include "regs.h"
30: #include "hard-reg-set.h"
31: #include "reload.h"
32: #include "recog.h"
33: #include "basic-block.h"
34: #include "output.h"
35: #include <stdio.h>
36:
37: /* This file contains the reload pass of the compiler, which is
38: run after register allocation has been done. It checks that
39: each insn is valid (operands required to be in registers really
40: are in registers of the proper class) and fixes up invalid ones
41: by copying values temporarily into registers for the insns
42: that need them.
43:
44: The results of register allocation are described by the vector
45: reg_renumber; the insns still contain pseudo regs, but reg_renumber
46: can be used to find which hard reg, if any, a pseudo reg is in.
47:
48: The technique we always use is to free up a few hard regs that are
49: called ``reload regs'', and for each place where a pseudo reg
50: must be in a hard reg, copy it temporarily into one of the reload regs.
51:
52: All the pseudos that were formerly allocated to the hard regs that
53: are now in use as reload regs must be ``spilled''. This means
54: that they go to other hard regs, or to stack slots if no other
55: available hard regs can be found. Spilling can invalidate more
56: insns, requiring additional need for reloads, so we must keep checking
57: until the process stabilizes.
58:
59: For machines with different classes of registers, we must keep track
60: of the register class needed for each reload, and make sure that
61: we allocate enough reload registers of each class.
62:
63: The file reload.c contains the code that checks one insn for
64: validity and reports the reloads that it needs. This file
65: is in charge of scanning the entire rtl code, accumulating the
66: reload needs, spilling, assigning reload registers to use for
67: fixing up each insn, and generating the new insns to copy values
68: into the reload registers. */
69:
70: /* During reload_as_needed, element N contains a REG rtx for the hard reg
71: into which pseudo reg N has been reloaded (perhaps for a previous insn). */
72: static rtx *reg_last_reload_reg;
73:
74: /* Elt N nonzero if reg_last_reload_reg[N] has been set in this insn
75: for an output reload that stores into reg N. */
76: static char *reg_has_output_reload;
77:
78: /* Indicates which hard regs are reload-registers for an output reload
79: in the current insn. */
80: static HARD_REG_SET reg_is_output_reload;
81:
82: /* Element N is the constant value to which pseudo reg N is equivalent,
83: or zero if pseudo reg N is not equivalent to a constant.
84: find_reloads looks at this in order to replace pseudo reg N
85: with the constant it stands for. */
86: rtx *reg_equiv_constant;
87:
88: /* Element N is a memory location to which pseudo reg N is equivalent,
89: prior to any register elimination (such as frame pointer to stack
90: pointer). Depending on whether or not it is a valid address, this value
91: is transferred to either reg_equiv_address or reg_equiv_mem. */
92: static rtx *reg_equiv_memory_loc;
93:
94: /* Element N is the address of stack slot to which pseudo reg N is equivalent.
95: This is used when the address is not valid as a memory address
96: (because its displacement is too big for the machine.) */
97: rtx *reg_equiv_address;
98:
99: /* Element N is the memory slot to which pseudo reg N is equivalent,
100: or zero if pseudo reg N is not equivalent to a memory slot. */
101: rtx *reg_equiv_mem;
102:
103: /* Widest width in which each pseudo reg is referred to (via subreg). */
104: static int *reg_max_ref_width;
105:
106: /* Element N is the insn that initialized reg N from its equivalent
107: constant or memory slot. */
108: static rtx *reg_equiv_init;
109:
110: /* During reload_as_needed, element N contains the last pseudo regno
111: reloaded into the Nth reload register. This vector is in parallel
112: with spill_regs. If that pseudo reg occupied more than one register,
113: reg_reloaded_contents points to that pseudo for each spill register in
114: use; all of these must remain set for an inheritance to occur. */
115: static int reg_reloaded_contents[FIRST_PSEUDO_REGISTER];
116:
117: /* During reload_as_needed, element N contains the insn for which
118: the Nth reload register was last used. This vector is in parallel
119: with spill_regs, and its contents are significant only when
120: reg_reloaded_contents is significant. */
121: static rtx reg_reloaded_insn[FIRST_PSEUDO_REGISTER];
122:
123: /* Number of spill-regs so far; number of valid elements of spill_regs. */
124: static int n_spills;
125:
126: /* In parallel with spill_regs, contains REG rtx's for those regs.
127: Holds the last rtx used for any given reg, or 0 if it has never
128: been used for spilling yet. This rtx is reused, provided it has
129: the proper mode. */
130: static rtx spill_reg_rtx[FIRST_PSEUDO_REGISTER];
131:
132: /* In parallel with spill_regs, contains nonzero for a spill reg
133: that was stored after the last time it was used.
134: The precise value is the insn generated to do the store. */
135: static rtx spill_reg_store[FIRST_PSEUDO_REGISTER];
136:
137: /* This table is the inverse mapping of spill_regs:
138: indexed by hard reg number,
139: it contains the position of that reg in spill_regs,
140: or -1 for something that is not in spill_regs. */
141: static short spill_reg_order[FIRST_PSEUDO_REGISTER];
142:
143: /* This reg set indicates registers that may not be used for retrying global
144: allocation. The registers that may not be used include all spill registers
145: and the frame pointer (if we are using one). */
146: HARD_REG_SET forbidden_regs;
147:
148: /* This reg set indicates registers that are not good for spill registers.
149: They will not be used to complete groups of spill registers. This includes
150: all fixed registers, registers that may be eliminated, and registers
151: explicitly used in the rtl.
152:
153: (spill_reg_order prevents these registers from being used to start a
154: group.) */
155: static HARD_REG_SET bad_spill_regs;
156:
157: /* Describes order of use of registers for reloading
158: of spilled pseudo-registers. `spills' is the number of
159: elements that are actually valid; new ones are added at the end. */
160: static short spill_regs[FIRST_PSEUDO_REGISTER];
161:
162: /* Describes order of preference for putting regs into spill_regs.
163: Contains the numbers of all the hard regs, in order most preferred first.
164: This order is different for each function.
165: It is set up by order_regs_for_reload.
166: Empty elements at the end contain -1. */
167: static short potential_reload_regs[FIRST_PSEUDO_REGISTER];
168:
169: /* 1 for a hard register that appears explicitly in the rtl
170: (for example, function value registers, special registers
171: used by insns, structure value pointer registers). */
172: static char regs_explicitly_used[FIRST_PSEUDO_REGISTER];
173:
174: /* Indicates if a register was counted against the need for
175: groups. 0 means it can count against max_nongroup instead. */
176: static HARD_REG_SET counted_for_groups;
177:
178: /* Indicates if a register was counted against the need for
179: non-groups. 0 means it can become part of a new group.
180: During choose_reload_regs, 1 here means don't use this reg
181: as part of a group, even if it seems to be otherwise ok. */
182: static HARD_REG_SET counted_for_nongroups;
183:
184: /* Nonzero if indirect addressing is supported on the machine; this means
185: that spilling (REG n) does not require reloading it into a register in
186: order to do (MEM (REG n)) or (MEM (PLUS (REG n) (CONST_INT c))). The
187: value indicates the level of indirect addressing supported, e.g., two
188: means that (MEM (MEM (REG n))) is also valid if (REG n) does not get
189: a hard register. */
190:
191: static char spill_indirect_levels;
192:
193: /* Nonzero if indirect addressing is supported when the innermost MEM is
194: of the form (MEM (SYMBOL_REF sym)). It is assumed that the level to
195: which these are valid is the same as spill_indirect_levels, above. */
196:
197: char indirect_symref_ok;
198:
199: /* Nonzero if an address (plus (reg frame_pointer) (reg ...)) is valid. */
200:
201: char double_reg_address_ok;
202:
203: /* Record the stack slot for each spilled hard register. */
204:
205: static rtx spill_stack_slot[FIRST_PSEUDO_REGISTER];
206:
207: /* Width allocated so far for that stack slot. */
208:
209: static int spill_stack_slot_width[FIRST_PSEUDO_REGISTER];
210:
211: /* Indexed by register class and basic block number, nonzero if there is
212: any need for a spill register of that class in that basic block.
213: The pointer is 0 if we did stupid allocation and don't know
214: the structure of basic blocks. */
215:
216: char *basic_block_needs[N_REG_CLASSES];
217:
218: /* First uid used by insns created by reload in this function.
219: Used in find_equiv_reg. */
220: int reload_first_uid;
221:
222: /* Flag set by local-alloc or global-alloc if anything is live in
223: a call-clobbered reg across calls. */
224:
225: int caller_save_needed;
226:
227: /* Set to 1 while reload_as_needed is operating.
228: Required by some machines to handle any generated moves differently. */
229:
230: int reload_in_progress = 0;
231:
232: /* These arrays record the insn_code of insns that may be needed to
233: perform input and output reloads of special objects. They provide a
234: place to pass a scratch register. */
235:
236: enum insn_code reload_in_optab[NUM_MACHINE_MODES];
237: enum insn_code reload_out_optab[NUM_MACHINE_MODES];
238:
1.1.1.2 ! root 239: /* This obstack is used for allocation of rtl during register elimination.
1.1 root 240: The allocated storage can be freed once find_reloads has processed the
241: insn. */
242:
243: struct obstack reload_obstack;
244: char *reload_firstobj;
245:
246: #define obstack_chunk_alloc xmalloc
247: #define obstack_chunk_free free
248:
249: extern int xmalloc ();
250: extern void free ();
251:
252: /* List of labels that must never be deleted. */
253: extern rtx forced_labels;
254:
255: /* This structure is used to record information about register eliminations.
256: Each array entry describes one possible way of eliminating a register
257: in favor of another. If there is more than one way of eliminating a
258: particular register, the most preferred should be specified first. */
259:
260: static struct elim_table
261: {
262: int from; /* Register number to be eliminated. */
263: int to; /* Register number used as replacement. */
264: int initial_offset; /* Initial difference between values. */
265: int can_eliminate; /* Non-zero if this elimination can be done. */
266: int can_eliminate_previous; /* Value of CAN_ELIMINATE in previous scan over
267: insns made by reload. */
268: int offset; /* Current offset between the two regs. */
269: int max_offset; /* Maximum offset between the two regs. */
270: int previous_offset; /* Offset at end of previous insn. */
271: int ref_outside_mem; /* "to" has been referenced outside a MEM. */
272: rtx from_rtx; /* REG rtx for the register to be eliminated.
273: We cannot simply compare the number since
274: we might then spuriously replace a hard
275: register corresponding to a pseudo
276: assigned to the reg to be eliminated. */
277: rtx to_rtx; /* REG rtx for the replacement. */
278: } reg_eliminate[] =
279:
280: /* If a set of eliminable registers was specified, define the table from it.
281: Otherwise, default to the normal case of the frame pointer being
282: replaced by the stack pointer. */
283:
284: #ifdef ELIMINABLE_REGS
285: ELIMINABLE_REGS;
286: #else
287: {{ FRAME_POINTER_REGNUM, STACK_POINTER_REGNUM}};
288: #endif
289:
290: #define NUM_ELIMINABLE_REGS (sizeof reg_eliminate / sizeof reg_eliminate[0])
291:
292: /* Record the number of pending eliminations that have an offset not equal
293: to their initial offset. If non-zero, we use a new copy of each
294: replacement result in any insns encountered. */
295: static int num_not_at_initial_offset;
296:
297: /* Count the number of registers that we may be able to eliminate. */
298: static int num_eliminable;
299:
300: /* For each label, we record the offset of each elimination. If we reach
301: a label by more than one path and an offset differs, we cannot do the
302: elimination. This information is indexed by the number of the label.
303: The first table is an array of flags that records whether we have yet
304: encountered a label and the second table is an array of arrays, one
305: entry in the latter array for each elimination. */
306:
307: static char *offsets_known_at;
308: static int (*offsets_at)[NUM_ELIMINABLE_REGS];
309:
310: /* Number of labels in the current function. */
311:
312: static int num_labels;
313:
314: void mark_home_live ();
315: static void count_possible_groups ();
316: static int possible_group_p ();
317: static void scan_paradoxical_subregs ();
318: static void reload_as_needed ();
319: static int modes_equiv_for_class_p ();
320: static void alter_reg ();
321: static void delete_dead_insn ();
322: static int new_spill_reg();
323: static void set_label_offsets ();
324: static int eliminate_regs_in_insn ();
325: static void mark_not_eliminable ();
326: static int spill_hard_reg ();
327: static void choose_reload_regs ();
328: static void emit_reload_insns ();
329: static void delete_output_reload ();
330: static void forget_old_reloads_1 ();
331: static void order_regs_for_reload ();
332: static rtx inc_for_reload ();
333: static int constraint_accepts_reg_p ();
334: static int count_occurrences ();
335:
336: extern void remove_death ();
337: extern rtx adj_offsettable_operand ();
338: extern rtx form_sum ();
339:
340: void
341: init_reload ()
342: {
343: register int i;
344:
345: /* Often (MEM (REG n)) is still valid even if (REG n) is put on the stack.
346: Set spill_indirect_levels to the number of levels such addressing is
347: permitted, zero if it is not permitted at all. */
348:
349: register rtx tem
350: = gen_rtx (MEM, Pmode,
351: gen_rtx (PLUS, Pmode,
352: gen_rtx (REG, Pmode, LAST_VIRTUAL_REGISTER + 1),
353: gen_rtx (CONST_INT, VOIDmode, 4)));
354: spill_indirect_levels = 0;
355:
356: while (memory_address_p (QImode, tem))
357: {
358: spill_indirect_levels++;
359: tem = gen_rtx (MEM, Pmode, tem);
360: }
361:
362: /* See if indirect addressing is valid for (MEM (SYMBOL_REF ...)). */
363:
364: tem = gen_rtx (MEM, Pmode, gen_rtx (SYMBOL_REF, Pmode, "foo"));
365: indirect_symref_ok = memory_address_p (QImode, tem);
366:
367: /* See if reg+reg is a valid (and offsettable) address. */
368:
369: tem = gen_rtx (PLUS, Pmode,
370: gen_rtx (REG, Pmode, FRAME_POINTER_REGNUM),
371: gen_rtx (REG, Pmode, FRAME_POINTER_REGNUM));
372: /* This way, we make sure that reg+reg is an offsettable address. */
373: tem = plus_constant (tem, 4);
374:
375: double_reg_address_ok = memory_address_p (QImode, tem);
376:
377: /* Initialize obstack for our rtl allocation. */
378: gcc_obstack_init (&reload_obstack);
379: reload_firstobj = (char *) obstack_alloc (&reload_obstack, 0);
380:
381: #ifdef HAVE_SECONDARY_RELOADS
382:
383: /* Initialize the optabs for doing special input and output reloads. */
384:
385: for (i = 0; i < NUM_MACHINE_MODES; i++)
386: reload_in_optab[i] = reload_out_optab[i] = CODE_FOR_nothing;
387:
388: #ifdef HAVE_reload_inqi
389: if (HAVE_reload_inqi)
390: reload_in_optab[(int) QImode] = CODE_FOR_reload_inqi;
391: #endif
392: #ifdef HAVE_reload_inhi
393: if (HAVE_reload_inhi)
394: reload_in_optab[(int) HImode] = CODE_FOR_reload_inhi;
395: #endif
396: #ifdef HAVE_reload_insi
397: if (HAVE_reload_insi)
398: reload_in_optab[(int) SImode] = CODE_FOR_reload_insi;
399: #endif
400: #ifdef HAVE_reload_indi
401: if (HAVE_reload_indi)
402: reload_in_optab[(int) DImode] = CODE_FOR_reload_indi;
403: #endif
404: #ifdef HAVE_reload_inti
405: if (HAVE_reload_inti)
406: reload_in_optab[(int) TImode] = CODE_FOR_reload_inti;
407: #endif
408: #ifdef HAVE_reload_insf
409: if (HAVE_reload_insf)
410: reload_in_optab[(int) SFmode] = CODE_FOR_reload_insf;
411: #endif
412: #ifdef HAVE_reload_indf
413: if (HAVE_reload_indf)
414: reload_in_optab[(int) DFmode] = CODE_FOR_reload_indf;
415: #endif
416: #ifdef HAVE_reload_inxf
417: if (HAVE_reload_inxf)
418: reload_in_optab[(int) XFmode] = CODE_FOR_reload_inxf;
419: #endif
420: #ifdef HAVE_reload_intf
421: if (HAVE_reload_intf)
422: reload_in_optab[(int) TFmode] = CODE_FOR_reload_intf;
423: #endif
424:
425: #ifdef HAVE_reload_outqi
426: if (HAVE_reload_outqi)
427: reload_out_optab[(int) QImode] = CODE_FOR_reload_outqi;
428: #endif
429: #ifdef HAVE_reload_outhi
430: if (HAVE_reload_outhi)
431: reload_out_optab[(int) HImode] = CODE_FOR_reload_outhi;
432: #endif
433: #ifdef HAVE_reload_outsi
434: if (HAVE_reload_outsi)
435: reload_out_optab[(int) SImode] = CODE_FOR_reload_outsi;
436: #endif
437: #ifdef HAVE_reload_outdi
438: if (HAVE_reload_outdi)
439: reload_out_optab[(int) DImode] = CODE_FOR_reload_outdi;
440: #endif
441: #ifdef HAVE_reload_outti
442: if (HAVE_reload_outti)
443: reload_out_optab[(int) TImode] = CODE_FOR_reload_outti;
444: #endif
445: #ifdef HAVE_reload_outsf
446: if (HAVE_reload_outsf)
447: reload_out_optab[(int) SFmode] = CODE_FOR_reload_outsf;
448: #endif
449: #ifdef HAVE_reload_outdf
450: if (HAVE_reload_outdf)
451: reload_out_optab[(int) DFmode] = CODE_FOR_reload_outdf;
452: #endif
453: #ifdef HAVE_reload_outxf
454: if (HAVE_reload_outxf)
455: reload_out_optab[(int) XFmode] = CODE_FOR_reload_outxf;
456: #endif
457: #ifdef HAVE_reload_outtf
458: if (HAVE_reload_outtf)
459: reload_out_optab[(int) TFmode] = CODE_FOR_reload_outtf;
460: #endif
461:
462: #endif /* HAVE_SECONDARY_RELOADS */
463:
464: }
465:
466: /* Main entry point for the reload pass, and only entry point
467: in this file.
468:
469: FIRST is the first insn of the function being compiled.
470:
471: GLOBAL nonzero means we were called from global_alloc
472: and should attempt to reallocate any pseudoregs that we
473: displace from hard regs we will use for reloads.
474: If GLOBAL is zero, we do not have enough information to do that,
475: so any pseudo reg that is spilled must go to the stack.
476:
477: DUMPFILE is the global-reg debugging dump file stream, or 0.
478: If it is nonzero, messages are written to it to describe
479: which registers are seized as reload regs, which pseudo regs
480: are spilled from them, and where the pseudo regs are reallocated to. */
481:
482: void
483: reload (first, global, dumpfile)
484: rtx first;
485: int global;
486: FILE *dumpfile;
487: {
488: register int class;
489: register int i;
490: register rtx insn;
491: register struct elim_table *ep;
492:
493: int something_changed;
494: int something_needs_reloads;
495: int something_needs_elimination;
496: int new_basic_block_needs;
497: enum reg_class caller_save_spill_class = NO_REGS;
498: int caller_save_group_size = 1;
499:
500: /* The basic block number currently being processed for INSN. */
501: int this_block;
502:
503: /* Make sure even insns with volatile mem refs are recognizable. */
504: init_recog ();
505:
506: /* Enable find_equiv_reg to distinguish insns made by reload. */
507: reload_first_uid = get_max_uid ();
508:
509: for (i = 0; i < N_REG_CLASSES; i++)
510: basic_block_needs[i] = 0;
511:
512: /* Remember which hard regs appear explicitly
513: before we merge into `regs_ever_live' the ones in which
514: pseudo regs have been allocated. */
515: bcopy (regs_ever_live, regs_explicitly_used, sizeof regs_ever_live);
516:
517: /* We don't have a stack slot for any spill reg yet. */
518: bzero (spill_stack_slot, sizeof spill_stack_slot);
519: bzero (spill_stack_slot_width, sizeof spill_stack_slot_width);
520:
521: /* Initialize the save area information for caller-save, in case some
522: are needed. */
523: init_save_areas ();
524:
525: /* Compute which hard registers are now in use
526: as homes for pseudo registers.
527: This is done here rather than (eg) in global_alloc
528: because this point is reached even if not optimizing. */
529:
530: for (i = FIRST_PSEUDO_REGISTER; i < max_regno; i++)
531: mark_home_live (i);
532:
533: /* Make sure that the last insn in the chain
534: is not something that needs reloading. */
535: emit_note (0, NOTE_INSN_DELETED);
536:
537: /* Find all the pseudo registers that didn't get hard regs
538: but do have known equivalent constants or memory slots.
539: These include parameters (known equivalent to parameter slots)
540: and cse'd or loop-moved constant memory addresses.
541:
542: Record constant equivalents in reg_equiv_constant
543: so they will be substituted by find_reloads.
544: Record memory equivalents in reg_mem_equiv so they can
545: be substituted eventually by altering the REG-rtx's. */
546:
547: reg_equiv_constant = (rtx *) alloca (max_regno * sizeof (rtx));
548: bzero (reg_equiv_constant, max_regno * sizeof (rtx));
549: reg_equiv_memory_loc = (rtx *) alloca (max_regno * sizeof (rtx));
550: bzero (reg_equiv_memory_loc, max_regno * sizeof (rtx));
551: reg_equiv_mem = (rtx *) alloca (max_regno * sizeof (rtx));
552: bzero (reg_equiv_mem, max_regno * sizeof (rtx));
553: reg_equiv_init = (rtx *) alloca (max_regno * sizeof (rtx));
554: bzero (reg_equiv_init, max_regno * sizeof (rtx));
555: reg_equiv_address = (rtx *) alloca (max_regno * sizeof (rtx));
556: bzero (reg_equiv_address, max_regno * sizeof (rtx));
557: reg_max_ref_width = (int *) alloca (max_regno * sizeof (int));
558: bzero (reg_max_ref_width, max_regno * sizeof (int));
559:
560: /* Look for REG_EQUIV notes; record what each pseudo is equivalent to.
561: Also find all paradoxical subregs
562: and find largest such for each pseudo. */
563:
564: for (insn = first; insn; insn = NEXT_INSN (insn))
565: {
566: rtx set = single_set (insn);
567:
568: if (set != 0 && GET_CODE (SET_DEST (set)) == REG)
569: {
570: rtx note = find_reg_note (insn, REG_EQUIV, 0);
571: if (note
572: #ifdef LEGITIMATE_PIC_OPERAND_P
573: && (! CONSTANT_P (XEXP (note, 0)) || ! flag_pic
574: || LEGITIMATE_PIC_OPERAND_P (XEXP (note, 0)))
575: #endif
576: )
577: {
578: rtx x = XEXP (note, 0);
579: i = REGNO (SET_DEST (set));
580: if (i > LAST_VIRTUAL_REGISTER)
581: {
582: if (GET_CODE (x) == MEM)
583: reg_equiv_memory_loc[i] = x;
584: else if (CONSTANT_P (x))
585: {
586: if (LEGITIMATE_CONSTANT_P (x))
587: reg_equiv_constant[i] = x;
588: else
589: reg_equiv_memory_loc[i]
590: = force_const_mem (GET_MODE (SET_DEST (set)), x);
591: }
592: else
593: continue;
594:
595: /* If this register is being made equivalent to a MEM
596: and the MEM is not SET_SRC, the equivalencing insn
597: is one with the MEM as a SET_DEST and it occurs later.
598: So don't mark this insn now. */
599: if (GET_CODE (x) != MEM
600: || rtx_equal_p (SET_SRC (set), x))
601: reg_equiv_init[i] = insn;
602: }
603: }
604: }
605:
606: /* If this insn is setting a MEM from a register equivalent to it,
607: this is the equivalencing insn. */
608: else if (set && GET_CODE (SET_DEST (set)) == MEM
609: && GET_CODE (SET_SRC (set)) == REG
610: && reg_equiv_memory_loc[REGNO (SET_SRC (set))]
611: && rtx_equal_p (SET_DEST (set),
612: reg_equiv_memory_loc[REGNO (SET_SRC (set))]))
613: reg_equiv_init[REGNO (SET_SRC (set))] = insn;
614:
615: if (GET_RTX_CLASS (GET_CODE (insn)) == 'i')
616: scan_paradoxical_subregs (PATTERN (insn));
617: }
618:
619: /* Does this function require a frame pointer? */
620:
621: frame_pointer_needed = (! flag_omit_frame_pointer
622: #ifdef EXIT_IGNORE_STACK
623: /* ?? If EXIT_IGNORE_STACK is set, we will not save
624: and restore sp for alloca. So we can't eliminate
625: the frame pointer in that case. At some point,
626: we should improve this by emitting the
627: sp-adjusting insns for this case. */
628: || (current_function_calls_alloca
629: && EXIT_IGNORE_STACK)
630: #endif
631: || FRAME_POINTER_REQUIRED);
632:
633: num_eliminable = 0;
634:
635: /* Initialize the table of registers to eliminate. The way we do this
636: depends on how the eliminable registers were defined. */
637: #ifdef ELIMINABLE_REGS
638: for (ep = reg_eliminate; ep < ®_eliminate[NUM_ELIMINABLE_REGS]; ep++)
639: {
640: ep->can_eliminate = ep->can_eliminate_previous
641: = (CAN_ELIMINATE (ep->from, ep->to)
642: && (ep->from != FRAME_POINTER_REGNUM || ! frame_pointer_needed));
643: }
644: #else
645: reg_eliminate[0].can_eliminate = reg_eliminate[0].can_eliminate_previous
646: = ! frame_pointer_needed;
647: #endif
648:
649: /* Count the number of eliminable registers and build the FROM and TO
650: REG rtx's. Note that code in gen_rtx will cause, e.g.,
651: gen_rtx (REG, Pmode, STACK_POINTER_REGNUM) to equal stack_pointer_rtx.
652: We depend on this. */
653: for (ep = reg_eliminate; ep < ®_eliminate[NUM_ELIMINABLE_REGS]; ep++)
654: {
655: num_eliminable += ep->can_eliminate;
656: ep->from_rtx = gen_rtx (REG, Pmode, ep->from);
657: ep->to_rtx = gen_rtx (REG, Pmode, ep->to);
658: }
659:
660: num_labels = max_label_num () - get_first_label_num ();
661:
662: /* Allocate the tables used to store offset information at labels. */
663: offsets_known_at = (char *) alloca (num_labels);
664: offsets_at
665: = (int (*)[NUM_ELIMINABLE_REGS])
666: alloca (num_labels * NUM_ELIMINABLE_REGS * sizeof (int));
667:
668: offsets_known_at -= get_first_label_num ();
669: offsets_at -= get_first_label_num ();
670:
671: /* Alter each pseudo-reg rtx to contain its hard reg number.
672: Assign stack slots to the pseudos that lack hard regs or equivalents.
673: Do not touch virtual registers. */
674:
675: for (i = LAST_VIRTUAL_REGISTER + 1; i < max_regno; i++)
676: alter_reg (i, -1);
677:
678: /* Round size of stack frame to BIGGEST_ALIGNMENT. This must be done here
679: because the stack size may be a part of the offset computation for
680: register elimination. */
681: assign_stack_local (BLKmode, 0, 0);
682:
683: /* If we have some registers we think can be eliminated, scan all insns to
684: see if there is an insn that sets one of these registers to something
685: other than itself plus a constant. If so, the register cannot be
686: eliminated. Doing this scan here eliminates an extra pass through the
687: main reload loop in the most common case where register elimination
688: cannot be done. */
689: for (insn = first; insn && num_eliminable; insn = NEXT_INSN (insn))
690: if (GET_CODE (insn) == INSN || GET_CODE (insn) == JUMP_INSN
691: || GET_CODE (insn) == CALL_INSN)
692: note_stores (PATTERN (insn), mark_not_eliminable);
693:
694: #ifndef REGISTER_CONSTRAINTS
695: /* If all the pseudo regs have hard regs,
696: except for those that are never referenced,
697: we know that no reloads are needed. */
698: /* But that is not true if there are register constraints, since
699: in that case some pseudos might be in the wrong kind of hard reg. */
700:
701: for (i = FIRST_PSEUDO_REGISTER; i < max_regno; i++)
702: if (reg_renumber[i] == -1 && reg_n_refs[i] != 0)
703: break;
704:
1.1.1.2 ! root 705: if (i == max_regno && num_eliminable == 0 && ! caller_save_needed)
1.1 root 706: return;
707: #endif
708:
709: /* Compute the order of preference for hard registers to spill.
710: Store them by decreasing preference in potential_reload_regs. */
711:
712: order_regs_for_reload ();
713:
714: /* So far, no hard regs have been spilled. */
715: n_spills = 0;
716: for (i = 0; i < FIRST_PSEUDO_REGISTER; i++)
717: spill_reg_order[i] = -1;
718:
719: /* On most machines, we can't use any register explicitly used in the
720: rtl as a spill register. But on some, we have to. Those will have
721: taken care to keep the life of hard regs as short as possible. */
722:
723: #ifdef SMALL_REGISTER_CLASSES
724: CLEAR_HARD_REG_SET (forbidden_regs);
725: #else
726: COPY_HARD_REG_SET (forbidden_regs, bad_spill_regs);
727: #endif
728:
729: /* Spill any hard regs that we know we can't eliminate. */
730: for (ep = reg_eliminate; ep < ®_eliminate[NUM_ELIMINABLE_REGS]; ep++)
731: if (! ep->can_eliminate)
732: {
733: spill_hard_reg (ep->from, global, dumpfile, 1);
734: regs_ever_live[ep->from] = 1;
735: }
736:
737: if (global)
738: for (i = 0; i < N_REG_CLASSES; i++)
739: {
740: basic_block_needs[i] = (char *)alloca (n_basic_blocks);
741: bzero (basic_block_needs[i], n_basic_blocks);
742: }
743:
744: /* This loop scans the entire function each go-round
745: and repeats until one repetition spills no additional hard regs. */
746:
1.1.1.2 ! root 747: /* This flag is set when a pseudo reg is spilled,
1.1 root 748: to require another pass. Note that getting an additional reload
749: reg does not necessarily imply any pseudo reg was spilled;
750: sometimes we find a reload reg that no pseudo reg was allocated in. */
751: something_changed = 1;
752: /* This flag is set if there are any insns that require reloading. */
753: something_needs_reloads = 0;
754: /* This flag is set if there are any insns that require register
755: eliminations. */
756: something_needs_elimination = 0;
757: while (something_changed)
758: {
759: rtx after_call = 0;
760:
761: /* For each class, number of reload regs needed in that class.
762: This is the maximum over all insns of the needs in that class
763: of the individual insn. */
764: int max_needs[N_REG_CLASSES];
765: /* For each class, size of group of consecutive regs
766: that is needed for the reloads of this class. */
767: int group_size[N_REG_CLASSES];
768: /* For each class, max number of consecutive groups needed.
769: (Each group contains group_size[CLASS] consecutive registers.) */
770: int max_groups[N_REG_CLASSES];
771: /* For each class, max number needed of regs that don't belong
772: to any of the groups. */
773: int max_nongroups[N_REG_CLASSES];
774: /* For each class, the machine mode which requires consecutive
775: groups of regs of that class.
776: If two different modes ever require groups of one class,
777: they must be the same size and equally restrictive for that class,
778: otherwise we can't handle the complexity. */
779: enum machine_mode group_mode[N_REG_CLASSES];
780: rtx x;
781:
782: something_changed = 0;
783: bzero (max_needs, sizeof max_needs);
784: bzero (max_groups, sizeof max_groups);
785: bzero (max_nongroups, sizeof max_nongroups);
786: bzero (group_size, sizeof group_size);
787: for (i = 0; i < N_REG_CLASSES; i++)
788: group_mode[i] = VOIDmode;
789:
790: /* Keep track of which basic blocks are needing the reloads. */
791: this_block = 0;
792:
793: /* Remember whether any element of basic_block_needs
794: changes from 0 to 1 in this pass. */
795: new_basic_block_needs = 0;
796:
797: /* Reset all offsets on eliminable registers to their initial values. */
798: #ifdef ELIMINABLE_REGS
799: for (ep = reg_eliminate; ep < ®_eliminate[NUM_ELIMINABLE_REGS]; ep++)
800: {
801: INITIAL_ELIMINATION_OFFSET (ep->from, ep->to, ep->initial_offset);
802: ep->previous_offset = ep->offset
803: = ep->max_offset = ep->initial_offset;
804: }
805: #else
806: #ifdef INITIAL_FRAME_POINTER_OFFSET
807: INITIAL_FRAME_POINTER_OFFSET (reg_eliminate[0].initial_offset);
808: #else
809: if (!FRAME_POINTER_REQUIRED)
810: abort ();
811: reg_eliminate[0].initial_offset = 0;
812: #endif
813: reg_eliminate[0].previous_offset = reg_eliminate[0].max_offset
814: = reg_eliminate[0].offset = reg_eliminate[0].initial_offset;
815: #endif
816:
817: num_not_at_initial_offset = 0;
818:
819: bzero (&offsets_known_at[get_first_label_num ()], num_labels);
820:
821: /* Set a known offset for each forced label to be at the initial offset
822: of each elimination. We do this because we assume that all
823: computed jumps occur from a location where each elimination is
824: at its initial offset. */
825:
826: for (x = forced_labels; x; x = XEXP (x, 1))
827: if (XEXP (x, 0))
828: set_label_offsets (XEXP (x, 0), 0, 1);
829:
830: /* For each pseudo register that has an equivalent location defined,
831: try to eliminate any eliminable registers (such as the frame pointer)
832: assuming initial offsets for the replacement register, which
833: is the normal case.
834:
835: If the resulting location is directly addressable, substitute
836: the MEM we just got directly for the old REG.
837:
838: If it is not addressable but is a constant or the sum of a hard reg
839: and constant, it is probably not addressable because the constant is
840: out of range, in that case record the address; we will generate
841: hairy code to compute the address in a register each time it is
842: needed.
843:
844: If the location is not addressable, but does not have one of the
845: above forms, assign a stack slot. We have to do this to avoid the
846: potential of producing lots of reloads if, e.g., a location involves
847: a pseudo that didn't get a hard register and has an equivalent memory
848: location that also involves a pseudo that didn't get a hard register.
849:
850: Perhaps at some point we will improve reload_when_needed handling
851: so this problem goes away. But that's very hairy. */
852:
853: for (i = FIRST_PSEUDO_REGISTER; i < max_regno; i++)
854: if (reg_renumber[i] < 0 && reg_equiv_memory_loc[i])
855: {
856: rtx x = eliminate_regs (reg_equiv_memory_loc[i], 0, 0);
857:
858: if (strict_memory_address_p (GET_MODE (regno_reg_rtx[i]),
859: XEXP (x, 0)))
860: reg_equiv_mem[i] = x, reg_equiv_address[i] = 0;
861: else if (CONSTANT_P (XEXP (x, 0))
862: || (GET_CODE (XEXP (x, 0)) == PLUS
863: && GET_CODE (XEXP (XEXP (x, 0), 0)) == REG
864: && (REGNO (XEXP (XEXP (x, 0), 0))
865: < FIRST_PSEUDO_REGISTER)
866: && CONSTANT_P (XEXP (XEXP (x, 0), 1))))
867: reg_equiv_address[i] = XEXP (x, 0), reg_equiv_mem[i] = 0;
868: else
869: {
870: /* Make a new stack slot. Then indicate that something
871: changed so we go back and recompute offsets for
872: eliminable registers because the allocation of memory
873: below might change some offset. reg_equiv_{mem,address}
874: will be set up for this pseudo on the next pass around
875: the loop. */
876: reg_equiv_memory_loc[i] = 0;
877: reg_equiv_init[i] = 0;
878: alter_reg (i, -1);
879: something_changed = 1;
880: }
881: }
882:
1.1.1.2 ! root 883: /* If we allocated another pseudo to the stack, redo elimination
1.1 root 884: bookkeeping. */
885: if (something_changed)
886: continue;
887:
888: /* If caller-saves needs a group, initialize the group to include
889: the size and mode required for caller-saves. */
890:
891: if (caller_save_group_size > 1)
892: {
893: group_mode[(int) caller_save_spill_class] = Pmode;
894: group_size[(int) caller_save_spill_class] = caller_save_group_size;
895: }
896:
897: /* Compute the most additional registers needed by any instruction.
898: Collect information separately for each class of regs. */
899:
900: for (insn = first; insn; insn = NEXT_INSN (insn))
901: {
902: if (global && this_block + 1 < n_basic_blocks
903: && insn == basic_block_head[this_block+1])
904: ++this_block;
905:
906: /* If this is a label, a JUMP_INSN, or has REG_NOTES (which
907: might include REG_LABEL), we need to see what effects this
908: has on the known offsets at labels. */
909:
910: if (GET_CODE (insn) == CODE_LABEL || GET_CODE (insn) == JUMP_INSN
911: || (GET_RTX_CLASS (GET_CODE (insn)) == 'i'
912: && REG_NOTES (insn) != 0))
913: set_label_offsets (insn, insn, 0);
914:
915: if (GET_RTX_CLASS (GET_CODE (insn)) == 'i')
916: {
917: /* Nonzero means don't use a reload reg that overlaps
918: the place where a function value can be returned. */
919: rtx avoid_return_reg = 0;
920:
921: rtx old_body = PATTERN (insn);
922: int old_code = INSN_CODE (insn);
923: rtx old_notes = REG_NOTES (insn);
924: int did_elimination = 0;
925:
926: /* Initially, count RELOAD_OTHER reloads.
927: Later, merge in the other kinds. */
928: int insn_needs[N_REG_CLASSES];
929: int insn_groups[N_REG_CLASSES];
930: int insn_total_groups = 0;
931:
932: /* Count RELOAD_FOR_INPUT_RELOAD_ADDRESS reloads. */
933: int insn_needs_for_inputs[N_REG_CLASSES];
934: int insn_groups_for_inputs[N_REG_CLASSES];
935: int insn_total_groups_for_inputs = 0;
936:
937: /* Count RELOAD_FOR_OUTPUT_RELOAD_ADDRESS reloads. */
938: int insn_needs_for_outputs[N_REG_CLASSES];
939: int insn_groups_for_outputs[N_REG_CLASSES];
940: int insn_total_groups_for_outputs = 0;
941:
942: /* Count RELOAD_FOR_OPERAND_ADDRESS reloads. */
943: int insn_needs_for_operands[N_REG_CLASSES];
944: int insn_groups_for_operands[N_REG_CLASSES];
945: int insn_total_groups_for_operands = 0;
946:
947: #if 0 /* This wouldn't work nowadays, since optimize_bit_field
948: looks for non-strict memory addresses. */
949: /* Optimization: a bit-field instruction whose field
950: happens to be a byte or halfword in memory
951: can be changed to a move instruction. */
952:
953: if (GET_CODE (PATTERN (insn)) == SET)
954: {
955: rtx dest = SET_DEST (PATTERN (insn));
956: rtx src = SET_SRC (PATTERN (insn));
957:
958: if (GET_CODE (dest) == ZERO_EXTRACT
959: || GET_CODE (dest) == SIGN_EXTRACT)
960: optimize_bit_field (PATTERN (insn), insn, reg_equiv_mem);
961: if (GET_CODE (src) == ZERO_EXTRACT
962: || GET_CODE (src) == SIGN_EXTRACT)
963: optimize_bit_field (PATTERN (insn), insn, reg_equiv_mem);
964: }
965: #endif
966:
967: /* If needed, eliminate any eliminable registers. */
968: if (num_eliminable)
969: did_elimination = eliminate_regs_in_insn (insn, 0);
970:
971: #ifdef SMALL_REGISTER_CLASSES
972: /* Set avoid_return_reg if this is an insn
973: that might use the value of a function call. */
974: if (GET_CODE (insn) == CALL_INSN)
975: {
976: if (GET_CODE (PATTERN (insn)) == SET)
977: after_call = SET_DEST (PATTERN (insn));
978: else if (GET_CODE (PATTERN (insn)) == PARALLEL
979: && GET_CODE (XVECEXP (PATTERN (insn), 0, 0)) == SET)
980: after_call = SET_DEST (XVECEXP (PATTERN (insn), 0, 0));
981: else
982: after_call = 0;
983: }
984: else if (after_call != 0
985: && !(GET_CODE (PATTERN (insn)) == SET
986: && SET_DEST (PATTERN (insn)) == stack_pointer_rtx))
987: {
988: if (reg_mentioned_p (after_call, PATTERN (insn)))
989: avoid_return_reg = after_call;
990: after_call = 0;
991: }
992: #endif /* SMALL_REGISTER_CLASSES */
993:
994: /* Analyze the instruction. */
995: find_reloads (insn, 0, spill_indirect_levels, global,
996: spill_reg_order);
997:
998: /* Remember for later shortcuts which insns had any reloads or
999: register eliminations.
1000:
1001: One might think that it would be worthwhile to mark insns
1002: that need register replacements but not reloads, but this is
1003: not safe because find_reloads may do some manipulation of
1004: the insn (such as swapping commutative operands), which would
1005: be lost when we restore the old pattern after register
1006: replacement. So the actions of find_reloads must be redone in
1007: subsequent passes or in reload_as_needed.
1008:
1009: However, it is safe to mark insns that need reloads
1010: but not register replacement. */
1011:
1012: PUT_MODE (insn, (did_elimination ? QImode
1013: : n_reloads ? HImode
1014: : VOIDmode));
1015:
1016: /* Discard any register replacements done. */
1017: if (did_elimination)
1018: {
1019: obstack_free (&reload_obstack, reload_firstobj);
1020: PATTERN (insn) = old_body;
1021: INSN_CODE (insn) = old_code;
1022: REG_NOTES (insn) = old_notes;
1023: something_needs_elimination = 1;
1024: }
1025:
1026: /* If this insn has no reloads, we need not do anything except
1027: in the case of a CALL_INSN when we have caller-saves and
1028: caller-save needs reloads. */
1029:
1030: if (n_reloads == 0
1031: && ! (GET_CODE (insn) == CALL_INSN
1032: && caller_save_spill_class != NO_REGS))
1033: continue;
1034:
1035: something_needs_reloads = 1;
1036:
1037: for (i = 0; i < N_REG_CLASSES; i++)
1038: {
1039: insn_needs[i] = 0, insn_groups[i] = 0;
1040: insn_needs_for_inputs[i] = 0, insn_groups_for_inputs[i] = 0;
1041: insn_needs_for_outputs[i] = 0, insn_groups_for_outputs[i] = 0;
1042: insn_needs_for_operands[i] = 0, insn_groups_for_operands[i] = 0;
1043: }
1044:
1045: /* Count each reload once in every class
1046: containing the reload's own class. */
1047:
1048: for (i = 0; i < n_reloads; i++)
1049: {
1050: register enum reg_class *p;
1051: int size;
1052: enum machine_mode mode;
1053: int *this_groups;
1054: int *this_needs;
1055: int *this_total_groups;
1056:
1057: /* Don't count the dummy reloads, for which one of the
1058: regs mentioned in the insn can be used for reloading.
1059: Don't count optional reloads.
1060: Don't count reloads that got combined with others. */
1061: if (reload_reg_rtx[i] != 0
1062: || reload_optional[i] != 0
1063: || (reload_out[i] == 0 && reload_in[i] == 0
1064: && ! reload_secondary_p[i]))
1065: continue;
1066:
1067: /* Decide which time-of-use to count this reload for. */
1068: switch (reload_when_needed[i])
1069: {
1070: case RELOAD_OTHER:
1071: case RELOAD_FOR_OUTPUT:
1072: case RELOAD_FOR_INPUT:
1073: this_needs = insn_needs;
1074: this_groups = insn_groups;
1075: this_total_groups = &insn_total_groups;
1076: break;
1077:
1078: case RELOAD_FOR_INPUT_RELOAD_ADDRESS:
1079: this_needs = insn_needs_for_inputs;
1080: this_groups = insn_groups_for_inputs;
1081: this_total_groups = &insn_total_groups_for_inputs;
1082: break;
1083:
1084: case RELOAD_FOR_OUTPUT_RELOAD_ADDRESS:
1085: this_needs = insn_needs_for_outputs;
1086: this_groups = insn_groups_for_outputs;
1087: this_total_groups = &insn_total_groups_for_outputs;
1088: break;
1089:
1090: case RELOAD_FOR_OPERAND_ADDRESS:
1091: this_needs = insn_needs_for_operands;
1092: this_groups = insn_groups_for_operands;
1093: this_total_groups = &insn_total_groups_for_operands;
1094: break;
1095: }
1096:
1097: mode = reload_inmode[i];
1098: if (GET_MODE_SIZE (reload_outmode[i]) > GET_MODE_SIZE (mode))
1099: mode = reload_outmode[i];
1100: size = CLASS_MAX_NREGS (reload_reg_class[i], mode);
1101: if (size > 1)
1102: {
1103: enum machine_mode other_mode, allocate_mode;
1104:
1105: /* Count number of groups needed separately from
1106: number of individual regs needed. */
1107: this_groups[(int) reload_reg_class[i]]++;
1108: p = reg_class_superclasses[(int) reload_reg_class[i]];
1109: while (*p != LIM_REG_CLASSES)
1110: this_groups[(int) *p++]++;
1111: (*this_total_groups)++;
1112:
1113: /* Record size and mode of a group of this class. */
1114: /* If more than one size group is needed,
1115: make all groups the largest needed size. */
1116: if (group_size[(int) reload_reg_class[i]] < size)
1117: {
1118: other_mode = group_mode[(int) reload_reg_class[i]];
1119: allocate_mode = mode;
1120:
1121: group_size[(int) reload_reg_class[i]] = size;
1122: group_mode[(int) reload_reg_class[i]] = mode;
1123: }
1124: else
1125: {
1126: other_mode = mode;
1127: allocate_mode = group_mode[(int) reload_reg_class[i]];
1128: }
1129:
1130: /* Crash if two dissimilar machine modes both need
1131: groups of consecutive regs of the same class. */
1132:
1133: if (other_mode != VOIDmode
1134: && other_mode != allocate_mode
1135: && ! modes_equiv_for_class_p (allocate_mode,
1136: other_mode,
1137: reload_reg_class[i]))
1138: abort ();
1139: }
1140: else if (size == 1)
1141: {
1142: this_needs[(int) reload_reg_class[i]] += 1;
1143: p = reg_class_superclasses[(int) reload_reg_class[i]];
1144: while (*p != LIM_REG_CLASSES)
1145: this_needs[(int) *p++] += 1;
1146: }
1147: else
1148: abort ();
1149: }
1150:
1151: /* All reloads have been counted for this insn;
1152: now merge the various times of use.
1153: This sets insn_needs, etc., to the maximum total number
1154: of registers needed at any point in this insn. */
1155:
1156: for (i = 0; i < N_REG_CLASSES; i++)
1157: {
1158: int this_max;
1159: this_max = insn_needs_for_inputs[i];
1160: if (insn_needs_for_outputs[i] > this_max)
1161: this_max = insn_needs_for_outputs[i];
1162: if (insn_needs_for_operands[i] > this_max)
1163: this_max = insn_needs_for_operands[i];
1164: insn_needs[i] += this_max;
1165: this_max = insn_groups_for_inputs[i];
1166: if (insn_groups_for_outputs[i] > this_max)
1167: this_max = insn_groups_for_outputs[i];
1168: if (insn_groups_for_operands[i] > this_max)
1169: this_max = insn_groups_for_operands[i];
1170: insn_groups[i] += this_max;
1171: }
1172:
1173: insn_total_groups += MAX (insn_total_groups_for_inputs,
1174: MAX (insn_total_groups_for_outputs,
1175: insn_total_groups_for_operands));
1176:
1177: /* If this is a CALL_INSN and caller-saves will need
1178: a spill register, act as if the spill register is
1179: needed for this insn. However, the spill register
1180: can be used by any reload of this insn, so we only
1181: need do something if no need for that class has
1182: been recorded.
1183:
1184: The assumption that every CALL_INSN will trigger a
1185: caller-save is highly conservative, however, the number
1186: of cases where caller-saves will need a spill register but
1187: a block containing a CALL_INSN won't need a spill register
1188: of that class should be quite rare.
1189:
1190: If a group is needed, the size and mode of the group will
1.1.1.2 ! root 1191: have been set up at the beginning of this loop. */
1.1 root 1192:
1193: if (GET_CODE (insn) == CALL_INSN
1194: && caller_save_spill_class != NO_REGS)
1195: {
1196: int *caller_save_needs
1197: = (caller_save_group_size > 1 ? insn_groups : insn_needs);
1198:
1199: if (caller_save_needs[(int) caller_save_spill_class] == 0)
1200: {
1201: register enum reg_class *p
1202: = reg_class_superclasses[(int) caller_save_spill_class];
1203:
1204: caller_save_needs[(int) caller_save_spill_class]++;
1205:
1206: while (*p != LIM_REG_CLASSES)
1207: caller_save_needs[(int) *p++] += 1;
1208: }
1209:
1210: if (caller_save_group_size > 1)
1211: insn_total_groups = MAX (insn_total_groups, 1);
1212: }
1213:
1214: /* Update the basic block needs. */
1215:
1216: for (i = 0; i < N_REG_CLASSES; i++)
1217: if (global && (insn_needs[i] || insn_groups[i])
1218: && ! basic_block_needs[i][this_block])
1219: {
1220: new_basic_block_needs = 1;
1221: basic_block_needs[i][this_block] = 1;
1222: }
1223:
1224: #ifdef SMALL_REGISTER_CLASSES
1225: /* If this insn stores the value of a function call,
1226: and that value is in a register that has been spilled,
1227: and if the insn needs a reload in a class
1228: that might use that register as the reload register,
1229: then add add an extra need in that class.
1230: This makes sure we have a register available that does
1231: not overlap the return value. */
1232: if (avoid_return_reg)
1233: {
1234: int regno = REGNO (avoid_return_reg);
1235: int nregs
1236: = HARD_REGNO_NREGS (regno, GET_MODE (avoid_return_reg));
1237: int r;
1238: int inc_groups = 0;
1239: for (r = regno; r < regno + nregs; r++)
1240: if (spill_reg_order[r] >= 0)
1241: for (i = 0; i < N_REG_CLASSES; i++)
1242: if (TEST_HARD_REG_BIT (reg_class_contents[i], r))
1243: {
1244: if (insn_needs[i] > 0)
1245: insn_needs[i]++;
1246: if (insn_groups[i] > 0
1247: && nregs > 1)
1248: inc_groups = 1;
1249: }
1250: if (inc_groups)
1251: insn_groups[i]++;
1252: }
1253: #endif /* SMALL_REGISTER_CLASSES */
1254:
1255: /* For each class, collect maximum need of any insn. */
1256:
1257: for (i = 0; i < N_REG_CLASSES; i++)
1258: {
1259: if (max_needs[i] < insn_needs[i])
1260: max_needs[i] = insn_needs[i];
1261: if (max_groups[i] < insn_groups[i])
1262: max_groups[i] = insn_groups[i];
1263: if (insn_total_groups > 0)
1264: if (max_nongroups[i] < insn_needs[i])
1265: max_nongroups[i] = insn_needs[i];
1266: }
1267: }
1268: /* Note that there is a continue statement above. */
1269: }
1270:
1271: /* If we have caller-saves, set up the save areas and see if caller-save
1272: will need a spill register. */
1273:
1274: if (caller_save_needed
1275: && ! setup_save_areas (&something_changed)
1276: && caller_save_spill_class == NO_REGS)
1277: {
1278: /* The class we will need depends on whether the machine
1279: supports the sum of two registers for an address; see
1280: find_address_reloads for details. */
1281:
1282: caller_save_spill_class
1283: = double_reg_address_ok ? INDEX_REG_CLASS : BASE_REG_CLASS;
1284: caller_save_group_size
1285: = CLASS_MAX_NREGS (caller_save_spill_class, Pmode);
1286: something_changed = 1;
1287: }
1288:
1289: /* Now deduct from the needs for the registers already
1290: available (already spilled). */
1291:
1292: CLEAR_HARD_REG_SET (counted_for_groups);
1293: CLEAR_HARD_REG_SET (counted_for_nongroups);
1294:
1295: /* First find all regs alone in their class
1296: and count them (if desired) for non-groups.
1297: We would be screwed if a group took the only reg in a class
1298: for which a non-group reload is needed.
1299: (Note there is still a bug; if a class has 2 regs,
1300: both could be stolen by groups and we would lose the same way.
1301: With luck, no machine will need a nongroup in a 2-reg class.) */
1302:
1303: for (i = 0; i < n_spills; i++)
1304: {
1305: register enum reg_class *p;
1306: class = (int) REGNO_REG_CLASS (spill_regs[i]);
1307:
1308: if (reg_class_size[class] == 1 && max_nongroups[class] > 0)
1309: {
1310: max_needs[class]--;
1311: p = reg_class_superclasses[class];
1312: while (*p != LIM_REG_CLASSES)
1313: max_needs[(int) *p++]--;
1314:
1315: SET_HARD_REG_BIT (counted_for_nongroups, spill_regs[i]);
1316: max_nongroups[class]--;
1317: p = reg_class_superclasses[class];
1318: while (*p != LIM_REG_CLASSES)
1319: {
1320: if (max_nongroups[(int) *p] > 0)
1321: SET_HARD_REG_BIT (counted_for_nongroups, spill_regs[i]);
1322: max_nongroups[(int) *p++]--;
1323: }
1324: }
1325: }
1326:
1327: /* Now find all consecutive groups of spilled registers
1328: and mark each group off against the need for such groups.
1329: But don't count them against ordinary need, yet. */
1330:
1331: count_possible_groups (group_size, group_mode, max_groups);
1332:
1333: /* Now count all spill regs against the individual need,
1334: This includes those counted above for groups,
1335: but not those previously counted for nongroups.
1336:
1337: Those that weren't counted_for_groups can also count against
1338: the not-in-group need. */
1339:
1340: for (i = 0; i < n_spills; i++)
1341: {
1342: register enum reg_class *p;
1343: class = (int) REGNO_REG_CLASS (spill_regs[i]);
1344:
1345: /* Those counted at the beginning shouldn't be counted twice. */
1346: if (! TEST_HARD_REG_BIT (counted_for_nongroups, spill_regs[i]))
1347: {
1348: max_needs[class]--;
1349: p = reg_class_superclasses[class];
1350: while (*p != LIM_REG_CLASSES)
1351: max_needs[(int) *p++]--;
1352:
1353: if (! TEST_HARD_REG_BIT (counted_for_groups, spill_regs[i]))
1354: {
1355: if (max_nongroups[class] > 0)
1356: SET_HARD_REG_BIT (counted_for_nongroups, spill_regs[i]);
1357: max_nongroups[class]--;
1358: p = reg_class_superclasses[class];
1359: while (*p != LIM_REG_CLASSES)
1360: {
1361: if (max_nongroups[(int) *p] > 0)
1362: SET_HARD_REG_BIT (counted_for_nongroups,
1363: spill_regs[i]);
1364: max_nongroups[(int) *p++]--;
1365: }
1366: }
1367: }
1368: }
1369:
1.1.1.2 ! root 1370: /* See if anything that happened changes which eliminations are valid.
! 1371: For example, on the Sparc, whether or not the frame pointer can
! 1372: be eliminated can depend on what registers have been used. We need
! 1373: not check some conditions again (such as flag_omit_frame_pointer)
! 1374: since they can't have changed. */
! 1375:
! 1376: for (ep = reg_eliminate; ep < ®_eliminate[NUM_ELIMINABLE_REGS]; ep++)
! 1377: if ((ep->from == FRAME_POINTER_REGNUM && FRAME_POINTER_REQUIRED)
! 1378: #ifdef ELIMINABLE_REGS
! 1379: || ! CAN_ELIMINATE (ep->from, ep->to)
! 1380: #endif
! 1381: )
! 1382: ep->can_eliminate = 0;
! 1383:
1.1 root 1384: /* Look for the case where we have discovered that we can't replace
1385: register A with register B and that means that we will now be
1386: trying to replace register A with register C. This means we can
1387: no longer replace register C with register B and we need to disable
1388: such an elimination, if it exists. This occurs often with A == ap,
1389: B == sp, and C == fp. */
1390:
1391: for (ep = reg_eliminate; ep < ®_eliminate[NUM_ELIMINABLE_REGS]; ep++)
1392: {
1393: struct elim_table *op;
1394: register int new_to = -1;
1395:
1396: if (! ep->can_eliminate && ep->can_eliminate_previous)
1397: {
1398: /* Find the current elimination for ep->from, if there is a
1399: new one. */
1400: for (op = reg_eliminate;
1401: op < ®_eliminate[NUM_ELIMINABLE_REGS]; op++)
1402: if (op->from == ep->from && op->can_eliminate)
1403: {
1404: new_to = op->to;
1405: break;
1406: }
1407:
1408: /* See if there is an elimination of NEW_TO -> EP->TO. If so,
1409: disable it. */
1410: for (op = reg_eliminate;
1411: op < ®_eliminate[NUM_ELIMINABLE_REGS]; op++)
1412: if (op->from == new_to && op->to == ep->to)
1413: op->can_eliminate = 0;
1414: }
1415: }
1416:
1417: /* See if any registers that we thought we could eliminate the previous
1418: time are no longer eliminable. If so, something has changed and we
1419: must spill the register. Also, recompute the number of eliminable
1420: registers and see if the frame pointer is needed; it is if there is
1421: no elimination of the frame pointer that we can perform. */
1422:
1423: frame_pointer_needed = 1;
1424: for (ep = reg_eliminate; ep < ®_eliminate[NUM_ELIMINABLE_REGS]; ep++)
1425: {
1426: if (ep->can_eliminate && ep->from == FRAME_POINTER_REGNUM)
1427: frame_pointer_needed = 0;
1428:
1429: if (! ep->can_eliminate && ep->can_eliminate_previous)
1430: {
1431: ep->can_eliminate_previous = 0;
1432: spill_hard_reg (ep->from, global, dumpfile, 1);
1433: regs_ever_live[ep->from] = 1;
1434: something_changed = 1;
1435: num_eliminable--;
1436: }
1437: }
1438:
1439: /* If all needs are met, we win. */
1440:
1441: for (i = 0; i < N_REG_CLASSES; i++)
1442: if (max_needs[i] > 0 || max_groups[i] > 0 || max_nongroups[i] > 0)
1443: break;
1444: if (i == N_REG_CLASSES && !new_basic_block_needs && ! something_changed)
1445: break;
1446:
1447: /* Not all needs are met; must spill more hard regs. */
1448:
1449: /* If any element of basic_block_needs changed from 0 to 1,
1450: re-spill all the regs already spilled. This may spill
1451: additional pseudos that didn't spill before. */
1452:
1453: if (new_basic_block_needs)
1454: for (i = 0; i < n_spills; i++)
1455: something_changed
1456: |= spill_hard_reg (spill_regs[i], global, dumpfile, 0);
1457:
1458: /* Now find more reload regs to satisfy the remaining need
1459: Do it by ascending class number, since otherwise a reg
1460: might be spilled for a big class and might fail to count
1461: for a smaller class even though it belongs to that class.
1462:
1463: Count spilled regs in `spills', and add entries to
1464: `spill_regs' and `spill_reg_order'.
1465:
1466: ??? Note there is a problem here.
1467: When there is a need for a group in a high-numbered class,
1468: and also need for non-group regs that come from a lower class,
1469: the non-group regs are chosen first. If there aren't many regs,
1470: they might leave no room for a group.
1471:
1472: This was happening on the 386. To fix it, we added the code
1473: that calls possible_group_p, so that the lower class won't
1474: break up the last possible group.
1475:
1476: Really fixing the problem would require changes above
1477: in counting the regs already spilled, and in choose_reload_regs.
1478: It might be hard to avoid introducing bugs there. */
1479:
1480: for (class = 0; class < N_REG_CLASSES; class++)
1481: {
1482: /* First get the groups of registers.
1483: If we got single registers first, we might fragment
1484: possible groups. */
1485: while (max_groups[class] > 0)
1486: {
1487: /* If any single spilled regs happen to form groups,
1488: count them now. Maybe we don't really need
1489: to spill another group. */
1490: count_possible_groups (group_size, group_mode, max_groups);
1491:
1492: /* Groups of size 2 (the only groups used on most machines)
1493: are treated specially. */
1494: if (group_size[class] == 2)
1495: {
1496: /* First, look for a register that will complete a group. */
1497: for (i = 0; i < FIRST_PSEUDO_REGISTER; i++)
1498: {
1499: int j = potential_reload_regs[i];
1500: int other;
1501: if (j >= 0 && ! TEST_HARD_REG_BIT (bad_spill_regs, j)
1502: &&
1503: ((j > 0 && (other = j - 1, spill_reg_order[other] >= 0)
1504: && TEST_HARD_REG_BIT (reg_class_contents[class], j)
1505: && TEST_HARD_REG_BIT (reg_class_contents[class], other)
1506: && HARD_REGNO_MODE_OK (other, group_mode[class])
1507: && ! TEST_HARD_REG_BIT (counted_for_nongroups,
1508: other)
1509: /* We don't want one part of another group.
1510: We could get "two groups" that overlap! */
1511: && ! TEST_HARD_REG_BIT (counted_for_groups, other))
1512: ||
1513: (j < FIRST_PSEUDO_REGISTER - 1
1514: && (other = j + 1, spill_reg_order[other] >= 0)
1515: && TEST_HARD_REG_BIT (reg_class_contents[class], j)
1516: && TEST_HARD_REG_BIT (reg_class_contents[class], other)
1517: && HARD_REGNO_MODE_OK (j, group_mode[class])
1518: && ! TEST_HARD_REG_BIT (counted_for_nongroups,
1519: other)
1520: && ! TEST_HARD_REG_BIT (counted_for_groups,
1521: other))))
1522: {
1523: register enum reg_class *p;
1524:
1525: /* We have found one that will complete a group,
1526: so count off one group as provided. */
1527: max_groups[class]--;
1528: p = reg_class_superclasses[class];
1529: while (*p != LIM_REG_CLASSES)
1530: max_groups[(int) *p++]--;
1531:
1532: /* Indicate both these regs are part of a group. */
1533: SET_HARD_REG_BIT (counted_for_groups, j);
1534: SET_HARD_REG_BIT (counted_for_groups, other);
1535: break;
1536: }
1537: }
1538: /* We can't complete a group, so start one. */
1539: if (i == FIRST_PSEUDO_REGISTER)
1540: for (i = 0; i < FIRST_PSEUDO_REGISTER; i++)
1541: {
1542: int j = potential_reload_regs[i];
1543: if (j >= 0 && j + 1 < FIRST_PSEUDO_REGISTER
1544: && spill_reg_order[j] < 0 && spill_reg_order[j + 1] < 0
1545: && TEST_HARD_REG_BIT (reg_class_contents[class], j)
1546: && TEST_HARD_REG_BIT (reg_class_contents[class], j + 1)
1547: && HARD_REGNO_MODE_OK (j, group_mode[class])
1548: && ! TEST_HARD_REG_BIT (counted_for_nongroups,
1549: j + 1))
1550: break;
1551: }
1552:
1553: /* I should be the index in potential_reload_regs
1554: of the new reload reg we have found. */
1555:
1556: something_changed
1557: |= new_spill_reg (i, class, max_needs, 0,
1558: global, dumpfile);
1559: }
1560: else
1561: {
1562: /* For groups of more than 2 registers,
1563: look for a sufficient sequence of unspilled registers,
1564: and spill them all at once. */
1565: for (i = 0; i < FIRST_PSEUDO_REGISTER; i++)
1566: {
1567: int j = potential_reload_regs[i];
1568: int k;
1569: if (j >= 0 && j + 1 < FIRST_PSEUDO_REGISTER
1570: && HARD_REGNO_MODE_OK (j, group_mode[class]))
1571: {
1572: /* Check each reg in the sequence. */
1573: for (k = 0; k < group_size[class]; k++)
1574: if (! (spill_reg_order[j + k] < 0
1575: && ! TEST_HARD_REG_BIT (bad_spill_regs, j + k)
1576: && TEST_HARD_REG_BIT (reg_class_contents[class], j + k)))
1577: break;
1578: /* We got a full sequence, so spill them all. */
1579: if (k == group_size[class])
1580: {
1581: register enum reg_class *p;
1582: for (k = 0; k < group_size[class]; k++)
1583: {
1584: int idx;
1585: SET_HARD_REG_BIT (counted_for_groups, j + k);
1586: for (idx = 0; idx < FIRST_PSEUDO_REGISTER; idx++)
1587: if (potential_reload_regs[idx] == j + k)
1588: break;
1589: something_changed
1590: |= new_spill_reg (idx, class, max_needs, 0,
1591: global, dumpfile);
1592: }
1593:
1594: /* We have found one that will complete a group,
1595: so count off one group as provided. */
1596: max_groups[class]--;
1597: p = reg_class_superclasses[class];
1598: while (*p != LIM_REG_CLASSES)
1599: max_groups[(int) *p++]--;
1600:
1601: break;
1602: }
1603: }
1604: }
1605: }
1606: }
1607:
1608: /* Now similarly satisfy all need for single registers. */
1609:
1610: while (max_needs[class] > 0 || max_nongroups[class] > 0)
1611: {
1612: /* Consider the potential reload regs that aren't
1613: yet in use as reload regs, in order of preference.
1614: Find the most preferred one that's in this class. */
1615:
1616: for (i = 0; i < FIRST_PSEUDO_REGISTER; i++)
1617: if (potential_reload_regs[i] >= 0
1618: && TEST_HARD_REG_BIT (reg_class_contents[class],
1619: potential_reload_regs[i])
1620: /* If this reg will not be available for groups,
1621: pick one that does not foreclose possible groups.
1622: This is a kludge, and not very general,
1623: but it should be sufficient to make the 386 work,
1624: and the problem should not occur on machines with
1625: more registers. */
1626: && (max_nongroups[class] == 0
1627: || possible_group_p (potential_reload_regs[i], max_groups)))
1628: break;
1629:
1630: /* I should be the index in potential_reload_regs
1631: of the new reload reg we have found. */
1632:
1633: something_changed
1634: |= new_spill_reg (i, class, max_needs, max_nongroups,
1635: global, dumpfile);
1636: }
1637: }
1638: }
1639:
1640: /* If global-alloc was run, notify it of any register eliminations we have
1641: done. */
1642: if (global)
1643: for (ep = reg_eliminate; ep < ®_eliminate[NUM_ELIMINABLE_REGS]; ep++)
1644: if (ep->can_eliminate)
1645: mark_elimination (ep->from, ep->to);
1646:
1647: /* From now on, we need to emit any moves without making new pseudos. */
1648: reload_in_progress = 1;
1649:
1650: /* Insert code to save and restore call-clobbered hard regs
1651: around calls. Tell if what mode to use so that we will process
1652: those insns in reload_as_needed if we have to. */
1653:
1654: if (caller_save_needed)
1655: save_call_clobbered_regs (num_eliminable ? QImode
1656: : caller_save_spill_class != NO_REGS ? HImode
1657: : VOIDmode);
1658:
1659: /* If a pseudo has no hard reg, delete the insns that made the equivalence.
1660: If that insn didn't set the register (i.e., it copied the register to
1661: memory), just delete that insn instead of the equivalencing insn plus
1662: anything now dead. If we call delete_dead_insn on that insn, we may
1663: delete the insn that actually sets the register if the register die
1664: there and that is incorrect. */
1665:
1666: for (i = FIRST_PSEUDO_REGISTER; i < max_regno; i++)
1667: if (reg_renumber[i] < 0 && reg_equiv_init[i] != 0
1668: && GET_CODE (reg_equiv_init[i]) != NOTE)
1669: {
1670: if (reg_set_p (regno_reg_rtx[i], PATTERN (reg_equiv_init[i])))
1671: delete_dead_insn (reg_equiv_init[i]);
1672: else
1673: {
1674: PUT_CODE (reg_equiv_init[i], NOTE);
1675: NOTE_SOURCE_FILE (reg_equiv_init[i]) = 0;
1676: NOTE_LINE_NUMBER (reg_equiv_init[i]) = NOTE_INSN_DELETED;
1677: }
1678: }
1679:
1680: /* Use the reload registers where necessary
1681: by generating move instructions to move the must-be-register
1682: values into or out of the reload registers. */
1683:
1684: if (something_needs_reloads || something_needs_elimination
1685: || (caller_save_needed && num_eliminable)
1686: || caller_save_spill_class != NO_REGS)
1687: reload_as_needed (first, global);
1688:
1689: reload_in_progress = 0;
1690:
1691: /* Now eliminate all pseudo regs by modifying them into
1692: their equivalent memory references.
1693: The REG-rtx's for the pseudos are modified in place,
1694: so all insns that used to refer to them now refer to memory.
1695:
1696: For a reg that has a reg_equiv_address, all those insns
1697: were changed by reloading so that no insns refer to it any longer;
1698: but the DECL_RTL of a variable decl may refer to it,
1699: and if so this causes the debugging info to mention the variable. */
1700:
1701: for (i = FIRST_PSEUDO_REGISTER; i < max_regno; i++)
1702: {
1703: rtx addr = 0;
1704: if (reg_equiv_mem[i])
1705: addr = XEXP (reg_equiv_mem[i], 0);
1706: if (reg_equiv_address[i])
1707: addr = reg_equiv_address[i];
1708: if (addr)
1709: {
1710: if (reg_renumber[i] < 0)
1711: {
1712: rtx reg = regno_reg_rtx[i];
1713: XEXP (reg, 0) = addr;
1714: REG_USERVAR_P (reg) = 0;
1715: PUT_CODE (reg, MEM);
1716: }
1717: else if (reg_equiv_mem[i])
1718: XEXP (reg_equiv_mem[i], 0) = addr;
1719: }
1720: }
1721:
1722: #ifdef PRESERVE_DEATH_INFO_REGNO_P
1723: /* Make a pass over all the insns and remove death notes for things that
1724: are no longer registers or no longer die in the insn (e.g., an input
1725: and output pseudo being tied). */
1726:
1727: for (insn = first; insn; insn = NEXT_INSN (insn))
1728: if (GET_RTX_CLASS (GET_CODE (insn)) == 'i')
1729: {
1730: rtx note, next;
1731:
1732: for (note = REG_NOTES (insn); note; note = next)
1733: {
1734: next = XEXP (note, 1);
1735: if (REG_NOTE_KIND (note) == REG_DEAD
1736: && (GET_CODE (XEXP (note, 0)) != REG
1737: || reg_set_p (XEXP (note, 0), PATTERN (insn))))
1738: remove_note (insn, note);
1739: }
1740: }
1741: #endif
1742:
1743: /* Indicate that we no longer have known memory locations or constants. */
1744: reg_equiv_constant = 0;
1745: reg_equiv_memory_loc = 0;
1746: }
1747:
1748: /* Nonzero if, after spilling reg REGNO for non-groups,
1749: it will still be possible to find a group if we still need one. */
1750:
1751: static int
1752: possible_group_p (regno, max_groups)
1753: int regno;
1754: int *max_groups;
1755: {
1756: int i;
1757: int class = (int) NO_REGS;
1758:
1759: for (i = 0; i < (int) N_REG_CLASSES; i++)
1760: if (max_groups[i] > 0)
1761: {
1762: class = i;
1763: break;
1764: }
1765:
1766: if (class == (int) NO_REGS)
1767: return 1;
1768:
1769: /* Consider each pair of consecutive registers. */
1770: for (i = 0; i < FIRST_PSEUDO_REGISTER - 1; i++)
1771: {
1772: /* Ignore pairs that include reg REGNO. */
1773: if (i == regno || i + 1 == regno)
1774: continue;
1775:
1776: /* Ignore pairs that are outside the class that needs the group.
1777: ??? Here we fail to handle the case where two different classes
1778: independently need groups. But this never happens with our
1779: current machine descriptions. */
1780: if (! (TEST_HARD_REG_BIT (reg_class_contents[class], i)
1781: && TEST_HARD_REG_BIT (reg_class_contents[class], i + 1)))
1782: continue;
1783:
1784: /* A pair of consecutive regs we can still spill does the trick. */
1785: if (spill_reg_order[i] < 0 && spill_reg_order[i + 1] < 0
1786: && ! TEST_HARD_REG_BIT (bad_spill_regs, i)
1787: && ! TEST_HARD_REG_BIT (bad_spill_regs, i + 1))
1788: return 1;
1789:
1790: /* A pair of one already spilled and one we can spill does it
1791: provided the one already spilled is not otherwise reserved. */
1792: if (spill_reg_order[i] < 0
1793: && ! TEST_HARD_REG_BIT (bad_spill_regs, i)
1794: && spill_reg_order[i + 1] >= 0
1795: && ! TEST_HARD_REG_BIT (counted_for_groups, i + 1)
1796: && ! TEST_HARD_REG_BIT (counted_for_nongroups, i + 1))
1797: return 1;
1798: if (spill_reg_order[i + 1] < 0
1799: && ! TEST_HARD_REG_BIT (bad_spill_regs, i + 1)
1800: && spill_reg_order[i] >= 0
1801: && ! TEST_HARD_REG_BIT (counted_for_groups, i)
1802: && ! TEST_HARD_REG_BIT (counted_for_nongroups, i))
1803: return 1;
1804: }
1805:
1806: return 0;
1807: }
1808:
1809: /* Count any groups that can be formed from the registers recently spilled.
1810: This is done class by class, in order of ascending class number. */
1811:
1812: static void
1813: count_possible_groups (group_size, group_mode, max_groups)
1814: int *group_size, *max_groups;
1815: enum machine_mode *group_mode;
1816: {
1817: int i;
1818: /* Now find all consecutive groups of spilled registers
1819: and mark each group off against the need for such groups.
1820: But don't count them against ordinary need, yet. */
1821:
1822: for (i = 0; i < N_REG_CLASSES; i++)
1823: if (group_size[i] > 1)
1824: {
1825: char regmask[FIRST_PSEUDO_REGISTER];
1826: int j;
1827:
1828: bzero (regmask, sizeof regmask);
1829: /* Make a mask of all the regs that are spill regs in class I. */
1830: for (j = 0; j < n_spills; j++)
1831: if (TEST_HARD_REG_BIT (reg_class_contents[i], spill_regs[j])
1832: && ! TEST_HARD_REG_BIT (counted_for_groups, spill_regs[j])
1833: && ! TEST_HARD_REG_BIT (counted_for_nongroups,
1834: spill_regs[j]))
1835: regmask[spill_regs[j]] = 1;
1836: /* Find each consecutive group of them. */
1837: for (j = 0; j < FIRST_PSEUDO_REGISTER && max_groups[i] > 0; j++)
1838: if (regmask[j] && j + group_size[i] <= FIRST_PSEUDO_REGISTER
1839: /* Next line in case group-mode for this class
1840: demands an even-odd pair. */
1841: && HARD_REGNO_MODE_OK (j, group_mode[i]))
1842: {
1843: int k;
1844: for (k = 1; k < group_size[i]; k++)
1845: if (! regmask[j + k])
1846: break;
1847: if (k == group_size[i])
1848: {
1849: /* We found a group. Mark it off against this class's
1850: need for groups, and against each superclass too. */
1851: register enum reg_class *p;
1852: max_groups[i]--;
1853: p = reg_class_superclasses[i];
1854: while (*p != LIM_REG_CLASSES)
1855: max_groups[(int) *p++]--;
1856: /* Don't count these registers again. */
1857: for (k = 0; k < group_size[i]; k++)
1858: SET_HARD_REG_BIT (counted_for_groups, j + k);
1859: }
1860: j += k;
1861: }
1862: }
1863:
1864: }
1865:
1866: /* ALLOCATE_MODE is a register mode that needs to be reloaded. OTHER_MODE is
1867: another mode that needs to be reloaded for the same register class CLASS.
1868: If any reg in CLASS allows ALLOCATE_MODE but not OTHER_MODE, fail.
1869: ALLOCATE_MODE will never be smaller than OTHER_MODE.
1870:
1871: This code used to also fail if any reg in CLASS allows OTHER_MODE but not
1872: ALLOCATE_MODE. This test is unnecessary, because we will never try to put
1873: something of mode ALLOCATE_MODE into an OTHER_MODE register. Testing this
1874: causes unnecessary failures on machines requiring alignment of register
1875: groups when the two modes are different sizes, because the larger mode has
1876: more strict alignment rules than the smaller mode. */
1877:
1878: static int
1879: modes_equiv_for_class_p (allocate_mode, other_mode, class)
1880: enum machine_mode allocate_mode, other_mode;
1881: enum reg_class class;
1882: {
1883: register int regno;
1884: for (regno = 0; regno < FIRST_PSEUDO_REGISTER; regno++)
1885: {
1886: if (TEST_HARD_REG_BIT (reg_class_contents[(int) class], regno)
1887: && HARD_REGNO_MODE_OK (regno, allocate_mode)
1888: && ! HARD_REGNO_MODE_OK (regno, other_mode))
1889: return 0;
1890: }
1891: return 1;
1892: }
1893:
1894: /* Add a new register to the tables of available spill-registers
1895: (as well as spilling all pseudos allocated to the register).
1896: I is the index of this register in potential_reload_regs.
1897: CLASS is the regclass whose need is being satisfied.
1898: MAX_NEEDS and MAX_NONGROUPS are the vectors of needs,
1899: so that this register can count off against them.
1900: MAX_NONGROUPS is 0 if this register is part of a group.
1901: GLOBAL and DUMPFILE are the same as the args that `reload' got. */
1902:
1903: static int
1904: new_spill_reg (i, class, max_needs, max_nongroups, global, dumpfile)
1905: int i;
1906: int class;
1907: int *max_needs;
1908: int *max_nongroups;
1909: int global;
1910: FILE *dumpfile;
1911: {
1912: register enum reg_class *p;
1913: int val;
1914: int regno = potential_reload_regs[i];
1915:
1916: if (i >= FIRST_PSEUDO_REGISTER)
1917: abort (); /* Caller failed to find any register. */
1918:
1919: if (fixed_regs[regno] || TEST_HARD_REG_BIT (forbidden_regs, regno))
1920: fatal ("fixed or forbidden register was spilled.\n\
1921: This may be due to a compiler bug or to impossible asm statements.");
1922:
1923: /* Make reg REGNO an additional reload reg. */
1924:
1925: potential_reload_regs[i] = -1;
1926: spill_regs[n_spills] = regno;
1927: spill_reg_order[regno] = n_spills;
1928: if (dumpfile)
1929: fprintf (dumpfile, "Spilling reg %d.\n", spill_regs[n_spills]);
1930:
1931: /* Clear off the needs we just satisfied. */
1932:
1933: max_needs[class]--;
1934: p = reg_class_superclasses[class];
1935: while (*p != LIM_REG_CLASSES)
1936: max_needs[(int) *p++]--;
1937:
1938: if (max_nongroups && max_nongroups[class] > 0)
1939: {
1940: SET_HARD_REG_BIT (counted_for_nongroups, regno);
1941: max_nongroups[class]--;
1942: p = reg_class_superclasses[class];
1943: while (*p != LIM_REG_CLASSES)
1944: max_nongroups[(int) *p++]--;
1945: }
1946:
1947: /* Spill every pseudo reg that was allocated to this reg
1948: or to something that overlaps this reg. */
1949:
1950: val = spill_hard_reg (spill_regs[n_spills], global, dumpfile, 0);
1951:
1952: /* If there are some registers still to eliminate and this register
1953: wasn't ever used before, additional stack space may have to be
1954: allocated to store this register. Thus, we may have changed the offset
1955: between the stack and frame pointers, so mark that something has changed.
1956: (If new pseudos were spilled, thus requiring more space, VAL would have
1957: been set non-zero by the call to spill_hard_reg above since additional
1958: reloads may be needed in that case.
1959:
1960: One might think that we need only set VAL to 1 if this is a call-used
1961: register. However, the set of registers that must be saved by the
1962: prologue is not identical to the call-used set. For example, the
1963: register used by the call insn for the return PC is a call-used register,
1964: but must be saved by the prologue. */
1965: if (num_eliminable && ! regs_ever_live[spill_regs[n_spills]])
1966: val = 1;
1967:
1968: regs_ever_live[spill_regs[n_spills]] = 1;
1969: n_spills++;
1970:
1971: return val;
1972: }
1973:
1974: /* Delete an unneeded INSN and any previous insns who sole purpose is loading
1975: data that is dead in INSN. */
1976:
1977: static void
1978: delete_dead_insn (insn)
1979: rtx insn;
1980: {
1981: rtx prev = prev_real_insn (insn);
1982: rtx prev_dest;
1983:
1984: /* If the previous insn sets a register that dies in our insn, delete it
1985: too. */
1986: if (prev && GET_CODE (PATTERN (prev)) == SET
1987: && (prev_dest = SET_DEST (PATTERN (prev)), GET_CODE (prev_dest) == REG)
1988: && reg_mentioned_p (prev_dest, PATTERN (insn))
1989: && find_regno_note (insn, REG_DEAD, REGNO (prev_dest)))
1990: delete_dead_insn (prev);
1991:
1992: PUT_CODE (insn, NOTE);
1993: NOTE_LINE_NUMBER (insn) = NOTE_INSN_DELETED;
1994: NOTE_SOURCE_FILE (insn) = 0;
1995: }
1996:
1997: /* Modify the home of pseudo-reg I.
1998: The new home is present in reg_renumber[I].
1999:
2000: FROM_REG may be the hard reg that the pseudo-reg is being spilled from;
2001: or it may be -1, meaning there is none or it is not relevant.
2002: This is used so that all pseudos spilled from a given hard reg
2003: can share one stack slot. */
2004:
2005: static void
2006: alter_reg (i, from_reg)
2007: register int i;
2008: int from_reg;
2009: {
2010: /* When outputting an inline function, this can happen
2011: for a reg that isn't actually used. */
2012: if (regno_reg_rtx[i] == 0)
2013: return;
2014:
2015: /* If the reg got changed to a MEM at rtl-generation time,
2016: ignore it. */
2017: if (GET_CODE (regno_reg_rtx[i]) != REG)
2018: return;
2019:
2020: /* Modify the reg-rtx to contain the new hard reg
2021: number or else to contain its pseudo reg number. */
2022: REGNO (regno_reg_rtx[i])
2023: = reg_renumber[i] >= 0 ? reg_renumber[i] : i;
2024:
2025: /* If we have a pseudo that is needed but has no hard reg or equivalent,
2026: allocate a stack slot for it. */
2027:
2028: if (reg_renumber[i] < 0
2029: && reg_n_refs[i] > 0
2030: && reg_equiv_constant[i] == 0
2031: && reg_equiv_memory_loc[i] == 0)
2032: {
2033: register rtx x;
2034: int inherent_size = PSEUDO_REGNO_BYTES (i);
2035: int total_size = MAX (inherent_size, reg_max_ref_width[i]);
2036: int adjust = 0;
2037:
2038: /* Each pseudo reg has an inherent size which comes from its own mode,
2039: and a total size which provides room for paradoxical subregs
2040: which refer to the pseudo reg in wider modes.
2041:
2042: We can use a slot already allocated if it provides both
2043: enough inherent space and enough total space.
2044: Otherwise, we allocate a new slot, making sure that it has no less
2045: inherent space, and no less total space, then the previous slot. */
2046: if (from_reg == -1)
2047: {
2048: /* No known place to spill from => no slot to reuse. */
2049: x = assign_stack_local (GET_MODE (regno_reg_rtx[i]), total_size, -1);
2050: #if BYTES_BIG_ENDIAN
2051: /* Cancel the big-endian correction done in assign_stack_local.
2052: Get the address of the beginning of the slot.
2053: This is so we can do a big-endian correction unconditionally
2054: below. */
2055: adjust = inherent_size - total_size;
2056: #endif
2057: }
2058: /* Reuse a stack slot if possible. */
2059: else if (spill_stack_slot[from_reg] != 0
2060: && spill_stack_slot_width[from_reg] >= total_size
2061: && (GET_MODE_SIZE (GET_MODE (spill_stack_slot[from_reg]))
2062: >= inherent_size))
2063: x = spill_stack_slot[from_reg];
2064: /* Allocate a bigger slot. */
2065: else
2066: {
2067: /* Compute maximum size needed, both for inherent size
2068: and for total size. */
2069: enum machine_mode mode = GET_MODE (regno_reg_rtx[i]);
2070: if (spill_stack_slot[from_reg])
2071: {
2072: if (GET_MODE_SIZE (GET_MODE (spill_stack_slot[from_reg]))
2073: > inherent_size)
2074: mode = GET_MODE (spill_stack_slot[from_reg]);
2075: if (spill_stack_slot_width[from_reg] > total_size)
2076: total_size = spill_stack_slot_width[from_reg];
2077: }
2078: /* Make a slot with that size. */
2079: x = assign_stack_local (mode, total_size, -1);
2080: #if BYTES_BIG_ENDIAN
2081: /* Cancel the big-endian correction done in assign_stack_local.
2082: Get the address of the beginning of the slot.
2083: This is so we can do a big-endian correction unconditionally
2084: below. */
2085: adjust = GET_MODE_SIZE (mode) - total_size;
2086: #endif
2087: spill_stack_slot[from_reg] = x;
2088: spill_stack_slot_width[from_reg] = total_size;
2089: }
2090:
2091: #if BYTES_BIG_ENDIAN
2092: /* On a big endian machine, the "address" of the slot
2093: is the address of the low part that fits its inherent mode. */
2094: if (inherent_size < total_size)
2095: adjust += (total_size - inherent_size);
2096: #endif /* BYTES_BIG_ENDIAN */
2097:
2098: /* If we have any adjustment to make, or if the stack slot is the
2099: wrong mode, make a new stack slot. */
2100: if (adjust != 0 || GET_MODE (x) != GET_MODE (regno_reg_rtx[i]))
2101: {
2102: x = gen_rtx (MEM, GET_MODE (regno_reg_rtx[i]),
2103: plus_constant (XEXP (x, 0), adjust));
2104: RTX_UNCHANGING_P (x) = RTX_UNCHANGING_P (regno_reg_rtx[i]);
2105: }
2106:
2107: /* Save the stack slot for later. */
2108: reg_equiv_memory_loc[i] = x;
2109: }
2110: }
2111:
2112: /* Mark the slots in regs_ever_live for the hard regs
2113: used by pseudo-reg number REGNO. */
2114:
2115: void
2116: mark_home_live (regno)
2117: int regno;
2118: {
2119: register int i, lim;
2120: i = reg_renumber[regno];
2121: if (i < 0)
2122: return;
2123: lim = i + HARD_REGNO_NREGS (i, PSEUDO_REGNO_MODE (regno));
2124: while (i < lim)
2125: regs_ever_live[i++] = 1;
2126: }
2127:
2128: /* This function handles the tracking of elimination offsets around branches.
2129:
2130: X is a piece of RTL being scanned.
2131:
2132: INSN is the insn that it came from, if any.
2133:
2134: INITIAL_P is non-zero if we are to set the offset to be the initial
2135: offset and zero if we are setting the offset of the label to be the
2136: current offset. */
2137:
2138: static void
2139: set_label_offsets (x, insn, initial_p)
2140: rtx x;
2141: rtx insn;
2142: int initial_p;
2143: {
2144: enum rtx_code code = GET_CODE (x);
2145: rtx tem;
2146: int i;
2147: struct elim_table *p;
2148:
2149: switch (code)
2150: {
2151: case LABEL_REF:
2152: x = XEXP (x, 0);
2153:
2154: /* ... fall through ... */
2155:
2156: case CODE_LABEL:
2157: /* If we know nothing about this label, set the desired offsets. Note
2158: that this sets the offset at a label to be the offset before a label
2159: if we don't know anything about the label. This is not correct for
2160: the label after a BARRIER, but is the best guess we can make. If
2161: we guessed wrong, we will suppress an elimination that might have
2162: been possible had we been able to guess correctly. */
2163:
2164: if (! offsets_known_at[CODE_LABEL_NUMBER (x)])
2165: {
2166: for (i = 0; i < NUM_ELIMINABLE_REGS; i++)
2167: offsets_at[CODE_LABEL_NUMBER (x)][i]
2168: = (initial_p ? reg_eliminate[i].initial_offset
2169: : reg_eliminate[i].offset);
2170: offsets_known_at[CODE_LABEL_NUMBER (x)] = 1;
2171: }
2172:
2173: /* Otherwise, if this is the definition of a label and it is
1.1.1.2 ! root 2174: preceded by a BARRIER, set our offsets to the known offset of
1.1 root 2175: that label. */
2176:
2177: else if (x == insn
2178: && (tem = prev_nonnote_insn (insn)) != 0
2179: && GET_CODE (tem) == BARRIER)
2180: {
2181: num_not_at_initial_offset = 0;
2182: for (i = 0; i < NUM_ELIMINABLE_REGS; i++)
2183: {
2184: reg_eliminate[i].offset = reg_eliminate[i].previous_offset
2185: = offsets_at[CODE_LABEL_NUMBER (x)][i];
1.1.1.2 ! root 2186: if (reg_eliminate[i].can_eliminate
! 2187: && (reg_eliminate[i].offset
! 2188: != reg_eliminate[i].initial_offset))
1.1 root 2189: num_not_at_initial_offset++;
2190: }
2191: }
2192:
2193: else
2194: /* If neither of the above cases is true, compare each offset
2195: with those previously recorded and suppress any eliminations
2196: where the offsets disagree. */
2197:
2198: for (i = 0; i < NUM_ELIMINABLE_REGS; i++)
2199: if (offsets_at[CODE_LABEL_NUMBER (x)][i]
2200: != (initial_p ? reg_eliminate[i].initial_offset
2201: : reg_eliminate[i].offset))
2202: reg_eliminate[i].can_eliminate = 0;
2203:
2204: return;
2205:
2206: case JUMP_INSN:
2207: set_label_offsets (PATTERN (insn), insn, initial_p);
2208:
2209: /* ... fall through ... */
2210:
2211: case INSN:
2212: case CALL_INSN:
2213: /* Any labels mentioned in REG_LABEL notes can be branched to indirectly
2214: and hence must have all eliminations at their initial offsets. */
2215: for (tem = REG_NOTES (x); tem; tem = XEXP (tem, 1))
2216: if (REG_NOTE_KIND (tem) == REG_LABEL)
2217: set_label_offsets (XEXP (tem, 0), insn, 1);
2218: return;
2219:
2220: case ADDR_VEC:
2221: case ADDR_DIFF_VEC:
2222: /* Each of the labels in the address vector must be at their initial
2223: offsets. We want the first first for ADDR_VEC and the second
2224: field for ADDR_DIFF_VEC. */
2225:
2226: for (i = 0; i < XVECLEN (x, code == ADDR_DIFF_VEC); i++)
2227: set_label_offsets (XVECEXP (x, code == ADDR_DIFF_VEC, i),
2228: insn, initial_p);
2229: return;
2230:
2231: case SET:
2232: /* We only care about setting PC. If the source is not RETURN,
2233: IF_THEN_ELSE, or a label, disable any eliminations not at
2234: their initial offsets. Similarly if any arm of the IF_THEN_ELSE
2235: isn't one of those possibilities. For branches to a label,
2236: call ourselves recursively.
2237:
2238: Note that this can disable elimination unnecessarily when we have
2239: a non-local goto since it will look like a non-constant jump to
2240: someplace in the current function. This isn't a significant
2241: problem since such jumps will normally be when all elimination
2242: pairs are back to their initial offsets. */
2243:
2244: if (SET_DEST (x) != pc_rtx)
2245: return;
2246:
2247: switch (GET_CODE (SET_SRC (x)))
2248: {
2249: case PC:
2250: case RETURN:
2251: return;
2252:
2253: case LABEL_REF:
2254: set_label_offsets (XEXP (SET_SRC (x), 0), insn, initial_p);
2255: return;
2256:
2257: case IF_THEN_ELSE:
2258: tem = XEXP (SET_SRC (x), 1);
2259: if (GET_CODE (tem) == LABEL_REF)
2260: set_label_offsets (XEXP (tem, 0), insn, initial_p);
2261: else if (GET_CODE (tem) != PC && GET_CODE (tem) != RETURN)
2262: break;
2263:
2264: tem = XEXP (SET_SRC (x), 2);
2265: if (GET_CODE (tem) == LABEL_REF)
2266: set_label_offsets (XEXP (tem, 0), insn, initial_p);
2267: else if (GET_CODE (tem) != PC && GET_CODE (tem) != RETURN)
2268: break;
2269: return;
2270: }
2271:
2272: /* If we reach here, all eliminations must be at their initial
2273: offset because we are doing a jump to a variable address. */
2274: for (p = reg_eliminate; p < ®_eliminate[NUM_ELIMINABLE_REGS]; p++)
2275: if (p->offset != p->initial_offset)
2276: p->can_eliminate = 0;
2277: }
2278: }
2279:
2280: /* Used for communication between the next two function to properly share
2281: the vector for an ASM_OPERANDS. */
2282:
2283: static struct rtvec_def *old_asm_operands_vec, *new_asm_operands_vec;
2284:
2285: /* Scan X and replace any eliminable registers (such as fp) with a
2286: replacement (such as sp), plus an offset.
2287:
2288: MEM_MODE is the mode of an enclosing MEM. We need this to know how
2289: much to adjust a register for, e.g., PRE_DEC. Also, if we are inside a
2290: MEM, we are allowed to replace a sum of a register and the constant zero
2291: with the register, which we cannot do outside a MEM. In addition, we need
2292: to record the fact that a register is referenced outside a MEM.
2293:
2294: If INSN is nonzero, it is the insn containing X. If we replace a REG
2295: in a SET_DEST with an equivalent MEM and INSN is non-zero, write a
2296: CLOBBER of the pseudo after INSN so find_equiv_regs will know that
2297: that the REG is being modified.
2298:
2299: If we see a modification to a register we know about, take the
2300: appropriate action (see case SET, below).
2301:
2302: REG_EQUIV_MEM and REG_EQUIV_ADDRESS contain address that have had
2303: replacements done assuming all offsets are at their initial values. If
2304: they are not, or if REG_EQUIV_ADDRESS is nonzero for a pseudo we
2305: encounter, return the actual location so that find_reloads will do
2306: the proper thing. */
2307:
2308: rtx
2309: eliminate_regs (x, mem_mode, insn)
2310: rtx x;
2311: enum machine_mode mem_mode;
2312: rtx insn;
2313: {
2314: enum rtx_code code = GET_CODE (x);
2315: struct elim_table *ep;
2316: int regno;
2317: rtx new;
2318: int i, j;
2319: char *fmt;
2320: int copied = 0;
2321:
2322: switch (code)
2323: {
2324: case CONST_INT:
2325: case CONST_DOUBLE:
2326: case CONST:
2327: case SYMBOL_REF:
2328: case CODE_LABEL:
2329: case PC:
2330: case CC0:
2331: case ASM_INPUT:
2332: case ADDR_VEC:
2333: case ADDR_DIFF_VEC:
2334: case RETURN:
2335: return x;
2336:
2337: case REG:
2338: regno = REGNO (x);
2339:
2340: /* First handle the case where we encounter a bare register that
2341: is eliminable. Replace it with a PLUS. */
2342: if (regno < FIRST_PSEUDO_REGISTER)
2343: {
2344: for (ep = reg_eliminate; ep < ®_eliminate[NUM_ELIMINABLE_REGS];
2345: ep++)
2346: if (ep->from_rtx == x && ep->can_eliminate)
2347: {
2348: if (! mem_mode)
2349: ep->ref_outside_mem = 1;
2350: return plus_constant (ep->to_rtx, ep->previous_offset);
2351: }
2352:
2353: }
2354: else if (reg_equiv_memory_loc && reg_equiv_memory_loc[regno]
2355: && (reg_equiv_address[regno] || num_not_at_initial_offset))
2356: {
2357: /* In this case, find_reloads would attempt to either use an
2358: incorrect address (if something is not at its initial offset)
2359: or substitute an replaced address into an insn (which loses
2360: if the offset is changed by some later action). So we simply
2361: return the replaced stack slot (assuming it is changed by
2362: elimination) and ignore the fact that this is actually a
2363: reference to the pseudo. Ensure we make a copy of the
2364: address in case it is shared. */
2365: new = eliminate_regs (reg_equiv_memory_loc[regno], mem_mode, 0);
2366: if (new != reg_equiv_memory_loc[regno])
2367: return copy_rtx (new);
2368: }
2369: return x;
2370:
2371: case PLUS:
2372: /* If this is the sum of an eliminable register and a constant, rework
2373: the sum. */
2374: if (GET_CODE (XEXP (x, 0)) == REG
2375: && REGNO (XEXP (x, 0)) < FIRST_PSEUDO_REGISTER
2376: && CONSTANT_P (XEXP (x, 1)))
2377: {
2378: for (ep = reg_eliminate; ep < ®_eliminate[NUM_ELIMINABLE_REGS];
2379: ep++)
2380: if (ep->from_rtx == XEXP (x, 0) && ep->can_eliminate)
2381: {
2382: if (! mem_mode)
2383: ep->ref_outside_mem = 1;
2384:
2385: /* The only time we want to replace a PLUS with a REG (this
2386: occurs when the constant operand of the PLUS is the negative
2387: of the offset) is when we are inside a MEM. We won't want
2388: to do so at other times because that would change the
2389: structure of the insn in a way that reload can't handle.
2390: We special-case the commonest situation in
2391: eliminate_regs_in_insn, so just replace a PLUS with a
2392: PLUS here, unless inside a MEM. */
2393: if (mem_mode && GET_CODE (XEXP (x, 1)) == CONST_INT
2394: && INTVAL (XEXP (x, 1)) == - ep->previous_offset)
2395: return ep->to_rtx;
2396: else
2397: return gen_rtx (PLUS, Pmode, ep->to_rtx,
2398: plus_constant (XEXP (x, 1),
2399: ep->previous_offset));
2400: }
2401:
2402: /* If the register is not eliminable, we are done since the other
2403: operand is a constant. */
2404: return x;
2405: }
2406:
2407: /* If this is part of an address, we want to bring any constant to the
2408: outermost PLUS. We will do this by doing register replacement in
2409: our operands and seeing if a constant shows up in one of them.
2410:
2411: We assume here this is part of an address (or a "load address" insn)
2412: since an eliminable register is not likely to appear in any other
2413: context.
2414:
2415: If we have (plus (eliminable) (reg)), we want to produce
2416: (plus (plus (replacement) (reg) (const))). If this was part of a
2417: normal add insn, (plus (replacement) (reg)) will be pushed as a
2418: reload. This is the desired action. */
2419:
2420: {
2421: rtx new0 = eliminate_regs (XEXP (x, 0), mem_mode, 0);
2422: rtx new1 = eliminate_regs (XEXP (x, 1), mem_mode, 0);
2423:
2424: if (new0 != XEXP (x, 0) || new1 != XEXP (x, 1))
2425: {
2426: /* If one side is a PLUS and the other side is a pseudo that
2427: didn't get a hard register but has a reg_equiv_constant,
2428: we must replace the constant here since it may no longer
2429: be in the position of any operand. */
2430: if (GET_CODE (new0) == PLUS && GET_CODE (new1) == REG
2431: && REGNO (new1) >= FIRST_PSEUDO_REGISTER
2432: && reg_renumber[REGNO (new1)] < 0
2433: && reg_equiv_constant != 0
2434: && reg_equiv_constant[REGNO (new1)] != 0)
2435: new1 = reg_equiv_constant[REGNO (new1)];
2436: else if (GET_CODE (new1) == PLUS && GET_CODE (new0) == REG
2437: && REGNO (new0) >= FIRST_PSEUDO_REGISTER
2438: && reg_renumber[REGNO (new0)] < 0
2439: && reg_equiv_constant[REGNO (new0)] != 0)
2440: new0 = reg_equiv_constant[REGNO (new0)];
2441:
2442: new = form_sum (new0, new1);
2443:
2444: /* As above, if we are not inside a MEM we do not want to
2445: turn a PLUS into something else. We might try to do so here
2446: for an addition of 0 if we aren't optimizing. */
2447: if (! mem_mode && GET_CODE (new) != PLUS)
2448: return gen_rtx (PLUS, GET_MODE (x), new, const0_rtx);
2449: else
2450: return new;
2451: }
2452: }
2453: return x;
2454:
2455: case EXPR_LIST:
2456: /* If we have something in XEXP (x, 0), the usual case, eliminate it. */
2457: if (XEXP (x, 0))
2458: {
2459: new = eliminate_regs (XEXP (x, 0), mem_mode, 0);
2460: if (new != XEXP (x, 0))
2461: x = gen_rtx (EXPR_LIST, REG_NOTE_KIND (x), new, XEXP (x, 1));
2462: }
2463:
2464: /* ... fall through ... */
2465:
2466: case INSN_LIST:
2467: /* Now do eliminations in the rest of the chain. If this was
2468: an EXPR_LIST, this might result in allocating more memory than is
2469: strictly needed, but it simplifies the code. */
2470: if (XEXP (x, 1))
2471: {
2472: new = eliminate_regs (XEXP (x, 1), mem_mode, 0);
2473: if (new != XEXP (x, 1))
2474: return gen_rtx (INSN_LIST, GET_MODE (x), XEXP (x, 0), new);
2475: }
2476: return x;
2477:
2478: case CALL:
2479: case COMPARE:
2480: case MINUS:
2481: case MULT:
2482: case DIV: case UDIV:
2483: case MOD: case UMOD:
2484: case AND: case IOR: case XOR:
2485: case LSHIFT: case ASHIFT: case ROTATE:
2486: case ASHIFTRT: case LSHIFTRT: case ROTATERT:
2487: case NE: case EQ:
2488: case GE: case GT: case GEU: case GTU:
2489: case LE: case LT: case LEU: case LTU:
2490: {
2491: rtx new0 = eliminate_regs (XEXP (x, 0), mem_mode, 0);
2492: rtx new1 = XEXP (x, 1) ? eliminate_regs (XEXP (x, 1), mem_mode, 0) : 0;
2493:
2494: if (new0 != XEXP (x, 0) || new1 != XEXP (x, 1))
2495: return gen_rtx (code, GET_MODE (x), new0, new1);
2496: }
2497: return x;
2498:
2499: case PRE_INC:
2500: case POST_INC:
2501: case PRE_DEC:
2502: case POST_DEC:
2503: for (ep = reg_eliminate; ep < ®_eliminate[NUM_ELIMINABLE_REGS]; ep++)
2504: if (ep->to_rtx == XEXP (x, 0))
2505: {
2506: if (code == PRE_DEC || code == POST_DEC)
2507: ep->offset += GET_MODE_SIZE (mem_mode);
2508: else
2509: ep->offset -= GET_MODE_SIZE (mem_mode);
2510: }
2511:
2512: /* Fall through to generic unary operation case. */
2513: case USE:
2514: case STRICT_LOW_PART:
2515: case NEG: case NOT:
2516: case SIGN_EXTEND: case ZERO_EXTEND:
2517: case TRUNCATE: case FLOAT_EXTEND: case FLOAT_TRUNCATE:
2518: case FLOAT: case FIX:
2519: case UNSIGNED_FIX: case UNSIGNED_FLOAT:
2520: case ABS:
2521: case SQRT:
2522: case FFS:
2523: new = eliminate_regs (XEXP (x, 0), mem_mode, 0);
2524: if (new != XEXP (x, 0))
2525: return gen_rtx (code, GET_MODE (x), new);
2526: return x;
2527:
2528: case SUBREG:
2529: /* Similar to above processing, but preserve SUBREG_WORD.
2530: Convert (subreg (mem)) to (mem) if not paradoxical.
2531: Also, if we have a non-paradoxical (subreg (pseudo)) and the
2532: pseudo didn't get a hard reg, we must replace this with the
2533: eliminated version of the memory location because push_reloads
2534: may do the replacement in certain circumstances. */
2535: if (GET_CODE (SUBREG_REG (x)) == REG
2536: && (GET_MODE_SIZE (GET_MODE (x))
2537: <= GET_MODE_SIZE (GET_MODE (SUBREG_REG (x))))
2538: && reg_equiv_memory_loc != 0
2539: && reg_equiv_memory_loc[REGNO (SUBREG_REG (x))] != 0)
2540: {
2541: new = eliminate_regs (reg_equiv_memory_loc[REGNO (SUBREG_REG (x))],
2542: mem_mode, 0);
2543:
2544: /* If we didn't change anything, we must retain the pseudo. */
2545: if (new == reg_equiv_memory_loc[REGNO (SUBREG_REG (x))])
2546: new = XEXP (x, 0);
2547: else
2548: /* Otherwise, ensure NEW isn't shared in case we have to reload
2549: it. */
2550: new = copy_rtx (new);
2551: }
2552: else
2553: new = eliminate_regs (SUBREG_REG (x), mem_mode, 0);
2554:
2555: if (new != XEXP (x, 0))
2556: {
2557: if (GET_CODE (new) == MEM
2558: && (GET_MODE_SIZE (GET_MODE (x))
2559: <= GET_MODE_SIZE (GET_MODE (new))))
2560: {
2561: int offset = SUBREG_WORD (x) * UNITS_PER_WORD;
2562: enum machine_mode mode = GET_MODE (x);
2563:
2564: #if BYTES_BIG_ENDIAN
2565: offset += (MIN (UNITS_PER_WORD,
2566: GET_MODE_SIZE (GET_MODE (new)))
2567: - MIN (UNITS_PER_WORD, GET_MODE_SIZE (mode)));
2568: #endif
2569:
2570: PUT_MODE (new, mode);
2571: XEXP (new, 0) = plus_constant (XEXP (new, 0), offset);
2572: return new;
2573: }
2574: else
2575: return gen_rtx (SUBREG, GET_MODE (x), new, SUBREG_WORD (x));
2576: }
2577:
2578: return x;
2579:
2580: case CLOBBER:
2581: /* If clobbering a register that is the replacement register for an
1.1.1.2 ! root 2582: elimination we still think can be performed, note that it cannot
1.1 root 2583: be performed. Otherwise, we need not be concerned about it. */
2584: for (ep = reg_eliminate; ep < ®_eliminate[NUM_ELIMINABLE_REGS]; ep++)
2585: if (ep->to_rtx == XEXP (x, 0))
2586: ep->can_eliminate = 0;
2587:
2588: return x;
2589:
2590: case ASM_OPERANDS:
2591: {
2592: rtx *temp_vec;
2593: /* Properly handle sharing input and constraint vectors. */
2594: if (ASM_OPERANDS_INPUT_VEC (x) != old_asm_operands_vec)
2595: {
2596: /* When we come to a new vector not seen before,
2597: scan all its elements; keep the old vector if none
2598: of them changes; otherwise, make a copy. */
2599: old_asm_operands_vec = ASM_OPERANDS_INPUT_VEC (x);
2600: temp_vec = (rtx *) alloca (XVECLEN (x, 3) * sizeof (rtx));
2601: for (i = 0; i < ASM_OPERANDS_INPUT_LENGTH (x); i++)
2602: temp_vec[i] = eliminate_regs (ASM_OPERANDS_INPUT (x, i),
2603: mem_mode, 0);
2604:
2605: for (i = 0; i < ASM_OPERANDS_INPUT_LENGTH (x); i++)
2606: if (temp_vec[i] != ASM_OPERANDS_INPUT (x, i))
2607: break;
2608:
2609: if (i == ASM_OPERANDS_INPUT_LENGTH (x))
2610: new_asm_operands_vec = old_asm_operands_vec;
2611: else
2612: new_asm_operands_vec
2613: = gen_rtvec_v (ASM_OPERANDS_INPUT_LENGTH (x), temp_vec);
2614: }
2615:
2616: /* If we had to copy the vector, copy the entire ASM_OPERANDS. */
2617: if (new_asm_operands_vec == old_asm_operands_vec)
2618: return x;
2619:
2620: new = gen_rtx (ASM_OPERANDS, VOIDmode, ASM_OPERANDS_TEMPLATE (x),
2621: ASM_OPERANDS_OUTPUT_CONSTRAINT (x),
2622: ASM_OPERANDS_OUTPUT_IDX (x), new_asm_operands_vec,
2623: ASM_OPERANDS_INPUT_CONSTRAINT_VEC (x),
2624: ASM_OPERANDS_SOURCE_FILE (x),
2625: ASM_OPERANDS_SOURCE_LINE (x));
2626: new->volatil = x->volatil;
2627: return new;
2628: }
2629:
2630: case SET:
2631: /* Check for setting a register that we know about. */
2632: if (GET_CODE (SET_DEST (x)) == REG)
2633: {
2634: /* See if this is setting the replacement register for an
2635: elimination.
2636:
2637: If DEST is the frame pointer, we do nothing because we assume that
2638: all assignments to the frame pointer are for non-local gotos and
2639: are being done at a time when they are valid and do not disturb
2640: anything else. Some machines want to eliminate a fake argument
2641: pointer with either the frame or stack pointer. Assignments to
2642: the frame pointer must not prevent this elimination. */
2643:
2644: for (ep = reg_eliminate; ep < ®_eliminate[NUM_ELIMINABLE_REGS];
2645: ep++)
2646: if (ep->to_rtx == SET_DEST (x)
2647: && SET_DEST (x) != frame_pointer_rtx)
2648: {
2649: /* If it is being incrememented, adjust the offset. Otherwise,
2650: this elimination can't be done. */
2651: rtx src = SET_SRC (x);
2652:
2653: if (GET_CODE (src) == PLUS
2654: && XEXP (src, 0) == SET_DEST (x)
2655: && GET_CODE (XEXP (src, 1)) == CONST_INT)
2656: ep->offset -= INTVAL (XEXP (src, 1));
2657: else
2658: ep->can_eliminate = 0;
2659: }
2660:
2661: /* Now check to see we are assigning to a register that can be
2662: eliminated. If so, it must be as part of a PARALLEL, since we
2663: will not have been called if this is a single SET. So indicate
2664: that we can no longer eliminate this reg. */
2665: for (ep = reg_eliminate; ep < ®_eliminate[NUM_ELIMINABLE_REGS];
2666: ep++)
2667: if (ep->from_rtx == SET_DEST (x) && ep->can_eliminate)
2668: ep->can_eliminate = 0;
2669: }
2670:
2671: /* Now avoid the loop below in this common case. */
2672: {
2673: rtx new0 = eliminate_regs (SET_DEST (x), 0, 0);
2674: rtx new1 = eliminate_regs (SET_SRC (x), 0, 0);
2675:
2676: /* If SET_DEST changed from a REG to a MEM and INSN is non-zero,
2677: write a CLOBBER insn. */
2678: if (GET_CODE (SET_DEST (x)) == REG && GET_CODE (new0) == MEM
2679: && insn != 0)
2680: emit_insn_after (gen_rtx (CLOBBER, VOIDmode, SET_DEST (x)), insn);
2681:
2682: if (new0 != SET_DEST (x) || new1 != SET_SRC (x))
2683: return gen_rtx (SET, VOIDmode, new0, new1);
2684: }
2685:
2686: return x;
2687:
2688: case MEM:
2689: /* Our only special processing is to pass the mode of the MEM to our
2690: recursive call and copy the flags. While we are here, handle this
2691: case more efficiently. */
2692: new = eliminate_regs (XEXP (x, 0), GET_MODE (x), 0);
2693: if (new != XEXP (x, 0))
2694: {
2695: new = gen_rtx (MEM, GET_MODE (x), new);
2696: new->volatil = x->volatil;
2697: new->unchanging = x->unchanging;
2698: new->in_struct = x->in_struct;
2699: return new;
2700: }
2701: else
2702: return x;
2703: }
2704:
2705: /* Process each of our operands recursively. If any have changed, make a
2706: copy of the rtx. */
2707: fmt = GET_RTX_FORMAT (code);
2708: for (i = 0; i < GET_RTX_LENGTH (code); i++, fmt++)
2709: {
2710: if (*fmt == 'e')
2711: {
2712: new = eliminate_regs (XEXP (x, i), mem_mode, 0);
2713: if (new != XEXP (x, i) && ! copied)
2714: {
2715: rtx new_x = rtx_alloc (code);
2716: bcopy (x, new_x, (sizeof (*new_x) - sizeof (new_x->fld)
2717: + (sizeof (new_x->fld[0])
2718: * GET_RTX_LENGTH (code))));
2719: x = new_x;
2720: copied = 1;
2721: }
2722: XEXP (x, i) = new;
2723: }
2724: else if (*fmt == 'E')
2725: {
2726: int copied_vec = 0;
2727: for (j = 0; j < XVECLEN (x, i); j++)
2728: {
2729: new = eliminate_regs (XVECEXP (x, i, j), mem_mode, insn);
2730: if (new != XVECEXP (x, i, j) && ! copied_vec)
2731: {
2732: rtvec new_v = gen_rtvec_v (XVECLEN (x, i),
2733: &XVECEXP (x, i, 0));
2734: if (! copied)
2735: {
2736: rtx new_x = rtx_alloc (code);
2737: bcopy (x, new_x, (sizeof (*new_x) - sizeof (new_x->fld)
2738: + (sizeof (new_x->fld[0])
2739: * GET_RTX_LENGTH (code))));
2740: x = new_x;
2741: copied = 1;
2742: }
2743: XVEC (x, i) = new_v;
2744: copied_vec = 1;
2745: }
2746: XVECEXP (x, i, j) = new;
2747: }
2748: }
2749: }
2750:
2751: return x;
2752: }
2753:
2754: /* Scan INSN and eliminate all eliminable registers in it.
2755:
2756: If REPLACE is nonzero, do the replacement destructively. Also
2757: delete the insn as dead it if it is setting an eliminable register.
2758:
2759: If REPLACE is zero, do all our allocations in reload_obstack.
2760:
2761: If no eliminations were done and this insn doesn't require any elimination
2762: processing (these are not identical conditions: it might be updating sp,
2763: but not referencing fp; this needs to be seen during reload_as_needed so
2764: that the offset between fp and sp can be taken into consideration), zero
2765: is returned. Otherwise, 1 is returned. */
2766:
2767: static int
2768: eliminate_regs_in_insn (insn, replace)
2769: rtx insn;
2770: int replace;
2771: {
2772: rtx old_body = PATTERN (insn);
2773: rtx new_body;
2774: int val = 0;
2775: struct elim_table *ep;
2776:
2777: if (! replace)
2778: push_obstacks (&reload_obstack, &reload_obstack);
2779:
2780: if (GET_CODE (old_body) == SET && GET_CODE (SET_DEST (old_body)) == REG
2781: && REGNO (SET_DEST (old_body)) < FIRST_PSEUDO_REGISTER)
2782: {
2783: /* Check for setting an eliminable register. */
2784: for (ep = reg_eliminate; ep < ®_eliminate[NUM_ELIMINABLE_REGS]; ep++)
2785: if (ep->from_rtx == SET_DEST (old_body) && ep->can_eliminate)
2786: {
2787: /* In this case this insn isn't serving a useful purpose. We
2788: will delete it in reload_as_needed once we know that this
2789: elimination is, in fact, being done.
2790:
2791: If REPLACE isn't set, we can't delete this insn, but neededn't
2792: process it since it won't be used unless something changes. */
2793: if (replace)
2794: delete_dead_insn (insn);
2795: val = 1;
2796: goto done;
2797: }
2798:
2799: /* Check for (set (reg) (plus (reg from) (offset))) where the offset
2800: in the insn is the negative of the offset in FROM. Substitute
2801: (set (reg) (reg to)) for the insn and change its code.
2802:
2803: We have to do this here, rather than in eliminate_regs, do that we can
2804: change the insn code. */
2805:
2806: if (GET_CODE (SET_SRC (old_body)) == PLUS
2807: && GET_CODE (XEXP (SET_SRC (old_body), 0)) == REG
2808: && GET_CODE (XEXP (SET_SRC (old_body), 1)) == CONST_INT)
2809: for (ep = reg_eliminate; ep < ®_eliminate[NUM_ELIMINABLE_REGS];
2810: ep++)
2811: if (ep->from_rtx == XEXP (SET_SRC (old_body), 0)
2812: && ep->can_eliminate
2813: && ep->offset == - INTVAL (XEXP (SET_SRC (old_body), 1)))
2814: {
2815: PATTERN (insn) = gen_rtx (SET, VOIDmode,
2816: SET_DEST (old_body), ep->to_rtx);
2817: INSN_CODE (insn) = -1;
2818: val = 1;
2819: goto done;
2820: }
2821: }
2822:
2823: old_asm_operands_vec = 0;
2824:
2825: /* Replace the body of this insn with a substituted form. If we changed
2826: something, return non-zero. If this is the final call for this
2827: insn (REPLACE is non-zero), do the elimination in REG_NOTES as well.
2828:
2829: If we are replacing a body that was a (set X (plus Y Z)), try to
2830: re-recognize the insn. We do this in case we had a simple addition
2831: but now can do this as a load-address. This saves an insn in this
2832: common case. */
2833:
2834: new_body = eliminate_regs (old_body, 0, replace ? insn : 0);
2835: if (new_body != old_body)
2836: {
2837: if (GET_CODE (old_body) != SET || GET_CODE (SET_SRC (old_body)) != PLUS
2838: || ! validate_change (insn, &PATTERN (insn), new_body, 0))
2839: PATTERN (insn) = new_body;
2840:
2841: if (replace && REG_NOTES (insn))
2842: REG_NOTES (insn) = eliminate_regs (REG_NOTES (insn), 0, 0);
2843: val = 1;
2844: }
2845:
2846: /* Loop through all elimination pairs. See if any have changed and
2847: recalculate the number not at initial offset.
2848:
2849: Compute the maximum offset (minimum offset if the stack does not
2850: grow downward) for each elimination pair.
2851:
2852: We also detect a cases where register elimination cannot be done,
2853: namely, if a register would be both changed and referenced outside a MEM
2854: in the resulting insn since such an insn is often undefined and, even if
2855: not, we cannot know what meaning will be given to it. Note that it is
2856: valid to have a register used in an address in an insn that changes it
2857: (presumably with a pre- or post-increment or decrement).
2858:
2859: If anything changes, return nonzero. */
2860:
2861: num_not_at_initial_offset = 0;
2862: for (ep = reg_eliminate; ep < ®_eliminate[NUM_ELIMINABLE_REGS]; ep++)
2863: {
2864: if (ep->previous_offset != ep->offset && ep->ref_outside_mem)
2865: ep->can_eliminate = 0;
2866:
2867: ep->ref_outside_mem = 0;
2868:
2869: if (ep->previous_offset != ep->offset)
2870: val = 1;
2871:
2872: ep->previous_offset = ep->offset;
2873: if (ep->can_eliminate && ep->offset != ep->initial_offset)
2874: num_not_at_initial_offset++;
2875:
2876: #ifdef STACK_GROWS_DOWNWARD
2877: ep->max_offset = MAX (ep->max_offset, ep->offset);
2878: #else
2879: ep->max_offset = MIN (ep->max_offset, ep->offset);
2880: #endif
2881: }
2882:
2883: done:
2884: if (! replace)
2885: pop_obstacks ();
2886:
2887: return val;
2888: }
2889:
2890: /* Given X, a SET or CLOBBER of DEST, if DEST is the target of a register
2891: replacement we currently believe is valid, mark it as not eliminable if X
2892: modifies DEST in any way other than by adding a constant integer to it.
2893:
2894: If DEST is the frame pointer, we do nothing because we assume that
2895: all assignments to the frame pointer are nonlocal gotos and are being done
2896: at a time when they are valid and do not disturb anything else.
2897: Some machines want to eliminate a fake argument pointer with either the
2898: frame or stack pointer. Assignments to the frame pointer must not prevent
2899: this elimination.
2900:
2901: Called via note_stores from reload before starting its passes to scan
2902: the insns of the function. */
2903:
2904: static void
2905: mark_not_eliminable (dest, x)
2906: rtx dest;
2907: rtx x;
2908: {
2909: register int i;
2910:
2911: /* A SUBREG of a hard register here is just changing its mode. We should
2912: not see a SUBREG of an eliminable hard register, but check just in
2913: case. */
2914: if (GET_CODE (dest) == SUBREG)
2915: dest = SUBREG_REG (dest);
2916:
2917: if (dest == frame_pointer_rtx)
2918: return;
2919:
2920: for (i = 0; i < NUM_ELIMINABLE_REGS; i++)
2921: if (reg_eliminate[i].can_eliminate && dest == reg_eliminate[i].to_rtx
2922: && (GET_CODE (x) != SET
2923: || GET_CODE (SET_SRC (x)) != PLUS
2924: || XEXP (SET_SRC (x), 0) != dest
2925: || GET_CODE (XEXP (SET_SRC (x), 1)) != CONST_INT))
2926: {
2927: reg_eliminate[i].can_eliminate_previous
2928: = reg_eliminate[i].can_eliminate = 0;
2929: num_eliminable--;
2930: }
2931: }
2932:
2933: /* Kick all pseudos out of hard register REGNO.
2934: If GLOBAL is nonzero, try to find someplace else to put them.
2935: If DUMPFILE is nonzero, log actions taken on that file.
2936:
2937: If CANT_ELIMINATE is nonzero, it means that we are doing this spill
2938: because we found we can't eliminate some register. In the case, no pseudos
2939: are allowed to be in the register, even if they are only in a block that
2940: doesn't require spill registers, unlike the case when we are spilling this
2941: hard reg to produce another spill register.
2942:
2943: Return nonzero if any pseudos needed to be kicked out. */
2944:
2945: static int
2946: spill_hard_reg (regno, global, dumpfile, cant_eliminate)
2947: register int regno;
2948: int global;
2949: FILE *dumpfile;
2950: int cant_eliminate;
2951: {
2952: int something_changed = 0;
2953: register int i;
2954:
2955: SET_HARD_REG_BIT (forbidden_regs, regno);
2956:
2957: /* Spill every pseudo reg that was allocated to this reg
2958: or to something that overlaps this reg. */
2959:
2960: for (i = FIRST_PSEUDO_REGISTER; i < max_regno; i++)
2961: if (reg_renumber[i] >= 0
2962: && reg_renumber[i] <= regno
2963: && (reg_renumber[i]
2964: + HARD_REGNO_NREGS (reg_renumber[i],
2965: PSEUDO_REGNO_MODE (i))
2966: > regno))
2967: {
2968: enum reg_class class = REGNO_REG_CLASS (regno);
2969:
2970: /* If this register belongs solely to a basic block which needed no
2971: spilling of any class that this register is contained in,
2972: leave it be, unless we are spilling this register because
2973: it was a hard register that can't be eliminated. */
2974:
2975: if (! cant_eliminate
2976: && basic_block_needs[0]
2977: && reg_basic_block[i] >= 0
2978: && basic_block_needs[(int) class][reg_basic_block[i]] == 0)
2979: {
2980: enum reg_class *p;
2981:
2982: for (p = reg_class_superclasses[(int) class];
2983: *p != LIM_REG_CLASSES; p++)
2984: if (basic_block_needs[(int) *p][reg_basic_block[i]] > 0)
2985: break;
2986:
2987: if (*p == LIM_REG_CLASSES)
2988: continue;
2989: }
2990:
2991: /* Mark it as no longer having a hard register home. */
2992: reg_renumber[i] = -1;
2993: /* We will need to scan everything again. */
2994: something_changed = 1;
2995: if (global)
2996: retry_global_alloc (i, forbidden_regs);
2997:
2998: alter_reg (i, regno);
2999: if (dumpfile)
3000: {
3001: if (reg_renumber[i] == -1)
3002: fprintf (dumpfile, " Register %d now on stack.\n\n", i);
3003: else
3004: fprintf (dumpfile, " Register %d now in %d.\n\n",
3005: i, reg_renumber[i]);
3006: }
3007: }
3008:
3009: return something_changed;
3010: }
3011:
3012: /* Find all paradoxical subregs within X and update reg_max_ref_width. */
3013:
3014: static void
3015: scan_paradoxical_subregs (x)
3016: register rtx x;
3017: {
3018: register int i;
3019: register char *fmt;
3020: register enum rtx_code code = GET_CODE (x);
3021:
3022: switch (code)
3023: {
3024: case CONST_INT:
3025: case CONST:
3026: case SYMBOL_REF:
3027: case LABEL_REF:
3028: case CONST_DOUBLE:
3029: case CC0:
3030: case PC:
3031: case REG:
3032: case USE:
3033: case CLOBBER:
3034: return;
3035:
3036: case SUBREG:
3037: if (GET_CODE (SUBREG_REG (x)) == REG
3038: && GET_MODE_SIZE (GET_MODE (x)) > GET_MODE_SIZE (GET_MODE (SUBREG_REG (x))))
3039: reg_max_ref_width[REGNO (SUBREG_REG (x))]
3040: = GET_MODE_SIZE (GET_MODE (x));
3041: return;
3042: }
3043:
3044: fmt = GET_RTX_FORMAT (code);
3045: for (i = GET_RTX_LENGTH (code) - 1; i >= 0; i--)
3046: {
3047: if (fmt[i] == 'e')
3048: scan_paradoxical_subregs (XEXP (x, i));
3049: else if (fmt[i] == 'E')
3050: {
3051: register int j;
3052: for (j = XVECLEN (x, i) - 1; j >=0; j--)
3053: scan_paradoxical_subregs (XVECEXP (x, i, j));
3054: }
3055: }
3056: }
3057:
3058: struct hard_reg_n_uses { int regno; int uses; };
3059:
3060: static int
3061: hard_reg_use_compare (p1, p2)
3062: struct hard_reg_n_uses *p1, *p2;
3063: {
3064: int tem = p1->uses - p2->uses;
3065: if (tem != 0) return tem;
3066: /* If regs are equally good, sort by regno,
3067: so that the results of qsort leave nothing to chance. */
3068: return p1->regno - p2->regno;
3069: }
3070:
3071: /* Choose the order to consider regs for use as reload registers
3072: based on how much trouble would be caused by spilling one.
3073: Store them in order of decreasing preference in potential_reload_regs. */
3074:
3075: static void
3076: order_regs_for_reload ()
3077: {
3078: register int i;
3079: register int o = 0;
3080: int large = 0;
3081:
3082: struct hard_reg_n_uses hard_reg_n_uses[FIRST_PSEUDO_REGISTER];
3083:
3084: CLEAR_HARD_REG_SET (bad_spill_regs);
3085:
3086: for (i = 0; i < FIRST_PSEUDO_REGISTER; i++)
3087: potential_reload_regs[i] = -1;
3088:
3089: /* Count number of uses of each hard reg by pseudo regs allocated to it
3090: and then order them by decreasing use. */
3091:
3092: for (i = 0; i < FIRST_PSEUDO_REGISTER; i++)
3093: {
3094: hard_reg_n_uses[i].uses = 0;
3095: hard_reg_n_uses[i].regno = i;
3096: }
3097:
3098: for (i = FIRST_PSEUDO_REGISTER; i < max_regno; i++)
3099: {
3100: int regno = reg_renumber[i];
3101: if (regno >= 0)
3102: {
3103: int lim = regno + HARD_REGNO_NREGS (regno, PSEUDO_REGNO_MODE (i));
3104: while (regno < lim)
3105: hard_reg_n_uses[regno++].uses += reg_n_refs[i];
3106: }
3107: large += reg_n_refs[i];
3108: }
3109:
3110: /* Now fixed registers (which cannot safely be used for reloading)
3111: get a very high use count so they will be considered least desirable.
3112: Registers used explicitly in the rtl code are almost as bad. */
3113:
3114: for (i = 0; i < FIRST_PSEUDO_REGISTER; i++)
3115: {
3116: if (fixed_regs[i])
3117: {
3118: hard_reg_n_uses[i].uses += 2 * large + 2;
3119: SET_HARD_REG_BIT (bad_spill_regs, i);
3120: }
3121: else if (regs_explicitly_used[i])
3122: {
3123: hard_reg_n_uses[i].uses += large + 1;
3124: /* ??? We are doing this here because of the potential that
3125: bad code may be generated if a register explicitly used in
3126: an insn was used as a spill register for that insn. But
3127: not using these are spill registers may lose on some machine.
3128: We'll have to see how this works out. */
3129: SET_HARD_REG_BIT (bad_spill_regs, i);
3130: }
3131: }
3132: hard_reg_n_uses[FRAME_POINTER_REGNUM].uses += 2 * large + 2;
3133: SET_HARD_REG_BIT (bad_spill_regs, FRAME_POINTER_REGNUM);
3134:
3135: #ifdef ELIMINABLE_REGS
3136: /* If registers other than the frame pointer are eliminable, mark them as
3137: poor choices. */
3138: for (i = 0; i < NUM_ELIMINABLE_REGS; i++)
3139: {
3140: hard_reg_n_uses[reg_eliminate[i].from].uses += 2 * large + 2;
3141: SET_HARD_REG_BIT (bad_spill_regs, reg_eliminate[i].from);
3142: }
3143: #endif
3144:
3145: /* Prefer registers not so far used, for use in temporary loading.
3146: Among them, if REG_ALLOC_ORDER is defined, use that order.
3147: Otherwise, prefer registers not preserved by calls. */
3148:
3149: #ifdef REG_ALLOC_ORDER
3150: for (i = 0; i < FIRST_PSEUDO_REGISTER; i++)
3151: {
3152: int regno = reg_alloc_order[i];
3153:
3154: if (hard_reg_n_uses[regno].uses == 0)
3155: potential_reload_regs[o++] = regno;
3156: }
3157: #else
3158: for (i = 0; i < FIRST_PSEUDO_REGISTER; i++)
3159: {
3160: if (hard_reg_n_uses[i].uses == 0 && call_used_regs[i])
3161: potential_reload_regs[o++] = i;
3162: }
3163: for (i = 0; i < FIRST_PSEUDO_REGISTER; i++)
3164: {
3165: if (hard_reg_n_uses[i].uses == 0 && ! call_used_regs[i])
3166: potential_reload_regs[o++] = i;
3167: }
3168: #endif
3169:
3170: qsort (hard_reg_n_uses, FIRST_PSEUDO_REGISTER,
3171: sizeof hard_reg_n_uses[0], hard_reg_use_compare);
3172:
3173: /* Now add the regs that are already used,
3174: preferring those used less often. The fixed and otherwise forbidden
3175: registers will be at the end of this list. */
3176:
3177: for (i = 0; i < FIRST_PSEUDO_REGISTER; i++)
3178: if (hard_reg_n_uses[i].uses != 0)
3179: potential_reload_regs[o++] = hard_reg_n_uses[i].regno;
3180: }
3181:
3182: /* Reload pseudo-registers into hard regs around each insn as needed.
3183: Additional register load insns are output before the insn that needs it
3184: and perhaps store insns after insns that modify the reloaded pseudo reg.
3185:
3186: reg_last_reload_reg and reg_reloaded_contents keep track of
3187: which pseudo-registers are already available in reload registers.
3188: We update these for the reloads that we perform,
3189: as the insns are scanned. */
3190:
3191: static void
3192: reload_as_needed (first, live_known)
3193: rtx first;
3194: int live_known;
3195: {
3196: register rtx insn;
3197: register int i;
3198: int this_block = 0;
3199: rtx x;
3200: rtx after_call = 0;
3201:
3202: bzero (spill_reg_rtx, sizeof spill_reg_rtx);
3203: reg_last_reload_reg = (rtx *) alloca (max_regno * sizeof (rtx));
3204: bzero (reg_last_reload_reg, max_regno * sizeof (rtx));
3205: reg_has_output_reload = (char *) alloca (max_regno);
3206: for (i = 0; i < n_spills; i++)
3207: {
3208: reg_reloaded_contents[i] = -1;
3209: reg_reloaded_insn[i] = 0;
3210: }
3211:
3212: /* Reset all offsets on eliminable registers to their initial values. */
3213: #ifdef ELIMINABLE_REGS
3214: for (i = 0; i < NUM_ELIMINABLE_REGS; i++)
3215: {
3216: INITIAL_ELIMINATION_OFFSET (reg_eliminate[i].from, reg_eliminate[i].to,
3217: reg_eliminate[i].initial_offset)
3218: reg_eliminate[i].previous_offset
3219: = reg_eliminate[i].offset = reg_eliminate[i].initial_offset;
3220: }
3221: #else
3222: INITIAL_FRAME_POINTER_OFFSET (reg_eliminate[0].initial_offset);
3223: reg_eliminate[0].previous_offset
3224: = reg_eliminate[0].offset = reg_eliminate[0].initial_offset;
3225: #endif
3226:
3227: num_not_at_initial_offset = 0;
3228:
3229: for (insn = first; insn;)
3230: {
3231: register rtx next = NEXT_INSN (insn);
3232:
3233: /* Notice when we move to a new basic block. */
1.1.1.2 ! root 3234: if (live_known && this_block + 1 < n_basic_blocks
1.1 root 3235: && insn == basic_block_head[this_block+1])
3236: ++this_block;
3237:
3238: /* If we pass a label, copy the offsets from the label information
3239: into the current offsets of each elimination. */
3240: if (GET_CODE (insn) == CODE_LABEL)
3241: {
3242: num_not_at_initial_offset = 0;
3243: for (i = 0; i < NUM_ELIMINABLE_REGS; i++)
3244: {
3245: reg_eliminate[i].offset = reg_eliminate[i].previous_offset
3246: = offsets_at[CODE_LABEL_NUMBER (insn)][i];
1.1.1.2 ! root 3247: if (reg_eliminate[i].can_eliminate
! 3248: && (reg_eliminate[i].offset
! 3249: != reg_eliminate[i].initial_offset))
1.1 root 3250: num_not_at_initial_offset++;
3251: }
3252: }
3253:
3254: else if (GET_RTX_CLASS (GET_CODE (insn)) == 'i')
3255: {
3256: rtx avoid_return_reg = 0;
3257:
3258: #ifdef SMALL_REGISTER_CLASSES
3259: /* Set avoid_return_reg if this is an insn
3260: that might use the value of a function call. */
3261: if (GET_CODE (insn) == CALL_INSN)
3262: {
3263: if (GET_CODE (PATTERN (insn)) == SET)
3264: after_call = SET_DEST (PATTERN (insn));
3265: else if (GET_CODE (PATTERN (insn)) == PARALLEL
3266: && GET_CODE (XVECEXP (PATTERN (insn), 0, 0)) == SET)
3267: after_call = SET_DEST (XVECEXP (PATTERN (insn), 0, 0));
3268: else
3269: after_call = 0;
3270: }
3271: else if (after_call != 0
3272: && !(GET_CODE (PATTERN (insn)) == SET
3273: && SET_DEST (PATTERN (insn)) == stack_pointer_rtx))
3274: {
3275: if (reg_mentioned_p (after_call, PATTERN (insn)))
3276: avoid_return_reg = after_call;
3277: after_call = 0;
3278: }
3279: #endif /* SMALL_REGISTER_CLASSES */
3280:
1.1.1.2 ! root 3281: /* If this is a USE and CLOBBER of a MEM, ensure that any
! 3282: references to eliminable registers have been removed. */
! 3283:
! 3284: if ((GET_CODE (PATTERN (insn)) == USE
! 3285: || GET_CODE (PATTERN (insn)) == CLOBBER)
! 3286: && GET_CODE (XEXP (PATTERN (insn), 0)) == MEM)
! 3287: XEXP (XEXP (PATTERN (insn), 0), 0)
! 3288: = eliminate_regs (XEXP (XEXP (PATTERN (insn), 0), 0),
! 3289: GET_MODE (XEXP (PATTERN (insn), 0)), 0);
! 3290:
1.1 root 3291: /* If we need to do register elimination processing, do so.
3292: This might delete the insn, in which case we are done. */
3293: if (num_eliminable && GET_MODE (insn) == QImode)
3294: {
3295: eliminate_regs_in_insn (insn, 1);
3296: if (GET_CODE (insn) == NOTE)
3297: {
3298: insn = next;
3299: continue;
3300: }
3301: }
3302:
3303: if (GET_MODE (insn) == VOIDmode)
3304: n_reloads = 0;
3305: /* First find the pseudo regs that must be reloaded for this insn.
3306: This info is returned in the tables reload_... (see reload.h).
3307: Also modify the body of INSN by substituting RELOAD
3308: rtx's for those pseudo regs. */
3309: else
3310: {
3311: bzero (reg_has_output_reload, max_regno);
3312: CLEAR_HARD_REG_SET (reg_is_output_reload);
3313:
3314: find_reloads (insn, 1, spill_indirect_levels, live_known,
3315: spill_reg_order);
3316: }
3317:
3318: if (n_reloads > 0)
3319: {
3320: int class;
3321:
3322: /* If this block has not had spilling done for a
3323: particular class, deactivate any optional reloads
3324: of that class lest they try to use a spill-reg which isn't
3325: available here. If we have any non-optionals that need a
3326: spill reg, abort. */
3327:
3328: for (class = 0; class < N_REG_CLASSES; class++)
3329: if (basic_block_needs[class] != 0
3330: && basic_block_needs[class][this_block] == 0)
3331: for (i = 0; i < n_reloads; i++)
3332: if (class == (int) reload_reg_class[i])
3333: {
3334: if (reload_optional[i])
3335: reload_in[i] = reload_out[i] = reload_reg_rtx[i] = 0;
3336: else if (reload_reg_rtx[i] == 0)
3337: abort ();
3338: }
3339:
3340: /* Now compute which reload regs to reload them into. Perhaps
3341: reusing reload regs from previous insns, or else output
3342: load insns to reload them. Maybe output store insns too.
3343: Record the choices of reload reg in reload_reg_rtx. */
3344: choose_reload_regs (insn, avoid_return_reg);
3345:
3346: /* Generate the insns to reload operands into or out of
3347: their reload regs. */
3348: emit_reload_insns (insn);
3349:
3350: /* Substitute the chosen reload regs from reload_reg_rtx
3351: into the insn's body (or perhaps into the bodies of other
3352: load and store insn that we just made for reloading
3353: and that we moved the structure into). */
3354: subst_reloads ();
3355: }
3356: /* Any previously reloaded spilled pseudo reg, stored in this insn,
3357: is no longer validly lying around to save a future reload.
3358: Note that this does not detect pseudos that were reloaded
3359: for this insn in order to be stored in
3360: (obeying register constraints). That is correct; such reload
3361: registers ARE still valid. */
3362: note_stores (PATTERN (insn), forget_old_reloads_1);
3363:
3364: /* There may have been CLOBBER insns placed after INSN. So scan
3365: between INSN and NEXT and use them to forget old reloads. */
3366: for (x = NEXT_INSN (insn); x != next; x = NEXT_INSN (x))
3367: if (GET_CODE (x) == INSN && GET_CODE (PATTERN (x)) == CLOBBER)
3368: note_stores (PATTERN (x), forget_old_reloads_1);
3369:
3370: #ifdef AUTO_INC_DEC
3371: /* Likewise for regs altered by auto-increment in this insn.
3372: But note that the reg-notes are not changed by reloading:
3373: they still contain the pseudo-regs, not the spill regs. */
3374: for (x = REG_NOTES (insn); x; x = XEXP (x, 1))
3375: if (REG_NOTE_KIND (x) == REG_INC)
3376: {
3377: /* See if this pseudo reg was reloaded in this insn.
3378: If so, its last-reload info is still valid
3379: because it is based on this insn's reload. */
3380: for (i = 0; i < n_reloads; i++)
3381: if (reload_out[i] == XEXP (x, 0))
3382: break;
3383:
3384: if (i != n_reloads)
3385: forget_old_reloads_1 (XEXP (x, 0));
3386: }
3387: #endif
3388: }
3389: /* A reload reg's contents are unknown after a label. */
3390: if (GET_CODE (insn) == CODE_LABEL)
3391: for (i = 0; i < n_spills; i++)
3392: {
3393: reg_reloaded_contents[i] = -1;
3394: reg_reloaded_insn[i] = 0;
3395: }
3396:
3397: /* Don't assume a reload reg is still good after a call insn
3398: if it is a call-used reg. */
3399: if (GET_CODE (insn) == CODE_LABEL || GET_CODE (insn) == CALL_INSN)
3400: for (i = 0; i < n_spills; i++)
3401: if (call_used_regs[spill_regs[i]])
3402: {
3403: reg_reloaded_contents[i] = -1;
3404: reg_reloaded_insn[i] = 0;
3405: }
3406:
3407: /* In case registers overlap, allow certain insns to invalidate
3408: particular hard registers. */
3409:
3410: #ifdef INSN_CLOBBERS_REGNO_P
3411: for (i = 0 ; i < n_spills ; i++)
3412: if (INSN_CLOBBERS_REGNO_P (insn, spill_regs[i]))
3413: {
3414: reg_reloaded_contents[i] = -1;
3415: reg_reloaded_insn[i] = 0;
3416: }
3417: #endif
3418:
3419: insn = next;
3420:
3421: #ifdef USE_C_ALLOCA
3422: alloca (0);
3423: #endif
3424: }
3425: }
3426:
3427: /* Discard all record of any value reloaded from X,
3428: or reloaded in X from someplace else;
3429: unless X is an output reload reg of the current insn.
3430:
3431: X may be a hard reg (the reload reg)
3432: or it may be a pseudo reg that was reloaded from. */
3433:
3434: static void
3435: forget_old_reloads_1 (x)
3436: rtx x;
3437: {
3438: register int regno;
3439: int nr;
3440:
3441: if (GET_CODE (x) != REG)
3442: return;
3443:
3444: regno = REGNO (x);
3445:
3446: if (regno >= FIRST_PSEUDO_REGISTER)
3447: nr = 1;
3448: else
3449: {
3450: int i;
3451: nr = HARD_REGNO_NREGS (regno, GET_MODE (x));
3452: /* Storing into a spilled-reg invalidates its contents.
3453: This can happen if a block-local pseudo is allocated to that reg
3454: and it wasn't spilled because this block's total need is 0.
3455: Then some insn might have an optional reload and use this reg. */
3456: for (i = 0; i < nr; i++)
3457: if (spill_reg_order[regno + i] >= 0
3458: /* But don't do this if the reg actually serves as an output
3459: reload reg in the current instruction. */
3460: && (n_reloads == 0
3461: || ! TEST_HARD_REG_BIT (reg_is_output_reload, regno + i)))
3462: {
3463: reg_reloaded_contents[spill_reg_order[regno + i]] = -1;
3464: reg_reloaded_insn[spill_reg_order[regno + i]] = 0;
3465: }
3466: }
3467:
3468: /* Since value of X has changed,
3469: forget any value previously copied from it. */
3470:
3471: while (nr-- > 0)
3472: /* But don't forget a copy if this is the output reload
3473: that establishes the copy's validity. */
3474: if (n_reloads == 0 || reg_has_output_reload[regno + nr] == 0)
3475: reg_last_reload_reg[regno + nr] = 0;
3476: }
3477:
3478: /* For each reload, the mode of the reload register. */
3479: static enum machine_mode reload_mode[MAX_RELOADS];
3480:
3481: /* For each reload, the largest number of registers it will require. */
3482: static int reload_nregs[MAX_RELOADS];
3483:
3484: /* Comparison function for qsort to decide which of two reloads
3485: should be handled first. *P1 and *P2 are the reload numbers. */
3486:
3487: static int
3488: reload_reg_class_lower (p1, p2)
3489: short *p1, *p2;
3490: {
3491: register int r1 = *p1, r2 = *p2;
3492: register int t;
3493:
3494: /* Consider required reloads before optional ones. */
3495: t = reload_optional[r1] - reload_optional[r2];
3496: if (t != 0)
3497: return t;
3498:
3499: /* Count all solitary classes before non-solitary ones. */
3500: t = ((reg_class_size[(int) reload_reg_class[r2]] == 1)
3501: - (reg_class_size[(int) reload_reg_class[r1]] == 1));
3502: if (t != 0)
3503: return t;
3504:
3505: /* Aside from solitaires, consider all multi-reg groups first. */
3506: t = reload_nregs[r2] - reload_nregs[r1];
3507: if (t != 0)
3508: return t;
3509:
3510: /* Consider reloads in order of increasing reg-class number. */
3511: t = (int) reload_reg_class[r1] - (int) reload_reg_class[r2];
3512: if (t != 0)
3513: return t;
3514:
3515: /* If reloads are equally urgent, sort by reload number,
3516: so that the results of qsort leave nothing to chance. */
3517: return r1 - r2;
3518: }
3519:
3520: /* The following HARD_REG_SETs indicate when each hard register is
3521: used for a reload of various parts of the current insn. */
3522:
3523: /* If reg is in use as a reload reg for a RELOAD_OTHER reload. */
3524: static HARD_REG_SET reload_reg_used;
3525: /* If reg is in use for a RELOAD_FOR_INPUT_RELOAD_ADDRESS reload. */
3526: static HARD_REG_SET reload_reg_used_in_input_addr;
3527: /* If reg is in use for a RELOAD_FOR_OUTPUT_RELOAD_ADDRESS reload. */
3528: static HARD_REG_SET reload_reg_used_in_output_addr;
3529: /* If reg is in use for a RELOAD_FOR_OPERAND_ADDRESS reload. */
3530: static HARD_REG_SET reload_reg_used_in_op_addr;
3531: /* If reg is in use for a RELOAD_FOR_INPUT reload. */
3532: static HARD_REG_SET reload_reg_used_in_input;
3533: /* If reg is in use for a RELOAD_FOR_OUTPUT reload. */
3534: static HARD_REG_SET reload_reg_used_in_output;
3535:
3536: /* If reg is in use as a reload reg for any sort of reload. */
3537: static HARD_REG_SET reload_reg_used_at_all;
3538:
3539: /* Mark reg REGNO as in use for a reload of the sort spec'd by WHEN_NEEDED.
3540: MODE is used to indicate how many consecutive regs are actually used. */
3541:
3542: static void
3543: mark_reload_reg_in_use (regno, when_needed, mode)
3544: int regno;
3545: enum reload_when_needed when_needed;
3546: enum machine_mode mode;
3547: {
3548: int nregs = HARD_REGNO_NREGS (regno, mode);
3549: int i;
3550:
3551: for (i = regno; i < nregs + regno; i++)
3552: {
3553: switch (when_needed)
3554: {
3555: case RELOAD_OTHER:
3556: SET_HARD_REG_BIT (reload_reg_used, i);
3557: break;
3558:
3559: case RELOAD_FOR_INPUT_RELOAD_ADDRESS:
3560: SET_HARD_REG_BIT (reload_reg_used_in_input_addr, i);
3561: break;
3562:
3563: case RELOAD_FOR_OUTPUT_RELOAD_ADDRESS:
3564: SET_HARD_REG_BIT (reload_reg_used_in_output_addr, i);
3565: break;
3566:
3567: case RELOAD_FOR_OPERAND_ADDRESS:
3568: SET_HARD_REG_BIT (reload_reg_used_in_op_addr, i);
3569: break;
3570:
3571: case RELOAD_FOR_INPUT:
3572: SET_HARD_REG_BIT (reload_reg_used_in_input, i);
3573: break;
3574:
3575: case RELOAD_FOR_OUTPUT:
3576: SET_HARD_REG_BIT (reload_reg_used_in_output, i);
3577: break;
3578: }
3579:
3580: SET_HARD_REG_BIT (reload_reg_used_at_all, i);
3581: }
3582: }
3583:
3584: /* 1 if reg REGNO is free as a reload reg for a reload of the sort
3585: specified by WHEN_NEEDED. */
3586:
3587: static int
3588: reload_reg_free_p (regno, when_needed)
3589: int regno;
3590: enum reload_when_needed when_needed;
3591: {
3592: /* In use for a RELOAD_OTHER means it's not available for anything. */
3593: if (TEST_HARD_REG_BIT (reload_reg_used, regno))
3594: return 0;
3595: switch (when_needed)
3596: {
3597: case RELOAD_OTHER:
3598: /* In use for anything means not available for a RELOAD_OTHER. */
3599: return ! TEST_HARD_REG_BIT (reload_reg_used_at_all, regno);
3600:
3601: /* The other kinds of use can sometimes share a register. */
3602: case RELOAD_FOR_INPUT:
3603: return (! TEST_HARD_REG_BIT (reload_reg_used_in_input, regno)
3604: && ! TEST_HARD_REG_BIT (reload_reg_used_in_op_addr, regno)
3605: && ! TEST_HARD_REG_BIT (reload_reg_used_in_input_addr, regno));
3606: case RELOAD_FOR_INPUT_RELOAD_ADDRESS:
3607: return (! TEST_HARD_REG_BIT (reload_reg_used_in_input_addr, regno)
3608: && ! TEST_HARD_REG_BIT (reload_reg_used_in_input, regno));
3609: case RELOAD_FOR_OUTPUT_RELOAD_ADDRESS:
3610: return (! TEST_HARD_REG_BIT (reload_reg_used_in_output_addr, regno)
3611: && ! TEST_HARD_REG_BIT (reload_reg_used_in_output, regno));
3612: case RELOAD_FOR_OPERAND_ADDRESS:
3613: return (! TEST_HARD_REG_BIT (reload_reg_used_in_op_addr, regno)
3614: && ! TEST_HARD_REG_BIT (reload_reg_used_in_input, regno)
3615: && ! TEST_HARD_REG_BIT (reload_reg_used_in_output, regno));
3616: case RELOAD_FOR_OUTPUT:
3617: return (! TEST_HARD_REG_BIT (reload_reg_used_in_op_addr, regno)
3618: && ! TEST_HARD_REG_BIT (reload_reg_used_in_output_addr, regno)
3619: && ! TEST_HARD_REG_BIT (reload_reg_used_in_output, regno));
3620: }
3621: abort ();
3622: }
3623:
3624: /* Return 1 if the value in reload reg REGNO, as used by a reload
3625: needed for the part of the insn specified by WHEN_NEEDED,
3626: is not in use for a reload in any prior part of the insn.
3627:
3628: We can assume that the reload reg was already tested for availability
3629: at the time it is needed, and we should not check this again,
3630: in case the reg has already been marked in use. */
3631:
3632: static int
3633: reload_reg_free_before_p (regno, when_needed)
3634: int regno;
3635: enum reload_when_needed when_needed;
3636: {
3637: switch (when_needed)
3638: {
3639: case RELOAD_OTHER:
3640: /* Since a RELOAD_OTHER reload claims the reg for the entire insn,
3641: its use starts from the beginning, so nothing can use it earlier. */
3642: return 1;
3643:
3644: /* If this use is for part of the insn,
3645: check the reg is not in use for any prior part. */
3646: case RELOAD_FOR_OUTPUT_RELOAD_ADDRESS:
3647: if (TEST_HARD_REG_BIT (reload_reg_used_in_op_addr, regno))
3648: return 0;
3649: case RELOAD_FOR_OUTPUT:
3650: if (TEST_HARD_REG_BIT (reload_reg_used_in_input, regno))
3651: return 0;
3652: case RELOAD_FOR_OPERAND_ADDRESS:
3653: if (TEST_HARD_REG_BIT (reload_reg_used_in_input_addr, regno))
3654: return 0;
3655: case RELOAD_FOR_INPUT_RELOAD_ADDRESS:
3656: case RELOAD_FOR_INPUT:
3657: return 1;
3658: }
3659: abort ();
3660: }
3661:
3662: /* Return 1 if the value in reload reg REGNO, as used by a reload
3663: needed for the part of the insn specified by WHEN_NEEDED,
3664: is still available in REGNO at the end of the insn.
3665:
3666: We can assume that the reload reg was already tested for availability
3667: at the time it is needed, and we should not check this again,
3668: in case the reg has already been marked in use. */
3669:
3670: static int
3671: reload_reg_reaches_end_p (regno, when_needed)
3672: int regno;
3673: enum reload_when_needed when_needed;
3674: {
3675: switch (when_needed)
3676: {
3677: case RELOAD_OTHER:
3678: /* Since a RELOAD_OTHER reload claims the reg for the entire insn,
3679: its value must reach the end. */
3680: return 1;
3681:
3682: /* If this use is for part of the insn,
3683: its value reaches if no subsequent part uses the same register. */
3684: case RELOAD_FOR_INPUT_RELOAD_ADDRESS:
3685: case RELOAD_FOR_INPUT:
3686: if (TEST_HARD_REG_BIT (reload_reg_used_in_op_addr, regno)
3687: || TEST_HARD_REG_BIT (reload_reg_used_in_output, regno))
3688: return 0;
3689: case RELOAD_FOR_OPERAND_ADDRESS:
3690: if (TEST_HARD_REG_BIT (reload_reg_used_in_output_addr, regno))
3691: return 0;
3692: case RELOAD_FOR_OUTPUT:
3693: case RELOAD_FOR_OUTPUT_RELOAD_ADDRESS:
3694: return 1;
3695: }
3696: abort ();
3697: }
3698:
3699: /* Vector of reload-numbers showing the order in which the reloads should
3700: be processed. */
3701: short reload_order[MAX_RELOADS];
3702:
3703: /* Indexed by reload number, 1 if incoming value
3704: inherited from previous insns. */
3705: char reload_inherited[MAX_RELOADS];
3706:
3707: /* For an inherited reload, this is the insn the reload was inherited from,
3708: if we know it. Otherwise, this is 0. */
3709: rtx reload_inheritance_insn[MAX_RELOADS];
3710:
3711: /* If non-zero, this is a place to get the value of the reload,
3712: rather than using reload_in. */
3713: rtx reload_override_in[MAX_RELOADS];
3714:
3715: /* For each reload, the index in spill_regs of the spill register used,
3716: or -1 if we did not need one of the spill registers for this reload. */
3717: int reload_spill_index[MAX_RELOADS];
3718:
3719: /* Index of last register assigned as a spill register. We allocate in
3720: a round-robin fashio. */
3721:
3722: static last_spill_reg = 0;
3723:
3724: /* Find a spill register to use as a reload register for reload R.
3725: LAST_RELOAD is non-zero if this is the last reload for the insn being
3726: processed.
3727:
3728: Set reload_reg_rtx[R] to the register allocated.
3729:
3730: If NOERROR is nonzero, we return 1 if successful,
3731: or 0 if we couldn't find a spill reg and we didn't change anything. */
3732:
3733: static int
3734: allocate_reload_reg (r, insn, last_reload, noerror)
3735: int r;
3736: rtx insn;
3737: int last_reload;
3738: int noerror;
3739: {
3740: int i;
3741: int pass;
3742: int count;
3743: rtx new;
3744: int regno;
3745:
3746: /* If we put this reload ahead, thinking it is a group,
3747: then insist on finding a group. Otherwise we can grab a
3748: reg that some other reload needs.
3749: (That can happen when we have a 68000 DATA_OR_FP_REG
3750: which is a group of data regs or one fp reg.)
3751: We need not be so restrictive if there are no more reloads
3752: for this insn.
3753:
3754: ??? Really it would be nicer to have smarter handling
3755: for that kind of reg class, where a problem like this is normal.
3756: Perhaps those classes should be avoided for reloading
3757: by use of more alternatives. */
3758:
3759: int force_group = reload_nregs[r] > 1 && ! last_reload;
3760:
3761: /* If we want a single register and haven't yet found one,
3762: take any reg in the right class and not in use.
3763: If we want a consecutive group, here is where we look for it.
3764:
3765: We use two passes so we can first look for reload regs to
3766: reuse, which are already in use for other reloads in this insn,
3767: and only then use additional registers.
3768: I think that maximizing reuse is needed to make sure we don't
3769: run out of reload regs. Suppose we have three reloads, and
3770: reloads A and B can share regs. These need two regs.
3771: Suppose A and B are given different regs.
3772: That leaves none for C. */
3773: for (pass = 0; pass < 2; pass++)
3774: {
3775: /* I is the index in spill_regs.
3776: We advance it round-robin between insns to use all spill regs
3777: equally, so that inherited reloads have a chance
3778: of leapfrogging each other. */
3779:
3780: for (count = 0, i = last_spill_reg; count < n_spills; count++)
3781: {
3782: int class = (int) reload_reg_class[r];
3783:
3784: i = (i + 1) % n_spills;
3785:
3786: if (reload_reg_free_p (spill_regs[i], reload_when_needed[r])
3787: && TEST_HARD_REG_BIT (reg_class_contents[class], spill_regs[i])
3788: && HARD_REGNO_MODE_OK (spill_regs[i], reload_mode[r])
3789: /* Look first for regs to share, then for unshared. */
3790: && (pass || TEST_HARD_REG_BIT (reload_reg_used_at_all,
3791: spill_regs[i])))
3792: {
3793: int nr = HARD_REGNO_NREGS (spill_regs[i], reload_mode[r]);
3794: /* Avoid the problem where spilling a GENERAL_OR_FP_REG
3795: (on 68000) got us two FP regs. If NR is 1,
3796: we would reject both of them. */
3797: if (force_group)
3798: nr = CLASS_MAX_NREGS (reload_reg_class[r], reload_mode[r]);
3799: /* If we need only one reg, we have already won. */
3800: if (nr == 1)
3801: {
3802: /* But reject a single reg if we demand a group. */
3803: if (force_group)
3804: continue;
3805: break;
3806: }
3807: /* Otherwise check that as many consecutive regs as we need
3808: are available here.
3809: Also, don't use for a group registers that are
3810: needed for nongroups. */
3811: if (! TEST_HARD_REG_BIT (counted_for_nongroups, spill_regs[i]))
3812: while (nr > 1)
3813: {
3814: regno = spill_regs[i] + nr - 1;
3815: if (!(TEST_HARD_REG_BIT (reg_class_contents[class], regno)
3816: && spill_reg_order[regno] >= 0
3817: && reload_reg_free_p (regno, reload_when_needed[r])
3818: && ! TEST_HARD_REG_BIT (counted_for_nongroups,
3819: regno)))
3820: break;
3821: nr--;
3822: }
3823: if (nr == 1)
3824: break;
3825: }
3826: }
3827:
3828: /* If we found something on pass 1, omit pass 2. */
3829: if (count < n_spills)
3830: break;
3831: }
3832:
3833: /* We should have found a spill register by now. */
3834: if (count == n_spills)
3835: {
3836: if (noerror)
3837: return 0;
3838: abort ();
3839: }
3840:
3841: last_spill_reg = i;
3842:
3843: /* Mark as in use for this insn the reload regs we use for this. */
3844: mark_reload_reg_in_use (spill_regs[i], reload_when_needed[r],
3845: reload_mode[r]);
3846:
3847: new = spill_reg_rtx[i];
3848:
3849: if (new == 0 || GET_MODE (new) != reload_mode[r])
3850: spill_reg_rtx[i] = new = gen_rtx (REG, reload_mode[r], spill_regs[i]);
3851:
3852: reload_reg_rtx[r] = new;
3853: reload_spill_index[r] = i;
3854: regno = true_regnum (new);
3855:
3856: /* Detect when the reload reg can't hold the reload mode.
3857: This used to be one `if', but Sequent compiler can't handle that. */
3858: if (HARD_REGNO_MODE_OK (regno, reload_mode[r]))
3859: {
3860: enum machine_mode test_mode = VOIDmode;
3861: if (reload_in[r])
3862: test_mode = GET_MODE (reload_in[r]);
3863: /* If reload_in[r] has VOIDmode, it means we will load it
3864: in whatever mode the reload reg has: to wit, reload_mode[r].
3865: We have already tested that for validity. */
3866: /* Aside from that, we need to test that the expressions
3867: to reload from or into have modes which are valid for this
3868: reload register. Otherwise the reload insns would be invalid. */
3869: if (! (reload_in[r] != 0 && test_mode != VOIDmode
3870: && ! HARD_REGNO_MODE_OK (regno, test_mode)))
3871: if (! (reload_out[r] != 0
3872: && ! HARD_REGNO_MODE_OK (regno, GET_MODE (reload_out[r]))))
3873: /* The reg is OK. */
3874: return 1;
3875: }
3876:
3877: /* The reg is not OK. */
3878: if (noerror)
3879: return 0;
3880:
3881: if (asm_noperands (PATTERN (insn)) < 0)
3882: /* It's the compiler's fault. */
3883: abort ();
3884:
3885: /* It's the user's fault; the operand's mode and constraint
3886: don't match. Disable this reload so we don't crash in final. */
3887: error_for_asm (insn,
3888: "`asm' operand constraint incompatible with operand size");
3889: reload_in[r] = 0;
3890: reload_out[r] = 0;
3891: reload_reg_rtx[r] = 0;
3892: reload_optional[r] = 1;
3893: reload_secondary_p[r] = 1;
3894:
3895: return 1;
3896: }
3897:
3898: /* Assign hard reg targets for the pseudo-registers we must reload
3899: into hard regs for this insn.
3900: Also output the instructions to copy them in and out of the hard regs.
3901:
3902: For machines with register classes, we are responsible for
3903: finding a reload reg in the proper class. */
3904:
3905: static void
3906: choose_reload_regs (insn, avoid_return_reg)
3907: rtx insn;
3908: /* This argument is currently ignored. */
3909: rtx avoid_return_reg;
3910: {
3911: register int i, j;
3912: int max_group_size = 1;
3913: enum reg_class group_class = NO_REGS;
3914: int inheritance;
3915:
3916: rtx save_reload_reg_rtx[MAX_RELOADS];
3917: char save_reload_inherited[MAX_RELOADS];
3918: rtx save_reload_inheritance_insn[MAX_RELOADS];
3919: rtx save_reload_override_in[MAX_RELOADS];
3920: int save_reload_spill_index[MAX_RELOADS];
3921: HARD_REG_SET save_reload_reg_used;
3922: HARD_REG_SET save_reload_reg_used_in_input_addr;
3923: HARD_REG_SET save_reload_reg_used_in_output_addr;
3924: HARD_REG_SET save_reload_reg_used_in_op_addr;
3925: HARD_REG_SET save_reload_reg_used_in_input;
3926: HARD_REG_SET save_reload_reg_used_in_output;
3927: HARD_REG_SET save_reload_reg_used_at_all;
3928:
3929: bzero (reload_inherited, MAX_RELOADS);
3930: bzero (reload_inheritance_insn, MAX_RELOADS * sizeof (rtx));
3931: bzero (reload_override_in, MAX_RELOADS * sizeof (rtx));
3932:
3933: CLEAR_HARD_REG_SET (reload_reg_used);
3934: CLEAR_HARD_REG_SET (reload_reg_used_at_all);
3935: CLEAR_HARD_REG_SET (reload_reg_used_in_input_addr);
3936: CLEAR_HARD_REG_SET (reload_reg_used_in_output_addr);
3937: CLEAR_HARD_REG_SET (reload_reg_used_in_op_addr);
3938: CLEAR_HARD_REG_SET (reload_reg_used_in_output);
3939: CLEAR_HARD_REG_SET (reload_reg_used_in_input);
3940:
3941: /* Distinguish output-only and input-only reloads
3942: because they can overlap with other things. */
3943: for (j = 0; j < n_reloads; j++)
3944: if (reload_when_needed[j] == RELOAD_OTHER
3945: && ! reload_needed_for_multiple[j])
3946: {
3947: if (reload_in[j] == 0)
3948: {
3949: /* But earlyclobber operands must stay as RELOAD_OTHER. */
3950: for (i = 0; i < n_earlyclobbers; i++)
3951: if (rtx_equal_p (reload_out[j], reload_earlyclobbers[i]))
3952: break;
3953: if (i == n_earlyclobbers)
3954: reload_when_needed[j] = RELOAD_FOR_OUTPUT;
3955: }
3956: if (reload_out[j] == 0)
3957: reload_when_needed[j] = RELOAD_FOR_INPUT;
3958:
3959: if (reload_secondary_reload[j] >= 0
3960: && ! reload_needed_for_multiple[reload_secondary_reload[j]])
3961: reload_when_needed[reload_secondary_reload[j]]
3962: = reload_when_needed[j];
3963: }
3964:
3965: #ifdef SMALL_REGISTER_CLASSES
3966: /* Don't bother with avoiding the return reg
3967: if we have no mandatory reload that could use it. */
3968: if (avoid_return_reg)
3969: {
3970: int do_avoid = 0;
3971: int regno = REGNO (avoid_return_reg);
3972: int nregs
3973: = HARD_REGNO_NREGS (regno, GET_MODE (avoid_return_reg));
3974: int r;
3975:
3976: for (r = regno; r < regno + nregs; r++)
3977: if (spill_reg_order[r] >= 0)
3978: for (j = 0; j < n_reloads; j++)
3979: if (!reload_optional[j] && reload_reg_rtx[j] == 0
3980: && (reload_in[j] != 0 || reload_out[j] != 0
3981: || reload_secondary_p[j])
3982: &&
3983: TEST_HARD_REG_BIT (reg_class_contents[(int) reload_reg_class[j]], r))
3984: do_avoid = 1;
3985: if (!do_avoid)
3986: avoid_return_reg = 0;
3987: }
3988: #endif /* SMALL_REGISTER_CLASSES */
3989:
3990: #if 0 /* Not needed, now that we can always retry without inheritance. */
3991: /* See if we have more mandatory reloads than spill regs.
3992: If so, then we cannot risk optimizations that could prevent
3993: reloads from sharing one spill register.
3994:
3995: Since we will try finding a better register than reload_reg_rtx
3996: unless it is equal to reload_in or reload_out, count such reloads. */
3997:
3998: {
3999: int tem = 0;
4000: #ifdef SMALL_REGISTER_CLASSES
4001: int tem = (avoid_return_reg != 0);
4002: #endif
4003: for (j = 0; j < n_reloads; j++)
4004: if (! reload_optional[j]
4005: && (reload_in[j] != 0 || reload_out[j] != 0 || reload_secondary_p[j])
4006: && (reload_reg_rtx[j] == 0
4007: || (! rtx_equal_p (reload_reg_rtx[j], reload_in[j])
4008: && ! rtx_equal_p (reload_reg_rtx[j], reload_out[j]))))
4009: tem++;
4010: if (tem > n_spills)
4011: must_reuse = 1;
4012: }
4013: #endif
4014:
4015: #ifdef SMALL_REGISTER_CLASSES
4016: /* Don't use the subroutine call return reg for a reload
4017: if we are supposed to avoid it. */
4018: if (avoid_return_reg)
4019: {
4020: int regno = REGNO (avoid_return_reg);
4021: int nregs
4022: = HARD_REGNO_NREGS (regno, GET_MODE (avoid_return_reg));
4023: int r;
4024:
4025: for (r = regno; r < regno + nregs; r++)
4026: if (spill_reg_order[r] >= 0)
4027: SET_HARD_REG_BIT (reload_reg_used, r);
4028: }
4029: #endif /* SMALL_REGISTER_CLASSES */
4030:
4031: /* In order to be certain of getting the registers we need,
4032: we must sort the reloads into order of increasing register class.
4033: Then our grabbing of reload registers will parallel the process
4034: that provided the reload registers.
4035:
4036: Also note whether any of the reloads wants a consecutive group of regs.
4037: If so, record the maximum size of the group desired and what
4038: register class contains all the groups needed by this insn. */
4039:
4040: for (j = 0; j < n_reloads; j++)
4041: {
4042: reload_order[j] = j;
4043: reload_spill_index[j] = -1;
4044:
4045: reload_mode[j]
4046: = (reload_strict_low[j] && reload_out[j]
4047: ? GET_MODE (SUBREG_REG (reload_out[j]))
4048: : (reload_inmode[j] == VOIDmode
4049: || (GET_MODE_SIZE (reload_outmode[j])
4050: > GET_MODE_SIZE (reload_inmode[j])))
4051: ? reload_outmode[j] : reload_inmode[j]);
4052:
4053: reload_nregs[j] = CLASS_MAX_NREGS (reload_reg_class[j], reload_mode[j]);
4054:
4055: if (reload_nregs[j] > 1)
4056: {
4057: max_group_size = MAX (reload_nregs[j], max_group_size);
4058: group_class = reg_class_superunion[(int)reload_reg_class[j]][(int)group_class];
4059: }
4060:
4061: /* If we have already decided to use a certain register,
4062: don't use it in another way. */
4063: if (reload_reg_rtx[j])
4064: mark_reload_reg_in_use (REGNO (reload_reg_rtx[j]),
4065: reload_when_needed[j], reload_mode[j]);
4066: }
4067:
4068: if (n_reloads > 1)
4069: qsort (reload_order, n_reloads, sizeof (short), reload_reg_class_lower);
4070:
4071: bcopy (reload_reg_rtx, save_reload_reg_rtx, sizeof reload_reg_rtx);
4072: bcopy (reload_inherited, save_reload_inherited, sizeof reload_inherited);
4073: bcopy (reload_inheritance_insn, save_reload_inheritance_insn,
4074: sizeof reload_inheritance_insn);
4075: bcopy (reload_override_in, save_reload_override_in,
4076: sizeof reload_override_in);
4077: bcopy (reload_spill_index, save_reload_spill_index,
4078: sizeof reload_spill_index);
4079: COPY_HARD_REG_SET (save_reload_reg_used, reload_reg_used);
4080: COPY_HARD_REG_SET (save_reload_reg_used_at_all, reload_reg_used_at_all);
4081: COPY_HARD_REG_SET (save_reload_reg_used_in_output,
4082: reload_reg_used_in_output);
4083: COPY_HARD_REG_SET (save_reload_reg_used_in_input,
4084: reload_reg_used_in_input);
4085: COPY_HARD_REG_SET (save_reload_reg_used_in_input_addr,
4086: reload_reg_used_in_input_addr);
4087: COPY_HARD_REG_SET (save_reload_reg_used_in_output_addr,
4088: reload_reg_used_in_output_addr);
4089: COPY_HARD_REG_SET (save_reload_reg_used_in_op_addr,
4090: reload_reg_used_in_op_addr);
4091:
4092: /* Try first with inheritance, then turning it off. */
4093:
4094: for (inheritance = 1; inheritance >= 0; inheritance--)
4095: {
4096: /* Process the reloads in order of preference just found.
4097: Beyond this point, subregs can be found in reload_reg_rtx.
4098:
4099: This used to look for an existing reloaded home for all
4100: of the reloads, and only then perform any new reloads.
4101: But that could lose if the reloads were done out of reg-class order
4102: because a later reload with a looser constraint might have an old
4103: home in a register needed by an earlier reload with a tighter constraint.
4104:
4105: To solve this, we make two passes over the reloads, in the order
4106: described above. In the first pass we try to inherit a reload
4107: from a previous insn. If there is a later reload that needs a
4108: class that is a proper subset of the class being processed, we must
4109: also allocate a spill register during the first pass.
4110:
4111: Then make a second pass over the reloads to allocate any reloads
4112: that haven't been given registers yet. */
4113:
4114: for (j = 0; j < n_reloads; j++)
4115: {
4116: register int r = reload_order[j];
4117:
4118: /* Ignore reloads that got marked inoperative. */
4119: if (reload_out[r] == 0 && reload_in[r] == 0 && ! reload_secondary_p[r])
4120: continue;
4121:
4122: /* If find_reloads chose a to use reload_in or reload_out as a reload
4123: register, we don't need to chose one. Otherwise, try even if it found
4124: one since we might save an insn if we find the value lying around. */
4125: if (reload_in[r] != 0 && reload_reg_rtx[r] != 0
4126: && (rtx_equal_p (reload_in[r], reload_reg_rtx[r])
4127: || rtx_equal_p (reload_out[r], reload_reg_rtx[r])))
4128: continue;
4129:
4130: #if 0 /* No longer needed for correct operation.
4131: It might give better code, or might not; worth an experiment? */
4132: /* If this is an optional reload, we can't inherit from earlier insns
4133: until we are sure that any non-optional reloads have been allocated.
4134: The following code takes advantage of the fact that optional reloads
4135: are at the end of reload_order. */
4136: if (reload_optional[r] != 0)
4137: for (i = 0; i < j; i++)
4138: if ((reload_out[reload_order[i]] != 0
4139: || reload_in[reload_order[i]] != 0
4140: || reload_secondary_p[reload_order[i]])
4141: && ! reload_optional[reload_order[i]]
4142: && reload_reg_rtx[reload_order[i]] == 0)
4143: allocate_reload_reg (reload_order[i], insn, 0, inheritance);
4144: #endif
4145:
4146: /* First see if this pseudo is already available as reloaded
4147: for a previous insn. We cannot try to inherit for reloads
4148: that are smaller than the maximum number of registers needed
4149: for groups unless the register we would allocate cannot be used
4150: for the groups.
4151:
4152: We could check here to see if this is a secondary reload for
4153: an object that is already in a register of the desired class.
4154: This would avoid the need for the secondary reload register.
4155: But this is complex because we can't easily determine what
4156: objects might want to be loaded via this reload. So let a register
4157: be allocated here. In `emit_reload_insns' we suppress one of the
4158: loads in the case described above. */
4159:
4160: if (inheritance)
4161: {
4162: register int regno = -1;
4163:
4164: if (reload_in[r] == 0)
4165: ;
4166: else if (GET_CODE (reload_in[r]) == REG)
4167: regno = REGNO (reload_in[r]);
4168: else if (GET_CODE (reload_in_reg[r]) == REG)
4169: regno = REGNO (reload_in_reg[r]);
4170: #if 0
4171: /* This won't work, since REGNO can be a pseudo reg number.
4172: Also, it takes much more hair to keep track of all the things
4173: that can invalidate an inherited reload of part of a pseudoreg. */
4174: else if (GET_CODE (reload_in[r]) == SUBREG
4175: && GET_CODE (SUBREG_REG (reload_in[r])) == REG)
4176: regno = REGNO (SUBREG_REG (reload_in[r])) + SUBREG_WORD (reload_in[r]);
4177: #endif
4178:
4179: if (regno >= 0 && reg_last_reload_reg[regno] != 0)
4180: {
4181: i = spill_reg_order[REGNO (reg_last_reload_reg[regno])];
4182:
4183: if (reg_reloaded_contents[i] == regno
4184: && HARD_REGNO_MODE_OK (spill_regs[i], reload_mode[r])
4185: && TEST_HARD_REG_BIT (reg_class_contents[(int) reload_reg_class[r]],
4186: spill_regs[i])
4187: && (reload_nregs[r] == max_group_size
4188: || ! TEST_HARD_REG_BIT (reg_class_contents[(int) group_class],
4189: spill_regs[i]))
4190: && reload_reg_free_p (spill_regs[i], reload_when_needed[r])
4191: && reload_reg_free_before_p (spill_regs[i],
4192: reload_when_needed[r]))
4193: {
4194: /* If a group is needed, verify that all the subsequent
4195: registers still have their values intact. */
4196: int nr
4197: = HARD_REGNO_NREGS (spill_regs[i], reload_mode[r]);
4198: int k;
4199:
4200: for (k = 1; k < nr; k++)
4201: if (reg_reloaded_contents[spill_reg_order[spill_regs[i] + k]]
4202: != regno)
4203: break;
4204:
4205: if (k == nr)
4206: {
4207: /* Mark the register as in use for this part of
4208: the insn. */
4209: mark_reload_reg_in_use (spill_regs[i],
4210: reload_when_needed[r],
4211: reload_mode[r]);
4212: reload_reg_rtx[r] = reg_last_reload_reg[regno];
4213: reload_inherited[r] = 1;
4214: reload_inheritance_insn[r] = reg_reloaded_insn[i];
4215: reload_spill_index[r] = i;
4216: }
4217: }
4218: }
4219: }
4220:
4221: /* Here's another way to see if the value is already lying around. */
4222: if (inheritance
4223: && reload_in[r] != 0
4224: && ! reload_inherited[r]
4225: && reload_out[r] == 0
4226: && (CONSTANT_P (reload_in[r])
4227: || GET_CODE (reload_in[r]) == PLUS
4228: || GET_CODE (reload_in[r]) == REG
4229: || GET_CODE (reload_in[r]) == MEM)
4230: && (reload_nregs[r] == max_group_size
4231: || ! reg_classes_intersect_p (reload_reg_class[r], group_class)))
4232: {
4233: register rtx equiv
4234: = find_equiv_reg (reload_in[r], insn, reload_reg_class[r],
4235: -1, 0, 0, reload_mode[r]);
4236: int regno;
4237:
4238: if (equiv != 0)
4239: {
4240: if (GET_CODE (equiv) == REG)
4241: regno = REGNO (equiv);
4242: else if (GET_CODE (equiv) == SUBREG)
4243: {
4244: regno = REGNO (SUBREG_REG (equiv));
4245: if (regno < FIRST_PSEUDO_REGISTER)
4246: regno += SUBREG_WORD (equiv);
4247: }
4248: else
4249: abort ();
4250: }
4251:
4252: /* If we found a spill reg, reject it unless it is free
4253: and of the desired class. */
4254: if (equiv != 0
4255: && ((spill_reg_order[regno] >= 0
4256: && ! reload_reg_free_before_p (regno,
4257: reload_when_needed[r]))
4258: || ! TEST_HARD_REG_BIT (reg_class_contents[(int) reload_reg_class[r]],
4259: regno)))
4260: equiv = 0;
4261:
4262: if (equiv != 0 && TEST_HARD_REG_BIT (reload_reg_used_at_all, regno))
4263: equiv = 0;
4264:
4265: if (equiv != 0 && ! HARD_REGNO_MODE_OK (regno, reload_mode[r]))
4266: equiv = 0;
4267:
4268: /* We found a register that contains the value we need.
4269: If this register is the same as an `earlyclobber' operand
4270: of the current insn, just mark it as a place to reload from
4271: since we can't use it as the reload register itself. */
4272:
4273: if (equiv != 0)
4274: for (i = 0; i < n_earlyclobbers; i++)
4275: if (reg_overlap_mentioned_p (equiv, reload_earlyclobbers[i]))
4276: {
4277: reload_override_in[r] = equiv;
4278: equiv = 0;
4279: break;
4280: }
4281:
4282: /* JRV: If the equiv register we have found is explicitly
4283: clobbered in the current insn, mark but don't use, as above. */
4284:
4285: if (equiv != 0 && regno_clobbered_p (regno, insn))
4286: {
4287: reload_override_in[r] = equiv;
4288: equiv = 0;
4289: }
4290:
4291: /* If we found an equivalent reg, say no code need be generated
4292: to load it, and use it as our reload reg. */
4293: if (equiv != 0 && regno != FRAME_POINTER_REGNUM)
4294: {
4295: reload_reg_rtx[r] = equiv;
4296: reload_inherited[r] = 1;
4297: /* If it is a spill reg,
4298: mark the spill reg as in use for this insn. */
4299: i = spill_reg_order[regno];
4300: if (i >= 0)
4301: mark_reload_reg_in_use (regno, reload_when_needed[r],
4302: reload_mode[r]);
4303: }
4304: }
4305:
4306: /* If we found a register to use already, or if this is an optional
4307: reload, we are done. */
4308: if (reload_reg_rtx[r] != 0 || reload_optional[r] != 0)
4309: continue;
4310:
4311: #if 0 /* No longer needed for correct operation. Might or might not
4312: give better code on the average. Want to experiment? */
4313:
4314: /* See if there is a later reload that has a class different from our
4315: class that intersects our class or that requires less register
4316: than our reload. If so, we must allocate a register to this
4317: reload now, since that reload might inherit a previous reload
4318: and take the only available register in our class. Don't do this
4319: for optional reloads since they will force all previous reloads
4320: to be allocated. Also don't do this for reloads that have been
4321: turned off. */
4322:
4323: for (i = j + 1; i < n_reloads; i++)
4324: {
4325: int s = reload_order[i];
4326:
1.1.1.2 ! root 4327: if ((reload_in[s] == 0 && reload_out[s] == 0
! 4328: && ! reload_secondary_p[s])
1.1 root 4329: || reload_optional[s])
4330: continue;
4331:
4332: if ((reload_reg_class[s] != reload_reg_class[r]
4333: && reg_classes_intersect_p (reload_reg_class[r],
4334: reload_reg_class[s]))
4335: || reload_nregs[s] < reload_nregs[r])
4336: break;
4337: }
4338:
4339: if (i == n_reloads)
4340: continue;
4341:
4342: allocate_reload_reg (r, insn, j == n_reloads - 1, inheritance);
4343: #endif
4344: }
4345:
4346: /* Now allocate reload registers for anything non-optional that
4347: didn't get one yet. */
4348: for (j = 0; j < n_reloads; j++)
4349: {
4350: register int r = reload_order[j];
4351:
4352: /* Ignore reloads that got marked inoperative. */
4353: if (reload_out[r] == 0 && reload_in[r] == 0 && ! reload_secondary_p[r])
4354: continue;
4355:
4356: /* Skip reloads that already have a register allocated or are
4357: optional. */
4358: if (reload_reg_rtx[r] != 0 || reload_optional[r])
4359: continue;
4360:
4361: if (! allocate_reload_reg (r, insn, j == n_reloads - 1, inheritance))
4362: break;
4363: }
4364:
4365: /* If that loop got all the way, we have won. */
4366: if (j == n_reloads)
4367: break;
4368:
4369: fail:
4370: /* Loop around and try without any inheritance. */
4371: /* First undo everything done by the failed attempt
4372: to allocate with inheritance. */
4373: bcopy (save_reload_reg_rtx, reload_reg_rtx, sizeof reload_reg_rtx);
4374: bcopy (save_reload_inherited, reload_inherited, sizeof reload_inherited);
4375: bcopy (save_reload_inheritance_insn, reload_inheritance_insn,
4376: sizeof reload_inheritance_insn);
4377: bcopy (save_reload_override_in, reload_override_in,
4378: sizeof reload_override_in);
4379: bcopy (save_reload_spill_index, reload_spill_index,
4380: sizeof reload_spill_index);
4381: COPY_HARD_REG_SET (reload_reg_used, save_reload_reg_used);
4382: COPY_HARD_REG_SET (reload_reg_used_at_all, save_reload_reg_used_at_all);
4383: COPY_HARD_REG_SET (reload_reg_used_in_input,
4384: save_reload_reg_used_in_input);
4385: COPY_HARD_REG_SET (reload_reg_used_in_output,
4386: save_reload_reg_used_in_output);
4387: COPY_HARD_REG_SET (reload_reg_used_in_input_addr,
4388: save_reload_reg_used_in_input_addr);
4389: COPY_HARD_REG_SET (reload_reg_used_in_output_addr,
4390: save_reload_reg_used_in_output_addr);
4391: COPY_HARD_REG_SET (reload_reg_used_in_op_addr,
4392: save_reload_reg_used_in_op_addr);
4393: }
4394:
4395: /* If we thought we could inherit a reload, because it seemed that
4396: nothing else wanted the same reload register earlier in the insn,
4397: verify that assumption, now that all reloads have been assigned. */
4398:
4399: for (j = 0; j < n_reloads; j++)
4400: {
4401: register int r = reload_order[j];
4402:
4403: if (reload_inherited[r] && reload_reg_rtx[r] != 0
4404: && ! reload_reg_free_before_p (true_regnum (reload_reg_rtx[r]),
4405: reload_when_needed[r]))
4406: reload_inherited[r] = 0;
4407:
4408: /* If we found a better place to reload from,
4409: validate it in the same fashion, if it is a reload reg. */
4410: if (reload_override_in[r]
4411: && (GET_CODE (reload_override_in[r]) == REG
4412: || GET_CODE (reload_override_in[r]) == SUBREG))
4413: {
4414: int regno = true_regnum (reload_override_in[r]);
4415: if (spill_reg_order[regno] >= 0
4416: && ! reload_reg_free_before_p (regno, reload_when_needed[r]))
4417: reload_override_in[r] = 0;
4418: }
4419: }
4420:
4421: /* Now that reload_override_in is known valid,
4422: actually override reload_in. */
4423: for (j = 0; j < n_reloads; j++)
4424: if (reload_override_in[j])
4425: reload_in[j] = reload_override_in[j];
4426:
4427: /* If this reload won't be done because it has been cancelled or is
4428: optional and not inherited, clear reload_reg_rtx so other
4429: routines (such as subst_reloads) don't get confused. */
4430: for (j = 0; j < n_reloads; j++)
4431: if ((reload_optional[j] && ! reload_inherited[j])
4432: || (reload_in[j] == 0 && reload_out[j] == 0
4433: && ! reload_secondary_p[j]))
4434: reload_reg_rtx[j] = 0;
4435:
4436: /* Record which pseudos and which spill regs have output reloads. */
4437: for (j = 0; j < n_reloads; j++)
4438: {
4439: register int r = reload_order[j];
4440:
4441: i = reload_spill_index[r];
4442:
4443: /* I is nonneg if this reload used one of the spill regs.
4444: If reload_reg_rtx[r] is 0, this is an optional reload
4445: that we opted to ignore. */
4446: if (reload_out[r] != 0 && GET_CODE (reload_out[r]) == REG
4447: && reload_reg_rtx[r] != 0)
4448: {
4449: register int nregno = REGNO (reload_out[r]);
4450: int nr = HARD_REGNO_NREGS (nregno, reload_mode[r]);
4451:
4452: while (--nr >= 0)
4453: {
4454: reg_has_output_reload[nregno + nr] = 1;
4455: if (i >= 0)
4456: SET_HARD_REG_BIT (reg_is_output_reload, spill_regs[i] + nr);
4457: }
4458:
4459: if (reload_when_needed[r] != RELOAD_OTHER
4460: && reload_when_needed[r] != RELOAD_FOR_OUTPUT)
4461: abort ();
4462: }
4463: }
4464: }
4465:
4466: /* Output insns to reload values in and out of the chosen reload regs. */
4467:
4468: static void
4469: emit_reload_insns (insn)
4470: rtx insn;
4471: {
4472: register int j;
4473: rtx following_insn = NEXT_INSN (insn);
4474: rtx before_insn = insn;
4475: rtx first_output_reload_insn = NEXT_INSN (insn);
4476: rtx first_other_reload_insn = insn;
4477: rtx first_operand_address_reload_insn = insn;
4478: int special;
4479: /* Values to be put in spill_reg_store are put here first. */
4480: rtx new_spill_reg_store[FIRST_PSEUDO_REGISTER];
4481:
1.1.1.2 ! root 4482: /* If this is a CALL_INSN preceded by USE insns, any reload insns
1.1 root 4483: must go in front of the first USE insn, not in front of INSN. */
4484:
4485: if (GET_CODE (insn) == CALL_INSN && GET_CODE (PREV_INSN (insn)) == INSN
4486: && GET_CODE (PATTERN (PREV_INSN (insn))) == USE)
4487: while (GET_CODE (PREV_INSN (before_insn)) == INSN
4488: && GET_CODE (PATTERN (PREV_INSN (before_insn))) == USE)
4489: first_other_reload_insn = first_operand_address_reload_insn
4490: = before_insn = PREV_INSN (before_insn);
4491:
4492: /* Now output the instructions to copy the data into and out of the
4493: reload registers. Do these in the order that the reloads were reported,
4494: since reloads of base and index registers precede reloads of operands
4495: and the operands may need the base and index registers reloaded. */
4496:
4497: for (j = 0; j < n_reloads; j++)
4498: {
4499: register rtx old;
4500: rtx oldequiv_reg = 0;
4501: rtx this_reload_insn = 0;
4502: rtx store_insn = 0;
4503:
4504: old = reload_in[j];
4505: if (old != 0 && ! reload_inherited[j]
4506: && ! rtx_equal_p (reload_reg_rtx[j], old)
4507: && reload_reg_rtx[j] != 0)
4508: {
4509: register rtx reloadreg = reload_reg_rtx[j];
4510: rtx oldequiv = 0;
4511: enum machine_mode mode;
4512: rtx where;
4513: rtx reload_insn;
4514:
4515: /* Determine the mode to reload in.
4516: This is very tricky because we have three to choose from.
4517: There is the mode the insn operand wants (reload_inmode[J]).
4518: There is the mode of the reload register RELOADREG.
4519: There is the intrinsic mode of the operand, which we could find
4520: by stripping some SUBREGs.
4521: It turns out that RELOADREG's mode is irrelevant:
4522: we can change that arbitrarily.
4523:
4524: Consider (SUBREG:SI foo:QI) as an operand that must be SImode;
4525: then the reload reg may not support QImode moves, so use SImode.
4526: If foo is in memory due to spilling a pseudo reg, this is safe,
4527: because the QImode value is in the least significant part of a
4528: slot big enough for a SImode. If foo is some other sort of
4529: memory reference, then it is impossible to reload this case,
4530: so previous passes had better make sure this never happens.
4531:
4532: Then consider a one-word union which has SImode and one of its
4533: members is a float, being fetched as (SUBREG:SF union:SI).
4534: We must fetch that as SFmode because we could be loading into
4535: a float-only register. In this case OLD's mode is correct.
4536:
4537: Consider an immediate integer: it has VOIDmode. Here we need
4538: to get a mode from something else.
4539:
4540: In some cases, there is a fourth mode, the operand's
4541: containing mode. If the insn specifies a containing mode for
4542: this operand, it overrides all others.
4543:
4544: I am not sure whether the algorithm here is always right,
4545: but it does the right things in those cases. */
4546:
4547: mode = GET_MODE (old);
4548: if (mode == VOIDmode)
4549: mode = reload_inmode[j];
4550: if (reload_strict_low[j])
4551: mode = GET_MODE (SUBREG_REG (reload_in[j]));
4552:
4553: #ifdef SECONDARY_INPUT_RELOAD_CLASS
4554: /* If we need a secondary register for this operation, see if
4555: the value is already in a register in that class. Don't
4556: do this if the secondary register will be used as a scratch
4557: register. */
4558:
4559: if (reload_secondary_reload[j] >= 0
4560: && reload_secondary_icode[j] == CODE_FOR_nothing)
4561: oldequiv
4562: = find_equiv_reg (old, insn,
4563: reload_reg_class[reload_secondary_reload[j]],
4564: -1, 0, 0, mode);
4565: #endif
4566:
4567: /* If reloading from memory, see if there is a register
4568: that already holds the same value. If so, reload from there.
4569: We can pass 0 as the reload_reg_p argument because
4570: any other reload has either already been emitted,
4571: in which case find_equiv_reg will see the reload-insn,
4572: or has yet to be emitted, in which case it doesn't matter
4573: because we will use this equiv reg right away. */
4574:
4575: if (oldequiv == 0
4576: && (GET_CODE (old) == MEM
4577: || (GET_CODE (old) == REG
4578: && REGNO (old) >= FIRST_PSEUDO_REGISTER
4579: && reg_renumber[REGNO (old)] < 0)))
4580: oldequiv = find_equiv_reg (old, insn, GENERAL_REGS,
4581: -1, 0, 0, mode);
4582:
4583: if (oldequiv)
4584: {
4585: int regno = true_regnum (oldequiv);
4586:
4587: /* If OLDEQUIV is a spill register, don't use it for this
4588: if any other reload needs it at an earlier stage of this insn
4589: or at this stage. */
4590: if (spill_reg_order[regno] >= 0
4591: && (! reload_reg_free_p (regno, reload_when_needed[j])
4592: || ! reload_reg_free_before_p (regno,
4593: reload_when_needed[j])))
4594: oldequiv = 0;
4595:
4596: /* If OLDEQUIV is not a spill register,
4597: don't use it if any other reload wants it. */
4598: if (spill_reg_order[regno] < 0)
4599: {
4600: int k;
4601: for (k = 0; k < n_reloads; k++)
4602: if (reload_reg_rtx[k] != 0 && k != j
4603: && reg_overlap_mentioned_p (reload_reg_rtx[k], oldequiv))
4604: {
4605: oldequiv = 0;
4606: break;
4607: }
4608: }
4609: }
4610:
4611: if (oldequiv == 0)
4612: oldequiv = old;
4613: else if (GET_CODE (oldequiv) == REG)
4614: oldequiv_reg = oldequiv;
4615: else if (GET_CODE (oldequiv) == SUBREG)
4616: oldequiv_reg = SUBREG_REG (oldequiv);
4617:
4618: /* Encapsulate both RELOADREG and OLDEQUIV into that mode,
4619: then load RELOADREG from OLDEQUIV. */
4620:
4621: if (GET_MODE (reloadreg) != mode)
4622: reloadreg = gen_rtx (REG, mode, REGNO (reloadreg));
4623: while (GET_CODE (oldequiv) == SUBREG && GET_MODE (oldequiv) != mode)
4624: oldequiv = SUBREG_REG (oldequiv);
4625: if (GET_MODE (oldequiv) != VOIDmode
4626: && mode != GET_MODE (oldequiv))
4627: oldequiv = gen_rtx (SUBREG, mode, oldequiv, 0);
4628:
4629: /* Decide where to put reload insn for this reload. */
4630: switch (reload_when_needed[j])
4631: {
4632: case RELOAD_FOR_INPUT:
4633: case RELOAD_OTHER:
4634: where = first_operand_address_reload_insn;
4635: break;
4636: case RELOAD_FOR_INPUT_RELOAD_ADDRESS:
4637: where = first_other_reload_insn;
4638: break;
4639: case RELOAD_FOR_OUTPUT_RELOAD_ADDRESS:
4640: where = first_output_reload_insn;
4641: break;
4642: case RELOAD_FOR_OPERAND_ADDRESS:
4643: where = before_insn;
4644: }
4645:
4646: special = 0;
4647:
4648: /* Auto-increment addresses must be reloaded in a special way. */
4649: if (GET_CODE (oldequiv) == POST_INC
4650: || GET_CODE (oldequiv) == POST_DEC
4651: || GET_CODE (oldequiv) == PRE_INC
4652: || GET_CODE (oldequiv) == PRE_DEC)
4653: {
4654: /* We are not going to bother supporting the case where a
4655: incremented register can't be copied directly from
4656: OLDEQUIV since this seems highly unlikely. */
4657: if (reload_secondary_reload[j] >= 0)
4658: abort ();
4659: /* Prevent normal processing of this reload. */
4660: special = 1;
4661: /* Output a special code sequence for this case. */
4662: this_reload_insn
4663: = inc_for_reload (reloadreg, oldequiv, reload_inc[j], where);
4664: }
4665:
4666: /* If we are reloading a pseudo-register that was set by the previous
4667: insn, see if we can get rid of that pseudo-register entirely
4668: by redirecting the previous insn into our reload register. */
4669:
4670: else if (optimize && GET_CODE (old) == REG
4671: && REGNO (old) >= FIRST_PSEUDO_REGISTER
4672: && dead_or_set_p (insn, old)
4673: /* This is unsafe if some other reload
4674: uses the same reg first. */
4675: && (reload_when_needed[j] == RELOAD_OTHER
4676: || reload_when_needed[j] == RELOAD_FOR_INPUT
4677: || reload_when_needed[j] == RELOAD_FOR_INPUT_RELOAD_ADDRESS))
4678: {
4679: rtx temp = PREV_INSN (insn);
4680: while (temp && GET_CODE (temp) == NOTE)
4681: temp = PREV_INSN (temp);
4682: if (temp
4683: && GET_CODE (temp) == INSN
4684: && GET_CODE (PATTERN (temp)) == SET
4685: && SET_DEST (PATTERN (temp)) == old
4686: /* Make sure we can access insn_operand_constraint. */
4687: && asm_noperands (PATTERN (temp)) < 0
4688: /* This is unsafe if prev insn rejects our reload reg. */
4689: && constraint_accepts_reg_p (insn_operand_constraint[recog_memoized (temp)][0],
4690: reloadreg)
4691: /* This is unsafe if operand occurs more than once in current
4692: insn. Perhaps some occurrences aren't reloaded. */
4693: && count_occurrences (PATTERN (insn), old) == 1
4694: /* Don't risk splitting a matching pair of operands. */
4695: && ! reg_mentioned_p (old, SET_SRC (PATTERN (temp))))
4696: {
4697: /* Store into the reload register instead of the pseudo. */
4698: SET_DEST (PATTERN (temp)) = reloadreg;
4699: /* If these are the only uses of the pseudo reg,
4700: pretend for GDB it lives in the reload reg we used. */
4701: if (reg_n_deaths[REGNO (old)] == 1
4702: && reg_n_sets[REGNO (old)] == 1)
4703: {
4704: reg_renumber[REGNO (old)] = REGNO (reload_reg_rtx[j]);
4705: alter_reg (REGNO (old), -1);
4706: }
4707: special = 1;
4708: }
4709: }
4710:
4711: /* We can't do that, so output an insn to load RELOADREG.
4712: Keep them in the following order:
4713: all reloads for input reload addresses,
4714: all reloads for ordinary input operands,
4715: all reloads for addresses of non-reloaded operands,
4716: the insn being reloaded,
4717: all reloads for addresses of output reloads,
4718: the output reloads. */
4719: if (! special)
4720: {
4721: #ifdef SECONDARY_INPUT_RELOAD_CLASS
4722: rtx second_reload_reg = 0;
4723: enum insn_code icode;
4724:
4725: /* If we have a secondary reload, pick up the secondary register
4726: and icode, if any. If OLDEQUIV and OLD are different or
4727: if this is an in-out reload, recompute whether or not we
4728: still need a secondary register and what the icode should
4729: be. If we still need a secondary register and the class or
4730: icode is different, go back to reloading from OLD if using
4731: OLDEQUIV means that we got the wrong type of register. We
4732: cannot have different class or icode due to an in-out reload
4733: because we don't make such reloads when both the input and
4734: output need secondary reload registers. */
4735:
4736: if (reload_secondary_reload[j] >= 0)
4737: {
4738: int secondary_reload = reload_secondary_reload[j];
1.1.1.2 ! root 4739: rtx real_oldequiv = oldequiv;
! 4740: rtx real_old = old;
! 4741:
! 4742: /* If OLDEQUIV is a pseudo with a MEM, get the real MEM
! 4743: and similarly for OLD.
! 4744: See comments in find_secondary_reload in reload.c. */
! 4745: if (GET_CODE (oldequiv) == REG
! 4746: && REGNO (oldequiv) >= FIRST_PSEUDO_REGISTER
! 4747: && reg_equiv_mem[REGNO (oldequiv)] != 0)
! 4748: real_oldequiv = reg_equiv_mem[REGNO (oldequiv)];
! 4749:
! 4750: if (GET_CODE (old) == REG
! 4751: && REGNO (old) >= FIRST_PSEUDO_REGISTER
! 4752: && reg_equiv_mem[REGNO (old)] != 0)
! 4753: real_old = reg_equiv_mem[REGNO (old)];
! 4754:
1.1 root 4755: second_reload_reg = reload_reg_rtx[secondary_reload];
4756: icode = reload_secondary_icode[j];
4757:
4758: if ((old != oldequiv && ! rtx_equal_p (old, oldequiv))
4759: || (reload_in[j] != 0 && reload_out[j] != 0))
4760: {
4761: enum reg_class new_class
4762: = SECONDARY_INPUT_RELOAD_CLASS (reload_reg_class[j],
1.1.1.2 ! root 4763: mode, real_oldequiv);
1.1 root 4764:
4765: if (new_class == NO_REGS)
4766: second_reload_reg = 0;
4767: else
4768: {
4769: enum insn_code new_icode;
4770: enum machine_mode new_mode;
4771:
4772: if (! TEST_HARD_REG_BIT (reg_class_contents[(int) new_class],
4773: REGNO (second_reload_reg)))
1.1.1.2 ! root 4774: oldequiv = old, real_oldequiv = real_old;
1.1 root 4775: else
4776: {
4777: new_icode = reload_in_optab[(int) mode];
4778: if (new_icode != CODE_FOR_nothing
4779: && ((insn_operand_predicate[(int) new_icode][0]
4780: && ! ((*insn_operand_predicate[(int) new_icode][0])
4781: (reloadreg, mode)))
4782: || (insn_operand_predicate[(int) new_icode][1]
4783: && ! ((*insn_operand_predicate[(int) new_icode][1])
1.1.1.2 ! root 4784: (real_oldequiv, mode)))))
1.1 root 4785: new_icode = CODE_FOR_nothing;
4786:
4787: if (new_icode == CODE_FOR_nothing)
4788: new_mode = mode;
4789: else
4790: new_mode = insn_operand_mode[new_icode][2];
4791:
4792: if (GET_MODE (second_reload_reg) != new_mode)
4793: {
4794: if (!HARD_REGNO_MODE_OK (REGNO (second_reload_reg),
4795: new_mode))
1.1.1.2 ! root 4796: oldequiv = old, real_oldequiv = real_old;
1.1 root 4797: else
4798: second_reload_reg
4799: = gen_reg_rtx (REG, new_mode,
4800: REGNO (second_reload_reg));
4801: }
4802: }
4803: }
4804: }
4805:
4806: /* If we still need a secondary reload register, check
4807: to see if it is being used as a scratch or intermediate
1.1.1.2 ! root 4808: register and generate code appropriately. If we need
! 4809: a scratch register, use REAL_OLDEQUIV since the form of
! 4810: the insn may depend on the actual address if it is
! 4811: a MEM. */
1.1 root 4812:
4813: if (second_reload_reg)
4814: {
4815: if (icode != CODE_FOR_nothing)
4816: {
4817: reload_insn = emit_insn_before (GEN_FCN (icode)
1.1.1.2 ! root 4818: (reloadreg,
! 4819: real_oldequiv,
1.1 root 4820: second_reload_reg),
4821: where);
4822: if (this_reload_insn == 0)
4823: this_reload_insn = reload_insn;
4824: special = 1;
4825: }
4826: else
4827: {
4828: /* See if we need a scratch register to load the
4829: intermediate register (a tertiary reload). */
4830: enum insn_code tertiary_icode
4831: = reload_secondary_icode[secondary_reload];
4832:
4833: if (tertiary_icode != CODE_FOR_nothing)
4834: {
4835: rtx third_reload_reg
4836: = reload_reg_rtx[reload_secondary_reload[secondary_reload]];
4837:
4838: reload_insn
4839: = emit_insn_before ((GEN_FCN (tertiary_icode)
4840: (second_reload_reg,
1.1.1.2 ! root 4841: real_oldequiv,
1.1 root 4842: third_reload_reg)),
4843: where);
4844: if (this_reload_insn == 0)
4845: this_reload_insn = reload_insn;
4846: }
4847: else
4848: {
4849: reload_insn
4850: = gen_input_reload (second_reload_reg,
4851: oldequiv, where);
4852: if (this_reload_insn == 0)
4853: this_reload_insn = reload_insn;
4854: oldequiv = second_reload_reg;
4855: }
4856: }
4857: }
4858: }
4859: #endif
4860:
4861: if (! special)
4862: {
4863: reload_insn = gen_input_reload (reloadreg,
4864: oldequiv, where);
4865: if (this_reload_insn == 0)
4866: this_reload_insn = reload_insn;
4867: }
4868:
4869: #if defined(SECONDARY_INPUT_RELOAD_CLASS) && defined(PRESERVE_DEATH_INFO_REGNO_P)
4870: /* We may have to make a REG_DEAD note for the secondary reload
4871: register in the insns we just made. Find the last insn that
4872: mentioned the register. */
4873: if (! special && second_reload_reg
4874: && PRESERVE_DEATH_INFO_REGNO_P (REGNO (second_reload_reg)))
4875: {
4876: rtx prev;
4877:
4878: for (prev = where;
4879: prev != PREV_INSN (this_reload_insn);
4880: prev = PREV_INSN (prev))
4881: if (GET_RTX_CLASS (GET_CODE (prev) == 'i')
4882: && reg_overlap_mentioned_p (second_reload_reg,
4883: PATTERN (prev)))
4884: {
4885: REG_NOTES (prev) = gen_rtx (EXPR_LIST, REG_DEAD,
4886: second_reload_reg,
4887: REG_NOTES (prev));
4888: break;
4889: }
4890: }
4891: #endif
4892: }
4893:
4894: /* Update where to put other reload insns. */
4895: if (this_reload_insn)
4896: switch (reload_when_needed[j])
4897: {
4898: case RELOAD_FOR_INPUT:
4899: case RELOAD_OTHER:
4900: if (first_other_reload_insn == first_operand_address_reload_insn)
4901: first_other_reload_insn = this_reload_insn;
4902: break;
4903: case RELOAD_FOR_OPERAND_ADDRESS:
4904: if (first_operand_address_reload_insn == before_insn)
4905: first_operand_address_reload_insn = this_reload_insn;
4906: if (first_other_reload_insn == before_insn)
4907: first_other_reload_insn = this_reload_insn;
4908: }
4909:
4910: /* reload_inc[j] was formerly processed here. */
4911: }
4912:
4913: /* Add a note saying the input reload reg
4914: dies in this insn, if anyone cares. */
4915: #ifdef PRESERVE_DEATH_INFO_REGNO_P
4916: if (old != 0
4917: && reload_reg_rtx[j] != old
4918: && reload_reg_rtx[j] != 0
4919: && reload_out[j] == 0
4920: && ! reload_inherited[j]
4921: && PRESERVE_DEATH_INFO_REGNO_P (REGNO (reload_reg_rtx[j])))
4922: {
4923: register rtx reloadreg = reload_reg_rtx[j];
4924:
4925: #if 0
4926: /* We can't abort here because we need to support this for sched.c.
4927: It's not terrible to miss a REG_DEAD note, but we should try
4928: to figure out how to do this correctly. */
4929: /* The code below is incorrect for address-only reloads. */
4930: if (reload_when_needed[j] != RELOAD_OTHER
4931: && reload_when_needed[j] != RELOAD_FOR_INPUT)
4932: abort ();
4933: #endif
4934:
4935: /* Add a death note to this insn, for an input reload. */
4936:
4937: if ((reload_when_needed[j] == RELOAD_OTHER
4938: || reload_when_needed[j] == RELOAD_FOR_INPUT)
4939: && ! dead_or_set_p (insn, reloadreg))
4940: REG_NOTES (insn)
4941: = gen_rtx (EXPR_LIST, REG_DEAD,
4942: reloadreg, REG_NOTES (insn));
4943: }
4944:
4945: /* When we inherit a reload, the last marked death of the reload reg
4946: may no longer really be a death. */
4947: if (reload_reg_rtx[j] != 0
4948: && PRESERVE_DEATH_INFO_REGNO_P (REGNO (reload_reg_rtx[j]))
4949: && reload_inherited[j])
4950: {
4951: /* Handle inheriting an output reload.
4952: Remove the death note from the output reload insn. */
4953: if (reload_spill_index[j] >= 0
4954: && GET_CODE (reload_in[j]) == REG
4955: && spill_reg_store[reload_spill_index[j]] != 0
4956: && find_regno_note (spill_reg_store[reload_spill_index[j]],
4957: REG_DEAD, REGNO (reload_reg_rtx[j])))
4958: remove_death (REGNO (reload_reg_rtx[j]),
4959: spill_reg_store[reload_spill_index[j]]);
4960: /* Likewise for input reloads that were inherited. */
4961: else if (reload_spill_index[j] >= 0
4962: && GET_CODE (reload_in[j]) == REG
4963: && spill_reg_store[reload_spill_index[j]] == 0
4964: && reload_inheritance_insn[j] != 0
4965: && find_regno_note (reload_inheritance_insn[j], REG_DEAD,
4966: REGNO (reload_reg_rtx[j])))
4967: remove_death (REGNO (reload_reg_rtx[j]),
4968: reload_inheritance_insn[j]);
4969: else
4970: {
4971: rtx prev;
4972:
4973: /* We got this register from find_equiv_reg.
4974: Search back for its last death note and get rid of it.
4975: But don't search back too far.
4976: Don't go past a place where this reg is set,
4977: since a death note before that remains valid. */
4978: for (prev = PREV_INSN (insn);
4979: prev && GET_CODE (prev) != CODE_LABEL;
4980: prev = PREV_INSN (prev))
4981: if (GET_RTX_CLASS (GET_CODE (prev)) == 'i'
4982: && dead_or_set_p (prev, reload_reg_rtx[j]))
4983: {
4984: if (find_regno_note (prev, REG_DEAD,
4985: REGNO (reload_reg_rtx[j])))
4986: remove_death (REGNO (reload_reg_rtx[j]), prev);
4987: break;
4988: }
4989: }
4990: }
4991:
4992: /* We might have used find_equiv_reg above to choose an alternate
4993: place from which to reload. If so, and it died, we need to remove
4994: that death and move it to one of the insns we just made. */
4995:
4996: if (oldequiv_reg != 0
4997: && PRESERVE_DEATH_INFO_REGNO_P (true_regnum (oldequiv_reg)))
4998: {
4999: rtx prev, prev1;
5000:
5001: for (prev = PREV_INSN (insn); prev && GET_CODE (prev) != CODE_LABEL;
5002: prev = PREV_INSN (prev))
5003: if (GET_RTX_CLASS (GET_CODE (prev)) == 'i'
5004: && dead_or_set_p (prev, oldequiv_reg))
5005: {
5006: if (find_regno_note (prev, REG_DEAD, REGNO (oldequiv_reg)))
5007: {
5008: for (prev1 = this_reload_insn;
5009: prev1; prev1 = PREV_INSN (prev1))
5010: if (GET_RTX_CLASS (GET_CODE (prev1) == 'i')
5011: && reg_overlap_mentioned_p (oldequiv_reg,
5012: PATTERN (prev1)))
5013: {
5014: REG_NOTES (prev1) = gen_rtx (EXPR_LIST, REG_DEAD,
5015: oldequiv_reg,
5016: REG_NOTES (prev1));
5017: break;
5018: }
5019: remove_death (REGNO (oldequiv_reg), prev);
5020: }
5021: break;
5022: }
5023: }
5024: #endif
5025:
5026: /* If we are reloading a register that was recently stored in with an
5027: output-reload, see if we can prove there was
5028: actually no need to store the old value in it. */
5029:
5030: if (optimize && reload_inherited[j] && reload_spill_index[j] >= 0
5031: /* This is unsafe if some other reload uses the same reg first. */
5032: && (reload_when_needed[j] == RELOAD_OTHER
5033: || reload_when_needed[j] == RELOAD_FOR_INPUT
5034: || reload_when_needed[j] == RELOAD_FOR_INPUT_RELOAD_ADDRESS)
5035: && GET_CODE (reload_in[j]) == REG
5036: #if 0
5037: /* There doesn't seem to be any reason to restrict this to pseudos
5038: and doing so loses in the case where we are copying from a
5039: register of the wrong class. */
5040: && REGNO (reload_in[j]) >= FIRST_PSEUDO_REGISTER
5041: #endif
5042: && spill_reg_store[reload_spill_index[j]] != 0
5043: && dead_or_set_p (insn, reload_in[j])
5044: /* This is unsafe if operand occurs more than once in current
5045: insn. Perhaps some occurrences weren't reloaded. */
5046: && count_occurrences (PATTERN (insn), reload_in[j]) == 1)
5047: delete_output_reload (insn, j,
5048: spill_reg_store[reload_spill_index[j]]);
5049:
5050: /* Input-reloading is done. Now do output-reloading,
5051: storing the value from the reload-register after the main insn
5052: if reload_out[j] is nonzero.
5053:
5054: ??? At some point we need to support handling output reloads of
5055: JUMP_INSNs or insns that set cc0. */
5056: old = reload_out[j];
5057: if (old != 0
5058: && reload_reg_rtx[j] != old
5059: && reload_reg_rtx[j] != 0)
5060: {
5061: register rtx reloadreg = reload_reg_rtx[j];
5062: register rtx second_reloadreg = 0;
5063: rtx prev_insn = PREV_INSN (first_output_reload_insn);
5064: rtx note, p;
5065: enum machine_mode mode;
5066: int special = 0;
5067:
5068: /* An output operand that dies right away does need a reload,
5069: but need not be copied from it. Show the new location in the
5070: REG_UNUSED note. */
5071: if ((GET_CODE (old) == REG || GET_CODE (old) == SCRATCH)
5072: && (note = find_reg_note (insn, REG_UNUSED, old)) != 0)
5073: {
5074: XEXP (note, 0) = reload_reg_rtx[j];
5075: continue;
5076: }
5077: else if (GET_CODE (old) == SCRATCH)
5078: /* If we aren't optimizing, there won't be a REG_UNUSED note,
5079: but we don't want to make an output reload. */
5080: continue;
5081:
5082: #if 0
5083: /* Strip off of OLD any size-increasing SUBREGs such as
5084: (SUBREG:SI foo:QI 0). */
5085:
5086: while (GET_CODE (old) == SUBREG && SUBREG_WORD (old) == 0
5087: && (GET_MODE_SIZE (GET_MODE (old))
5088: > GET_MODE_SIZE (GET_MODE (SUBREG_REG (old)))))
5089: old = SUBREG_REG (old);
5090: #endif
5091:
5092: /* If is a JUMP_INSN, we can't support output reloads yet. */
5093: if (GET_CODE (insn) == JUMP_INSN)
5094: abort ();
5095:
5096: /* Determine the mode to reload in.
5097: See comments above (for input reloading). */
5098:
5099: mode = GET_MODE (old);
5100: if (mode == VOIDmode)
5101: abort (); /* Should never happen for an output. */
5102:
5103: /* A strict-low-part output operand needs to be reloaded
5104: in the mode of the entire value. */
5105: if (reload_strict_low[j])
5106: {
5107: mode = GET_MODE (SUBREG_REG (reload_out[j]));
5108: /* Encapsulate OLD into that mode. */
5109: /* If OLD is a subreg, then strip it, since the subreg will
5110: be altered by this very reload. */
5111: while (GET_CODE (old) == SUBREG && GET_MODE (old) != mode)
5112: old = SUBREG_REG (old);
5113: if (GET_MODE (old) != VOIDmode
5114: && mode != GET_MODE (old))
5115: old = gen_rtx (SUBREG, mode, old, 0);
5116: }
5117:
5118: if (GET_MODE (reloadreg) != mode)
5119: reloadreg = gen_rtx (REG, mode, REGNO (reloadreg));
5120:
5121: #ifdef SECONDARY_OUTPUT_RELOAD_CLASS
5122:
5123: /* If we need two reload regs, set RELOADREG to the intermediate
5124: one, since it will be stored into OUT. We might need a secondary
5125: register only for an input reload, so check again here. */
5126:
1.1.1.2 ! root 5127: if (reload_secondary_reload[j] >= 0)
1.1 root 5128: {
1.1.1.2 ! root 5129: rtx real_old = old;
1.1 root 5130:
1.1.1.2 ! root 5131: if (GET_CODE (old) == REG && REGNO (old) >= FIRST_PSEUDO_REGISTER
! 5132: && reg_equiv_mem[REGNO (old)] != 0)
! 5133: real_old = reg_equiv_mem[REGNO (old)];
1.1 root 5134:
1.1.1.2 ! root 5135: if((SECONDARY_OUTPUT_RELOAD_CLASS (reload_reg_class[j],
! 5136: mode, real_old)
! 5137: != NO_REGS))
! 5138: {
! 5139: second_reloadreg = reloadreg;
! 5140: reloadreg = reload_reg_rtx[reload_secondary_reload[j]];
1.1 root 5141:
1.1.1.2 ! root 5142: /* See if RELOADREG is to be used as a scratch register
! 5143: or as an intermediate register. */
! 5144: if (reload_secondary_icode[j] != CODE_FOR_nothing)
1.1 root 5145: {
1.1.1.2 ! root 5146: emit_insn_before ((GEN_FCN (reload_secondary_icode[j])
! 5147: (real_old, second_reloadreg,
! 5148: reloadreg)),
! 5149: first_output_reload_insn);
! 5150: special = 1;
1.1 root 5151: }
5152: else
1.1.1.2 ! root 5153: {
! 5154: /* See if we need both a scratch and intermediate reload
! 5155: register. */
! 5156: int secondary_reload = reload_secondary_reload[j];
! 5157: enum insn_code tertiary_icode
! 5158: = reload_secondary_icode[secondary_reload];
! 5159: rtx pat;
! 5160:
! 5161: if (GET_MODE (reloadreg) != mode)
! 5162: reloadreg = gen_rtx (REG, mode, REGNO (reloadreg));
1.1 root 5163:
1.1.1.2 ! root 5164: if (tertiary_icode != CODE_FOR_nothing)
! 5165: {
! 5166: rtx third_reloadreg
! 5167: = reload_reg_rtx[reload_secondary_reload[secondary_reload]];
! 5168: pat = (GEN_FCN (tertiary_icode)
! 5169: (reloadreg, second_reloadreg, third_reloadreg));
! 5170: }
! 5171: else
! 5172: pat = gen_move_insn (reloadreg, second_reloadreg);
! 5173:
! 5174: emit_insn_before (pat, first_output_reload_insn);
! 5175: }
1.1 root 5176: }
5177: }
5178: #endif
5179:
5180: /* Output the last reload insn. */
5181: if (! special)
5182: emit_insn_before (gen_move_insn (old, reloadreg),
5183: first_output_reload_insn);
5184:
5185: #ifdef PRESERVE_DEATH_INFO_REGNO_P
5186: /* If final will look at death notes for this reg,
5187: put one on the last output-reload insn to use it. Similarly
5188: for any secondary register. */
5189: if (PRESERVE_DEATH_INFO_REGNO_P (REGNO (reloadreg)))
5190: for (p = PREV_INSN (first_output_reload_insn);
5191: p != prev_insn; p = PREV_INSN (p))
5192: if (GET_RTX_CLASS (GET_CODE (p)) == 'i'
5193: && reg_overlap_mentioned_p (reloadreg, PATTERN (p)))
5194: REG_NOTES (p) = gen_rtx (EXPR_LIST, REG_DEAD,
5195: reloadreg, REG_NOTES (p));
5196:
5197: #ifdef SECONDARY_OUTPUT_RELOAD_CLASS
5198: if (! special
5199: && PRESERVE_DEATH_INFO_REGNO_P (REGNO (second_reloadreg)))
5200: for (p = PREV_INSN (first_output_reload_insn);
5201: p != prev_insn; p = PREV_INSN (p))
5202: if (GET_RTX_CLASS (GET_CODE (p)) == 'i'
5203: && reg_overlap_mentioned_p (second_reloadreg, PATTERN (p)))
5204: REG_NOTES (p) = gen_rtx (EXPR_LIST, REG_DEAD,
5205: second_reloadreg, REG_NOTES (p));
5206: #endif
5207: #endif
5208: /* Look at all insns we emitted, just to be safe. */
5209: for (p = NEXT_INSN (prev_insn); p != first_output_reload_insn;
5210: p = NEXT_INSN (p))
5211: if (GET_RTX_CLASS (GET_CODE (p)) == 'i')
5212: {
5213: /* If this output reload doesn't come from a spill reg,
5214: clear any memory of reloaded copies of the pseudo reg.
5215: If this output reload comes from a spill reg,
5216: reg_has_output_reload will make this do nothing. */
5217: note_stores (PATTERN (p), forget_old_reloads_1);
5218:
5219: if (reg_mentioned_p (reload_reg_rtx[j], PATTERN (p)))
5220: store_insn = p;
5221: }
5222:
5223: first_output_reload_insn = NEXT_INSN (prev_insn);
5224: }
5225:
5226: if (reload_spill_index[j] >= 0)
5227: new_spill_reg_store[reload_spill_index[j]] = store_insn;
5228: }
5229:
5230: /* Move death notes from INSN
5231: to output-operand-address and output reload insns. */
5232: #ifdef PRESERVE_DEATH_INFO_REGNO_P
5233: {
5234: rtx insn1;
5235: /* Loop over those insns, last ones first. */
5236: for (insn1 = PREV_INSN (following_insn); insn1 != insn;
5237: insn1 = PREV_INSN (insn1))
5238: if (GET_CODE (insn1) == INSN && GET_CODE (PATTERN (insn1)) == SET)
5239: {
5240: rtx source = SET_SRC (PATTERN (insn1));
5241: rtx dest = SET_DEST (PATTERN (insn1));
5242:
5243: /* The note we will examine next. */
5244: rtx reg_notes = REG_NOTES (insn);
5245: /* The place that pointed to this note. */
5246: rtx *prev_reg_note = ®_NOTES (insn);
5247:
5248: /* If the note is for something used in the source of this
5249: reload insn, or in the output address, move the note. */
5250: while (reg_notes)
5251: {
5252: rtx next_reg_notes = XEXP (reg_notes, 1);
5253: if (REG_NOTE_KIND (reg_notes) == REG_DEAD
5254: && GET_CODE (XEXP (reg_notes, 0)) == REG
5255: && ((GET_CODE (dest) != REG
5256: && reg_overlap_mentioned_p (XEXP (reg_notes, 0), dest))
5257: || reg_overlap_mentioned_p (XEXP (reg_notes, 0), source)))
5258: {
5259: *prev_reg_note = next_reg_notes;
5260: XEXP (reg_notes, 1) = REG_NOTES (insn1);
5261: REG_NOTES (insn1) = reg_notes;
5262: }
5263: else
5264: prev_reg_note = &XEXP (reg_notes, 1);
5265:
5266: reg_notes = next_reg_notes;
5267: }
5268: }
5269: }
5270: #endif
5271:
5272: /* For all the spill regs newly reloaded in this instruction,
5273: record what they were reloaded from, so subsequent instructions
5274: can inherit the reloads.
5275:
5276: Update spill_reg_store for the reloads of this insn.
5277: Copy the elements that were updated in the loop above. */
5278:
5279: for (j = 0; j < n_reloads; j++)
5280: {
5281: register int r = reload_order[j];
5282: register int i = reload_spill_index[r];
5283:
5284: /* I is nonneg if this reload used one of the spill regs.
5285: If reload_reg_rtx[r] is 0, this is an optional reload
5286: that we opted to ignore. */
5287:
5288: if (i >= 0 && reload_reg_rtx[r] != 0)
5289: {
5290: /* First, clear out memory of what used to be in this spill reg.
5291: If consecutive registers are used, clear them all. */
5292: int nr
5293: = HARD_REGNO_NREGS (spill_regs[i], GET_MODE (reload_reg_rtx[r]));
5294: int k;
5295:
5296: for (k = 0; k < nr; k++)
5297: {
5298: reg_reloaded_contents[spill_reg_order[spill_regs[i] + k]] = -1;
5299: reg_reloaded_insn[spill_reg_order[spill_regs[i] + k]] = 0;
5300: }
5301:
5302: /* Maybe the spill reg contains a copy of reload_out. */
5303: if (reload_out[r] != 0 && GET_CODE (reload_out[r]) == REG)
5304: {
5305: register int nregno = REGNO (reload_out[r]);
5306:
5307: spill_reg_store[i] = new_spill_reg_store[i];
5308: reg_last_reload_reg[nregno] = reload_reg_rtx[r];
5309:
5310: for (k = 0; k < nr; k++)
5311: {
5312: reg_reloaded_contents[spill_reg_order[spill_regs[i] + k]]
5313: = nregno;
5314: reg_reloaded_insn[spill_reg_order[spill_regs[i] + k]] = insn;
5315: }
5316: }
5317:
5318: /* Maybe the spill reg contains a copy of reload_in. */
5319: else if (reload_out[r] == 0
5320: && reload_in[r] != 0
5321: && (GET_CODE (reload_in[r]) == REG
5322: || GET_CODE (reload_in_reg[r]) == REG))
5323: {
5324: register int nregno;
5325: if (GET_CODE (reload_in[r]) == REG)
5326: nregno = REGNO (reload_in[r]);
5327: else
5328: nregno = REGNO (reload_in_reg[r]);
5329:
5330: /* If there are two separate reloads (one in and one out)
5331: for the same (hard or pseudo) reg,
5332: leave reg_last_reload_reg set
5333: based on the output reload.
5334: Otherwise, set it from this input reload. */
5335: if (!reg_has_output_reload[nregno]
5336: /* But don't do so if another input reload
5337: will clobber this one's value. */
5338: && reload_reg_reaches_end_p (spill_regs[i],
5339: reload_when_needed[r]))
5340: {
5341: reg_last_reload_reg[nregno] = reload_reg_rtx[r];
5342:
5343: /* Unless we inherited this reload, show we haven't
5344: recently done a store. */
5345: if (! reload_inherited[r])
5346: spill_reg_store[i] = 0;
5347:
5348: for (k = 0; k < nr; k++)
5349: {
5350: reg_reloaded_contents[spill_reg_order[spill_regs[i] + k]]
5351: = nregno;
5352: reg_reloaded_insn[spill_reg_order[spill_regs[i] + k]]
5353: = insn;
5354: }
5355: }
5356: }
5357: }
5358:
5359: /* The following if-statement was #if 0'd in 1.34 (or before...).
5360: It's reenabled in 1.35 because supposedly nothing else
5361: deals with this problem. */
5362:
5363: /* If a register gets output-reloaded from a non-spill register,
5364: that invalidates any previous reloaded copy of it.
5365: But forget_old_reloads_1 won't get to see it, because
5366: it thinks only about the original insn. So invalidate it here. */
5367: if (i < 0 && reload_out[r] != 0 && GET_CODE (reload_out[r]) == REG)
5368: {
5369: register int nregno = REGNO (reload_out[r]);
5370: reg_last_reload_reg[nregno] = 0;
5371: }
5372: }
5373: }
5374:
5375: /* Emit code before BEFORE_INSN to perform an input reload of IN to RELOADREG.
5376: Returns first insn emitted. */
5377:
5378: rtx
5379: gen_input_reload (reloadreg, in, before_insn)
5380: rtx reloadreg;
5381: rtx in;
5382: rtx before_insn;
5383: {
5384: register rtx prev_insn = PREV_INSN (before_insn);
5385:
5386: /* How to do this reload can get quite tricky. Normally, we are being
5387: asked to reload a simple operand, such as a MEM, a constant, or a pseudo
5388: register that didn't get a hard register. In that case we can just
5389: call emit_move_insn.
5390:
5391: We can also be asked to reload a PLUS that adds either two registers or
5392: a register and a constant or MEM. This can occur during frame pointer
5393: elimination. That case if handled by trying to emit a single insn
5394: to perform the add. If it is not valid, we use a two insn sequence.
5395:
5396: Finally, we could be called to handle an 'o' constraint by putting
5397: an address into a register. In that case, we first try to do this
5398: with a named pattern of "reload_load_address". If no such pattern
5399: exists, we just emit a SET insn and hope for the best (it will normally
5400: be valid on machines that use 'o').
5401:
5402: This entire process is made complex because reload will never
5403: process the insns we generate here and so we must ensure that
5404: they will fit their constraints and also by the fact that parts of
5405: IN might be being reloaded separately and replaced with spill registers.
5406: Because of this, we are, in some sense, just guessing the right approach
5407: here. The one listed above seems to work.
5408:
5409: ??? At some point, this whole thing needs to be rethought. */
5410:
5411: if (GET_CODE (in) == PLUS
5412: && GET_CODE (XEXP (in, 0)) == REG
5413: && (GET_CODE (XEXP (in, 1)) == REG
5414: || CONSTANT_P (XEXP (in, 1))
5415: || GET_CODE (XEXP (in, 1)) == MEM))
5416: {
5417: /* We need to compute the sum of what is either a register and a
5418: constant, a register and memory, or a hard register and a pseudo
5419: register and put it into the reload register. The best possible way
5420: of doing this is if the machine has a three-operand ADD insn that
5421: accepts the required operands.
5422:
5423: The simplest approach is to try to generate such an insn and see if it
5424: is recognized and matches its constraints. If so, it can be used.
5425:
5426: It might be better not to actually emit the insn unless it is valid,
1.1.1.2 ! root 5427: but we need to pass the insn as an operand to `recog' and
! 5428: `insn_extract'and it is simpler to emit and then delete the insn if
! 5429: not valid than to dummy things up. */
1.1 root 5430:
5431: rtx move_operand, other_operand, insn;
5432: int code;
5433:
5434: /* Since constraint checking is strict, commutativity won't be
5435: checked, so we need to do that here to avoid spurious failure
5436: if the add instruction is two-address and the second operand
5437: of the add is the same as the reload reg, which is frequently
5438: the case. If the insn would be A = B + A, rearrange it so
5439: it will be A = A + B as constrain_operands expects. */
5440:
5441: if (GET_CODE (XEXP (in, 1)) == REG
5442: && REGNO (reloadreg) == REGNO (XEXP (in, 1)))
5443: in = gen_rtx (PLUS, GET_MODE (in), XEXP (in, 1), XEXP (in, 0));
5444:
5445: insn = emit_insn_before (gen_rtx (SET, VOIDmode, reloadreg, in),
5446: before_insn);
5447: code = recog_memoized (insn);
5448:
5449: if (code >= 0)
5450: {
5451: insn_extract (insn);
5452: /* We want constrain operands to treat this insn strictly in
5453: its validity determination, i.e., the way it would after reload
5454: has completed. */
5455: if (constrain_operands (code, 1))
5456: return insn;
5457: }
5458:
5459: if (PREV_INSN (insn))
5460: NEXT_INSN (PREV_INSN (insn)) = NEXT_INSN (insn);
5461: if (NEXT_INSN (insn))
5462: PREV_INSN (NEXT_INSN (insn)) = PREV_INSN (insn);
5463:
5464: /* If that failed, we must use a conservative two-insn sequence.
5465: use move to copy constant, MEM, or pseudo register to the reload
5466: register since "move" will be able to handle arbitrary operand, unlike
5467: add which can't, in general. Then add the registers.
5468:
5469: If there is another way to do this for a specific machine, a
5470: DEFINE_PEEPHOLE should be specified that recognizes the sequence
5471: we emit below. */
5472:
5473: if (CONSTANT_P (XEXP (in, 1))
1.1.1.2 ! root 5474: || GET_CODE (XEXP (in, 1)) == MEM
1.1 root 5475: || (GET_CODE (XEXP (in, 1)) == REG
5476: && REGNO (XEXP (in, 1)) >= FIRST_PSEUDO_REGISTER))
5477: move_operand = XEXP (in, 1), other_operand = XEXP (in, 0);
5478: else
5479: move_operand = XEXP (in, 0), other_operand = XEXP (in, 1);
5480:
5481: emit_insn_before (gen_move_insn (reloadreg, move_operand), before_insn);
5482: emit_insn_before (gen_add2_insn (reloadreg, other_operand), before_insn);
5483: }
5484:
5485: /* If IN is a simple operand, use gen_move_insn. */
5486: else if (GET_RTX_CLASS (GET_CODE (in)) == 'o' || GET_CODE (in) == SUBREG)
5487: emit_insn_before (gen_move_insn (reloadreg, in), before_insn);
5488:
5489: #ifdef HAVE_reload_load_address
5490: else if (HAVE_reload_load_address)
5491: emit_insn_before (gen_reload_load_address (reloadreg, in), before_insn);
5492: #endif
5493:
5494: /* Otherwise, just write (set REGLOADREG IN) and hope for the best. */
5495: else
5496: emit_insn_before (gen_rtx (SET, VOIDmode, reloadreg, in), before_insn);
5497:
5498: /* Return the first insn emitted.
5499: We can not just return PREV_INSN (before_insn), because there may have
5500: been multiple instructions emitted. Also note that gen_move_insn may
5501: emit more than one insn itself, so we can not assume that there is one
5502: insn emitted per emit_insn_before call. */
5503:
5504: return NEXT_INSN (prev_insn);
5505: }
5506:
5507: /* Delete a previously made output-reload
5508: whose result we now believe is not needed.
5509: First we double-check.
5510:
5511: INSN is the insn now being processed.
5512: OUTPUT_RELOAD_INSN is the insn of the output reload.
5513: J is the reload-number for this insn. */
5514:
5515: static void
5516: delete_output_reload (insn, j, output_reload_insn)
5517: rtx insn;
5518: int j;
5519: rtx output_reload_insn;
5520: {
5521: register rtx i1;
5522:
5523: /* Get the raw pseudo-register referred to. */
5524:
5525: rtx reg = reload_in[j];
5526: while (GET_CODE (reg) == SUBREG)
5527: reg = SUBREG_REG (reg);
5528:
5529: /* If the pseudo-reg we are reloading is no longer referenced
5530: anywhere between the store into it and here,
5531: and no jumps or labels intervene, then the value can get
5532: here through the reload reg alone.
5533: Otherwise, give up--return. */
5534: for (i1 = NEXT_INSN (output_reload_insn);
5535: i1 != insn; i1 = NEXT_INSN (i1))
5536: {
5537: if (GET_CODE (i1) == CODE_LABEL || GET_CODE (i1) == JUMP_INSN)
5538: return;
5539: if ((GET_CODE (i1) == INSN || GET_CODE (i1) == CALL_INSN)
5540: && reg_mentioned_p (reg, PATTERN (i1)))
5541: return;
5542: }
5543:
5544: /* If this insn will store in the pseudo again,
5545: the previous store can be removed. */
5546: if (reload_out[j] == reload_in[j])
5547: delete_insn (output_reload_insn);
5548:
5549: /* See if the pseudo reg has been completely replaced
5550: with reload regs. If so, delete the store insn
5551: and forget we had a stack slot for the pseudo. */
5552: else if (reg_n_deaths[REGNO (reg)] == 1
5553: && reg_basic_block[REGNO (reg)] >= 0
5554: && find_regno_note (insn, REG_DEAD, REGNO (reg)))
5555: {
5556: rtx i2;
5557:
5558: /* We know that it was used only between here
5559: and the beginning of the current basic block.
5560: (We also know that the last use before INSN was
5561: the output reload we are thinking of deleting, but never mind that.)
5562: Search that range; see if any ref remains. */
5563: for (i2 = PREV_INSN (insn); i2; i2 = PREV_INSN (i2))
5564: {
5565: rtx set = single_set (i2);
5566:
5567: /* Uses which just store in the pseudo don't count,
5568: since if they are the only uses, they are dead. */
5569: if (set != 0 && SET_DEST (set) == reg)
5570: continue;
5571: if (GET_CODE (i2) == CODE_LABEL
5572: || GET_CODE (i2) == JUMP_INSN)
5573: break;
5574: if ((GET_CODE (i2) == INSN || GET_CODE (i2) == CALL_INSN)
5575: && reg_mentioned_p (reg, PATTERN (i2)))
5576: /* Some other ref remains;
5577: we can't do anything. */
5578: return;
5579: }
5580:
5581: /* Delete the now-dead stores into this pseudo. */
5582: for (i2 = PREV_INSN (insn); i2; i2 = PREV_INSN (i2))
5583: {
5584: rtx set = single_set (i2);
5585:
5586: if (set != 0 && SET_DEST (set) == reg)
5587: delete_insn (i2);
5588: if (GET_CODE (i2) == CODE_LABEL
5589: || GET_CODE (i2) == JUMP_INSN)
5590: break;
5591: }
5592:
5593: /* For the debugging info,
5594: say the pseudo lives in this reload reg. */
5595: reg_renumber[REGNO (reg)] = REGNO (reload_reg_rtx[j]);
5596: alter_reg (REGNO (reg), -1);
5597: }
5598: }
5599:
5600:
5601: /* Output reload-insns to reload VALUE into RELOADREG.
5602: VALUE is a autoincrement or autodecrement RTX whose operand
5603: is a register or memory location;
5604: so reloading involves incrementing that location.
5605:
5606: INC_AMOUNT is the number to increment or decrement by (always positive).
5607: This cannot be deduced from VALUE.
5608:
5609: INSN is the insn before which the new insns should be emitted.
5610:
5611: The return value is the first of the insns emitted. */
5612:
5613: static rtx
5614: inc_for_reload (reloadreg, value, inc_amount, insn)
5615: rtx reloadreg;
5616: rtx value;
5617: int inc_amount;
5618: rtx insn;
5619: {
5620: /* REG or MEM to be copied and incremented. */
5621: rtx incloc = XEXP (value, 0);
5622: /* Nonzero if increment after copying. */
5623: int post = (GET_CODE (value) == POST_DEC || GET_CODE (value) == POST_INC);
1.1.1.2 ! root 5624: rtx prev = PREV_INSN (insn);
! 5625: rtx inc;
! 5626: rtx add_insn;
! 5627: enum insn_code code;
1.1 root 5628:
5629: /* No hard register is equivalent to this register after
5630: inc/dec operation. If REG_LAST_RELOAD_REG were non-zero,
5631: we could inc/dec that register as well (maybe even using it for
5632: the source), but I'm not sure it's worth worrying about. */
5633: if (GET_CODE (incloc) == REG)
5634: reg_last_reload_reg[REGNO (incloc)] = 0;
5635:
5636: if (GET_CODE (value) == PRE_DEC || GET_CODE (value) == POST_DEC)
5637: inc_amount = - inc_amount;
5638:
1.1.1.2 ! root 5639: inc = gen_rtx (CONST_INT, VOIDmode, inc_amount);
! 5640:
! 5641: /* If this is post-increment, first copy the location to the reload reg. */
! 5642: if (post)
! 5643: emit_insn_before (gen_move_insn (reloadreg, incloc), insn);
! 5644:
! 5645: /* See if we can directly increment INCLOC. Use a method similar to that
! 5646: in gen_input_reload. */
! 5647:
! 5648: add_insn = emit_insn_before (gen_rtx (SET, VOIDmode, incloc,
! 5649: gen_rtx (PLUS, GET_MODE (incloc),
! 5650: incloc, inc)), insn);
! 5651:
! 5652: code = recog_memoized (add_insn);
! 5653: if (code >= 0)
1.1 root 5654: {
1.1.1.2 ! root 5655: insn_extract (add_insn);
! 5656: if (constrain_operands (code, 1))
! 5657: {
! 5658: /* If this is a pre-increment and we have incremented the value
! 5659: where it lives, copy the incremented value to RELOADREG to
! 5660: be used as an address. */
! 5661:
! 5662: if (! post)
! 5663: emit_insn_before (gen_move_insn (reloadreg, incloc), insn);
! 5664: return NEXT_INSN (prev);
1.1 root 5665: }
1.1.1.2 ! root 5666: }
! 5667:
! 5668: if (PREV_INSN (add_insn))
! 5669: NEXT_INSN (PREV_INSN (add_insn)) = NEXT_INSN (add_insn);
! 5670: if (NEXT_INSN (add_insn))
! 5671: PREV_INSN (NEXT_INSN (add_insn)) = PREV_INSN (add_insn);
! 5672:
! 5673: /* If couldn't do the increment directly, must increment in RELOADREG.
! 5674: The way we do this depends on whether this is pre- or post-increment.
! 5675: For pre-increment, copy INCLOC to the reload register, increment it
! 5676: there, then save back. */
! 5677:
! 5678: if (! post)
! 5679: {
! 5680: emit_insn_before (gen_move_insn (reloadreg, incloc), insn);
! 5681: emit_insn_before (gen_add2_insn (reloadreg, inc), insn);
! 5682: emit_insn_before (gen_move_insn (incloc, reloadreg), insn);
! 5683: }
1.1 root 5684: else
5685: {
1.1.1.2 ! root 5686: /* Postincrement.
! 5687: Because this might be a jump insn or a compare, and because RELOADREG
! 5688: may not be available after the insn in an input reload, we must do
! 5689: the incrementation before the insn being reloaded for.
! 5690:
! 5691: We have already copied INCLOC to RELOADREG. Increment the copy in
! 5692: RELOADREG, save that back, then decrement RELOADREG so it has
! 5693: the original value. */
! 5694:
! 5695: emit_insn_before (gen_add2_insn (reloadreg, inc), insn);
! 5696: emit_insn_before (gen_move_insn (incloc, reloadreg), insn);
! 5697: emit_insn_before (gen_add2_insn (reloadreg,
! 5698: gen_rtx (CONST_INT, VOIDmode,
! 5699: -inc_amount)),
! 5700: insn);
1.1 root 5701: }
1.1.1.2 ! root 5702:
! 5703: return NEXT_INSN (prev);
1.1 root 5704: }
5705:
5706: /* Return 1 if we are certain that the constraint-string STRING allows
5707: the hard register REG. Return 0 if we can't be sure of this. */
5708:
5709: static int
5710: constraint_accepts_reg_p (string, reg)
5711: char *string;
5712: rtx reg;
5713: {
5714: int value = 0;
5715: int regno = true_regnum (reg);
5716: int c;
5717:
5718: /* Initialize for first alternative. */
5719: value = 0;
5720: /* Check that each alternative contains `g' or `r'. */
5721: while (1)
5722: switch (c = *string++)
5723: {
5724: case 0:
5725: /* If an alternative lacks `g' or `r', we lose. */
5726: return value;
5727: case ',':
5728: /* If an alternative lacks `g' or `r', we lose. */
5729: if (value == 0)
5730: return 0;
5731: /* Initialize for next alternative. */
5732: value = 0;
5733: break;
5734: case 'g':
5735: case 'r':
5736: /* Any general reg wins for this alternative. */
5737: if (TEST_HARD_REG_BIT (reg_class_contents[(int) GENERAL_REGS], regno))
5738: value = 1;
5739: break;
5740: default:
5741: /* Any reg in specified class wins for this alternative. */
5742: {
5743: int class = REG_CLASS_FROM_LETTER (c);
5744:
5745: if (TEST_HARD_REG_BIT (reg_class_contents[class], regno))
5746: value = 1;
5747: }
5748: }
5749: }
5750:
5751: /* Return the number of places FIND appears within X, but don't count
5752: an occurrence if some SET_DEST is FIND. */
5753:
5754: static int
5755: count_occurrences (x, find)
5756: register rtx x, find;
5757: {
5758: register int i, j;
5759: register enum rtx_code code;
5760: register char *format_ptr;
5761: int count;
5762:
5763: if (x == find)
5764: return 1;
5765: if (x == 0)
5766: return 0;
5767:
5768: code = GET_CODE (x);
5769:
5770: switch (code)
5771: {
5772: case REG:
5773: case QUEUED:
5774: case CONST_INT:
5775: case CONST_DOUBLE:
5776: case SYMBOL_REF:
5777: case CODE_LABEL:
5778: case PC:
5779: case CC0:
5780: return 0;
5781:
5782: case SET:
5783: if (SET_DEST (x) == find)
5784: return count_occurrences (SET_SRC (x), find);
5785: break;
5786: }
5787:
5788: format_ptr = GET_RTX_FORMAT (code);
5789: count = 0;
5790:
5791: for (i = 0; i < GET_RTX_LENGTH (code); i++)
5792: {
5793: switch (*format_ptr++)
5794: {
5795: case 'e':
5796: count += count_occurrences (XEXP (x, i), find);
5797: break;
5798:
5799: case 'E':
5800: if (XVEC (x, i) != NULL)
5801: {
5802: for (j = 0; j < XVECLEN (x, i); j++)
5803: count += count_occurrences (XVECEXP (x, i, j), find);
5804: }
5805: break;
5806: }
5807: }
5808: return count;
5809: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.