OSDN Git Service

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