OSDN Git Service

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