OSDN Git Service

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