OSDN Git Service

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