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