|
|
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:
239: /* This obstack is used for allocation of rtl during register elmination.
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:
705: if (i == max_regno && num_eliminable = 0 && ! caller_save_needed)
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:
747: /* This flag is set when a psuedo reg is spilled,
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:
883: /* If we allocated another psuedo to the stack, redo elimination
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
1191: have been set up at the begining of this loop. */
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:
1370: /* Look for the case where we have discovered that we can't replace
1371: register A with register B and that means that we will now be
1372: trying to replace register A with register C. This means we can
1373: no longer replace register C with register B and we need to disable
1374: such an elimination, if it exists. This occurs often with A == ap,
1375: B == sp, and C == fp. */
1376:
1377: for (ep = reg_eliminate; ep < ®_eliminate[NUM_ELIMINABLE_REGS]; ep++)
1378: {
1379: struct elim_table *op;
1380: register int new_to = -1;
1381:
1382: if (! ep->can_eliminate && ep->can_eliminate_previous)
1383: {
1384: /* Find the current elimination for ep->from, if there is a
1385: new one. */
1386: for (op = reg_eliminate;
1387: op < ®_eliminate[NUM_ELIMINABLE_REGS]; op++)
1388: if (op->from == ep->from && op->can_eliminate)
1389: {
1390: new_to = op->to;
1391: break;
1392: }
1393:
1394: /* See if there is an elimination of NEW_TO -> EP->TO. If so,
1395: disable it. */
1396: for (op = reg_eliminate;
1397: op < ®_eliminate[NUM_ELIMINABLE_REGS]; op++)
1398: if (op->from == new_to && op->to == ep->to)
1399: op->can_eliminate = 0;
1400: }
1401: }
1402:
1403: /* See if any registers that we thought we could eliminate the previous
1404: time are no longer eliminable. If so, something has changed and we
1405: must spill the register. Also, recompute the number of eliminable
1406: registers and see if the frame pointer is needed; it is if there is
1407: no elimination of the frame pointer that we can perform. */
1408:
1409: frame_pointer_needed = 1;
1410: for (ep = reg_eliminate; ep < ®_eliminate[NUM_ELIMINABLE_REGS]; ep++)
1411: {
1412: if (ep->can_eliminate && ep->from == FRAME_POINTER_REGNUM)
1413: frame_pointer_needed = 0;
1414:
1415: if (! ep->can_eliminate && ep->can_eliminate_previous)
1416: {
1417: ep->can_eliminate_previous = 0;
1418: spill_hard_reg (ep->from, global, dumpfile, 1);
1419: regs_ever_live[ep->from] = 1;
1420: something_changed = 1;
1421: num_eliminable--;
1422: }
1423: }
1424:
1425: /* If all needs are met, we win. */
1426:
1427: for (i = 0; i < N_REG_CLASSES; i++)
1428: if (max_needs[i] > 0 || max_groups[i] > 0 || max_nongroups[i] > 0)
1429: break;
1430: if (i == N_REG_CLASSES && !new_basic_block_needs && ! something_changed)
1431: break;
1432:
1433: /* Not all needs are met; must spill more hard regs. */
1434:
1435: /* If any element of basic_block_needs changed from 0 to 1,
1436: re-spill all the regs already spilled. This may spill
1437: additional pseudos that didn't spill before. */
1438:
1439: if (new_basic_block_needs)
1440: for (i = 0; i < n_spills; i++)
1441: something_changed
1442: |= spill_hard_reg (spill_regs[i], global, dumpfile, 0);
1443:
1444: /* Now find more reload regs to satisfy the remaining need
1445: Do it by ascending class number, since otherwise a reg
1446: might be spilled for a big class and might fail to count
1447: for a smaller class even though it belongs to that class.
1448:
1449: Count spilled regs in `spills', and add entries to
1450: `spill_regs' and `spill_reg_order'.
1451:
1452: ??? Note there is a problem here.
1453: When there is a need for a group in a high-numbered class,
1454: and also need for non-group regs that come from a lower class,
1455: the non-group regs are chosen first. If there aren't many regs,
1456: they might leave no room for a group.
1457:
1458: This was happening on the 386. To fix it, we added the code
1459: that calls possible_group_p, so that the lower class won't
1460: break up the last possible group.
1461:
1462: Really fixing the problem would require changes above
1463: in counting the regs already spilled, and in choose_reload_regs.
1464: It might be hard to avoid introducing bugs there. */
1465:
1466: for (class = 0; class < N_REG_CLASSES; class++)
1467: {
1468: /* First get the groups of registers.
1469: If we got single registers first, we might fragment
1470: possible groups. */
1471: while (max_groups[class] > 0)
1472: {
1473: /* If any single spilled regs happen to form groups,
1474: count them now. Maybe we don't really need
1475: to spill another group. */
1476: count_possible_groups (group_size, group_mode, max_groups);
1477:
1478: /* Groups of size 2 (the only groups used on most machines)
1479: are treated specially. */
1480: if (group_size[class] == 2)
1481: {
1482: /* First, look for a register that will complete a group. */
1483: for (i = 0; i < FIRST_PSEUDO_REGISTER; i++)
1484: {
1485: int j = potential_reload_regs[i];
1486: int other;
1487: if (j >= 0 && ! TEST_HARD_REG_BIT (bad_spill_regs, j)
1488: &&
1489: ((j > 0 && (other = j - 1, spill_reg_order[other] >= 0)
1490: && TEST_HARD_REG_BIT (reg_class_contents[class], j)
1491: && TEST_HARD_REG_BIT (reg_class_contents[class], other)
1492: && HARD_REGNO_MODE_OK (other, group_mode[class])
1493: && ! TEST_HARD_REG_BIT (counted_for_nongroups,
1494: other)
1495: /* We don't want one part of another group.
1496: We could get "two groups" that overlap! */
1497: && ! TEST_HARD_REG_BIT (counted_for_groups, other))
1498: ||
1499: (j < FIRST_PSEUDO_REGISTER - 1
1500: && (other = j + 1, spill_reg_order[other] >= 0)
1501: && TEST_HARD_REG_BIT (reg_class_contents[class], j)
1502: && TEST_HARD_REG_BIT (reg_class_contents[class], other)
1503: && HARD_REGNO_MODE_OK (j, group_mode[class])
1504: && ! TEST_HARD_REG_BIT (counted_for_nongroups,
1505: other)
1506: && ! TEST_HARD_REG_BIT (counted_for_groups,
1507: other))))
1508: {
1509: register enum reg_class *p;
1510:
1511: /* We have found one that will complete a group,
1512: so count off one group as provided. */
1513: max_groups[class]--;
1514: p = reg_class_superclasses[class];
1515: while (*p != LIM_REG_CLASSES)
1516: max_groups[(int) *p++]--;
1517:
1518: /* Indicate both these regs are part of a group. */
1519: SET_HARD_REG_BIT (counted_for_groups, j);
1520: SET_HARD_REG_BIT (counted_for_groups, other);
1521: break;
1522: }
1523: }
1524: /* We can't complete a group, so start one. */
1525: if (i == FIRST_PSEUDO_REGISTER)
1526: for (i = 0; i < FIRST_PSEUDO_REGISTER; i++)
1527: {
1528: int j = potential_reload_regs[i];
1529: if (j >= 0 && j + 1 < FIRST_PSEUDO_REGISTER
1530: && spill_reg_order[j] < 0 && spill_reg_order[j + 1] < 0
1531: && TEST_HARD_REG_BIT (reg_class_contents[class], j)
1532: && TEST_HARD_REG_BIT (reg_class_contents[class], j + 1)
1533: && HARD_REGNO_MODE_OK (j, group_mode[class])
1534: && ! TEST_HARD_REG_BIT (counted_for_nongroups,
1535: j + 1))
1536: break;
1537: }
1538:
1539: /* I should be the index in potential_reload_regs
1540: of the new reload reg we have found. */
1541:
1542: something_changed
1543: |= new_spill_reg (i, class, max_needs, 0,
1544: global, dumpfile);
1545: }
1546: else
1547: {
1548: /* For groups of more than 2 registers,
1549: look for a sufficient sequence of unspilled registers,
1550: and spill them all at once. */
1551: for (i = 0; i < FIRST_PSEUDO_REGISTER; i++)
1552: {
1553: int j = potential_reload_regs[i];
1554: int k;
1555: if (j >= 0 && j + 1 < FIRST_PSEUDO_REGISTER
1556: && HARD_REGNO_MODE_OK (j, group_mode[class]))
1557: {
1558: /* Check each reg in the sequence. */
1559: for (k = 0; k < group_size[class]; k++)
1560: if (! (spill_reg_order[j + k] < 0
1561: && ! TEST_HARD_REG_BIT (bad_spill_regs, j + k)
1562: && TEST_HARD_REG_BIT (reg_class_contents[class], j + k)))
1563: break;
1564: /* We got a full sequence, so spill them all. */
1565: if (k == group_size[class])
1566: {
1567: register enum reg_class *p;
1568: for (k = 0; k < group_size[class]; k++)
1569: {
1570: int idx;
1571: SET_HARD_REG_BIT (counted_for_groups, j + k);
1572: for (idx = 0; idx < FIRST_PSEUDO_REGISTER; idx++)
1573: if (potential_reload_regs[idx] == j + k)
1574: break;
1575: something_changed
1576: |= new_spill_reg (idx, class, max_needs, 0,
1577: global, dumpfile);
1578: }
1579:
1580: /* We have found one that will complete a group,
1581: so count off one group as provided. */
1582: max_groups[class]--;
1583: p = reg_class_superclasses[class];
1584: while (*p != LIM_REG_CLASSES)
1585: max_groups[(int) *p++]--;
1586:
1587: break;
1588: }
1589: }
1590: }
1591: }
1592: }
1593:
1594: /* Now similarly satisfy all need for single registers. */
1595:
1596: while (max_needs[class] > 0 || max_nongroups[class] > 0)
1597: {
1598: /* Consider the potential reload regs that aren't
1599: yet in use as reload regs, in order of preference.
1600: Find the most preferred one that's in this class. */
1601:
1602: for (i = 0; i < FIRST_PSEUDO_REGISTER; i++)
1603: if (potential_reload_regs[i] >= 0
1604: && TEST_HARD_REG_BIT (reg_class_contents[class],
1605: potential_reload_regs[i])
1606: /* If this reg will not be available for groups,
1607: pick one that does not foreclose possible groups.
1608: This is a kludge, and not very general,
1609: but it should be sufficient to make the 386 work,
1610: and the problem should not occur on machines with
1611: more registers. */
1612: && (max_nongroups[class] == 0
1613: || possible_group_p (potential_reload_regs[i], max_groups)))
1614: break;
1615:
1616: /* I should be the index in potential_reload_regs
1617: of the new reload reg we have found. */
1618:
1619: something_changed
1620: |= new_spill_reg (i, class, max_needs, max_nongroups,
1621: global, dumpfile);
1622: }
1623: }
1624: }
1625:
1626: /* If global-alloc was run, notify it of any register eliminations we have
1627: done. */
1628: if (global)
1629: for (ep = reg_eliminate; ep < ®_eliminate[NUM_ELIMINABLE_REGS]; ep++)
1630: if (ep->can_eliminate)
1631: mark_elimination (ep->from, ep->to);
1632:
1633: /* From now on, we need to emit any moves without making new pseudos. */
1634: reload_in_progress = 1;
1635:
1636: /* Insert code to save and restore call-clobbered hard regs
1637: around calls. Tell if what mode to use so that we will process
1638: those insns in reload_as_needed if we have to. */
1639:
1640: if (caller_save_needed)
1641: save_call_clobbered_regs (num_eliminable ? QImode
1642: : caller_save_spill_class != NO_REGS ? HImode
1643: : VOIDmode);
1644:
1645: /* If a pseudo has no hard reg, delete the insns that made the equivalence.
1646: If that insn didn't set the register (i.e., it copied the register to
1647: memory), just delete that insn instead of the equivalencing insn plus
1648: anything now dead. If we call delete_dead_insn on that insn, we may
1649: delete the insn that actually sets the register if the register die
1650: there and that is incorrect. */
1651:
1652: for (i = FIRST_PSEUDO_REGISTER; i < max_regno; i++)
1653: if (reg_renumber[i] < 0 && reg_equiv_init[i] != 0
1654: && GET_CODE (reg_equiv_init[i]) != NOTE)
1655: {
1656: if (reg_set_p (regno_reg_rtx[i], PATTERN (reg_equiv_init[i])))
1657: delete_dead_insn (reg_equiv_init[i]);
1658: else
1659: {
1660: PUT_CODE (reg_equiv_init[i], NOTE);
1661: NOTE_SOURCE_FILE (reg_equiv_init[i]) = 0;
1662: NOTE_LINE_NUMBER (reg_equiv_init[i]) = NOTE_INSN_DELETED;
1663: }
1664: }
1665:
1666: /* Use the reload registers where necessary
1667: by generating move instructions to move the must-be-register
1668: values into or out of the reload registers. */
1669:
1670: if (something_needs_reloads || something_needs_elimination
1671: || (caller_save_needed && num_eliminable)
1672: || caller_save_spill_class != NO_REGS)
1673: reload_as_needed (first, global);
1674:
1675: reload_in_progress = 0;
1676:
1677: /* Now eliminate all pseudo regs by modifying them into
1678: their equivalent memory references.
1679: The REG-rtx's for the pseudos are modified in place,
1680: so all insns that used to refer to them now refer to memory.
1681:
1682: For a reg that has a reg_equiv_address, all those insns
1683: were changed by reloading so that no insns refer to it any longer;
1684: but the DECL_RTL of a variable decl may refer to it,
1685: and if so this causes the debugging info to mention the variable. */
1686:
1687: for (i = FIRST_PSEUDO_REGISTER; i < max_regno; i++)
1688: {
1689: rtx addr = 0;
1690: if (reg_equiv_mem[i])
1691: addr = XEXP (reg_equiv_mem[i], 0);
1692: if (reg_equiv_address[i])
1693: addr = reg_equiv_address[i];
1694: if (addr)
1695: {
1696: if (reg_renumber[i] < 0)
1697: {
1698: rtx reg = regno_reg_rtx[i];
1699: XEXP (reg, 0) = addr;
1700: REG_USERVAR_P (reg) = 0;
1701: PUT_CODE (reg, MEM);
1702: }
1703: else if (reg_equiv_mem[i])
1704: XEXP (reg_equiv_mem[i], 0) = addr;
1705: }
1706: }
1707:
1708: #ifdef PRESERVE_DEATH_INFO_REGNO_P
1709: /* Make a pass over all the insns and remove death notes for things that
1710: are no longer registers or no longer die in the insn (e.g., an input
1711: and output pseudo being tied). */
1712:
1713: for (insn = first; insn; insn = NEXT_INSN (insn))
1714: if (GET_RTX_CLASS (GET_CODE (insn)) == 'i')
1715: {
1716: rtx note, next;
1717:
1718: for (note = REG_NOTES (insn); note; note = next)
1719: {
1720: next = XEXP (note, 1);
1721: if (REG_NOTE_KIND (note) == REG_DEAD
1722: && (GET_CODE (XEXP (note, 0)) != REG
1723: || reg_set_p (XEXP (note, 0), PATTERN (insn))))
1724: remove_note (insn, note);
1725: }
1726: }
1727: #endif
1728:
1729: /* Indicate that we no longer have known memory locations or constants. */
1730: reg_equiv_constant = 0;
1731: reg_equiv_memory_loc = 0;
1732: }
1733:
1734: /* Nonzero if, after spilling reg REGNO for non-groups,
1735: it will still be possible to find a group if we still need one. */
1736:
1737: static int
1738: possible_group_p (regno, max_groups)
1739: int regno;
1740: int *max_groups;
1741: {
1742: int i;
1743: int class = (int) NO_REGS;
1744:
1745: for (i = 0; i < (int) N_REG_CLASSES; i++)
1746: if (max_groups[i] > 0)
1747: {
1748: class = i;
1749: break;
1750: }
1751:
1752: if (class == (int) NO_REGS)
1753: return 1;
1754:
1755: /* Consider each pair of consecutive registers. */
1756: for (i = 0; i < FIRST_PSEUDO_REGISTER - 1; i++)
1757: {
1758: /* Ignore pairs that include reg REGNO. */
1759: if (i == regno || i + 1 == regno)
1760: continue;
1761:
1762: /* Ignore pairs that are outside the class that needs the group.
1763: ??? Here we fail to handle the case where two different classes
1764: independently need groups. But this never happens with our
1765: current machine descriptions. */
1766: if (! (TEST_HARD_REG_BIT (reg_class_contents[class], i)
1767: && TEST_HARD_REG_BIT (reg_class_contents[class], i + 1)))
1768: continue;
1769:
1770: /* A pair of consecutive regs we can still spill does the trick. */
1771: if (spill_reg_order[i] < 0 && spill_reg_order[i + 1] < 0
1772: && ! TEST_HARD_REG_BIT (bad_spill_regs, i)
1773: && ! TEST_HARD_REG_BIT (bad_spill_regs, i + 1))
1774: return 1;
1775:
1776: /* A pair of one already spilled and one we can spill does it
1777: provided the one already spilled is not otherwise reserved. */
1778: if (spill_reg_order[i] < 0
1779: && ! TEST_HARD_REG_BIT (bad_spill_regs, i)
1780: && spill_reg_order[i + 1] >= 0
1781: && ! TEST_HARD_REG_BIT (counted_for_groups, i + 1)
1782: && ! TEST_HARD_REG_BIT (counted_for_nongroups, i + 1))
1783: return 1;
1784: if (spill_reg_order[i + 1] < 0
1785: && ! TEST_HARD_REG_BIT (bad_spill_regs, i + 1)
1786: && spill_reg_order[i] >= 0
1787: && ! TEST_HARD_REG_BIT (counted_for_groups, i)
1788: && ! TEST_HARD_REG_BIT (counted_for_nongroups, i))
1789: return 1;
1790: }
1791:
1792: return 0;
1793: }
1794:
1795: /* Count any groups that can be formed from the registers recently spilled.
1796: This is done class by class, in order of ascending class number. */
1797:
1798: static void
1799: count_possible_groups (group_size, group_mode, max_groups)
1800: int *group_size, *max_groups;
1801: enum machine_mode *group_mode;
1802: {
1803: int i;
1804: /* Now find all consecutive groups of spilled registers
1805: and mark each group off against the need for such groups.
1806: But don't count them against ordinary need, yet. */
1807:
1808: for (i = 0; i < N_REG_CLASSES; i++)
1809: if (group_size[i] > 1)
1810: {
1811: char regmask[FIRST_PSEUDO_REGISTER];
1812: int j;
1813:
1814: bzero (regmask, sizeof regmask);
1815: /* Make a mask of all the regs that are spill regs in class I. */
1816: for (j = 0; j < n_spills; j++)
1817: if (TEST_HARD_REG_BIT (reg_class_contents[i], spill_regs[j])
1818: && ! TEST_HARD_REG_BIT (counted_for_groups, spill_regs[j])
1819: && ! TEST_HARD_REG_BIT (counted_for_nongroups,
1820: spill_regs[j]))
1821: regmask[spill_regs[j]] = 1;
1822: /* Find each consecutive group of them. */
1823: for (j = 0; j < FIRST_PSEUDO_REGISTER && max_groups[i] > 0; j++)
1824: if (regmask[j] && j + group_size[i] <= FIRST_PSEUDO_REGISTER
1825: /* Next line in case group-mode for this class
1826: demands an even-odd pair. */
1827: && HARD_REGNO_MODE_OK (j, group_mode[i]))
1828: {
1829: int k;
1830: for (k = 1; k < group_size[i]; k++)
1831: if (! regmask[j + k])
1832: break;
1833: if (k == group_size[i])
1834: {
1835: /* We found a group. Mark it off against this class's
1836: need for groups, and against each superclass too. */
1837: register enum reg_class *p;
1838: max_groups[i]--;
1839: p = reg_class_superclasses[i];
1840: while (*p != LIM_REG_CLASSES)
1841: max_groups[(int) *p++]--;
1842: /* Don't count these registers again. */
1843: for (k = 0; k < group_size[i]; k++)
1844: SET_HARD_REG_BIT (counted_for_groups, j + k);
1845: }
1846: j += k;
1847: }
1848: }
1849:
1850: }
1851:
1852: /* ALLOCATE_MODE is a register mode that needs to be reloaded. OTHER_MODE is
1853: another mode that needs to be reloaded for the same register class CLASS.
1854: If any reg in CLASS allows ALLOCATE_MODE but not OTHER_MODE, fail.
1855: ALLOCATE_MODE will never be smaller than OTHER_MODE.
1856:
1857: This code used to also fail if any reg in CLASS allows OTHER_MODE but not
1858: ALLOCATE_MODE. This test is unnecessary, because we will never try to put
1859: something of mode ALLOCATE_MODE into an OTHER_MODE register. Testing this
1860: causes unnecessary failures on machines requiring alignment of register
1861: groups when the two modes are different sizes, because the larger mode has
1862: more strict alignment rules than the smaller mode. */
1863:
1864: static int
1865: modes_equiv_for_class_p (allocate_mode, other_mode, class)
1866: enum machine_mode allocate_mode, other_mode;
1867: enum reg_class class;
1868: {
1869: register int regno;
1870: for (regno = 0; regno < FIRST_PSEUDO_REGISTER; regno++)
1871: {
1872: if (TEST_HARD_REG_BIT (reg_class_contents[(int) class], regno)
1873: && HARD_REGNO_MODE_OK (regno, allocate_mode)
1874: && ! HARD_REGNO_MODE_OK (regno, other_mode))
1875: return 0;
1876: }
1877: return 1;
1878: }
1879:
1880: /* Add a new register to the tables of available spill-registers
1881: (as well as spilling all pseudos allocated to the register).
1882: I is the index of this register in potential_reload_regs.
1883: CLASS is the regclass whose need is being satisfied.
1884: MAX_NEEDS and MAX_NONGROUPS are the vectors of needs,
1885: so that this register can count off against them.
1886: MAX_NONGROUPS is 0 if this register is part of a group.
1887: GLOBAL and DUMPFILE are the same as the args that `reload' got. */
1888:
1889: static int
1890: new_spill_reg (i, class, max_needs, max_nongroups, global, dumpfile)
1891: int i;
1892: int class;
1893: int *max_needs;
1894: int *max_nongroups;
1895: int global;
1896: FILE *dumpfile;
1897: {
1898: register enum reg_class *p;
1899: int val;
1900: int regno = potential_reload_regs[i];
1901:
1902: if (i >= FIRST_PSEUDO_REGISTER)
1903: abort (); /* Caller failed to find any register. */
1904:
1905: if (fixed_regs[regno] || TEST_HARD_REG_BIT (forbidden_regs, regno))
1906: fatal ("fixed or forbidden register was spilled.\n\
1907: This may be due to a compiler bug or to impossible asm statements.");
1908:
1909: /* Make reg REGNO an additional reload reg. */
1910:
1911: potential_reload_regs[i] = -1;
1912: spill_regs[n_spills] = regno;
1913: spill_reg_order[regno] = n_spills;
1914: if (dumpfile)
1915: fprintf (dumpfile, "Spilling reg %d.\n", spill_regs[n_spills]);
1916:
1917: /* Clear off the needs we just satisfied. */
1918:
1919: max_needs[class]--;
1920: p = reg_class_superclasses[class];
1921: while (*p != LIM_REG_CLASSES)
1922: max_needs[(int) *p++]--;
1923:
1924: if (max_nongroups && max_nongroups[class] > 0)
1925: {
1926: SET_HARD_REG_BIT (counted_for_nongroups, regno);
1927: max_nongroups[class]--;
1928: p = reg_class_superclasses[class];
1929: while (*p != LIM_REG_CLASSES)
1930: max_nongroups[(int) *p++]--;
1931: }
1932:
1933: /* Spill every pseudo reg that was allocated to this reg
1934: or to something that overlaps this reg. */
1935:
1936: val = spill_hard_reg (spill_regs[n_spills], global, dumpfile, 0);
1937:
1938: /* If there are some registers still to eliminate and this register
1939: wasn't ever used before, additional stack space may have to be
1940: allocated to store this register. Thus, we may have changed the offset
1941: between the stack and frame pointers, so mark that something has changed.
1942: (If new pseudos were spilled, thus requiring more space, VAL would have
1943: been set non-zero by the call to spill_hard_reg above since additional
1944: reloads may be needed in that case.
1945:
1946: One might think that we need only set VAL to 1 if this is a call-used
1947: register. However, the set of registers that must be saved by the
1948: prologue is not identical to the call-used set. For example, the
1949: register used by the call insn for the return PC is a call-used register,
1950: but must be saved by the prologue. */
1951: if (num_eliminable && ! regs_ever_live[spill_regs[n_spills]])
1952: val = 1;
1953:
1954: regs_ever_live[spill_regs[n_spills]] = 1;
1955: n_spills++;
1956:
1957: return val;
1958: }
1959:
1960: /* Delete an unneeded INSN and any previous insns who sole purpose is loading
1961: data that is dead in INSN. */
1962:
1963: static void
1964: delete_dead_insn (insn)
1965: rtx insn;
1966: {
1967: rtx prev = prev_real_insn (insn);
1968: rtx prev_dest;
1969:
1970: /* If the previous insn sets a register that dies in our insn, delete it
1971: too. */
1972: if (prev && GET_CODE (PATTERN (prev)) == SET
1973: && (prev_dest = SET_DEST (PATTERN (prev)), GET_CODE (prev_dest) == REG)
1974: && reg_mentioned_p (prev_dest, PATTERN (insn))
1975: && find_regno_note (insn, REG_DEAD, REGNO (prev_dest)))
1976: delete_dead_insn (prev);
1977:
1978: PUT_CODE (insn, NOTE);
1979: NOTE_LINE_NUMBER (insn) = NOTE_INSN_DELETED;
1980: NOTE_SOURCE_FILE (insn) = 0;
1981: }
1982:
1983: /* Modify the home of pseudo-reg I.
1984: The new home is present in reg_renumber[I].
1985:
1986: FROM_REG may be the hard reg that the pseudo-reg is being spilled from;
1987: or it may be -1, meaning there is none or it is not relevant.
1988: This is used so that all pseudos spilled from a given hard reg
1989: can share one stack slot. */
1990:
1991: static void
1992: alter_reg (i, from_reg)
1993: register int i;
1994: int from_reg;
1995: {
1996: /* When outputting an inline function, this can happen
1997: for a reg that isn't actually used. */
1998: if (regno_reg_rtx[i] == 0)
1999: return;
2000:
2001: /* If the reg got changed to a MEM at rtl-generation time,
2002: ignore it. */
2003: if (GET_CODE (regno_reg_rtx[i]) != REG)
2004: return;
2005:
2006: /* Modify the reg-rtx to contain the new hard reg
2007: number or else to contain its pseudo reg number. */
2008: REGNO (regno_reg_rtx[i])
2009: = reg_renumber[i] >= 0 ? reg_renumber[i] : i;
2010:
2011: /* If we have a pseudo that is needed but has no hard reg or equivalent,
2012: allocate a stack slot for it. */
2013:
2014: if (reg_renumber[i] < 0
2015: && reg_n_refs[i] > 0
2016: && reg_equiv_constant[i] == 0
2017: && reg_equiv_memory_loc[i] == 0)
2018: {
2019: register rtx x;
2020: int inherent_size = PSEUDO_REGNO_BYTES (i);
2021: int total_size = MAX (inherent_size, reg_max_ref_width[i]);
2022: int adjust = 0;
2023:
2024: /* Each pseudo reg has an inherent size which comes from its own mode,
2025: and a total size which provides room for paradoxical subregs
2026: which refer to the pseudo reg in wider modes.
2027:
2028: We can use a slot already allocated if it provides both
2029: enough inherent space and enough total space.
2030: Otherwise, we allocate a new slot, making sure that it has no less
2031: inherent space, and no less total space, then the previous slot. */
2032: if (from_reg == -1)
2033: {
2034: /* No known place to spill from => no slot to reuse. */
2035: x = assign_stack_local (GET_MODE (regno_reg_rtx[i]), total_size, -1);
2036: #if BYTES_BIG_ENDIAN
2037: /* Cancel the big-endian correction done in assign_stack_local.
2038: Get the address of the beginning of the slot.
2039: This is so we can do a big-endian correction unconditionally
2040: below. */
2041: adjust = inherent_size - total_size;
2042: #endif
2043: }
2044: /* Reuse a stack slot if possible. */
2045: else if (spill_stack_slot[from_reg] != 0
2046: && spill_stack_slot_width[from_reg] >= total_size
2047: && (GET_MODE_SIZE (GET_MODE (spill_stack_slot[from_reg]))
2048: >= inherent_size))
2049: x = spill_stack_slot[from_reg];
2050: /* Allocate a bigger slot. */
2051: else
2052: {
2053: /* Compute maximum size needed, both for inherent size
2054: and for total size. */
2055: enum machine_mode mode = GET_MODE (regno_reg_rtx[i]);
2056: if (spill_stack_slot[from_reg])
2057: {
2058: if (GET_MODE_SIZE (GET_MODE (spill_stack_slot[from_reg]))
2059: > inherent_size)
2060: mode = GET_MODE (spill_stack_slot[from_reg]);
2061: if (spill_stack_slot_width[from_reg] > total_size)
2062: total_size = spill_stack_slot_width[from_reg];
2063: }
2064: /* Make a slot with that size. */
2065: x = assign_stack_local (mode, total_size, -1);
2066: #if BYTES_BIG_ENDIAN
2067: /* Cancel the big-endian correction done in assign_stack_local.
2068: Get the address of the beginning of the slot.
2069: This is so we can do a big-endian correction unconditionally
2070: below. */
2071: adjust = GET_MODE_SIZE (mode) - total_size;
2072: #endif
2073: spill_stack_slot[from_reg] = x;
2074: spill_stack_slot_width[from_reg] = total_size;
2075: }
2076:
2077: #if BYTES_BIG_ENDIAN
2078: /* On a big endian machine, the "address" of the slot
2079: is the address of the low part that fits its inherent mode. */
2080: if (inherent_size < total_size)
2081: adjust += (total_size - inherent_size);
2082: #endif /* BYTES_BIG_ENDIAN */
2083:
2084: /* If we have any adjustment to make, or if the stack slot is the
2085: wrong mode, make a new stack slot. */
2086: if (adjust != 0 || GET_MODE (x) != GET_MODE (regno_reg_rtx[i]))
2087: {
2088: x = gen_rtx (MEM, GET_MODE (regno_reg_rtx[i]),
2089: plus_constant (XEXP (x, 0), adjust));
2090: RTX_UNCHANGING_P (x) = RTX_UNCHANGING_P (regno_reg_rtx[i]);
2091: }
2092:
2093: /* Save the stack slot for later. */
2094: reg_equiv_memory_loc[i] = x;
2095: }
2096: }
2097:
2098: /* Mark the slots in regs_ever_live for the hard regs
2099: used by pseudo-reg number REGNO. */
2100:
2101: void
2102: mark_home_live (regno)
2103: int regno;
2104: {
2105: register int i, lim;
2106: i = reg_renumber[regno];
2107: if (i < 0)
2108: return;
2109: lim = i + HARD_REGNO_NREGS (i, PSEUDO_REGNO_MODE (regno));
2110: while (i < lim)
2111: regs_ever_live[i++] = 1;
2112: }
2113:
2114: /* This function handles the tracking of elimination offsets around branches.
2115:
2116: X is a piece of RTL being scanned.
2117:
2118: INSN is the insn that it came from, if any.
2119:
2120: INITIAL_P is non-zero if we are to set the offset to be the initial
2121: offset and zero if we are setting the offset of the label to be the
2122: current offset. */
2123:
2124: static void
2125: set_label_offsets (x, insn, initial_p)
2126: rtx x;
2127: rtx insn;
2128: int initial_p;
2129: {
2130: enum rtx_code code = GET_CODE (x);
2131: rtx tem;
2132: int i;
2133: struct elim_table *p;
2134:
2135: switch (code)
2136: {
2137: case LABEL_REF:
2138: x = XEXP (x, 0);
2139:
2140: /* ... fall through ... */
2141:
2142: case CODE_LABEL:
2143: /* If we know nothing about this label, set the desired offsets. Note
2144: that this sets the offset at a label to be the offset before a label
2145: if we don't know anything about the label. This is not correct for
2146: the label after a BARRIER, but is the best guess we can make. If
2147: we guessed wrong, we will suppress an elimination that might have
2148: been possible had we been able to guess correctly. */
2149:
2150: if (! offsets_known_at[CODE_LABEL_NUMBER (x)])
2151: {
2152: for (i = 0; i < NUM_ELIMINABLE_REGS; i++)
2153: offsets_at[CODE_LABEL_NUMBER (x)][i]
2154: = (initial_p ? reg_eliminate[i].initial_offset
2155: : reg_eliminate[i].offset);
2156: offsets_known_at[CODE_LABEL_NUMBER (x)] = 1;
2157: }
2158:
2159: /* Otherwise, if this is the definition of a label and it is
2160: preceeded by a BARRIER, set our offsets to the known offset of
2161: that label. */
2162:
2163: else if (x == insn
2164: && (tem = prev_nonnote_insn (insn)) != 0
2165: && GET_CODE (tem) == BARRIER)
2166: {
2167: num_not_at_initial_offset = 0;
2168: for (i = 0; i < NUM_ELIMINABLE_REGS; i++)
2169: {
2170: reg_eliminate[i].offset = reg_eliminate[i].previous_offset
2171: = offsets_at[CODE_LABEL_NUMBER (x)][i];
2172: if (reg_eliminate[i].offset != reg_eliminate[i].initial_offset)
2173: num_not_at_initial_offset++;
2174: }
2175: }
2176:
2177: else
2178: /* If neither of the above cases is true, compare each offset
2179: with those previously recorded and suppress any eliminations
2180: where the offsets disagree. */
2181:
2182: for (i = 0; i < NUM_ELIMINABLE_REGS; i++)
2183: if (offsets_at[CODE_LABEL_NUMBER (x)][i]
2184: != (initial_p ? reg_eliminate[i].initial_offset
2185: : reg_eliminate[i].offset))
2186: reg_eliminate[i].can_eliminate = 0;
2187:
2188: return;
2189:
2190: case JUMP_INSN:
2191: set_label_offsets (PATTERN (insn), insn, initial_p);
2192:
2193: /* ... fall through ... */
2194:
2195: case INSN:
2196: case CALL_INSN:
2197: /* Any labels mentioned in REG_LABEL notes can be branched to indirectly
2198: and hence must have all eliminations at their initial offsets. */
2199: for (tem = REG_NOTES (x); tem; tem = XEXP (tem, 1))
2200: if (REG_NOTE_KIND (tem) == REG_LABEL)
2201: set_label_offsets (XEXP (tem, 0), insn, 1);
2202: return;
2203:
2204: case ADDR_VEC:
2205: case ADDR_DIFF_VEC:
2206: /* Each of the labels in the address vector must be at their initial
2207: offsets. We want the first first for ADDR_VEC and the second
2208: field for ADDR_DIFF_VEC. */
2209:
2210: for (i = 0; i < XVECLEN (x, code == ADDR_DIFF_VEC); i++)
2211: set_label_offsets (XVECEXP (x, code == ADDR_DIFF_VEC, i),
2212: insn, initial_p);
2213: return;
2214:
2215: case SET:
2216: /* We only care about setting PC. If the source is not RETURN,
2217: IF_THEN_ELSE, or a label, disable any eliminations not at
2218: their initial offsets. Similarly if any arm of the IF_THEN_ELSE
2219: isn't one of those possibilities. For branches to a label,
2220: call ourselves recursively.
2221:
2222: Note that this can disable elimination unnecessarily when we have
2223: a non-local goto since it will look like a non-constant jump to
2224: someplace in the current function. This isn't a significant
2225: problem since such jumps will normally be when all elimination
2226: pairs are back to their initial offsets. */
2227:
2228: if (SET_DEST (x) != pc_rtx)
2229: return;
2230:
2231: switch (GET_CODE (SET_SRC (x)))
2232: {
2233: case PC:
2234: case RETURN:
2235: return;
2236:
2237: case LABEL_REF:
2238: set_label_offsets (XEXP (SET_SRC (x), 0), insn, initial_p);
2239: return;
2240:
2241: case IF_THEN_ELSE:
2242: tem = XEXP (SET_SRC (x), 1);
2243: if (GET_CODE (tem) == LABEL_REF)
2244: set_label_offsets (XEXP (tem, 0), insn, initial_p);
2245: else if (GET_CODE (tem) != PC && GET_CODE (tem) != RETURN)
2246: break;
2247:
2248: tem = XEXP (SET_SRC (x), 2);
2249: if (GET_CODE (tem) == LABEL_REF)
2250: set_label_offsets (XEXP (tem, 0), insn, initial_p);
2251: else if (GET_CODE (tem) != PC && GET_CODE (tem) != RETURN)
2252: break;
2253: return;
2254: }
2255:
2256: /* If we reach here, all eliminations must be at their initial
2257: offset because we are doing a jump to a variable address. */
2258: for (p = reg_eliminate; p < ®_eliminate[NUM_ELIMINABLE_REGS]; p++)
2259: if (p->offset != p->initial_offset)
2260: p->can_eliminate = 0;
2261: }
2262: }
2263:
2264: /* Used for communication between the next two function to properly share
2265: the vector for an ASM_OPERANDS. */
2266:
2267: static struct rtvec_def *old_asm_operands_vec, *new_asm_operands_vec;
2268:
2269: /* Scan X and replace any eliminable registers (such as fp) with a
2270: replacement (such as sp), plus an offset.
2271:
2272: MEM_MODE is the mode of an enclosing MEM. We need this to know how
2273: much to adjust a register for, e.g., PRE_DEC. Also, if we are inside a
2274: MEM, we are allowed to replace a sum of a register and the constant zero
2275: with the register, which we cannot do outside a MEM. In addition, we need
2276: to record the fact that a register is referenced outside a MEM.
2277:
2278: If INSN is nonzero, it is the insn containing X. If we replace a REG
2279: in a SET_DEST with an equivalent MEM and INSN is non-zero, write a
2280: CLOBBER of the pseudo after INSN so find_equiv_regs will know that
2281: that the REG is being modified.
2282:
2283: If we see a modification to a register we know about, take the
2284: appropriate action (see case SET, below).
2285:
2286: REG_EQUIV_MEM and REG_EQUIV_ADDRESS contain address that have had
2287: replacements done assuming all offsets are at their initial values. If
2288: they are not, or if REG_EQUIV_ADDRESS is nonzero for a pseudo we
2289: encounter, return the actual location so that find_reloads will do
2290: the proper thing. */
2291:
2292: rtx
2293: eliminate_regs (x, mem_mode, insn)
2294: rtx x;
2295: enum machine_mode mem_mode;
2296: rtx insn;
2297: {
2298: enum rtx_code code = GET_CODE (x);
2299: struct elim_table *ep;
2300: int regno;
2301: rtx new;
2302: int i, j;
2303: char *fmt;
2304: int copied = 0;
2305:
2306: switch (code)
2307: {
2308: case CONST_INT:
2309: case CONST_DOUBLE:
2310: case CONST:
2311: case SYMBOL_REF:
2312: case CODE_LABEL:
2313: case PC:
2314: case CC0:
2315: case ASM_INPUT:
2316: case ADDR_VEC:
2317: case ADDR_DIFF_VEC:
2318: case RETURN:
2319: return x;
2320:
2321: case REG:
2322: regno = REGNO (x);
2323:
2324: /* First handle the case where we encounter a bare register that
2325: is eliminable. Replace it with a PLUS. */
2326: if (regno < FIRST_PSEUDO_REGISTER)
2327: {
2328: for (ep = reg_eliminate; ep < ®_eliminate[NUM_ELIMINABLE_REGS];
2329: ep++)
2330: if (ep->from_rtx == x && ep->can_eliminate)
2331: {
2332: if (! mem_mode)
2333: ep->ref_outside_mem = 1;
2334: return plus_constant (ep->to_rtx, ep->previous_offset);
2335: }
2336:
2337: }
2338: else if (reg_equiv_memory_loc && reg_equiv_memory_loc[regno]
2339: && (reg_equiv_address[regno] || num_not_at_initial_offset))
2340: {
2341: /* In this case, find_reloads would attempt to either use an
2342: incorrect address (if something is not at its initial offset)
2343: or substitute an replaced address into an insn (which loses
2344: if the offset is changed by some later action). So we simply
2345: return the replaced stack slot (assuming it is changed by
2346: elimination) and ignore the fact that this is actually a
2347: reference to the pseudo. Ensure we make a copy of the
2348: address in case it is shared. */
2349: new = eliminate_regs (reg_equiv_memory_loc[regno], mem_mode, 0);
2350: if (new != reg_equiv_memory_loc[regno])
2351: return copy_rtx (new);
2352: }
2353: return x;
2354:
2355: case PLUS:
2356: /* If this is the sum of an eliminable register and a constant, rework
2357: the sum. */
2358: if (GET_CODE (XEXP (x, 0)) == REG
2359: && REGNO (XEXP (x, 0)) < FIRST_PSEUDO_REGISTER
2360: && CONSTANT_P (XEXP (x, 1)))
2361: {
2362: for (ep = reg_eliminate; ep < ®_eliminate[NUM_ELIMINABLE_REGS];
2363: ep++)
2364: if (ep->from_rtx == XEXP (x, 0) && ep->can_eliminate)
2365: {
2366: if (! mem_mode)
2367: ep->ref_outside_mem = 1;
2368:
2369: /* The only time we want to replace a PLUS with a REG (this
2370: occurs when the constant operand of the PLUS is the negative
2371: of the offset) is when we are inside a MEM. We won't want
2372: to do so at other times because that would change the
2373: structure of the insn in a way that reload can't handle.
2374: We special-case the commonest situation in
2375: eliminate_regs_in_insn, so just replace a PLUS with a
2376: PLUS here, unless inside a MEM. */
2377: if (mem_mode && GET_CODE (XEXP (x, 1)) == CONST_INT
2378: && INTVAL (XEXP (x, 1)) == - ep->previous_offset)
2379: return ep->to_rtx;
2380: else
2381: return gen_rtx (PLUS, Pmode, ep->to_rtx,
2382: plus_constant (XEXP (x, 1),
2383: ep->previous_offset));
2384: }
2385:
2386: /* If the register is not eliminable, we are done since the other
2387: operand is a constant. */
2388: return x;
2389: }
2390:
2391: /* If this is part of an address, we want to bring any constant to the
2392: outermost PLUS. We will do this by doing register replacement in
2393: our operands and seeing if a constant shows up in one of them.
2394:
2395: We assume here this is part of an address (or a "load address" insn)
2396: since an eliminable register is not likely to appear in any other
2397: context.
2398:
2399: If we have (plus (eliminable) (reg)), we want to produce
2400: (plus (plus (replacement) (reg) (const))). If this was part of a
2401: normal add insn, (plus (replacement) (reg)) will be pushed as a
2402: reload. This is the desired action. */
2403:
2404: {
2405: rtx new0 = eliminate_regs (XEXP (x, 0), mem_mode, 0);
2406: rtx new1 = eliminate_regs (XEXP (x, 1), mem_mode, 0);
2407:
2408: if (new0 != XEXP (x, 0) || new1 != XEXP (x, 1))
2409: {
2410: /* If one side is a PLUS and the other side is a pseudo that
2411: didn't get a hard register but has a reg_equiv_constant,
2412: we must replace the constant here since it may no longer
2413: be in the position of any operand. */
2414: if (GET_CODE (new0) == PLUS && GET_CODE (new1) == REG
2415: && REGNO (new1) >= FIRST_PSEUDO_REGISTER
2416: && reg_renumber[REGNO (new1)] < 0
2417: && reg_equiv_constant != 0
2418: && reg_equiv_constant[REGNO (new1)] != 0)
2419: new1 = reg_equiv_constant[REGNO (new1)];
2420: else if (GET_CODE (new1) == PLUS && GET_CODE (new0) == REG
2421: && REGNO (new0) >= FIRST_PSEUDO_REGISTER
2422: && reg_renumber[REGNO (new0)] < 0
2423: && reg_equiv_constant[REGNO (new0)] != 0)
2424: new0 = reg_equiv_constant[REGNO (new0)];
2425:
2426: new = form_sum (new0, new1);
2427:
2428: /* As above, if we are not inside a MEM we do not want to
2429: turn a PLUS into something else. We might try to do so here
2430: for an addition of 0 if we aren't optimizing. */
2431: if (! mem_mode && GET_CODE (new) != PLUS)
2432: return gen_rtx (PLUS, GET_MODE (x), new, const0_rtx);
2433: else
2434: return new;
2435: }
2436: }
2437: return x;
2438:
2439: case EXPR_LIST:
2440: /* If we have something in XEXP (x, 0), the usual case, eliminate it. */
2441: if (XEXP (x, 0))
2442: {
2443: new = eliminate_regs (XEXP (x, 0), mem_mode, 0);
2444: if (new != XEXP (x, 0))
2445: x = gen_rtx (EXPR_LIST, REG_NOTE_KIND (x), new, XEXP (x, 1));
2446: }
2447:
2448: /* ... fall through ... */
2449:
2450: case INSN_LIST:
2451: /* Now do eliminations in the rest of the chain. If this was
2452: an EXPR_LIST, this might result in allocating more memory than is
2453: strictly needed, but it simplifies the code. */
2454: if (XEXP (x, 1))
2455: {
2456: new = eliminate_regs (XEXP (x, 1), mem_mode, 0);
2457: if (new != XEXP (x, 1))
2458: return gen_rtx (INSN_LIST, GET_MODE (x), XEXP (x, 0), new);
2459: }
2460: return x;
2461:
2462: case CALL:
2463: case COMPARE:
2464: case MINUS:
2465: case MULT:
2466: case DIV: case UDIV:
2467: case MOD: case UMOD:
2468: case AND: case IOR: case XOR:
2469: case LSHIFT: case ASHIFT: case ROTATE:
2470: case ASHIFTRT: case LSHIFTRT: case ROTATERT:
2471: case NE: case EQ:
2472: case GE: case GT: case GEU: case GTU:
2473: case LE: case LT: case LEU: case LTU:
2474: {
2475: rtx new0 = eliminate_regs (XEXP (x, 0), mem_mode, 0);
2476: rtx new1 = XEXP (x, 1) ? eliminate_regs (XEXP (x, 1), mem_mode, 0) : 0;
2477:
2478: if (new0 != XEXP (x, 0) || new1 != XEXP (x, 1))
2479: return gen_rtx (code, GET_MODE (x), new0, new1);
2480: }
2481: return x;
2482:
2483: case PRE_INC:
2484: case POST_INC:
2485: case PRE_DEC:
2486: case POST_DEC:
2487: for (ep = reg_eliminate; ep < ®_eliminate[NUM_ELIMINABLE_REGS]; ep++)
2488: if (ep->to_rtx == XEXP (x, 0))
2489: {
2490: if (code == PRE_DEC || code == POST_DEC)
2491: ep->offset += GET_MODE_SIZE (mem_mode);
2492: else
2493: ep->offset -= GET_MODE_SIZE (mem_mode);
2494: }
2495:
2496: /* Fall through to generic unary operation case. */
2497: case USE:
2498: case STRICT_LOW_PART:
2499: case NEG: case NOT:
2500: case SIGN_EXTEND: case ZERO_EXTEND:
2501: case TRUNCATE: case FLOAT_EXTEND: case FLOAT_TRUNCATE:
2502: case FLOAT: case FIX:
2503: case UNSIGNED_FIX: case UNSIGNED_FLOAT:
2504: case ABS:
2505: case SQRT:
2506: case FFS:
2507: new = eliminate_regs (XEXP (x, 0), mem_mode, 0);
2508: if (new != XEXP (x, 0))
2509: return gen_rtx (code, GET_MODE (x), new);
2510: return x;
2511:
2512: case SUBREG:
2513: /* Similar to above processing, but preserve SUBREG_WORD.
2514: Convert (subreg (mem)) to (mem) if not paradoxical.
2515: Also, if we have a non-paradoxical (subreg (pseudo)) and the
2516: pseudo didn't get a hard reg, we must replace this with the
2517: eliminated version of the memory location because push_reloads
2518: may do the replacement in certain circumstances. */
2519: if (GET_CODE (SUBREG_REG (x)) == REG
2520: && (GET_MODE_SIZE (GET_MODE (x))
2521: <= GET_MODE_SIZE (GET_MODE (SUBREG_REG (x))))
2522: && reg_equiv_memory_loc != 0
2523: && reg_equiv_memory_loc[REGNO (SUBREG_REG (x))] != 0)
2524: {
2525: new = eliminate_regs (reg_equiv_memory_loc[REGNO (SUBREG_REG (x))],
2526: mem_mode, 0);
2527:
2528: /* If we didn't change anything, we must retain the pseudo. */
2529: if (new == reg_equiv_memory_loc[REGNO (SUBREG_REG (x))])
2530: new = XEXP (x, 0);
2531: else
2532: /* Otherwise, ensure NEW isn't shared in case we have to reload
2533: it. */
2534: new = copy_rtx (new);
2535: }
2536: else
2537: new = eliminate_regs (SUBREG_REG (x), mem_mode, 0);
2538:
2539: if (new != XEXP (x, 0))
2540: {
2541: if (GET_CODE (new) == MEM
2542: && (GET_MODE_SIZE (GET_MODE (x))
2543: <= GET_MODE_SIZE (GET_MODE (new))))
2544: {
2545: int offset = SUBREG_WORD (x) * UNITS_PER_WORD;
2546: enum machine_mode mode = GET_MODE (x);
2547:
2548: #if BYTES_BIG_ENDIAN
2549: offset += (MIN (UNITS_PER_WORD,
2550: GET_MODE_SIZE (GET_MODE (new)))
2551: - MIN (UNITS_PER_WORD, GET_MODE_SIZE (mode)));
2552: #endif
2553:
2554: PUT_MODE (new, mode);
2555: XEXP (new, 0) = plus_constant (XEXP (new, 0), offset);
2556: return new;
2557: }
2558: else
2559: return gen_rtx (SUBREG, GET_MODE (x), new, SUBREG_WORD (x));
2560: }
2561:
2562: return x;
2563:
2564: case CLOBBER:
2565: /* If clobbering a register that is the replacement register for an
2566: elimination we still think can be peformed, note that it cannot
2567: be performed. Otherwise, we need not be concerned about it. */
2568: for (ep = reg_eliminate; ep < ®_eliminate[NUM_ELIMINABLE_REGS]; ep++)
2569: if (ep->to_rtx == XEXP (x, 0))
2570: ep->can_eliminate = 0;
2571:
2572: return x;
2573:
2574: case ASM_OPERANDS:
2575: {
2576: rtx *temp_vec;
2577: /* Properly handle sharing input and constraint vectors. */
2578: if (ASM_OPERANDS_INPUT_VEC (x) != old_asm_operands_vec)
2579: {
2580: /* When we come to a new vector not seen before,
2581: scan all its elements; keep the old vector if none
2582: of them changes; otherwise, make a copy. */
2583: old_asm_operands_vec = ASM_OPERANDS_INPUT_VEC (x);
2584: temp_vec = (rtx *) alloca (XVECLEN (x, 3) * sizeof (rtx));
2585: for (i = 0; i < ASM_OPERANDS_INPUT_LENGTH (x); i++)
2586: temp_vec[i] = eliminate_regs (ASM_OPERANDS_INPUT (x, i),
2587: mem_mode, 0);
2588:
2589: for (i = 0; i < ASM_OPERANDS_INPUT_LENGTH (x); i++)
2590: if (temp_vec[i] != ASM_OPERANDS_INPUT (x, i))
2591: break;
2592:
2593: if (i == ASM_OPERANDS_INPUT_LENGTH (x))
2594: new_asm_operands_vec = old_asm_operands_vec;
2595: else
2596: new_asm_operands_vec
2597: = gen_rtvec_v (ASM_OPERANDS_INPUT_LENGTH (x), temp_vec);
2598: }
2599:
2600: /* If we had to copy the vector, copy the entire ASM_OPERANDS. */
2601: if (new_asm_operands_vec == old_asm_operands_vec)
2602: return x;
2603:
2604: new = gen_rtx (ASM_OPERANDS, VOIDmode, ASM_OPERANDS_TEMPLATE (x),
2605: ASM_OPERANDS_OUTPUT_CONSTRAINT (x),
2606: ASM_OPERANDS_OUTPUT_IDX (x), new_asm_operands_vec,
2607: ASM_OPERANDS_INPUT_CONSTRAINT_VEC (x),
2608: ASM_OPERANDS_SOURCE_FILE (x),
2609: ASM_OPERANDS_SOURCE_LINE (x));
2610: new->volatil = x->volatil;
2611: return new;
2612: }
2613:
2614: case SET:
2615: /* Check for setting a register that we know about. */
2616: if (GET_CODE (SET_DEST (x)) == REG)
2617: {
2618: /* See if this is setting the replacement register for an
2619: elimination.
2620:
2621: If DEST is the frame pointer, we do nothing because we assume that
2622: all assignments to the frame pointer are for non-local gotos and
2623: are being done at a time when they are valid and do not disturb
2624: anything else. Some machines want to eliminate a fake argument
2625: pointer with either the frame or stack pointer. Assignments to
2626: the frame pointer must not prevent this elimination. */
2627:
2628: for (ep = reg_eliminate; ep < ®_eliminate[NUM_ELIMINABLE_REGS];
2629: ep++)
2630: if (ep->to_rtx == SET_DEST (x)
2631: && SET_DEST (x) != frame_pointer_rtx)
2632: {
2633: /* If it is being incrememented, adjust the offset. Otherwise,
2634: this elimination can't be done. */
2635: rtx src = SET_SRC (x);
2636:
2637: if (GET_CODE (src) == PLUS
2638: && XEXP (src, 0) == SET_DEST (x)
2639: && GET_CODE (XEXP (src, 1)) == CONST_INT)
2640: ep->offset -= INTVAL (XEXP (src, 1));
2641: else
2642: ep->can_eliminate = 0;
2643: }
2644:
2645: /* Now check to see we are assigning to a register that can be
2646: eliminated. If so, it must be as part of a PARALLEL, since we
2647: will not have been called if this is a single SET. So indicate
2648: that we can no longer eliminate this reg. */
2649: for (ep = reg_eliminate; ep < ®_eliminate[NUM_ELIMINABLE_REGS];
2650: ep++)
2651: if (ep->from_rtx == SET_DEST (x) && ep->can_eliminate)
2652: ep->can_eliminate = 0;
2653: }
2654:
2655: /* Now avoid the loop below in this common case. */
2656: {
2657: rtx new0 = eliminate_regs (SET_DEST (x), 0, 0);
2658: rtx new1 = eliminate_regs (SET_SRC (x), 0, 0);
2659:
2660: /* If SET_DEST changed from a REG to a MEM and INSN is non-zero,
2661: write a CLOBBER insn. */
2662: if (GET_CODE (SET_DEST (x)) == REG && GET_CODE (new0) == MEM
2663: && insn != 0)
2664: emit_insn_after (gen_rtx (CLOBBER, VOIDmode, SET_DEST (x)), insn);
2665:
2666: if (new0 != SET_DEST (x) || new1 != SET_SRC (x))
2667: return gen_rtx (SET, VOIDmode, new0, new1);
2668: }
2669:
2670: return x;
2671:
2672: case MEM:
2673: /* Our only special processing is to pass the mode of the MEM to our
2674: recursive call and copy the flags. While we are here, handle this
2675: case more efficiently. */
2676: new = eliminate_regs (XEXP (x, 0), GET_MODE (x), 0);
2677: if (new != XEXP (x, 0))
2678: {
2679: new = gen_rtx (MEM, GET_MODE (x), new);
2680: new->volatil = x->volatil;
2681: new->unchanging = x->unchanging;
2682: new->in_struct = x->in_struct;
2683: return new;
2684: }
2685: else
2686: return x;
2687: }
2688:
2689: /* Process each of our operands recursively. If any have changed, make a
2690: copy of the rtx. */
2691: fmt = GET_RTX_FORMAT (code);
2692: for (i = 0; i < GET_RTX_LENGTH (code); i++, fmt++)
2693: {
2694: if (*fmt == 'e')
2695: {
2696: new = eliminate_regs (XEXP (x, i), mem_mode, 0);
2697: if (new != XEXP (x, i) && ! copied)
2698: {
2699: rtx new_x = rtx_alloc (code);
2700: bcopy (x, new_x, (sizeof (*new_x) - sizeof (new_x->fld)
2701: + (sizeof (new_x->fld[0])
2702: * GET_RTX_LENGTH (code))));
2703: x = new_x;
2704: copied = 1;
2705: }
2706: XEXP (x, i) = new;
2707: }
2708: else if (*fmt == 'E')
2709: {
2710: int copied_vec = 0;
2711: for (j = 0; j < XVECLEN (x, i); j++)
2712: {
2713: new = eliminate_regs (XVECEXP (x, i, j), mem_mode, insn);
2714: if (new != XVECEXP (x, i, j) && ! copied_vec)
2715: {
2716: rtvec new_v = gen_rtvec_v (XVECLEN (x, i),
2717: &XVECEXP (x, i, 0));
2718: if (! copied)
2719: {
2720: rtx new_x = rtx_alloc (code);
2721: bcopy (x, new_x, (sizeof (*new_x) - sizeof (new_x->fld)
2722: + (sizeof (new_x->fld[0])
2723: * GET_RTX_LENGTH (code))));
2724: x = new_x;
2725: copied = 1;
2726: }
2727: XVEC (x, i) = new_v;
2728: copied_vec = 1;
2729: }
2730: XVECEXP (x, i, j) = new;
2731: }
2732: }
2733: }
2734:
2735: return x;
2736: }
2737:
2738: /* Scan INSN and eliminate all eliminable registers in it.
2739:
2740: If REPLACE is nonzero, do the replacement destructively. Also
2741: delete the insn as dead it if it is setting an eliminable register.
2742:
2743: If REPLACE is zero, do all our allocations in reload_obstack.
2744:
2745: If no eliminations were done and this insn doesn't require any elimination
2746: processing (these are not identical conditions: it might be updating sp,
2747: but not referencing fp; this needs to be seen during reload_as_needed so
2748: that the offset between fp and sp can be taken into consideration), zero
2749: is returned. Otherwise, 1 is returned. */
2750:
2751: static int
2752: eliminate_regs_in_insn (insn, replace)
2753: rtx insn;
2754: int replace;
2755: {
2756: rtx old_body = PATTERN (insn);
2757: rtx new_body;
2758: int val = 0;
2759: struct elim_table *ep;
2760:
2761: if (! replace)
2762: push_obstacks (&reload_obstack, &reload_obstack);
2763:
2764: if (GET_CODE (old_body) == SET && GET_CODE (SET_DEST (old_body)) == REG
2765: && REGNO (SET_DEST (old_body)) < FIRST_PSEUDO_REGISTER)
2766: {
2767: /* Check for setting an eliminable register. */
2768: for (ep = reg_eliminate; ep < ®_eliminate[NUM_ELIMINABLE_REGS]; ep++)
2769: if (ep->from_rtx == SET_DEST (old_body) && ep->can_eliminate)
2770: {
2771: /* In this case this insn isn't serving a useful purpose. We
2772: will delete it in reload_as_needed once we know that this
2773: elimination is, in fact, being done.
2774:
2775: If REPLACE isn't set, we can't delete this insn, but neededn't
2776: process it since it won't be used unless something changes. */
2777: if (replace)
2778: delete_dead_insn (insn);
2779: val = 1;
2780: goto done;
2781: }
2782:
2783: /* Check for (set (reg) (plus (reg from) (offset))) where the offset
2784: in the insn is the negative of the offset in FROM. Substitute
2785: (set (reg) (reg to)) for the insn and change its code.
2786:
2787: We have to do this here, rather than in eliminate_regs, do that we can
2788: change the insn code. */
2789:
2790: if (GET_CODE (SET_SRC (old_body)) == PLUS
2791: && GET_CODE (XEXP (SET_SRC (old_body), 0)) == REG
2792: && GET_CODE (XEXP (SET_SRC (old_body), 1)) == CONST_INT)
2793: for (ep = reg_eliminate; ep < ®_eliminate[NUM_ELIMINABLE_REGS];
2794: ep++)
2795: if (ep->from_rtx == XEXP (SET_SRC (old_body), 0)
2796: && ep->can_eliminate
2797: && ep->offset == - INTVAL (XEXP (SET_SRC (old_body), 1)))
2798: {
2799: PATTERN (insn) = gen_rtx (SET, VOIDmode,
2800: SET_DEST (old_body), ep->to_rtx);
2801: INSN_CODE (insn) = -1;
2802: val = 1;
2803: goto done;
2804: }
2805: }
2806:
2807: old_asm_operands_vec = 0;
2808:
2809: /* Replace the body of this insn with a substituted form. If we changed
2810: something, return non-zero. If this is the final call for this
2811: insn (REPLACE is non-zero), do the elimination in REG_NOTES as well.
2812:
2813: If we are replacing a body that was a (set X (plus Y Z)), try to
2814: re-recognize the insn. We do this in case we had a simple addition
2815: but now can do this as a load-address. This saves an insn in this
2816: common case. */
2817:
2818: new_body = eliminate_regs (old_body, 0, replace ? insn : 0);
2819: if (new_body != old_body)
2820: {
2821: if (GET_CODE (old_body) != SET || GET_CODE (SET_SRC (old_body)) != PLUS
2822: || ! validate_change (insn, &PATTERN (insn), new_body, 0))
2823: PATTERN (insn) = new_body;
2824:
2825: if (replace && REG_NOTES (insn))
2826: REG_NOTES (insn) = eliminate_regs (REG_NOTES (insn), 0, 0);
2827: val = 1;
2828: }
2829:
2830: /* Loop through all elimination pairs. See if any have changed and
2831: recalculate the number not at initial offset.
2832:
2833: Compute the maximum offset (minimum offset if the stack does not
2834: grow downward) for each elimination pair.
2835:
2836: We also detect a cases where register elimination cannot be done,
2837: namely, if a register would be both changed and referenced outside a MEM
2838: in the resulting insn since such an insn is often undefined and, even if
2839: not, we cannot know what meaning will be given to it. Note that it is
2840: valid to have a register used in an address in an insn that changes it
2841: (presumably with a pre- or post-increment or decrement).
2842:
2843: If anything changes, return nonzero. */
2844:
2845: num_not_at_initial_offset = 0;
2846: for (ep = reg_eliminate; ep < ®_eliminate[NUM_ELIMINABLE_REGS]; ep++)
2847: {
2848: if (ep->previous_offset != ep->offset && ep->ref_outside_mem)
2849: ep->can_eliminate = 0;
2850:
2851: ep->ref_outside_mem = 0;
2852:
2853: if (ep->previous_offset != ep->offset)
2854: val = 1;
2855:
2856: ep->previous_offset = ep->offset;
2857: if (ep->can_eliminate && ep->offset != ep->initial_offset)
2858: num_not_at_initial_offset++;
2859:
2860: #ifdef STACK_GROWS_DOWNWARD
2861: ep->max_offset = MAX (ep->max_offset, ep->offset);
2862: #else
2863: ep->max_offset = MIN (ep->max_offset, ep->offset);
2864: #endif
2865: }
2866:
2867: done:
2868: if (! replace)
2869: pop_obstacks ();
2870:
2871: return val;
2872: }
2873:
2874: /* Given X, a SET or CLOBBER of DEST, if DEST is the target of a register
2875: replacement we currently believe is valid, mark it as not eliminable if X
2876: modifies DEST in any way other than by adding a constant integer to it.
2877:
2878: If DEST is the frame pointer, we do nothing because we assume that
2879: all assignments to the frame pointer are nonlocal gotos and are being done
2880: at a time when they are valid and do not disturb anything else.
2881: Some machines want to eliminate a fake argument pointer with either the
2882: frame or stack pointer. Assignments to the frame pointer must not prevent
2883: this elimination.
2884:
2885: Called via note_stores from reload before starting its passes to scan
2886: the insns of the function. */
2887:
2888: static void
2889: mark_not_eliminable (dest, x)
2890: rtx dest;
2891: rtx x;
2892: {
2893: register int i;
2894:
2895: /* A SUBREG of a hard register here is just changing its mode. We should
2896: not see a SUBREG of an eliminable hard register, but check just in
2897: case. */
2898: if (GET_CODE (dest) == SUBREG)
2899: dest = SUBREG_REG (dest);
2900:
2901: if (dest == frame_pointer_rtx)
2902: return;
2903:
2904: for (i = 0; i < NUM_ELIMINABLE_REGS; i++)
2905: if (reg_eliminate[i].can_eliminate && dest == reg_eliminate[i].to_rtx
2906: && (GET_CODE (x) != SET
2907: || GET_CODE (SET_SRC (x)) != PLUS
2908: || XEXP (SET_SRC (x), 0) != dest
2909: || GET_CODE (XEXP (SET_SRC (x), 1)) != CONST_INT))
2910: {
2911: reg_eliminate[i].can_eliminate_previous
2912: = reg_eliminate[i].can_eliminate = 0;
2913: num_eliminable--;
2914: }
2915: }
2916:
2917: /* Kick all pseudos out of hard register REGNO.
2918: If GLOBAL is nonzero, try to find someplace else to put them.
2919: If DUMPFILE is nonzero, log actions taken on that file.
2920:
2921: If CANT_ELIMINATE is nonzero, it means that we are doing this spill
2922: because we found we can't eliminate some register. In the case, no pseudos
2923: are allowed to be in the register, even if they are only in a block that
2924: doesn't require spill registers, unlike the case when we are spilling this
2925: hard reg to produce another spill register.
2926:
2927: Return nonzero if any pseudos needed to be kicked out. */
2928:
2929: static int
2930: spill_hard_reg (regno, global, dumpfile, cant_eliminate)
2931: register int regno;
2932: int global;
2933: FILE *dumpfile;
2934: int cant_eliminate;
2935: {
2936: int something_changed = 0;
2937: register int i;
2938:
2939: SET_HARD_REG_BIT (forbidden_regs, regno);
2940:
2941: /* Spill every pseudo reg that was allocated to this reg
2942: or to something that overlaps this reg. */
2943:
2944: for (i = FIRST_PSEUDO_REGISTER; i < max_regno; i++)
2945: if (reg_renumber[i] >= 0
2946: && reg_renumber[i] <= regno
2947: && (reg_renumber[i]
2948: + HARD_REGNO_NREGS (reg_renumber[i],
2949: PSEUDO_REGNO_MODE (i))
2950: > regno))
2951: {
2952: enum reg_class class = REGNO_REG_CLASS (regno);
2953:
2954: /* If this register belongs solely to a basic block which needed no
2955: spilling of any class that this register is contained in,
2956: leave it be, unless we are spilling this register because
2957: it was a hard register that can't be eliminated. */
2958:
2959: if (! cant_eliminate
2960: && basic_block_needs[0]
2961: && reg_basic_block[i] >= 0
2962: && basic_block_needs[(int) class][reg_basic_block[i]] == 0)
2963: {
2964: enum reg_class *p;
2965:
2966: for (p = reg_class_superclasses[(int) class];
2967: *p != LIM_REG_CLASSES; p++)
2968: if (basic_block_needs[(int) *p][reg_basic_block[i]] > 0)
2969: break;
2970:
2971: if (*p == LIM_REG_CLASSES)
2972: continue;
2973: }
2974:
2975: /* Mark it as no longer having a hard register home. */
2976: reg_renumber[i] = -1;
2977: /* We will need to scan everything again. */
2978: something_changed = 1;
2979: if (global)
2980: retry_global_alloc (i, forbidden_regs);
2981:
2982: alter_reg (i, regno);
2983: if (dumpfile)
2984: {
2985: if (reg_renumber[i] == -1)
2986: fprintf (dumpfile, " Register %d now on stack.\n\n", i);
2987: else
2988: fprintf (dumpfile, " Register %d now in %d.\n\n",
2989: i, reg_renumber[i]);
2990: }
2991: }
2992:
2993: return something_changed;
2994: }
2995:
2996: /* Find all paradoxical subregs within X and update reg_max_ref_width. */
2997:
2998: static void
2999: scan_paradoxical_subregs (x)
3000: register rtx x;
3001: {
3002: register int i;
3003: register char *fmt;
3004: register enum rtx_code code = GET_CODE (x);
3005:
3006: switch (code)
3007: {
3008: case CONST_INT:
3009: case CONST:
3010: case SYMBOL_REF:
3011: case LABEL_REF:
3012: case CONST_DOUBLE:
3013: case CC0:
3014: case PC:
3015: case REG:
3016: case USE:
3017: case CLOBBER:
3018: return;
3019:
3020: case SUBREG:
3021: if (GET_CODE (SUBREG_REG (x)) == REG
3022: && GET_MODE_SIZE (GET_MODE (x)) > GET_MODE_SIZE (GET_MODE (SUBREG_REG (x))))
3023: reg_max_ref_width[REGNO (SUBREG_REG (x))]
3024: = GET_MODE_SIZE (GET_MODE (x));
3025: return;
3026: }
3027:
3028: fmt = GET_RTX_FORMAT (code);
3029: for (i = GET_RTX_LENGTH (code) - 1; i >= 0; i--)
3030: {
3031: if (fmt[i] == 'e')
3032: scan_paradoxical_subregs (XEXP (x, i));
3033: else if (fmt[i] == 'E')
3034: {
3035: register int j;
3036: for (j = XVECLEN (x, i) - 1; j >=0; j--)
3037: scan_paradoxical_subregs (XVECEXP (x, i, j));
3038: }
3039: }
3040: }
3041:
3042: struct hard_reg_n_uses { int regno; int uses; };
3043:
3044: static int
3045: hard_reg_use_compare (p1, p2)
3046: struct hard_reg_n_uses *p1, *p2;
3047: {
3048: int tem = p1->uses - p2->uses;
3049: if (tem != 0) return tem;
3050: /* If regs are equally good, sort by regno,
3051: so that the results of qsort leave nothing to chance. */
3052: return p1->regno - p2->regno;
3053: }
3054:
3055: /* Choose the order to consider regs for use as reload registers
3056: based on how much trouble would be caused by spilling one.
3057: Store them in order of decreasing preference in potential_reload_regs. */
3058:
3059: static void
3060: order_regs_for_reload ()
3061: {
3062: register int i;
3063: register int o = 0;
3064: int large = 0;
3065:
3066: struct hard_reg_n_uses hard_reg_n_uses[FIRST_PSEUDO_REGISTER];
3067:
3068: CLEAR_HARD_REG_SET (bad_spill_regs);
3069:
3070: for (i = 0; i < FIRST_PSEUDO_REGISTER; i++)
3071: potential_reload_regs[i] = -1;
3072:
3073: /* Count number of uses of each hard reg by pseudo regs allocated to it
3074: and then order them by decreasing use. */
3075:
3076: for (i = 0; i < FIRST_PSEUDO_REGISTER; i++)
3077: {
3078: hard_reg_n_uses[i].uses = 0;
3079: hard_reg_n_uses[i].regno = i;
3080: }
3081:
3082: for (i = FIRST_PSEUDO_REGISTER; i < max_regno; i++)
3083: {
3084: int regno = reg_renumber[i];
3085: if (regno >= 0)
3086: {
3087: int lim = regno + HARD_REGNO_NREGS (regno, PSEUDO_REGNO_MODE (i));
3088: while (regno < lim)
3089: hard_reg_n_uses[regno++].uses += reg_n_refs[i];
3090: }
3091: large += reg_n_refs[i];
3092: }
3093:
3094: /* Now fixed registers (which cannot safely be used for reloading)
3095: get a very high use count so they will be considered least desirable.
3096: Registers used explicitly in the rtl code are almost as bad. */
3097:
3098: for (i = 0; i < FIRST_PSEUDO_REGISTER; i++)
3099: {
3100: if (fixed_regs[i])
3101: {
3102: hard_reg_n_uses[i].uses += 2 * large + 2;
3103: SET_HARD_REG_BIT (bad_spill_regs, i);
3104: }
3105: else if (regs_explicitly_used[i])
3106: {
3107: hard_reg_n_uses[i].uses += large + 1;
3108: /* ??? We are doing this here because of the potential that
3109: bad code may be generated if a register explicitly used in
3110: an insn was used as a spill register for that insn. But
3111: not using these are spill registers may lose on some machine.
3112: We'll have to see how this works out. */
3113: SET_HARD_REG_BIT (bad_spill_regs, i);
3114: }
3115: }
3116: hard_reg_n_uses[FRAME_POINTER_REGNUM].uses += 2 * large + 2;
3117: SET_HARD_REG_BIT (bad_spill_regs, FRAME_POINTER_REGNUM);
3118:
3119: #ifdef ELIMINABLE_REGS
3120: /* If registers other than the frame pointer are eliminable, mark them as
3121: poor choices. */
3122: for (i = 0; i < NUM_ELIMINABLE_REGS; i++)
3123: {
3124: hard_reg_n_uses[reg_eliminate[i].from].uses += 2 * large + 2;
3125: SET_HARD_REG_BIT (bad_spill_regs, reg_eliminate[i].from);
3126: }
3127: #endif
3128:
3129: /* Prefer registers not so far used, for use in temporary loading.
3130: Among them, if REG_ALLOC_ORDER is defined, use that order.
3131: Otherwise, prefer registers not preserved by calls. */
3132:
3133: #ifdef REG_ALLOC_ORDER
3134: for (i = 0; i < FIRST_PSEUDO_REGISTER; i++)
3135: {
3136: int regno = reg_alloc_order[i];
3137:
3138: if (hard_reg_n_uses[regno].uses == 0)
3139: potential_reload_regs[o++] = regno;
3140: }
3141: #else
3142: for (i = 0; i < FIRST_PSEUDO_REGISTER; i++)
3143: {
3144: if (hard_reg_n_uses[i].uses == 0 && call_used_regs[i])
3145: potential_reload_regs[o++] = i;
3146: }
3147: for (i = 0; i < FIRST_PSEUDO_REGISTER; i++)
3148: {
3149: if (hard_reg_n_uses[i].uses == 0 && ! call_used_regs[i])
3150: potential_reload_regs[o++] = i;
3151: }
3152: #endif
3153:
3154: qsort (hard_reg_n_uses, FIRST_PSEUDO_REGISTER,
3155: sizeof hard_reg_n_uses[0], hard_reg_use_compare);
3156:
3157: /* Now add the regs that are already used,
3158: preferring those used less often. The fixed and otherwise forbidden
3159: registers will be at the end of this list. */
3160:
3161: for (i = 0; i < FIRST_PSEUDO_REGISTER; i++)
3162: if (hard_reg_n_uses[i].uses != 0)
3163: potential_reload_regs[o++] = hard_reg_n_uses[i].regno;
3164: }
3165:
3166: /* Reload pseudo-registers into hard regs around each insn as needed.
3167: Additional register load insns are output before the insn that needs it
3168: and perhaps store insns after insns that modify the reloaded pseudo reg.
3169:
3170: reg_last_reload_reg and reg_reloaded_contents keep track of
3171: which pseudo-registers are already available in reload registers.
3172: We update these for the reloads that we perform,
3173: as the insns are scanned. */
3174:
3175: static void
3176: reload_as_needed (first, live_known)
3177: rtx first;
3178: int live_known;
3179: {
3180: register rtx insn;
3181: register int i;
3182: int this_block = 0;
3183: rtx x;
3184: rtx after_call = 0;
3185:
3186: bzero (spill_reg_rtx, sizeof spill_reg_rtx);
3187: reg_last_reload_reg = (rtx *) alloca (max_regno * sizeof (rtx));
3188: bzero (reg_last_reload_reg, max_regno * sizeof (rtx));
3189: reg_has_output_reload = (char *) alloca (max_regno);
3190: for (i = 0; i < n_spills; i++)
3191: {
3192: reg_reloaded_contents[i] = -1;
3193: reg_reloaded_insn[i] = 0;
3194: }
3195:
3196: /* Reset all offsets on eliminable registers to their initial values. */
3197: #ifdef ELIMINABLE_REGS
3198: for (i = 0; i < NUM_ELIMINABLE_REGS; i++)
3199: {
3200: INITIAL_ELIMINATION_OFFSET (reg_eliminate[i].from, reg_eliminate[i].to,
3201: reg_eliminate[i].initial_offset)
3202: reg_eliminate[i].previous_offset
3203: = reg_eliminate[i].offset = reg_eliminate[i].initial_offset;
3204: }
3205: #else
3206: INITIAL_FRAME_POINTER_OFFSET (reg_eliminate[0].initial_offset);
3207: reg_eliminate[0].previous_offset
3208: = reg_eliminate[0].offset = reg_eliminate[0].initial_offset;
3209: #endif
3210:
3211: num_not_at_initial_offset = 0;
3212:
3213: for (insn = first; insn;)
3214: {
3215: register rtx next = NEXT_INSN (insn);
3216:
3217: /* Notice when we move to a new basic block. */
3218: if (live_known && basic_block_needs && this_block + 1 < n_basic_blocks
3219: && insn == basic_block_head[this_block+1])
3220: ++this_block;
3221:
3222: /* If we pass a label, copy the offsets from the label information
3223: into the current offsets of each elimination. */
3224: if (GET_CODE (insn) == CODE_LABEL)
3225: {
3226: num_not_at_initial_offset = 0;
3227: for (i = 0; i < NUM_ELIMINABLE_REGS; i++)
3228: {
3229: reg_eliminate[i].offset = reg_eliminate[i].previous_offset
3230: = offsets_at[CODE_LABEL_NUMBER (insn)][i];
3231: if (reg_eliminate[i].offset != reg_eliminate[i].initial_offset)
3232: num_not_at_initial_offset++;
3233: }
3234: }
3235:
3236: else if (GET_RTX_CLASS (GET_CODE (insn)) == 'i')
3237: {
3238: rtx avoid_return_reg = 0;
3239:
3240: #ifdef SMALL_REGISTER_CLASSES
3241: /* Set avoid_return_reg if this is an insn
3242: that might use the value of a function call. */
3243: if (GET_CODE (insn) == CALL_INSN)
3244: {
3245: if (GET_CODE (PATTERN (insn)) == SET)
3246: after_call = SET_DEST (PATTERN (insn));
3247: else if (GET_CODE (PATTERN (insn)) == PARALLEL
3248: && GET_CODE (XVECEXP (PATTERN (insn), 0, 0)) == SET)
3249: after_call = SET_DEST (XVECEXP (PATTERN (insn), 0, 0));
3250: else
3251: after_call = 0;
3252: }
3253: else if (after_call != 0
3254: && !(GET_CODE (PATTERN (insn)) == SET
3255: && SET_DEST (PATTERN (insn)) == stack_pointer_rtx))
3256: {
3257: if (reg_mentioned_p (after_call, PATTERN (insn)))
3258: avoid_return_reg = after_call;
3259: after_call = 0;
3260: }
3261: #endif /* SMALL_REGISTER_CLASSES */
3262:
3263: /* If we need to do register elimination processing, do so.
3264: This might delete the insn, in which case we are done. */
3265: if (num_eliminable && GET_MODE (insn) == QImode)
3266: {
3267: eliminate_regs_in_insn (insn, 1);
3268: if (GET_CODE (insn) == NOTE)
3269: {
3270: insn = next;
3271: continue;
3272: }
3273: }
3274:
3275: if (GET_MODE (insn) == VOIDmode)
3276: n_reloads = 0;
3277: /* First find the pseudo regs that must be reloaded for this insn.
3278: This info is returned in the tables reload_... (see reload.h).
3279: Also modify the body of INSN by substituting RELOAD
3280: rtx's for those pseudo regs. */
3281: else
3282: {
3283: bzero (reg_has_output_reload, max_regno);
3284: CLEAR_HARD_REG_SET (reg_is_output_reload);
3285:
3286: find_reloads (insn, 1, spill_indirect_levels, live_known,
3287: spill_reg_order);
3288: }
3289:
3290: if (n_reloads > 0)
3291: {
3292: int class;
3293:
3294: /* If this block has not had spilling done for a
3295: particular class, deactivate any optional reloads
3296: of that class lest they try to use a spill-reg which isn't
3297: available here. If we have any non-optionals that need a
3298: spill reg, abort. */
3299:
3300: for (class = 0; class < N_REG_CLASSES; class++)
3301: if (basic_block_needs[class] != 0
3302: && basic_block_needs[class][this_block] == 0)
3303: for (i = 0; i < n_reloads; i++)
3304: if (class == (int) reload_reg_class[i])
3305: {
3306: if (reload_optional[i])
3307: reload_in[i] = reload_out[i] = reload_reg_rtx[i] = 0;
3308: else if (reload_reg_rtx[i] == 0)
3309: abort ();
3310: }
3311:
3312: /* Now compute which reload regs to reload them into. Perhaps
3313: reusing reload regs from previous insns, or else output
3314: load insns to reload them. Maybe output store insns too.
3315: Record the choices of reload reg in reload_reg_rtx. */
3316: choose_reload_regs (insn, avoid_return_reg);
3317:
3318: /* Generate the insns to reload operands into or out of
3319: their reload regs. */
3320: emit_reload_insns (insn);
3321:
3322: /* Substitute the chosen reload regs from reload_reg_rtx
3323: into the insn's body (or perhaps into the bodies of other
3324: load and store insn that we just made for reloading
3325: and that we moved the structure into). */
3326: subst_reloads ();
3327: }
3328: /* Any previously reloaded spilled pseudo reg, stored in this insn,
3329: is no longer validly lying around to save a future reload.
3330: Note that this does not detect pseudos that were reloaded
3331: for this insn in order to be stored in
3332: (obeying register constraints). That is correct; such reload
3333: registers ARE still valid. */
3334: note_stores (PATTERN (insn), forget_old_reloads_1);
3335:
3336: /* There may have been CLOBBER insns placed after INSN. So scan
3337: between INSN and NEXT and use them to forget old reloads. */
3338: for (x = NEXT_INSN (insn); x != next; x = NEXT_INSN (x))
3339: if (GET_CODE (x) == INSN && GET_CODE (PATTERN (x)) == CLOBBER)
3340: note_stores (PATTERN (x), forget_old_reloads_1);
3341:
3342: #ifdef AUTO_INC_DEC
3343: /* Likewise for regs altered by auto-increment in this insn.
3344: But note that the reg-notes are not changed by reloading:
3345: they still contain the pseudo-regs, not the spill regs. */
3346: for (x = REG_NOTES (insn); x; x = XEXP (x, 1))
3347: if (REG_NOTE_KIND (x) == REG_INC)
3348: {
3349: /* See if this pseudo reg was reloaded in this insn.
3350: If so, its last-reload info is still valid
3351: because it is based on this insn's reload. */
3352: for (i = 0; i < n_reloads; i++)
3353: if (reload_out[i] == XEXP (x, 0))
3354: break;
3355:
3356: if (i != n_reloads)
3357: forget_old_reloads_1 (XEXP (x, 0));
3358: }
3359: #endif
3360: }
3361: /* A reload reg's contents are unknown after a label. */
3362: if (GET_CODE (insn) == CODE_LABEL)
3363: for (i = 0; i < n_spills; i++)
3364: {
3365: reg_reloaded_contents[i] = -1;
3366: reg_reloaded_insn[i] = 0;
3367: }
3368:
3369: /* Don't assume a reload reg is still good after a call insn
3370: if it is a call-used reg. */
3371: if (GET_CODE (insn) == CODE_LABEL || GET_CODE (insn) == CALL_INSN)
3372: for (i = 0; i < n_spills; i++)
3373: if (call_used_regs[spill_regs[i]])
3374: {
3375: reg_reloaded_contents[i] = -1;
3376: reg_reloaded_insn[i] = 0;
3377: }
3378:
3379: /* In case registers overlap, allow certain insns to invalidate
3380: particular hard registers. */
3381:
3382: #ifdef INSN_CLOBBERS_REGNO_P
3383: for (i = 0 ; i < n_spills ; i++)
3384: if (INSN_CLOBBERS_REGNO_P (insn, spill_regs[i]))
3385: {
3386: reg_reloaded_contents[i] = -1;
3387: reg_reloaded_insn[i] = 0;
3388: }
3389: #endif
3390:
3391: insn = next;
3392:
3393: #ifdef USE_C_ALLOCA
3394: alloca (0);
3395: #endif
3396: }
3397: }
3398:
3399: /* Discard all record of any value reloaded from X,
3400: or reloaded in X from someplace else;
3401: unless X is an output reload reg of the current insn.
3402:
3403: X may be a hard reg (the reload reg)
3404: or it may be a pseudo reg that was reloaded from. */
3405:
3406: static void
3407: forget_old_reloads_1 (x)
3408: rtx x;
3409: {
3410: register int regno;
3411: int nr;
3412:
3413: if (GET_CODE (x) != REG)
3414: return;
3415:
3416: regno = REGNO (x);
3417:
3418: if (regno >= FIRST_PSEUDO_REGISTER)
3419: nr = 1;
3420: else
3421: {
3422: int i;
3423: nr = HARD_REGNO_NREGS (regno, GET_MODE (x));
3424: /* Storing into a spilled-reg invalidates its contents.
3425: This can happen if a block-local pseudo is allocated to that reg
3426: and it wasn't spilled because this block's total need is 0.
3427: Then some insn might have an optional reload and use this reg. */
3428: for (i = 0; i < nr; i++)
3429: if (spill_reg_order[regno + i] >= 0
3430: /* But don't do this if the reg actually serves as an output
3431: reload reg in the current instruction. */
3432: && (n_reloads == 0
3433: || ! TEST_HARD_REG_BIT (reg_is_output_reload, regno + i)))
3434: {
3435: reg_reloaded_contents[spill_reg_order[regno + i]] = -1;
3436: reg_reloaded_insn[spill_reg_order[regno + i]] = 0;
3437: }
3438: }
3439:
3440: /* Since value of X has changed,
3441: forget any value previously copied from it. */
3442:
3443: while (nr-- > 0)
3444: /* But don't forget a copy if this is the output reload
3445: that establishes the copy's validity. */
3446: if (n_reloads == 0 || reg_has_output_reload[regno + nr] == 0)
3447: reg_last_reload_reg[regno + nr] = 0;
3448: }
3449:
3450: /* For each reload, the mode of the reload register. */
3451: static enum machine_mode reload_mode[MAX_RELOADS];
3452:
3453: /* For each reload, the largest number of registers it will require. */
3454: static int reload_nregs[MAX_RELOADS];
3455:
3456: /* Comparison function for qsort to decide which of two reloads
3457: should be handled first. *P1 and *P2 are the reload numbers. */
3458:
3459: static int
3460: reload_reg_class_lower (p1, p2)
3461: short *p1, *p2;
3462: {
3463: register int r1 = *p1, r2 = *p2;
3464: register int t;
3465:
3466: /* Consider required reloads before optional ones. */
3467: t = reload_optional[r1] - reload_optional[r2];
3468: if (t != 0)
3469: return t;
3470:
3471: /* Count all solitary classes before non-solitary ones. */
3472: t = ((reg_class_size[(int) reload_reg_class[r2]] == 1)
3473: - (reg_class_size[(int) reload_reg_class[r1]] == 1));
3474: if (t != 0)
3475: return t;
3476:
3477: /* Aside from solitaires, consider all multi-reg groups first. */
3478: t = reload_nregs[r2] - reload_nregs[r1];
3479: if (t != 0)
3480: return t;
3481:
3482: /* Consider reloads in order of increasing reg-class number. */
3483: t = (int) reload_reg_class[r1] - (int) reload_reg_class[r2];
3484: if (t != 0)
3485: return t;
3486:
3487: /* If reloads are equally urgent, sort by reload number,
3488: so that the results of qsort leave nothing to chance. */
3489: return r1 - r2;
3490: }
3491:
3492: /* The following HARD_REG_SETs indicate when each hard register is
3493: used for a reload of various parts of the current insn. */
3494:
3495: /* If reg is in use as a reload reg for a RELOAD_OTHER reload. */
3496: static HARD_REG_SET reload_reg_used;
3497: /* If reg is in use for a RELOAD_FOR_INPUT_RELOAD_ADDRESS reload. */
3498: static HARD_REG_SET reload_reg_used_in_input_addr;
3499: /* If reg is in use for a RELOAD_FOR_OUTPUT_RELOAD_ADDRESS reload. */
3500: static HARD_REG_SET reload_reg_used_in_output_addr;
3501: /* If reg is in use for a RELOAD_FOR_OPERAND_ADDRESS reload. */
3502: static HARD_REG_SET reload_reg_used_in_op_addr;
3503: /* If reg is in use for a RELOAD_FOR_INPUT reload. */
3504: static HARD_REG_SET reload_reg_used_in_input;
3505: /* If reg is in use for a RELOAD_FOR_OUTPUT reload. */
3506: static HARD_REG_SET reload_reg_used_in_output;
3507:
3508: /* If reg is in use as a reload reg for any sort of reload. */
3509: static HARD_REG_SET reload_reg_used_at_all;
3510:
3511: /* Mark reg REGNO as in use for a reload of the sort spec'd by WHEN_NEEDED.
3512: MODE is used to indicate how many consecutive regs are actually used. */
3513:
3514: static void
3515: mark_reload_reg_in_use (regno, when_needed, mode)
3516: int regno;
3517: enum reload_when_needed when_needed;
3518: enum machine_mode mode;
3519: {
3520: int nregs = HARD_REGNO_NREGS (regno, mode);
3521: int i;
3522:
3523: for (i = regno; i < nregs + regno; i++)
3524: {
3525: switch (when_needed)
3526: {
3527: case RELOAD_OTHER:
3528: SET_HARD_REG_BIT (reload_reg_used, i);
3529: break;
3530:
3531: case RELOAD_FOR_INPUT_RELOAD_ADDRESS:
3532: SET_HARD_REG_BIT (reload_reg_used_in_input_addr, i);
3533: break;
3534:
3535: case RELOAD_FOR_OUTPUT_RELOAD_ADDRESS:
3536: SET_HARD_REG_BIT (reload_reg_used_in_output_addr, i);
3537: break;
3538:
3539: case RELOAD_FOR_OPERAND_ADDRESS:
3540: SET_HARD_REG_BIT (reload_reg_used_in_op_addr, i);
3541: break;
3542:
3543: case RELOAD_FOR_INPUT:
3544: SET_HARD_REG_BIT (reload_reg_used_in_input, i);
3545: break;
3546:
3547: case RELOAD_FOR_OUTPUT:
3548: SET_HARD_REG_BIT (reload_reg_used_in_output, i);
3549: break;
3550: }
3551:
3552: SET_HARD_REG_BIT (reload_reg_used_at_all, i);
3553: }
3554: }
3555:
3556: /* 1 if reg REGNO is free as a reload reg for a reload of the sort
3557: specified by WHEN_NEEDED. */
3558:
3559: static int
3560: reload_reg_free_p (regno, when_needed)
3561: int regno;
3562: enum reload_when_needed when_needed;
3563: {
3564: /* In use for a RELOAD_OTHER means it's not available for anything. */
3565: if (TEST_HARD_REG_BIT (reload_reg_used, regno))
3566: return 0;
3567: switch (when_needed)
3568: {
3569: case RELOAD_OTHER:
3570: /* In use for anything means not available for a RELOAD_OTHER. */
3571: return ! TEST_HARD_REG_BIT (reload_reg_used_at_all, regno);
3572:
3573: /* The other kinds of use can sometimes share a register. */
3574: case RELOAD_FOR_INPUT:
3575: return (! TEST_HARD_REG_BIT (reload_reg_used_in_input, regno)
3576: && ! TEST_HARD_REG_BIT (reload_reg_used_in_op_addr, regno)
3577: && ! TEST_HARD_REG_BIT (reload_reg_used_in_input_addr, regno));
3578: case RELOAD_FOR_INPUT_RELOAD_ADDRESS:
3579: return (! TEST_HARD_REG_BIT (reload_reg_used_in_input_addr, regno)
3580: && ! TEST_HARD_REG_BIT (reload_reg_used_in_input, regno));
3581: case RELOAD_FOR_OUTPUT_RELOAD_ADDRESS:
3582: return (! TEST_HARD_REG_BIT (reload_reg_used_in_output_addr, regno)
3583: && ! TEST_HARD_REG_BIT (reload_reg_used_in_output, regno));
3584: case RELOAD_FOR_OPERAND_ADDRESS:
3585: return (! TEST_HARD_REG_BIT (reload_reg_used_in_op_addr, regno)
3586: && ! TEST_HARD_REG_BIT (reload_reg_used_in_input, regno)
3587: && ! TEST_HARD_REG_BIT (reload_reg_used_in_output, regno));
3588: case RELOAD_FOR_OUTPUT:
3589: return (! TEST_HARD_REG_BIT (reload_reg_used_in_op_addr, regno)
3590: && ! TEST_HARD_REG_BIT (reload_reg_used_in_output_addr, regno)
3591: && ! TEST_HARD_REG_BIT (reload_reg_used_in_output, regno));
3592: }
3593: abort ();
3594: }
3595:
3596: /* Return 1 if the value in reload reg REGNO, as used by a reload
3597: needed for the part of the insn specified by WHEN_NEEDED,
3598: is not in use for a reload in any prior part of the insn.
3599:
3600: We can assume that the reload reg was already tested for availability
3601: at the time it is needed, and we should not check this again,
3602: in case the reg has already been marked in use. */
3603:
3604: static int
3605: reload_reg_free_before_p (regno, when_needed)
3606: int regno;
3607: enum reload_when_needed when_needed;
3608: {
3609: switch (when_needed)
3610: {
3611: case RELOAD_OTHER:
3612: /* Since a RELOAD_OTHER reload claims the reg for the entire insn,
3613: its use starts from the beginning, so nothing can use it earlier. */
3614: return 1;
3615:
3616: /* If this use is for part of the insn,
3617: check the reg is not in use for any prior part. */
3618: case RELOAD_FOR_OUTPUT_RELOAD_ADDRESS:
3619: if (TEST_HARD_REG_BIT (reload_reg_used_in_op_addr, regno))
3620: return 0;
3621: case RELOAD_FOR_OUTPUT:
3622: if (TEST_HARD_REG_BIT (reload_reg_used_in_input, regno))
3623: return 0;
3624: case RELOAD_FOR_OPERAND_ADDRESS:
3625: if (TEST_HARD_REG_BIT (reload_reg_used_in_input_addr, regno))
3626: return 0;
3627: case RELOAD_FOR_INPUT_RELOAD_ADDRESS:
3628: case RELOAD_FOR_INPUT:
3629: return 1;
3630: }
3631: abort ();
3632: }
3633:
3634: /* Return 1 if the value in reload reg REGNO, as used by a reload
3635: needed for the part of the insn specified by WHEN_NEEDED,
3636: is still available in REGNO at the end of the insn.
3637:
3638: We can assume that the reload reg was already tested for availability
3639: at the time it is needed, and we should not check this again,
3640: in case the reg has already been marked in use. */
3641:
3642: static int
3643: reload_reg_reaches_end_p (regno, when_needed)
3644: int regno;
3645: enum reload_when_needed when_needed;
3646: {
3647: switch (when_needed)
3648: {
3649: case RELOAD_OTHER:
3650: /* Since a RELOAD_OTHER reload claims the reg for the entire insn,
3651: its value must reach the end. */
3652: return 1;
3653:
3654: /* If this use is for part of the insn,
3655: its value reaches if no subsequent part uses the same register. */
3656: case RELOAD_FOR_INPUT_RELOAD_ADDRESS:
3657: case RELOAD_FOR_INPUT:
3658: if (TEST_HARD_REG_BIT (reload_reg_used_in_op_addr, regno)
3659: || TEST_HARD_REG_BIT (reload_reg_used_in_output, regno))
3660: return 0;
3661: case RELOAD_FOR_OPERAND_ADDRESS:
3662: if (TEST_HARD_REG_BIT (reload_reg_used_in_output_addr, regno))
3663: return 0;
3664: case RELOAD_FOR_OUTPUT:
3665: case RELOAD_FOR_OUTPUT_RELOAD_ADDRESS:
3666: return 1;
3667: }
3668: abort ();
3669: }
3670:
3671: /* Vector of reload-numbers showing the order in which the reloads should
3672: be processed. */
3673: short reload_order[MAX_RELOADS];
3674:
3675: /* Indexed by reload number, 1 if incoming value
3676: inherited from previous insns. */
3677: char reload_inherited[MAX_RELOADS];
3678:
3679: /* For an inherited reload, this is the insn the reload was inherited from,
3680: if we know it. Otherwise, this is 0. */
3681: rtx reload_inheritance_insn[MAX_RELOADS];
3682:
3683: /* If non-zero, this is a place to get the value of the reload,
3684: rather than using reload_in. */
3685: rtx reload_override_in[MAX_RELOADS];
3686:
3687: /* For each reload, the index in spill_regs of the spill register used,
3688: or -1 if we did not need one of the spill registers for this reload. */
3689: int reload_spill_index[MAX_RELOADS];
3690:
3691: /* Index of last register assigned as a spill register. We allocate in
3692: a round-robin fashio. */
3693:
3694: static last_spill_reg = 0;
3695:
3696: /* Find a spill register to use as a reload register for reload R.
3697: LAST_RELOAD is non-zero if this is the last reload for the insn being
3698: processed.
3699:
3700: Set reload_reg_rtx[R] to the register allocated.
3701:
3702: If NOERROR is nonzero, we return 1 if successful,
3703: or 0 if we couldn't find a spill reg and we didn't change anything. */
3704:
3705: static int
3706: allocate_reload_reg (r, insn, last_reload, noerror)
3707: int r;
3708: rtx insn;
3709: int last_reload;
3710: int noerror;
3711: {
3712: int i;
3713: int pass;
3714: int count;
3715: rtx new;
3716: int regno;
3717:
3718: /* If we put this reload ahead, thinking it is a group,
3719: then insist on finding a group. Otherwise we can grab a
3720: reg that some other reload needs.
3721: (That can happen when we have a 68000 DATA_OR_FP_REG
3722: which is a group of data regs or one fp reg.)
3723: We need not be so restrictive if there are no more reloads
3724: for this insn.
3725:
3726: ??? Really it would be nicer to have smarter handling
3727: for that kind of reg class, where a problem like this is normal.
3728: Perhaps those classes should be avoided for reloading
3729: by use of more alternatives. */
3730:
3731: int force_group = reload_nregs[r] > 1 && ! last_reload;
3732:
3733: /* If we want a single register and haven't yet found one,
3734: take any reg in the right class and not in use.
3735: If we want a consecutive group, here is where we look for it.
3736:
3737: We use two passes so we can first look for reload regs to
3738: reuse, which are already in use for other reloads in this insn,
3739: and only then use additional registers.
3740: I think that maximizing reuse is needed to make sure we don't
3741: run out of reload regs. Suppose we have three reloads, and
3742: reloads A and B can share regs. These need two regs.
3743: Suppose A and B are given different regs.
3744: That leaves none for C. */
3745: for (pass = 0; pass < 2; pass++)
3746: {
3747: /* I is the index in spill_regs.
3748: We advance it round-robin between insns to use all spill regs
3749: equally, so that inherited reloads have a chance
3750: of leapfrogging each other. */
3751:
3752: for (count = 0, i = last_spill_reg; count < n_spills; count++)
3753: {
3754: int class = (int) reload_reg_class[r];
3755:
3756: i = (i + 1) % n_spills;
3757:
3758: if (reload_reg_free_p (spill_regs[i], reload_when_needed[r])
3759: && TEST_HARD_REG_BIT (reg_class_contents[class], spill_regs[i])
3760: && HARD_REGNO_MODE_OK (spill_regs[i], reload_mode[r])
3761: /* Look first for regs to share, then for unshared. */
3762: && (pass || TEST_HARD_REG_BIT (reload_reg_used_at_all,
3763: spill_regs[i])))
3764: {
3765: int nr = HARD_REGNO_NREGS (spill_regs[i], reload_mode[r]);
3766: /* Avoid the problem where spilling a GENERAL_OR_FP_REG
3767: (on 68000) got us two FP regs. If NR is 1,
3768: we would reject both of them. */
3769: if (force_group)
3770: nr = CLASS_MAX_NREGS (reload_reg_class[r], reload_mode[r]);
3771: /* If we need only one reg, we have already won. */
3772: if (nr == 1)
3773: {
3774: /* But reject a single reg if we demand a group. */
3775: if (force_group)
3776: continue;
3777: break;
3778: }
3779: /* Otherwise check that as many consecutive regs as we need
3780: are available here.
3781: Also, don't use for a group registers that are
3782: needed for nongroups. */
3783: if (! TEST_HARD_REG_BIT (counted_for_nongroups, spill_regs[i]))
3784: while (nr > 1)
3785: {
3786: regno = spill_regs[i] + nr - 1;
3787: if (!(TEST_HARD_REG_BIT (reg_class_contents[class], regno)
3788: && spill_reg_order[regno] >= 0
3789: && reload_reg_free_p (regno, reload_when_needed[r])
3790: && ! TEST_HARD_REG_BIT (counted_for_nongroups,
3791: regno)))
3792: break;
3793: nr--;
3794: }
3795: if (nr == 1)
3796: break;
3797: }
3798: }
3799:
3800: /* If we found something on pass 1, omit pass 2. */
3801: if (count < n_spills)
3802: break;
3803: }
3804:
3805: /* We should have found a spill register by now. */
3806: if (count == n_spills)
3807: {
3808: if (noerror)
3809: return 0;
3810: abort ();
3811: }
3812:
3813: last_spill_reg = i;
3814:
3815: /* Mark as in use for this insn the reload regs we use for this. */
3816: mark_reload_reg_in_use (spill_regs[i], reload_when_needed[r],
3817: reload_mode[r]);
3818:
3819: new = spill_reg_rtx[i];
3820:
3821: if (new == 0 || GET_MODE (new) != reload_mode[r])
3822: spill_reg_rtx[i] = new = gen_rtx (REG, reload_mode[r], spill_regs[i]);
3823:
3824: reload_reg_rtx[r] = new;
3825: reload_spill_index[r] = i;
3826: regno = true_regnum (new);
3827:
3828: /* Detect when the reload reg can't hold the reload mode.
3829: This used to be one `if', but Sequent compiler can't handle that. */
3830: if (HARD_REGNO_MODE_OK (regno, reload_mode[r]))
3831: {
3832: enum machine_mode test_mode = VOIDmode;
3833: if (reload_in[r])
3834: test_mode = GET_MODE (reload_in[r]);
3835: /* If reload_in[r] has VOIDmode, it means we will load it
3836: in whatever mode the reload reg has: to wit, reload_mode[r].
3837: We have already tested that for validity. */
3838: /* Aside from that, we need to test that the expressions
3839: to reload from or into have modes which are valid for this
3840: reload register. Otherwise the reload insns would be invalid. */
3841: if (! (reload_in[r] != 0 && test_mode != VOIDmode
3842: && ! HARD_REGNO_MODE_OK (regno, test_mode)))
3843: if (! (reload_out[r] != 0
3844: && ! HARD_REGNO_MODE_OK (regno, GET_MODE (reload_out[r]))))
3845: /* The reg is OK. */
3846: return 1;
3847: }
3848:
3849: /* The reg is not OK. */
3850: if (noerror)
3851: return 0;
3852:
3853: if (asm_noperands (PATTERN (insn)) < 0)
3854: /* It's the compiler's fault. */
3855: abort ();
3856:
3857: /* It's the user's fault; the operand's mode and constraint
3858: don't match. Disable this reload so we don't crash in final. */
3859: error_for_asm (insn,
3860: "`asm' operand constraint incompatible with operand size");
3861: reload_in[r] = 0;
3862: reload_out[r] = 0;
3863: reload_reg_rtx[r] = 0;
3864: reload_optional[r] = 1;
3865: reload_secondary_p[r] = 1;
3866:
3867: return 1;
3868: }
3869:
3870: /* Assign hard reg targets for the pseudo-registers we must reload
3871: into hard regs for this insn.
3872: Also output the instructions to copy them in and out of the hard regs.
3873:
3874: For machines with register classes, we are responsible for
3875: finding a reload reg in the proper class. */
3876:
3877: static void
3878: choose_reload_regs (insn, avoid_return_reg)
3879: rtx insn;
3880: /* This argument is currently ignored. */
3881: rtx avoid_return_reg;
3882: {
3883: register int i, j;
3884: int max_group_size = 1;
3885: enum reg_class group_class = NO_REGS;
3886: int inheritance;
3887:
3888: rtx save_reload_reg_rtx[MAX_RELOADS];
3889: char save_reload_inherited[MAX_RELOADS];
3890: rtx save_reload_inheritance_insn[MAX_RELOADS];
3891: rtx save_reload_override_in[MAX_RELOADS];
3892: int save_reload_spill_index[MAX_RELOADS];
3893: HARD_REG_SET save_reload_reg_used;
3894: HARD_REG_SET save_reload_reg_used_in_input_addr;
3895: HARD_REG_SET save_reload_reg_used_in_output_addr;
3896: HARD_REG_SET save_reload_reg_used_in_op_addr;
3897: HARD_REG_SET save_reload_reg_used_in_input;
3898: HARD_REG_SET save_reload_reg_used_in_output;
3899: HARD_REG_SET save_reload_reg_used_at_all;
3900:
3901: bzero (reload_inherited, MAX_RELOADS);
3902: bzero (reload_inheritance_insn, MAX_RELOADS * sizeof (rtx));
3903: bzero (reload_override_in, MAX_RELOADS * sizeof (rtx));
3904:
3905: CLEAR_HARD_REG_SET (reload_reg_used);
3906: CLEAR_HARD_REG_SET (reload_reg_used_at_all);
3907: CLEAR_HARD_REG_SET (reload_reg_used_in_input_addr);
3908: CLEAR_HARD_REG_SET (reload_reg_used_in_output_addr);
3909: CLEAR_HARD_REG_SET (reload_reg_used_in_op_addr);
3910: CLEAR_HARD_REG_SET (reload_reg_used_in_output);
3911: CLEAR_HARD_REG_SET (reload_reg_used_in_input);
3912:
3913: /* Distinguish output-only and input-only reloads
3914: because they can overlap with other things. */
3915: for (j = 0; j < n_reloads; j++)
3916: if (reload_when_needed[j] == RELOAD_OTHER
3917: && ! reload_needed_for_multiple[j])
3918: {
3919: if (reload_in[j] == 0)
3920: {
3921: /* But earlyclobber operands must stay as RELOAD_OTHER. */
3922: for (i = 0; i < n_earlyclobbers; i++)
3923: if (rtx_equal_p (reload_out[j], reload_earlyclobbers[i]))
3924: break;
3925: if (i == n_earlyclobbers)
3926: reload_when_needed[j] = RELOAD_FOR_OUTPUT;
3927: }
3928: if (reload_out[j] == 0)
3929: reload_when_needed[j] = RELOAD_FOR_INPUT;
3930:
3931: if (reload_secondary_reload[j] >= 0
3932: && ! reload_needed_for_multiple[reload_secondary_reload[j]])
3933: reload_when_needed[reload_secondary_reload[j]]
3934: = reload_when_needed[j];
3935: }
3936:
3937: #ifdef SMALL_REGISTER_CLASSES
3938: /* Don't bother with avoiding the return reg
3939: if we have no mandatory reload that could use it. */
3940: if (avoid_return_reg)
3941: {
3942: int do_avoid = 0;
3943: int regno = REGNO (avoid_return_reg);
3944: int nregs
3945: = HARD_REGNO_NREGS (regno, GET_MODE (avoid_return_reg));
3946: int r;
3947:
3948: for (r = regno; r < regno + nregs; r++)
3949: if (spill_reg_order[r] >= 0)
3950: for (j = 0; j < n_reloads; j++)
3951: if (!reload_optional[j] && reload_reg_rtx[j] == 0
3952: && (reload_in[j] != 0 || reload_out[j] != 0
3953: || reload_secondary_p[j])
3954: &&
3955: TEST_HARD_REG_BIT (reg_class_contents[(int) reload_reg_class[j]], r))
3956: do_avoid = 1;
3957: if (!do_avoid)
3958: avoid_return_reg = 0;
3959: }
3960: #endif /* SMALL_REGISTER_CLASSES */
3961:
3962: #if 0 /* Not needed, now that we can always retry without inheritance. */
3963: /* See if we have more mandatory reloads than spill regs.
3964: If so, then we cannot risk optimizations that could prevent
3965: reloads from sharing one spill register.
3966:
3967: Since we will try finding a better register than reload_reg_rtx
3968: unless it is equal to reload_in or reload_out, count such reloads. */
3969:
3970: {
3971: int tem = 0;
3972: #ifdef SMALL_REGISTER_CLASSES
3973: int tem = (avoid_return_reg != 0);
3974: #endif
3975: for (j = 0; j < n_reloads; j++)
3976: if (! reload_optional[j]
3977: && (reload_in[j] != 0 || reload_out[j] != 0 || reload_secondary_p[j])
3978: && (reload_reg_rtx[j] == 0
3979: || (! rtx_equal_p (reload_reg_rtx[j], reload_in[j])
3980: && ! rtx_equal_p (reload_reg_rtx[j], reload_out[j]))))
3981: tem++;
3982: if (tem > n_spills)
3983: must_reuse = 1;
3984: }
3985: #endif
3986:
3987: #ifdef SMALL_REGISTER_CLASSES
3988: /* Don't use the subroutine call return reg for a reload
3989: if we are supposed to avoid it. */
3990: if (avoid_return_reg)
3991: {
3992: int regno = REGNO (avoid_return_reg);
3993: int nregs
3994: = HARD_REGNO_NREGS (regno, GET_MODE (avoid_return_reg));
3995: int r;
3996:
3997: for (r = regno; r < regno + nregs; r++)
3998: if (spill_reg_order[r] >= 0)
3999: SET_HARD_REG_BIT (reload_reg_used, r);
4000: }
4001: #endif /* SMALL_REGISTER_CLASSES */
4002:
4003: /* In order to be certain of getting the registers we need,
4004: we must sort the reloads into order of increasing register class.
4005: Then our grabbing of reload registers will parallel the process
4006: that provided the reload registers.
4007:
4008: Also note whether any of the reloads wants a consecutive group of regs.
4009: If so, record the maximum size of the group desired and what
4010: register class contains all the groups needed by this insn. */
4011:
4012: for (j = 0; j < n_reloads; j++)
4013: {
4014: reload_order[j] = j;
4015: reload_spill_index[j] = -1;
4016:
4017: reload_mode[j]
4018: = (reload_strict_low[j] && reload_out[j]
4019: ? GET_MODE (SUBREG_REG (reload_out[j]))
4020: : (reload_inmode[j] == VOIDmode
4021: || (GET_MODE_SIZE (reload_outmode[j])
4022: > GET_MODE_SIZE (reload_inmode[j])))
4023: ? reload_outmode[j] : reload_inmode[j]);
4024:
4025: reload_nregs[j] = CLASS_MAX_NREGS (reload_reg_class[j], reload_mode[j]);
4026:
4027: if (reload_nregs[j] > 1)
4028: {
4029: max_group_size = MAX (reload_nregs[j], max_group_size);
4030: group_class = reg_class_superunion[(int)reload_reg_class[j]][(int)group_class];
4031: }
4032:
4033: /* If we have already decided to use a certain register,
4034: don't use it in another way. */
4035: if (reload_reg_rtx[j])
4036: mark_reload_reg_in_use (REGNO (reload_reg_rtx[j]),
4037: reload_when_needed[j], reload_mode[j]);
4038: }
4039:
4040: if (n_reloads > 1)
4041: qsort (reload_order, n_reloads, sizeof (short), reload_reg_class_lower);
4042:
4043: bcopy (reload_reg_rtx, save_reload_reg_rtx, sizeof reload_reg_rtx);
4044: bcopy (reload_inherited, save_reload_inherited, sizeof reload_inherited);
4045: bcopy (reload_inheritance_insn, save_reload_inheritance_insn,
4046: sizeof reload_inheritance_insn);
4047: bcopy (reload_override_in, save_reload_override_in,
4048: sizeof reload_override_in);
4049: bcopy (reload_spill_index, save_reload_spill_index,
4050: sizeof reload_spill_index);
4051: COPY_HARD_REG_SET (save_reload_reg_used, reload_reg_used);
4052: COPY_HARD_REG_SET (save_reload_reg_used_at_all, reload_reg_used_at_all);
4053: COPY_HARD_REG_SET (save_reload_reg_used_in_output,
4054: reload_reg_used_in_output);
4055: COPY_HARD_REG_SET (save_reload_reg_used_in_input,
4056: reload_reg_used_in_input);
4057: COPY_HARD_REG_SET (save_reload_reg_used_in_input_addr,
4058: reload_reg_used_in_input_addr);
4059: COPY_HARD_REG_SET (save_reload_reg_used_in_output_addr,
4060: reload_reg_used_in_output_addr);
4061: COPY_HARD_REG_SET (save_reload_reg_used_in_op_addr,
4062: reload_reg_used_in_op_addr);
4063:
4064: /* Try first with inheritance, then turning it off. */
4065:
4066: for (inheritance = 1; inheritance >= 0; inheritance--)
4067: {
4068: /* Process the reloads in order of preference just found.
4069: Beyond this point, subregs can be found in reload_reg_rtx.
4070:
4071: This used to look for an existing reloaded home for all
4072: of the reloads, and only then perform any new reloads.
4073: But that could lose if the reloads were done out of reg-class order
4074: because a later reload with a looser constraint might have an old
4075: home in a register needed by an earlier reload with a tighter constraint.
4076:
4077: To solve this, we make two passes over the reloads, in the order
4078: described above. In the first pass we try to inherit a reload
4079: from a previous insn. If there is a later reload that needs a
4080: class that is a proper subset of the class being processed, we must
4081: also allocate a spill register during the first pass.
4082:
4083: Then make a second pass over the reloads to allocate any reloads
4084: that haven't been given registers yet. */
4085:
4086: for (j = 0; j < n_reloads; j++)
4087: {
4088: register int r = reload_order[j];
4089:
4090: /* Ignore reloads that got marked inoperative. */
4091: if (reload_out[r] == 0 && reload_in[r] == 0 && ! reload_secondary_p[r])
4092: continue;
4093:
4094: /* If find_reloads chose a to use reload_in or reload_out as a reload
4095: register, we don't need to chose one. Otherwise, try even if it found
4096: one since we might save an insn if we find the value lying around. */
4097: if (reload_in[r] != 0 && reload_reg_rtx[r] != 0
4098: && (rtx_equal_p (reload_in[r], reload_reg_rtx[r])
4099: || rtx_equal_p (reload_out[r], reload_reg_rtx[r])))
4100: continue;
4101:
4102: #if 0 /* No longer needed for correct operation.
4103: It might give better code, or might not; worth an experiment? */
4104: /* If this is an optional reload, we can't inherit from earlier insns
4105: until we are sure that any non-optional reloads have been allocated.
4106: The following code takes advantage of the fact that optional reloads
4107: are at the end of reload_order. */
4108: if (reload_optional[r] != 0)
4109: for (i = 0; i < j; i++)
4110: if ((reload_out[reload_order[i]] != 0
4111: || reload_in[reload_order[i]] != 0
4112: || reload_secondary_p[reload_order[i]])
4113: && ! reload_optional[reload_order[i]]
4114: && reload_reg_rtx[reload_order[i]] == 0)
4115: allocate_reload_reg (reload_order[i], insn, 0, inheritance);
4116: #endif
4117:
4118: /* First see if this pseudo is already available as reloaded
4119: for a previous insn. We cannot try to inherit for reloads
4120: that are smaller than the maximum number of registers needed
4121: for groups unless the register we would allocate cannot be used
4122: for the groups.
4123:
4124: We could check here to see if this is a secondary reload for
4125: an object that is already in a register of the desired class.
4126: This would avoid the need for the secondary reload register.
4127: But this is complex because we can't easily determine what
4128: objects might want to be loaded via this reload. So let a register
4129: be allocated here. In `emit_reload_insns' we suppress one of the
4130: loads in the case described above. */
4131:
4132: if (inheritance)
4133: {
4134: register int regno = -1;
4135:
4136: if (reload_in[r] == 0)
4137: ;
4138: else if (GET_CODE (reload_in[r]) == REG)
4139: regno = REGNO (reload_in[r]);
4140: else if (GET_CODE (reload_in_reg[r]) == REG)
4141: regno = REGNO (reload_in_reg[r]);
4142: #if 0
4143: /* This won't work, since REGNO can be a pseudo reg number.
4144: Also, it takes much more hair to keep track of all the things
4145: that can invalidate an inherited reload of part of a pseudoreg. */
4146: else if (GET_CODE (reload_in[r]) == SUBREG
4147: && GET_CODE (SUBREG_REG (reload_in[r])) == REG)
4148: regno = REGNO (SUBREG_REG (reload_in[r])) + SUBREG_WORD (reload_in[r]);
4149: #endif
4150:
4151: if (regno >= 0 && reg_last_reload_reg[regno] != 0)
4152: {
4153: i = spill_reg_order[REGNO (reg_last_reload_reg[regno])];
4154:
4155: if (reg_reloaded_contents[i] == regno
4156: && HARD_REGNO_MODE_OK (spill_regs[i], reload_mode[r])
4157: && TEST_HARD_REG_BIT (reg_class_contents[(int) reload_reg_class[r]],
4158: spill_regs[i])
4159: && (reload_nregs[r] == max_group_size
4160: || ! TEST_HARD_REG_BIT (reg_class_contents[(int) group_class],
4161: spill_regs[i]))
4162: && reload_reg_free_p (spill_regs[i], reload_when_needed[r])
4163: && reload_reg_free_before_p (spill_regs[i],
4164: reload_when_needed[r]))
4165: {
4166: /* If a group is needed, verify that all the subsequent
4167: registers still have their values intact. */
4168: int nr
4169: = HARD_REGNO_NREGS (spill_regs[i], reload_mode[r]);
4170: int k;
4171:
4172: for (k = 1; k < nr; k++)
4173: if (reg_reloaded_contents[spill_reg_order[spill_regs[i] + k]]
4174: != regno)
4175: break;
4176:
4177: if (k == nr)
4178: {
4179: /* Mark the register as in use for this part of
4180: the insn. */
4181: mark_reload_reg_in_use (spill_regs[i],
4182: reload_when_needed[r],
4183: reload_mode[r]);
4184: reload_reg_rtx[r] = reg_last_reload_reg[regno];
4185: reload_inherited[r] = 1;
4186: reload_inheritance_insn[r] = reg_reloaded_insn[i];
4187: reload_spill_index[r] = i;
4188: }
4189: }
4190: }
4191: }
4192:
4193: /* Here's another way to see if the value is already lying around. */
4194: if (inheritance
4195: && reload_in[r] != 0
4196: && ! reload_inherited[r]
4197: && reload_out[r] == 0
4198: && (CONSTANT_P (reload_in[r])
4199: || GET_CODE (reload_in[r]) == PLUS
4200: || GET_CODE (reload_in[r]) == REG
4201: || GET_CODE (reload_in[r]) == MEM)
4202: && (reload_nregs[r] == max_group_size
4203: || ! reg_classes_intersect_p (reload_reg_class[r], group_class)))
4204: {
4205: register rtx equiv
4206: = find_equiv_reg (reload_in[r], insn, reload_reg_class[r],
4207: -1, 0, 0, reload_mode[r]);
4208: int regno;
4209:
4210: if (equiv != 0)
4211: {
4212: if (GET_CODE (equiv) == REG)
4213: regno = REGNO (equiv);
4214: else if (GET_CODE (equiv) == SUBREG)
4215: {
4216: regno = REGNO (SUBREG_REG (equiv));
4217: if (regno < FIRST_PSEUDO_REGISTER)
4218: regno += SUBREG_WORD (equiv);
4219: }
4220: else
4221: abort ();
4222: }
4223:
4224: /* If we found a spill reg, reject it unless it is free
4225: and of the desired class. */
4226: if (equiv != 0
4227: && ((spill_reg_order[regno] >= 0
4228: && ! reload_reg_free_before_p (regno,
4229: reload_when_needed[r]))
4230: || ! TEST_HARD_REG_BIT (reg_class_contents[(int) reload_reg_class[r]],
4231: regno)))
4232: equiv = 0;
4233:
4234: if (equiv != 0 && TEST_HARD_REG_BIT (reload_reg_used_at_all, regno))
4235: equiv = 0;
4236:
4237: if (equiv != 0 && ! HARD_REGNO_MODE_OK (regno, reload_mode[r]))
4238: equiv = 0;
4239:
4240: /* We found a register that contains the value we need.
4241: If this register is the same as an `earlyclobber' operand
4242: of the current insn, just mark it as a place to reload from
4243: since we can't use it as the reload register itself. */
4244:
4245: if (equiv != 0)
4246: for (i = 0; i < n_earlyclobbers; i++)
4247: if (reg_overlap_mentioned_p (equiv, reload_earlyclobbers[i]))
4248: {
4249: reload_override_in[r] = equiv;
4250: equiv = 0;
4251: break;
4252: }
4253:
4254: /* JRV: If the equiv register we have found is explicitly
4255: clobbered in the current insn, mark but don't use, as above. */
4256:
4257: if (equiv != 0 && regno_clobbered_p (regno, insn))
4258: {
4259: reload_override_in[r] = equiv;
4260: equiv = 0;
4261: }
4262:
4263: /* If we found an equivalent reg, say no code need be generated
4264: to load it, and use it as our reload reg. */
4265: if (equiv != 0 && regno != FRAME_POINTER_REGNUM)
4266: {
4267: reload_reg_rtx[r] = equiv;
4268: reload_inherited[r] = 1;
4269: /* If it is a spill reg,
4270: mark the spill reg as in use for this insn. */
4271: i = spill_reg_order[regno];
4272: if (i >= 0)
4273: mark_reload_reg_in_use (regno, reload_when_needed[r],
4274: reload_mode[r]);
4275: }
4276: }
4277:
4278: /* If we found a register to use already, or if this is an optional
4279: reload, we are done. */
4280: if (reload_reg_rtx[r] != 0 || reload_optional[r] != 0)
4281: continue;
4282:
4283: #if 0 /* No longer needed for correct operation. Might or might not
4284: give better code on the average. Want to experiment? */
4285:
4286: /* See if there is a later reload that has a class different from our
4287: class that intersects our class or that requires less register
4288: than our reload. If so, we must allocate a register to this
4289: reload now, since that reload might inherit a previous reload
4290: and take the only available register in our class. Don't do this
4291: for optional reloads since they will force all previous reloads
4292: to be allocated. Also don't do this for reloads that have been
4293: turned off. */
4294:
4295: for (i = j + 1; i < n_reloads; i++)
4296: {
4297: int s = reload_order[i];
4298:
4299: if ((reload_in[s] == 0 && reload_out[s] == 0 &&
4300: ! reload_secondary_p[s])
4301: || reload_optional[s])
4302: continue;
4303:
4304: if ((reload_reg_class[s] != reload_reg_class[r]
4305: && reg_classes_intersect_p (reload_reg_class[r],
4306: reload_reg_class[s]))
4307: || reload_nregs[s] < reload_nregs[r])
4308: break;
4309: }
4310:
4311: if (i == n_reloads)
4312: continue;
4313:
4314: allocate_reload_reg (r, insn, j == n_reloads - 1, inheritance);
4315: #endif
4316: }
4317:
4318: /* Now allocate reload registers for anything non-optional that
4319: didn't get one yet. */
4320: for (j = 0; j < n_reloads; j++)
4321: {
4322: register int r = reload_order[j];
4323:
4324: /* Ignore reloads that got marked inoperative. */
4325: if (reload_out[r] == 0 && reload_in[r] == 0 && ! reload_secondary_p[r])
4326: continue;
4327:
4328: /* Skip reloads that already have a register allocated or are
4329: optional. */
4330: if (reload_reg_rtx[r] != 0 || reload_optional[r])
4331: continue;
4332:
4333: if (! allocate_reload_reg (r, insn, j == n_reloads - 1, inheritance))
4334: break;
4335: }
4336:
4337: /* If that loop got all the way, we have won. */
4338: if (j == n_reloads)
4339: break;
4340:
4341: fail:
4342: /* Loop around and try without any inheritance. */
4343: /* First undo everything done by the failed attempt
4344: to allocate with inheritance. */
4345: bcopy (save_reload_reg_rtx, reload_reg_rtx, sizeof reload_reg_rtx);
4346: bcopy (save_reload_inherited, reload_inherited, sizeof reload_inherited);
4347: bcopy (save_reload_inheritance_insn, reload_inheritance_insn,
4348: sizeof reload_inheritance_insn);
4349: bcopy (save_reload_override_in, reload_override_in,
4350: sizeof reload_override_in);
4351: bcopy (save_reload_spill_index, reload_spill_index,
4352: sizeof reload_spill_index);
4353: COPY_HARD_REG_SET (reload_reg_used, save_reload_reg_used);
4354: COPY_HARD_REG_SET (reload_reg_used_at_all, save_reload_reg_used_at_all);
4355: COPY_HARD_REG_SET (reload_reg_used_in_input,
4356: save_reload_reg_used_in_input);
4357: COPY_HARD_REG_SET (reload_reg_used_in_output,
4358: save_reload_reg_used_in_output);
4359: COPY_HARD_REG_SET (reload_reg_used_in_input_addr,
4360: save_reload_reg_used_in_input_addr);
4361: COPY_HARD_REG_SET (reload_reg_used_in_output_addr,
4362: save_reload_reg_used_in_output_addr);
4363: COPY_HARD_REG_SET (reload_reg_used_in_op_addr,
4364: save_reload_reg_used_in_op_addr);
4365: }
4366:
4367: /* If we thought we could inherit a reload, because it seemed that
4368: nothing else wanted the same reload register earlier in the insn,
4369: verify that assumption, now that all reloads have been assigned. */
4370:
4371: for (j = 0; j < n_reloads; j++)
4372: {
4373: register int r = reload_order[j];
4374:
4375: if (reload_inherited[r] && reload_reg_rtx[r] != 0
4376: && ! reload_reg_free_before_p (true_regnum (reload_reg_rtx[r]),
4377: reload_when_needed[r]))
4378: reload_inherited[r] = 0;
4379:
4380: /* If we found a better place to reload from,
4381: validate it in the same fashion, if it is a reload reg. */
4382: if (reload_override_in[r]
4383: && (GET_CODE (reload_override_in[r]) == REG
4384: || GET_CODE (reload_override_in[r]) == SUBREG))
4385: {
4386: int regno = true_regnum (reload_override_in[r]);
4387: if (spill_reg_order[regno] >= 0
4388: && ! reload_reg_free_before_p (regno, reload_when_needed[r]))
4389: reload_override_in[r] = 0;
4390: }
4391: }
4392:
4393: /* Now that reload_override_in is known valid,
4394: actually override reload_in. */
4395: for (j = 0; j < n_reloads; j++)
4396: if (reload_override_in[j])
4397: reload_in[j] = reload_override_in[j];
4398:
4399: /* If this reload won't be done because it has been cancelled or is
4400: optional and not inherited, clear reload_reg_rtx so other
4401: routines (such as subst_reloads) don't get confused. */
4402: for (j = 0; j < n_reloads; j++)
4403: if ((reload_optional[j] && ! reload_inherited[j])
4404: || (reload_in[j] == 0 && reload_out[j] == 0
4405: && ! reload_secondary_p[j]))
4406: reload_reg_rtx[j] = 0;
4407:
4408: /* Record which pseudos and which spill regs have output reloads. */
4409: for (j = 0; j < n_reloads; j++)
4410: {
4411: register int r = reload_order[j];
4412:
4413: i = reload_spill_index[r];
4414:
4415: /* I is nonneg if this reload used one of the spill regs.
4416: If reload_reg_rtx[r] is 0, this is an optional reload
4417: that we opted to ignore. */
4418: if (reload_out[r] != 0 && GET_CODE (reload_out[r]) == REG
4419: && reload_reg_rtx[r] != 0)
4420: {
4421: register int nregno = REGNO (reload_out[r]);
4422: int nr = HARD_REGNO_NREGS (nregno, reload_mode[r]);
4423:
4424: while (--nr >= 0)
4425: {
4426: reg_has_output_reload[nregno + nr] = 1;
4427: if (i >= 0)
4428: SET_HARD_REG_BIT (reg_is_output_reload, spill_regs[i] + nr);
4429: }
4430:
4431: if (reload_when_needed[r] != RELOAD_OTHER
4432: && reload_when_needed[r] != RELOAD_FOR_OUTPUT)
4433: abort ();
4434: }
4435: }
4436: }
4437:
4438: /* Output insns to reload values in and out of the chosen reload regs. */
4439:
4440: static void
4441: emit_reload_insns (insn)
4442: rtx insn;
4443: {
4444: register int j;
4445: rtx following_insn = NEXT_INSN (insn);
4446: rtx before_insn = insn;
4447: rtx first_output_reload_insn = NEXT_INSN (insn);
4448: rtx first_other_reload_insn = insn;
4449: rtx first_operand_address_reload_insn = insn;
4450: int special;
4451: /* Values to be put in spill_reg_store are put here first. */
4452: rtx new_spill_reg_store[FIRST_PSEUDO_REGISTER];
4453:
4454: /* If this is a CALL_INSN preceeded by USE insns, any reload insns
4455: must go in front of the first USE insn, not in front of INSN. */
4456:
4457: if (GET_CODE (insn) == CALL_INSN && GET_CODE (PREV_INSN (insn)) == INSN
4458: && GET_CODE (PATTERN (PREV_INSN (insn))) == USE)
4459: while (GET_CODE (PREV_INSN (before_insn)) == INSN
4460: && GET_CODE (PATTERN (PREV_INSN (before_insn))) == USE)
4461: first_other_reload_insn = first_operand_address_reload_insn
4462: = before_insn = PREV_INSN (before_insn);
4463:
4464: /* Now output the instructions to copy the data into and out of the
4465: reload registers. Do these in the order that the reloads were reported,
4466: since reloads of base and index registers precede reloads of operands
4467: and the operands may need the base and index registers reloaded. */
4468:
4469: for (j = 0; j < n_reloads; j++)
4470: {
4471: register rtx old;
4472: rtx oldequiv_reg = 0;
4473: rtx this_reload_insn = 0;
4474: rtx store_insn = 0;
4475:
4476: old = reload_in[j];
4477: if (old != 0 && ! reload_inherited[j]
4478: && ! rtx_equal_p (reload_reg_rtx[j], old)
4479: && reload_reg_rtx[j] != 0)
4480: {
4481: register rtx reloadreg = reload_reg_rtx[j];
4482: rtx oldequiv = 0;
4483: enum machine_mode mode;
4484: rtx where;
4485: rtx reload_insn;
4486:
4487: /* Determine the mode to reload in.
4488: This is very tricky because we have three to choose from.
4489: There is the mode the insn operand wants (reload_inmode[J]).
4490: There is the mode of the reload register RELOADREG.
4491: There is the intrinsic mode of the operand, which we could find
4492: by stripping some SUBREGs.
4493: It turns out that RELOADREG's mode is irrelevant:
4494: we can change that arbitrarily.
4495:
4496: Consider (SUBREG:SI foo:QI) as an operand that must be SImode;
4497: then the reload reg may not support QImode moves, so use SImode.
4498: If foo is in memory due to spilling a pseudo reg, this is safe,
4499: because the QImode value is in the least significant part of a
4500: slot big enough for a SImode. If foo is some other sort of
4501: memory reference, then it is impossible to reload this case,
4502: so previous passes had better make sure this never happens.
4503:
4504: Then consider a one-word union which has SImode and one of its
4505: members is a float, being fetched as (SUBREG:SF union:SI).
4506: We must fetch that as SFmode because we could be loading into
4507: a float-only register. In this case OLD's mode is correct.
4508:
4509: Consider an immediate integer: it has VOIDmode. Here we need
4510: to get a mode from something else.
4511:
4512: In some cases, there is a fourth mode, the operand's
4513: containing mode. If the insn specifies a containing mode for
4514: this operand, it overrides all others.
4515:
4516: I am not sure whether the algorithm here is always right,
4517: but it does the right things in those cases. */
4518:
4519: mode = GET_MODE (old);
4520: if (mode == VOIDmode)
4521: mode = reload_inmode[j];
4522: if (reload_strict_low[j])
4523: mode = GET_MODE (SUBREG_REG (reload_in[j]));
4524:
4525: #ifdef SECONDARY_INPUT_RELOAD_CLASS
4526: /* If we need a secondary register for this operation, see if
4527: the value is already in a register in that class. Don't
4528: do this if the secondary register will be used as a scratch
4529: register. */
4530:
4531: if (reload_secondary_reload[j] >= 0
4532: && reload_secondary_icode[j] == CODE_FOR_nothing)
4533: oldequiv
4534: = find_equiv_reg (old, insn,
4535: reload_reg_class[reload_secondary_reload[j]],
4536: -1, 0, 0, mode);
4537: #endif
4538:
4539: /* If reloading from memory, see if there is a register
4540: that already holds the same value. If so, reload from there.
4541: We can pass 0 as the reload_reg_p argument because
4542: any other reload has either already been emitted,
4543: in which case find_equiv_reg will see the reload-insn,
4544: or has yet to be emitted, in which case it doesn't matter
4545: because we will use this equiv reg right away. */
4546:
4547: if (oldequiv == 0
4548: && (GET_CODE (old) == MEM
4549: || (GET_CODE (old) == REG
4550: && REGNO (old) >= FIRST_PSEUDO_REGISTER
4551: && reg_renumber[REGNO (old)] < 0)))
4552: oldequiv = find_equiv_reg (old, insn, GENERAL_REGS,
4553: -1, 0, 0, mode);
4554:
4555: if (oldequiv)
4556: {
4557: int regno = true_regnum (oldequiv);
4558:
4559: /* If OLDEQUIV is a spill register, don't use it for this
4560: if any other reload needs it at an earlier stage of this insn
4561: or at this stage. */
4562: if (spill_reg_order[regno] >= 0
4563: && (! reload_reg_free_p (regno, reload_when_needed[j])
4564: || ! reload_reg_free_before_p (regno,
4565: reload_when_needed[j])))
4566: oldequiv = 0;
4567:
4568: /* If OLDEQUIV is not a spill register,
4569: don't use it if any other reload wants it. */
4570: if (spill_reg_order[regno] < 0)
4571: {
4572: int k;
4573: for (k = 0; k < n_reloads; k++)
4574: if (reload_reg_rtx[k] != 0 && k != j
4575: && reg_overlap_mentioned_p (reload_reg_rtx[k], oldequiv))
4576: {
4577: oldequiv = 0;
4578: break;
4579: }
4580: }
4581: }
4582:
4583: if (oldequiv == 0)
4584: oldequiv = old;
4585: else if (GET_CODE (oldequiv) == REG)
4586: oldequiv_reg = oldequiv;
4587: else if (GET_CODE (oldequiv) == SUBREG)
4588: oldequiv_reg = SUBREG_REG (oldequiv);
4589:
4590: /* Encapsulate both RELOADREG and OLDEQUIV into that mode,
4591: then load RELOADREG from OLDEQUIV. */
4592:
4593: if (GET_MODE (reloadreg) != mode)
4594: reloadreg = gen_rtx (REG, mode, REGNO (reloadreg));
4595: while (GET_CODE (oldequiv) == SUBREG && GET_MODE (oldequiv) != mode)
4596: oldequiv = SUBREG_REG (oldequiv);
4597: if (GET_MODE (oldequiv) != VOIDmode
4598: && mode != GET_MODE (oldequiv))
4599: oldequiv = gen_rtx (SUBREG, mode, oldequiv, 0);
4600:
4601: /* Decide where to put reload insn for this reload. */
4602: switch (reload_when_needed[j])
4603: {
4604: case RELOAD_FOR_INPUT:
4605: case RELOAD_OTHER:
4606: where = first_operand_address_reload_insn;
4607: break;
4608: case RELOAD_FOR_INPUT_RELOAD_ADDRESS:
4609: where = first_other_reload_insn;
4610: break;
4611: case RELOAD_FOR_OUTPUT_RELOAD_ADDRESS:
4612: where = first_output_reload_insn;
4613: break;
4614: case RELOAD_FOR_OPERAND_ADDRESS:
4615: where = before_insn;
4616: }
4617:
4618: special = 0;
4619:
4620: /* Auto-increment addresses must be reloaded in a special way. */
4621: if (GET_CODE (oldequiv) == POST_INC
4622: || GET_CODE (oldequiv) == POST_DEC
4623: || GET_CODE (oldequiv) == PRE_INC
4624: || GET_CODE (oldequiv) == PRE_DEC)
4625: {
4626: /* We are not going to bother supporting the case where a
4627: incremented register can't be copied directly from
4628: OLDEQUIV since this seems highly unlikely. */
4629: if (reload_secondary_reload[j] >= 0)
4630: abort ();
4631: /* Prevent normal processing of this reload. */
4632: special = 1;
4633: /* Output a special code sequence for this case. */
4634: this_reload_insn
4635: = inc_for_reload (reloadreg, oldequiv, reload_inc[j], where);
4636: }
4637:
4638: /* If we are reloading a pseudo-register that was set by the previous
4639: insn, see if we can get rid of that pseudo-register entirely
4640: by redirecting the previous insn into our reload register. */
4641:
4642: else if (optimize && GET_CODE (old) == REG
4643: && REGNO (old) >= FIRST_PSEUDO_REGISTER
4644: && dead_or_set_p (insn, old)
4645: /* This is unsafe if some other reload
4646: uses the same reg first. */
4647: && (reload_when_needed[j] == RELOAD_OTHER
4648: || reload_when_needed[j] == RELOAD_FOR_INPUT
4649: || reload_when_needed[j] == RELOAD_FOR_INPUT_RELOAD_ADDRESS))
4650: {
4651: rtx temp = PREV_INSN (insn);
4652: while (temp && GET_CODE (temp) == NOTE)
4653: temp = PREV_INSN (temp);
4654: if (temp
4655: && GET_CODE (temp) == INSN
4656: && GET_CODE (PATTERN (temp)) == SET
4657: && SET_DEST (PATTERN (temp)) == old
4658: /* Make sure we can access insn_operand_constraint. */
4659: && asm_noperands (PATTERN (temp)) < 0
4660: /* This is unsafe if prev insn rejects our reload reg. */
4661: && constraint_accepts_reg_p (insn_operand_constraint[recog_memoized (temp)][0],
4662: reloadreg)
4663: /* This is unsafe if operand occurs more than once in current
4664: insn. Perhaps some occurrences aren't reloaded. */
4665: && count_occurrences (PATTERN (insn), old) == 1
4666: /* Don't risk splitting a matching pair of operands. */
4667: && ! reg_mentioned_p (old, SET_SRC (PATTERN (temp))))
4668: {
4669: /* Store into the reload register instead of the pseudo. */
4670: SET_DEST (PATTERN (temp)) = reloadreg;
4671: /* If these are the only uses of the pseudo reg,
4672: pretend for GDB it lives in the reload reg we used. */
4673: if (reg_n_deaths[REGNO (old)] == 1
4674: && reg_n_sets[REGNO (old)] == 1)
4675: {
4676: reg_renumber[REGNO (old)] = REGNO (reload_reg_rtx[j]);
4677: alter_reg (REGNO (old), -1);
4678: }
4679: special = 1;
4680: }
4681: }
4682:
4683: /* We can't do that, so output an insn to load RELOADREG.
4684: Keep them in the following order:
4685: all reloads for input reload addresses,
4686: all reloads for ordinary input operands,
4687: all reloads for addresses of non-reloaded operands,
4688: the insn being reloaded,
4689: all reloads for addresses of output reloads,
4690: the output reloads. */
4691: if (! special)
4692: {
4693: #ifdef SECONDARY_INPUT_RELOAD_CLASS
4694: rtx second_reload_reg = 0;
4695: enum insn_code icode;
4696:
4697: /* If we have a secondary reload, pick up the secondary register
4698: and icode, if any. If OLDEQUIV and OLD are different or
4699: if this is an in-out reload, recompute whether or not we
4700: still need a secondary register and what the icode should
4701: be. If we still need a secondary register and the class or
4702: icode is different, go back to reloading from OLD if using
4703: OLDEQUIV means that we got the wrong type of register. We
4704: cannot have different class or icode due to an in-out reload
4705: because we don't make such reloads when both the input and
4706: output need secondary reload registers. */
4707:
4708: if (reload_secondary_reload[j] >= 0)
4709: {
4710: int secondary_reload = reload_secondary_reload[j];
4711: second_reload_reg = reload_reg_rtx[secondary_reload];
4712: icode = reload_secondary_icode[j];
4713:
4714: if ((old != oldequiv && ! rtx_equal_p (old, oldequiv))
4715: || (reload_in[j] != 0 && reload_out[j] != 0))
4716: {
4717: enum reg_class new_class
4718: = SECONDARY_INPUT_RELOAD_CLASS (reload_reg_class[j],
4719: mode, oldequiv);
4720:
4721: if (new_class == NO_REGS)
4722: second_reload_reg = 0;
4723: else
4724: {
4725: enum insn_code new_icode;
4726: enum machine_mode new_mode;
4727:
4728: if (! TEST_HARD_REG_BIT (reg_class_contents[(int) new_class],
4729: REGNO (second_reload_reg)))
4730: oldequiv = old;
4731: else
4732: {
4733: new_icode = reload_in_optab[(int) mode];
4734: if (new_icode != CODE_FOR_nothing
4735: && ((insn_operand_predicate[(int) new_icode][0]
4736: && ! ((*insn_operand_predicate[(int) new_icode][0])
4737: (reloadreg, mode)))
4738: || (insn_operand_predicate[(int) new_icode][1]
4739: && ! ((*insn_operand_predicate[(int) new_icode][1])
4740: (oldequiv, mode)))))
4741: new_icode = CODE_FOR_nothing;
4742:
4743: if (new_icode == CODE_FOR_nothing)
4744: new_mode = mode;
4745: else
4746: new_mode = insn_operand_mode[new_icode][2];
4747:
4748: if (GET_MODE (second_reload_reg) != new_mode)
4749: {
4750: if (!HARD_REGNO_MODE_OK (REGNO (second_reload_reg),
4751: new_mode))
4752: oldequiv = old;
4753: else
4754: second_reload_reg
4755: = gen_reg_rtx (REG, new_mode,
4756: REGNO (second_reload_reg));
4757: }
4758: }
4759: }
4760: }
4761:
4762: /* If we still need a secondary reload register, check
4763: to see if it is being used as a scratch or intermediate
4764: register and generate code appropriately. */
4765:
4766: if (second_reload_reg)
4767: {
4768: if (icode != CODE_FOR_nothing)
4769: {
4770: reload_insn = emit_insn_before (GEN_FCN (icode)
4771: (reloadreg, oldequiv,
4772: second_reload_reg),
4773: where);
4774: if (this_reload_insn == 0)
4775: this_reload_insn = reload_insn;
4776: special = 1;
4777: }
4778: else
4779: {
4780: /* See if we need a scratch register to load the
4781: intermediate register (a tertiary reload). */
4782: enum insn_code tertiary_icode
4783: = reload_secondary_icode[secondary_reload];
4784:
4785: if (tertiary_icode != CODE_FOR_nothing)
4786: {
4787: rtx third_reload_reg
4788: = reload_reg_rtx[reload_secondary_reload[secondary_reload]];
4789:
4790: reload_insn
4791: = emit_insn_before ((GEN_FCN (tertiary_icode)
4792: (second_reload_reg,
4793: oldequiv,
4794: third_reload_reg)),
4795: where);
4796: if (this_reload_insn == 0)
4797: this_reload_insn = reload_insn;
4798: }
4799: else
4800: {
4801: reload_insn
4802: = gen_input_reload (second_reload_reg,
4803: oldequiv, where);
4804: if (this_reload_insn == 0)
4805: this_reload_insn = reload_insn;
4806: oldequiv = second_reload_reg;
4807: }
4808: }
4809: }
4810: }
4811: #endif
4812:
4813: if (! special)
4814: {
4815: reload_insn = gen_input_reload (reloadreg,
4816: oldequiv, where);
4817: if (this_reload_insn == 0)
4818: this_reload_insn = reload_insn;
4819: }
4820:
4821: #if defined(SECONDARY_INPUT_RELOAD_CLASS) && defined(PRESERVE_DEATH_INFO_REGNO_P)
4822: /* We may have to make a REG_DEAD note for the secondary reload
4823: register in the insns we just made. Find the last insn that
4824: mentioned the register. */
4825: if (! special && second_reload_reg
4826: && PRESERVE_DEATH_INFO_REGNO_P (REGNO (second_reload_reg)))
4827: {
4828: rtx prev;
4829:
4830: for (prev = where;
4831: prev != PREV_INSN (this_reload_insn);
4832: prev = PREV_INSN (prev))
4833: if (GET_RTX_CLASS (GET_CODE (prev) == 'i')
4834: && reg_overlap_mentioned_p (second_reload_reg,
4835: PATTERN (prev)))
4836: {
4837: REG_NOTES (prev) = gen_rtx (EXPR_LIST, REG_DEAD,
4838: second_reload_reg,
4839: REG_NOTES (prev));
4840: break;
4841: }
4842: }
4843: #endif
4844: }
4845:
4846: /* Update where to put other reload insns. */
4847: if (this_reload_insn)
4848: switch (reload_when_needed[j])
4849: {
4850: case RELOAD_FOR_INPUT:
4851: case RELOAD_OTHER:
4852: if (first_other_reload_insn == first_operand_address_reload_insn)
4853: first_other_reload_insn = this_reload_insn;
4854: break;
4855: case RELOAD_FOR_OPERAND_ADDRESS:
4856: if (first_operand_address_reload_insn == before_insn)
4857: first_operand_address_reload_insn = this_reload_insn;
4858: if (first_other_reload_insn == before_insn)
4859: first_other_reload_insn = this_reload_insn;
4860: }
4861:
4862: /* reload_inc[j] was formerly processed here. */
4863: }
4864:
4865: /* Add a note saying the input reload reg
4866: dies in this insn, if anyone cares. */
4867: #ifdef PRESERVE_DEATH_INFO_REGNO_P
4868: if (old != 0
4869: && reload_reg_rtx[j] != old
4870: && reload_reg_rtx[j] != 0
4871: && reload_out[j] == 0
4872: && ! reload_inherited[j]
4873: && PRESERVE_DEATH_INFO_REGNO_P (REGNO (reload_reg_rtx[j])))
4874: {
4875: register rtx reloadreg = reload_reg_rtx[j];
4876:
4877: #if 0
4878: /* We can't abort here because we need to support this for sched.c.
4879: It's not terrible to miss a REG_DEAD note, but we should try
4880: to figure out how to do this correctly. */
4881: /* The code below is incorrect for address-only reloads. */
4882: if (reload_when_needed[j] != RELOAD_OTHER
4883: && reload_when_needed[j] != RELOAD_FOR_INPUT)
4884: abort ();
4885: #endif
4886:
4887: /* Add a death note to this insn, for an input reload. */
4888:
4889: if ((reload_when_needed[j] == RELOAD_OTHER
4890: || reload_when_needed[j] == RELOAD_FOR_INPUT)
4891: && ! dead_or_set_p (insn, reloadreg))
4892: REG_NOTES (insn)
4893: = gen_rtx (EXPR_LIST, REG_DEAD,
4894: reloadreg, REG_NOTES (insn));
4895: }
4896:
4897: /* When we inherit a reload, the last marked death of the reload reg
4898: may no longer really be a death. */
4899: if (reload_reg_rtx[j] != 0
4900: && PRESERVE_DEATH_INFO_REGNO_P (REGNO (reload_reg_rtx[j]))
4901: && reload_inherited[j])
4902: {
4903: /* Handle inheriting an output reload.
4904: Remove the death note from the output reload insn. */
4905: if (reload_spill_index[j] >= 0
4906: && GET_CODE (reload_in[j]) == REG
4907: && spill_reg_store[reload_spill_index[j]] != 0
4908: && find_regno_note (spill_reg_store[reload_spill_index[j]],
4909: REG_DEAD, REGNO (reload_reg_rtx[j])))
4910: remove_death (REGNO (reload_reg_rtx[j]),
4911: spill_reg_store[reload_spill_index[j]]);
4912: /* Likewise for input reloads that were inherited. */
4913: else if (reload_spill_index[j] >= 0
4914: && GET_CODE (reload_in[j]) == REG
4915: && spill_reg_store[reload_spill_index[j]] == 0
4916: && reload_inheritance_insn[j] != 0
4917: && find_regno_note (reload_inheritance_insn[j], REG_DEAD,
4918: REGNO (reload_reg_rtx[j])))
4919: remove_death (REGNO (reload_reg_rtx[j]),
4920: reload_inheritance_insn[j]);
4921: else
4922: {
4923: rtx prev;
4924:
4925: /* We got this register from find_equiv_reg.
4926: Search back for its last death note and get rid of it.
4927: But don't search back too far.
4928: Don't go past a place where this reg is set,
4929: since a death note before that remains valid. */
4930: for (prev = PREV_INSN (insn);
4931: prev && GET_CODE (prev) != CODE_LABEL;
4932: prev = PREV_INSN (prev))
4933: if (GET_RTX_CLASS (GET_CODE (prev)) == 'i'
4934: && dead_or_set_p (prev, reload_reg_rtx[j]))
4935: {
4936: if (find_regno_note (prev, REG_DEAD,
4937: REGNO (reload_reg_rtx[j])))
4938: remove_death (REGNO (reload_reg_rtx[j]), prev);
4939: break;
4940: }
4941: }
4942: }
4943:
4944: /* We might have used find_equiv_reg above to choose an alternate
4945: place from which to reload. If so, and it died, we need to remove
4946: that death and move it to one of the insns we just made. */
4947:
4948: if (oldequiv_reg != 0
4949: && PRESERVE_DEATH_INFO_REGNO_P (true_regnum (oldequiv_reg)))
4950: {
4951: rtx prev, prev1;
4952:
4953: for (prev = PREV_INSN (insn); prev && GET_CODE (prev) != CODE_LABEL;
4954: prev = PREV_INSN (prev))
4955: if (GET_RTX_CLASS (GET_CODE (prev)) == 'i'
4956: && dead_or_set_p (prev, oldequiv_reg))
4957: {
4958: if (find_regno_note (prev, REG_DEAD, REGNO (oldequiv_reg)))
4959: {
4960: for (prev1 = this_reload_insn;
4961: prev1; prev1 = PREV_INSN (prev1))
4962: if (GET_RTX_CLASS (GET_CODE (prev1) == 'i')
4963: && reg_overlap_mentioned_p (oldequiv_reg,
4964: PATTERN (prev1)))
4965: {
4966: REG_NOTES (prev1) = gen_rtx (EXPR_LIST, REG_DEAD,
4967: oldequiv_reg,
4968: REG_NOTES (prev1));
4969: break;
4970: }
4971: remove_death (REGNO (oldequiv_reg), prev);
4972: }
4973: break;
4974: }
4975: }
4976: #endif
4977:
4978: /* If we are reloading a register that was recently stored in with an
4979: output-reload, see if we can prove there was
4980: actually no need to store the old value in it. */
4981:
4982: if (optimize && reload_inherited[j] && reload_spill_index[j] >= 0
4983: /* This is unsafe if some other reload uses the same reg first. */
4984: && (reload_when_needed[j] == RELOAD_OTHER
4985: || reload_when_needed[j] == RELOAD_FOR_INPUT
4986: || reload_when_needed[j] == RELOAD_FOR_INPUT_RELOAD_ADDRESS)
4987: && GET_CODE (reload_in[j]) == REG
4988: #if 0
4989: /* There doesn't seem to be any reason to restrict this to pseudos
4990: and doing so loses in the case where we are copying from a
4991: register of the wrong class. */
4992: && REGNO (reload_in[j]) >= FIRST_PSEUDO_REGISTER
4993: #endif
4994: && spill_reg_store[reload_spill_index[j]] != 0
4995: && dead_or_set_p (insn, reload_in[j])
4996: /* This is unsafe if operand occurs more than once in current
4997: insn. Perhaps some occurrences weren't reloaded. */
4998: && count_occurrences (PATTERN (insn), reload_in[j]) == 1)
4999: delete_output_reload (insn, j,
5000: spill_reg_store[reload_spill_index[j]]);
5001:
5002: /* Input-reloading is done. Now do output-reloading,
5003: storing the value from the reload-register after the main insn
5004: if reload_out[j] is nonzero.
5005:
5006: ??? At some point we need to support handling output reloads of
5007: JUMP_INSNs or insns that set cc0. */
5008: old = reload_out[j];
5009: if (old != 0
5010: && reload_reg_rtx[j] != old
5011: && reload_reg_rtx[j] != 0)
5012: {
5013: register rtx reloadreg = reload_reg_rtx[j];
5014: register rtx second_reloadreg = 0;
5015: rtx prev_insn = PREV_INSN (first_output_reload_insn);
5016: rtx note, p;
5017: enum machine_mode mode;
5018: int special = 0;
5019:
5020: /* An output operand that dies right away does need a reload,
5021: but need not be copied from it. Show the new location in the
5022: REG_UNUSED note. */
5023: if ((GET_CODE (old) == REG || GET_CODE (old) == SCRATCH)
5024: && (note = find_reg_note (insn, REG_UNUSED, old)) != 0)
5025: {
5026: XEXP (note, 0) = reload_reg_rtx[j];
5027: continue;
5028: }
5029: else if (GET_CODE (old) == SCRATCH)
5030: /* If we aren't optimizing, there won't be a REG_UNUSED note,
5031: but we don't want to make an output reload. */
5032: continue;
5033:
5034: #if 0
5035: /* Strip off of OLD any size-increasing SUBREGs such as
5036: (SUBREG:SI foo:QI 0). */
5037:
5038: while (GET_CODE (old) == SUBREG && SUBREG_WORD (old) == 0
5039: && (GET_MODE_SIZE (GET_MODE (old))
5040: > GET_MODE_SIZE (GET_MODE (SUBREG_REG (old)))))
5041: old = SUBREG_REG (old);
5042: #endif
5043:
5044: /* If is a JUMP_INSN, we can't support output reloads yet. */
5045: if (GET_CODE (insn) == JUMP_INSN)
5046: abort ();
5047:
5048: /* Determine the mode to reload in.
5049: See comments above (for input reloading). */
5050:
5051: mode = GET_MODE (old);
5052: if (mode == VOIDmode)
5053: abort (); /* Should never happen for an output. */
5054:
5055: /* A strict-low-part output operand needs to be reloaded
5056: in the mode of the entire value. */
5057: if (reload_strict_low[j])
5058: {
5059: mode = GET_MODE (SUBREG_REG (reload_out[j]));
5060: /* Encapsulate OLD into that mode. */
5061: /* If OLD is a subreg, then strip it, since the subreg will
5062: be altered by this very reload. */
5063: while (GET_CODE (old) == SUBREG && GET_MODE (old) != mode)
5064: old = SUBREG_REG (old);
5065: if (GET_MODE (old) != VOIDmode
5066: && mode != GET_MODE (old))
5067: old = gen_rtx (SUBREG, mode, old, 0);
5068: }
5069:
5070: if (GET_MODE (reloadreg) != mode)
5071: reloadreg = gen_rtx (REG, mode, REGNO (reloadreg));
5072:
5073: #ifdef SECONDARY_OUTPUT_RELOAD_CLASS
5074:
5075: /* If we need two reload regs, set RELOADREG to the intermediate
5076: one, since it will be stored into OUT. We might need a secondary
5077: register only for an input reload, so check again here. */
5078:
5079: if (reload_secondary_reload[j] >= 0
5080: && (SECONDARY_OUTPUT_RELOAD_CLASS (reload_reg_class[j],
5081: mode, old)
5082: != NO_REGS))
5083: {
5084: second_reloadreg = reloadreg;
5085: reloadreg = reload_reg_rtx[reload_secondary_reload[j]];
5086:
5087: /* See if RELOADREG is to be used as a scratch register
5088: or as an intermediate register. */
5089: if (reload_secondary_icode[j] != CODE_FOR_nothing)
5090: {
5091: emit_insn_before ((GEN_FCN (reload_secondary_icode[j])
5092: (old, second_reloadreg, reloadreg)),
5093: first_output_reload_insn);
5094: special = 1;
5095: }
5096: else
5097: {
5098: /* See if we need both a scratch and intermediate reload
5099: register. */
5100: int secondary_reload = reload_secondary_reload[j];
5101: enum insn_code tertiary_icode
5102: = reload_secondary_icode[secondary_reload];
5103: rtx pat;
5104:
5105: if (GET_MODE (reloadreg) != mode)
5106: reloadreg = gen_rtx (REG, mode, REGNO (reloadreg));
5107:
5108: if (tertiary_icode != CODE_FOR_nothing)
5109: {
5110: rtx third_reloadreg
5111: = reload_reg_rtx[reload_secondary_reload[secondary_reload]];
5112: pat = (GEN_FCN (tertiary_icode)
5113: (reloadreg, second_reloadreg, third_reloadreg));
5114: }
5115: else
5116: pat = gen_move_insn (reloadreg, second_reloadreg);
5117:
5118: emit_insn_before (pat, first_output_reload_insn);
5119: }
5120: }
5121: #endif
5122:
5123: /* Output the last reload insn. */
5124: if (! special)
5125: emit_insn_before (gen_move_insn (old, reloadreg),
5126: first_output_reload_insn);
5127:
5128: #ifdef PRESERVE_DEATH_INFO_REGNO_P
5129: /* If final will look at death notes for this reg,
5130: put one on the last output-reload insn to use it. Similarly
5131: for any secondary register. */
5132: if (PRESERVE_DEATH_INFO_REGNO_P (REGNO (reloadreg)))
5133: for (p = PREV_INSN (first_output_reload_insn);
5134: p != prev_insn; p = PREV_INSN (p))
5135: if (GET_RTX_CLASS (GET_CODE (p)) == 'i'
5136: && reg_overlap_mentioned_p (reloadreg, PATTERN (p)))
5137: REG_NOTES (p) = gen_rtx (EXPR_LIST, REG_DEAD,
5138: reloadreg, REG_NOTES (p));
5139:
5140: #ifdef SECONDARY_OUTPUT_RELOAD_CLASS
5141: if (! special
5142: && PRESERVE_DEATH_INFO_REGNO_P (REGNO (second_reloadreg)))
5143: for (p = PREV_INSN (first_output_reload_insn);
5144: p != prev_insn; p = PREV_INSN (p))
5145: if (GET_RTX_CLASS (GET_CODE (p)) == 'i'
5146: && reg_overlap_mentioned_p (second_reloadreg, PATTERN (p)))
5147: REG_NOTES (p) = gen_rtx (EXPR_LIST, REG_DEAD,
5148: second_reloadreg, REG_NOTES (p));
5149: #endif
5150: #endif
5151: /* Look at all insns we emitted, just to be safe. */
5152: for (p = NEXT_INSN (prev_insn); p != first_output_reload_insn;
5153: p = NEXT_INSN (p))
5154: if (GET_RTX_CLASS (GET_CODE (p)) == 'i')
5155: {
5156: /* If this output reload doesn't come from a spill reg,
5157: clear any memory of reloaded copies of the pseudo reg.
5158: If this output reload comes from a spill reg,
5159: reg_has_output_reload will make this do nothing. */
5160: note_stores (PATTERN (p), forget_old_reloads_1);
5161:
5162: if (reg_mentioned_p (reload_reg_rtx[j], PATTERN (p)))
5163: store_insn = p;
5164: }
5165:
5166: first_output_reload_insn = NEXT_INSN (prev_insn);
5167: }
5168:
5169: if (reload_spill_index[j] >= 0)
5170: new_spill_reg_store[reload_spill_index[j]] = store_insn;
5171: }
5172:
5173: /* Move death notes from INSN
5174: to output-operand-address and output reload insns. */
5175: #ifdef PRESERVE_DEATH_INFO_REGNO_P
5176: {
5177: rtx insn1;
5178: /* Loop over those insns, last ones first. */
5179: for (insn1 = PREV_INSN (following_insn); insn1 != insn;
5180: insn1 = PREV_INSN (insn1))
5181: if (GET_CODE (insn1) == INSN && GET_CODE (PATTERN (insn1)) == SET)
5182: {
5183: rtx source = SET_SRC (PATTERN (insn1));
5184: rtx dest = SET_DEST (PATTERN (insn1));
5185:
5186: /* The note we will examine next. */
5187: rtx reg_notes = REG_NOTES (insn);
5188: /* The place that pointed to this note. */
5189: rtx *prev_reg_note = ®_NOTES (insn);
5190:
5191: /* If the note is for something used in the source of this
5192: reload insn, or in the output address, move the note. */
5193: while (reg_notes)
5194: {
5195: rtx next_reg_notes = XEXP (reg_notes, 1);
5196: if (REG_NOTE_KIND (reg_notes) == REG_DEAD
5197: && GET_CODE (XEXP (reg_notes, 0)) == REG
5198: && ((GET_CODE (dest) != REG
5199: && reg_overlap_mentioned_p (XEXP (reg_notes, 0), dest))
5200: || reg_overlap_mentioned_p (XEXP (reg_notes, 0), source)))
5201: {
5202: *prev_reg_note = next_reg_notes;
5203: XEXP (reg_notes, 1) = REG_NOTES (insn1);
5204: REG_NOTES (insn1) = reg_notes;
5205: }
5206: else
5207: prev_reg_note = &XEXP (reg_notes, 1);
5208:
5209: reg_notes = next_reg_notes;
5210: }
5211: }
5212: }
5213: #endif
5214:
5215: /* For all the spill regs newly reloaded in this instruction,
5216: record what they were reloaded from, so subsequent instructions
5217: can inherit the reloads.
5218:
5219: Update spill_reg_store for the reloads of this insn.
5220: Copy the elements that were updated in the loop above. */
5221:
5222: for (j = 0; j < n_reloads; j++)
5223: {
5224: register int r = reload_order[j];
5225: register int i = reload_spill_index[r];
5226:
5227: /* I is nonneg if this reload used one of the spill regs.
5228: If reload_reg_rtx[r] is 0, this is an optional reload
5229: that we opted to ignore. */
5230:
5231: if (i >= 0 && reload_reg_rtx[r] != 0)
5232: {
5233: /* First, clear out memory of what used to be in this spill reg.
5234: If consecutive registers are used, clear them all. */
5235: int nr
5236: = HARD_REGNO_NREGS (spill_regs[i], GET_MODE (reload_reg_rtx[r]));
5237: int k;
5238:
5239: for (k = 0; k < nr; k++)
5240: {
5241: reg_reloaded_contents[spill_reg_order[spill_regs[i] + k]] = -1;
5242: reg_reloaded_insn[spill_reg_order[spill_regs[i] + k]] = 0;
5243: }
5244:
5245: /* Maybe the spill reg contains a copy of reload_out. */
5246: if (reload_out[r] != 0 && GET_CODE (reload_out[r]) == REG)
5247: {
5248: register int nregno = REGNO (reload_out[r]);
5249:
5250: spill_reg_store[i] = new_spill_reg_store[i];
5251: reg_last_reload_reg[nregno] = reload_reg_rtx[r];
5252:
5253: for (k = 0; k < nr; k++)
5254: {
5255: reg_reloaded_contents[spill_reg_order[spill_regs[i] + k]]
5256: = nregno;
5257: reg_reloaded_insn[spill_reg_order[spill_regs[i] + k]] = insn;
5258: }
5259: }
5260:
5261: /* Maybe the spill reg contains a copy of reload_in. */
5262: else if (reload_out[r] == 0
5263: && reload_in[r] != 0
5264: && (GET_CODE (reload_in[r]) == REG
5265: || GET_CODE (reload_in_reg[r]) == REG))
5266: {
5267: register int nregno;
5268: if (GET_CODE (reload_in[r]) == REG)
5269: nregno = REGNO (reload_in[r]);
5270: else
5271: nregno = REGNO (reload_in_reg[r]);
5272:
5273: /* If there are two separate reloads (one in and one out)
5274: for the same (hard or pseudo) reg,
5275: leave reg_last_reload_reg set
5276: based on the output reload.
5277: Otherwise, set it from this input reload. */
5278: if (!reg_has_output_reload[nregno]
5279: /* But don't do so if another input reload
5280: will clobber this one's value. */
5281: && reload_reg_reaches_end_p (spill_regs[i],
5282: reload_when_needed[r]))
5283: {
5284: reg_last_reload_reg[nregno] = reload_reg_rtx[r];
5285:
5286: /* Unless we inherited this reload, show we haven't
5287: recently done a store. */
5288: if (! reload_inherited[r])
5289: spill_reg_store[i] = 0;
5290:
5291: for (k = 0; k < nr; k++)
5292: {
5293: reg_reloaded_contents[spill_reg_order[spill_regs[i] + k]]
5294: = nregno;
5295: reg_reloaded_insn[spill_reg_order[spill_regs[i] + k]]
5296: = insn;
5297: }
5298: }
5299: }
5300: }
5301:
5302: /* The following if-statement was #if 0'd in 1.34 (or before...).
5303: It's reenabled in 1.35 because supposedly nothing else
5304: deals with this problem. */
5305:
5306: /* If a register gets output-reloaded from a non-spill register,
5307: that invalidates any previous reloaded copy of it.
5308: But forget_old_reloads_1 won't get to see it, because
5309: it thinks only about the original insn. So invalidate it here. */
5310: if (i < 0 && reload_out[r] != 0 && GET_CODE (reload_out[r]) == REG)
5311: {
5312: register int nregno = REGNO (reload_out[r]);
5313: reg_last_reload_reg[nregno] = 0;
5314: }
5315: }
5316: }
5317:
5318: /* Emit code before BEFORE_INSN to perform an input reload of IN to RELOADREG.
5319: Returns first insn emitted. */
5320:
5321: rtx
5322: gen_input_reload (reloadreg, in, before_insn)
5323: rtx reloadreg;
5324: rtx in;
5325: rtx before_insn;
5326: {
5327: register rtx prev_insn = PREV_INSN (before_insn);
5328:
5329: /* How to do this reload can get quite tricky. Normally, we are being
5330: asked to reload a simple operand, such as a MEM, a constant, or a pseudo
5331: register that didn't get a hard register. In that case we can just
5332: call emit_move_insn.
5333:
5334: We can also be asked to reload a PLUS that adds either two registers or
5335: a register and a constant or MEM. This can occur during frame pointer
5336: elimination. That case if handled by trying to emit a single insn
5337: to perform the add. If it is not valid, we use a two insn sequence.
5338:
5339: Finally, we could be called to handle an 'o' constraint by putting
5340: an address into a register. In that case, we first try to do this
5341: with a named pattern of "reload_load_address". If no such pattern
5342: exists, we just emit a SET insn and hope for the best (it will normally
5343: be valid on machines that use 'o').
5344:
5345: This entire process is made complex because reload will never
5346: process the insns we generate here and so we must ensure that
5347: they will fit their constraints and also by the fact that parts of
5348: IN might be being reloaded separately and replaced with spill registers.
5349: Because of this, we are, in some sense, just guessing the right approach
5350: here. The one listed above seems to work.
5351:
5352: ??? At some point, this whole thing needs to be rethought. */
5353:
5354: if (GET_CODE (in) == PLUS
5355: && GET_CODE (XEXP (in, 0)) == REG
5356: && (GET_CODE (XEXP (in, 1)) == REG
5357: || CONSTANT_P (XEXP (in, 1))
5358: || GET_CODE (XEXP (in, 1)) == MEM))
5359: {
5360: /* We need to compute the sum of what is either a register and a
5361: constant, a register and memory, or a hard register and a pseudo
5362: register and put it into the reload register. The best possible way
5363: of doing this is if the machine has a three-operand ADD insn that
5364: accepts the required operands.
5365:
5366: The simplest approach is to try to generate such an insn and see if it
5367: is recognized and matches its constraints. If so, it can be used.
5368:
5369: It might be better not to actually emit the insn unless it is valid,
5370: but we need to pass the insn as an operand to `recog' and it is
5371: simpler to emit and then delete the insn if not valid than to
5372: dummy things up. */
5373:
5374: rtx move_operand, other_operand, insn;
5375: int code;
5376:
5377: /* Since constraint checking is strict, commutativity won't be
5378: checked, so we need to do that here to avoid spurious failure
5379: if the add instruction is two-address and the second operand
5380: of the add is the same as the reload reg, which is frequently
5381: the case. If the insn would be A = B + A, rearrange it so
5382: it will be A = A + B as constrain_operands expects. */
5383:
5384: if (GET_CODE (XEXP (in, 1)) == REG
5385: && REGNO (reloadreg) == REGNO (XEXP (in, 1)))
5386: in = gen_rtx (PLUS, GET_MODE (in), XEXP (in, 1), XEXP (in, 0));
5387:
5388: insn = emit_insn_before (gen_rtx (SET, VOIDmode, reloadreg, in),
5389: before_insn);
5390: code = recog_memoized (insn);
5391:
5392: if (code >= 0)
5393: {
5394: insn_extract (insn);
5395: /* We want constrain operands to treat this insn strictly in
5396: its validity determination, i.e., the way it would after reload
5397: has completed. */
5398: if (constrain_operands (code, 1))
5399: return insn;
5400: }
5401:
5402: if (PREV_INSN (insn))
5403: NEXT_INSN (PREV_INSN (insn)) = NEXT_INSN (insn);
5404: if (NEXT_INSN (insn))
5405: PREV_INSN (NEXT_INSN (insn)) = PREV_INSN (insn);
5406:
5407: /* If that failed, we must use a conservative two-insn sequence.
5408: use move to copy constant, MEM, or pseudo register to the reload
5409: register since "move" will be able to handle arbitrary operand, unlike
5410: add which can't, in general. Then add the registers.
5411:
5412: If there is another way to do this for a specific machine, a
5413: DEFINE_PEEPHOLE should be specified that recognizes the sequence
5414: we emit below. */
5415:
5416: if (CONSTANT_P (XEXP (in, 1))
5417: || (GET_CODE (XEXP (in, 1)) == REG
5418: && REGNO (XEXP (in, 1)) >= FIRST_PSEUDO_REGISTER))
5419: move_operand = XEXP (in, 1), other_operand = XEXP (in, 0);
5420: else
5421: move_operand = XEXP (in, 0), other_operand = XEXP (in, 1);
5422:
5423: emit_insn_before (gen_move_insn (reloadreg, move_operand), before_insn);
5424: emit_insn_before (gen_add2_insn (reloadreg, other_operand), before_insn);
5425: }
5426:
5427: /* If IN is a simple operand, use gen_move_insn. */
5428: else if (GET_RTX_CLASS (GET_CODE (in)) == 'o' || GET_CODE (in) == SUBREG)
5429: emit_insn_before (gen_move_insn (reloadreg, in), before_insn);
5430:
5431: #ifdef HAVE_reload_load_address
5432: else if (HAVE_reload_load_address)
5433: emit_insn_before (gen_reload_load_address (reloadreg, in), before_insn);
5434: #endif
5435:
5436: /* Otherwise, just write (set REGLOADREG IN) and hope for the best. */
5437: else
5438: emit_insn_before (gen_rtx (SET, VOIDmode, reloadreg, in), before_insn);
5439:
5440: /* Return the first insn emitted.
5441: We can not just return PREV_INSN (before_insn), because there may have
5442: been multiple instructions emitted. Also note that gen_move_insn may
5443: emit more than one insn itself, so we can not assume that there is one
5444: insn emitted per emit_insn_before call. */
5445:
5446: return NEXT_INSN (prev_insn);
5447: }
5448:
5449: /* Delete a previously made output-reload
5450: whose result we now believe is not needed.
5451: First we double-check.
5452:
5453: INSN is the insn now being processed.
5454: OUTPUT_RELOAD_INSN is the insn of the output reload.
5455: J is the reload-number for this insn. */
5456:
5457: static void
5458: delete_output_reload (insn, j, output_reload_insn)
5459: rtx insn;
5460: int j;
5461: rtx output_reload_insn;
5462: {
5463: register rtx i1;
5464:
5465: /* Get the raw pseudo-register referred to. */
5466:
5467: rtx reg = reload_in[j];
5468: while (GET_CODE (reg) == SUBREG)
5469: reg = SUBREG_REG (reg);
5470:
5471: /* If the pseudo-reg we are reloading is no longer referenced
5472: anywhere between the store into it and here,
5473: and no jumps or labels intervene, then the value can get
5474: here through the reload reg alone.
5475: Otherwise, give up--return. */
5476: for (i1 = NEXT_INSN (output_reload_insn);
5477: i1 != insn; i1 = NEXT_INSN (i1))
5478: {
5479: if (GET_CODE (i1) == CODE_LABEL || GET_CODE (i1) == JUMP_INSN)
5480: return;
5481: if ((GET_CODE (i1) == INSN || GET_CODE (i1) == CALL_INSN)
5482: && reg_mentioned_p (reg, PATTERN (i1)))
5483: return;
5484: }
5485:
5486: /* If this insn will store in the pseudo again,
5487: the previous store can be removed. */
5488: if (reload_out[j] == reload_in[j])
5489: delete_insn (output_reload_insn);
5490:
5491: /* See if the pseudo reg has been completely replaced
5492: with reload regs. If so, delete the store insn
5493: and forget we had a stack slot for the pseudo. */
5494: else if (reg_n_deaths[REGNO (reg)] == 1
5495: && reg_basic_block[REGNO (reg)] >= 0
5496: && find_regno_note (insn, REG_DEAD, REGNO (reg)))
5497: {
5498: rtx i2;
5499:
5500: /* We know that it was used only between here
5501: and the beginning of the current basic block.
5502: (We also know that the last use before INSN was
5503: the output reload we are thinking of deleting, but never mind that.)
5504: Search that range; see if any ref remains. */
5505: for (i2 = PREV_INSN (insn); i2; i2 = PREV_INSN (i2))
5506: {
5507: rtx set = single_set (i2);
5508:
5509: /* Uses which just store in the pseudo don't count,
5510: since if they are the only uses, they are dead. */
5511: if (set != 0 && SET_DEST (set) == reg)
5512: continue;
5513: if (GET_CODE (i2) == CODE_LABEL
5514: || GET_CODE (i2) == JUMP_INSN)
5515: break;
5516: if ((GET_CODE (i2) == INSN || GET_CODE (i2) == CALL_INSN)
5517: && reg_mentioned_p (reg, PATTERN (i2)))
5518: /* Some other ref remains;
5519: we can't do anything. */
5520: return;
5521: }
5522:
5523: /* Delete the now-dead stores into this pseudo. */
5524: for (i2 = PREV_INSN (insn); i2; i2 = PREV_INSN (i2))
5525: {
5526: rtx set = single_set (i2);
5527:
5528: if (set != 0 && SET_DEST (set) == reg)
5529: delete_insn (i2);
5530: if (GET_CODE (i2) == CODE_LABEL
5531: || GET_CODE (i2) == JUMP_INSN)
5532: break;
5533: }
5534:
5535: /* For the debugging info,
5536: say the pseudo lives in this reload reg. */
5537: reg_renumber[REGNO (reg)] = REGNO (reload_reg_rtx[j]);
5538: alter_reg (REGNO (reg), -1);
5539: }
5540: }
5541:
5542:
5543: /* Output reload-insns to reload VALUE into RELOADREG.
5544: VALUE is a autoincrement or autodecrement RTX whose operand
5545: is a register or memory location;
5546: so reloading involves incrementing that location.
5547:
5548: INC_AMOUNT is the number to increment or decrement by (always positive).
5549: This cannot be deduced from VALUE.
5550:
5551: INSN is the insn before which the new insns should be emitted.
5552:
5553: The return value is the first of the insns emitted. */
5554:
5555: static rtx
5556: inc_for_reload (reloadreg, value, inc_amount, insn)
5557: rtx reloadreg;
5558: rtx value;
5559: int inc_amount;
5560: rtx insn;
5561: {
5562: /* REG or MEM to be copied and incremented. */
5563: rtx incloc = XEXP (value, 0);
5564: /* Nonzero if increment after copying. */
5565: int post = (GET_CODE (value) == POST_DEC || GET_CODE (value) == POST_INC);
5566:
5567: /* No hard register is equivalent to this register after
5568: inc/dec operation. If REG_LAST_RELOAD_REG were non-zero,
5569: we could inc/dec that register as well (maybe even using it for
5570: the source), but I'm not sure it's worth worrying about. */
5571: if (GET_CODE (incloc) == REG)
5572: reg_last_reload_reg[REGNO (incloc)] = 0;
5573:
5574: if (GET_CODE (value) == PRE_DEC || GET_CODE (value) == POST_DEC)
5575: inc_amount = - inc_amount;
5576:
5577: /* First handle preincrement, which is simpler. */
5578: if (! post)
5579: {
5580: /* If incrementing a register, assume we can
5581: output an insn to increment it directly. */
5582: if (GET_CODE (incloc) == REG &&
5583: (REGNO (incloc) < FIRST_PSEUDO_REGISTER
5584: || reg_renumber[REGNO (incloc)] >= 0))
5585: {
5586: rtx first_new
5587: = emit_insn_before (gen_add2_insn (incloc,
5588: gen_rtx (CONST_INT, VOIDmode,
5589: inc_amount)),
5590: insn);
5591: emit_insn_before (gen_move_insn (reloadreg, incloc), insn);
5592: return first_new;
5593: }
5594: else
5595: /* Else we must not assume we can increment the location directly
5596: (even though on many target machines we can);
5597: copy it to the reload register, increment there, then save back. */
5598: {
5599: rtx first_new
5600: = emit_insn_before (gen_move_insn (reloadreg, incloc), insn);
5601: emit_insn_before (gen_add2_insn (reloadreg,
5602: gen_rtx (CONST_INT, VOIDmode,
5603: inc_amount)),
5604: insn);
5605: emit_insn_before (gen_move_insn (incloc, reloadreg), insn);
5606: return first_new;
5607: }
5608: }
5609: /* Postincrement.
5610: Because this might be a jump insn or a compare, and because RELOADREG
5611: may not be available after the insn in an input reload,
5612: we must do the incrementation before the insn being reloaded for. */
5613: else
5614: {
5615: /* Copy the value, then increment it. */
5616: rtx first_new
5617: = emit_insn_before (gen_move_insn (reloadreg, incloc), insn);
5618:
5619: /* If incrementing a register, assume we can
5620: output an insn to increment it directly. */
5621: if (GET_CODE (incloc) == REG &&
5622: (REGNO (incloc) < FIRST_PSEUDO_REGISTER
5623: || reg_renumber[REGNO (incloc)] >= 0))
5624: {
5625: emit_insn_before (gen_add2_insn (incloc,
5626: gen_rtx (CONST_INT, VOIDmode,
5627: inc_amount)),
5628: insn);
5629: }
5630: else
5631: /* Else we must not assume we can increment INCLOC
5632: (even though on many target machines we can);
5633: increment the copy in the reload register,
5634: save that back, then decrement the reload register
5635: so it has the original value. */
5636: {
5637: emit_insn_before (gen_add2_insn (reloadreg,
5638: gen_rtx (CONST_INT, VOIDmode,
5639: inc_amount)),
5640: insn);
5641: emit_insn_before (gen_move_insn (incloc, reloadreg), insn);
5642: emit_insn_before (gen_sub2_insn (reloadreg,
5643: gen_rtx (CONST_INT, VOIDmode,
5644: inc_amount)),
5645: insn);
5646: }
5647: return first_new;
5648: }
5649: }
5650:
5651: /* Return 1 if we are certain that the constraint-string STRING allows
5652: the hard register REG. Return 0 if we can't be sure of this. */
5653:
5654: static int
5655: constraint_accepts_reg_p (string, reg)
5656: char *string;
5657: rtx reg;
5658: {
5659: int value = 0;
5660: int regno = true_regnum (reg);
5661: int c;
5662:
5663: /* Initialize for first alternative. */
5664: value = 0;
5665: /* Check that each alternative contains `g' or `r'. */
5666: while (1)
5667: switch (c = *string++)
5668: {
5669: case 0:
5670: /* If an alternative lacks `g' or `r', we lose. */
5671: return value;
5672: case ',':
5673: /* If an alternative lacks `g' or `r', we lose. */
5674: if (value == 0)
5675: return 0;
5676: /* Initialize for next alternative. */
5677: value = 0;
5678: break;
5679: case 'g':
5680: case 'r':
5681: /* Any general reg wins for this alternative. */
5682: if (TEST_HARD_REG_BIT (reg_class_contents[(int) GENERAL_REGS], regno))
5683: value = 1;
5684: break;
5685: default:
5686: /* Any reg in specified class wins for this alternative. */
5687: {
5688: int class = REG_CLASS_FROM_LETTER (c);
5689:
5690: if (TEST_HARD_REG_BIT (reg_class_contents[class], regno))
5691: value = 1;
5692: }
5693: }
5694: }
5695:
5696: /* Return the number of places FIND appears within X, but don't count
5697: an occurrence if some SET_DEST is FIND. */
5698:
5699: static int
5700: count_occurrences (x, find)
5701: register rtx x, find;
5702: {
5703: register int i, j;
5704: register enum rtx_code code;
5705: register char *format_ptr;
5706: int count;
5707:
5708: if (x == find)
5709: return 1;
5710: if (x == 0)
5711: return 0;
5712:
5713: code = GET_CODE (x);
5714:
5715: switch (code)
5716: {
5717: case REG:
5718: case QUEUED:
5719: case CONST_INT:
5720: case CONST_DOUBLE:
5721: case SYMBOL_REF:
5722: case CODE_LABEL:
5723: case PC:
5724: case CC0:
5725: return 0;
5726:
5727: case SET:
5728: if (SET_DEST (x) == find)
5729: return count_occurrences (SET_SRC (x), find);
5730: break;
5731: }
5732:
5733: format_ptr = GET_RTX_FORMAT (code);
5734: count = 0;
5735:
5736: for (i = 0; i < GET_RTX_LENGTH (code); i++)
5737: {
5738: switch (*format_ptr++)
5739: {
5740: case 'e':
5741: count += count_occurrences (XEXP (x, i), find);
5742: break;
5743:
5744: case 'E':
5745: if (XVEC (x, i) != NULL)
5746: {
5747: for (j = 0; j < XVECLEN (x, i); j++)
5748: count += count_occurrences (XVECEXP (x, i, j), find);
5749: }
5750: break;
5751: }
5752: }
5753: return count;
5754: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.