OSDN Git Service

2004-09-09 Vincent Celier <celier@gnat.com>
[pf3gnuchains/gcc-fork.git] / gcc / reload.c
1 /* Search an insn for pseudo regs that must be in hard regs and are not.
2    Copyright (C) 1987, 1988, 1989, 1992, 1993, 1994, 1995, 1996, 1997, 1998,
3    1999, 2000, 2001, 2002, 2003, 2004 Free Software Foundation, Inc.
4
5 This file is part of GCC.
6
7 GCC is free software; you can redistribute it and/or modify it under
8 the terms of the GNU General Public License as published by the Free
9 Software Foundation; either version 2, or (at your option) any later
10 version.
11
12 GCC is distributed in the hope that it will be useful, but WITHOUT ANY
13 WARRANTY; without even the implied warranty of MERCHANTABILITY or
14 FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
15 for more details.
16
17 You should have received a copy of the GNU General Public License
18 along with GCC; see the file COPYING.  If not, write to the Free
19 Software Foundation, 59 Temple Place - Suite 330, Boston, MA
20 02111-1307, USA.  */
21
22 /* This file contains subroutines used only from the file reload1.c.
23    It knows how to scan one insn for operands and values
24    that need to be copied into registers to make valid code.
25    It also finds other operands and values which are valid
26    but for which equivalent values in registers exist and
27    ought to be used instead.
28
29    Before processing the first insn of the function, call `init_reload'.
30    init_reload actually has to be called earlier anyway.
31
32    To scan an insn, call `find_reloads'.  This does two things:
33    1. sets up tables describing which values must be reloaded
34    for this insn, and what kind of hard regs they must be reloaded into;
35    2. optionally record the locations where those values appear in
36    the data, so they can be replaced properly later.
37    This is done only if the second arg to `find_reloads' is nonzero.
38
39    The third arg to `find_reloads' specifies the number of levels
40    of indirect addressing supported by the machine.  If it is zero,
41    indirect addressing is not valid.  If it is one, (MEM (REG n))
42    is valid even if (REG n) did not get a hard register; if it is two,
43    (MEM (MEM (REG n))) is also valid even if (REG n) did not get a
44    hard register, and similarly for higher values.
45
46    Then you must choose the hard regs to reload those pseudo regs into,
47    and generate appropriate load insns before this insn and perhaps
48    also store insns after this insn.  Set up the array `reload_reg_rtx'
49    to contain the REG rtx's for the registers you used.  In some
50    cases `find_reloads' will return a nonzero value in `reload_reg_rtx'
51    for certain reloads.  Then that tells you which register to use,
52    so you do not need to allocate one.  But you still do need to add extra
53    instructions to copy the value into and out of that register.
54
55    Finally you must call `subst_reloads' to substitute the reload reg rtx's
56    into the locations already recorded.
57
58 NOTE SIDE EFFECTS:
59
60    find_reloads can alter the operands of the instruction it is called on.
61
62    1. Two operands of any sort may be interchanged, if they are in a
63    commutative instruction.
64    This happens only if find_reloads thinks the instruction will compile
65    better that way.
66
67    2. Pseudo-registers that are equivalent to constants are replaced
68    with those constants if they are not in hard registers.
69
70 1 happens every time find_reloads is called.
71 2 happens only when REPLACE is 1, which is only when
72 actually doing the reloads, not when just counting them.
73
74 Using a reload register for several reloads in one insn:
75
76 When an insn has reloads, it is considered as having three parts:
77 the input reloads, the insn itself after reloading, and the output reloads.
78 Reloads of values used in memory addresses are often needed for only one part.
79
80 When this is so, reload_when_needed records which part needs the reload.
81 Two reloads for different parts of the insn can share the same reload
82 register.
83
84 When a reload is used for addresses in multiple parts, or when it is
85 an ordinary operand, it is classified as RELOAD_OTHER, and cannot share
86 a register with any other reload.  */
87
88 #define REG_OK_STRICT
89
90 #include "config.h"
91 #include "system.h"
92 #include "coretypes.h"
93 #include "tm.h"
94 #include "rtl.h"
95 #include "tm_p.h"
96 #include "insn-config.h"
97 #include "expr.h"
98 #include "optabs.h"
99 #include "recog.h"
100 #include "reload.h"
101 #include "regs.h"
102 #include "hard-reg-set.h"
103 #include "flags.h"
104 #include "real.h"
105 #include "output.h"
106 #include "function.h"
107 #include "toplev.h"
108 #include "params.h"
109 #include "target.h"
110
111 #ifndef REGNO_MODE_OK_FOR_BASE_P
112 #define REGNO_MODE_OK_FOR_BASE_P(REGNO, MODE) REGNO_OK_FOR_BASE_P (REGNO)
113 #endif
114
115 #ifndef REG_MODE_OK_FOR_BASE_P
116 #define REG_MODE_OK_FOR_BASE_P(REGNO, MODE) REG_OK_FOR_BASE_P (REGNO)
117 #endif
118
119 /* True if X is a constant that can be forced into the constant pool.  */
120 #define CONST_POOL_OK_P(X)                      \
121   (CONSTANT_P (X)                               \
122    && GET_CODE (X) != HIGH                      \
123    && !targetm.cannot_force_const_mem (X))
124 \f
125 /* All reloads of the current insn are recorded here.  See reload.h for
126    comments.  */
127 int n_reloads;
128 struct reload rld[MAX_RELOADS];
129
130 /* All the "earlyclobber" operands of the current insn
131    are recorded here.  */
132 int n_earlyclobbers;
133 rtx reload_earlyclobbers[MAX_RECOG_OPERANDS];
134
135 int reload_n_operands;
136
137 /* Replacing reloads.
138
139    If `replace_reloads' is nonzero, then as each reload is recorded
140    an entry is made for it in the table `replacements'.
141    Then later `subst_reloads' can look through that table and
142    perform all the replacements needed.  */
143
144 /* Nonzero means record the places to replace.  */
145 static int replace_reloads;
146
147 /* Each replacement is recorded with a structure like this.  */
148 struct replacement
149 {
150   rtx *where;                   /* Location to store in */
151   rtx *subreg_loc;              /* Location of SUBREG if WHERE is inside
152                                    a SUBREG; 0 otherwise.  */
153   int what;                     /* which reload this is for */
154   enum machine_mode mode;       /* mode it must have */
155 };
156
157 static struct replacement replacements[MAX_RECOG_OPERANDS * ((MAX_REGS_PER_ADDRESS * 2) + 1)];
158
159 /* Number of replacements currently recorded.  */
160 static int n_replacements;
161
162 /* Used to track what is modified by an operand.  */
163 struct decomposition
164 {
165   int reg_flag;         /* Nonzero if referencing a register.  */
166   int safe;             /* Nonzero if this can't conflict with anything.  */
167   rtx base;             /* Base address for MEM.  */
168   HOST_WIDE_INT start;  /* Starting offset or register number.  */
169   HOST_WIDE_INT end;    /* Ending offset or register number.  */
170 };
171
172 #ifdef SECONDARY_MEMORY_NEEDED
173
174 /* Save MEMs needed to copy from one class of registers to another.  One MEM
175    is used per mode, but normally only one or two modes are ever used.
176
177    We keep two versions, before and after register elimination.  The one
178    after register elimination is record separately for each operand.  This
179    is done in case the address is not valid to be sure that we separately
180    reload each.  */
181
182 static rtx secondary_memlocs[NUM_MACHINE_MODES];
183 static rtx secondary_memlocs_elim[NUM_MACHINE_MODES][MAX_RECOG_OPERANDS];
184 static int secondary_memlocs_elim_used = 0;
185 #endif
186
187 /* The instruction we are doing reloads for;
188    so we can test whether a register dies in it.  */
189 static rtx this_insn;
190
191 /* Nonzero if this instruction is a user-specified asm with operands.  */
192 static int this_insn_is_asm;
193
194 /* If hard_regs_live_known is nonzero,
195    we can tell which hard regs are currently live,
196    at least enough to succeed in choosing dummy reloads.  */
197 static int hard_regs_live_known;
198
199 /* Indexed by hard reg number,
200    element is nonnegative if hard reg has been spilled.
201    This vector is passed to `find_reloads' as an argument
202    and is not changed here.  */
203 static short *static_reload_reg_p;
204
205 /* Set to 1 in subst_reg_equivs if it changes anything.  */
206 static int subst_reg_equivs_changed;
207
208 /* On return from push_reload, holds the reload-number for the OUT
209    operand, which can be different for that from the input operand.  */
210 static int output_reloadnum;
211
212   /* Compare two RTX's.  */
213 #define MATCHES(x, y) \
214  (x == y || (x != 0 && (REG_P (x)                               \
215                         ? REG_P (y) && REGNO (x) == REGNO (y)   \
216                         : rtx_equal_p (x, y) && ! side_effects_p (x))))
217
218   /* Indicates if two reloads purposes are for similar enough things that we
219      can merge their reloads.  */
220 #define MERGABLE_RELOADS(when1, when2, op1, op2) \
221   ((when1) == RELOAD_OTHER || (when2) == RELOAD_OTHER   \
222    || ((when1) == (when2) && (op1) == (op2))            \
223    || ((when1) == RELOAD_FOR_INPUT && (when2) == RELOAD_FOR_INPUT) \
224    || ((when1) == RELOAD_FOR_OPERAND_ADDRESS            \
225        && (when2) == RELOAD_FOR_OPERAND_ADDRESS)        \
226    || ((when1) == RELOAD_FOR_OTHER_ADDRESS              \
227        && (when2) == RELOAD_FOR_OTHER_ADDRESS))
228
229   /* Nonzero if these two reload purposes produce RELOAD_OTHER when merged.  */
230 #define MERGE_TO_OTHER(when1, when2, op1, op2) \
231   ((when1) != (when2)                                   \
232    || ! ((op1) == (op2)                                 \
233          || (when1) == RELOAD_FOR_INPUT                 \
234          || (when1) == RELOAD_FOR_OPERAND_ADDRESS       \
235          || (when1) == RELOAD_FOR_OTHER_ADDRESS))
236
237   /* If we are going to reload an address, compute the reload type to
238      use.  */
239 #define ADDR_TYPE(type)                                 \
240   ((type) == RELOAD_FOR_INPUT_ADDRESS                   \
241    ? RELOAD_FOR_INPADDR_ADDRESS                         \
242    : ((type) == RELOAD_FOR_OUTPUT_ADDRESS               \
243       ? RELOAD_FOR_OUTADDR_ADDRESS                      \
244       : (type)))
245
246 #ifdef HAVE_SECONDARY_RELOADS
247 static int push_secondary_reload (int, rtx, int, int, enum reg_class,
248                                   enum machine_mode, enum reload_type,
249                                   enum insn_code *);
250 #endif
251 static enum reg_class find_valid_class (enum machine_mode, int, unsigned int);
252 static int reload_inner_reg_of_subreg (rtx, enum machine_mode, int);
253 static void push_replacement (rtx *, int, enum machine_mode);
254 static void dup_replacements (rtx *, rtx *);
255 static void combine_reloads (void);
256 static int find_reusable_reload (rtx *, rtx, enum reg_class,
257                                  enum reload_type, int, int);
258 static rtx find_dummy_reload (rtx, rtx, rtx *, rtx *, enum machine_mode,
259                               enum machine_mode, enum reg_class, int, int);
260 static int hard_reg_set_here_p (unsigned int, unsigned int, rtx);
261 static struct decomposition decompose (rtx);
262 static int immune_p (rtx, rtx, struct decomposition);
263 static int alternative_allows_memconst (const char *, int);
264 static rtx find_reloads_toplev (rtx, int, enum reload_type, int, int, rtx,
265                                 int *);
266 static rtx make_memloc (rtx, int);
267 static int maybe_memory_address_p (enum machine_mode, rtx, rtx *);
268 static int find_reloads_address (enum machine_mode, rtx *, rtx, rtx *,
269                                  int, enum reload_type, int, rtx);
270 static rtx subst_reg_equivs (rtx, rtx);
271 static rtx subst_indexed_address (rtx);
272 static void update_auto_inc_notes (rtx, int, int);
273 static int find_reloads_address_1 (enum machine_mode, rtx, int, rtx *,
274                                    int, enum reload_type,int, rtx);
275 static void find_reloads_address_part (rtx, rtx *, enum reg_class,
276                                        enum machine_mode, int,
277                                        enum reload_type, int);
278 static rtx find_reloads_subreg_address (rtx, int, int, enum reload_type,
279                                         int, rtx);
280 static void copy_replacements_1 (rtx *, rtx *, int);
281 static int find_inc_amount (rtx, rtx);
282 \f
283 #ifdef HAVE_SECONDARY_RELOADS
284
285 /* Determine if any secondary reloads are needed for loading (if IN_P is
286    nonzero) or storing (if IN_P is zero) X to or from a reload register of
287    register class RELOAD_CLASS in mode RELOAD_MODE.  If secondary reloads
288    are needed, push them.
289
290    Return the reload number of the secondary reload we made, or -1 if
291    we didn't need one.  *PICODE is set to the insn_code to use if we do
292    need a secondary reload.  */
293
294 static int
295 push_secondary_reload (int in_p, rtx x, int opnum, int optional,
296                        enum reg_class reload_class,
297                        enum machine_mode reload_mode, enum reload_type type,
298                        enum insn_code *picode)
299 {
300   enum reg_class class = NO_REGS;
301   enum machine_mode mode = reload_mode;
302   enum insn_code icode = CODE_FOR_nothing;
303   enum reg_class t_class = NO_REGS;
304   enum machine_mode t_mode = VOIDmode;
305   enum insn_code t_icode = CODE_FOR_nothing;
306   enum reload_type secondary_type;
307   int s_reload, t_reload = -1;
308
309   if (type == RELOAD_FOR_INPUT_ADDRESS
310       || type == RELOAD_FOR_OUTPUT_ADDRESS
311       || type == RELOAD_FOR_INPADDR_ADDRESS
312       || type == RELOAD_FOR_OUTADDR_ADDRESS)
313     secondary_type = type;
314   else
315     secondary_type = in_p ? RELOAD_FOR_INPUT_ADDRESS : RELOAD_FOR_OUTPUT_ADDRESS;
316
317   *picode = CODE_FOR_nothing;
318
319   /* If X is a paradoxical SUBREG, use the inner value to determine both the
320      mode and object being reloaded.  */
321   if (GET_CODE (x) == SUBREG
322       && (GET_MODE_SIZE (GET_MODE (x))
323           > GET_MODE_SIZE (GET_MODE (SUBREG_REG (x)))))
324     {
325       x = SUBREG_REG (x);
326       reload_mode = GET_MODE (x);
327     }
328
329   /* If X is a pseudo-register that has an equivalent MEM (actually, if it
330      is still a pseudo-register by now, it *must* have an equivalent MEM
331      but we don't want to assume that), use that equivalent when seeing if
332      a secondary reload is needed since whether or not a reload is needed
333      might be sensitive to the form of the MEM.  */
334
335   if (REG_P (x) && REGNO (x) >= FIRST_PSEUDO_REGISTER
336       && reg_equiv_mem[REGNO (x)] != 0)
337     x = reg_equiv_mem[REGNO (x)];
338
339 #ifdef SECONDARY_INPUT_RELOAD_CLASS
340   if (in_p)
341     class = SECONDARY_INPUT_RELOAD_CLASS (reload_class, reload_mode, x);
342 #endif
343
344 #ifdef SECONDARY_OUTPUT_RELOAD_CLASS
345   if (! in_p)
346     class = SECONDARY_OUTPUT_RELOAD_CLASS (reload_class, reload_mode, x);
347 #endif
348
349   /* If we don't need any secondary registers, done.  */
350   if (class == NO_REGS)
351     return -1;
352
353   /* Get a possible insn to use.  If the predicate doesn't accept X, don't
354      use the insn.  */
355
356   icode = (in_p ? reload_in_optab[(int) reload_mode]
357            : reload_out_optab[(int) reload_mode]);
358
359   if (icode != CODE_FOR_nothing
360       && insn_data[(int) icode].operand[in_p].predicate
361       && (! (insn_data[(int) icode].operand[in_p].predicate) (x, reload_mode)))
362     icode = CODE_FOR_nothing;
363
364   /* If we will be using an insn, see if it can directly handle the reload
365      register we will be using.  If it can, the secondary reload is for a
366      scratch register.  If it can't, we will use the secondary reload for
367      an intermediate register and require a tertiary reload for the scratch
368      register.  */
369
370   if (icode != CODE_FOR_nothing)
371     {
372       /* If IN_P is nonzero, the reload register will be the output in
373          operand 0.  If IN_P is zero, the reload register will be the input
374          in operand 1.  Outputs should have an initial "=", which we must
375          skip.  */
376
377       enum reg_class insn_class;
378
379       if (insn_data[(int) icode].operand[!in_p].constraint[0] == 0)
380         insn_class = ALL_REGS;
381       else
382         {
383           const char *insn_constraint
384             = &insn_data[(int) icode].operand[!in_p].constraint[in_p];
385           char insn_letter = *insn_constraint;
386           insn_class
387             = (insn_letter == 'r' ? GENERAL_REGS
388                : REG_CLASS_FROM_CONSTRAINT ((unsigned char) insn_letter,
389                                             insn_constraint));
390
391           gcc_assert (insn_class != NO_REGS);
392           gcc_assert (!in_p
393                       || insn_data[(int) icode].operand[!in_p].constraint[0]
394                          == '=');
395         }
396
397       /* The scratch register's constraint must start with "=&".  */
398       gcc_assert (insn_data[(int) icode].operand[2].constraint[0] == '='
399                   && insn_data[(int) icode].operand[2].constraint[1] == '&');
400
401       if (reg_class_subset_p (reload_class, insn_class))
402         mode = insn_data[(int) icode].operand[2].mode;
403       else
404         {
405           const char *t_constraint
406             = &insn_data[(int) icode].operand[2].constraint[2];
407           char t_letter = *t_constraint;
408           class = insn_class;
409           t_mode = insn_data[(int) icode].operand[2].mode;
410           t_class = (t_letter == 'r' ? GENERAL_REGS
411                      : REG_CLASS_FROM_CONSTRAINT ((unsigned char) t_letter,
412                                                   t_constraint));
413           t_icode = icode;
414           icode = CODE_FOR_nothing;
415         }
416     }
417
418   /* This case isn't valid, so fail.  Reload is allowed to use the same
419      register for RELOAD_FOR_INPUT_ADDRESS and RELOAD_FOR_INPUT reloads, but
420      in the case of a secondary register, we actually need two different
421      registers for correct code.  We fail here to prevent the possibility of
422      silently generating incorrect code later.
423
424      The convention is that secondary input reloads are valid only if the
425      secondary_class is different from class.  If you have such a case, you
426      can not use secondary reloads, you must work around the problem some
427      other way.
428
429      Allow this when a reload_in/out pattern is being used.  I.e. assume
430      that the generated code handles this case.  */
431
432   gcc_assert (!in_p || class != reload_class || icode != CODE_FOR_nothing
433               || t_icode != CODE_FOR_nothing);
434
435   /* If we need a tertiary reload, see if we have one we can reuse or else
436      make a new one.  */
437
438   if (t_class != NO_REGS)
439     {
440       for (t_reload = 0; t_reload < n_reloads; t_reload++)
441         if (rld[t_reload].secondary_p
442             && (reg_class_subset_p (t_class, rld[t_reload].class)
443                 || reg_class_subset_p (rld[t_reload].class, t_class))
444             && ((in_p && rld[t_reload].inmode == t_mode)
445                 || (! in_p && rld[t_reload].outmode == t_mode))
446             && ((in_p && (rld[t_reload].secondary_in_icode
447                           == CODE_FOR_nothing))
448                 || (! in_p &&(rld[t_reload].secondary_out_icode
449                               == CODE_FOR_nothing)))
450             && (reg_class_size[(int) t_class] == 1 || SMALL_REGISTER_CLASSES)
451             && MERGABLE_RELOADS (secondary_type,
452                                  rld[t_reload].when_needed,
453                                  opnum, rld[t_reload].opnum))
454           {
455             if (in_p)
456               rld[t_reload].inmode = t_mode;
457             if (! in_p)
458               rld[t_reload].outmode = t_mode;
459
460             if (reg_class_subset_p (t_class, rld[t_reload].class))
461               rld[t_reload].class = t_class;
462
463             rld[t_reload].opnum = MIN (rld[t_reload].opnum, opnum);
464             rld[t_reload].optional &= optional;
465             rld[t_reload].secondary_p = 1;
466             if (MERGE_TO_OTHER (secondary_type, rld[t_reload].when_needed,
467                                 opnum, rld[t_reload].opnum))
468               rld[t_reload].when_needed = RELOAD_OTHER;
469           }
470
471       if (t_reload == n_reloads)
472         {
473           /* We need to make a new tertiary reload for this register class.  */
474           rld[t_reload].in = rld[t_reload].out = 0;
475           rld[t_reload].class = t_class;
476           rld[t_reload].inmode = in_p ? t_mode : VOIDmode;
477           rld[t_reload].outmode = ! in_p ? t_mode : VOIDmode;
478           rld[t_reload].reg_rtx = 0;
479           rld[t_reload].optional = optional;
480           rld[t_reload].inc = 0;
481           /* Maybe we could combine these, but it seems too tricky.  */
482           rld[t_reload].nocombine = 1;
483           rld[t_reload].in_reg = 0;
484           rld[t_reload].out_reg = 0;
485           rld[t_reload].opnum = opnum;
486           rld[t_reload].when_needed = secondary_type;
487           rld[t_reload].secondary_in_reload = -1;
488           rld[t_reload].secondary_out_reload = -1;
489           rld[t_reload].secondary_in_icode = CODE_FOR_nothing;
490           rld[t_reload].secondary_out_icode = CODE_FOR_nothing;
491           rld[t_reload].secondary_p = 1;
492
493           n_reloads++;
494         }
495     }
496
497   /* See if we can reuse an existing secondary reload.  */
498   for (s_reload = 0; s_reload < n_reloads; s_reload++)
499     if (rld[s_reload].secondary_p
500         && (reg_class_subset_p (class, rld[s_reload].class)
501             || reg_class_subset_p (rld[s_reload].class, class))
502         && ((in_p && rld[s_reload].inmode == mode)
503             || (! in_p && rld[s_reload].outmode == mode))
504         && ((in_p && rld[s_reload].secondary_in_reload == t_reload)
505             || (! in_p && rld[s_reload].secondary_out_reload == t_reload))
506         && ((in_p && rld[s_reload].secondary_in_icode == t_icode)
507             || (! in_p && rld[s_reload].secondary_out_icode == t_icode))
508         && (reg_class_size[(int) class] == 1 || SMALL_REGISTER_CLASSES)
509         && MERGABLE_RELOADS (secondary_type, rld[s_reload].when_needed,
510                              opnum, rld[s_reload].opnum))
511       {
512         if (in_p)
513           rld[s_reload].inmode = mode;
514         if (! in_p)
515           rld[s_reload].outmode = mode;
516
517         if (reg_class_subset_p (class, rld[s_reload].class))
518           rld[s_reload].class = class;
519
520         rld[s_reload].opnum = MIN (rld[s_reload].opnum, opnum);
521         rld[s_reload].optional &= optional;
522         rld[s_reload].secondary_p = 1;
523         if (MERGE_TO_OTHER (secondary_type, rld[s_reload].when_needed,
524                             opnum, rld[s_reload].opnum))
525           rld[s_reload].when_needed = RELOAD_OTHER;
526       }
527
528   if (s_reload == n_reloads)
529     {
530 #ifdef SECONDARY_MEMORY_NEEDED
531       /* If we need a memory location to copy between the two reload regs,
532          set it up now.  Note that we do the input case before making
533          the reload and the output case after.  This is due to the
534          way reloads are output.  */
535
536       if (in_p && icode == CODE_FOR_nothing
537           && SECONDARY_MEMORY_NEEDED (class, reload_class, mode))
538         {
539           get_secondary_mem (x, reload_mode, opnum, type);
540
541           /* We may have just added new reloads.  Make sure we add
542              the new reload at the end.  */
543           s_reload = n_reloads;
544         }
545 #endif
546
547       /* We need to make a new secondary reload for this register class.  */
548       rld[s_reload].in = rld[s_reload].out = 0;
549       rld[s_reload].class = class;
550
551       rld[s_reload].inmode = in_p ? mode : VOIDmode;
552       rld[s_reload].outmode = ! in_p ? mode : VOIDmode;
553       rld[s_reload].reg_rtx = 0;
554       rld[s_reload].optional = optional;
555       rld[s_reload].inc = 0;
556       /* Maybe we could combine these, but it seems too tricky.  */
557       rld[s_reload].nocombine = 1;
558       rld[s_reload].in_reg = 0;
559       rld[s_reload].out_reg = 0;
560       rld[s_reload].opnum = opnum;
561       rld[s_reload].when_needed = secondary_type;
562       rld[s_reload].secondary_in_reload = in_p ? t_reload : -1;
563       rld[s_reload].secondary_out_reload = ! in_p ? t_reload : -1;
564       rld[s_reload].secondary_in_icode = in_p ? t_icode : CODE_FOR_nothing;
565       rld[s_reload].secondary_out_icode
566         = ! in_p ? t_icode : CODE_FOR_nothing;
567       rld[s_reload].secondary_p = 1;
568
569       n_reloads++;
570
571 #ifdef SECONDARY_MEMORY_NEEDED
572       if (! in_p && icode == CODE_FOR_nothing
573           && SECONDARY_MEMORY_NEEDED (reload_class, class, mode))
574         get_secondary_mem (x, mode, opnum, type);
575 #endif
576     }
577
578   *picode = icode;
579   return s_reload;
580 }
581 #endif /* HAVE_SECONDARY_RELOADS */
582 \f
583 #ifdef SECONDARY_MEMORY_NEEDED
584
585 /* Return a memory location that will be used to copy X in mode MODE.
586    If we haven't already made a location for this mode in this insn,
587    call find_reloads_address on the location being returned.  */
588
589 rtx
590 get_secondary_mem (rtx x ATTRIBUTE_UNUSED, enum machine_mode mode,
591                    int opnum, enum reload_type type)
592 {
593   rtx loc;
594   int mem_valid;
595
596   /* By default, if MODE is narrower than a word, widen it to a word.
597      This is required because most machines that require these memory
598      locations do not support short load and stores from all registers
599      (e.g., FP registers).  */
600
601 #ifdef SECONDARY_MEMORY_NEEDED_MODE
602   mode = SECONDARY_MEMORY_NEEDED_MODE (mode);
603 #else
604   if (GET_MODE_BITSIZE (mode) < BITS_PER_WORD && INTEGRAL_MODE_P (mode))
605     mode = mode_for_size (BITS_PER_WORD, GET_MODE_CLASS (mode), 0);
606 #endif
607
608   /* If we already have made a MEM for this operand in MODE, return it.  */
609   if (secondary_memlocs_elim[(int) mode][opnum] != 0)
610     return secondary_memlocs_elim[(int) mode][opnum];
611
612   /* If this is the first time we've tried to get a MEM for this mode,
613      allocate a new one.  `something_changed' in reload will get set
614      by noticing that the frame size has changed.  */
615
616   if (secondary_memlocs[(int) mode] == 0)
617     {
618 #ifdef SECONDARY_MEMORY_NEEDED_RTX
619       secondary_memlocs[(int) mode] = SECONDARY_MEMORY_NEEDED_RTX (mode);
620 #else
621       secondary_memlocs[(int) mode]
622         = assign_stack_local (mode, GET_MODE_SIZE (mode), 0);
623 #endif
624     }
625
626   /* Get a version of the address doing any eliminations needed.  If that
627      didn't give us a new MEM, make a new one if it isn't valid.  */
628
629   loc = eliminate_regs (secondary_memlocs[(int) mode], VOIDmode, NULL_RTX);
630   mem_valid = strict_memory_address_p (mode, XEXP (loc, 0));
631
632   if (! mem_valid && loc == secondary_memlocs[(int) mode])
633     loc = copy_rtx (loc);
634
635   /* The only time the call below will do anything is if the stack
636      offset is too large.  In that case IND_LEVELS doesn't matter, so we
637      can just pass a zero.  Adjust the type to be the address of the
638      corresponding object.  If the address was valid, save the eliminated
639      address.  If it wasn't valid, we need to make a reload each time, so
640      don't save it.  */
641
642   if (! mem_valid)
643     {
644       type =  (type == RELOAD_FOR_INPUT ? RELOAD_FOR_INPUT_ADDRESS
645                : type == RELOAD_FOR_OUTPUT ? RELOAD_FOR_OUTPUT_ADDRESS
646                : RELOAD_OTHER);
647
648       find_reloads_address (mode, &loc, XEXP (loc, 0), &XEXP (loc, 0),
649                             opnum, type, 0, 0);
650     }
651
652   secondary_memlocs_elim[(int) mode][opnum] = loc;
653   if (secondary_memlocs_elim_used <= (int)mode)
654     secondary_memlocs_elim_used = (int)mode + 1;
655   return loc;
656 }
657
658 /* Clear any secondary memory locations we've made.  */
659
660 void
661 clear_secondary_mem (void)
662 {
663   memset (secondary_memlocs, 0, sizeof secondary_memlocs);
664 }
665 #endif /* SECONDARY_MEMORY_NEEDED */
666 \f
667 /* Find the largest class for which every register number plus N is valid in
668    M1 (if in range) and is cheap to move into REGNO.
669    Abort if no such class exists.  */
670
671 static enum reg_class
672 find_valid_class (enum machine_mode m1 ATTRIBUTE_UNUSED, int n,
673                   unsigned int dest_regno ATTRIBUTE_UNUSED)
674 {
675   int best_cost = -1;
676   int class;
677   int regno;
678   enum reg_class best_class = NO_REGS;
679   enum reg_class dest_class ATTRIBUTE_UNUSED = REGNO_REG_CLASS (dest_regno);
680   unsigned int best_size = 0;
681   int cost;
682
683   for (class = 1; class < N_REG_CLASSES; class++)
684     {
685       int bad = 0;
686       for (regno = 0; regno < FIRST_PSEUDO_REGISTER && ! bad; regno++)
687         if (TEST_HARD_REG_BIT (reg_class_contents[class], regno)
688             && TEST_HARD_REG_BIT (reg_class_contents[class], regno + n)
689             && ! HARD_REGNO_MODE_OK (regno + n, m1))
690           bad = 1;
691
692       if (bad)
693         continue;
694       cost = REGISTER_MOVE_COST (m1, class, dest_class);
695
696       if ((reg_class_size[class] > best_size
697            && (best_cost < 0 || best_cost >= cost))
698           || best_cost > cost)
699         {
700           best_class = class;
701           best_size = reg_class_size[class];
702           best_cost = REGISTER_MOVE_COST (m1, class, dest_class);
703         }
704     }
705
706   gcc_assert (best_size != 0);
707
708   return best_class;
709 }
710 \f
711 /* Return the number of a previously made reload that can be combined with
712    a new one, or n_reloads if none of the existing reloads can be used.
713    OUT, CLASS, TYPE and OPNUM are the same arguments as passed to
714    push_reload, they determine the kind of the new reload that we try to
715    combine.  P_IN points to the corresponding value of IN, which can be
716    modified by this function.
717    DONT_SHARE is nonzero if we can't share any input-only reload for IN.  */
718
719 static int
720 find_reusable_reload (rtx *p_in, rtx out, enum reg_class class,
721                       enum reload_type type, int opnum, int dont_share)
722 {
723   rtx in = *p_in;
724   int i;
725   /* We can't merge two reloads if the output of either one is
726      earlyclobbered.  */
727
728   if (earlyclobber_operand_p (out))
729     return n_reloads;
730
731   /* We can use an existing reload if the class is right
732      and at least one of IN and OUT is a match
733      and the other is at worst neutral.
734      (A zero compared against anything is neutral.)
735
736      If SMALL_REGISTER_CLASSES, don't use existing reloads unless they are
737      for the same thing since that can cause us to need more reload registers
738      than we otherwise would.  */
739
740   for (i = 0; i < n_reloads; i++)
741     if ((reg_class_subset_p (class, rld[i].class)
742          || reg_class_subset_p (rld[i].class, class))
743         /* If the existing reload has a register, it must fit our class.  */
744         && (rld[i].reg_rtx == 0
745             || TEST_HARD_REG_BIT (reg_class_contents[(int) class],
746                                   true_regnum (rld[i].reg_rtx)))
747         && ((in != 0 && MATCHES (rld[i].in, in) && ! dont_share
748              && (out == 0 || rld[i].out == 0 || MATCHES (rld[i].out, out)))
749             || (out != 0 && MATCHES (rld[i].out, out)
750                 && (in == 0 || rld[i].in == 0 || MATCHES (rld[i].in, in))))
751         && (rld[i].out == 0 || ! earlyclobber_operand_p (rld[i].out))
752         && (reg_class_size[(int) class] == 1 || SMALL_REGISTER_CLASSES)
753         && MERGABLE_RELOADS (type, rld[i].when_needed, opnum, rld[i].opnum))
754       return i;
755
756   /* Reloading a plain reg for input can match a reload to postincrement
757      that reg, since the postincrement's value is the right value.
758      Likewise, it can match a preincrement reload, since we regard
759      the preincrementation as happening before any ref in this insn
760      to that register.  */
761   for (i = 0; i < n_reloads; i++)
762     if ((reg_class_subset_p (class, rld[i].class)
763          || reg_class_subset_p (rld[i].class, class))
764         /* If the existing reload has a register, it must fit our
765            class.  */
766         && (rld[i].reg_rtx == 0
767             || TEST_HARD_REG_BIT (reg_class_contents[(int) class],
768                                   true_regnum (rld[i].reg_rtx)))
769         && out == 0 && rld[i].out == 0 && rld[i].in != 0
770         && ((REG_P (in)
771              && GET_RTX_CLASS (GET_CODE (rld[i].in)) == RTX_AUTOINC
772              && MATCHES (XEXP (rld[i].in, 0), in))
773             || (REG_P (rld[i].in)
774                 && GET_RTX_CLASS (GET_CODE (in)) == RTX_AUTOINC
775                 && MATCHES (XEXP (in, 0), rld[i].in)))
776         && (rld[i].out == 0 || ! earlyclobber_operand_p (rld[i].out))
777         && (reg_class_size[(int) class] == 1 || SMALL_REGISTER_CLASSES)
778         && MERGABLE_RELOADS (type, rld[i].when_needed,
779                              opnum, rld[i].opnum))
780       {
781         /* Make sure reload_in ultimately has the increment,
782            not the plain register.  */
783         if (REG_P (in))
784           *p_in = rld[i].in;
785         return i;
786       }
787   return n_reloads;
788 }
789
790 /* Return nonzero if X is a SUBREG which will require reloading of its
791    SUBREG_REG expression.  */
792
793 static int
794 reload_inner_reg_of_subreg (rtx x, enum machine_mode mode, int output)
795 {
796   rtx inner;
797
798   /* Only SUBREGs are problematical.  */
799   if (GET_CODE (x) != SUBREG)
800     return 0;
801
802   inner = SUBREG_REG (x);
803
804   /* If INNER is a constant or PLUS, then INNER must be reloaded.  */
805   if (CONSTANT_P (inner) || GET_CODE (inner) == PLUS)
806     return 1;
807
808   /* If INNER is not a hard register, then INNER will not need to
809      be reloaded.  */
810   if (!REG_P (inner)
811       || REGNO (inner) >= FIRST_PSEUDO_REGISTER)
812     return 0;
813
814   /* If INNER is not ok for MODE, then INNER will need reloading.  */
815   if (! HARD_REGNO_MODE_OK (subreg_regno (x), mode))
816     return 1;
817
818   /* If the outer part is a word or smaller, INNER larger than a
819      word and the number of regs for INNER is not the same as the
820      number of words in INNER, then INNER will need reloading.  */
821   return (GET_MODE_SIZE (mode) <= UNITS_PER_WORD
822           && output
823           && GET_MODE_SIZE (GET_MODE (inner)) > UNITS_PER_WORD
824           && ((GET_MODE_SIZE (GET_MODE (inner)) / UNITS_PER_WORD)
825               != (int) hard_regno_nregs[REGNO (inner)][GET_MODE (inner)]));
826 }
827
828 /* Return nonzero if IN can be reloaded into REGNO with mode MODE without
829    requiring an extra reload register.  The caller has already found that
830    IN contains some reference to REGNO, so check that we can produce the
831    new value in a single step.  E.g. if we have
832    (set (reg r13) (plus (reg r13) (const int 1))), and there is an
833    instruction that adds one to a register, this should succeed.
834    However, if we have something like
835    (set (reg r13) (plus (reg r13) (const int 999))), and the constant 999
836    needs to be loaded into a register first, we need a separate reload
837    register.
838    Such PLUS reloads are generated by find_reload_address_part.
839    The out-of-range PLUS expressions are usually introduced in the instruction
840    patterns by register elimination and substituting pseudos without a home
841    by their function-invariant equivalences.  */
842 static int
843 can_reload_into (rtx in, int regno, enum machine_mode mode)
844 {
845   rtx dst, test_insn;
846   int r = 0;
847   struct recog_data save_recog_data;
848
849   /* For matching constraints, we often get notional input reloads where
850      we want to use the original register as the reload register.  I.e.
851      technically this is a non-optional input-output reload, but IN is
852      already a valid register, and has been chosen as the reload register.
853      Speed this up, since it trivially works.  */
854   if (REG_P (in))
855     return 1;
856
857   /* To test MEMs properly, we'd have to take into account all the reloads
858      that are already scheduled, which can become quite complicated.
859      And since we've already handled address reloads for this MEM, it
860      should always succeed anyway.  */
861   if (MEM_P (in))
862     return 1;
863
864   /* If we can make a simple SET insn that does the job, everything should
865      be fine.  */
866   dst =  gen_rtx_REG (mode, regno);
867   test_insn = make_insn_raw (gen_rtx_SET (VOIDmode, dst, in));
868   save_recog_data = recog_data;
869   if (recog_memoized (test_insn) >= 0)
870     {
871       extract_insn (test_insn);
872       r = constrain_operands (1);
873     }
874   recog_data = save_recog_data;
875   return r;
876 }
877
878 /* Record one reload that needs to be performed.
879    IN is an rtx saying where the data are to be found before this instruction.
880    OUT says where they must be stored after the instruction.
881    (IN is zero for data not read, and OUT is zero for data not written.)
882    INLOC and OUTLOC point to the places in the instructions where
883    IN and OUT were found.
884    If IN and OUT are both nonzero, it means the same register must be used
885    to reload both IN and OUT.
886
887    CLASS is a register class required for the reloaded data.
888    INMODE is the machine mode that the instruction requires
889    for the reg that replaces IN and OUTMODE is likewise for OUT.
890
891    If IN is zero, then OUT's location and mode should be passed as
892    INLOC and INMODE.
893
894    STRICT_LOW is the 1 if there is a containing STRICT_LOW_PART rtx.
895
896    OPTIONAL nonzero means this reload does not need to be performed:
897    it can be discarded if that is more convenient.
898
899    OPNUM and TYPE say what the purpose of this reload is.
900
901    The return value is the reload-number for this reload.
902
903    If both IN and OUT are nonzero, in some rare cases we might
904    want to make two separate reloads.  (Actually we never do this now.)
905    Therefore, the reload-number for OUT is stored in
906    output_reloadnum when we return; the return value applies to IN.
907    Usually (presently always), when IN and OUT are nonzero,
908    the two reload-numbers are equal, but the caller should be careful to
909    distinguish them.  */
910
911 int
912 push_reload (rtx in, rtx out, rtx *inloc, rtx *outloc,
913              enum reg_class class, enum machine_mode inmode,
914              enum machine_mode outmode, int strict_low, int optional,
915              int opnum, enum reload_type type)
916 {
917   int i;
918   int dont_share = 0;
919   int dont_remove_subreg = 0;
920   rtx *in_subreg_loc = 0, *out_subreg_loc = 0;
921   int secondary_in_reload = -1, secondary_out_reload = -1;
922   enum insn_code secondary_in_icode = CODE_FOR_nothing;
923   enum insn_code secondary_out_icode = CODE_FOR_nothing;
924
925   /* INMODE and/or OUTMODE could be VOIDmode if no mode
926      has been specified for the operand.  In that case,
927      use the operand's mode as the mode to reload.  */
928   if (inmode == VOIDmode && in != 0)
929     inmode = GET_MODE (in);
930   if (outmode == VOIDmode && out != 0)
931     outmode = GET_MODE (out);
932
933   /* If IN is a pseudo register everywhere-equivalent to a constant, and
934      it is not in a hard register, reload straight from the constant,
935      since we want to get rid of such pseudo registers.
936      Often this is done earlier, but not always in find_reloads_address.  */
937   if (in != 0 && REG_P (in))
938     {
939       int regno = REGNO (in);
940
941       if (regno >= FIRST_PSEUDO_REGISTER && reg_renumber[regno] < 0
942           && reg_equiv_constant[regno] != 0)
943         in = reg_equiv_constant[regno];
944     }
945
946   /* Likewise for OUT.  Of course, OUT will never be equivalent to
947      an actual constant, but it might be equivalent to a memory location
948      (in the case of a parameter).  */
949   if (out != 0 && REG_P (out))
950     {
951       int regno = REGNO (out);
952
953       if (regno >= FIRST_PSEUDO_REGISTER && reg_renumber[regno] < 0
954           && reg_equiv_constant[regno] != 0)
955         out = reg_equiv_constant[regno];
956     }
957
958   /* If we have a read-write operand with an address side-effect,
959      change either IN or OUT so the side-effect happens only once.  */
960   if (in != 0 && out != 0 && MEM_P (in) && rtx_equal_p (in, out))
961     switch (GET_CODE (XEXP (in, 0)))
962       {
963       case POST_INC: case POST_DEC:   case POST_MODIFY:
964         in = replace_equiv_address_nv (in, XEXP (XEXP (in, 0), 0));
965         break;
966
967       case PRE_INC: case PRE_DEC: case PRE_MODIFY:
968         out = replace_equiv_address_nv (out, XEXP (XEXP (out, 0), 0));
969         break;
970
971       default:
972         break;
973       }
974
975   /* If we are reloading a (SUBREG constant ...), really reload just the
976      inside expression in its own mode.  Similarly for (SUBREG (PLUS ...)).
977      If we have (SUBREG:M1 (MEM:M2 ...) ...) (or an inner REG that is still
978      a pseudo and hence will become a MEM) with M1 wider than M2 and the
979      register is a pseudo, also reload the inside expression.
980      For machines that extend byte loads, do this for any SUBREG of a pseudo
981      where both M1 and M2 are a word or smaller, M1 is wider than M2, and
982      M2 is an integral mode that gets extended when loaded.
983      Similar issue for (SUBREG:M1 (REG:M2 ...) ...) for a hard register R where
984      either M1 is not valid for R or M2 is wider than a word but we only
985      need one word to store an M2-sized quantity in R.
986      (However, if OUT is nonzero, we need to reload the reg *and*
987      the subreg, so do nothing here, and let following statement handle it.)
988
989      Note that the case of (SUBREG (CONST_INT...)...) is handled elsewhere;
990      we can't handle it here because CONST_INT does not indicate a mode.
991
992      Similarly, we must reload the inside expression if we have a
993      STRICT_LOW_PART (presumably, in == out in the cas).
994
995      Also reload the inner expression if it does not require a secondary
996      reload but the SUBREG does.
997
998      Finally, reload the inner expression if it is a register that is in
999      the class whose registers cannot be referenced in a different size
1000      and M1 is not the same size as M2.  If subreg_lowpart_p is false, we
1001      cannot reload just the inside since we might end up with the wrong
1002      register class.  But if it is inside a STRICT_LOW_PART, we have
1003      no choice, so we hope we do get the right register class there.  */
1004
1005   if (in != 0 && GET_CODE (in) == SUBREG
1006       && (subreg_lowpart_p (in) || strict_low)
1007 #ifdef CANNOT_CHANGE_MODE_CLASS
1008       && !CANNOT_CHANGE_MODE_CLASS (GET_MODE (SUBREG_REG (in)), inmode, class)
1009 #endif
1010       && (CONSTANT_P (SUBREG_REG (in))
1011           || GET_CODE (SUBREG_REG (in)) == PLUS
1012           || strict_low
1013           || (((REG_P (SUBREG_REG (in))
1014                 && REGNO (SUBREG_REG (in)) >= FIRST_PSEUDO_REGISTER)
1015                || MEM_P (SUBREG_REG (in)))
1016               && ((GET_MODE_SIZE (inmode)
1017                    > GET_MODE_SIZE (GET_MODE (SUBREG_REG (in))))
1018 #ifdef LOAD_EXTEND_OP
1019                   || (GET_MODE_SIZE (inmode) <= UNITS_PER_WORD
1020                       && (GET_MODE_SIZE (GET_MODE (SUBREG_REG (in)))
1021                           <= UNITS_PER_WORD)
1022                       && (GET_MODE_SIZE (inmode)
1023                           > GET_MODE_SIZE (GET_MODE (SUBREG_REG (in))))
1024                       && INTEGRAL_MODE_P (GET_MODE (SUBREG_REG (in)))
1025                       && LOAD_EXTEND_OP (GET_MODE (SUBREG_REG (in))) != UNKNOWN)
1026 #endif
1027 #ifdef WORD_REGISTER_OPERATIONS
1028                   || ((GET_MODE_SIZE (inmode)
1029                        < GET_MODE_SIZE (GET_MODE (SUBREG_REG (in))))
1030                       && ((GET_MODE_SIZE (inmode) - 1) / UNITS_PER_WORD ==
1031                           ((GET_MODE_SIZE (GET_MODE (SUBREG_REG (in))) - 1)
1032                            / UNITS_PER_WORD)))
1033 #endif
1034                   ))
1035           || (REG_P (SUBREG_REG (in))
1036               && REGNO (SUBREG_REG (in)) < FIRST_PSEUDO_REGISTER
1037               /* The case where out is nonzero
1038                  is handled differently in the following statement.  */
1039               && (out == 0 || subreg_lowpart_p (in))
1040               && ((GET_MODE_SIZE (inmode) <= UNITS_PER_WORD
1041                    && (GET_MODE_SIZE (GET_MODE (SUBREG_REG (in)))
1042                        > UNITS_PER_WORD)
1043                    && ((GET_MODE_SIZE (GET_MODE (SUBREG_REG (in)))
1044                         / UNITS_PER_WORD)
1045                        != (int) hard_regno_nregs[REGNO (SUBREG_REG (in))]
1046                                                 [GET_MODE (SUBREG_REG (in))]))
1047                   || ! HARD_REGNO_MODE_OK (subreg_regno (in), inmode)))
1048 #ifdef SECONDARY_INPUT_RELOAD_CLASS
1049           || (SECONDARY_INPUT_RELOAD_CLASS (class, inmode, in) != NO_REGS
1050               && (SECONDARY_INPUT_RELOAD_CLASS (class,
1051                                                 GET_MODE (SUBREG_REG (in)),
1052                                                 SUBREG_REG (in))
1053                   == NO_REGS))
1054 #endif
1055 #ifdef CANNOT_CHANGE_MODE_CLASS
1056           || (REG_P (SUBREG_REG (in))
1057               && REGNO (SUBREG_REG (in)) < FIRST_PSEUDO_REGISTER
1058               && REG_CANNOT_CHANGE_MODE_P
1059               (REGNO (SUBREG_REG (in)), GET_MODE (SUBREG_REG (in)), inmode))
1060 #endif
1061           ))
1062     {
1063       in_subreg_loc = inloc;
1064       inloc = &SUBREG_REG (in);
1065       in = *inloc;
1066 #if ! defined (LOAD_EXTEND_OP) && ! defined (WORD_REGISTER_OPERATIONS)
1067       if (MEM_P (in))
1068         /* This is supposed to happen only for paradoxical subregs made by
1069            combine.c.  (SUBREG (MEM)) isn't supposed to occur other ways.  */
1070         gcc_assert (GET_MODE_SIZE (GET_MODE (in)) <= GET_MODE_SIZE (inmode));
1071 #endif
1072       inmode = GET_MODE (in);
1073     }
1074
1075   /* Similar issue for (SUBREG:M1 (REG:M2 ...) ...) for a hard register R where
1076      either M1 is not valid for R or M2 is wider than a word but we only
1077      need one word to store an M2-sized quantity in R.
1078
1079      However, we must reload the inner reg *as well as* the subreg in
1080      that case.  */
1081
1082   /* Similar issue for (SUBREG constant ...) if it was not handled by the
1083      code above.  This can happen if SUBREG_BYTE != 0.  */
1084
1085   if (in != 0 && reload_inner_reg_of_subreg (in, inmode, 0))
1086     {
1087       enum reg_class in_class = class;
1088
1089       if (REG_P (SUBREG_REG (in)))
1090         in_class
1091           = find_valid_class (inmode,
1092                               subreg_regno_offset (REGNO (SUBREG_REG (in)),
1093                                                    GET_MODE (SUBREG_REG (in)),
1094                                                    SUBREG_BYTE (in),
1095                                                    GET_MODE (in)),
1096                               REGNO (SUBREG_REG (in)));
1097
1098       /* This relies on the fact that emit_reload_insns outputs the
1099          instructions for input reloads of type RELOAD_OTHER in the same
1100          order as the reloads.  Thus if the outer reload is also of type
1101          RELOAD_OTHER, we are guaranteed that this inner reload will be
1102          output before the outer reload.  */
1103       push_reload (SUBREG_REG (in), NULL_RTX, &SUBREG_REG (in), (rtx *) 0,
1104                    in_class, VOIDmode, VOIDmode, 0, 0, opnum, type);
1105       dont_remove_subreg = 1;
1106     }
1107
1108   /* Similarly for paradoxical and problematical SUBREGs on the output.
1109      Note that there is no reason we need worry about the previous value
1110      of SUBREG_REG (out); even if wider than out,
1111      storing in a subreg is entitled to clobber it all
1112      (except in the case of STRICT_LOW_PART,
1113      and in that case the constraint should label it input-output.)  */
1114   if (out != 0 && GET_CODE (out) == SUBREG
1115       && (subreg_lowpart_p (out) || strict_low)
1116 #ifdef CANNOT_CHANGE_MODE_CLASS
1117       && !CANNOT_CHANGE_MODE_CLASS (GET_MODE (SUBREG_REG (out)), outmode, class)
1118 #endif
1119       && (CONSTANT_P (SUBREG_REG (out))
1120           || strict_low
1121           || (((REG_P (SUBREG_REG (out))
1122                 && REGNO (SUBREG_REG (out)) >= FIRST_PSEUDO_REGISTER)
1123                || MEM_P (SUBREG_REG (out)))
1124               && ((GET_MODE_SIZE (outmode)
1125                    > GET_MODE_SIZE (GET_MODE (SUBREG_REG (out))))
1126 #ifdef WORD_REGISTER_OPERATIONS
1127                   || ((GET_MODE_SIZE (outmode)
1128                        < GET_MODE_SIZE (GET_MODE (SUBREG_REG (out))))
1129                       && ((GET_MODE_SIZE (outmode) - 1) / UNITS_PER_WORD ==
1130                           ((GET_MODE_SIZE (GET_MODE (SUBREG_REG (out))) - 1)
1131                            / UNITS_PER_WORD)))
1132 #endif
1133                   ))
1134           || (REG_P (SUBREG_REG (out))
1135               && REGNO (SUBREG_REG (out)) < FIRST_PSEUDO_REGISTER
1136               && ((GET_MODE_SIZE (outmode) <= UNITS_PER_WORD
1137                    && (GET_MODE_SIZE (GET_MODE (SUBREG_REG (out)))
1138                        > UNITS_PER_WORD)
1139                    && ((GET_MODE_SIZE (GET_MODE (SUBREG_REG (out)))
1140                         / UNITS_PER_WORD)
1141                        != (int) hard_regno_nregs[REGNO (SUBREG_REG (out))]
1142                                                 [GET_MODE (SUBREG_REG (out))]))
1143                   || ! HARD_REGNO_MODE_OK (subreg_regno (out), outmode)))
1144 #ifdef SECONDARY_OUTPUT_RELOAD_CLASS
1145           || (SECONDARY_OUTPUT_RELOAD_CLASS (class, outmode, out) != NO_REGS
1146               && (SECONDARY_OUTPUT_RELOAD_CLASS (class,
1147                                                  GET_MODE (SUBREG_REG (out)),
1148                                                  SUBREG_REG (out))
1149                   == NO_REGS))
1150 #endif
1151 #ifdef CANNOT_CHANGE_MODE_CLASS
1152           || (REG_P (SUBREG_REG (out))
1153               && REGNO (SUBREG_REG (out)) < FIRST_PSEUDO_REGISTER
1154               && REG_CANNOT_CHANGE_MODE_P (REGNO (SUBREG_REG (out)),
1155                                            GET_MODE (SUBREG_REG (out)),
1156                                            outmode))
1157 #endif
1158           ))
1159     {
1160       out_subreg_loc = outloc;
1161       outloc = &SUBREG_REG (out);
1162       out = *outloc;
1163 #if ! defined (LOAD_EXTEND_OP) && ! defined (WORD_REGISTER_OPERATIONS)
1164       gcc_assert (!MEM_P (out)
1165                   || GET_MODE_SIZE (GET_MODE (out))
1166                      <= GET_MODE_SIZE (outmode));
1167 #endif
1168       outmode = GET_MODE (out);
1169     }
1170
1171   /* Similar issue for (SUBREG:M1 (REG:M2 ...) ...) for a hard register R where
1172      either M1 is not valid for R or M2 is wider than a word but we only
1173      need one word to store an M2-sized quantity in R.
1174
1175      However, we must reload the inner reg *as well as* the subreg in
1176      that case.  In this case, the inner reg is an in-out reload.  */
1177
1178   if (out != 0 && reload_inner_reg_of_subreg (out, outmode, 1))
1179     {
1180       /* This relies on the fact that emit_reload_insns outputs the
1181          instructions for output reloads of type RELOAD_OTHER in reverse
1182          order of the reloads.  Thus if the outer reload is also of type
1183          RELOAD_OTHER, we are guaranteed that this inner reload will be
1184          output after the outer reload.  */
1185       dont_remove_subreg = 1;
1186       push_reload (SUBREG_REG (out), SUBREG_REG (out), &SUBREG_REG (out),
1187                    &SUBREG_REG (out),
1188                    find_valid_class (outmode,
1189                                      subreg_regno_offset (REGNO (SUBREG_REG (out)),
1190                                                           GET_MODE (SUBREG_REG (out)),
1191                                                           SUBREG_BYTE (out),
1192                                                           GET_MODE (out)),
1193                                      REGNO (SUBREG_REG (out))),
1194                    VOIDmode, VOIDmode, 0, 0,
1195                    opnum, RELOAD_OTHER);
1196     }
1197
1198   /* If IN appears in OUT, we can't share any input-only reload for IN.  */
1199   if (in != 0 && out != 0 && MEM_P (out)
1200       && (REG_P (in) || MEM_P (in))
1201       && reg_overlap_mentioned_for_reload_p (in, XEXP (out, 0)))
1202     dont_share = 1;
1203
1204   /* If IN is a SUBREG of a hard register, make a new REG.  This
1205      simplifies some of the cases below.  */
1206
1207   if (in != 0 && GET_CODE (in) == SUBREG && REG_P (SUBREG_REG (in))
1208       && REGNO (SUBREG_REG (in)) < FIRST_PSEUDO_REGISTER
1209       && ! dont_remove_subreg)
1210     in = gen_rtx_REG (GET_MODE (in), subreg_regno (in));
1211
1212   /* Similarly for OUT.  */
1213   if (out != 0 && GET_CODE (out) == SUBREG
1214       && REG_P (SUBREG_REG (out))
1215       && REGNO (SUBREG_REG (out)) < FIRST_PSEUDO_REGISTER
1216       && ! dont_remove_subreg)
1217     out = gen_rtx_REG (GET_MODE (out), subreg_regno (out));
1218
1219   /* Narrow down the class of register wanted if that is
1220      desirable on this machine for efficiency.  */
1221   if (in != 0)
1222     class = PREFERRED_RELOAD_CLASS (in, class);
1223
1224   /* Output reloads may need analogous treatment, different in detail.  */
1225 #ifdef PREFERRED_OUTPUT_RELOAD_CLASS
1226   if (out != 0)
1227     class = PREFERRED_OUTPUT_RELOAD_CLASS (out, class);
1228 #endif
1229
1230   /* Make sure we use a class that can handle the actual pseudo
1231      inside any subreg.  For example, on the 386, QImode regs
1232      can appear within SImode subregs.  Although GENERAL_REGS
1233      can handle SImode, QImode needs a smaller class.  */
1234 #ifdef LIMIT_RELOAD_CLASS
1235   if (in_subreg_loc)
1236     class = LIMIT_RELOAD_CLASS (inmode, class);
1237   else if (in != 0 && GET_CODE (in) == SUBREG)
1238     class = LIMIT_RELOAD_CLASS (GET_MODE (SUBREG_REG (in)), class);
1239
1240   if (out_subreg_loc)
1241     class = LIMIT_RELOAD_CLASS (outmode, class);
1242   if (out != 0 && GET_CODE (out) == SUBREG)
1243     class = LIMIT_RELOAD_CLASS (GET_MODE (SUBREG_REG (out)), class);
1244 #endif
1245
1246   /* Verify that this class is at least possible for the mode that
1247      is specified.  */
1248   if (this_insn_is_asm)
1249     {
1250       enum machine_mode mode;
1251       if (GET_MODE_SIZE (inmode) > GET_MODE_SIZE (outmode))
1252         mode = inmode;
1253       else
1254         mode = outmode;
1255       if (mode == VOIDmode)
1256         {
1257           error_for_asm (this_insn, "cannot reload integer constant operand in `asm'");
1258           mode = word_mode;
1259           if (in != 0)
1260             inmode = word_mode;
1261           if (out != 0)
1262             outmode = word_mode;
1263         }
1264       for (i = 0; i < FIRST_PSEUDO_REGISTER; i++)
1265         if (HARD_REGNO_MODE_OK (i, mode)
1266             && TEST_HARD_REG_BIT (reg_class_contents[(int) class], i))
1267           {
1268             int nregs = hard_regno_nregs[i][mode];
1269
1270             int j;
1271             for (j = 1; j < nregs; j++)
1272               if (! TEST_HARD_REG_BIT (reg_class_contents[(int) class], i + j))
1273                 break;
1274             if (j == nregs)
1275               break;
1276           }
1277       if (i == FIRST_PSEUDO_REGISTER)
1278         {
1279           error_for_asm (this_insn, "impossible register constraint in `asm'");
1280           class = ALL_REGS;
1281         }
1282     }
1283
1284   /* Optional output reloads are always OK even if we have no register class,
1285      since the function of these reloads is only to have spill_reg_store etc.
1286      set, so that the storing insn can be deleted later.  */
1287   gcc_assert (class != NO_REGS
1288               || (optional != 0 && type == RELOAD_FOR_OUTPUT));
1289
1290   i = find_reusable_reload (&in, out, class, type, opnum, dont_share);
1291
1292   if (i == n_reloads)
1293     {
1294       /* See if we need a secondary reload register to move between CLASS
1295          and IN or CLASS and OUT.  Get the icode and push any required reloads
1296          needed for each of them if so.  */
1297
1298 #ifdef SECONDARY_INPUT_RELOAD_CLASS
1299       if (in != 0)
1300         secondary_in_reload
1301           = push_secondary_reload (1, in, opnum, optional, class, inmode, type,
1302                                    &secondary_in_icode);
1303 #endif
1304
1305 #ifdef SECONDARY_OUTPUT_RELOAD_CLASS
1306       if (out != 0 && GET_CODE (out) != SCRATCH)
1307         secondary_out_reload
1308           = push_secondary_reload (0, out, opnum, optional, class, outmode,
1309                                    type, &secondary_out_icode);
1310 #endif
1311
1312       /* We found no existing reload suitable for re-use.
1313          So add an additional reload.  */
1314
1315 #ifdef SECONDARY_MEMORY_NEEDED
1316       /* If a memory location is needed for the copy, make one.  */
1317       if (in != 0 && (REG_P (in) || GET_CODE (in) == SUBREG)
1318           && reg_or_subregno (in) < FIRST_PSEUDO_REGISTER
1319           && SECONDARY_MEMORY_NEEDED (REGNO_REG_CLASS (reg_or_subregno (in)),
1320                                       class, inmode))
1321         get_secondary_mem (in, inmode, opnum, type);
1322 #endif
1323
1324       i = n_reloads;
1325       rld[i].in = in;
1326       rld[i].out = out;
1327       rld[i].class = class;
1328       rld[i].inmode = inmode;
1329       rld[i].outmode = outmode;
1330       rld[i].reg_rtx = 0;
1331       rld[i].optional = optional;
1332       rld[i].inc = 0;
1333       rld[i].nocombine = 0;
1334       rld[i].in_reg = inloc ? *inloc : 0;
1335       rld[i].out_reg = outloc ? *outloc : 0;
1336       rld[i].opnum = opnum;
1337       rld[i].when_needed = type;
1338       rld[i].secondary_in_reload = secondary_in_reload;
1339       rld[i].secondary_out_reload = secondary_out_reload;
1340       rld[i].secondary_in_icode = secondary_in_icode;
1341       rld[i].secondary_out_icode = secondary_out_icode;
1342       rld[i].secondary_p = 0;
1343
1344       n_reloads++;
1345
1346 #ifdef SECONDARY_MEMORY_NEEDED
1347       if (out != 0 && (REG_P (out) || GET_CODE (out) == SUBREG)
1348           && reg_or_subregno (out) < FIRST_PSEUDO_REGISTER
1349           && SECONDARY_MEMORY_NEEDED (class,
1350                                       REGNO_REG_CLASS (reg_or_subregno (out)),
1351                                       outmode))
1352         get_secondary_mem (out, outmode, opnum, type);
1353 #endif
1354     }
1355   else
1356     {
1357       /* We are reusing an existing reload,
1358          but we may have additional information for it.
1359          For example, we may now have both IN and OUT
1360          while the old one may have just one of them.  */
1361
1362       /* The modes can be different.  If they are, we want to reload in
1363          the larger mode, so that the value is valid for both modes.  */
1364       if (inmode != VOIDmode
1365           && GET_MODE_SIZE (inmode) > GET_MODE_SIZE (rld[i].inmode))
1366         rld[i].inmode = inmode;
1367       if (outmode != VOIDmode
1368           && GET_MODE_SIZE (outmode) > GET_MODE_SIZE (rld[i].outmode))
1369         rld[i].outmode = outmode;
1370       if (in != 0)
1371         {
1372           rtx in_reg = inloc ? *inloc : 0;
1373           /* If we merge reloads for two distinct rtl expressions that
1374              are identical in content, there might be duplicate address
1375              reloads.  Remove the extra set now, so that if we later find
1376              that we can inherit this reload, we can get rid of the
1377              address reloads altogether.
1378
1379              Do not do this if both reloads are optional since the result
1380              would be an optional reload which could potentially leave
1381              unresolved address replacements.
1382
1383              It is not sufficient to call transfer_replacements since
1384              choose_reload_regs will remove the replacements for address
1385              reloads of inherited reloads which results in the same
1386              problem.  */
1387           if (rld[i].in != in && rtx_equal_p (in, rld[i].in)
1388               && ! (rld[i].optional && optional))
1389             {
1390               /* We must keep the address reload with the lower operand
1391                  number alive.  */
1392               if (opnum > rld[i].opnum)
1393                 {
1394                   remove_address_replacements (in);
1395                   in = rld[i].in;
1396                   in_reg = rld[i].in_reg;
1397                 }
1398               else
1399                 remove_address_replacements (rld[i].in);
1400             }
1401           rld[i].in = in;
1402           rld[i].in_reg = in_reg;
1403         }
1404       if (out != 0)
1405         {
1406           rld[i].out = out;
1407           rld[i].out_reg = outloc ? *outloc : 0;
1408         }
1409       if (reg_class_subset_p (class, rld[i].class))
1410         rld[i].class = class;
1411       rld[i].optional &= optional;
1412       if (MERGE_TO_OTHER (type, rld[i].when_needed,
1413                           opnum, rld[i].opnum))
1414         rld[i].when_needed = RELOAD_OTHER;
1415       rld[i].opnum = MIN (rld[i].opnum, opnum);
1416     }
1417
1418   /* If the ostensible rtx being reloaded differs from the rtx found
1419      in the location to substitute, this reload is not safe to combine
1420      because we cannot reliably tell whether it appears in the insn.  */
1421
1422   if (in != 0 && in != *inloc)
1423     rld[i].nocombine = 1;
1424
1425 #if 0
1426   /* This was replaced by changes in find_reloads_address_1 and the new
1427      function inc_for_reload, which go with a new meaning of reload_inc.  */
1428
1429   /* If this is an IN/OUT reload in an insn that sets the CC,
1430      it must be for an autoincrement.  It doesn't work to store
1431      the incremented value after the insn because that would clobber the CC.
1432      So we must do the increment of the value reloaded from,
1433      increment it, store it back, then decrement again.  */
1434   if (out != 0 && sets_cc0_p (PATTERN (this_insn)))
1435     {
1436       out = 0;
1437       rld[i].out = 0;
1438       rld[i].inc = find_inc_amount (PATTERN (this_insn), in);
1439       /* If we did not find a nonzero amount-to-increment-by,
1440          that contradicts the belief that IN is being incremented
1441          in an address in this insn.  */
1442       gcc_assert (rld[i].inc != 0);
1443     }
1444 #endif
1445
1446   /* If we will replace IN and OUT with the reload-reg,
1447      record where they are located so that substitution need
1448      not do a tree walk.  */
1449
1450   if (replace_reloads)
1451     {
1452       if (inloc != 0)
1453         {
1454           struct replacement *r = &replacements[n_replacements++];
1455           r->what = i;
1456           r->subreg_loc = in_subreg_loc;
1457           r->where = inloc;
1458           r->mode = inmode;
1459         }
1460       if (outloc != 0 && outloc != inloc)
1461         {
1462           struct replacement *r = &replacements[n_replacements++];
1463           r->what = i;
1464           r->where = outloc;
1465           r->subreg_loc = out_subreg_loc;
1466           r->mode = outmode;
1467         }
1468     }
1469
1470   /* If this reload is just being introduced and it has both
1471      an incoming quantity and an outgoing quantity that are
1472      supposed to be made to match, see if either one of the two
1473      can serve as the place to reload into.
1474
1475      If one of them is acceptable, set rld[i].reg_rtx
1476      to that one.  */
1477
1478   if (in != 0 && out != 0 && in != out && rld[i].reg_rtx == 0)
1479     {
1480       rld[i].reg_rtx = find_dummy_reload (in, out, inloc, outloc,
1481                                           inmode, outmode,
1482                                           rld[i].class, i,
1483                                           earlyclobber_operand_p (out));
1484
1485       /* If the outgoing register already contains the same value
1486          as the incoming one, we can dispense with loading it.
1487          The easiest way to tell the caller that is to give a phony
1488          value for the incoming operand (same as outgoing one).  */
1489       if (rld[i].reg_rtx == out
1490           && (REG_P (in) || CONSTANT_P (in))
1491           && 0 != find_equiv_reg (in, this_insn, 0, REGNO (out),
1492                                   static_reload_reg_p, i, inmode))
1493         rld[i].in = out;
1494     }
1495
1496   /* If this is an input reload and the operand contains a register that
1497      dies in this insn and is used nowhere else, see if it is the right class
1498      to be used for this reload.  Use it if so.  (This occurs most commonly
1499      in the case of paradoxical SUBREGs and in-out reloads).  We cannot do
1500      this if it is also an output reload that mentions the register unless
1501      the output is a SUBREG that clobbers an entire register.
1502
1503      Note that the operand might be one of the spill regs, if it is a
1504      pseudo reg and we are in a block where spilling has not taken place.
1505      But if there is no spilling in this block, that is OK.
1506      An explicitly used hard reg cannot be a spill reg.  */
1507
1508   if (rld[i].reg_rtx == 0 && in != 0)
1509     {
1510       rtx note;
1511       int regno;
1512       enum machine_mode rel_mode = inmode;
1513
1514       if (out && GET_MODE_SIZE (outmode) > GET_MODE_SIZE (inmode))
1515         rel_mode = outmode;
1516
1517       for (note = REG_NOTES (this_insn); note; note = XEXP (note, 1))
1518         if (REG_NOTE_KIND (note) == REG_DEAD
1519             && REG_P (XEXP (note, 0))
1520             && (regno = REGNO (XEXP (note, 0))) < FIRST_PSEUDO_REGISTER
1521             && reg_mentioned_p (XEXP (note, 0), in)
1522             && ! refers_to_regno_for_reload_p (regno,
1523                                                (regno
1524                                                 + hard_regno_nregs[regno]
1525                                                                   [rel_mode]),
1526                                                PATTERN (this_insn), inloc)
1527             /* If this is also an output reload, IN cannot be used as
1528                the reload register if it is set in this insn unless IN
1529                is also OUT.  */
1530             && (out == 0 || in == out
1531                 || ! hard_reg_set_here_p (regno,
1532                                           (regno
1533                                            + hard_regno_nregs[regno]
1534                                                              [rel_mode]),
1535                                           PATTERN (this_insn)))
1536             /* ??? Why is this code so different from the previous?
1537                Is there any simple coherent way to describe the two together?
1538                What's going on here.  */
1539             && (in != out
1540                 || (GET_CODE (in) == SUBREG
1541                     && (((GET_MODE_SIZE (GET_MODE (in)) + (UNITS_PER_WORD - 1))
1542                          / UNITS_PER_WORD)
1543                         == ((GET_MODE_SIZE (GET_MODE (SUBREG_REG (in)))
1544                              + (UNITS_PER_WORD - 1)) / UNITS_PER_WORD))))
1545             /* Make sure the operand fits in the reg that dies.  */
1546             && (GET_MODE_SIZE (rel_mode)
1547                 <= GET_MODE_SIZE (GET_MODE (XEXP (note, 0))))
1548             && HARD_REGNO_MODE_OK (regno, inmode)
1549             && HARD_REGNO_MODE_OK (regno, outmode))
1550           {
1551             unsigned int offs;
1552             unsigned int nregs = MAX (hard_regno_nregs[regno][inmode],
1553                                       hard_regno_nregs[regno][outmode]);
1554
1555             for (offs = 0; offs < nregs; offs++)
1556               if (fixed_regs[regno + offs]
1557                   || ! TEST_HARD_REG_BIT (reg_class_contents[(int) class],
1558                                           regno + offs))
1559                 break;
1560
1561             if (offs == nregs
1562                 && (! (refers_to_regno_for_reload_p
1563                        (regno, (regno + hard_regno_nregs[regno][inmode]),
1564                                 in, (rtx *)0))
1565                     || can_reload_into (in, regno, inmode)))
1566               {
1567                 rld[i].reg_rtx = gen_rtx_REG (rel_mode, regno);
1568                 break;
1569               }
1570           }
1571     }
1572
1573   if (out)
1574     output_reloadnum = i;
1575
1576   return i;
1577 }
1578
1579 /* Record an additional place we must replace a value
1580    for which we have already recorded a reload.
1581    RELOADNUM is the value returned by push_reload
1582    when the reload was recorded.
1583    This is used in insn patterns that use match_dup.  */
1584
1585 static void
1586 push_replacement (rtx *loc, int reloadnum, enum machine_mode mode)
1587 {
1588   if (replace_reloads)
1589     {
1590       struct replacement *r = &replacements[n_replacements++];
1591       r->what = reloadnum;
1592       r->where = loc;
1593       r->subreg_loc = 0;
1594       r->mode = mode;
1595     }
1596 }
1597
1598 /* Duplicate any replacement we have recorded to apply at
1599    location ORIG_LOC to also be performed at DUP_LOC.
1600    This is used in insn patterns that use match_dup.  */
1601
1602 static void
1603 dup_replacements (rtx *dup_loc, rtx *orig_loc)
1604 {
1605   int i, n = n_replacements;
1606
1607   for (i = 0; i < n; i++)
1608     {
1609       struct replacement *r = &replacements[i];
1610       if (r->where == orig_loc)
1611         push_replacement (dup_loc, r->what, r->mode);
1612     }
1613 }
1614 \f
1615 /* Transfer all replacements that used to be in reload FROM to be in
1616    reload TO.  */
1617
1618 void
1619 transfer_replacements (int to, int from)
1620 {
1621   int i;
1622
1623   for (i = 0; i < n_replacements; i++)
1624     if (replacements[i].what == from)
1625       replacements[i].what = to;
1626 }
1627 \f
1628 /* IN_RTX is the value loaded by a reload that we now decided to inherit,
1629    or a subpart of it.  If we have any replacements registered for IN_RTX,
1630    cancel the reloads that were supposed to load them.
1631    Return nonzero if we canceled any reloads.  */
1632 int
1633 remove_address_replacements (rtx in_rtx)
1634 {
1635   int i, j;
1636   char reload_flags[MAX_RELOADS];
1637   int something_changed = 0;
1638
1639   memset (reload_flags, 0, sizeof reload_flags);
1640   for (i = 0, j = 0; i < n_replacements; i++)
1641     {
1642       if (loc_mentioned_in_p (replacements[i].where, in_rtx))
1643         reload_flags[replacements[i].what] |= 1;
1644       else
1645         {
1646           replacements[j++] = replacements[i];
1647           reload_flags[replacements[i].what] |= 2;
1648         }
1649     }
1650   /* Note that the following store must be done before the recursive calls.  */
1651   n_replacements = j;
1652
1653   for (i = n_reloads - 1; i >= 0; i--)
1654     {
1655       if (reload_flags[i] == 1)
1656         {
1657           deallocate_reload_reg (i);
1658           remove_address_replacements (rld[i].in);
1659           rld[i].in = 0;
1660           something_changed = 1;
1661         }
1662     }
1663   return something_changed;
1664 }
1665 \f
1666 /* If there is only one output reload, and it is not for an earlyclobber
1667    operand, try to combine it with a (logically unrelated) input reload
1668    to reduce the number of reload registers needed.
1669
1670    This is safe if the input reload does not appear in
1671    the value being output-reloaded, because this implies
1672    it is not needed any more once the original insn completes.
1673
1674    If that doesn't work, see we can use any of the registers that
1675    die in this insn as a reload register.  We can if it is of the right
1676    class and does not appear in the value being output-reloaded.  */
1677
1678 static void
1679 combine_reloads (void)
1680 {
1681   int i;
1682   int output_reload = -1;
1683   int secondary_out = -1;
1684   rtx note;
1685
1686   /* Find the output reload; return unless there is exactly one
1687      and that one is mandatory.  */
1688
1689   for (i = 0; i < n_reloads; i++)
1690     if (rld[i].out != 0)
1691       {
1692         if (output_reload >= 0)
1693           return;
1694         output_reload = i;
1695       }
1696
1697   if (output_reload < 0 || rld[output_reload].optional)
1698     return;
1699
1700   /* An input-output reload isn't combinable.  */
1701
1702   if (rld[output_reload].in != 0)
1703     return;
1704
1705   /* If this reload is for an earlyclobber operand, we can't do anything.  */
1706   if (earlyclobber_operand_p (rld[output_reload].out))
1707     return;
1708
1709   /* If there is a reload for part of the address of this operand, we would
1710      need to chnage it to RELOAD_FOR_OTHER_ADDRESS.  But that would extend
1711      its life to the point where doing this combine would not lower the
1712      number of spill registers needed.  */
1713   for (i = 0; i < n_reloads; i++)
1714     if ((rld[i].when_needed == RELOAD_FOR_OUTPUT_ADDRESS
1715          || rld[i].when_needed == RELOAD_FOR_OUTADDR_ADDRESS)
1716         && rld[i].opnum == rld[output_reload].opnum)
1717       return;
1718
1719   /* Check each input reload; can we combine it?  */
1720
1721   for (i = 0; i < n_reloads; i++)
1722     if (rld[i].in && ! rld[i].optional && ! rld[i].nocombine
1723         /* Life span of this reload must not extend past main insn.  */
1724         && rld[i].when_needed != RELOAD_FOR_OUTPUT_ADDRESS
1725         && rld[i].when_needed != RELOAD_FOR_OUTADDR_ADDRESS
1726         && rld[i].when_needed != RELOAD_OTHER
1727         && (CLASS_MAX_NREGS (rld[i].class, rld[i].inmode)
1728             == CLASS_MAX_NREGS (rld[output_reload].class,
1729                                 rld[output_reload].outmode))
1730         && rld[i].inc == 0
1731         && rld[i].reg_rtx == 0
1732 #ifdef SECONDARY_MEMORY_NEEDED
1733         /* Don't combine two reloads with different secondary
1734            memory locations.  */
1735         && (secondary_memlocs_elim[(int) rld[output_reload].outmode][rld[i].opnum] == 0
1736             || secondary_memlocs_elim[(int) rld[output_reload].outmode][rld[output_reload].opnum] == 0
1737             || rtx_equal_p (secondary_memlocs_elim[(int) rld[output_reload].outmode][rld[i].opnum],
1738                             secondary_memlocs_elim[(int) rld[output_reload].outmode][rld[output_reload].opnum]))
1739 #endif
1740         && (SMALL_REGISTER_CLASSES
1741             ? (rld[i].class == rld[output_reload].class)
1742             : (reg_class_subset_p (rld[i].class,
1743                                    rld[output_reload].class)
1744                || reg_class_subset_p (rld[output_reload].class,
1745                                       rld[i].class)))
1746         && (MATCHES (rld[i].in, rld[output_reload].out)
1747             /* Args reversed because the first arg seems to be
1748                the one that we imagine being modified
1749                while the second is the one that might be affected.  */
1750             || (! reg_overlap_mentioned_for_reload_p (rld[output_reload].out,
1751                                                       rld[i].in)
1752                 /* However, if the input is a register that appears inside
1753                    the output, then we also can't share.
1754                    Imagine (set (mem (reg 69)) (plus (reg 69) ...)).
1755                    If the same reload reg is used for both reg 69 and the
1756                    result to be stored in memory, then that result
1757                    will clobber the address of the memory ref.  */
1758                 && ! (REG_P (rld[i].in)
1759                       && reg_overlap_mentioned_for_reload_p (rld[i].in,
1760                                                              rld[output_reload].out))))
1761         && ! reload_inner_reg_of_subreg (rld[i].in, rld[i].inmode,
1762                                          rld[i].when_needed != RELOAD_FOR_INPUT)
1763         && (reg_class_size[(int) rld[i].class]
1764             || SMALL_REGISTER_CLASSES)
1765         /* We will allow making things slightly worse by combining an
1766            input and an output, but no worse than that.  */
1767         && (rld[i].when_needed == RELOAD_FOR_INPUT
1768             || rld[i].when_needed == RELOAD_FOR_OUTPUT))
1769       {
1770         int j;
1771
1772         /* We have found a reload to combine with!  */
1773         rld[i].out = rld[output_reload].out;
1774         rld[i].out_reg = rld[output_reload].out_reg;
1775         rld[i].outmode = rld[output_reload].outmode;
1776         /* Mark the old output reload as inoperative.  */
1777         rld[output_reload].out = 0;
1778         /* The combined reload is needed for the entire insn.  */
1779         rld[i].when_needed = RELOAD_OTHER;
1780         /* If the output reload had a secondary reload, copy it.  */
1781         if (rld[output_reload].secondary_out_reload != -1)
1782           {
1783             rld[i].secondary_out_reload
1784               = rld[output_reload].secondary_out_reload;
1785             rld[i].secondary_out_icode
1786               = rld[output_reload].secondary_out_icode;
1787           }
1788
1789 #ifdef SECONDARY_MEMORY_NEEDED
1790         /* Copy any secondary MEM.  */
1791         if (secondary_memlocs_elim[(int) rld[output_reload].outmode][rld[output_reload].opnum] != 0)
1792           secondary_memlocs_elim[(int) rld[output_reload].outmode][rld[i].opnum]
1793             = secondary_memlocs_elim[(int) rld[output_reload].outmode][rld[output_reload].opnum];
1794 #endif
1795         /* If required, minimize the register class.  */
1796         if (reg_class_subset_p (rld[output_reload].class,
1797                                 rld[i].class))
1798           rld[i].class = rld[output_reload].class;
1799
1800         /* Transfer all replacements from the old reload to the combined.  */
1801         for (j = 0; j < n_replacements; j++)
1802           if (replacements[j].what == output_reload)
1803             replacements[j].what = i;
1804
1805         return;
1806       }
1807
1808   /* If this insn has only one operand that is modified or written (assumed
1809      to be the first),  it must be the one corresponding to this reload.  It
1810      is safe to use anything that dies in this insn for that output provided
1811      that it does not occur in the output (we already know it isn't an
1812      earlyclobber.  If this is an asm insn, give up.  */
1813
1814   if (INSN_CODE (this_insn) == -1)
1815     return;
1816
1817   for (i = 1; i < insn_data[INSN_CODE (this_insn)].n_operands; i++)
1818     if (insn_data[INSN_CODE (this_insn)].operand[i].constraint[0] == '='
1819         || insn_data[INSN_CODE (this_insn)].operand[i].constraint[0] == '+')
1820       return;
1821
1822   /* See if some hard register that dies in this insn and is not used in
1823      the output is the right class.  Only works if the register we pick
1824      up can fully hold our output reload.  */
1825   for (note = REG_NOTES (this_insn); note; note = XEXP (note, 1))
1826     if (REG_NOTE_KIND (note) == REG_DEAD
1827         && REG_P (XEXP (note, 0))
1828         && ! reg_overlap_mentioned_for_reload_p (XEXP (note, 0),
1829                                                  rld[output_reload].out)
1830         && REGNO (XEXP (note, 0)) < FIRST_PSEUDO_REGISTER
1831         && HARD_REGNO_MODE_OK (REGNO (XEXP (note, 0)), rld[output_reload].outmode)
1832         && TEST_HARD_REG_BIT (reg_class_contents[(int) rld[output_reload].class],
1833                               REGNO (XEXP (note, 0)))
1834         && (hard_regno_nregs[REGNO (XEXP (note, 0))][rld[output_reload].outmode]
1835             <= hard_regno_nregs[REGNO (XEXP (note, 0))][GET_MODE (XEXP (note, 0))])
1836         /* Ensure that a secondary or tertiary reload for this output
1837            won't want this register.  */
1838         && ((secondary_out = rld[output_reload].secondary_out_reload) == -1
1839             || (! (TEST_HARD_REG_BIT
1840                    (reg_class_contents[(int) rld[secondary_out].class],
1841                     REGNO (XEXP (note, 0))))
1842                 && ((secondary_out = rld[secondary_out].secondary_out_reload) == -1
1843                     ||  ! (TEST_HARD_REG_BIT
1844                            (reg_class_contents[(int) rld[secondary_out].class],
1845                             REGNO (XEXP (note, 0)))))))
1846         && ! fixed_regs[REGNO (XEXP (note, 0))])
1847       {
1848         rld[output_reload].reg_rtx
1849           = gen_rtx_REG (rld[output_reload].outmode,
1850                          REGNO (XEXP (note, 0)));
1851         return;
1852       }
1853 }
1854 \f
1855 /* Try to find a reload register for an in-out reload (expressions IN and OUT).
1856    See if one of IN and OUT is a register that may be used;
1857    this is desirable since a spill-register won't be needed.
1858    If so, return the register rtx that proves acceptable.
1859
1860    INLOC and OUTLOC are locations where IN and OUT appear in the insn.
1861    CLASS is the register class required for the reload.
1862
1863    If FOR_REAL is >= 0, it is the number of the reload,
1864    and in some cases when it can be discovered that OUT doesn't need
1865    to be computed, clear out rld[FOR_REAL].out.
1866
1867    If FOR_REAL is -1, this should not be done, because this call
1868    is just to see if a register can be found, not to find and install it.
1869
1870    EARLYCLOBBER is nonzero if OUT is an earlyclobber operand.  This
1871    puts an additional constraint on being able to use IN for OUT since
1872    IN must not appear elsewhere in the insn (it is assumed that IN itself
1873    is safe from the earlyclobber).  */
1874
1875 static rtx
1876 find_dummy_reload (rtx real_in, rtx real_out, rtx *inloc, rtx *outloc,
1877                    enum machine_mode inmode, enum machine_mode outmode,
1878                    enum reg_class class, int for_real, int earlyclobber)
1879 {
1880   rtx in = real_in;
1881   rtx out = real_out;
1882   int in_offset = 0;
1883   int out_offset = 0;
1884   rtx value = 0;
1885
1886   /* If operands exceed a word, we can't use either of them
1887      unless they have the same size.  */
1888   if (GET_MODE_SIZE (outmode) != GET_MODE_SIZE (inmode)
1889       && (GET_MODE_SIZE (outmode) > UNITS_PER_WORD
1890           || GET_MODE_SIZE (inmode) > UNITS_PER_WORD))
1891     return 0;
1892
1893   /* Note that {in,out}_offset are needed only when 'in' or 'out'
1894      respectively refers to a hard register.  */
1895
1896   /* Find the inside of any subregs.  */
1897   while (GET_CODE (out) == SUBREG)
1898     {
1899       if (REG_P (SUBREG_REG (out))
1900           && REGNO (SUBREG_REG (out)) < FIRST_PSEUDO_REGISTER)
1901         out_offset += subreg_regno_offset (REGNO (SUBREG_REG (out)),
1902                                            GET_MODE (SUBREG_REG (out)),
1903                                            SUBREG_BYTE (out),
1904                                            GET_MODE (out));
1905       out = SUBREG_REG (out);
1906     }
1907   while (GET_CODE (in) == SUBREG)
1908     {
1909       if (REG_P (SUBREG_REG (in))
1910           && REGNO (SUBREG_REG (in)) < FIRST_PSEUDO_REGISTER)
1911         in_offset += subreg_regno_offset (REGNO (SUBREG_REG (in)),
1912                                           GET_MODE (SUBREG_REG (in)),
1913                                           SUBREG_BYTE (in),
1914                                           GET_MODE (in));
1915       in = SUBREG_REG (in);
1916     }
1917
1918   /* Narrow down the reg class, the same way push_reload will;
1919      otherwise we might find a dummy now, but push_reload won't.  */
1920   class = PREFERRED_RELOAD_CLASS (in, class);
1921
1922   /* See if OUT will do.  */
1923   if (REG_P (out)
1924       && REGNO (out) < FIRST_PSEUDO_REGISTER)
1925     {
1926       unsigned int regno = REGNO (out) + out_offset;
1927       unsigned int nwords = hard_regno_nregs[regno][outmode];
1928       rtx saved_rtx;
1929
1930       /* When we consider whether the insn uses OUT,
1931          ignore references within IN.  They don't prevent us
1932          from copying IN into OUT, because those refs would
1933          move into the insn that reloads IN.
1934
1935          However, we only ignore IN in its role as this reload.
1936          If the insn uses IN elsewhere and it contains OUT,
1937          that counts.  We can't be sure it's the "same" operand
1938          so it might not go through this reload.  */
1939       saved_rtx = *inloc;
1940       *inloc = const0_rtx;
1941
1942       if (regno < FIRST_PSEUDO_REGISTER
1943           && HARD_REGNO_MODE_OK (regno, outmode)
1944           && ! refers_to_regno_for_reload_p (regno, regno + nwords,
1945                                              PATTERN (this_insn), outloc))
1946         {
1947           unsigned int i;
1948
1949           for (i = 0; i < nwords; i++)
1950             if (! TEST_HARD_REG_BIT (reg_class_contents[(int) class],
1951                                      regno + i))
1952               break;
1953
1954           if (i == nwords)
1955             {
1956               if (REG_P (real_out))
1957                 value = real_out;
1958               else
1959                 value = gen_rtx_REG (outmode, regno);
1960             }
1961         }
1962
1963       *inloc = saved_rtx;
1964     }
1965
1966   /* Consider using IN if OUT was not acceptable
1967      or if OUT dies in this insn (like the quotient in a divmod insn).
1968      We can't use IN unless it is dies in this insn,
1969      which means we must know accurately which hard regs are live.
1970      Also, the result can't go in IN if IN is used within OUT,
1971      or if OUT is an earlyclobber and IN appears elsewhere in the insn.  */
1972   if (hard_regs_live_known
1973       && REG_P (in)
1974       && REGNO (in) < FIRST_PSEUDO_REGISTER
1975       && (value == 0
1976           || find_reg_note (this_insn, REG_UNUSED, real_out))
1977       && find_reg_note (this_insn, REG_DEAD, real_in)
1978       && !fixed_regs[REGNO (in)]
1979       && HARD_REGNO_MODE_OK (REGNO (in),
1980                              /* The only case where out and real_out might
1981                                 have different modes is where real_out
1982                                 is a subreg, and in that case, out
1983                                 has a real mode.  */
1984                              (GET_MODE (out) != VOIDmode
1985                               ? GET_MODE (out) : outmode)))
1986     {
1987       unsigned int regno = REGNO (in) + in_offset;
1988       unsigned int nwords = hard_regno_nregs[regno][inmode];
1989
1990       if (! refers_to_regno_for_reload_p (regno, regno + nwords, out, (rtx*) 0)
1991           && ! hard_reg_set_here_p (regno, regno + nwords,
1992                                     PATTERN (this_insn))
1993           && (! earlyclobber
1994               || ! refers_to_regno_for_reload_p (regno, regno + nwords,
1995                                                  PATTERN (this_insn), inloc)))
1996         {
1997           unsigned int i;
1998
1999           for (i = 0; i < nwords; i++)
2000             if (! TEST_HARD_REG_BIT (reg_class_contents[(int) class],
2001                                      regno + i))
2002               break;
2003
2004           if (i == nwords)
2005             {
2006               /* If we were going to use OUT as the reload reg
2007                  and changed our mind, it means OUT is a dummy that
2008                  dies here.  So don't bother copying value to it.  */
2009               if (for_real >= 0 && value == real_out)
2010                 rld[for_real].out = 0;
2011               if (REG_P (real_in))
2012                 value = real_in;
2013               else
2014                 value = gen_rtx_REG (inmode, regno);
2015             }
2016         }
2017     }
2018
2019   return value;
2020 }
2021 \f
2022 /* This page contains subroutines used mainly for determining
2023    whether the IN or an OUT of a reload can serve as the
2024    reload register.  */
2025
2026 /* Return 1 if X is an operand of an insn that is being earlyclobbered.  */
2027
2028 int
2029 earlyclobber_operand_p (rtx x)
2030 {
2031   int i;
2032
2033   for (i = 0; i < n_earlyclobbers; i++)
2034     if (reload_earlyclobbers[i] == x)
2035       return 1;
2036
2037   return 0;
2038 }
2039
2040 /* Return 1 if expression X alters a hard reg in the range
2041    from BEG_REGNO (inclusive) to END_REGNO (exclusive),
2042    either explicitly or in the guise of a pseudo-reg allocated to REGNO.
2043    X should be the body of an instruction.  */
2044
2045 static int
2046 hard_reg_set_here_p (unsigned int beg_regno, unsigned int end_regno, rtx x)
2047 {
2048   if (GET_CODE (x) == SET || GET_CODE (x) == CLOBBER)
2049     {
2050       rtx op0 = SET_DEST (x);
2051
2052       while (GET_CODE (op0) == SUBREG)
2053         op0 = SUBREG_REG (op0);
2054       if (REG_P (op0))
2055         {
2056           unsigned int r = REGNO (op0);
2057
2058           /* See if this reg overlaps range under consideration.  */
2059           if (r < end_regno
2060               && r + hard_regno_nregs[r][GET_MODE (op0)] > beg_regno)
2061             return 1;
2062         }
2063     }
2064   else if (GET_CODE (x) == PARALLEL)
2065     {
2066       int i = XVECLEN (x, 0) - 1;
2067
2068       for (; i >= 0; i--)
2069         if (hard_reg_set_here_p (beg_regno, end_regno, XVECEXP (x, 0, i)))
2070           return 1;
2071     }
2072
2073   return 0;
2074 }
2075
2076 /* Return 1 if ADDR is a valid memory address for mode MODE,
2077    and check that each pseudo reg has the proper kind of
2078    hard reg.  */
2079
2080 int
2081 strict_memory_address_p (enum machine_mode mode ATTRIBUTE_UNUSED, rtx addr)
2082 {
2083   GO_IF_LEGITIMATE_ADDRESS (mode, addr, win);
2084   return 0;
2085
2086  win:
2087   return 1;
2088 }
2089 \f
2090 /* Like rtx_equal_p except that it allows a REG and a SUBREG to match
2091    if they are the same hard reg, and has special hacks for
2092    autoincrement and autodecrement.
2093    This is specifically intended for find_reloads to use
2094    in determining whether two operands match.
2095    X is the operand whose number is the lower of the two.
2096
2097    The value is 2 if Y contains a pre-increment that matches
2098    a non-incrementing address in X.  */
2099
2100 /* ??? To be completely correct, we should arrange to pass
2101    for X the output operand and for Y the input operand.
2102    For now, we assume that the output operand has the lower number
2103    because that is natural in (SET output (... input ...)).  */
2104
2105 int
2106 operands_match_p (rtx x, rtx y)
2107 {
2108   int i;
2109   RTX_CODE code = GET_CODE (x);
2110   const char *fmt;
2111   int success_2;
2112
2113   if (x == y)
2114     return 1;
2115   if ((code == REG || (code == SUBREG && REG_P (SUBREG_REG (x))))
2116       && (REG_P (y) || (GET_CODE (y) == SUBREG
2117                                   && REG_P (SUBREG_REG (y)))))
2118     {
2119       int j;
2120
2121       if (code == SUBREG)
2122         {
2123           i = REGNO (SUBREG_REG (x));
2124           if (i >= FIRST_PSEUDO_REGISTER)
2125             goto slow;
2126           i += subreg_regno_offset (REGNO (SUBREG_REG (x)),
2127                                     GET_MODE (SUBREG_REG (x)),
2128                                     SUBREG_BYTE (x),
2129                                     GET_MODE (x));
2130         }
2131       else
2132         i = REGNO (x);
2133
2134       if (GET_CODE (y) == SUBREG)
2135         {
2136           j = REGNO (SUBREG_REG (y));
2137           if (j >= FIRST_PSEUDO_REGISTER)
2138             goto slow;
2139           j += subreg_regno_offset (REGNO (SUBREG_REG (y)),
2140                                     GET_MODE (SUBREG_REG (y)),
2141                                     SUBREG_BYTE (y),
2142                                     GET_MODE (y));
2143         }
2144       else
2145         j = REGNO (y);
2146
2147       /* On a WORDS_BIG_ENDIAN machine, point to the last register of a
2148          multiple hard register group, so that for example (reg:DI 0) and
2149          (reg:SI 1) will be considered the same register.  */
2150       if (WORDS_BIG_ENDIAN && GET_MODE_SIZE (GET_MODE (x)) > UNITS_PER_WORD
2151           && i < FIRST_PSEUDO_REGISTER)
2152         i += hard_regno_nregs[i][GET_MODE (x)] - 1;
2153       if (WORDS_BIG_ENDIAN && GET_MODE_SIZE (GET_MODE (y)) > UNITS_PER_WORD
2154           && j < FIRST_PSEUDO_REGISTER)
2155         j += hard_regno_nregs[j][GET_MODE (y)] - 1;
2156
2157       return i == j;
2158     }
2159   /* If two operands must match, because they are really a single
2160      operand of an assembler insn, then two postincrements are invalid
2161      because the assembler insn would increment only once.
2162      On the other hand, a postincrement matches ordinary indexing
2163      if the postincrement is the output operand.  */
2164   if (code == POST_DEC || code == POST_INC || code == POST_MODIFY)
2165     return operands_match_p (XEXP (x, 0), y);
2166   /* Two preincrements are invalid
2167      because the assembler insn would increment only once.
2168      On the other hand, a preincrement matches ordinary indexing
2169      if the preincrement is the input operand.
2170      In this case, return 2, since some callers need to do special
2171      things when this happens.  */
2172   if (GET_CODE (y) == PRE_DEC || GET_CODE (y) == PRE_INC
2173       || GET_CODE (y) == PRE_MODIFY)
2174     return operands_match_p (x, XEXP (y, 0)) ? 2 : 0;
2175
2176  slow:
2177
2178   /* Now we have disposed of all the cases
2179      in which different rtx codes can match.  */
2180   if (code != GET_CODE (y))
2181     return 0;
2182   if (code == LABEL_REF)
2183     return XEXP (x, 0) == XEXP (y, 0);
2184   if (code == SYMBOL_REF)
2185     return XSTR (x, 0) == XSTR (y, 0);
2186
2187   /* (MULT:SI x y) and (MULT:HI x y) are NOT equivalent.  */
2188
2189   if (GET_MODE (x) != GET_MODE (y))
2190     return 0;
2191
2192   /* Compare the elements.  If any pair of corresponding elements
2193      fail to match, return 0 for the whole things.  */
2194
2195   success_2 = 0;
2196   fmt = GET_RTX_FORMAT (code);
2197   for (i = GET_RTX_LENGTH (code) - 1; i >= 0; i--)
2198     {
2199       int val, j;
2200       switch (fmt[i])
2201         {
2202         case 'w':
2203           if (XWINT (x, i) != XWINT (y, i))
2204             return 0;
2205           break;
2206
2207         case 'i':
2208           if (XINT (x, i) != XINT (y, i))
2209             return 0;
2210           break;
2211
2212         case 'e':
2213           val = operands_match_p (XEXP (x, i), XEXP (y, i));
2214           if (val == 0)
2215             return 0;
2216           /* If any subexpression returns 2,
2217              we should return 2 if we are successful.  */
2218           if (val == 2)
2219             success_2 = 1;
2220           break;
2221
2222         case '0':
2223           break;
2224
2225         case 'E':
2226           if (XVECLEN (x, i) != XVECLEN (y, i))
2227             return 0;
2228           for (j = XVECLEN (x, i) - 1; j >= 0; --j)
2229             {
2230               val = operands_match_p (XVECEXP (x, i, j), XVECEXP (y, i, j));
2231               if (val == 0)
2232                 return 0;
2233               if (val == 2)
2234                 success_2 = 1;
2235             }
2236           break;
2237
2238           /* It is believed that rtx's at this level will never
2239              contain anything but integers and other rtx's,
2240              except for within LABEL_REFs and SYMBOL_REFs.  */
2241         default:
2242           gcc_unreachable ();
2243         }
2244     }
2245   return 1 + success_2;
2246 }
2247 \f
2248 /* Describe the range of registers or memory referenced by X.
2249    If X is a register, set REG_FLAG and put the first register
2250    number into START and the last plus one into END.
2251    If X is a memory reference, put a base address into BASE
2252    and a range of integer offsets into START and END.
2253    If X is pushing on the stack, we can assume it causes no trouble,
2254    so we set the SAFE field.  */
2255
2256 static struct decomposition
2257 decompose (rtx x)
2258 {
2259   struct decomposition val;
2260   int all_const = 0;
2261
2262   memset (&val, 0, sizeof (val));
2263
2264   switch (GET_CODE (x))
2265     {
2266     case MEM:
2267       {
2268         rtx base = NULL_RTX, offset = 0;
2269         rtx addr = XEXP (x, 0);
2270         
2271         if (GET_CODE (addr) == PRE_DEC || GET_CODE (addr) == PRE_INC
2272             || GET_CODE (addr) == POST_DEC || GET_CODE (addr) == POST_INC)
2273           {
2274             val.base = XEXP (addr, 0);
2275             val.start = -GET_MODE_SIZE (GET_MODE (x));
2276             val.end = GET_MODE_SIZE (GET_MODE (x));
2277             val.safe = REGNO (val.base) == STACK_POINTER_REGNUM;
2278             return val;
2279           }
2280         
2281         if (GET_CODE (addr) == PRE_MODIFY || GET_CODE (addr) == POST_MODIFY)
2282           {
2283             if (GET_CODE (XEXP (addr, 1)) == PLUS
2284                 && XEXP (addr, 0) == XEXP (XEXP (addr, 1), 0)
2285                 && CONSTANT_P (XEXP (XEXP (addr, 1), 1)))
2286               {
2287                 val.base  = XEXP (addr, 0);
2288                 val.start = -INTVAL (XEXP (XEXP (addr, 1), 1));
2289                 val.end   = INTVAL (XEXP (XEXP (addr, 1), 1));
2290                 val.safe  = REGNO (val.base) == STACK_POINTER_REGNUM;
2291                 return val;
2292               }
2293           }
2294         
2295         if (GET_CODE (addr) == CONST)
2296           {
2297             addr = XEXP (addr, 0);
2298             all_const = 1;
2299           }
2300         if (GET_CODE (addr) == PLUS)
2301           {
2302             if (CONSTANT_P (XEXP (addr, 0)))
2303               {
2304                 base = XEXP (addr, 1);
2305                 offset = XEXP (addr, 0);
2306               }
2307             else if (CONSTANT_P (XEXP (addr, 1)))
2308               {
2309                 base = XEXP (addr, 0);
2310                 offset = XEXP (addr, 1);
2311               }
2312           }
2313         
2314         if (offset == 0)
2315           {
2316             base = addr;
2317             offset = const0_rtx;
2318           }
2319         if (GET_CODE (offset) == CONST)
2320           offset = XEXP (offset, 0);
2321         if (GET_CODE (offset) == PLUS)
2322           {
2323             if (GET_CODE (XEXP (offset, 0)) == CONST_INT)
2324               {
2325                 base = gen_rtx_PLUS (GET_MODE (base), base, XEXP (offset, 1));
2326                 offset = XEXP (offset, 0);
2327               }
2328             else if (GET_CODE (XEXP (offset, 1)) == CONST_INT)
2329               {
2330                 base = gen_rtx_PLUS (GET_MODE (base), base, XEXP (offset, 0));
2331                 offset = XEXP (offset, 1);
2332               }
2333             else
2334               {
2335                 base = gen_rtx_PLUS (GET_MODE (base), base, offset);
2336                 offset = const0_rtx;
2337               }
2338           }
2339         else if (GET_CODE (offset) != CONST_INT)
2340           {
2341             base = gen_rtx_PLUS (GET_MODE (base), base, offset);
2342             offset = const0_rtx;
2343           }
2344         
2345         if (all_const && GET_CODE (base) == PLUS)
2346           base = gen_rtx_CONST (GET_MODE (base), base);
2347         
2348         gcc_assert (GET_CODE (offset) == CONST_INT);
2349         
2350         val.start = INTVAL (offset);
2351         val.end = val.start + GET_MODE_SIZE (GET_MODE (x));
2352         val.base = base;
2353       }
2354       break;
2355       
2356     case REG:
2357       val.reg_flag = 1;
2358       val.start = true_regnum (x);
2359       if (val.start < 0)
2360         {
2361           /* A pseudo with no hard reg.  */
2362           val.start = REGNO (x);
2363           val.end = val.start + 1;
2364         }
2365       else
2366         /* A hard reg.  */
2367         val.end = val.start + hard_regno_nregs[val.start][GET_MODE (x)];
2368       break;
2369
2370     case SUBREG:
2371       if (!REG_P (SUBREG_REG (x)))
2372         /* This could be more precise, but it's good enough.  */
2373         return decompose (SUBREG_REG (x));
2374       val.reg_flag = 1;
2375       val.start = true_regnum (x);
2376       if (val.start < 0)
2377         return decompose (SUBREG_REG (x));
2378       else
2379         /* A hard reg.  */
2380         val.end = val.start + hard_regno_nregs[val.start][GET_MODE (x)];
2381       break;
2382
2383     case SCRATCH:
2384       /* This hasn't been assigned yet, so it can't conflict yet.  */
2385       val.safe = 1;
2386       break;
2387
2388     default:
2389       gcc_assert (CONSTANT_P (x));
2390       val.safe = 1;
2391       break;
2392     }
2393   return val;
2394 }
2395
2396 /* Return 1 if altering Y will not modify the value of X.
2397    Y is also described by YDATA, which should be decompose (Y).  */
2398
2399 static int
2400 immune_p (rtx x, rtx y, struct decomposition ydata)
2401 {
2402   struct decomposition xdata;
2403
2404   if (ydata.reg_flag)
2405     return !refers_to_regno_for_reload_p (ydata.start, ydata.end, x, (rtx*) 0);
2406   if (ydata.safe)
2407     return 1;
2408
2409   gcc_assert (MEM_P (y));
2410   /* If Y is memory and X is not, Y can't affect X.  */
2411   if (!MEM_P (x))
2412     return 1;
2413
2414   xdata = decompose (x);
2415
2416   if (! rtx_equal_p (xdata.base, ydata.base))
2417     {
2418       /* If bases are distinct symbolic constants, there is no overlap.  */
2419       if (CONSTANT_P (xdata.base) && CONSTANT_P (ydata.base))
2420         return 1;
2421       /* Constants and stack slots never overlap.  */
2422       if (CONSTANT_P (xdata.base)
2423           && (ydata.base == frame_pointer_rtx
2424               || ydata.base == hard_frame_pointer_rtx
2425               || ydata.base == stack_pointer_rtx))
2426         return 1;
2427       if (CONSTANT_P (ydata.base)
2428           && (xdata.base == frame_pointer_rtx
2429               || xdata.base == hard_frame_pointer_rtx
2430               || xdata.base == stack_pointer_rtx))
2431         return 1;
2432       /* If either base is variable, we don't know anything.  */
2433       return 0;
2434     }
2435
2436   return (xdata.start >= ydata.end || ydata.start >= xdata.end);
2437 }
2438
2439 /* Similar, but calls decompose.  */
2440
2441 int
2442 safe_from_earlyclobber (rtx op, rtx clobber)
2443 {
2444   struct decomposition early_data;
2445
2446   early_data = decompose (clobber);
2447   return immune_p (op, clobber, early_data);
2448 }
2449 \f
2450 /* Main entry point of this file: search the body of INSN
2451    for values that need reloading and record them with push_reload.
2452    REPLACE nonzero means record also where the values occur
2453    so that subst_reloads can be used.
2454
2455    IND_LEVELS says how many levels of indirection are supported by this
2456    machine; a value of zero means that a memory reference is not a valid
2457    memory address.
2458
2459    LIVE_KNOWN says we have valid information about which hard
2460    regs are live at each point in the program; this is true when
2461    we are called from global_alloc but false when stupid register
2462    allocation has been done.
2463
2464    RELOAD_REG_P if nonzero is a vector indexed by hard reg number
2465    which is nonnegative if the reg has been commandeered for reloading into.
2466    It is copied into STATIC_RELOAD_REG_P and referenced from there
2467    by various subroutines.
2468
2469    Return TRUE if some operands need to be changed, because of swapping
2470    commutative operands, reg_equiv_address substitution, or whatever.  */
2471
2472 int
2473 find_reloads (rtx insn, int replace, int ind_levels, int live_known,
2474               short *reload_reg_p)
2475 {
2476   int insn_code_number;
2477   int i, j;
2478   int noperands;
2479   /* These start out as the constraints for the insn
2480      and they are chewed up as we consider alternatives.  */
2481   char *constraints[MAX_RECOG_OPERANDS];
2482   /* These are the preferred classes for an operand, or NO_REGS if it isn't
2483      a register.  */
2484   enum reg_class preferred_class[MAX_RECOG_OPERANDS];
2485   char pref_or_nothing[MAX_RECOG_OPERANDS];
2486   /* Nonzero for a MEM operand whose entire address needs a reload. 
2487      May be -1 to indicate the entire address may or may not need a reload.  */
2488   int address_reloaded[MAX_RECOG_OPERANDS];
2489   /* Nonzero for an address operand that needs to be completely reloaded.
2490      May be -1 to indicate the entire operand may or may not need a reload.  */
2491   int address_operand_reloaded[MAX_RECOG_OPERANDS];
2492   /* Value of enum reload_type to use for operand.  */
2493   enum reload_type operand_type[MAX_RECOG_OPERANDS];
2494   /* Value of enum reload_type to use within address of operand.  */
2495   enum reload_type address_type[MAX_RECOG_OPERANDS];
2496   /* Save the usage of each operand.  */
2497   enum reload_usage { RELOAD_READ, RELOAD_READ_WRITE, RELOAD_WRITE } modified[MAX_RECOG_OPERANDS];
2498   int no_input_reloads = 0, no_output_reloads = 0;
2499   int n_alternatives;
2500   int this_alternative[MAX_RECOG_OPERANDS];
2501   char this_alternative_match_win[MAX_RECOG_OPERANDS];
2502   char this_alternative_win[MAX_RECOG_OPERANDS];
2503   char this_alternative_offmemok[MAX_RECOG_OPERANDS];
2504   char this_alternative_earlyclobber[MAX_RECOG_OPERANDS];
2505   int this_alternative_matches[MAX_RECOG_OPERANDS];
2506   int swapped;
2507   int goal_alternative[MAX_RECOG_OPERANDS];
2508   int this_alternative_number;
2509   int goal_alternative_number = 0;
2510   int operand_reloadnum[MAX_RECOG_OPERANDS];
2511   int goal_alternative_matches[MAX_RECOG_OPERANDS];
2512   int goal_alternative_matched[MAX_RECOG_OPERANDS];
2513   char goal_alternative_match_win[MAX_RECOG_OPERANDS];
2514   char goal_alternative_win[MAX_RECOG_OPERANDS];
2515   char goal_alternative_offmemok[MAX_RECOG_OPERANDS];
2516   char goal_alternative_earlyclobber[MAX_RECOG_OPERANDS];
2517   int goal_alternative_swapped;
2518   int best;
2519   int commutative;
2520   char operands_match[MAX_RECOG_OPERANDS][MAX_RECOG_OPERANDS];
2521   rtx substed_operand[MAX_RECOG_OPERANDS];
2522   rtx body = PATTERN (insn);
2523   rtx set = single_set (insn);
2524   int goal_earlyclobber = 0, this_earlyclobber;
2525   enum machine_mode operand_mode[MAX_RECOG_OPERANDS];
2526   int retval = 0;
2527
2528   this_insn = insn;
2529   n_reloads = 0;
2530   n_replacements = 0;
2531   n_earlyclobbers = 0;
2532   replace_reloads = replace;
2533   hard_regs_live_known = live_known;
2534   static_reload_reg_p = reload_reg_p;
2535
2536   /* JUMP_INSNs and CALL_INSNs are not allowed to have any output reloads;
2537      neither are insns that SET cc0.  Insns that use CC0 are not allowed
2538      to have any input reloads.  */
2539   if (JUMP_P (insn) || CALL_P (insn))
2540     no_output_reloads = 1;
2541
2542 #ifdef HAVE_cc0
2543   if (reg_referenced_p (cc0_rtx, PATTERN (insn)))
2544     no_input_reloads = 1;
2545   if (reg_set_p (cc0_rtx, PATTERN (insn)))
2546     no_output_reloads = 1;
2547 #endif
2548
2549 #ifdef SECONDARY_MEMORY_NEEDED
2550   /* The eliminated forms of any secondary memory locations are per-insn, so
2551      clear them out here.  */
2552
2553   if (secondary_memlocs_elim_used)
2554     {
2555       memset (secondary_memlocs_elim, 0,
2556               sizeof (secondary_memlocs_elim[0]) * secondary_memlocs_elim_used);
2557       secondary_memlocs_elim_used = 0;
2558     }
2559 #endif
2560
2561   /* Dispose quickly of (set (reg..) (reg..)) if both have hard regs and it
2562      is cheap to move between them.  If it is not, there may not be an insn
2563      to do the copy, so we may need a reload.  */
2564   if (GET_CODE (body) == SET
2565       && REG_P (SET_DEST (body))
2566       && REGNO (SET_DEST (body)) < FIRST_PSEUDO_REGISTER
2567       && REG_P (SET_SRC (body))
2568       && REGNO (SET_SRC (body)) < FIRST_PSEUDO_REGISTER
2569       && REGISTER_MOVE_COST (GET_MODE (SET_SRC (body)),
2570                              REGNO_REG_CLASS (REGNO (SET_SRC (body))),
2571                              REGNO_REG_CLASS (REGNO (SET_DEST (body)))) == 2)
2572     return 0;
2573
2574   extract_insn (insn);
2575
2576   noperands = reload_n_operands = recog_data.n_operands;
2577   n_alternatives = recog_data.n_alternatives;
2578
2579   /* Just return "no reloads" if insn has no operands with constraints.  */
2580   if (noperands == 0 || n_alternatives == 0)
2581     return 0;
2582
2583   insn_code_number = INSN_CODE (insn);
2584   this_insn_is_asm = insn_code_number < 0;
2585
2586   memcpy (operand_mode, recog_data.operand_mode,
2587           noperands * sizeof (enum machine_mode));
2588   memcpy (constraints, recog_data.constraints, noperands * sizeof (char *));
2589
2590   commutative = -1;
2591
2592   /* If we will need to know, later, whether some pair of operands
2593      are the same, we must compare them now and save the result.
2594      Reloading the base and index registers will clobber them
2595      and afterward they will fail to match.  */
2596
2597   for (i = 0; i < noperands; i++)
2598     {
2599       char *p;
2600       int c;
2601
2602       substed_operand[i] = recog_data.operand[i];
2603       p = constraints[i];
2604
2605       modified[i] = RELOAD_READ;
2606
2607       /* Scan this operand's constraint to see if it is an output operand,
2608          an in-out operand, is commutative, or should match another.  */
2609
2610       while ((c = *p))
2611         {
2612           p += CONSTRAINT_LEN (c, p);
2613           switch (c)
2614             {
2615             case '=':
2616               modified[i] = RELOAD_WRITE;
2617               break;
2618             case '+':
2619               modified[i] = RELOAD_READ_WRITE;
2620               break;
2621             case '%':
2622               {
2623                 /* The last operand should not be marked commutative.  */
2624                 gcc_assert (i != noperands - 1);
2625
2626                 /* We currently only support one commutative pair of
2627                    operands.  Some existing asm code currently uses more
2628                    than one pair.  Previously, that would usually work,
2629                    but sometimes it would crash the compiler.  We
2630                    continue supporting that case as well as we can by
2631                    silently ignoring all but the first pair.  In the
2632                    future we may handle it correctly.  */
2633                 if (commutative < 0)
2634                   commutative = i;
2635                 else
2636                   gcc_assert (this_insn_is_asm);
2637               }
2638               break;
2639             /* Use of ISDIGIT is tempting here, but it may get expensive because
2640                of locale support we don't want.  */
2641             case '0': case '1': case '2': case '3': case '4':
2642             case '5': case '6': case '7': case '8': case '9':
2643               {
2644                 c = strtoul (p - 1, &p, 10);
2645
2646                 operands_match[c][i]
2647                   = operands_match_p (recog_data.operand[c],
2648                                       recog_data.operand[i]);
2649
2650                 /* An operand may not match itself.  */
2651                 gcc_assert (c != i);
2652
2653                 /* If C can be commuted with C+1, and C might need to match I,
2654                    then C+1 might also need to match I.  */
2655                 if (commutative >= 0)
2656                   {
2657                     if (c == commutative || c == commutative + 1)
2658                       {
2659                         int other = c + (c == commutative ? 1 : -1);
2660                         operands_match[other][i]
2661                           = operands_match_p (recog_data.operand[other],
2662                                               recog_data.operand[i]);
2663                       }
2664                     if (i == commutative || i == commutative + 1)
2665                       {
2666                         int other = i + (i == commutative ? 1 : -1);
2667                         operands_match[c][other]
2668                           = operands_match_p (recog_data.operand[c],
2669                                               recog_data.operand[other]);
2670                       }
2671                     /* Note that C is supposed to be less than I.
2672                        No need to consider altering both C and I because in
2673                        that case we would alter one into the other.  */
2674                   }
2675               }
2676             }
2677         }
2678     }
2679
2680   /* Examine each operand that is a memory reference or memory address
2681      and reload parts of the addresses into index registers.
2682      Also here any references to pseudo regs that didn't get hard regs
2683      but are equivalent to constants get replaced in the insn itself
2684      with those constants.  Nobody will ever see them again.
2685
2686      Finally, set up the preferred classes of each operand.  */
2687
2688   for (i = 0; i < noperands; i++)
2689     {
2690       RTX_CODE code = GET_CODE (recog_data.operand[i]);
2691
2692       address_reloaded[i] = 0;
2693       address_operand_reloaded[i] = 0;
2694       operand_type[i] = (modified[i] == RELOAD_READ ? RELOAD_FOR_INPUT
2695                          : modified[i] == RELOAD_WRITE ? RELOAD_FOR_OUTPUT
2696                          : RELOAD_OTHER);
2697       address_type[i]
2698         = (modified[i] == RELOAD_READ ? RELOAD_FOR_INPUT_ADDRESS
2699            : modified[i] == RELOAD_WRITE ? RELOAD_FOR_OUTPUT_ADDRESS
2700            : RELOAD_OTHER);
2701
2702       if (*constraints[i] == 0)
2703         /* Ignore things like match_operator operands.  */
2704         ;
2705       else if (constraints[i][0] == 'p'
2706                || EXTRA_ADDRESS_CONSTRAINT (constraints[i][0], constraints[i]))
2707         {
2708           address_operand_reloaded[i]
2709             = find_reloads_address (recog_data.operand_mode[i], (rtx*) 0,
2710                                     recog_data.operand[i],
2711                                     recog_data.operand_loc[i],
2712                                     i, operand_type[i], ind_levels, insn);
2713
2714           /* If we now have a simple operand where we used to have a
2715              PLUS or MULT, re-recognize and try again.  */
2716           if ((OBJECT_P (*recog_data.operand_loc[i])
2717                || GET_CODE (*recog_data.operand_loc[i]) == SUBREG)
2718               && (GET_CODE (recog_data.operand[i]) == MULT
2719                   || GET_CODE (recog_data.operand[i]) == PLUS))
2720             {
2721               INSN_CODE (insn) = -1;
2722               retval = find_reloads (insn, replace, ind_levels, live_known,
2723                                      reload_reg_p);
2724               return retval;
2725             }
2726
2727           recog_data.operand[i] = *recog_data.operand_loc[i];
2728           substed_operand[i] = recog_data.operand[i];
2729
2730           /* Address operands are reloaded in their existing mode,
2731              no matter what is specified in the machine description.  */
2732           operand_mode[i] = GET_MODE (recog_data.operand[i]);
2733         }
2734       else if (code == MEM)
2735         {
2736           address_reloaded[i]
2737             = find_reloads_address (GET_MODE (recog_data.operand[i]),
2738                                     recog_data.operand_loc[i],
2739                                     XEXP (recog_data.operand[i], 0),
2740                                     &XEXP (recog_data.operand[i], 0),
2741                                     i, address_type[i], ind_levels, insn);
2742           recog_data.operand[i] = *recog_data.operand_loc[i];
2743           substed_operand[i] = recog_data.operand[i];
2744         }
2745       else if (code == SUBREG)
2746         {
2747           rtx reg = SUBREG_REG (recog_data.operand[i]);
2748           rtx op
2749             = find_reloads_toplev (recog_data.operand[i], i, address_type[i],
2750                                    ind_levels,
2751                                    set != 0
2752                                    && &SET_DEST (set) == recog_data.operand_loc[i],
2753                                    insn,
2754                                    &address_reloaded[i]);
2755
2756           /* If we made a MEM to load (a part of) the stackslot of a pseudo
2757              that didn't get a hard register, emit a USE with a REG_EQUAL
2758              note in front so that we might inherit a previous, possibly
2759              wider reload.  */
2760
2761           if (replace
2762               && MEM_P (op)
2763               && REG_P (reg)
2764               && (GET_MODE_SIZE (GET_MODE (reg))
2765                   >= GET_MODE_SIZE (GET_MODE (op))))
2766             set_unique_reg_note (emit_insn_before (gen_rtx_USE (VOIDmode, reg),
2767                                                    insn),
2768                                  REG_EQUAL, reg_equiv_memory_loc[REGNO (reg)]);
2769
2770           substed_operand[i] = recog_data.operand[i] = op;
2771         }
2772       else if (code == PLUS || GET_RTX_CLASS (code) == RTX_UNARY)
2773         /* We can get a PLUS as an "operand" as a result of register
2774            elimination.  See eliminate_regs and gen_reload.  We handle
2775            a unary operator by reloading the operand.  */
2776         substed_operand[i] = recog_data.operand[i]
2777           = find_reloads_toplev (recog_data.operand[i], i, address_type[i],
2778                                  ind_levels, 0, insn,
2779                                  &address_reloaded[i]);
2780       else if (code == REG)
2781         {
2782           /* This is equivalent to calling find_reloads_toplev.
2783              The code is duplicated for speed.
2784              When we find a pseudo always equivalent to a constant,
2785              we replace it by the constant.  We must be sure, however,
2786              that we don't try to replace it in the insn in which it
2787              is being set.  */
2788           int regno = REGNO (recog_data.operand[i]);
2789           if (reg_equiv_constant[regno] != 0
2790               && (set == 0 || &SET_DEST (set) != recog_data.operand_loc[i]))
2791             {
2792               /* Record the existing mode so that the check if constants are
2793                  allowed will work when operand_mode isn't specified.  */
2794
2795               if (operand_mode[i] == VOIDmode)
2796                 operand_mode[i] = GET_MODE (recog_data.operand[i]);
2797
2798               substed_operand[i] = recog_data.operand[i]
2799                 = reg_equiv_constant[regno];
2800             }
2801           if (reg_equiv_memory_loc[regno] != 0
2802               && (reg_equiv_address[regno] != 0 || num_not_at_initial_offset))
2803             /* We need not give a valid is_set_dest argument since the case
2804                of a constant equivalence was checked above.  */
2805             substed_operand[i] = recog_data.operand[i]
2806               = find_reloads_toplev (recog_data.operand[i], i, address_type[i],
2807                                      ind_levels, 0, insn,
2808                                      &address_reloaded[i]);
2809         }
2810       /* If the operand is still a register (we didn't replace it with an
2811          equivalent), get the preferred class to reload it into.  */
2812       code = GET_CODE (recog_data.operand[i]);
2813       preferred_class[i]
2814         = ((code == REG && REGNO (recog_data.operand[i])
2815             >= FIRST_PSEUDO_REGISTER)
2816            ? reg_preferred_class (REGNO (recog_data.operand[i]))
2817            : NO_REGS);
2818       pref_or_nothing[i]
2819         = (code == REG
2820            && REGNO (recog_data.operand[i]) >= FIRST_PSEUDO_REGISTER
2821            && reg_alternate_class (REGNO (recog_data.operand[i])) == NO_REGS);
2822     }
2823
2824   /* If this is simply a copy from operand 1 to operand 0, merge the
2825      preferred classes for the operands.  */
2826   if (set != 0 && noperands >= 2 && recog_data.operand[0] == SET_DEST (set)
2827       && recog_data.operand[1] == SET_SRC (set))
2828     {
2829       preferred_class[0] = preferred_class[1]
2830         = reg_class_subunion[(int) preferred_class[0]][(int) preferred_class[1]];
2831       pref_or_nothing[0] |= pref_or_nothing[1];
2832       pref_or_nothing[1] |= pref_or_nothing[0];
2833     }
2834
2835   /* Now see what we need for pseudo-regs that didn't get hard regs
2836      or got the wrong kind of hard reg.  For this, we must consider
2837      all the operands together against the register constraints.  */
2838
2839   best = MAX_RECOG_OPERANDS * 2 + 600;
2840
2841   swapped = 0;
2842   goal_alternative_swapped = 0;
2843  try_swapped:
2844
2845   /* The constraints are made of several alternatives.
2846      Each operand's constraint looks like foo,bar,... with commas
2847      separating the alternatives.  The first alternatives for all
2848      operands go together, the second alternatives go together, etc.
2849
2850      First loop over alternatives.  */
2851
2852   for (this_alternative_number = 0;
2853        this_alternative_number < n_alternatives;
2854        this_alternative_number++)
2855     {
2856       /* Loop over operands for one constraint alternative.  */
2857       /* LOSERS counts those that don't fit this alternative
2858          and would require loading.  */
2859       int losers = 0;
2860       /* BAD is set to 1 if it some operand can't fit this alternative
2861          even after reloading.  */
2862       int bad = 0;
2863       /* REJECT is a count of how undesirable this alternative says it is
2864          if any reloading is required.  If the alternative matches exactly
2865          then REJECT is ignored, but otherwise it gets this much
2866          counted against it in addition to the reloading needed.  Each
2867          ? counts three times here since we want the disparaging caused by
2868          a bad register class to only count 1/3 as much.  */
2869       int reject = 0;
2870
2871       this_earlyclobber = 0;
2872
2873       for (i = 0; i < noperands; i++)
2874         {
2875           char *p = constraints[i];
2876           char *end;
2877           int len;
2878           int win = 0;
2879           int did_match = 0;
2880           /* 0 => this operand can be reloaded somehow for this alternative.  */
2881           int badop = 1;
2882           /* 0 => this operand can be reloaded if the alternative allows regs.  */
2883           int winreg = 0;
2884           int c;
2885           int m;
2886           rtx operand = recog_data.operand[i];
2887           int offset = 0;
2888           /* Nonzero means this is a MEM that must be reloaded into a reg
2889              regardless of what the constraint says.  */
2890           int force_reload = 0;
2891           int offmemok = 0;
2892           /* Nonzero if a constant forced into memory would be OK for this
2893              operand.  */
2894           int constmemok = 0;
2895           int earlyclobber = 0;
2896
2897           /* If the predicate accepts a unary operator, it means that
2898              we need to reload the operand, but do not do this for
2899              match_operator and friends.  */
2900           if (UNARY_P (operand) && *p != 0)
2901             operand = XEXP (operand, 0);
2902
2903           /* If the operand is a SUBREG, extract
2904              the REG or MEM (or maybe even a constant) within.
2905              (Constants can occur as a result of reg_equiv_constant.)  */
2906
2907           while (GET_CODE (operand) == SUBREG)
2908             {
2909               /* Offset only matters when operand is a REG and
2910                  it is a hard reg.  This is because it is passed
2911                  to reg_fits_class_p if it is a REG and all pseudos
2912                  return 0 from that function.  */
2913               if (REG_P (SUBREG_REG (operand))
2914                   && REGNO (SUBREG_REG (operand)) < FIRST_PSEUDO_REGISTER)
2915                 {
2916                   if (!subreg_offset_representable_p
2917                         (REGNO (SUBREG_REG (operand)),
2918                          GET_MODE (SUBREG_REG (operand)),
2919                          SUBREG_BYTE (operand),
2920                          GET_MODE (operand)))
2921                      force_reload = 1;
2922                   offset += subreg_regno_offset (REGNO (SUBREG_REG (operand)),
2923                                                  GET_MODE (SUBREG_REG (operand)),
2924                                                  SUBREG_BYTE (operand),
2925                                                  GET_MODE (operand));
2926                 }
2927               operand = SUBREG_REG (operand);
2928               /* Force reload if this is a constant or PLUS or if there may
2929                  be a problem accessing OPERAND in the outer mode.  */
2930               if (CONSTANT_P (operand)
2931                   || GET_CODE (operand) == PLUS
2932                   /* We must force a reload of paradoxical SUBREGs
2933                      of a MEM because the alignment of the inner value
2934                      may not be enough to do the outer reference.  On
2935                      big-endian machines, it may also reference outside
2936                      the object.
2937
2938                      On machines that extend byte operations and we have a
2939                      SUBREG where both the inner and outer modes are no wider
2940                      than a word and the inner mode is narrower, is integral,
2941                      and gets extended when loaded from memory, combine.c has
2942                      made assumptions about the behavior of the machine in such
2943                      register access.  If the data is, in fact, in memory we
2944                      must always load using the size assumed to be in the
2945                      register and let the insn do the different-sized
2946                      accesses.
2947
2948                      This is doubly true if WORD_REGISTER_OPERATIONS.  In
2949                      this case eliminate_regs has left non-paradoxical
2950                      subregs for push_reload to see.  Make sure it does
2951                      by forcing the reload.
2952
2953                      ??? When is it right at this stage to have a subreg
2954                      of a mem that is _not_ to be handled specially?  IMO
2955                      those should have been reduced to just a mem.  */
2956                   || ((MEM_P (operand)
2957                        || (REG_P (operand)
2958                            && REGNO (operand) >= FIRST_PSEUDO_REGISTER))
2959 #ifndef WORD_REGISTER_OPERATIONS
2960                       && (((GET_MODE_BITSIZE (GET_MODE (operand))
2961                             < BIGGEST_ALIGNMENT)
2962                            && (GET_MODE_SIZE (operand_mode[i])
2963                                > GET_MODE_SIZE (GET_MODE (operand))))
2964                           || BYTES_BIG_ENDIAN
2965 #ifdef LOAD_EXTEND_OP
2966                           || (GET_MODE_SIZE (operand_mode[i]) <= UNITS_PER_WORD
2967                               && (GET_MODE_SIZE (GET_MODE (operand))
2968                                   <= UNITS_PER_WORD)
2969                               && (GET_MODE_SIZE (operand_mode[i])
2970                                   > GET_MODE_SIZE (GET_MODE (operand)))
2971                               && INTEGRAL_MODE_P (GET_MODE (operand))
2972                               && LOAD_EXTEND_OP (GET_MODE (operand)) != UNKNOWN)
2973 #endif
2974                           )
2975 #endif
2976                       )
2977                   )
2978                 force_reload = 1;
2979             }
2980
2981           this_alternative[i] = (int) NO_REGS;
2982           this_alternative_win[i] = 0;
2983           this_alternative_match_win[i] = 0;
2984           this_alternative_offmemok[i] = 0;
2985           this_alternative_earlyclobber[i] = 0;
2986           this_alternative_matches[i] = -1;
2987
2988           /* An empty constraint or empty alternative
2989              allows anything which matched the pattern.  */
2990           if (*p == 0 || *p == ',')
2991             win = 1, badop = 0;
2992
2993           /* Scan this alternative's specs for this operand;
2994              set WIN if the operand fits any letter in this alternative.
2995              Otherwise, clear BADOP if this operand could
2996              fit some letter after reloads,
2997              or set WINREG if this operand could fit after reloads
2998              provided the constraint allows some registers.  */
2999
3000           do
3001             switch ((c = *p, len = CONSTRAINT_LEN (c, p)), c)
3002               {
3003               case '\0':
3004                 len = 0;
3005                 break;
3006               case ',':
3007                 c = '\0';
3008                 break;
3009
3010               case '=':  case '+':  case '*':
3011                 break;
3012
3013               case '%':
3014                 /* We only support one commutative marker, the first
3015                    one.  We already set commutative above.  */
3016                 break;
3017
3018               case '?':
3019                 reject += 6;
3020                 break;
3021
3022               case '!':
3023                 reject = 600;
3024                 break;
3025
3026               case '#':
3027                 /* Ignore rest of this alternative as far as
3028                    reloading is concerned.  */
3029                 do
3030                   p++;
3031                 while (*p && *p != ',');
3032                 len = 0;
3033                 break;
3034
3035               case '0':  case '1':  case '2':  case '3':  case '4':
3036               case '5':  case '6':  case '7':  case '8':  case '9':
3037                 m = strtoul (p, &end, 10);
3038                 p = end;
3039                 len = 0;
3040
3041                 this_alternative_matches[i] = m;
3042                 /* We are supposed to match a previous operand.
3043                    If we do, we win if that one did.
3044                    If we do not, count both of the operands as losers.
3045                    (This is too conservative, since most of the time
3046                    only a single reload insn will be needed to make
3047                    the two operands win.  As a result, this alternative
3048                    may be rejected when it is actually desirable.)  */
3049                 if ((swapped && (m != commutative || i != commutative + 1))
3050                     /* If we are matching as if two operands were swapped,
3051                        also pretend that operands_match had been computed
3052                        with swapped.
3053                        But if I is the second of those and C is the first,
3054                        don't exchange them, because operands_match is valid
3055                        only on one side of its diagonal.  */
3056                     ? (operands_match
3057                        [(m == commutative || m == commutative + 1)
3058                        ? 2 * commutative + 1 - m : m]
3059                        [(i == commutative || i == commutative + 1)
3060                        ? 2 * commutative + 1 - i : i])
3061                     : operands_match[m][i])
3062                   {
3063                     /* If we are matching a non-offsettable address where an
3064                        offsettable address was expected, then we must reject
3065                        this combination, because we can't reload it.  */
3066                     if (this_alternative_offmemok[m]
3067                         && MEM_P (recog_data.operand[m])
3068                         && this_alternative[m] == (int) NO_REGS
3069                         && ! this_alternative_win[m])
3070                       bad = 1;
3071
3072                     did_match = this_alternative_win[m];
3073                   }
3074                 else
3075                   {
3076                     /* Operands don't match.  */
3077                     rtx value;
3078                     int loc1, loc2;
3079                     /* Retroactively mark the operand we had to match
3080                        as a loser, if it wasn't already.  */
3081                     if (this_alternative_win[m])
3082                       losers++;
3083                     this_alternative_win[m] = 0;
3084                     if (this_alternative[m] == (int) NO_REGS)
3085                       bad = 1;
3086                     /* But count the pair only once in the total badness of
3087                        this alternative, if the pair can be a dummy reload.
3088                        The pointers in operand_loc are not swapped; swap
3089                        them by hand if necessary.  */
3090                     if (swapped && i == commutative)
3091                       loc1 = commutative + 1;
3092                     else if (swapped && i == commutative + 1)
3093                       loc1 = commutative;
3094                     else
3095                       loc1 = i;
3096                     if (swapped && m == commutative)
3097                       loc2 = commutative + 1;
3098                     else if (swapped && m == commutative + 1)
3099                       loc2 = commutative;
3100                     else
3101                       loc2 = m;
3102                     value
3103                       = find_dummy_reload (recog_data.operand[i],
3104                                            recog_data.operand[m],
3105                                            recog_data.operand_loc[loc1],
3106                                            recog_data.operand_loc[loc2],
3107                                            operand_mode[i], operand_mode[m],
3108                                            this_alternative[m], -1,
3109                                            this_alternative_earlyclobber[m]);
3110
3111                     if (value != 0)
3112                       losers--;
3113                   }
3114                 /* This can be fixed with reloads if the operand
3115                    we are supposed to match can be fixed with reloads.  */
3116                 badop = 0;
3117                 this_alternative[i] = this_alternative[m];
3118
3119                 /* If we have to reload this operand and some previous
3120                    operand also had to match the same thing as this
3121                    operand, we don't know how to do that.  So reject this
3122                    alternative.  */
3123                 if (! did_match || force_reload)
3124                   for (j = 0; j < i; j++)
3125                     if (this_alternative_matches[j]
3126                         == this_alternative_matches[i])
3127                       badop = 1;
3128                 break;
3129
3130               case 'p':
3131                 /* All necessary reloads for an address_operand
3132                    were handled in find_reloads_address.  */
3133                 this_alternative[i] = (int) MODE_BASE_REG_CLASS (VOIDmode);
3134                 win = 1;
3135                 badop = 0;
3136                 break;
3137
3138               case 'm':
3139                 if (force_reload)
3140                   break;
3141                 if (MEM_P (operand)
3142                     || (REG_P (operand)
3143                         && REGNO (operand) >= FIRST_PSEUDO_REGISTER
3144                         && reg_renumber[REGNO (operand)] < 0))
3145                   win = 1;
3146                 if (CONST_POOL_OK_P (operand))
3147                   badop = 0;
3148                 constmemok = 1;
3149                 break;
3150
3151               case '<':
3152                 if (MEM_P (operand)
3153                     && ! address_reloaded[i]
3154                     && (GET_CODE (XEXP (operand, 0)) == PRE_DEC
3155                         || GET_CODE (XEXP (operand, 0)) == POST_DEC))
3156                   win = 1;
3157                 break;
3158
3159               case '>':
3160                 if (MEM_P (operand)
3161                     && ! address_reloaded[i]
3162                     && (GET_CODE (XEXP (operand, 0)) == PRE_INC
3163                         || GET_CODE (XEXP (operand, 0)) == POST_INC))
3164                   win = 1;
3165                 break;
3166
3167                 /* Memory operand whose address is not offsettable.  */
3168               case 'V':
3169                 if (force_reload)
3170                   break;
3171                 if (MEM_P (operand)
3172                     && ! (ind_levels ? offsettable_memref_p (operand)
3173                           : offsettable_nonstrict_memref_p (operand))
3174                     /* Certain mem addresses will become offsettable
3175                        after they themselves are reloaded.  This is important;
3176                        we don't want our own handling of unoffsettables
3177                        to override the handling of reg_equiv_address.  */
3178                     && !(REG_P (XEXP (operand, 0))
3179                          && (ind_levels == 0
3180                              || reg_equiv_address[REGNO (XEXP (operand, 0))] != 0)))
3181                   win = 1;
3182                 break;
3183
3184                 /* Memory operand whose address is offsettable.  */
3185               case 'o':
3186                 if (force_reload)
3187                   break;
3188                 if ((MEM_P (operand)
3189                      /* If IND_LEVELS, find_reloads_address won't reload a
3190                         pseudo that didn't get a hard reg, so we have to
3191                         reject that case.  */
3192                      && ((ind_levels ? offsettable_memref_p (operand)
3193                           : offsettable_nonstrict_memref_p (operand))
3194                          /* A reloaded address is offsettable because it is now
3195                             just a simple register indirect.  */
3196                          || address_reloaded[i] == 1))
3197                     || (REG_P (operand)
3198                         && REGNO (operand) >= FIRST_PSEUDO_REGISTER
3199                         && reg_renumber[REGNO (operand)] < 0
3200                         /* If reg_equiv_address is nonzero, we will be
3201                            loading it into a register; hence it will be
3202                            offsettable, but we cannot say that reg_equiv_mem
3203                            is offsettable without checking.  */
3204                         && ((reg_equiv_mem[REGNO (operand)] != 0
3205                              && offsettable_memref_p (reg_equiv_mem[REGNO (operand)]))
3206                             || (reg_equiv_address[REGNO (operand)] != 0))))
3207                   win = 1;
3208                 if (CONST_POOL_OK_P (operand)
3209                     || MEM_P (operand))
3210                   badop = 0;
3211                 constmemok = 1;
3212                 offmemok = 1;
3213                 break;
3214
3215               case '&':
3216                 /* Output operand that is stored before the need for the
3217                    input operands (and their index registers) is over.  */
3218                 earlyclobber = 1, this_earlyclobber = 1;
3219                 break;
3220
3221               case 'E':
3222               case 'F':
3223                 if (GET_CODE (operand) == CONST_DOUBLE
3224                     || (GET_CODE (operand) == CONST_VECTOR
3225                         && (GET_MODE_CLASS (GET_MODE (operand))
3226                             == MODE_VECTOR_FLOAT)))
3227                   win = 1;
3228                 break;
3229
3230               case 'G':
3231               case 'H':
3232                 if (GET_CODE (operand) == CONST_DOUBLE
3233                     && CONST_DOUBLE_OK_FOR_CONSTRAINT_P (operand, c, p))
3234                   win = 1;
3235                 break;
3236
3237               case 's':
3238                 if (GET_CODE (operand) == CONST_INT
3239                     || (GET_CODE (operand) == CONST_DOUBLE
3240                         && GET_MODE (operand) == VOIDmode))
3241                   break;
3242               case 'i':
3243                 if (CONSTANT_P (operand)
3244                     && (! flag_pic || LEGITIMATE_PIC_OPERAND_P (operand)))
3245                   win = 1;
3246                 break;
3247
3248               case 'n':
3249                 if (GET_CODE (operand) == CONST_INT
3250                     || (GET_CODE (operand) == CONST_DOUBLE
3251                         && GET_MODE (operand) == VOIDmode))
3252                   win = 1;
3253                 break;
3254
3255               case 'I':
3256               case 'J':
3257               case 'K':
3258               case 'L':
3259               case 'M':
3260               case 'N':
3261               case 'O':
3262               case 'P':
3263                 if (GET_CODE (operand) == CONST_INT
3264                     && CONST_OK_FOR_CONSTRAINT_P (INTVAL (operand), c, p))
3265                   win = 1;
3266                 break;
3267
3268               case 'X':
3269                 win = 1;
3270                 break;
3271
3272               case 'g':
3273                 if (! force_reload
3274                     /* A PLUS is never a valid operand, but reload can make
3275                        it from a register when eliminating registers.  */
3276                     && GET_CODE (operand) != PLUS
3277                     /* A SCRATCH is not a valid operand.  */
3278                     && GET_CODE (operand) != SCRATCH
3279                     && (! CONSTANT_P (operand)
3280                         || ! flag_pic
3281                         || LEGITIMATE_PIC_OPERAND_P (operand))
3282                     && (GENERAL_REGS == ALL_REGS
3283                         || !REG_P (operand)
3284                         || (REGNO (operand) >= FIRST_PSEUDO_REGISTER
3285                             && reg_renumber[REGNO (operand)] < 0)))
3286                   win = 1;
3287                 /* Drop through into 'r' case.  */
3288
3289               case 'r':
3290                 this_alternative[i]
3291                   = (int) reg_class_subunion[this_alternative[i]][(int) GENERAL_REGS];
3292                 goto reg;
3293
3294               default:
3295                 if (REG_CLASS_FROM_CONSTRAINT (c, p) == NO_REGS)
3296                   {
3297 #ifdef EXTRA_CONSTRAINT_STR
3298                     if (EXTRA_MEMORY_CONSTRAINT (c, p))
3299                       {
3300                         if (force_reload)
3301                           break;
3302                         if (EXTRA_CONSTRAINT_STR (operand, c, p))
3303                           win = 1;
3304                         /* If the address was already reloaded,
3305                            we win as well.  */
3306                         else if (MEM_P (operand)
3307                                  && address_reloaded[i] == 1)
3308                           win = 1;
3309                         /* Likewise if the address will be reloaded because
3310                            reg_equiv_address is nonzero.  For reg_equiv_mem
3311                            we have to check.  */
3312                         else if (REG_P (operand)
3313                                  && REGNO (operand) >= FIRST_PSEUDO_REGISTER
3314                                  && reg_renumber[REGNO (operand)] < 0
3315                                  && ((reg_equiv_mem[REGNO (operand)] != 0
3316                                       && EXTRA_CONSTRAINT_STR (reg_equiv_mem[REGNO (operand)], c, p))
3317                                      || (reg_equiv_address[REGNO (operand)] != 0)))
3318                           win = 1;
3319
3320                         /* If we didn't already win, we can reload
3321                            constants via force_const_mem, and other
3322                            MEMs by reloading the address like for 'o'.  */
3323                         if (CONST_POOL_OK_P (operand)
3324                             || MEM_P (operand))
3325                           badop = 0;
3326                         constmemok = 1;
3327                         offmemok = 1;
3328                         break;
3329                       }
3330                     if (EXTRA_ADDRESS_CONSTRAINT (c, p))
3331                       {
3332                         if (EXTRA_CONSTRAINT_STR (operand, c, p))
3333                           win = 1;
3334
3335                         /* If we didn't already win, we can reload
3336                            the address into a base register.  */
3337                         this_alternative[i] = (int) MODE_BASE_REG_CLASS (VOIDmode);
3338                         badop = 0;
3339                         break;
3340                       }
3341
3342                     if (EXTRA_CONSTRAINT_STR (operand, c, p))
3343                       win = 1;
3344 #endif
3345                     break;
3346                   }
3347
3348                 this_alternative[i]
3349                   = (int) (reg_class_subunion
3350                            [this_alternative[i]]
3351                            [(int) REG_CLASS_FROM_CONSTRAINT (c, p)]);
3352               reg:
3353                 if (GET_MODE (operand) == BLKmode)
3354                   break;
3355                 winreg = 1;
3356                 if (REG_P (operand)
3357                     && reg_fits_class_p (operand, this_alternative[i],
3358                                          offset, GET_MODE (recog_data.operand[i])))
3359                   win = 1;
3360                 break;
3361               }
3362           while ((p += len), c);
3363
3364           constraints[i] = p;
3365
3366           /* If this operand could be handled with a reg,
3367              and some reg is allowed, then this operand can be handled.  */
3368           if (winreg && this_alternative[i] != (int) NO_REGS)
3369             badop = 0;
3370
3371           /* Record which operands fit this alternative.  */
3372           this_alternative_earlyclobber[i] = earlyclobber;
3373           if (win && ! force_reload)
3374             this_alternative_win[i] = 1;
3375           else if (did_match && ! force_reload)
3376             this_alternative_match_win[i] = 1;
3377           else
3378             {
3379               int const_to_mem = 0;
3380
3381               this_alternative_offmemok[i] = offmemok;
3382               losers++;
3383               if (badop)
3384                 bad = 1;
3385               /* Alternative loses if it has no regs for a reg operand.  */
3386               if (REG_P (operand)
3387                   && this_alternative[i] == (int) NO_REGS
3388                   && this_alternative_matches[i] < 0)
3389                 bad = 1;
3390
3391               /* If this is a constant that is reloaded into the desired
3392                  class by copying it to memory first, count that as another
3393                  reload.  This is consistent with other code and is
3394                  required to avoid choosing another alternative when
3395                  the constant is moved into memory by this function on
3396                  an early reload pass.  Note that the test here is
3397                  precisely the same as in the code below that calls
3398                  force_const_mem.  */
3399               if (CONST_POOL_OK_P (operand)
3400                   && ((PREFERRED_RELOAD_CLASS (operand,
3401                                                (enum reg_class) this_alternative[i])
3402                        == NO_REGS)
3403                       || no_input_reloads)
3404                   && operand_mode[i] != VOIDmode)
3405                 {
3406                   const_to_mem = 1;
3407                   if (this_alternative[i] != (int) NO_REGS)
3408                     losers++;
3409                 }
3410
3411               /* If we can't reload this value at all, reject this
3412                  alternative.  Note that we could also lose due to
3413                  LIMIT_RELOAD_RELOAD_CLASS, but we don't check that
3414                  here.  */
3415
3416               if (! CONSTANT_P (operand)
3417                   && (enum reg_class) this_alternative[i] != NO_REGS
3418                   && (PREFERRED_RELOAD_CLASS (operand,
3419                                               (enum reg_class) this_alternative[i])
3420                       == NO_REGS))
3421                 bad = 1;
3422
3423               /* Alternative loses if it requires a type of reload not
3424                  permitted for this insn.  We can always reload SCRATCH
3425                  and objects with a REG_UNUSED note.  */
3426               else if (GET_CODE (operand) != SCRATCH
3427                        && modified[i] != RELOAD_READ && no_output_reloads
3428                        && ! find_reg_note (insn, REG_UNUSED, operand))
3429                 bad = 1;
3430               else if (modified[i] != RELOAD_WRITE && no_input_reloads
3431                        && ! const_to_mem)
3432                 bad = 1;
3433
3434               /* We prefer to reload pseudos over reloading other things,
3435                  since such reloads may be able to be eliminated later.
3436                  If we are reloading a SCRATCH, we won't be generating any
3437                  insns, just using a register, so it is also preferred.
3438                  So bump REJECT in other cases.  Don't do this in the
3439                  case where we are forcing a constant into memory and
3440                  it will then win since we don't want to have a different
3441                  alternative match then.  */
3442               if (! (REG_P (operand)
3443                      && REGNO (operand) >= FIRST_PSEUDO_REGISTER)
3444                   && GET_CODE (operand) != SCRATCH
3445                   && ! (const_to_mem && constmemok))
3446                 reject += 2;
3447
3448               /* Input reloads can be inherited more often than output
3449                  reloads can be removed, so penalize output reloads.  */
3450               if (operand_type[i] != RELOAD_FOR_INPUT
3451                   && GET_CODE (operand) != SCRATCH)
3452                 reject++;
3453             }
3454
3455           /* If this operand is a pseudo register that didn't get a hard
3456              reg and this alternative accepts some register, see if the
3457              class that we want is a subset of the preferred class for this
3458              register.  If not, but it intersects that class, use the
3459              preferred class instead.  If it does not intersect the preferred
3460              class, show that usage of this alternative should be discouraged;
3461              it will be discouraged more still if the register is `preferred
3462              or nothing'.  We do this because it increases the chance of
3463              reusing our spill register in a later insn and avoiding a pair
3464              of memory stores and loads.
3465
3466              Don't bother with this if this alternative will accept this
3467              operand.
3468
3469              Don't do this for a multiword operand, since it is only a
3470              small win and has the risk of requiring more spill registers,
3471              which could cause a large loss.
3472
3473              Don't do this if the preferred class has only one register
3474              because we might otherwise exhaust the class.  */
3475
3476           if (! win && ! did_match
3477               && this_alternative[i] != (int) NO_REGS
3478               && GET_MODE_SIZE (operand_mode[i]) <= UNITS_PER_WORD
3479               && reg_class_size[(int) preferred_class[i]] > 1)
3480             {
3481               if (! reg_class_subset_p (this_alternative[i],
3482                                         preferred_class[i]))
3483                 {
3484                   /* Since we don't have a way of forming the intersection,
3485                      we just do something special if the preferred class
3486                      is a subset of the class we have; that's the most
3487                      common case anyway.  */
3488                   if (reg_class_subset_p (preferred_class[i],
3489                                           this_alternative[i]))
3490                     this_alternative[i] = (int) preferred_class[i];
3491                   else
3492                     reject += (2 + 2 * pref_or_nothing[i]);
3493                 }
3494             }
3495         }
3496
3497       /* Now see if any output operands that are marked "earlyclobber"
3498          in this alternative conflict with any input operands
3499          or any memory addresses.  */
3500
3501       for (i = 0; i < noperands; i++)
3502         if (this_alternative_earlyclobber[i]
3503             && (this_alternative_win[i] || this_alternative_match_win[i]))
3504           {
3505             struct decomposition early_data;
3506
3507             early_data = decompose (recog_data.operand[i]);
3508
3509             gcc_assert (modified[i] != RELOAD_READ);
3510
3511             if (this_alternative[i] == NO_REGS)
3512               {
3513                 this_alternative_earlyclobber[i] = 0;
3514                 gcc_assert (this_insn_is_asm);
3515                 error_for_asm (this_insn,
3516                                 "`&' constraint used with no register class");
3517               }
3518
3519             for (j = 0; j < noperands; j++)
3520               /* Is this an input operand or a memory ref?  */
3521               if ((MEM_P (recog_data.operand[j])
3522                    || modified[j] != RELOAD_WRITE)
3523                   && j != i
3524                   /* Ignore things like match_operator operands.  */
3525                   && *recog_data.constraints[j] != 0
3526                   /* Don't count an input operand that is constrained to match
3527                      the early clobber operand.  */
3528                   && ! (this_alternative_matches[j] == i
3529                         && rtx_equal_p (recog_data.operand[i],
3530                                         recog_data.operand[j]))
3531                   /* Is it altered by storing the earlyclobber operand?  */
3532                   && !immune_p (recog_data.operand[j], recog_data.operand[i],
3533                                 early_data))
3534                 {
3535                   /* If the output is in a single-reg class,
3536                      it's costly to reload it, so reload the input instead.  */
3537                   if (reg_class_size[this_alternative[i]] == 1
3538                       && (REG_P (recog_data.operand[j])
3539                           || GET_CODE (recog_data.operand[j]) == SUBREG))
3540                     {
3541                       losers++;
3542                       this_alternative_win[j] = 0;
3543                       this_alternative_match_win[j] = 0;
3544                     }
3545                   else
3546                     break;
3547                 }
3548             /* If an earlyclobber operand conflicts with something,
3549                it must be reloaded, so request this and count the cost.  */
3550             if (j != noperands)
3551               {
3552                 losers++;
3553                 this_alternative_win[i] = 0;
3554                 this_alternative_match_win[j] = 0;
3555                 for (j = 0; j < noperands; j++)
3556                   if (this_alternative_matches[j] == i
3557                       && this_alternative_match_win[j])
3558                     {
3559                       this_alternative_win[j] = 0;
3560                       this_alternative_match_win[j] = 0;
3561                       losers++;
3562                     }
3563               }
3564           }
3565
3566       /* If one alternative accepts all the operands, no reload required,
3567          choose that alternative; don't consider the remaining ones.  */
3568       if (losers == 0)
3569         {
3570           /* Unswap these so that they are never swapped at `finish'.  */
3571           if (commutative >= 0)
3572             {
3573               recog_data.operand[commutative] = substed_operand[commutative];
3574               recog_data.operand[commutative + 1]
3575                 = substed_operand[commutative + 1];
3576             }
3577           for (i = 0; i < noperands; i++)
3578             {
3579               goal_alternative_win[i] = this_alternative_win[i];
3580               goal_alternative_match_win[i] = this_alternative_match_win[i];
3581               goal_alternative[i] = this_alternative[i];
3582               goal_alternative_offmemok[i] = this_alternative_offmemok[i];
3583               goal_alternative_matches[i] = this_alternative_matches[i];
3584               goal_alternative_earlyclobber[i]
3585                 = this_alternative_earlyclobber[i];
3586             }
3587           goal_alternative_number = this_alternative_number;
3588           goal_alternative_swapped = swapped;
3589           goal_earlyclobber = this_earlyclobber;
3590           goto finish;
3591         }
3592
3593       /* REJECT, set by the ! and ? constraint characters and when a register
3594          would be reloaded into a non-preferred class, discourages the use of
3595          this alternative for a reload goal.  REJECT is incremented by six
3596          for each ? and two for each non-preferred class.  */
3597       losers = losers * 6 + reject;
3598
3599       /* If this alternative can be made to work by reloading,
3600          and it needs less reloading than the others checked so far,
3601          record it as the chosen goal for reloading.  */
3602       if (! bad && best > losers)
3603         {
3604           for (i = 0; i < noperands; i++)
3605             {
3606               goal_alternative[i] = this_alternative[i];
3607               goal_alternative_win[i] = this_alternative_win[i];
3608               goal_alternative_match_win[i] = this_alternative_match_win[i];
3609               goal_alternative_offmemok[i] = this_alternative_offmemok[i];
3610               goal_alternative_matches[i] = this_alternative_matches[i];
3611               goal_alternative_earlyclobber[i]
3612                 = this_alternative_earlyclobber[i];
3613             }
3614           goal_alternative_swapped = swapped;
3615           best = losers;
3616           goal_alternative_number = this_alternative_number;
3617           goal_earlyclobber = this_earlyclobber;
3618         }
3619     }
3620
3621   /* If insn is commutative (it's safe to exchange a certain pair of operands)
3622      then we need to try each alternative twice,
3623      the second time matching those two operands
3624      as if we had exchanged them.
3625      To do this, really exchange them in operands.
3626
3627      If we have just tried the alternatives the second time,
3628      return operands to normal and drop through.  */
3629
3630   if (commutative >= 0)
3631     {
3632       swapped = !swapped;
3633       if (swapped)
3634         {
3635           enum reg_class tclass;
3636           int t;
3637
3638           recog_data.operand[commutative] = substed_operand[commutative + 1];
3639           recog_data.operand[commutative + 1] = substed_operand[commutative];
3640           /* Swap the duplicates too.  */
3641           for (i = 0; i < recog_data.n_dups; i++)
3642             if (recog_data.dup_num[i] == commutative
3643                 || recog_data.dup_num[i] == commutative + 1)
3644               *recog_data.dup_loc[i]
3645                  = recog_data.operand[(int) recog_data.dup_num[i]];
3646
3647           tclass = preferred_class[commutative];
3648           preferred_class[commutative] = preferred_class[commutative + 1];
3649           preferred_class[commutative + 1] = tclass;
3650
3651           t = pref_or_nothing[commutative];
3652           pref_or_nothing[commutative] = pref_or_nothing[commutative + 1];
3653           pref_or_nothing[commutative + 1] = t;
3654
3655           memcpy (constraints, recog_data.constraints,
3656                   noperands * sizeof (char *));
3657           goto try_swapped;
3658         }
3659       else
3660         {
3661           recog_data.operand[commutative] = substed_operand[commutative];
3662           recog_data.operand[commutative + 1]
3663             = substed_operand[commutative + 1];
3664           /* Unswap the duplicates too.  */
3665           for (i = 0; i < recog_data.n_dups; i++)
3666             if (recog_data.dup_num[i] == commutative
3667                 || recog_data.dup_num[i] == commutative + 1)
3668               *recog_data.dup_loc[i]
3669                  = recog_data.operand[(int) recog_data.dup_num[i]];
3670         }
3671     }
3672
3673   /* The operands don't meet the constraints.
3674      goal_alternative describes the alternative
3675      that we could reach by reloading the fewest operands.
3676      Reload so as to fit it.  */
3677
3678   if (best == MAX_RECOG_OPERANDS * 2 + 600)
3679     {
3680       /* No alternative works with reloads??  */
3681       if (insn_code_number >= 0)
3682         fatal_insn ("unable to generate reloads for:", insn);
3683       error_for_asm (insn, "inconsistent operand constraints in an `asm'");
3684       /* Avoid further trouble with this insn.  */
3685       PATTERN (insn) = gen_rtx_USE (VOIDmode, const0_rtx);
3686       n_reloads = 0;
3687       return 0;
3688     }
3689
3690   /* Jump to `finish' from above if all operands are valid already.
3691      In that case, goal_alternative_win is all 1.  */
3692  finish:
3693
3694   /* Right now, for any pair of operands I and J that are required to match,
3695      with I < J,
3696      goal_alternative_matches[J] is I.
3697      Set up goal_alternative_matched as the inverse function:
3698      goal_alternative_matched[I] = J.  */
3699
3700   for (i = 0; i < noperands; i++)
3701     goal_alternative_matched[i] = -1;
3702
3703   for (i = 0; i < noperands; i++)
3704     if (! goal_alternative_win[i]
3705         && goal_alternative_matches[i] >= 0)
3706       goal_alternative_matched[goal_alternative_matches[i]] = i;
3707
3708   for (i = 0; i < noperands; i++)
3709     goal_alternative_win[i] |= goal_alternative_match_win[i];
3710
3711   /* If the best alternative is with operands 1 and 2 swapped,
3712      consider them swapped before reporting the reloads.  Update the
3713      operand numbers of any reloads already pushed.  */
3714
3715   if (goal_alternative_swapped)
3716     {
3717       rtx tem;
3718
3719       tem = substed_operand[commutative];
3720       substed_operand[commutative] = substed_operand[commutative + 1];
3721       substed_operand[commutative + 1] = tem;
3722       tem = recog_data.operand[commutative];
3723       recog_data.operand[commutative] = recog_data.operand[commutative + 1];
3724       recog_data.operand[commutative + 1] = tem;
3725       tem = *recog_data.operand_loc[commutative];
3726       *recog_data.operand_loc[commutative]
3727         = *recog_data.operand_loc[commutative + 1];
3728       *recog_data.operand_loc[commutative + 1] = tem;
3729
3730       for (i = 0; i < n_reloads; i++)
3731         {
3732           if (rld[i].opnum == commutative)
3733             rld[i].opnum = commutative + 1;
3734           else if (rld[i].opnum == commutative + 1)
3735             rld[i].opnum = commutative;
3736         }
3737     }
3738
3739   for (i = 0; i < noperands; i++)
3740     {
3741       operand_reloadnum[i] = -1;
3742
3743       /* If this is an earlyclobber operand, we need to widen the scope.
3744          The reload must remain valid from the start of the insn being
3745          reloaded until after the operand is stored into its destination.
3746          We approximate this with RELOAD_OTHER even though we know that we
3747          do not conflict with RELOAD_FOR_INPUT_ADDRESS reloads.
3748
3749          One special case that is worth checking is when we have an
3750          output that is earlyclobber but isn't used past the insn (typically
3751          a SCRATCH).  In this case, we only need have the reload live
3752          through the insn itself, but not for any of our input or output
3753          reloads.
3754          But we must not accidentally narrow the scope of an existing
3755          RELOAD_OTHER reload - leave these alone.
3756
3757          In any case, anything needed to address this operand can remain
3758          however they were previously categorized.  */
3759
3760       if (goal_alternative_earlyclobber[i] && operand_type[i] != RELOAD_OTHER)
3761         operand_type[i]
3762           = (find_reg_note (insn, REG_UNUSED, recog_data.operand[i])
3763              ? RELOAD_FOR_INSN : RELOAD_OTHER);
3764     }
3765
3766   /* Any constants that aren't allowed and can't be reloaded
3767      into registers are here changed into memory references.  */
3768   for (i = 0; i < noperands; i++)
3769     if (! goal_alternative_win[i]
3770         && CONST_POOL_OK_P (recog_data.operand[i])
3771         && ((PREFERRED_RELOAD_CLASS (recog_data.operand[i],
3772                                      (enum reg_class) goal_alternative[i])
3773              == NO_REGS)
3774             || no_input_reloads)
3775         && operand_mode[i] != VOIDmode)
3776       {
3777         substed_operand[i] = recog_data.operand[i]
3778           = find_reloads_toplev (force_const_mem (operand_mode[i],
3779                                                   recog_data.operand[i]),
3780                                  i, address_type[i], ind_levels, 0, insn,
3781                                  NULL);
3782         if (alternative_allows_memconst (recog_data.constraints[i],
3783                                          goal_alternative_number))
3784           goal_alternative_win[i] = 1;
3785       }
3786
3787   /* Record the values of the earlyclobber operands for the caller.  */
3788   if (goal_earlyclobber)
3789     for (i = 0; i < noperands; i++)
3790       if (goal_alternative_earlyclobber[i])
3791         reload_earlyclobbers[n_earlyclobbers++] = recog_data.operand[i];
3792
3793   /* Now record reloads for all the operands that need them.  */
3794   for (i = 0; i < noperands; i++)
3795     if (! goal_alternative_win[i])
3796       {
3797         /* Operands that match previous ones have already been handled.  */
3798         if (goal_alternative_matches[i] >= 0)
3799           ;
3800         /* Handle an operand with a nonoffsettable address
3801            appearing where an offsettable address will do
3802            by reloading the address into a base register.
3803
3804            ??? We can also do this when the operand is a register and
3805            reg_equiv_mem is not offsettable, but this is a bit tricky,
3806            so we don't bother with it.  It may not be worth doing.  */
3807         else if (goal_alternative_matched[i] == -1
3808                  && goal_alternative_offmemok[i]
3809                  && MEM_P (recog_data.operand[i]))
3810           {
3811             operand_reloadnum[i]
3812               = push_reload (XEXP (recog_data.operand[i], 0), NULL_RTX,
3813                              &XEXP (recog_data.operand[i], 0), (rtx*) 0,
3814                              MODE_BASE_REG_CLASS (VOIDmode),
3815                              GET_MODE (XEXP (recog_data.operand[i], 0)),
3816                              VOIDmode, 0, 0, i, RELOAD_FOR_INPUT);
3817             rld[operand_reloadnum[i]].inc
3818               = GET_MODE_SIZE (GET_MODE (recog_data.operand[i]));
3819
3820             /* If this operand is an output, we will have made any
3821                reloads for its address as RELOAD_FOR_OUTPUT_ADDRESS, but
3822                now we are treating part of the operand as an input, so
3823                we must change these to RELOAD_FOR_INPUT_ADDRESS.  */
3824
3825             if (modified[i] == RELOAD_WRITE)
3826               {
3827                 for (j = 0; j < n_reloads; j++)
3828                   {
3829                     if (rld[j].opnum == i)
3830                       {
3831                         if (rld[j].when_needed == RELOAD_FOR_OUTPUT_ADDRESS)
3832                           rld[j].when_needed = RELOAD_FOR_INPUT_ADDRESS;
3833                         else if (rld[j].when_needed
3834                                  == RELOAD_FOR_OUTADDR_ADDRESS)
3835                           rld[j].when_needed = RELOAD_FOR_INPADDR_ADDRESS;
3836                       }
3837                   }
3838               }
3839           }
3840         else if (goal_alternative_matched[i] == -1)
3841           {
3842             operand_reloadnum[i]
3843               = push_reload ((modified[i] != RELOAD_WRITE
3844                               ? recog_data.operand[i] : 0),
3845                              (modified[i] != RELOAD_READ
3846                               ? recog_data.operand[i] : 0),
3847                              (modified[i] != RELOAD_WRITE
3848                               ? recog_data.operand_loc[i] : 0),
3849                              (modified[i] != RELOAD_READ
3850                               ? recog_data.operand_loc[i] : 0),
3851                              (enum reg_class) goal_alternative[i],
3852                              (modified[i] == RELOAD_WRITE
3853                               ? VOIDmode : operand_mode[i]),
3854                              (modified[i] == RELOAD_READ
3855                               ? VOIDmode : operand_mode[i]),
3856                              (insn_code_number < 0 ? 0
3857                               : insn_data[insn_code_number].operand[i].strict_low),
3858                              0, i, operand_type[i]);
3859           }
3860         /* In a matching pair of operands, one must be input only
3861            and the other must be output only.
3862            Pass the input operand as IN and the other as OUT.  */
3863         else if (modified[i] == RELOAD_READ
3864                  && modified[goal_alternative_matched[i]] == RELOAD_WRITE)
3865           {
3866             operand_reloadnum[i]
3867               = push_reload (recog_data.operand[i],
3868                              recog_data.operand[goal_alternative_matched[i]],
3869                              recog_data.operand_loc[i],
3870                              recog_data.operand_loc[goal_alternative_matched[i]],
3871                              (enum reg_class) goal_alternative[i],
3872                              operand_mode[i],
3873                              operand_mode[goal_alternative_matched[i]],
3874                              0, 0, i, RELOAD_OTHER);
3875             operand_reloadnum[goal_alternative_matched[i]] = output_reloadnum;
3876           }
3877         else if (modified[i] == RELOAD_WRITE
3878                  && modified[goal_alternative_matched[i]] == RELOAD_READ)
3879           {
3880             operand_reloadnum[goal_alternative_matched[i]]
3881               = push_reload (recog_data.operand[goal_alternative_matched[i]],
3882                              recog_data.operand[i],
3883                              recog_data.operand_loc[goal_alternative_matched[i]],
3884                              recog_data.operand_loc[i],
3885                              (enum reg_class) goal_alternative[i],
3886                              operand_mode[goal_alternative_matched[i]],
3887                              operand_mode[i],
3888                              0, 0, i, RELOAD_OTHER);
3889             operand_reloadnum[i] = output_reloadnum;
3890           }
3891         else
3892           {
3893             gcc_assert (insn_code_number < 0);
3894             error_for_asm (insn, "inconsistent operand constraints in an `asm'");
3895             /* Avoid further trouble with this insn.  */
3896             PATTERN (insn) = gen_rtx_USE (VOIDmode, const0_rtx);
3897             n_reloads = 0;
3898             return 0;
3899           }
3900       }
3901     else if (goal_alternative_matched[i] < 0
3902              && goal_alternative_matches[i] < 0
3903              && address_operand_reloaded[i] != 1
3904              && optimize)
3905       {
3906         /* For each non-matching operand that's a MEM or a pseudo-register
3907            that didn't get a hard register, make an optional reload.
3908            This may get done even if the insn needs no reloads otherwise.  */
3909
3910         rtx operand = recog_data.operand[i];
3911
3912         while (GET_CODE (operand) == SUBREG)
3913           operand = SUBREG_REG (operand);
3914         if ((MEM_P (operand)
3915              || (REG_P (operand)
3916                  && REGNO (operand) >= FIRST_PSEUDO_REGISTER))
3917             /* If this is only for an output, the optional reload would not
3918                actually cause us to use a register now, just note that
3919                something is stored here.  */
3920             && ((enum reg_class) goal_alternative[i] != NO_REGS
3921                 || modified[i] == RELOAD_WRITE)
3922             && ! no_input_reloads
3923             /* An optional output reload might allow to delete INSN later.
3924                We mustn't make in-out reloads on insns that are not permitted
3925                output reloads.
3926                If this is an asm, we can't delete it; we must not even call
3927                push_reload for an optional output reload in this case,
3928                because we can't be sure that the constraint allows a register,
3929                and push_reload verifies the constraints for asms.  */
3930             && (modified[i] == RELOAD_READ
3931                 || (! no_output_reloads && ! this_insn_is_asm)))
3932           operand_reloadnum[i]
3933             = push_reload ((modified[i] != RELOAD_WRITE
3934                             ? recog_data.operand[i] : 0),
3935                            (modified[i] != RELOAD_READ
3936                             ? recog_data.operand[i] : 0),
3937                            (modified[i] != RELOAD_WRITE
3938                             ? recog_data.operand_loc[i] : 0),
3939                            (modified[i] != RELOAD_READ
3940                             ? recog_data.operand_loc[i] : 0),
3941                            (enum reg_class) goal_alternative[i],
3942                            (modified[i] == RELOAD_WRITE
3943                             ? VOIDmode : operand_mode[i]),
3944                            (modified[i] == RELOAD_READ
3945                             ? VOIDmode : operand_mode[i]),
3946                            (insn_code_number < 0 ? 0
3947                             : insn_data[insn_code_number].operand[i].strict_low),
3948                            1, i, operand_type[i]);
3949         /* If a memory reference remains (either as a MEM or a pseudo that
3950            did not get a hard register), yet we can't make an optional
3951            reload, check if this is actually a pseudo register reference;
3952            we then need to emit a USE and/or a CLOBBER so that reload
3953            inheritance will do the right thing.  */
3954         else if (replace
3955                  && (MEM_P (operand)
3956                      || (REG_P (operand)
3957                          && REGNO (operand) >= FIRST_PSEUDO_REGISTER
3958                          && reg_renumber [REGNO (operand)] < 0)))
3959           {
3960             operand = *recog_data.operand_loc[i];
3961
3962             while (GET_CODE (operand) == SUBREG)
3963               operand = SUBREG_REG (operand);
3964             if (REG_P (operand))
3965               {
3966                 if (modified[i] != RELOAD_WRITE)
3967                   /* We mark the USE with QImode so that we recognize
3968                      it as one that can be safely deleted at the end
3969                      of reload.  */
3970                   PUT_MODE (emit_insn_before (gen_rtx_USE (VOIDmode, operand),
3971                                               insn), QImode);
3972                 if (modified[i] != RELOAD_READ)
3973                   emit_insn_after (gen_rtx_CLOBBER (VOIDmode, operand), insn);
3974               }
3975           }
3976       }
3977     else if (goal_alternative_matches[i] >= 0
3978              && goal_alternative_win[goal_alternative_matches[i]]
3979              && modified[i] == RELOAD_READ
3980              && modified[goal_alternative_matches[i]] == RELOAD_WRITE
3981              && ! no_input_reloads && ! no_output_reloads
3982              && optimize)
3983       {
3984         /* Similarly, make an optional reload for a pair of matching
3985            objects that are in MEM or a pseudo that didn't get a hard reg.  */
3986
3987         rtx operand = recog_data.operand[i];
3988
3989         while (GET_CODE (operand) == SUBREG)
3990           operand = SUBREG_REG (operand);
3991         if ((MEM_P (operand)
3992              || (REG_P (operand)
3993                  && REGNO (operand) >= FIRST_PSEUDO_REGISTER))
3994             && ((enum reg_class) goal_alternative[goal_alternative_matches[i]]
3995                 != NO_REGS))
3996           operand_reloadnum[i] = operand_reloadnum[goal_alternative_matches[i]]
3997             = push_reload (recog_data.operand[goal_alternative_matches[i]],
3998                            recog_data.operand[i],
3999                            recog_data.operand_loc[goal_alternative_matches[i]],
4000                            recog_data.operand_loc[i],
4001                            (enum reg_class) goal_alternative[goal_alternative_matches[i]],
4002                            operand_mode[goal_alternative_matches[i]],
4003                            operand_mode[i],
4004                            0, 1, goal_alternative_matches[i], RELOAD_OTHER);
4005       }
4006
4007   /* Perform whatever substitutions on the operands we are supposed
4008      to make due to commutativity or replacement of registers
4009      with equivalent constants or memory slots.  */
4010
4011   for (i = 0; i < noperands; i++)
4012     {
4013       /* We only do this on the last pass through reload, because it is
4014          possible for some data (like reg_equiv_address) to be changed during
4015          later passes.  Moreover, we loose the opportunity to get a useful
4016          reload_{in,out}_reg when we do these replacements.  */
4017
4018       if (replace)
4019         {
4020           rtx substitution = substed_operand[i];
4021
4022           *recog_data.operand_loc[i] = substitution;
4023
4024           /* If we're replacing an operand with a LABEL_REF, we need
4025              to make sure that there's a REG_LABEL note attached to
4026              this instruction.  */
4027           if (!JUMP_P (insn)
4028               && GET_CODE (substitution) == LABEL_REF
4029               && !find_reg_note (insn, REG_LABEL, XEXP (substitution, 0)))
4030             REG_NOTES (insn) = gen_rtx_INSN_LIST (REG_LABEL,
4031                                                   XEXP (substitution, 0),
4032                                                   REG_NOTES (insn));
4033         }
4034       else
4035         retval |= (substed_operand[i] != *recog_data.operand_loc[i]);
4036     }
4037
4038   /* If this insn pattern contains any MATCH_DUP's, make sure that
4039      they will be substituted if the operands they match are substituted.
4040      Also do now any substitutions we already did on the operands.
4041
4042      Don't do this if we aren't making replacements because we might be
4043      propagating things allocated by frame pointer elimination into places
4044      it doesn't expect.  */
4045
4046   if (insn_code_number >= 0 && replace)
4047     for (i = insn_data[insn_code_number].n_dups - 1; i >= 0; i--)
4048       {
4049         int opno = recog_data.dup_num[i];
4050         *recog_data.dup_loc[i] = *recog_data.operand_loc[opno];
4051         dup_replacements (recog_data.dup_loc[i], recog_data.operand_loc[opno]);
4052       }
4053
4054 #if 0
4055   /* This loses because reloading of prior insns can invalidate the equivalence
4056      (or at least find_equiv_reg isn't smart enough to find it any more),
4057      causing this insn to need more reload regs than it needed before.
4058      It may be too late to make the reload regs available.
4059      Now this optimization is done safely in choose_reload_regs.  */
4060
4061   /* For each reload of a reg into some other class of reg,
4062      search for an existing equivalent reg (same value now) in the right class.
4063      We can use it as long as we don't need to change its contents.  */
4064   for (i = 0; i < n_reloads; i++)
4065     if (rld[i].reg_rtx == 0
4066         && rld[i].in != 0
4067         && REG_P (rld[i].in)
4068         && rld[i].out == 0)
4069       {
4070         rld[i].reg_rtx
4071           = find_equiv_reg (rld[i].in, insn, rld[i].class, -1,
4072                             static_reload_reg_p, 0, rld[i].inmode);
4073         /* Prevent generation of insn to load the value
4074            because the one we found already has the value.  */
4075         if (rld[i].reg_rtx)
4076           rld[i].in = rld[i].reg_rtx;
4077       }
4078 #endif
4079
4080   /* Perhaps an output reload can be combined with another
4081      to reduce needs by one.  */
4082   if (!goal_earlyclobber)
4083     combine_reloads ();
4084
4085   /* If we have a pair of reloads for parts of an address, they are reloading
4086      the same object, the operands themselves were not reloaded, and they
4087      are for two operands that are supposed to match, merge the reloads and
4088      change the type of the surviving reload to RELOAD_FOR_OPERAND_ADDRESS.  */
4089
4090   for (i = 0; i < n_reloads; i++)
4091     {
4092       int k;
4093
4094       for (j = i + 1; j < n_reloads; j++)
4095         if ((rld[i].when_needed == RELOAD_FOR_INPUT_ADDRESS
4096              || rld[i].when_needed == RELOAD_FOR_OUTPUT_ADDRESS
4097              || rld[i].when_needed == RELOAD_FOR_INPADDR_ADDRESS
4098              || rld[i].when_needed == RELOAD_FOR_OUTADDR_ADDRESS)
4099             && (rld[j].when_needed == RELOAD_FOR_INPUT_ADDRESS
4100                 || rld[j].when_needed == RELOAD_FOR_OUTPUT_ADDRESS
4101                 || rld[j].when_needed == RELOAD_FOR_INPADDR_ADDRESS
4102                 || rld[j].when_needed == RELOAD_FOR_OUTADDR_ADDRESS)
4103             && rtx_equal_p (rld[i].in, rld[j].in)
4104             && (operand_reloadnum[rld[i].opnum] < 0
4105                 || rld[operand_reloadnum[rld[i].opnum]].optional)
4106             && (operand_reloadnum[rld[j].opnum] < 0
4107                 || rld[operand_reloadnum[rld[j].opnum]].optional)
4108             && (goal_alternative_matches[rld[i].opnum] == rld[j].opnum
4109                 || (goal_alternative_matches[rld[j].opnum]
4110                     == rld[i].opnum)))
4111           {
4112             for (k = 0; k < n_replacements; k++)
4113               if (replacements[k].what == j)
4114                 replacements[k].what = i;
4115
4116             if (rld[i].when_needed == RELOAD_FOR_INPADDR_ADDRESS
4117                 || rld[i].when_needed == RELOAD_FOR_OUTADDR_ADDRESS)
4118               rld[i].when_needed = RELOAD_FOR_OPADDR_ADDR;
4119             else
4120               rld[i].when_needed = RELOAD_FOR_OPERAND_ADDRESS;
4121             rld[j].in = 0;
4122           }
4123     }
4124
4125   /* Scan all the reloads and update their type.
4126      If a reload is for the address of an operand and we didn't reload
4127      that operand, change the type.  Similarly, change the operand number
4128      of a reload when two operands match.  If a reload is optional, treat it
4129      as though the operand isn't reloaded.
4130
4131      ??? This latter case is somewhat odd because if we do the optional
4132      reload, it means the object is hanging around.  Thus we need only
4133      do the address reload if the optional reload was NOT done.
4134
4135      Change secondary reloads to be the address type of their operand, not
4136      the normal type.
4137
4138      If an operand's reload is now RELOAD_OTHER, change any
4139      RELOAD_FOR_INPUT_ADDRESS reloads of that operand to
4140      RELOAD_FOR_OTHER_ADDRESS.  */
4141
4142   for (i = 0; i < n_reloads; i++)
4143     {
4144       if (rld[i].secondary_p
4145           && rld[i].when_needed == operand_type[rld[i].opnum])
4146         rld[i].when_needed = address_type[rld[i].opnum];
4147
4148       if ((rld[i].when_needed == RELOAD_FOR_INPUT_ADDRESS
4149            || rld[i].when_needed == RELOAD_FOR_OUTPUT_ADDRESS
4150            || rld[i].when_needed == RELOAD_FOR_INPADDR_ADDRESS
4151            || rld[i].when_needed == RELOAD_FOR_OUTADDR_ADDRESS)
4152           && (operand_reloadnum[rld[i].opnum] < 0
4153               || rld[operand_reloadnum[rld[i].opnum]].optional))
4154         {
4155           /* If we have a secondary reload to go along with this reload,
4156              change its type to RELOAD_FOR_OPADDR_ADDR.  */
4157
4158           if ((rld[i].when_needed == RELOAD_FOR_INPUT_ADDRESS
4159                || rld[i].when_needed == RELOAD_FOR_INPADDR_ADDRESS)
4160               && rld[i].secondary_in_reload != -1)
4161             {
4162               int secondary_in_reload = rld[i].secondary_in_reload;
4163
4164               rld[secondary_in_reload].when_needed = RELOAD_FOR_OPADDR_ADDR;
4165
4166               /* If there's a tertiary reload we have to change it also.  */
4167               if (secondary_in_reload > 0
4168                   && rld[secondary_in_reload].secondary_in_reload != -1)
4169                 rld[rld[secondary_in_reload].secondary_in_reload].when_needed
4170                   = RELOAD_FOR_OPADDR_ADDR;
4171             }
4172
4173           if ((rld[i].when_needed == RELOAD_FOR_OUTPUT_ADDRESS
4174                || rld[i].when_needed == RELOAD_FOR_OUTADDR_ADDRESS)
4175               && rld[i].secondary_out_reload != -1)
4176             {
4177               int secondary_out_reload = rld[i].secondary_out_reload;
4178
4179               rld[secondary_out_reload].when_needed = RELOAD_FOR_OPADDR_ADDR;
4180
4181               /* If there's a tertiary reload we have to change it also.  */
4182               if (secondary_out_reload
4183                   && rld[secondary_out_reload].secondary_out_reload != -1)
4184                 rld[rld[secondary_out_reload].secondary_out_reload].when_needed
4185                   = RELOAD_FOR_OPADDR_ADDR;
4186             }
4187
4188           if (rld[i].when_needed == RELOAD_FOR_INPADDR_ADDRESS
4189               || rld[i].when_needed == RELOAD_FOR_OUTADDR_ADDRESS)
4190             rld[i].when_needed = RELOAD_FOR_OPADDR_ADDR;
4191           else
4192             rld[i].when_needed = RELOAD_FOR_OPERAND_ADDRESS;
4193         }
4194
4195       if ((rld[i].when_needed == RELOAD_FOR_INPUT_ADDRESS
4196            || rld[i].when_needed == RELOAD_FOR_INPADDR_ADDRESS)
4197           && operand_reloadnum[rld[i].opnum] >= 0
4198           && (rld[operand_reloadnum[rld[i].opnum]].when_needed
4199               == RELOAD_OTHER))
4200         rld[i].when_needed = RELOAD_FOR_OTHER_ADDRESS;
4201
4202       if (goal_alternative_matches[rld[i].opnum] >= 0)
4203         rld[i].opnum = goal_alternative_matches[rld[i].opnum];
4204     }
4205
4206   /* Scan all the reloads, and check for RELOAD_FOR_OPERAND_ADDRESS reloads.
4207      If we have more than one, then convert all RELOAD_FOR_OPADDR_ADDR
4208      reloads to RELOAD_FOR_OPERAND_ADDRESS reloads.
4209
4210      choose_reload_regs assumes that RELOAD_FOR_OPADDR_ADDR reloads never
4211      conflict with RELOAD_FOR_OPERAND_ADDRESS reloads.  This is true for a
4212      single pair of RELOAD_FOR_OPADDR_ADDR/RELOAD_FOR_OPERAND_ADDRESS reloads.
4213      However, if there is more than one RELOAD_FOR_OPERAND_ADDRESS reload,
4214      then a RELOAD_FOR_OPADDR_ADDR reload conflicts with all
4215      RELOAD_FOR_OPERAND_ADDRESS reloads other than the one that uses it.
4216      This is complicated by the fact that a single operand can have more
4217      than one RELOAD_FOR_OPERAND_ADDRESS reload.  It is very difficult to fix
4218      choose_reload_regs without affecting code quality, and cases that
4219      actually fail are extremely rare, so it turns out to be better to fix
4220      the problem here by not generating cases that choose_reload_regs will
4221      fail for.  */
4222   /* There is a similar problem with RELOAD_FOR_INPUT_ADDRESS /
4223      RELOAD_FOR_OUTPUT_ADDRESS when there is more than one of a kind for
4224      a single operand.
4225      We can reduce the register pressure by exploiting that a
4226      RELOAD_FOR_X_ADDR_ADDR that precedes all RELOAD_FOR_X_ADDRESS reloads
4227      does not conflict with any of them, if it is only used for the first of
4228      the RELOAD_FOR_X_ADDRESS reloads.  */
4229   {
4230     int first_op_addr_num = -2;
4231     int first_inpaddr_num[MAX_RECOG_OPERANDS];
4232     int first_outpaddr_num[MAX_RECOG_OPERANDS];
4233     int need_change = 0;
4234     /* We use last_op_addr_reload and the contents of the above arrays
4235        first as flags - -2 means no instance encountered, -1 means exactly
4236        one instance encountered.
4237        If more than one instance has been encountered, we store the reload
4238        number of the first reload of the kind in question; reload numbers
4239        are known to be non-negative.  */
4240     for (i = 0; i < noperands; i++)
4241       first_inpaddr_num[i] = first_outpaddr_num[i] = -2;
4242     for (i = n_reloads - 1; i >= 0; i--)
4243       {
4244         switch (rld[i].when_needed)
4245           {
4246           case RELOAD_FOR_OPERAND_ADDRESS:
4247             if (++first_op_addr_num >= 0)
4248               {
4249                 first_op_addr_num = i;
4250                 need_change = 1;
4251               }
4252             break;
4253           case RELOAD_FOR_INPUT_ADDRESS:
4254             if (++first_inpaddr_num[rld[i].opnum] >= 0)
4255               {
4256                 first_inpaddr_num[rld[i].opnum] = i;
4257                 need_change = 1;
4258               }
4259             break;
4260           case RELOAD_FOR_OUTPUT_ADDRESS:
4261             if (++first_outpaddr_num[rld[i].opnum] >= 0)
4262               {
4263                 first_outpaddr_num[rld[i].opnum] = i;
4264                 need_change = 1;
4265               }
4266             break;
4267           default:
4268             break;
4269           }
4270       }
4271
4272     if (need_change)
4273       {
4274         for (i = 0; i < n_reloads; i++)
4275           {
4276             int first_num;
4277             enum reload_type type;
4278
4279             switch (rld[i].when_needed)
4280               {
4281               case RELOAD_FOR_OPADDR_ADDR:
4282                 first_num = first_op_addr_num;
4283                 type = RELOAD_FOR_OPERAND_ADDRESS;
4284                 break;
4285               case RELOAD_FOR_INPADDR_ADDRESS:
4286                 first_num = first_inpaddr_num[rld[i].opnum];
4287                 type = RELOAD_FOR_INPUT_ADDRESS;
4288                 break;
4289               case RELOAD_FOR_OUTADDR_ADDRESS:
4290                 first_num = first_outpaddr_num[rld[i].opnum];
4291                 type = RELOAD_FOR_OUTPUT_ADDRESS;
4292                 break;
4293               default:
4294                 continue;
4295               }
4296             if (first_num < 0)
4297               continue;
4298             else if (i > first_num)
4299               rld[i].when_needed = type;
4300             else
4301               {
4302                 /* Check if the only TYPE reload that uses reload I is
4303                    reload FIRST_NUM.  */
4304                 for (j = n_reloads - 1; j > first_num; j--)
4305                   {
4306                     if (rld[j].when_needed == type
4307                         && (rld[i].secondary_p
4308                             ? rld[j].secondary_in_reload == i
4309                             : reg_mentioned_p (rld[i].in, rld[j].in)))
4310                       {
4311                         rld[i].when_needed = type;
4312                         break;
4313                       }
4314                   }
4315               }
4316           }
4317       }
4318   }
4319
4320   /* See if we have any reloads that are now allowed to be merged
4321      because we've changed when the reload is needed to
4322      RELOAD_FOR_OPERAND_ADDRESS or RELOAD_FOR_OTHER_ADDRESS.  Only
4323      check for the most common cases.  */
4324
4325   for (i = 0; i < n_reloads; i++)
4326     if (rld[i].in != 0 && rld[i].out == 0
4327         && (rld[i].when_needed == RELOAD_FOR_OPERAND_ADDRESS
4328             || rld[i].when_needed == RELOAD_FOR_OPADDR_ADDR
4329             || rld[i].when_needed == RELOAD_FOR_OTHER_ADDRESS))
4330       for (j = 0; j < n_reloads; j++)
4331         if (i != j && rld[j].in != 0 && rld[j].out == 0
4332             && rld[j].when_needed == rld[i].when_needed
4333             && MATCHES (rld[i].in, rld[j].in)
4334             && rld[i].class == rld[j].class
4335             && !rld[i].nocombine && !rld[j].nocombine
4336             && rld[i].reg_rtx == rld[j].reg_rtx)
4337           {
4338             rld[i].opnum = MIN (rld[i].opnum, rld[j].opnum);
4339             transfer_replacements (i, j);
4340             rld[j].in = 0;
4341           }
4342
4343 #ifdef HAVE_cc0
4344   /* If we made any reloads for addresses, see if they violate a
4345      "no input reloads" requirement for this insn.  But loads that we
4346      do after the insn (such as for output addresses) are fine.  */
4347   if (no_input_reloads)
4348     for (i = 0; i < n_reloads; i++)
4349       gcc_assert (rld[i].in == 0
4350                   || rld[i].when_needed == RELOAD_FOR_OUTADDR_ADDRESS
4351                   || rld[i].when_needed == RELOAD_FOR_OUTPUT_ADDRESS);
4352 #endif
4353
4354   /* Compute reload_mode and reload_nregs.  */
4355   for (i = 0; i < n_reloads; i++)
4356     {
4357       rld[i].mode
4358         = (rld[i].inmode == VOIDmode
4359            || (GET_MODE_SIZE (rld[i].outmode)
4360                > GET_MODE_SIZE (rld[i].inmode)))
4361           ? rld[i].outmode : rld[i].inmode;
4362
4363       rld[i].nregs = CLASS_MAX_NREGS (rld[i].class, rld[i].mode);
4364     }
4365
4366   /* Special case a simple move with an input reload and a
4367      destination of a hard reg, if the hard reg is ok, use it.  */
4368   for (i = 0; i < n_reloads; i++)
4369     if (rld[i].when_needed == RELOAD_FOR_INPUT
4370         && GET_CODE (PATTERN (insn)) == SET
4371         && REG_P (SET_DEST (PATTERN (insn)))
4372         && SET_SRC (PATTERN (insn)) == rld[i].in)
4373       {
4374         rtx dest = SET_DEST (PATTERN (insn));
4375         unsigned int regno = REGNO (dest);
4376
4377         if (regno < FIRST_PSEUDO_REGISTER
4378             && TEST_HARD_REG_BIT (reg_class_contents[rld[i].class], regno)
4379             && HARD_REGNO_MODE_OK (regno, rld[i].mode))
4380           {
4381             int nr = hard_regno_nregs[regno][rld[i].mode];
4382             int ok = 1, nri;
4383
4384             for (nri = 1; nri < nr; nri ++)
4385               if (! TEST_HARD_REG_BIT (reg_class_contents[rld[i].class], regno + nri))
4386                 ok = 0;
4387
4388             if (ok)
4389               rld[i].reg_rtx = dest;
4390           }
4391       }
4392
4393   return retval;
4394 }
4395
4396 /* Return 1 if alternative number ALTNUM in constraint-string CONSTRAINT
4397    accepts a memory operand with constant address.  */
4398
4399 static int
4400 alternative_allows_memconst (const char *constraint, int altnum)
4401 {
4402   int c;
4403   /* Skip alternatives before the one requested.  */
4404   while (altnum > 0)
4405     {
4406       while (*constraint++ != ',');
4407       altnum--;
4408     }
4409   /* Scan the requested alternative for 'm' or 'o'.
4410      If one of them is present, this alternative accepts memory constants.  */
4411   for (; (c = *constraint) && c != ',' && c != '#';
4412        constraint += CONSTRAINT_LEN (c, constraint))
4413     if (c == 'm' || c == 'o' || EXTRA_MEMORY_CONSTRAINT (c, constraint))
4414       return 1;
4415   return 0;
4416 }
4417 \f
4418 /* Scan X for memory references and scan the addresses for reloading.
4419    Also checks for references to "constant" regs that we want to eliminate
4420    and replaces them with the values they stand for.
4421    We may alter X destructively if it contains a reference to such.
4422    If X is just a constant reg, we return the equivalent value
4423    instead of X.
4424
4425    IND_LEVELS says how many levels of indirect addressing this machine
4426    supports.
4427
4428    OPNUM and TYPE identify the purpose of the reload.
4429
4430    IS_SET_DEST is true if X is the destination of a SET, which is not
4431    appropriate to be replaced by a constant.
4432
4433    INSN, if nonzero, is the insn in which we do the reload.  It is used
4434    to determine if we may generate output reloads, and where to put USEs
4435    for pseudos that we have to replace with stack slots.
4436
4437    ADDRESS_RELOADED.  If nonzero, is a pointer to where we put the
4438    result of find_reloads_address.  */
4439
4440 static rtx
4441 find_reloads_toplev (rtx x, int opnum, enum reload_type type,
4442                      int ind_levels, int is_set_dest, rtx insn,
4443                      int *address_reloaded)
4444 {
4445   RTX_CODE code = GET_CODE (x);
4446
4447   const char *fmt = GET_RTX_FORMAT (code);
4448   int i;
4449   int copied;
4450
4451   if (code == REG)
4452     {
4453       /* This code is duplicated for speed in find_reloads.  */
4454       int regno = REGNO (x);
4455       if (reg_equiv_constant[regno] != 0 && !is_set_dest)
4456         x = reg_equiv_constant[regno];
4457 #if 0
4458       /*  This creates (subreg (mem...)) which would cause an unnecessary
4459           reload of the mem.  */
4460       else if (reg_equiv_mem[regno] != 0)
4461         x = reg_equiv_mem[regno];
4462 #endif
4463       else if (reg_equiv_memory_loc[regno]
4464                && (reg_equiv_address[regno] != 0 || num_not_at_initial_offset))
4465         {
4466           rtx mem = make_memloc (x, regno);
4467           if (reg_equiv_address[regno]
4468               || ! rtx_equal_p (mem, reg_equiv_mem[regno]))
4469             {
4470               /* If this is not a toplevel operand, find_reloads doesn't see
4471                  this substitution.  We have to emit a USE of the pseudo so
4472                  that delete_output_reload can see it.  */
4473               if (replace_reloads && recog_data.operand[opnum] != x)
4474                 /* We mark the USE with QImode so that we recognize it
4475                    as one that can be safely deleted at the end of
4476                    reload.  */
4477                 PUT_MODE (emit_insn_before (gen_rtx_USE (VOIDmode, x), insn),
4478                           QImode);
4479               x = mem;
4480               i = find_reloads_address (GET_MODE (x), &x, XEXP (x, 0), &XEXP (x, 0),
4481                                         opnum, type, ind_levels, insn);
4482               if (address_reloaded)
4483                 *address_reloaded = i;
4484             }
4485         }
4486       return x;
4487     }
4488   if (code == MEM)
4489     {
4490       rtx tem = x;
4491
4492       i = find_reloads_address (GET_MODE (x), &tem, XEXP (x, 0), &XEXP (x, 0),
4493                                 opnum, type, ind_levels, insn);
4494       if (address_reloaded)
4495         *address_reloaded = i;
4496
4497       return tem;
4498     }
4499
4500   if (code == SUBREG && REG_P (SUBREG_REG (x)))
4501     {
4502       /* Check for SUBREG containing a REG that's equivalent to a constant.
4503          If the constant has a known value, truncate it right now.
4504          Similarly if we are extracting a single-word of a multi-word
4505          constant.  If the constant is symbolic, allow it to be substituted
4506          normally.  push_reload will strip the subreg later.  If the
4507          constant is VOIDmode, abort because we will lose the mode of
4508          the register (this should never happen because one of the cases
4509          above should handle it).  */
4510
4511       int regno = REGNO (SUBREG_REG (x));
4512       rtx tem;
4513
4514       if (subreg_lowpart_p (x)
4515           && regno >= FIRST_PSEUDO_REGISTER && reg_renumber[regno] < 0
4516           && reg_equiv_constant[regno] != 0
4517           && (tem = gen_lowpart_common (GET_MODE (x),
4518                                         reg_equiv_constant[regno])) != 0)
4519         return tem;
4520
4521       if (regno >= FIRST_PSEUDO_REGISTER && reg_renumber[regno] < 0
4522           && reg_equiv_constant[regno] != 0)
4523         {
4524           tem =
4525             simplify_gen_subreg (GET_MODE (x), reg_equiv_constant[regno],
4526                                  GET_MODE (SUBREG_REG (x)), SUBREG_BYTE (x));
4527           gcc_assert (tem);
4528           return tem;
4529         }
4530
4531       /* If the subreg contains a reg that will be converted to a mem,
4532          convert the subreg to a narrower memref now.
4533          Otherwise, we would get (subreg (mem ...) ...),
4534          which would force reload of the mem.
4535
4536          We also need to do this if there is an equivalent MEM that is
4537          not offsettable.  In that case, alter_subreg would produce an
4538          invalid address on big-endian machines.
4539
4540          For machines that extend byte loads, we must not reload using
4541          a wider mode if we have a paradoxical SUBREG.  find_reloads will
4542          force a reload in that case.  So we should not do anything here.  */
4543
4544       else if (regno >= FIRST_PSEUDO_REGISTER
4545 #ifdef LOAD_EXTEND_OP
4546                && (GET_MODE_SIZE (GET_MODE (x))
4547                    <= GET_MODE_SIZE (GET_MODE (SUBREG_REG (x))))
4548 #endif
4549                && (reg_equiv_address[regno] != 0
4550                    || (reg_equiv_mem[regno] != 0
4551                        && (! strict_memory_address_p (GET_MODE (x),
4552                                                       XEXP (reg_equiv_mem[regno], 0))
4553                            || ! offsettable_memref_p (reg_equiv_mem[regno])
4554                            || num_not_at_initial_offset))))
4555         x = find_reloads_subreg_address (x, 1, opnum, type, ind_levels,
4556                                          insn);
4557     }
4558
4559   for (copied = 0, i = GET_RTX_LENGTH (code) - 1; i >= 0; i--)
4560     {
4561       if (fmt[i] == 'e')
4562         {
4563           rtx new_part = find_reloads_toplev (XEXP (x, i), opnum, type,
4564                                               ind_levels, is_set_dest, insn,
4565                                               address_reloaded);
4566           /* If we have replaced a reg with it's equivalent memory loc -
4567              that can still be handled here e.g. if it's in a paradoxical
4568              subreg - we must make the change in a copy, rather than using
4569              a destructive change.  This way, find_reloads can still elect
4570              not to do the change.  */
4571           if (new_part != XEXP (x, i) && ! CONSTANT_P (new_part) && ! copied)
4572             {
4573               x = shallow_copy_rtx (x);
4574               copied = 1;
4575             }
4576           XEXP (x, i) = new_part;
4577         }
4578     }
4579   return x;
4580 }
4581
4582 /* Return a mem ref for the memory equivalent of reg REGNO.
4583    This mem ref is not shared with anything.  */
4584
4585 static rtx
4586 make_memloc (rtx ad, int regno)
4587 {
4588   /* We must rerun eliminate_regs, in case the elimination
4589      offsets have changed.  */
4590   rtx tem
4591     = XEXP (eliminate_regs (reg_equiv_memory_loc[regno], 0, NULL_RTX), 0);
4592
4593   /* If TEM might contain a pseudo, we must copy it to avoid
4594      modifying it when we do the substitution for the reload.  */
4595   if (rtx_varies_p (tem, 0))
4596     tem = copy_rtx (tem);
4597
4598   tem = replace_equiv_address_nv (reg_equiv_memory_loc[regno], tem);
4599   tem = adjust_address_nv (tem, GET_MODE (ad), 0);
4600
4601   /* Copy the result if it's still the same as the equivalence, to avoid
4602      modifying it when we do the substitution for the reload.  */
4603   if (tem == reg_equiv_memory_loc[regno])
4604     tem = copy_rtx (tem);
4605   return tem;
4606 }
4607
4608 /* Returns true if AD could be turned into a valid memory reference
4609    to mode MODE by reloading the part pointed to by PART into a
4610    register.  */
4611
4612 static int
4613 maybe_memory_address_p (enum machine_mode mode, rtx ad, rtx *part)
4614 {
4615   int retv;
4616   rtx tem = *part;
4617   rtx reg = gen_rtx_REG (GET_MODE (tem), max_reg_num ());
4618
4619   *part = reg;
4620   retv = memory_address_p (mode, ad);
4621   *part = tem;
4622
4623   return retv;
4624 }
4625
4626 /* Record all reloads needed for handling memory address AD
4627    which appears in *LOC in a memory reference to mode MODE
4628    which itself is found in location  *MEMREFLOC.
4629    Note that we take shortcuts assuming that no multi-reg machine mode
4630    occurs as part of an address.
4631
4632    OPNUM and TYPE specify the purpose of this reload.
4633
4634    IND_LEVELS says how many levels of indirect addressing this machine
4635    supports.
4636
4637    INSN, if nonzero, is the insn in which we do the reload.  It is used
4638    to determine if we may generate output reloads, and where to put USEs
4639    for pseudos that we have to replace with stack slots.
4640
4641    Value is one if this address is reloaded or replaced as a whole; it is
4642    zero if the top level of this address was not reloaded or replaced, and
4643    it is -1 if it may or may not have been reloaded or replaced.
4644
4645    Note that there is no verification that the address will be valid after
4646    this routine does its work.  Instead, we rely on the fact that the address
4647    was valid when reload started.  So we need only undo things that reload
4648    could have broken.  These are wrong register types, pseudos not allocated
4649    to a hard register, and frame pointer elimination.  */
4650
4651 static int
4652 find_reloads_address (enum machine_mode mode, rtx *memrefloc, rtx ad,
4653                       rtx *loc, int opnum, enum reload_type type,
4654                       int ind_levels, rtx insn)
4655 {
4656   int regno;
4657   int removed_and = 0;
4658   int op_index;
4659   rtx tem;
4660
4661   /* If the address is a register, see if it is a legitimate address and
4662      reload if not.  We first handle the cases where we need not reload
4663      or where we must reload in a non-standard way.  */
4664
4665   if (REG_P (ad))
4666     {
4667       regno = REGNO (ad);
4668
4669       /* If the register is equivalent to an invariant expression, substitute
4670          the invariant, and eliminate any eliminable register references.  */
4671       tem = reg_equiv_constant[regno];
4672       if (tem != 0
4673           && (tem = eliminate_regs (tem, mode, insn))
4674           && strict_memory_address_p (mode, tem))
4675         {
4676           *loc = ad = tem;
4677           return 0;
4678         }
4679
4680       tem = reg_equiv_memory_loc[regno];
4681       if (tem != 0)
4682         {
4683           if (reg_equiv_address[regno] != 0 || num_not_at_initial_offset)
4684             {
4685               tem = make_memloc (ad, regno);
4686               if (! strict_memory_address_p (GET_MODE (tem), XEXP (tem, 0)))
4687                 {
4688                   find_reloads_address (GET_MODE (tem), &tem, XEXP (tem, 0),
4689                                         &XEXP (tem, 0), opnum,
4690                                         ADDR_TYPE (type), ind_levels, insn);
4691                 }
4692               /* We can avoid a reload if the register's equivalent memory
4693                  expression is valid as an indirect memory address.
4694                  But not all addresses are valid in a mem used as an indirect
4695                  address: only reg or reg+constant.  */
4696
4697               if (ind_levels > 0
4698                   && strict_memory_address_p (mode, tem)
4699                   && (REG_P (XEXP (tem, 0))
4700                       || (GET_CODE (XEXP (tem, 0)) == PLUS
4701                           && REG_P (XEXP (XEXP (tem, 0), 0))
4702                           && CONSTANT_P (XEXP (XEXP (tem, 0), 1)))))
4703                 {
4704                   /* TEM is not the same as what we'll be replacing the
4705                      pseudo with after reload, put a USE in front of INSN
4706                      in the final reload pass.  */
4707                   if (replace_reloads
4708                       && num_not_at_initial_offset
4709                       && ! rtx_equal_p (tem, reg_equiv_mem[regno]))
4710                     {
4711                       *loc = tem;
4712                       /* We mark the USE with QImode so that we
4713                          recognize it as one that can be safely
4714                          deleted at the end of reload.  */
4715                       PUT_MODE (emit_insn_before (gen_rtx_USE (VOIDmode, ad),
4716                                                   insn), QImode);
4717
4718                       /* This doesn't really count as replacing the address
4719                          as a whole, since it is still a memory access.  */
4720                     }
4721                   return 0;
4722                 }
4723               ad = tem;
4724             }
4725         }
4726
4727       /* The only remaining case where we can avoid a reload is if this is a
4728          hard register that is valid as a base register and which is not the
4729          subject of a CLOBBER in this insn.  */
4730
4731       else if (regno < FIRST_PSEUDO_REGISTER
4732                && REGNO_MODE_OK_FOR_BASE_P (regno, mode)
4733                && ! regno_clobbered_p (regno, this_insn, mode, 0))
4734         return 0;
4735
4736       /* If we do not have one of the cases above, we must do the reload.  */
4737       push_reload (ad, NULL_RTX, loc, (rtx*) 0, MODE_BASE_REG_CLASS (mode),
4738                    GET_MODE (ad), VOIDmode, 0, 0, opnum, type);
4739       return 1;
4740     }
4741
4742   if (strict_memory_address_p (mode, ad))
4743     {
4744       /* The address appears valid, so reloads are not needed.
4745          But the address may contain an eliminable register.
4746          This can happen because a machine with indirect addressing
4747          may consider a pseudo register by itself a valid address even when
4748          it has failed to get a hard reg.
4749          So do a tree-walk to find and eliminate all such regs.  */
4750
4751       /* But first quickly dispose of a common case.  */
4752       if (GET_CODE (ad) == PLUS
4753           && GET_CODE (XEXP (ad, 1)) == CONST_INT
4754           && REG_P (XEXP (ad, 0))
4755           && reg_equiv_constant[REGNO (XEXP (ad, 0))] == 0)
4756         return 0;
4757
4758       subst_reg_equivs_changed = 0;
4759       *loc = subst_reg_equivs (ad, insn);
4760
4761       if (! subst_reg_equivs_changed)
4762         return 0;
4763
4764       /* Check result for validity after substitution.  */
4765       if (strict_memory_address_p (mode, ad))
4766         return 0;
4767     }
4768
4769 #ifdef LEGITIMIZE_RELOAD_ADDRESS
4770   do
4771     {
4772       if (memrefloc)
4773         {
4774           LEGITIMIZE_RELOAD_ADDRESS (ad, GET_MODE (*memrefloc), opnum, type,
4775                                      ind_levels, win);
4776         }
4777       break;
4778     win:
4779       *memrefloc = copy_rtx (*memrefloc);
4780       XEXP (*memrefloc, 0) = ad;
4781       move_replacements (&ad, &XEXP (*memrefloc, 0));
4782       return -1;
4783     }
4784   while (0);
4785 #endif
4786
4787   /* The address is not valid.  We have to figure out why.  First see if
4788      we have an outer AND and remove it if so.  Then analyze what's inside.  */
4789
4790   if (GET_CODE (ad) == AND)
4791     {
4792       removed_and = 1;
4793       loc = &XEXP (ad, 0);
4794       ad = *loc;
4795     }
4796
4797   /* One possibility for why the address is invalid is that it is itself
4798      a MEM.  This can happen when the frame pointer is being eliminated, a
4799      pseudo is not allocated to a hard register, and the offset between the
4800      frame and stack pointers is not its initial value.  In that case the
4801      pseudo will have been replaced by a MEM referring to the
4802      stack pointer.  */
4803   if (MEM_P (ad))
4804     {
4805       /* First ensure that the address in this MEM is valid.  Then, unless
4806          indirect addresses are valid, reload the MEM into a register.  */
4807       tem = ad;
4808       find_reloads_address (GET_MODE (ad), &tem, XEXP (ad, 0), &XEXP (ad, 0),
4809                             opnum, ADDR_TYPE (type),
4810                             ind_levels == 0 ? 0 : ind_levels - 1, insn);
4811
4812       /* If tem was changed, then we must create a new memory reference to
4813          hold it and store it back into memrefloc.  */
4814       if (tem != ad && memrefloc)
4815         {
4816           *memrefloc = copy_rtx (*memrefloc);
4817           copy_replacements (tem, XEXP (*memrefloc, 0));
4818           loc = &XEXP (*memrefloc, 0);
4819           if (removed_and)
4820             loc = &XEXP (*loc, 0);
4821         }
4822
4823       /* Check similar cases as for indirect addresses as above except
4824          that we can allow pseudos and a MEM since they should have been
4825          taken care of above.  */
4826
4827       if (ind_levels == 0
4828           || (GET_CODE (XEXP (tem, 0)) == SYMBOL_REF && ! indirect_symref_ok)
4829           || MEM_P (XEXP (tem, 0))
4830           || ! (REG_P (XEXP (tem, 0))
4831                 || (GET_CODE (XEXP (tem, 0)) == PLUS
4832                     && REG_P (XEXP (XEXP (tem, 0), 0))
4833                     && GET_CODE (XEXP (XEXP (tem, 0), 1)) == CONST_INT)))
4834         {
4835           /* Must use TEM here, not AD, since it is the one that will
4836              have any subexpressions reloaded, if needed.  */
4837           push_reload (tem, NULL_RTX, loc, (rtx*) 0,
4838                        MODE_BASE_REG_CLASS (mode), GET_MODE (tem),
4839                        VOIDmode, 0,
4840                        0, opnum, type);
4841           return ! removed_and;
4842         }
4843       else
4844         return 0;
4845     }
4846
4847   /* If we have address of a stack slot but it's not valid because the
4848      displacement is too large, compute the sum in a register.
4849      Handle all base registers here, not just fp/ap/sp, because on some
4850      targets (namely SH) we can also get too large displacements from
4851      big-endian corrections.  */
4852   else if (GET_CODE (ad) == PLUS
4853            && REG_P (XEXP (ad, 0))
4854            && REGNO (XEXP (ad, 0)) < FIRST_PSEUDO_REGISTER
4855            && REG_MODE_OK_FOR_BASE_P (XEXP (ad, 0), mode)
4856            && GET_CODE (XEXP (ad, 1)) == CONST_INT)
4857     {
4858       /* Unshare the MEM rtx so we can safely alter it.  */
4859       if (memrefloc)
4860         {
4861           *memrefloc = copy_rtx (*memrefloc);
4862           loc = &XEXP (*memrefloc, 0);
4863           if (removed_and)
4864             loc = &XEXP (*loc, 0);
4865         }
4866
4867       if (double_reg_address_ok)
4868         {
4869           /* Unshare the sum as well.  */
4870           *loc = ad = copy_rtx (ad);
4871
4872           /* Reload the displacement into an index reg.
4873              We assume the frame pointer or arg pointer is a base reg.  */
4874           find_reloads_address_part (XEXP (ad, 1), &XEXP (ad, 1),
4875                                      INDEX_REG_CLASS, GET_MODE (ad), opnum,
4876                                      type, ind_levels);
4877           return 0;
4878         }
4879       else
4880         {
4881           /* If the sum of two regs is not necessarily valid,
4882              reload the sum into a base reg.
4883              That will at least work.  */
4884           find_reloads_address_part (ad, loc, MODE_BASE_REG_CLASS (mode),
4885                                      Pmode, opnum, type, ind_levels);
4886         }
4887       return ! removed_and;
4888     }
4889
4890   /* If we have an indexed stack slot, there are three possible reasons why
4891      it might be invalid: The index might need to be reloaded, the address
4892      might have been made by frame pointer elimination and hence have a
4893      constant out of range, or both reasons might apply.
4894
4895      We can easily check for an index needing reload, but even if that is the
4896      case, we might also have an invalid constant.  To avoid making the
4897      conservative assumption and requiring two reloads, we see if this address
4898      is valid when not interpreted strictly.  If it is, the only problem is
4899      that the index needs a reload and find_reloads_address_1 will take care
4900      of it.
4901
4902      Handle all base registers here, not just fp/ap/sp, because on some
4903      targets (namely SPARC) we can also get invalid addresses from preventive
4904      subreg big-endian corrections made by find_reloads_toplev.  We
4905      can also get expressions involving LO_SUM (rather than PLUS) from
4906      find_reloads_subreg_address.
4907
4908      If we decide to do something, it must be that `double_reg_address_ok'
4909      is true.  We generate a reload of the base register + constant and
4910      rework the sum so that the reload register will be added to the index.
4911      This is safe because we know the address isn't shared.
4912
4913      We check for the base register as both the first and second operand of
4914      the innermost PLUS and/or LO_SUM.  */
4915
4916   for (op_index = 0; op_index < 2; ++op_index)
4917     {
4918       rtx operand;
4919
4920       if (!(GET_CODE (ad) == PLUS 
4921             && GET_CODE (XEXP (ad, 1)) == CONST_INT
4922             && (GET_CODE (XEXP (ad, 0)) == PLUS
4923                 || GET_CODE (XEXP (ad, 0)) == LO_SUM)))
4924         continue;
4925
4926       operand = XEXP (XEXP (ad, 0), op_index);
4927       if (!REG_P (operand) || REGNO (operand) >= FIRST_PSEUDO_REGISTER)
4928         continue;
4929
4930       if ((REG_MODE_OK_FOR_BASE_P (operand, mode)
4931            || operand == frame_pointer_rtx
4932 #if FRAME_POINTER_REGNUM != HARD_FRAME_POINTER_REGNUM
4933            || operand == hard_frame_pointer_rtx
4934 #endif
4935 #if FRAME_POINTER_REGNUM != ARG_POINTER_REGNUM
4936            || operand == arg_pointer_rtx
4937 #endif
4938            || operand == stack_pointer_rtx)
4939           && ! maybe_memory_address_p (mode, ad, 
4940                                        &XEXP (XEXP (ad, 0), 1 - op_index)))
4941         {
4942           rtx offset_reg;
4943           rtx addend;
4944
4945           offset_reg = plus_constant (operand, INTVAL (XEXP (ad, 1)));
4946           addend = XEXP (XEXP (ad, 0), 1 - op_index);
4947           
4948           /* Form the adjusted address.  */
4949           if (GET_CODE (XEXP (ad, 0)) == PLUS)
4950             ad = gen_rtx_PLUS (GET_MODE (ad), 
4951                                op_index == 0 ? offset_reg : addend, 
4952                                op_index == 0 ? addend : offset_reg);
4953           else
4954             ad = gen_rtx_LO_SUM (GET_MODE (ad), 
4955                                  op_index == 0 ? offset_reg : addend, 
4956                                  op_index == 0 ? addend : offset_reg);
4957           *loc = ad;
4958
4959           find_reloads_address_part (XEXP (ad, op_index), 
4960                                      &XEXP (ad, op_index),
4961                                      MODE_BASE_REG_CLASS (mode),
4962                                      GET_MODE (ad), opnum, type, ind_levels);
4963           find_reloads_address_1 (mode, 
4964                                   XEXP (ad, 1 - op_index), 1, 
4965                                   &XEXP (ad, 1 - op_index), opnum,
4966                                   type, 0, insn);
4967
4968           return 0;
4969         }
4970     }
4971
4972   /* See if address becomes valid when an eliminable register
4973      in a sum is replaced.  */
4974
4975   tem = ad;
4976   if (GET_CODE (ad) == PLUS)
4977     tem = subst_indexed_address (ad);
4978   if (tem != ad && strict_memory_address_p (mode, tem))
4979     {
4980       /* Ok, we win that way.  Replace any additional eliminable
4981          registers.  */
4982
4983       subst_reg_equivs_changed = 0;
4984       tem = subst_reg_equivs (tem, insn);
4985
4986       /* Make sure that didn't make the address invalid again.  */
4987
4988       if (! subst_reg_equivs_changed || strict_memory_address_p (mode, tem))
4989         {
4990           *loc = tem;
4991           return 0;
4992         }
4993     }
4994
4995   /* If constants aren't valid addresses, reload the constant address
4996      into a register.  */
4997   if (CONSTANT_P (ad) && ! strict_memory_address_p (mode, ad))
4998     {
4999       /* If AD is an address in the constant pool, the MEM rtx may be shared.
5000          Unshare it so we can safely alter it.  */
5001       if (memrefloc && GET_CODE (ad) == SYMBOL_REF
5002           && CONSTANT_POOL_ADDRESS_P (ad))
5003         {
5004           *memrefloc = copy_rtx (*memrefloc);
5005           loc = &XEXP (*memrefloc, 0);
5006           if (removed_and)
5007             loc = &XEXP (*loc, 0);
5008         }
5009
5010       find_reloads_address_part (ad, loc, MODE_BASE_REG_CLASS (mode),
5011                                  Pmode, opnum, type, ind_levels);
5012       return ! removed_and;
5013     }
5014
5015   return find_reloads_address_1 (mode, ad, 0, loc, opnum, type, ind_levels,
5016                                  insn);
5017 }
5018 \f
5019 /* Find all pseudo regs appearing in AD
5020    that are eliminable in favor of equivalent values
5021    and do not have hard regs; replace them by their equivalents.
5022    INSN, if nonzero, is the insn in which we do the reload.  We put USEs in
5023    front of it for pseudos that we have to replace with stack slots.  */
5024
5025 static rtx
5026 subst_reg_equivs (rtx ad, rtx insn)
5027 {
5028   RTX_CODE code = GET_CODE (ad);
5029   int i;
5030   const char *fmt;
5031
5032   switch (code)
5033     {
5034     case HIGH:
5035     case CONST_INT:
5036     case CONST:
5037     case CONST_DOUBLE:
5038     case CONST_VECTOR:
5039     case SYMBOL_REF:
5040     case LABEL_REF:
5041     case PC:
5042     case CC0:
5043       return ad;
5044
5045     case REG:
5046       {
5047         int regno = REGNO (ad);
5048
5049         if (reg_equiv_constant[regno] != 0)
5050           {
5051             subst_reg_equivs_changed = 1;
5052             return reg_equiv_constant[regno];
5053           }
5054         if (reg_equiv_memory_loc[regno] && num_not_at_initial_offset)
5055           {
5056             rtx mem = make_memloc (ad, regno);
5057             if (! rtx_equal_p (mem, reg_equiv_mem[regno]))
5058               {
5059                 subst_reg_equivs_changed = 1;
5060                 /* We mark the USE with QImode so that we recognize it
5061                    as one that can be safely deleted at the end of
5062                    reload.  */
5063                 PUT_MODE (emit_insn_before (gen_rtx_USE (VOIDmode, ad), insn),
5064                           QImode);
5065                 return mem;
5066               }
5067           }
5068       }
5069       return ad;
5070
5071     case PLUS:
5072       /* Quickly dispose of a common case.  */
5073       if (XEXP (ad, 0) == frame_pointer_rtx
5074           && GET_CODE (XEXP (ad, 1)) == CONST_INT)
5075         return ad;
5076       break;
5077
5078     default:
5079       break;
5080     }
5081
5082   fmt = GET_RTX_FORMAT (code);
5083   for (i = GET_RTX_LENGTH (code) - 1; i >= 0; i--)
5084     if (fmt[i] == 'e')
5085       XEXP (ad, i) = subst_reg_equivs (XEXP (ad, i), insn);
5086   return ad;
5087 }
5088 \f
5089 /* Compute the sum of X and Y, making canonicalizations assumed in an
5090    address, namely: sum constant integers, surround the sum of two
5091    constants with a CONST, put the constant as the second operand, and
5092    group the constant on the outermost sum.
5093
5094    This routine assumes both inputs are already in canonical form.  */
5095
5096 rtx
5097 form_sum (rtx x, rtx y)
5098 {
5099   rtx tem;
5100   enum machine_mode mode = GET_MODE (x);
5101
5102   if (mode == VOIDmode)
5103     mode = GET_MODE (y);
5104
5105   if (mode == VOIDmode)
5106     mode = Pmode;
5107
5108   if (GET_CODE (x) == CONST_INT)
5109     return plus_constant (y, INTVAL (x));
5110   else if (GET_CODE (y) == CONST_INT)
5111     return plus_constant (x, INTVAL (y));
5112   else if (CONSTANT_P (x))
5113     tem = x, x = y, y = tem;
5114
5115   if (GET_CODE (x) == PLUS && CONSTANT_P (XEXP (x, 1)))
5116     return form_sum (XEXP (x, 0), form_sum (XEXP (x, 1), y));
5117
5118   /* Note that if the operands of Y are specified in the opposite
5119      order in the recursive calls below, infinite recursion will occur.  */
5120   if (GET_CODE (y) == PLUS && CONSTANT_P (XEXP (y, 1)))
5121     return form_sum (form_sum (x, XEXP (y, 0)), XEXP (y, 1));
5122
5123   /* If both constant, encapsulate sum.  Otherwise, just form sum.  A
5124      constant will have been placed second.  */
5125   if (CONSTANT_P (x) && CONSTANT_P (y))
5126     {
5127       if (GET_CODE (x) == CONST)
5128         x = XEXP (x, 0);
5129       if (GET_CODE (y) == CONST)
5130         y = XEXP (y, 0);
5131
5132       return gen_rtx_CONST (VOIDmode, gen_rtx_PLUS (mode, x, y));
5133     }
5134
5135   return gen_rtx_PLUS (mode, x, y);
5136 }
5137 \f
5138 /* If ADDR is a sum containing a pseudo register that should be
5139    replaced with a constant (from reg_equiv_constant),
5140    return the result of doing so, and also apply the associative
5141    law so that the result is more likely to be a valid address.
5142    (But it is not guaranteed to be one.)
5143
5144    Note that at most one register is replaced, even if more are
5145    replaceable.  Also, we try to put the result into a canonical form
5146    so it is more likely to be a valid address.
5147
5148    In all other cases, return ADDR.  */
5149
5150 static rtx
5151 subst_indexed_address (rtx addr)
5152 {
5153   rtx op0 = 0, op1 = 0, op2 = 0;
5154   rtx tem;
5155   int regno;
5156
5157   if (GET_CODE (addr) == PLUS)
5158     {
5159       /* Try to find a register to replace.  */
5160       op0 = XEXP (addr, 0), op1 = XEXP (addr, 1), op2 = 0;
5161       if (REG_P (op0)
5162           && (regno = REGNO (op0)) >= FIRST_PSEUDO_REGISTER
5163           && reg_renumber[regno] < 0
5164           && reg_equiv_constant[regno] != 0)
5165         op0 = reg_equiv_constant[regno];
5166       else if (REG_P (op1)
5167                && (regno = REGNO (op1)) >= FIRST_PSEUDO_REGISTER
5168                && reg_renumber[regno] < 0
5169                && reg_equiv_constant[regno] != 0)
5170         op1 = reg_equiv_constant[regno];
5171       else if (GET_CODE (op0) == PLUS
5172                && (tem = subst_indexed_address (op0)) != op0)
5173         op0 = tem;
5174       else if (GET_CODE (op1) == PLUS
5175                && (tem = subst_indexed_address (op1)) != op1)
5176         op1 = tem;
5177       else
5178         return addr;
5179
5180       /* Pick out up to three things to add.  */
5181       if (GET_CODE (op1) == PLUS)
5182         op2 = XEXP (op1, 1), op1 = XEXP (op1, 0);
5183       else if (GET_CODE (op0) == PLUS)
5184         op2 = op1, op1 = XEXP (op0, 1), op0 = XEXP (op0, 0);
5185
5186       /* Compute the sum.  */
5187       if (op2 != 0)
5188         op1 = form_sum (op1, op2);
5189       if (op1 != 0)
5190         op0 = form_sum (op0, op1);
5191
5192       return op0;
5193     }
5194   return addr;
5195 }
5196 \f
5197 /* Update the REG_INC notes for an insn.  It updates all REG_INC
5198    notes for the instruction which refer to REGNO the to refer
5199    to the reload number.
5200
5201    INSN is the insn for which any REG_INC notes need updating.
5202
5203    REGNO is the register number which has been reloaded.
5204
5205    RELOADNUM is the reload number.  */
5206
5207 static void
5208 update_auto_inc_notes (rtx insn ATTRIBUTE_UNUSED, int regno ATTRIBUTE_UNUSED,
5209                        int reloadnum ATTRIBUTE_UNUSED)
5210 {
5211 #ifdef AUTO_INC_DEC
5212   rtx link;
5213
5214   for (link = REG_NOTES (insn); link; link = XEXP (link, 1))
5215     if (REG_NOTE_KIND (link) == REG_INC
5216         && (int) REGNO (XEXP (link, 0)) == regno)
5217       push_replacement (&XEXP (link, 0), reloadnum, VOIDmode);
5218 #endif
5219 }
5220 \f
5221 /* Record the pseudo registers we must reload into hard registers in a
5222    subexpression of a would-be memory address, X referring to a value
5223    in mode MODE.  (This function is not called if the address we find
5224    is strictly valid.)
5225
5226    CONTEXT = 1 means we are considering regs as index regs,
5227    = 0 means we are considering them as base regs.
5228
5229    OPNUM and TYPE specify the purpose of any reloads made.
5230
5231    IND_LEVELS says how many levels of indirect addressing are
5232    supported at this point in the address.
5233
5234    INSN, if nonzero, is the insn in which we do the reload.  It is used
5235    to determine if we may generate output reloads.
5236
5237    We return nonzero if X, as a whole, is reloaded or replaced.  */
5238
5239 /* Note that we take shortcuts assuming that no multi-reg machine mode
5240    occurs as part of an address.
5241    Also, this is not fully machine-customizable; it works for machines
5242    such as VAXen and 68000's and 32000's, but other possible machines
5243    could have addressing modes that this does not handle right.  */
5244
5245 static int
5246 find_reloads_address_1 (enum machine_mode mode, rtx x, int context,
5247                         rtx *loc, int opnum, enum reload_type type,
5248                         int ind_levels, rtx insn)
5249 {
5250   RTX_CODE code = GET_CODE (x);
5251
5252   switch (code)
5253     {
5254     case PLUS:
5255       {
5256         rtx orig_op0 = XEXP (x, 0);
5257         rtx orig_op1 = XEXP (x, 1);
5258         RTX_CODE code0 = GET_CODE (orig_op0);
5259         RTX_CODE code1 = GET_CODE (orig_op1);
5260         rtx op0 = orig_op0;
5261         rtx op1 = orig_op1;
5262
5263         if (GET_CODE (op0) == SUBREG)
5264           {
5265             op0 = SUBREG_REG (op0);
5266             code0 = GET_CODE (op0);
5267             if (code0 == REG && REGNO (op0) < FIRST_PSEUDO_REGISTER)
5268               op0 = gen_rtx_REG (word_mode,
5269                                  (REGNO (op0) +
5270                                   subreg_regno_offset (REGNO (SUBREG_REG (orig_op0)),
5271                                                        GET_MODE (SUBREG_REG (orig_op0)),
5272                                                        SUBREG_BYTE (orig_op0),
5273                                                        GET_MODE (orig_op0))));
5274           }
5275
5276         if (GET_CODE (op1) == SUBREG)
5277           {
5278             op1 = SUBREG_REG (op1);
5279             code1 = GET_CODE (op1);
5280             if (code1 == REG && REGNO (op1) < FIRST_PSEUDO_REGISTER)
5281               /* ??? Why is this given op1's mode and above for
5282                  ??? op0 SUBREGs we use word_mode?  */
5283               op1 = gen_rtx_REG (GET_MODE (op1),
5284                                  (REGNO (op1) +
5285                                   subreg_regno_offset (REGNO (SUBREG_REG (orig_op1)),
5286                                                        GET_MODE (SUBREG_REG (orig_op1)),
5287                                                        SUBREG_BYTE (orig_op1),
5288                                                        GET_MODE (orig_op1))));
5289           }
5290         /* Plus in the index register may be created only as a result of
5291            register remateralization for expression like &localvar*4.  Reload it.
5292            It may be possible to combine the displacement on the outer level,
5293            but it is probably not worthwhile to do so.  */
5294         if (context)
5295           {
5296             find_reloads_address (GET_MODE (x), loc, XEXP (x, 0), &XEXP (x, 0),
5297                                   opnum, ADDR_TYPE (type), ind_levels, insn);
5298             push_reload (*loc, NULL_RTX, loc, (rtx*) 0,
5299                          (context ? INDEX_REG_CLASS : MODE_BASE_REG_CLASS (mode)),
5300                          GET_MODE (x), VOIDmode, 0, 0, opnum, type);
5301             return 1;
5302           }
5303
5304         if (code0 == MULT || code0 == SIGN_EXTEND || code0 == TRUNCATE
5305             || code0 == ZERO_EXTEND || code1 == MEM)
5306           {
5307             find_reloads_address_1 (mode, orig_op0, 1, &XEXP (x, 0), opnum,
5308                                     type, ind_levels, insn);
5309             find_reloads_address_1 (mode, orig_op1, 0, &XEXP (x, 1), opnum,
5310                                     type, ind_levels, insn);
5311           }
5312
5313         else if (code1 == MULT || code1 == SIGN_EXTEND || code1 == TRUNCATE
5314                  || code1 == ZERO_EXTEND || code0 == MEM)
5315           {
5316             find_reloads_address_1 (mode, orig_op0, 0, &XEXP (x, 0), opnum,
5317                                     type, ind_levels, insn);
5318             find_reloads_address_1 (mode, orig_op1, 1, &XEXP (x, 1), opnum,
5319                                     type, ind_levels, insn);
5320           }
5321
5322         else if (code0 == CONST_INT || code0 == CONST
5323                  || code0 == SYMBOL_REF || code0 == LABEL_REF)
5324           find_reloads_address_1 (mode, orig_op1, 0, &XEXP (x, 1), opnum,
5325                                   type, ind_levels, insn);
5326
5327         else if (code1 == CONST_INT || code1 == CONST
5328                  || code1 == SYMBOL_REF || code1 == LABEL_REF)
5329           find_reloads_address_1 (mode, orig_op0, 0, &XEXP (x, 0), opnum,
5330                                   type, ind_levels, insn);
5331
5332         else if (code0 == REG && code1 == REG)
5333           {
5334             if (REG_OK_FOR_INDEX_P (op0)
5335                 && REG_MODE_OK_FOR_BASE_P (op1, mode))
5336               return 0;
5337             else if (REG_OK_FOR_INDEX_P (op1)
5338                      && REG_MODE_OK_FOR_BASE_P (op0, mode))
5339               return 0;
5340             else if (REG_MODE_OK_FOR_BASE_P (op1, mode))
5341               find_reloads_address_1 (mode, orig_op0, 1, &XEXP (x, 0), opnum,
5342                                       type, ind_levels, insn);
5343             else if (REG_MODE_OK_FOR_BASE_P (op0, mode))
5344               find_reloads_address_1 (mode, orig_op1, 1, &XEXP (x, 1), opnum,
5345                                       type, ind_levels, insn);
5346             else if (REG_OK_FOR_INDEX_P (op1))
5347               find_reloads_address_1 (mode, orig_op0, 0, &XEXP (x, 0), opnum,
5348                                       type, ind_levels, insn);
5349             else if (REG_OK_FOR_INDEX_P (op0))
5350               find_reloads_address_1 (mode, orig_op1, 0, &XEXP (x, 1), opnum,
5351                                       type, ind_levels, insn);
5352             else
5353               {
5354                 find_reloads_address_1 (mode, orig_op0, 1, &XEXP (x, 0), opnum,
5355                                         type, ind_levels, insn);
5356                 find_reloads_address_1 (mode, orig_op1, 0, &XEXP (x, 1), opnum,
5357                                         type, ind_levels, insn);
5358               }
5359           }
5360
5361         else if (code0 == REG)
5362           {
5363             find_reloads_address_1 (mode, orig_op0, 1, &XEXP (x, 0), opnum,
5364                                     type, ind_levels, insn);
5365             find_reloads_address_1 (mode, orig_op1, 0, &XEXP (x, 1), opnum,
5366                                     type, ind_levels, insn);
5367           }
5368
5369         else if (code1 == REG)
5370           {
5371             find_reloads_address_1 (mode, orig_op1, 1, &XEXP (x, 1), opnum,
5372                                     type, ind_levels, insn);
5373             find_reloads_address_1 (mode, orig_op0, 0, &XEXP (x, 0), opnum,
5374                                     type, ind_levels, insn);
5375           }
5376       }
5377
5378       return 0;
5379
5380     case POST_MODIFY:
5381     case PRE_MODIFY:
5382       {
5383         rtx op0 = XEXP (x, 0);
5384         rtx op1 = XEXP (x, 1);
5385         int regno;
5386         int reloadnum;
5387
5388         if (GET_CODE (op1) != PLUS && GET_CODE (op1) != MINUS)
5389           return 0;
5390
5391         /* Currently, we only support {PRE,POST}_MODIFY constructs
5392            where a base register is {inc,dec}remented by the contents
5393            of another register or by a constant value.  Thus, these
5394            operands must match.  */
5395         gcc_assert (op0 == XEXP (op1, 0));
5396
5397         /* Require index register (or constant).  Let's just handle the
5398            register case in the meantime... If the target allows
5399            auto-modify by a constant then we could try replacing a pseudo
5400            register with its equivalent constant where applicable.  */
5401         if (REG_P (XEXP (op1, 1)))
5402           if (!REGNO_OK_FOR_INDEX_P (REGNO (XEXP (op1, 1))))
5403             find_reloads_address_1 (mode, XEXP (op1, 1), 1, &XEXP (op1, 1),
5404                                     opnum, type, ind_levels, insn);
5405
5406         gcc_assert (REG_P (XEXP (op1, 0)));
5407
5408         regno = REGNO (XEXP (op1, 0));
5409
5410         /* A register that is incremented cannot be constant!  */
5411         gcc_assert (regno < FIRST_PSEUDO_REGISTER
5412                     || reg_equiv_constant[regno] == 0);
5413
5414         /* Handle a register that is equivalent to a memory location
5415             which cannot be addressed directly.  */
5416         if (reg_equiv_memory_loc[regno] != 0
5417             && (reg_equiv_address[regno] != 0
5418                 || num_not_at_initial_offset))
5419           {
5420             rtx tem = make_memloc (XEXP (x, 0), regno);
5421
5422             if (reg_equiv_address[regno]
5423                 || ! rtx_equal_p (tem, reg_equiv_mem[regno]))
5424               {
5425                 /* First reload the memory location's address.
5426                     We can't use ADDR_TYPE (type) here, because we need to
5427                     write back the value after reading it, hence we actually
5428                     need two registers.  */
5429                 find_reloads_address (GET_MODE (tem), &tem, XEXP (tem, 0),
5430                                       &XEXP (tem, 0), opnum,
5431                                       RELOAD_OTHER,
5432                                       ind_levels, insn);
5433
5434                 /* Then reload the memory location into a base
5435                     register.  */
5436                 reloadnum = push_reload (tem, tem, &XEXP (x, 0),
5437                                           &XEXP (op1, 0),
5438                                           MODE_BASE_REG_CLASS (mode),
5439                                           GET_MODE (x), GET_MODE (x), 0,
5440                                           0, opnum, RELOAD_OTHER);
5441
5442                 update_auto_inc_notes (this_insn, regno, reloadnum);
5443                 return 0;
5444               }
5445           }
5446
5447         if (reg_renumber[regno] >= 0)
5448           regno = reg_renumber[regno];
5449
5450         /* We require a base register here...  */
5451         if (!REGNO_MODE_OK_FOR_BASE_P (regno, GET_MODE (x)))
5452           {
5453             reloadnum = push_reload (XEXP (op1, 0), XEXP (x, 0),
5454                                       &XEXP (op1, 0), &XEXP (x, 0),
5455                                       MODE_BASE_REG_CLASS (mode),
5456                                       GET_MODE (x), GET_MODE (x), 0, 0,
5457                                       opnum, RELOAD_OTHER);
5458
5459             update_auto_inc_notes (this_insn, regno, reloadnum);
5460             return 0;
5461           }
5462       }
5463       return 0;
5464
5465     case POST_INC:
5466     case POST_DEC:
5467     case PRE_INC:
5468     case PRE_DEC:
5469       if (REG_P (XEXP (x, 0)))
5470         {
5471           int regno = REGNO (XEXP (x, 0));
5472           int value = 0;
5473           rtx x_orig = x;
5474
5475           /* A register that is incremented cannot be constant!  */
5476           gcc_assert (regno < FIRST_PSEUDO_REGISTER
5477                       || reg_equiv_constant[regno] == 0);
5478
5479           /* Handle a register that is equivalent to a memory location
5480              which cannot be addressed directly.  */
5481           if (reg_equiv_memory_loc[regno] != 0
5482               && (reg_equiv_address[regno] != 0 || num_not_at_initial_offset))
5483             {
5484               rtx tem = make_memloc (XEXP (x, 0), regno);
5485               if (reg_equiv_address[regno]
5486                   || ! rtx_equal_p (tem, reg_equiv_mem[regno]))
5487                 {
5488                   /* First reload the memory location's address.
5489                      We can't use ADDR_TYPE (type) here, because we need to
5490                      write back the value after reading it, hence we actually
5491                      need two registers.  */
5492                   find_reloads_address (GET_MODE (tem), &tem, XEXP (tem, 0),
5493                                         &XEXP (tem, 0), opnum, type,
5494                                         ind_levels, insn);
5495                   /* Put this inside a new increment-expression.  */
5496                   x = gen_rtx_fmt_e (GET_CODE (x), GET_MODE (x), tem);
5497                   /* Proceed to reload that, as if it contained a register.  */
5498                 }
5499             }
5500
5501           /* If we have a hard register that is ok as an index,
5502              don't make a reload.  If an autoincrement of a nice register
5503              isn't "valid", it must be that no autoincrement is "valid".
5504              If that is true and something made an autoincrement anyway,
5505              this must be a special context where one is allowed.
5506              (For example, a "push" instruction.)
5507              We can't improve this address, so leave it alone.  */
5508
5509           /* Otherwise, reload the autoincrement into a suitable hard reg
5510              and record how much to increment by.  */
5511
5512           if (reg_renumber[regno] >= 0)
5513             regno = reg_renumber[regno];
5514           if ((regno >= FIRST_PSEUDO_REGISTER
5515                || !(context ? REGNO_OK_FOR_INDEX_P (regno)
5516                     : REGNO_MODE_OK_FOR_BASE_P (regno, mode))))
5517             {
5518               int reloadnum;
5519
5520               /* If we can output the register afterwards, do so, this
5521                  saves the extra update.
5522                  We can do so if we have an INSN - i.e. no JUMP_INSN nor
5523                  CALL_INSN - and it does not set CC0.
5524                  But don't do this if we cannot directly address the
5525                  memory location, since this will make it harder to
5526                  reuse address reloads, and increases register pressure.
5527                  Also don't do this if we can probably update x directly.  */
5528               rtx equiv = (MEM_P (XEXP (x, 0))
5529                            ? XEXP (x, 0)
5530                            : reg_equiv_mem[regno]);
5531               int icode = (int) add_optab->handlers[(int) Pmode].insn_code;
5532               if (insn && NONJUMP_INSN_P (insn) && equiv
5533                   && memory_operand (equiv, GET_MODE (equiv))
5534 #ifdef HAVE_cc0
5535                   && ! sets_cc0_p (PATTERN (insn))
5536 #endif
5537                   && ! (icode != CODE_FOR_nothing
5538                         && ((*insn_data[icode].operand[0].predicate)
5539                             (equiv, Pmode))
5540                         && ((*insn_data[icode].operand[1].predicate)
5541                             (equiv, Pmode))))
5542                 {
5543                   /* We use the original pseudo for loc, so that
5544                      emit_reload_insns() knows which pseudo this
5545                      reload refers to and updates the pseudo rtx, not
5546                      its equivalent memory location, as well as the
5547                      corresponding entry in reg_last_reload_reg.  */
5548                   loc = &XEXP (x_orig, 0);
5549                   x = XEXP (x, 0);
5550                   reloadnum
5551                     = push_reload (x, x, loc, loc,
5552                                    (context ? INDEX_REG_CLASS :
5553                                     MODE_BASE_REG_CLASS (mode)),
5554                                    GET_MODE (x), GET_MODE (x), 0, 0,
5555                                    opnum, RELOAD_OTHER);
5556                 }
5557               else
5558                 {
5559                   reloadnum
5560                     = push_reload (x, NULL_RTX, loc, (rtx*) 0,
5561                                    (context ? INDEX_REG_CLASS :
5562                                     MODE_BASE_REG_CLASS (mode)),
5563                                    GET_MODE (x), GET_MODE (x), 0, 0,
5564                                    opnum, type);
5565                   rld[reloadnum].inc
5566                     = find_inc_amount (PATTERN (this_insn), XEXP (x_orig, 0));
5567
5568                   value = 1;
5569                 }
5570
5571               update_auto_inc_notes (this_insn, REGNO (XEXP (x_orig, 0)),
5572                                      reloadnum);
5573             }
5574           return value;
5575         }
5576
5577       else if (MEM_P (XEXP (x, 0)))
5578         {
5579           /* This is probably the result of a substitution, by eliminate_regs,
5580              of an equivalent address for a pseudo that was not allocated to a
5581              hard register.  Verify that the specified address is valid and
5582              reload it into a register.  */
5583           /* Variable `tem' might or might not be used in FIND_REG_INC_NOTE.  */
5584           rtx tem ATTRIBUTE_UNUSED = XEXP (x, 0);
5585           rtx link;
5586           int reloadnum;
5587
5588           /* Since we know we are going to reload this item, don't decrement
5589              for the indirection level.
5590
5591              Note that this is actually conservative:  it would be slightly
5592              more efficient to use the value of SPILL_INDIRECT_LEVELS from
5593              reload1.c here.  */
5594           /* We can't use ADDR_TYPE (type) here, because we need to
5595              write back the value after reading it, hence we actually
5596              need two registers.  */
5597           find_reloads_address (GET_MODE (x), &XEXP (x, 0),
5598                                 XEXP (XEXP (x, 0), 0), &XEXP (XEXP (x, 0), 0),
5599                                 opnum, type, ind_levels, insn);
5600
5601           reloadnum = push_reload (x, NULL_RTX, loc, (rtx*) 0,
5602                                    (context ? INDEX_REG_CLASS :
5603                                     MODE_BASE_REG_CLASS (mode)),
5604                                    GET_MODE (x), VOIDmode, 0, 0, opnum, type);
5605           rld[reloadnum].inc
5606             = find_inc_amount (PATTERN (this_insn), XEXP (x, 0));
5607
5608           link = FIND_REG_INC_NOTE (this_insn, tem);
5609           if (link != 0)
5610             push_replacement (&XEXP (link, 0), reloadnum, VOIDmode);
5611
5612           return 1;
5613         }
5614       return 0;
5615
5616     case MEM:
5617       /* This is probably the result of a substitution, by eliminate_regs, of
5618          an equivalent address for a pseudo that was not allocated to a hard
5619          register.  Verify that the specified address is valid and reload it
5620          into a register.
5621
5622          Since we know we are going to reload this item, don't decrement for
5623          the indirection level.
5624
5625          Note that this is actually conservative:  it would be slightly more
5626          efficient to use the value of SPILL_INDIRECT_LEVELS from
5627          reload1.c here.  */
5628
5629       find_reloads_address (GET_MODE (x), loc, XEXP (x, 0), &XEXP (x, 0),
5630                             opnum, ADDR_TYPE (type), ind_levels, insn);
5631       push_reload (*loc, NULL_RTX, loc, (rtx*) 0,
5632                    (context ? INDEX_REG_CLASS : MODE_BASE_REG_CLASS (mode)),
5633                    GET_MODE (x), VOIDmode, 0, 0, opnum, type);
5634       return 1;
5635
5636     case REG:
5637       {
5638         int regno = REGNO (x);
5639
5640         if (reg_equiv_constant[regno] != 0)
5641           {
5642             find_reloads_address_part (reg_equiv_constant[regno], loc,
5643                                        (context ? INDEX_REG_CLASS :
5644                                         MODE_BASE_REG_CLASS (mode)),
5645                                        GET_MODE (x), opnum, type, ind_levels);
5646             return 1;
5647           }
5648
5649 #if 0 /* This might screw code in reload1.c to delete prior output-reload
5650          that feeds this insn.  */
5651         if (reg_equiv_mem[regno] != 0)
5652           {
5653             push_reload (reg_equiv_mem[regno], NULL_RTX, loc, (rtx*) 0,
5654                          (context ? INDEX_REG_CLASS :
5655                           MODE_BASE_REG_CLASS (mode)),
5656                          GET_MODE (x), VOIDmode, 0, 0, opnum, type);
5657             return 1;
5658           }
5659 #endif
5660
5661         if (reg_equiv_memory_loc[regno]
5662             && (reg_equiv_address[regno] != 0 || num_not_at_initial_offset))
5663           {
5664             rtx tem = make_memloc (x, regno);
5665             if (reg_equiv_address[regno] != 0
5666                 || ! rtx_equal_p (tem, reg_equiv_mem[regno]))
5667               {
5668                 x = tem;
5669                 find_reloads_address (GET_MODE (x), &x, XEXP (x, 0),
5670                                       &XEXP (x, 0), opnum, ADDR_TYPE (type),
5671                                       ind_levels, insn);
5672               }
5673           }
5674
5675         if (reg_renumber[regno] >= 0)
5676           regno = reg_renumber[regno];
5677
5678         if ((regno >= FIRST_PSEUDO_REGISTER
5679              || !(context ? REGNO_OK_FOR_INDEX_P (regno)
5680                   : REGNO_MODE_OK_FOR_BASE_P (regno, mode))))
5681           {
5682             push_reload (x, NULL_RTX, loc, (rtx*) 0,
5683                          (context ? INDEX_REG_CLASS : MODE_BASE_REG_CLASS (mode)),
5684                          GET_MODE (x), VOIDmode, 0, 0, opnum, type);
5685             return 1;
5686           }
5687
5688         /* If a register appearing in an address is the subject of a CLOBBER
5689            in this insn, reload it into some other register to be safe.
5690            The CLOBBER is supposed to make the register unavailable
5691            from before this insn to after it.  */
5692         if (regno_clobbered_p (regno, this_insn, GET_MODE (x), 0))
5693           {
5694             push_reload (x, NULL_RTX, loc, (rtx*) 0,
5695                          (context ? INDEX_REG_CLASS : MODE_BASE_REG_CLASS (mode)),
5696                          GET_MODE (x), VOIDmode, 0, 0, opnum, type);
5697             return 1;
5698           }
5699       }
5700       return 0;
5701
5702     case SUBREG:
5703       if (REG_P (SUBREG_REG (x)))
5704         {
5705           /* If this is a SUBREG of a hard register and the resulting register
5706              is of the wrong class, reload the whole SUBREG.  This avoids
5707              needless copies if SUBREG_REG is multi-word.  */
5708           if (REGNO (SUBREG_REG (x)) < FIRST_PSEUDO_REGISTER)
5709             {
5710               int regno ATTRIBUTE_UNUSED = subreg_regno (x);
5711
5712               if (! (context ? REGNO_OK_FOR_INDEX_P (regno)
5713                      : REGNO_MODE_OK_FOR_BASE_P (regno, mode)))
5714                 {
5715                   push_reload (x, NULL_RTX, loc, (rtx*) 0,
5716                                (context ? INDEX_REG_CLASS :
5717                                 MODE_BASE_REG_CLASS (mode)),
5718                                GET_MODE (x), VOIDmode, 0, 0, opnum, type);
5719                   return 1;
5720                 }
5721             }
5722           /* If this is a SUBREG of a pseudo-register, and the pseudo-register
5723              is larger than the class size, then reload the whole SUBREG.  */
5724           else
5725             {
5726               enum reg_class class = (context ? INDEX_REG_CLASS
5727                                       : MODE_BASE_REG_CLASS (mode));
5728               if ((unsigned) CLASS_MAX_NREGS (class, GET_MODE (SUBREG_REG (x)))
5729                   > reg_class_size[class])
5730                 {
5731                   x = find_reloads_subreg_address (x, 0, opnum, type,
5732                                                    ind_levels, insn);
5733                   push_reload (x, NULL_RTX, loc, (rtx*) 0, class,
5734                                GET_MODE (x), VOIDmode, 0, 0, opnum, type);
5735                   return 1;
5736                 }
5737             }
5738         }
5739       break;
5740
5741     default:
5742       break;
5743     }
5744
5745   {
5746     const char *fmt = GET_RTX_FORMAT (code);
5747     int i;
5748
5749     for (i = GET_RTX_LENGTH (code) - 1; i >= 0; i--)
5750       {
5751         if (fmt[i] == 'e')
5752           find_reloads_address_1 (mode, XEXP (x, i), context, &XEXP (x, i),
5753                                   opnum, type, ind_levels, insn);
5754       }
5755   }
5756
5757   return 0;
5758 }
5759 \f
5760 /* X, which is found at *LOC, is a part of an address that needs to be
5761    reloaded into a register of class CLASS.  If X is a constant, or if
5762    X is a PLUS that contains a constant, check that the constant is a
5763    legitimate operand and that we are supposed to be able to load
5764    it into the register.
5765
5766    If not, force the constant into memory and reload the MEM instead.
5767
5768    MODE is the mode to use, in case X is an integer constant.
5769
5770    OPNUM and TYPE describe the purpose of any reloads made.
5771
5772    IND_LEVELS says how many levels of indirect addressing this machine
5773    supports.  */
5774
5775 static void
5776 find_reloads_address_part (rtx x, rtx *loc, enum reg_class class,
5777                            enum machine_mode mode, int opnum,
5778                            enum reload_type type, int ind_levels)
5779 {
5780   if (CONSTANT_P (x)
5781       && (! LEGITIMATE_CONSTANT_P (x)
5782           || PREFERRED_RELOAD_CLASS (x, class) == NO_REGS))
5783     {
5784       rtx tem;
5785
5786       tem = x = force_const_mem (mode, x);
5787       find_reloads_address (mode, &tem, XEXP (tem, 0), &XEXP (tem, 0),
5788                             opnum, type, ind_levels, 0);
5789     }
5790
5791   else if (GET_CODE (x) == PLUS
5792            && CONSTANT_P (XEXP (x, 1))
5793            && (! LEGITIMATE_CONSTANT_P (XEXP (x, 1))
5794                || PREFERRED_RELOAD_CLASS (XEXP (x, 1), class) == NO_REGS))
5795     {
5796       rtx tem;
5797
5798       tem = force_const_mem (GET_MODE (x), XEXP (x, 1));
5799       x = gen_rtx_PLUS (GET_MODE (x), XEXP (x, 0), tem);
5800       find_reloads_address (mode, &tem, XEXP (tem, 0), &XEXP (tem, 0),
5801                             opnum, type, ind_levels, 0);
5802     }
5803
5804   push_reload (x, NULL_RTX, loc, (rtx*) 0, class,
5805                mode, VOIDmode, 0, 0, opnum, type);
5806 }
5807 \f
5808 /* X, a subreg of a pseudo, is a part of an address that needs to be
5809    reloaded.
5810
5811    If the pseudo is equivalent to a memory location that cannot be directly
5812    addressed, make the necessary address reloads.
5813
5814    If address reloads have been necessary, or if the address is changed
5815    by register elimination, return the rtx of the memory location;
5816    otherwise, return X.
5817
5818    If FORCE_REPLACE is nonzero, unconditionally replace the subreg with the
5819    memory location.
5820
5821    OPNUM and TYPE identify the purpose of the reload.
5822
5823    IND_LEVELS says how many levels of indirect addressing are
5824    supported at this point in the address.
5825
5826    INSN, if nonzero, is the insn in which we do the reload.  It is used
5827    to determine where to put USEs for pseudos that we have to replace with
5828    stack slots.  */
5829
5830 static rtx
5831 find_reloads_subreg_address (rtx x, int force_replace, int opnum,
5832                              enum reload_type type, int ind_levels, rtx insn)
5833 {
5834   int regno = REGNO (SUBREG_REG (x));
5835
5836   if (reg_equiv_memory_loc[regno])
5837     {
5838       /* If the address is not directly addressable, or if the address is not
5839          offsettable, then it must be replaced.  */
5840       if (! force_replace
5841           && (reg_equiv_address[regno]
5842               || ! offsettable_memref_p (reg_equiv_mem[regno])))
5843         force_replace = 1;
5844
5845       if (force_replace || num_not_at_initial_offset)
5846         {
5847           rtx tem = make_memloc (SUBREG_REG (x), regno);
5848
5849           /* If the address changes because of register elimination, then
5850              it must be replaced.  */
5851           if (force_replace
5852               || ! rtx_equal_p (tem, reg_equiv_mem[regno]))
5853             {
5854               unsigned outer_size = GET_MODE_SIZE (GET_MODE (x));
5855               unsigned inner_size = GET_MODE_SIZE (GET_MODE (SUBREG_REG (x)));
5856               int offset;
5857
5858               /* For big-endian paradoxical subregs, SUBREG_BYTE does not
5859                  hold the correct (negative) byte offset.  */
5860               if (BYTES_BIG_ENDIAN && outer_size > inner_size)
5861                 offset = inner_size - outer_size;
5862               else
5863                 offset = SUBREG_BYTE (x);
5864
5865               XEXP (tem, 0) = plus_constant (XEXP (tem, 0), offset);
5866               PUT_MODE (tem, GET_MODE (x));
5867
5868               /* If this was a paradoxical subreg that we replaced, the
5869                  resulting memory must be sufficiently aligned to allow
5870                  us to widen the mode of the memory.  */
5871               if (outer_size > inner_size && STRICT_ALIGNMENT)
5872                 {
5873                   rtx base;
5874
5875                   base = XEXP (tem, 0);
5876                   if (GET_CODE (base) == PLUS)
5877                     {
5878                       if (GET_CODE (XEXP (base, 1)) == CONST_INT
5879                           && INTVAL (XEXP (base, 1)) % outer_size != 0)
5880                         return x;
5881                       base = XEXP (base, 0);
5882                     }
5883                   if (!REG_P (base)
5884                       || (REGNO_POINTER_ALIGN (REGNO (base))
5885                           < outer_size * BITS_PER_UNIT))
5886                     return x;
5887                 }
5888
5889               find_reloads_address (GET_MODE (tem), &tem, XEXP (tem, 0),
5890                                     &XEXP (tem, 0), opnum, ADDR_TYPE (type),
5891                                     ind_levels, insn);
5892
5893               /* If this is not a toplevel operand, find_reloads doesn't see
5894                  this substitution.  We have to emit a USE of the pseudo so
5895                  that delete_output_reload can see it.  */
5896               if (replace_reloads && recog_data.operand[opnum] != x)
5897                 /* We mark the USE with QImode so that we recognize it
5898                    as one that can be safely deleted at the end of
5899                    reload.  */
5900                 PUT_MODE (emit_insn_before (gen_rtx_USE (VOIDmode,
5901                                                          SUBREG_REG (x)),
5902                                             insn), QImode);
5903               x = tem;
5904             }
5905         }
5906     }
5907   return x;
5908 }
5909 \f
5910 /* Substitute into the current INSN the registers into which we have reloaded
5911    the things that need reloading.  The array `replacements'
5912    contains the locations of all pointers that must be changed
5913    and says what to replace them with.
5914
5915    Return the rtx that X translates into; usually X, but modified.  */
5916
5917 void
5918 subst_reloads (rtx insn)
5919 {
5920   int i;
5921
5922   for (i = 0; i < n_replacements; i++)
5923     {
5924       struct replacement *r = &replacements[i];
5925       rtx reloadreg = rld[r->what].reg_rtx;
5926       if (reloadreg)
5927         {
5928 #ifdef ENABLE_CHECKING
5929           /* Internal consistency test.  Check that we don't modify
5930              anything in the equivalence arrays.  Whenever something from
5931              those arrays needs to be reloaded, it must be unshared before
5932              being substituted into; the equivalence must not be modified.
5933              Otherwise, if the equivalence is used after that, it will
5934              have been modified, and the thing substituted (probably a
5935              register) is likely overwritten and not a usable equivalence.  */
5936           int check_regno;
5937
5938           for (check_regno = 0; check_regno < max_regno; check_regno++)
5939             {
5940 #define CHECK_MODF(ARRAY)                                               \
5941               gcc_assert (!ARRAY[check_regno]                           \
5942                           || !loc_mentioned_in_p (r->where,             \
5943                                                   ARRAY[check_regno]))
5944
5945               CHECK_MODF (reg_equiv_constant);
5946               CHECK_MODF (reg_equiv_memory_loc);
5947               CHECK_MODF (reg_equiv_address);
5948               CHECK_MODF (reg_equiv_mem);
5949 #undef CHECK_MODF
5950             }
5951 #endif /* ENABLE_CHECKING */
5952
5953           /* If we're replacing a LABEL_REF with a register, add a
5954              REG_LABEL note to indicate to flow which label this
5955              register refers to.  */
5956           if (GET_CODE (*r->where) == LABEL_REF
5957               && JUMP_P (insn))
5958             REG_NOTES (insn) = gen_rtx_INSN_LIST (REG_LABEL,
5959                                                   XEXP (*r->where, 0),
5960                                                   REG_NOTES (insn));
5961
5962           /* Encapsulate RELOADREG so its machine mode matches what
5963              used to be there.  Note that gen_lowpart_common will
5964              do the wrong thing if RELOADREG is multi-word.  RELOADREG
5965              will always be a REG here.  */
5966           if (GET_MODE (reloadreg) != r->mode && r->mode != VOIDmode)
5967             reloadreg = reload_adjust_reg_for_mode (reloadreg, r->mode);
5968
5969           /* If we are putting this into a SUBREG and RELOADREG is a
5970              SUBREG, we would be making nested SUBREGs, so we have to fix
5971              this up.  Note that r->where == &SUBREG_REG (*r->subreg_loc).  */
5972
5973           if (r->subreg_loc != 0 && GET_CODE (reloadreg) == SUBREG)
5974             {
5975               if (GET_MODE (*r->subreg_loc)
5976                   == GET_MODE (SUBREG_REG (reloadreg)))
5977                 *r->subreg_loc = SUBREG_REG (reloadreg);
5978               else
5979                 {
5980                   int final_offset =
5981                     SUBREG_BYTE (*r->subreg_loc) + SUBREG_BYTE (reloadreg);
5982
5983                   /* When working with SUBREGs the rule is that the byte
5984                      offset must be a multiple of the SUBREG's mode.  */
5985                   final_offset = (final_offset /
5986                                   GET_MODE_SIZE (GET_MODE (*r->subreg_loc)));
5987                   final_offset = (final_offset *
5988                                   GET_MODE_SIZE (GET_MODE (*r->subreg_loc)));
5989
5990                   *r->where = SUBREG_REG (reloadreg);
5991                   SUBREG_BYTE (*r->subreg_loc) = final_offset;
5992                 }
5993             }
5994           else
5995             *r->where = reloadreg;
5996         }
5997       /* If reload got no reg and isn't optional, something's wrong.  */
5998       else
5999         gcc_assert (rld[r->what].optional);
6000     }
6001 }
6002 \f
6003 /* Make a copy of any replacements being done into X and move those
6004    copies to locations in Y, a copy of X.  */
6005
6006 void
6007 copy_replacements (rtx x, rtx y)
6008 {
6009   /* We can't support X being a SUBREG because we might then need to know its
6010      location if something inside it was replaced.  */
6011   gcc_assert (GET_CODE (x) != SUBREG);
6012
6013   copy_replacements_1 (&x, &y, n_replacements);
6014 }
6015
6016 static void
6017 copy_replacements_1 (rtx *px, rtx *py, int orig_replacements)
6018 {
6019   int i, j;
6020   rtx x, y;
6021   struct replacement *r;
6022   enum rtx_code code;
6023   const char *fmt;
6024
6025   for (j = 0; j < orig_replacements; j++)
6026     {
6027       if (replacements[j].subreg_loc == px)
6028         {
6029           r = &replacements[n_replacements++];
6030           r->where = replacements[j].where;
6031           r->subreg_loc = py;
6032           r->what = replacements[j].what;
6033           r->mode = replacements[j].mode;
6034         }
6035       else if (replacements[j].where == px)
6036         {
6037           r = &replacements[n_replacements++];
6038           r->where = py;
6039           r->subreg_loc = 0;
6040           r->what = replacements[j].what;
6041           r->mode = replacements[j].mode;
6042         }
6043     }
6044
6045   x = *px;
6046   y = *py;
6047   code = GET_CODE (x);
6048   fmt = GET_RTX_FORMAT (code);
6049
6050   for (i = GET_RTX_LENGTH (code) - 1; i >= 0; i--)
6051     {
6052       if (fmt[i] == 'e')
6053         copy_replacements_1 (&XEXP (x, i), &XEXP (y, i), orig_replacements);
6054       else if (fmt[i] == 'E')
6055         for (j = XVECLEN (x, i); --j >= 0; )
6056           copy_replacements_1 (&XVECEXP (x, i, j), &XVECEXP (y, i, j),
6057                                orig_replacements);
6058     }
6059 }
6060
6061 /* Change any replacements being done to *X to be done to *Y.  */
6062
6063 void
6064 move_replacements (rtx *x, rtx *y)
6065 {
6066   int i;
6067
6068   for (i = 0; i < n_replacements; i++)
6069     if (replacements[i].subreg_loc == x)
6070       replacements[i].subreg_loc = y;
6071     else if (replacements[i].where == x)
6072       {
6073         replacements[i].where = y;
6074         replacements[i].subreg_loc = 0;
6075       }
6076 }
6077 \f
6078 /* If LOC was scheduled to be replaced by something, return the replacement.
6079    Otherwise, return *LOC.  */
6080
6081 rtx
6082 find_replacement (rtx *loc)
6083 {
6084   struct replacement *r;
6085
6086   for (r = &replacements[0]; r < &replacements[n_replacements]; r++)
6087     {
6088       rtx reloadreg = rld[r->what].reg_rtx;
6089
6090       if (reloadreg && r->where == loc)
6091         {
6092           if (r->mode != VOIDmode && GET_MODE (reloadreg) != r->mode)
6093             reloadreg = gen_rtx_REG (r->mode, REGNO (reloadreg));
6094
6095           return reloadreg;
6096         }
6097       else if (reloadreg && r->subreg_loc == loc)
6098         {
6099           /* RELOADREG must be either a REG or a SUBREG.
6100
6101              ??? Is it actually still ever a SUBREG?  If so, why?  */
6102
6103           if (REG_P (reloadreg))
6104             return gen_rtx_REG (GET_MODE (*loc),
6105                                 (REGNO (reloadreg) +
6106                                  subreg_regno_offset (REGNO (SUBREG_REG (*loc)),
6107                                                       GET_MODE (SUBREG_REG (*loc)),
6108                                                       SUBREG_BYTE (*loc),
6109                                                       GET_MODE (*loc))));
6110           else if (GET_MODE (reloadreg) == GET_MODE (*loc))
6111             return reloadreg;
6112           else
6113             {
6114               int final_offset = SUBREG_BYTE (reloadreg) + SUBREG_BYTE (*loc);
6115
6116               /* When working with SUBREGs the rule is that the byte
6117                  offset must be a multiple of the SUBREG's mode.  */
6118               final_offset = (final_offset / GET_MODE_SIZE (GET_MODE (*loc)));
6119               final_offset = (final_offset * GET_MODE_SIZE (GET_MODE (*loc)));
6120               return gen_rtx_SUBREG (GET_MODE (*loc), SUBREG_REG (reloadreg),
6121                                      final_offset);
6122             }
6123         }
6124     }
6125
6126   /* If *LOC is a PLUS, MINUS, or MULT, see if a replacement is scheduled for
6127      what's inside and make a new rtl if so.  */
6128   if (GET_CODE (*loc) == PLUS || GET_CODE (*loc) == MINUS
6129       || GET_CODE (*loc) == MULT)
6130     {
6131       rtx x = find_replacement (&XEXP (*loc, 0));
6132       rtx y = find_replacement (&XEXP (*loc, 1));
6133
6134       if (x != XEXP (*loc, 0) || y != XEXP (*loc, 1))
6135         return gen_rtx_fmt_ee (GET_CODE (*loc), GET_MODE (*loc), x, y);
6136     }
6137
6138   return *loc;
6139 }
6140 \f
6141 /* Return nonzero if register in range [REGNO, ENDREGNO)
6142    appears either explicitly or implicitly in X
6143    other than being stored into (except for earlyclobber operands).
6144
6145    References contained within the substructure at LOC do not count.
6146    LOC may be zero, meaning don't ignore anything.
6147
6148    This is similar to refers_to_regno_p in rtlanal.c except that we
6149    look at equivalences for pseudos that didn't get hard registers.  */
6150
6151 int
6152 refers_to_regno_for_reload_p (unsigned int regno, unsigned int endregno,
6153                               rtx x, rtx *loc)
6154 {
6155   int i;
6156   unsigned int r;
6157   RTX_CODE code;
6158   const char *fmt;
6159
6160   if (x == 0)
6161     return 0;
6162
6163  repeat:
6164   code = GET_CODE (x);
6165
6166   switch (code)
6167     {
6168     case REG:
6169       r = REGNO (x);
6170
6171       /* If this is a pseudo, a hard register must not have been allocated.
6172          X must therefore either be a constant or be in memory.  */
6173       if (r >= FIRST_PSEUDO_REGISTER)
6174         {
6175           if (reg_equiv_memory_loc[r])
6176             return refers_to_regno_for_reload_p (regno, endregno,
6177                                                  reg_equiv_memory_loc[r],
6178                                                  (rtx*) 0);
6179
6180           gcc_assert (reg_equiv_constant[r]);
6181           return 0;
6182         }
6183
6184       return (endregno > r
6185               && regno < r + (r < FIRST_PSEUDO_REGISTER
6186                               ? hard_regno_nregs[r][GET_MODE (x)]
6187                               : 1));
6188
6189     case SUBREG:
6190       /* If this is a SUBREG of a hard reg, we can see exactly which
6191          registers are being modified.  Otherwise, handle normally.  */
6192       if (REG_P (SUBREG_REG (x))
6193           && REGNO (SUBREG_REG (x)) < FIRST_PSEUDO_REGISTER)
6194         {
6195           unsigned int inner_regno = subreg_regno (x);
6196           unsigned int inner_endregno
6197             = inner_regno + (inner_regno < FIRST_PSEUDO_REGISTER
6198                              ? hard_regno_nregs[inner_regno][GET_MODE (x)] : 1);
6199
6200           return endregno > inner_regno && regno < inner_endregno;
6201         }
6202       break;
6203
6204     case CLOBBER:
6205     case SET:
6206       if (&SET_DEST (x) != loc
6207           /* Note setting a SUBREG counts as referring to the REG it is in for
6208              a pseudo but not for hard registers since we can
6209              treat each word individually.  */
6210           && ((GET_CODE (SET_DEST (x)) == SUBREG
6211                && loc != &SUBREG_REG (SET_DEST (x))
6212                && REG_P (SUBREG_REG (SET_DEST (x)))
6213                && REGNO (SUBREG_REG (SET_DEST (x))) >= FIRST_PSEUDO_REGISTER
6214                && refers_to_regno_for_reload_p (regno, endregno,
6215                                                 SUBREG_REG (SET_DEST (x)),
6216                                                 loc))
6217               /* If the output is an earlyclobber operand, this is
6218                  a conflict.  */
6219               || ((!REG_P (SET_DEST (x))
6220                    || earlyclobber_operand_p (SET_DEST (x)))
6221                   && refers_to_regno_for_reload_p (regno, endregno,
6222                                                    SET_DEST (x), loc))))
6223         return 1;
6224
6225       if (code == CLOBBER || loc == &SET_SRC (x))
6226         return 0;
6227       x = SET_SRC (x);
6228       goto repeat;
6229
6230     default:
6231       break;
6232     }
6233
6234   /* X does not match, so try its subexpressions.  */
6235
6236   fmt = GET_RTX_FORMAT (code);
6237   for (i = GET_RTX_LENGTH (code) - 1; i >= 0; i--)
6238     {
6239       if (fmt[i] == 'e' && loc != &XEXP (x, i))
6240         {
6241           if (i == 0)
6242             {
6243               x = XEXP (x, 0);
6244               goto repeat;
6245             }
6246           else
6247             if (refers_to_regno_for_reload_p (regno, endregno,
6248                                               XEXP (x, i), loc))
6249               return 1;
6250         }
6251       else if (fmt[i] == 'E')
6252         {
6253           int j;
6254           for (j = XVECLEN (x, i) - 1; j >= 0; j--)
6255             if (loc != &XVECEXP (x, i, j)
6256                 && refers_to_regno_for_reload_p (regno, endregno,
6257                                                  XVECEXP (x, i, j), loc))
6258               return 1;
6259         }
6260     }
6261   return 0;
6262 }
6263
6264 /* Nonzero if modifying X will affect IN.  If X is a register or a SUBREG,
6265    we check if any register number in X conflicts with the relevant register
6266    numbers.  If X is a constant, return 0.  If X is a MEM, return 1 iff IN
6267    contains a MEM (we don't bother checking for memory addresses that can't
6268    conflict because we expect this to be a rare case.
6269
6270    This function is similar to reg_overlap_mentioned_p in rtlanal.c except
6271    that we look at equivalences for pseudos that didn't get hard registers.  */
6272
6273 int
6274 reg_overlap_mentioned_for_reload_p (rtx x, rtx in)
6275 {
6276   int regno, endregno;
6277
6278   /* Overly conservative.  */
6279   if (GET_CODE (x) == STRICT_LOW_PART
6280       || GET_RTX_CLASS (GET_CODE (x)) == RTX_AUTOINC)
6281     x = XEXP (x, 0);
6282
6283   /* If either argument is a constant, then modifying X can not affect IN.  */
6284   if (CONSTANT_P (x) || CONSTANT_P (in))
6285     return 0;
6286   else if (GET_CODE (x) == SUBREG)
6287     {
6288       regno = REGNO (SUBREG_REG (x));
6289       if (regno < FIRST_PSEUDO_REGISTER)
6290         regno += subreg_regno_offset (REGNO (SUBREG_REG (x)),
6291                                       GET_MODE (SUBREG_REG (x)),
6292                                       SUBREG_BYTE (x),
6293                                       GET_MODE (x));
6294     }
6295   else if (REG_P (x))
6296     {
6297       regno = REGNO (x);
6298
6299       /* If this is a pseudo, it must not have been assigned a hard register.
6300          Therefore, it must either be in memory or be a constant.  */
6301
6302       if (regno >= FIRST_PSEUDO_REGISTER)
6303         {
6304           if (reg_equiv_memory_loc[regno])
6305             return refers_to_mem_for_reload_p (in);
6306           gcc_assert (reg_equiv_constant[regno]);
6307           return 0;
6308         }
6309     }
6310   else if (MEM_P (x))
6311     return refers_to_mem_for_reload_p (in);
6312   else if (GET_CODE (x) == SCRATCH || GET_CODE (x) == PC
6313            || GET_CODE (x) == CC0)
6314     return reg_mentioned_p (x, in);
6315   else 
6316     {
6317       gcc_assert (GET_CODE (x) == PLUS);
6318
6319       /* We actually want to know if X is mentioned somewhere inside IN.
6320          We must not say that (plus (sp) (const_int 124)) is in
6321          (plus (sp) (const_int 64)), since that can lead to incorrect reload
6322          allocation when spuriously changing a RELOAD_FOR_OUTPUT_ADDRESS
6323          into a RELOAD_OTHER on behalf of another RELOAD_OTHER.  */
6324       while (MEM_P (in))
6325         in = XEXP (in, 0);
6326       if (REG_P (in))
6327         return 0;
6328       else if (GET_CODE (in) == PLUS)
6329         return (reg_overlap_mentioned_for_reload_p (x, XEXP (in, 0))
6330                 || reg_overlap_mentioned_for_reload_p (x, XEXP (in, 1)));
6331       else return (reg_overlap_mentioned_for_reload_p (XEXP (x, 0), in)
6332                    || reg_overlap_mentioned_for_reload_p (XEXP (x, 1), in));
6333     }
6334
6335   endregno = regno + (regno < FIRST_PSEUDO_REGISTER
6336                       ? hard_regno_nregs[regno][GET_MODE (x)] : 1);
6337
6338   return refers_to_regno_for_reload_p (regno, endregno, in, (rtx*) 0);
6339 }
6340
6341 /* Return nonzero if anything in X contains a MEM.  Look also for pseudo
6342    registers.  */
6343
6344 int
6345 refers_to_mem_for_reload_p (rtx x)
6346 {
6347   const char *fmt;
6348   int i;
6349
6350   if (MEM_P (x))
6351     return 1;
6352
6353   if (REG_P (x))
6354     return (REGNO (x) >= FIRST_PSEUDO_REGISTER
6355             && reg_equiv_memory_loc[REGNO (x)]);
6356
6357   fmt = GET_RTX_FORMAT (GET_CODE (x));
6358   for (i = GET_RTX_LENGTH (GET_CODE (x)) - 1; i >= 0; i--)
6359     if (fmt[i] == 'e'
6360         && (MEM_P (XEXP (x, i))
6361             || refers_to_mem_for_reload_p (XEXP (x, i))))
6362       return 1;
6363
6364   return 0;
6365 }
6366 \f
6367 /* Check the insns before INSN to see if there is a suitable register
6368    containing the same value as GOAL.
6369    If OTHER is -1, look for a register in class CLASS.
6370    Otherwise, just see if register number OTHER shares GOAL's value.
6371
6372    Return an rtx for the register found, or zero if none is found.
6373
6374    If RELOAD_REG_P is (short *)1,
6375    we reject any hard reg that appears in reload_reg_rtx
6376    because such a hard reg is also needed coming into this insn.
6377
6378    If RELOAD_REG_P is any other nonzero value,
6379    it is a vector indexed by hard reg number
6380    and we reject any hard reg whose element in the vector is nonnegative
6381    as well as any that appears in reload_reg_rtx.
6382
6383    If GOAL is zero, then GOALREG is a register number; we look
6384    for an equivalent for that register.
6385
6386    MODE is the machine mode of the value we want an equivalence for.
6387    If GOAL is nonzero and not VOIDmode, then it must have mode MODE.
6388
6389    This function is used by jump.c as well as in the reload pass.
6390
6391    If GOAL is the sum of the stack pointer and a constant, we treat it
6392    as if it were a constant except that sp is required to be unchanging.  */
6393
6394 rtx
6395 find_equiv_reg (rtx goal, rtx insn, enum reg_class class, int other,
6396                 short *reload_reg_p, int goalreg, enum machine_mode mode)
6397 {
6398   rtx p = insn;
6399   rtx goaltry, valtry, value, where;
6400   rtx pat;
6401   int regno = -1;
6402   int valueno;
6403   int goal_mem = 0;
6404   int goal_const = 0;
6405   int goal_mem_addr_varies = 0;
6406   int need_stable_sp = 0;
6407   int nregs;
6408   int valuenregs;
6409   int num = 0;
6410
6411   if (goal == 0)
6412     regno = goalreg;
6413   else if (REG_P (goal))
6414     regno = REGNO (goal);
6415   else if (MEM_P (goal))
6416     {
6417       enum rtx_code code = GET_CODE (XEXP (goal, 0));
6418       if (MEM_VOLATILE_P (goal))
6419         return 0;
6420       if (flag_float_store && GET_MODE_CLASS (GET_MODE (goal)) == MODE_FLOAT)
6421         return 0;
6422       /* An address with side effects must be reexecuted.  */
6423       switch (code)
6424         {
6425         case POST_INC:
6426         case PRE_INC:
6427         case POST_DEC:
6428         case PRE_DEC:
6429         case POST_MODIFY:
6430         case PRE_MODIFY:
6431           return 0;
6432         default:
6433           break;
6434         }
6435       goal_mem = 1;
6436     }
6437   else if (CONSTANT_P (goal))
6438     goal_const = 1;
6439   else if (GET_CODE (goal) == PLUS
6440            && XEXP (goal, 0) == stack_pointer_rtx
6441            && CONSTANT_P (XEXP (goal, 1)))
6442     goal_const = need_stable_sp = 1;
6443   else if (GET_CODE (goal) == PLUS
6444            && XEXP (goal, 0) == frame_pointer_rtx
6445            && CONSTANT_P (XEXP (goal, 1)))
6446     goal_const = 1;
6447   else
6448     return 0;
6449
6450   num = 0;
6451   /* Scan insns back from INSN, looking for one that copies
6452      a value into or out of GOAL.
6453      Stop and give up if we reach a label.  */
6454
6455   while (1)
6456     {
6457       p = PREV_INSN (p);
6458       num++;
6459       if (p == 0 || LABEL_P (p)
6460           || num > PARAM_VALUE (PARAM_MAX_RELOAD_SEARCH_INSNS))
6461         return 0;
6462
6463       if (NONJUMP_INSN_P (p)
6464           /* If we don't want spill regs ...  */
6465           && (! (reload_reg_p != 0
6466                  && reload_reg_p != (short *) (HOST_WIDE_INT) 1)
6467               /* ... then ignore insns introduced by reload; they aren't
6468                  useful and can cause results in reload_as_needed to be
6469                  different from what they were when calculating the need for
6470                  spills.  If we notice an input-reload insn here, we will
6471                  reject it below, but it might hide a usable equivalent.
6472                  That makes bad code.  It may even abort: perhaps no reg was
6473                  spilled for this insn because it was assumed we would find
6474                  that equivalent.  */
6475               || INSN_UID (p) < reload_first_uid))
6476         {
6477           rtx tem;
6478           pat = single_set (p);
6479
6480           /* First check for something that sets some reg equal to GOAL.  */
6481           if (pat != 0
6482               && ((regno >= 0
6483                    && true_regnum (SET_SRC (pat)) == regno
6484                    && (valueno = true_regnum (valtry = SET_DEST (pat))) >= 0)
6485                   ||
6486                   (regno >= 0
6487                    && true_regnum (SET_DEST (pat)) == regno
6488                    && (valueno = true_regnum (valtry = SET_SRC (pat))) >= 0)
6489                   ||
6490                   (goal_const && rtx_equal_p (SET_SRC (pat), goal)
6491                    /* When looking for stack pointer + const,
6492                       make sure we don't use a stack adjust.  */
6493                    && !reg_overlap_mentioned_for_reload_p (SET_DEST (pat), goal)
6494                    && (valueno = true_regnum (valtry = SET_DEST (pat))) >= 0)
6495                   || (goal_mem
6496                       && (valueno = true_regnum (valtry = SET_DEST (pat))) >= 0
6497                       && rtx_renumbered_equal_p (goal, SET_SRC (pat)))
6498                   || (goal_mem
6499                       && (valueno = true_regnum (valtry = SET_SRC (pat))) >= 0
6500                       && rtx_renumbered_equal_p (goal, SET_DEST (pat)))
6501                   /* If we are looking for a constant,
6502                      and something equivalent to that constant was copied
6503                      into a reg, we can use that reg.  */
6504                   || (goal_const && REG_NOTES (p) != 0
6505                       && (tem = find_reg_note (p, REG_EQUIV, NULL_RTX))
6506                       && ((rtx_equal_p (XEXP (tem, 0), goal)
6507                            && (valueno
6508                                = true_regnum (valtry = SET_DEST (pat))) >= 0)
6509                           || (REG_P (SET_DEST (pat))
6510                               && GET_CODE (XEXP (tem, 0)) == CONST_DOUBLE
6511                               && (GET_MODE_CLASS (GET_MODE (XEXP (tem, 0)))
6512                                   == MODE_FLOAT)
6513                               && GET_CODE (goal) == CONST_INT
6514                               && 0 != (goaltry
6515                                        = operand_subword (XEXP (tem, 0), 0, 0,
6516                                                           VOIDmode))
6517                               && rtx_equal_p (goal, goaltry)
6518                               && (valtry
6519                                   = operand_subword (SET_DEST (pat), 0, 0,
6520                                                      VOIDmode))
6521                               && (valueno = true_regnum (valtry)) >= 0)))
6522                   || (goal_const && (tem = find_reg_note (p, REG_EQUIV,
6523                                                           NULL_RTX))
6524                       && REG_P (SET_DEST (pat))
6525                       && GET_CODE (XEXP (tem, 0)) == CONST_DOUBLE
6526                       && (GET_MODE_CLASS (GET_MODE (XEXP (tem, 0)))
6527                           == MODE_FLOAT)
6528                       && GET_CODE (goal) == CONST_INT
6529                       && 0 != (goaltry = operand_subword (XEXP (tem, 0), 1, 0,
6530                                                           VOIDmode))
6531                       && rtx_equal_p (goal, goaltry)
6532                       && (valtry
6533                           = operand_subword (SET_DEST (pat), 1, 0, VOIDmode))
6534                       && (valueno = true_regnum (valtry)) >= 0)))
6535             {
6536               if (other >= 0)
6537                 {
6538                   if (valueno != other)
6539                     continue;
6540                 }
6541               else if ((unsigned) valueno >= FIRST_PSEUDO_REGISTER)
6542                 continue;
6543               else
6544                 {
6545                   int i;
6546
6547                   for (i = hard_regno_nregs[valueno][mode] - 1; i >= 0; i--)
6548                     if (! TEST_HARD_REG_BIT (reg_class_contents[(int) class],
6549                                              valueno + i))
6550                       break;
6551                   if (i >= 0)
6552                     continue;
6553                 }
6554               value = valtry;
6555               where = p;
6556               break;
6557             }
6558         }
6559     }
6560
6561   /* We found a previous insn copying GOAL into a suitable other reg VALUE
6562      (or copying VALUE into GOAL, if GOAL is also a register).
6563      Now verify that VALUE is really valid.  */
6564
6565   /* VALUENO is the register number of VALUE; a hard register.  */
6566
6567   /* Don't try to re-use something that is killed in this insn.  We want
6568      to be able to trust REG_UNUSED notes.  */
6569   if (REG_NOTES (where) != 0 && find_reg_note (where, REG_UNUSED, value))
6570     return 0;
6571
6572   /* If we propose to get the value from the stack pointer or if GOAL is
6573      a MEM based on the stack pointer, we need a stable SP.  */
6574   if (valueno == STACK_POINTER_REGNUM || regno == STACK_POINTER_REGNUM
6575       || (goal_mem && reg_overlap_mentioned_for_reload_p (stack_pointer_rtx,
6576                                                           goal)))
6577     need_stable_sp = 1;
6578
6579   /* Reject VALUE if the copy-insn moved the wrong sort of datum.  */
6580   if (GET_MODE (value) != mode)
6581     return 0;
6582
6583   /* Reject VALUE if it was loaded from GOAL
6584      and is also a register that appears in the address of GOAL.  */
6585
6586   if (goal_mem && value == SET_DEST (single_set (where))
6587       && refers_to_regno_for_reload_p (valueno,
6588                                        (valueno
6589                                         + hard_regno_nregs[valueno][mode]),
6590                                        goal, (rtx*) 0))
6591     return 0;
6592
6593   /* Reject registers that overlap GOAL.  */
6594
6595   if (regno >= 0 && regno < FIRST_PSEUDO_REGISTER)
6596     nregs = hard_regno_nregs[regno][mode];
6597   else
6598     nregs = 1;
6599   valuenregs = hard_regno_nregs[valueno][mode];
6600
6601   if (!goal_mem && !goal_const
6602       && regno + nregs > valueno && regno < valueno + valuenregs)
6603     return 0;
6604
6605   /* Reject VALUE if it is one of the regs reserved for reloads.
6606      Reload1 knows how to reuse them anyway, and it would get
6607      confused if we allocated one without its knowledge.
6608      (Now that insns introduced by reload are ignored above,
6609      this case shouldn't happen, but I'm not positive.)  */
6610
6611   if (reload_reg_p != 0 && reload_reg_p != (short *) (HOST_WIDE_INT) 1)
6612     {
6613       int i;
6614       for (i = 0; i < valuenregs; ++i)
6615         if (reload_reg_p[valueno + i] >= 0)
6616           return 0;
6617     }
6618
6619   /* Reject VALUE if it is a register being used for an input reload
6620      even if it is not one of those reserved.  */
6621
6622   if (reload_reg_p != 0)
6623     {
6624       int i;
6625       for (i = 0; i < n_reloads; i++)
6626         if (rld[i].reg_rtx != 0 && rld[i].in)
6627           {
6628             int regno1 = REGNO (rld[i].reg_rtx);
6629             int nregs1 = hard_regno_nregs[regno1]
6630                                          [GET_MODE (rld[i].reg_rtx)];
6631             if (regno1 < valueno + valuenregs
6632                 && regno1 + nregs1 > valueno)
6633               return 0;
6634           }
6635     }
6636
6637   if (goal_mem)
6638     /* We must treat frame pointer as varying here,
6639        since it can vary--in a nonlocal goto as generated by expand_goto.  */
6640     goal_mem_addr_varies = !CONSTANT_ADDRESS_P (XEXP (goal, 0));
6641
6642   /* Now verify that the values of GOAL and VALUE remain unaltered
6643      until INSN is reached.  */
6644
6645   p = insn;
6646   while (1)
6647     {
6648       p = PREV_INSN (p);
6649       if (p == where)
6650         return value;
6651
6652       /* Don't trust the conversion past a function call
6653          if either of the two is in a call-clobbered register, or memory.  */
6654       if (CALL_P (p))
6655         {
6656           int i;
6657
6658           if (goal_mem || need_stable_sp)
6659             return 0;
6660
6661           if (regno >= 0 && regno < FIRST_PSEUDO_REGISTER)
6662             for (i = 0; i < nregs; ++i)
6663               if (call_used_regs[regno + i])
6664                 return 0;
6665
6666           if (valueno >= 0 && valueno < FIRST_PSEUDO_REGISTER)
6667             for (i = 0; i < valuenregs; ++i)
6668               if (call_used_regs[valueno + i])
6669                 return 0;
6670 #ifdef NON_SAVING_SETJMP
6671           if (NON_SAVING_SETJMP && find_reg_note (p, REG_SETJMP, NULL))
6672             return 0;
6673 #endif
6674         }
6675
6676       if (INSN_P (p))
6677         {
6678           pat = PATTERN (p);
6679
6680           /* Watch out for unspec_volatile, and volatile asms.  */
6681           if (volatile_insn_p (pat))
6682             return 0;
6683
6684           /* If this insn P stores in either GOAL or VALUE, return 0.
6685              If GOAL is a memory ref and this insn writes memory, return 0.
6686              If GOAL is a memory ref and its address is not constant,
6687              and this insn P changes a register used in GOAL, return 0.  */
6688
6689           if (GET_CODE (pat) == COND_EXEC)
6690             pat = COND_EXEC_CODE (pat);
6691           if (GET_CODE (pat) == SET || GET_CODE (pat) == CLOBBER)
6692             {
6693               rtx dest = SET_DEST (pat);
6694               while (GET_CODE (dest) == SUBREG
6695                      || GET_CODE (dest) == ZERO_EXTRACT
6696                      || GET_CODE (dest) == SIGN_EXTRACT
6697                      || GET_CODE (dest) == STRICT_LOW_PART)
6698                 dest = XEXP (dest, 0);
6699               if (REG_P (dest))
6700                 {
6701                   int xregno = REGNO (dest);
6702                   int xnregs;
6703                   if (REGNO (dest) < FIRST_PSEUDO_REGISTER)
6704                     xnregs = hard_regno_nregs[xregno][GET_MODE (dest)];
6705                   else
6706                     xnregs = 1;
6707                   if (xregno < regno + nregs && xregno + xnregs > regno)
6708                     return 0;
6709                   if (xregno < valueno + valuenregs
6710                       && xregno + xnregs > valueno)
6711                     return 0;
6712                   if (goal_mem_addr_varies
6713                       && reg_overlap_mentioned_for_reload_p (dest, goal))
6714                     return 0;
6715                   if (xregno == STACK_POINTER_REGNUM && need_stable_sp)
6716                     return 0;
6717                 }
6718               else if (goal_mem && MEM_P (dest)
6719                        && ! push_operand (dest, GET_MODE (dest)))
6720                 return 0;
6721               else if (MEM_P (dest) && regno >= FIRST_PSEUDO_REGISTER
6722                        && reg_equiv_memory_loc[regno] != 0)
6723                 return 0;
6724               else if (need_stable_sp && push_operand (dest, GET_MODE (dest)))
6725                 return 0;
6726             }
6727           else if (GET_CODE (pat) == PARALLEL)
6728             {
6729               int i;
6730               for (i = XVECLEN (pat, 0) - 1; i >= 0; i--)
6731                 {
6732                   rtx v1 = XVECEXP (pat, 0, i);
6733                   if (GET_CODE (v1) == COND_EXEC)
6734                     v1 = COND_EXEC_CODE (v1);
6735                   if (GET_CODE (v1) == SET || GET_CODE (v1) == CLOBBER)
6736                     {
6737                       rtx dest = SET_DEST (v1);
6738                       while (GET_CODE (dest) == SUBREG
6739                              || GET_CODE (dest) == ZERO_EXTRACT
6740                              || GET_CODE (dest) == SIGN_EXTRACT
6741                              || GET_CODE (dest) == STRICT_LOW_PART)
6742                         dest = XEXP (dest, 0);
6743                       if (REG_P (dest))
6744                         {
6745                           int xregno = REGNO (dest);
6746                           int xnregs;
6747                           if (REGNO (dest) < FIRST_PSEUDO_REGISTER)
6748                             xnregs = hard_regno_nregs[xregno][GET_MODE (dest)];
6749                           else
6750                             xnregs = 1;
6751                           if (xregno < regno + nregs
6752                               && xregno + xnregs > regno)
6753                             return 0;
6754                           if (xregno < valueno + valuenregs
6755                               && xregno + xnregs > valueno)
6756                             return 0;
6757                           if (goal_mem_addr_varies
6758                               && reg_overlap_mentioned_for_reload_p (dest,
6759                                                                      goal))
6760                             return 0;
6761                           if (xregno == STACK_POINTER_REGNUM && need_stable_sp)
6762                             return 0;
6763                         }
6764                       else if (goal_mem && MEM_P (dest)
6765                                && ! push_operand (dest, GET_MODE (dest)))
6766                         return 0;
6767                       else if (MEM_P (dest) && regno >= FIRST_PSEUDO_REGISTER
6768                                && reg_equiv_memory_loc[regno] != 0)
6769                         return 0;
6770                       else if (need_stable_sp
6771                                && push_operand (dest, GET_MODE (dest)))
6772                         return 0;
6773                     }
6774                 }
6775             }
6776
6777           if (CALL_P (p) && CALL_INSN_FUNCTION_USAGE (p))
6778             {
6779               rtx link;
6780
6781               for (link = CALL_INSN_FUNCTION_USAGE (p); XEXP (link, 1) != 0;
6782                    link = XEXP (link, 1))
6783                 {
6784                   pat = XEXP (link, 0);
6785                   if (GET_CODE (pat) == CLOBBER)
6786                     {
6787                       rtx dest = SET_DEST (pat);
6788
6789                       if (REG_P (dest))
6790                         {
6791                           int xregno = REGNO (dest);
6792                           int xnregs
6793                             = hard_regno_nregs[xregno][GET_MODE (dest)];
6794
6795                           if (xregno < regno + nregs
6796                               && xregno + xnregs > regno)
6797                             return 0;
6798                           else if (xregno < valueno + valuenregs
6799                                    && xregno + xnregs > valueno)
6800                             return 0;
6801                           else if (goal_mem_addr_varies
6802                                    && reg_overlap_mentioned_for_reload_p (dest,
6803                                                                      goal))
6804                             return 0;
6805                         }
6806
6807                       else if (goal_mem && MEM_P (dest)
6808                                && ! push_operand (dest, GET_MODE (dest)))
6809                         return 0;
6810                       else if (need_stable_sp
6811                                && push_operand (dest, GET_MODE (dest)))
6812                         return 0;
6813                     }
6814                 }
6815             }
6816
6817 #ifdef AUTO_INC_DEC
6818           /* If this insn auto-increments or auto-decrements
6819              either regno or valueno, return 0 now.
6820              If GOAL is a memory ref and its address is not constant,
6821              and this insn P increments a register used in GOAL, return 0.  */
6822           {
6823             rtx link;
6824
6825             for (link = REG_NOTES (p); link; link = XEXP (link, 1))
6826               if (REG_NOTE_KIND (link) == REG_INC
6827                   && REG_P (XEXP (link, 0)))
6828                 {
6829                   int incno = REGNO (XEXP (link, 0));
6830                   if (incno < regno + nregs && incno >= regno)
6831                     return 0;
6832                   if (incno < valueno + valuenregs && incno >= valueno)
6833                     return 0;
6834                   if (goal_mem_addr_varies
6835                       && reg_overlap_mentioned_for_reload_p (XEXP (link, 0),
6836                                                              goal))
6837                     return 0;
6838                 }
6839           }
6840 #endif
6841         }
6842     }
6843 }
6844 \f
6845 /* Find a place where INCED appears in an increment or decrement operator
6846    within X, and return the amount INCED is incremented or decremented by.
6847    The value is always positive.  */
6848
6849 static int
6850 find_inc_amount (rtx x, rtx inced)
6851 {
6852   enum rtx_code code = GET_CODE (x);
6853   const char *fmt;
6854   int i;
6855
6856   if (code == MEM)
6857     {
6858       rtx addr = XEXP (x, 0);
6859       if ((GET_CODE (addr) == PRE_DEC
6860            || GET_CODE (addr) == POST_DEC
6861            || GET_CODE (addr) == PRE_INC
6862            || GET_CODE (addr) == POST_INC)
6863           && XEXP (addr, 0) == inced)
6864         return GET_MODE_SIZE (GET_MODE (x));
6865       else if ((GET_CODE (addr) == PRE_MODIFY
6866                 || GET_CODE (addr) == POST_MODIFY)
6867                && GET_CODE (XEXP (addr, 1)) == PLUS
6868                && XEXP (addr, 0) == XEXP (XEXP (addr, 1), 0)
6869                && XEXP (addr, 0) == inced
6870                && GET_CODE (XEXP (XEXP (addr, 1), 1)) == CONST_INT)
6871         {
6872           i = INTVAL (XEXP (XEXP (addr, 1), 1));
6873           return i < 0 ? -i : i;
6874         }
6875     }
6876
6877   fmt = GET_RTX_FORMAT (code);
6878   for (i = GET_RTX_LENGTH (code) - 1; i >= 0; i--)
6879     {
6880       if (fmt[i] == 'e')
6881         {
6882           int tem = find_inc_amount (XEXP (x, i), inced);
6883           if (tem != 0)
6884             return tem;
6885         }
6886       if (fmt[i] == 'E')
6887         {
6888           int j;
6889           for (j = XVECLEN (x, i) - 1; j >= 0; j--)
6890             {
6891               int tem = find_inc_amount (XVECEXP (x, i, j), inced);
6892               if (tem != 0)
6893                 return tem;
6894             }
6895         }
6896     }
6897
6898   return 0;
6899 }
6900 \f
6901 /* Return 1 if register REGNO is the subject of a clobber in insn INSN.
6902    If SETS is nonzero, also consider SETs.  */
6903
6904 int
6905 regno_clobbered_p (unsigned int regno, rtx insn, enum machine_mode mode,
6906                    int sets)
6907 {
6908   unsigned int nregs = hard_regno_nregs[regno][mode];
6909   unsigned int endregno = regno + nregs;
6910
6911   if ((GET_CODE (PATTERN (insn)) == CLOBBER
6912        || (sets && GET_CODE (PATTERN (insn)) == SET))
6913       && REG_P (XEXP (PATTERN (insn), 0)))
6914     {
6915       unsigned int test = REGNO (XEXP (PATTERN (insn), 0));
6916
6917       return test >= regno && test < endregno;
6918     }
6919
6920   if (GET_CODE (PATTERN (insn)) == PARALLEL)
6921     {
6922       int i = XVECLEN (PATTERN (insn), 0) - 1;
6923
6924       for (; i >= 0; i--)
6925         {
6926           rtx elt = XVECEXP (PATTERN (insn), 0, i);
6927           if ((GET_CODE (elt) == CLOBBER
6928                || (sets && GET_CODE (PATTERN (insn)) == SET))
6929               && REG_P (XEXP (elt, 0)))
6930             {
6931               unsigned int test = REGNO (XEXP (elt, 0));
6932
6933               if (test >= regno && test < endregno)
6934                 return 1;
6935             }
6936         }
6937     }
6938
6939   return 0;
6940 }
6941
6942 /* Find the low part, with mode MODE, of a hard regno RELOADREG.  */
6943 rtx
6944 reload_adjust_reg_for_mode (rtx reloadreg, enum machine_mode mode)
6945 {
6946   int regno;
6947
6948   if (GET_MODE (reloadreg) == mode)
6949     return reloadreg;
6950
6951   regno = REGNO (reloadreg);
6952
6953   if (WORDS_BIG_ENDIAN)
6954     regno += (int) hard_regno_nregs[regno][GET_MODE (reloadreg)]
6955       - (int) hard_regno_nregs[regno][mode];
6956
6957   return gen_rtx_REG (mode, regno);
6958 }
6959
6960 static const char *const reload_when_needed_name[] =
6961 {
6962   "RELOAD_FOR_INPUT",
6963   "RELOAD_FOR_OUTPUT",
6964   "RELOAD_FOR_INSN",
6965   "RELOAD_FOR_INPUT_ADDRESS",
6966   "RELOAD_FOR_INPADDR_ADDRESS",
6967   "RELOAD_FOR_OUTPUT_ADDRESS",
6968   "RELOAD_FOR_OUTADDR_ADDRESS",
6969   "RELOAD_FOR_OPERAND_ADDRESS",
6970   "RELOAD_FOR_OPADDR_ADDR",
6971   "RELOAD_OTHER",
6972   "RELOAD_FOR_OTHER_ADDRESS"
6973 };
6974
6975 static const char * const reg_class_names[] = REG_CLASS_NAMES;
6976
6977 /* These functions are used to print the variables set by 'find_reloads' */
6978
6979 void
6980 debug_reload_to_stream (FILE *f)
6981 {
6982   int r;
6983   const char *prefix;
6984
6985   if (! f)
6986     f = stderr;
6987   for (r = 0; r < n_reloads; r++)
6988     {
6989       fprintf (f, "Reload %d: ", r);
6990
6991       if (rld[r].in != 0)
6992         {
6993           fprintf (f, "reload_in (%s) = ",
6994                    GET_MODE_NAME (rld[r].inmode));
6995           print_inline_rtx (f, rld[r].in, 24);
6996           fprintf (f, "\n\t");
6997         }
6998
6999       if (rld[r].out != 0)
7000         {
7001           fprintf (f, "reload_out (%s) = ",
7002                    GET_MODE_NAME (rld[r].outmode));
7003           print_inline_rtx (f, rld[r].out, 24);
7004           fprintf (f, "\n\t");
7005         }
7006
7007       fprintf (f, "%s, ", reg_class_names[(int) rld[r].class]);
7008
7009       fprintf (f, "%s (opnum = %d)",
7010                reload_when_needed_name[(int) rld[r].when_needed],
7011                rld[r].opnum);
7012
7013       if (rld[r].optional)
7014         fprintf (f, ", optional");
7015
7016       if (rld[r].nongroup)
7017         fprintf (f, ", nongroup");
7018
7019       if (rld[r].inc != 0)
7020         fprintf (f, ", inc by %d", rld[r].inc);
7021
7022       if (rld[r].nocombine)
7023         fprintf (f, ", can't combine");
7024
7025       if (rld[r].secondary_p)
7026         fprintf (f, ", secondary_reload_p");
7027
7028       if (rld[r].in_reg != 0)
7029         {
7030           fprintf (f, "\n\treload_in_reg: ");
7031           print_inline_rtx (f, rld[r].in_reg, 24);
7032         }
7033
7034       if (rld[r].out_reg != 0)
7035         {
7036           fprintf (f, "\n\treload_out_reg: ");
7037           print_inline_rtx (f, rld[r].out_reg, 24);
7038         }
7039
7040       if (rld[r].reg_rtx != 0)
7041         {
7042           fprintf (f, "\n\treload_reg_rtx: ");
7043           print_inline_rtx (f, rld[r].reg_rtx, 24);
7044         }
7045
7046       prefix = "\n\t";
7047       if (rld[r].secondary_in_reload != -1)
7048         {
7049           fprintf (f, "%ssecondary_in_reload = %d",
7050                    prefix, rld[r].secondary_in_reload);
7051           prefix = ", ";
7052         }
7053
7054       if (rld[r].secondary_out_reload != -1)
7055         fprintf (f, "%ssecondary_out_reload = %d\n",
7056                  prefix, rld[r].secondary_out_reload);
7057
7058       prefix = "\n\t";
7059       if (rld[r].secondary_in_icode != CODE_FOR_nothing)
7060         {
7061           fprintf (f, "%ssecondary_in_icode = %s", prefix,
7062                    insn_data[rld[r].secondary_in_icode].name);
7063           prefix = ", ";
7064         }
7065
7066       if (rld[r].secondary_out_icode != CODE_FOR_nothing)
7067         fprintf (f, "%ssecondary_out_icode = %s", prefix,
7068                  insn_data[rld[r].secondary_out_icode].name);
7069
7070       fprintf (f, "\n");
7071     }
7072 }
7073
7074 void
7075 debug_reload (void)
7076 {
7077   debug_reload_to_stream (stderr);
7078 }