OSDN Git Service

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