Annotation of gcc/reload1.c, revision 1.1.1.8

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

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.