OSDN Git Service

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