]> gcc.gnu.org Git - gcc.git/blob - gcc/reload.c
7757dd7f0454b64942bc0207925d71379ea219b9
[gcc.git] / gcc / reload.c
1 /* Search an insn for pseudo regs that must be in hard regs and are not.
2 Copyright (C) 1987, 1988, 1989, 1992 Free Software Foundation, Inc.
3
4 This file is part of GNU CC.
5
6 GNU CC is free software; you can redistribute it and/or modify
7 it under the terms of the GNU General Public License as published by
8 the Free Software Foundation; either version 2, or (at your option)
9 any later version.
10
11 GNU CC is distributed in the hope that it will be useful,
12 but WITHOUT ANY WARRANTY; without even the implied warranty of
13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 GNU General Public License for more details.
15
16 You should have received a copy of the GNU General Public License
17 along with GNU CC; see the file COPYING. If not, write to
18 the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. */
19
20
21 /* This file contains subroutines used only from the file reload1.c.
22 It knows how to scan one insn for operands and values
23 that need to be copied into registers to make valid code.
24 It also finds other operands and values which are valid
25 but for which equivalent values in registers exist and
26 ought to be used instead.
27
28 Before processing the first insn of the function, call `init_reload'.
29
30 To scan an insn, call `find_reloads'. This does two things:
31 1. sets up tables describing which values must be reloaded
32 for this insn, and what kind of hard regs they must be reloaded into;
33 2. optionally record the locations where those values appear in
34 the data, so they can be replaced properly later.
35 This is done only if the second arg to `find_reloads' is nonzero.
36
37 The third arg to `find_reloads' specifies the number of levels
38 of indirect addressing supported by the machine. If it is zero,
39 indirect addressing is not valid. If it is one, (MEM (REG n))
40 is valid even if (REG n) did not get a hard register; if it is two,
41 (MEM (MEM (REG n))) is also valid even if (REG n) did not get a
42 hard register, and similarly for higher values.
43
44 Then you must choose the hard regs to reload those pseudo regs into,
45 and generate appropriate load insns before this insn and perhaps
46 also store insns after this insn. Set up the array `reload_reg_rtx'
47 to contain the REG rtx's for the registers you used. In some
48 cases `find_reloads' will return a nonzero value in `reload_reg_rtx'
49 for certain reloads. Then that tells you which register to use,
50 so you do not need to allocate one. But you still do need to add extra
51 instructions to copy the value into and out of that register.
52
53 Finally you must call `subst_reloads' to substitute the reload reg rtx's
54 into the locations already recorded.
55
56 NOTE SIDE EFFECTS:
57
58 find_reloads can alter the operands of the instruction it is called on.
59
60 1. Two operands of any sort may be interchanged, if they are in a
61 commutative instruction.
62 This happens only if find_reloads thinks the instruction will compile
63 better that way.
64
65 2. Pseudo-registers that are equivalent to constants are replaced
66 with those constants if they are not in hard registers.
67
68 1 happens every time find_reloads is called.
69 2 happens only when REPLACE is 1, which is only when
70 actually doing the reloads, not when just counting them.
71
72
73 Using a reload register for several reloads in one insn:
74
75 When an insn has reloads, it is considered as having three parts:
76 the input reloads, the insn itself after reloading, and the output reloads.
77 Reloads of values used in memory addresses are often needed for only one part.
78
79 When this is so, reload_when_needed records which part needs the reload.
80 Two reloads for different parts of the insn can share the same reload
81 register.
82
83 When a reload is used for addresses in multiple parts, or when it is
84 an ordinary operand, it is classified as RELOAD_OTHER, and cannot share
85 a register with any other reload. */
86
87 #define REG_OK_STRICT
88
89 #include "config.h"
90 #include "rtl.h"
91 #include "insn-config.h"
92 #include "insn-codes.h"
93 #include "recog.h"
94 #include "reload.h"
95 #include "regs.h"
96 #include "hard-reg-set.h"
97 #include "flags.h"
98 #include "real.h"
99
100 #ifndef REGISTER_MOVE_COST
101 #define REGISTER_MOVE_COST(x, y) 2
102 #endif
103 \f
104 /* The variables set up by `find_reloads' are:
105
106 n_reloads number of distinct reloads needed; max reload # + 1
107 tables indexed by reload number
108 reload_in rtx for value to reload from
109 reload_out rtx for where to store reload-reg afterward if nec
110 (often the same as reload_in)
111 reload_reg_class enum reg_class, saying what regs to reload into
112 reload_inmode enum machine_mode; mode this operand should have
113 when reloaded, on input.
114 reload_outmode enum machine_mode; mode this operand should have
115 when reloaded, on output.
116 reload_strict_low char; currently always zero; used to mean that this
117 reload is inside a STRICT_LOW_PART, but we don't
118 need to know this anymore.
119 reload_optional char, nonzero for an optional reload.
120 Optional reloads are ignored unless the
121 value is already sitting in a register.
122 reload_inc int, positive amount to increment or decrement by if
123 reload_in is a PRE_DEC, PRE_INC, POST_DEC, POST_INC.
124 Ignored otherwise (don't assume it is zero).
125 reload_in_reg rtx. A reg for which reload_in is the equivalent.
126 If reload_in is a symbol_ref which came from
127 reg_equiv_constant, then this is the pseudo
128 which has that symbol_ref as equivalent.
129 reload_reg_rtx rtx. This is the register to reload into.
130 If it is zero when `find_reloads' returns,
131 you must find a suitable register in the class
132 specified by reload_reg_class, and store here
133 an rtx for that register with mode from
134 reload_inmode or reload_outmode.
135 reload_nocombine char, nonzero if this reload shouldn't be
136 combined with another reload.
137 reload_needed_for rtx, operand this reload is needed for address of.
138 0 means it isn't needed for addressing.
139 reload_needed_for_multiple
140 int, 1 if this reload needed for more than one thing.
141 reload_when_needed enum, classifies reload as needed either for
142 addressing an input reload, addressing an output,
143 for addressing a non-reloaded mem ref,
144 or for unspecified purposes (i.e., more than one
145 of the above).
146 reload_secondary_reload int, gives the reload number of a secondary
147 reload, when needed; otherwise -1
148 reload_secondary_p int, 1 if this is a secondary register for one
149 or more reloads.
150 reload_secondary_icode enum insn_code, if a secondary reload is required,
151 gives the INSN_CODE that uses the secondary
152 reload as a scratch register, or CODE_FOR_nothing
153 if the secondary reload register is to be an
154 intermediate register. */
155 int n_reloads;
156
157 rtx reload_in[MAX_RELOADS];
158 rtx reload_out[MAX_RELOADS];
159 enum reg_class reload_reg_class[MAX_RELOADS];
160 enum machine_mode reload_inmode[MAX_RELOADS];
161 enum machine_mode reload_outmode[MAX_RELOADS];
162 char reload_strict_low[MAX_RELOADS];
163 rtx reload_reg_rtx[MAX_RELOADS];
164 char reload_optional[MAX_RELOADS];
165 int reload_inc[MAX_RELOADS];
166 rtx reload_in_reg[MAX_RELOADS];
167 char reload_nocombine[MAX_RELOADS];
168 int reload_needed_for_multiple[MAX_RELOADS];
169 rtx reload_needed_for[MAX_RELOADS];
170 enum reload_when_needed reload_when_needed[MAX_RELOADS];
171 int reload_secondary_reload[MAX_RELOADS];
172 int reload_secondary_p[MAX_RELOADS];
173 enum insn_code reload_secondary_icode[MAX_RELOADS];
174
175 /* All the "earlyclobber" operands of the current insn
176 are recorded here. */
177 int n_earlyclobbers;
178 rtx reload_earlyclobbers[MAX_RECOG_OPERANDS];
179
180 /* Replacing reloads.
181
182 If `replace_reloads' is nonzero, then as each reload is recorded
183 an entry is made for it in the table `replacements'.
184 Then later `subst_reloads' can look through that table and
185 perform all the replacements needed. */
186
187 /* Nonzero means record the places to replace. */
188 static int replace_reloads;
189
190 /* Each replacement is recorded with a structure like this. */
191 struct replacement
192 {
193 rtx *where; /* Location to store in */
194 rtx *subreg_loc; /* Location of SUBREG if WHERE is inside
195 a SUBREG; 0 otherwise. */
196 int what; /* which reload this is for */
197 enum machine_mode mode; /* mode it must have */
198 };
199
200 static struct replacement replacements[MAX_RECOG_OPERANDS * ((MAX_REGS_PER_ADDRESS * 2) + 1)];
201
202 /* Number of replacements currently recorded. */
203 static int n_replacements;
204
205 /* MEM-rtx's created for pseudo-regs in stack slots not directly addressable;
206 (see reg_equiv_address). */
207 static rtx memlocs[MAX_RECOG_OPERANDS * ((MAX_REGS_PER_ADDRESS * 2) + 1)];
208 static int n_memlocs;
209
210 #ifdef SECONDARY_MEMORY_NEEDED
211
212 /* Save MEMs needed to copy from one class of registers to another. One MEM
213 is used per mode, but normally only one or two modes are ever used.
214
215 We keep two versions, before and after register elimination. */
216
217 static rtx secondary_memlocs[NUM_MACHINE_MODES];
218 static rtx secondary_memlocs_elim[NUM_MACHINE_MODES];
219 #endif
220
221 /* The instruction we are doing reloads for;
222 so we can test whether a register dies in it. */
223 static rtx this_insn;
224
225 /* Nonzero if this instruction is a user-specified asm with operands. */
226 static int this_insn_is_asm;
227
228 /* If hard_regs_live_known is nonzero,
229 we can tell which hard regs are currently live,
230 at least enough to succeed in choosing dummy reloads. */
231 static int hard_regs_live_known;
232
233 /* Indexed by hard reg number,
234 element is nonegative if hard reg has been spilled.
235 This vector is passed to `find_reloads' as an argument
236 and is not changed here. */
237 static short *static_reload_reg_p;
238
239 /* Set to 1 in subst_reg_equivs if it changes anything. */
240 static int subst_reg_equivs_changed;
241
242 /* On return from push_reload, holds the reload-number for the OUT
243 operand, which can be different for that from the input operand. */
244 static int output_reloadnum;
245
246 static int alternative_allows_memconst ();
247 static rtx find_dummy_reload ();
248 static rtx find_reloads_toplev ();
249 static int find_reloads_address ();
250 static int find_reloads_address_1 ();
251 static void find_reloads_address_part ();
252 static int hard_reg_set_here_p ();
253 /* static rtx forget_volatility (); */
254 static rtx subst_reg_equivs ();
255 static rtx subst_indexed_address ();
256 void copy_replacements ();
257 rtx find_equiv_reg ();
258 static int find_inc_amount ();
259 \f
260 #ifdef HAVE_SECONDARY_RELOADS
261
262 /* Determine if any secondary reloads are needed for loading (if IN_P is
263 non-zero) or storing (if IN_P is zero) X to or from a reload register of
264 register class RELOAD_CLASS in mode RELOAD_MODE.
265
266 Return the register class of a secondary reload register, or NO_REGS if
267 none. *PMODE is set to the mode that the register is required in.
268 If the reload register is needed as a scratch register instead of an
269 intermediate register, *PICODE is set to the insn_code of the insn to be
270 used to load or store the primary reload register; otherwise *PICODE
271 is set to CODE_FOR_nothing.
272
273 In some cases (such as storing MQ into an external memory location on
274 the RT), both an intermediate register and a scratch register. In that
275 case, *PICODE is set to CODE_FOR_nothing, the class for the intermediate
276 register is returned, and the *PTERTIARY_... variables are set to describe
277 the scratch register. */
278
279 static enum reg_class
280 find_secondary_reload (x, reload_class, reload_mode, in_p, picode, pmode,
281 ptertiary_class, ptertiary_icode, ptertiary_mode)
282 rtx x;
283 enum reg_class reload_class;
284 enum machine_mode reload_mode;
285 int in_p;
286 enum insn_code *picode;
287 enum machine_mode *pmode;
288 enum reg_class *ptertiary_class;
289 enum insn_code *ptertiary_icode;
290 enum machine_mode *ptertiary_mode;
291 {
292 enum reg_class class = NO_REGS;
293 enum machine_mode mode = reload_mode;
294 enum insn_code icode = CODE_FOR_nothing;
295 enum reg_class t_class = NO_REGS;
296 enum machine_mode t_mode = VOIDmode;
297 enum insn_code t_icode = CODE_FOR_nothing;
298
299 /* If X is a pseudo-register that has an equivalent MEM (actually, if it
300 is still a pseudo-register by now, it *must* have an equivalent MEM
301 but we don't want to assume that), use that equivalent when seeing if
302 a secondary reload is needed since whether or not a reload is needed
303 might be sensitive to the form of the MEM. */
304
305 if (GET_CODE (x) == REG && REGNO (x) >= FIRST_PSEUDO_REGISTER
306 && reg_equiv_mem[REGNO (x)] != 0)
307 x = reg_equiv_mem[REGNO (x)];
308
309 #ifdef SECONDARY_INPUT_RELOAD_CLASS
310 if (in_p)
311 class = SECONDARY_INPUT_RELOAD_CLASS (reload_class, reload_mode, x);
312 #endif
313
314 #ifdef SECONDARY_OUTPUT_RELOAD_CLASS
315 if (! in_p)
316 class = SECONDARY_OUTPUT_RELOAD_CLASS (reload_class, reload_mode, x);
317 #endif
318
319 /* If we don't need any secondary registers, go away; the rest of the
320 values won't be used. */
321 if (class == NO_REGS)
322 return NO_REGS;
323
324 /* Get a possible insn to use. If the predicate doesn't accept X, don't
325 use the insn. */
326
327 icode = (in_p ? reload_in_optab[(int) reload_mode]
328 : reload_out_optab[(int) reload_mode]);
329
330 if (icode != CODE_FOR_nothing
331 && insn_operand_predicate[(int) icode][in_p]
332 && (! (insn_operand_predicate[(int) icode][in_p]) (x, reload_mode)))
333 icode = CODE_FOR_nothing;
334
335 /* If we will be using an insn, see if it can directly handle the reload
336 register we will be using. If it can, the secondary reload is for a
337 scratch register. If it can't, we will use the secondary reload for
338 an intermediate register and require a tertiary reload for the scratch
339 register. */
340
341 if (icode != CODE_FOR_nothing)
342 {
343 /* If IN_P is non-zero, the reload register will be the output in
344 operand 0. If IN_P is zero, the reload register will be the input
345 in operand 1. Outputs should have an initial "=", which we must
346 skip. */
347
348 char insn_letter = insn_operand_constraint[(int) icode][!in_p][in_p];
349 enum reg_class insn_class
350 = (insn_letter == 'r' ? GENERAL_REGS
351 : REG_CLASS_FROM_LETTER (insn_letter));
352
353 if (insn_class == NO_REGS
354 || (in_p && insn_operand_constraint[(int) icode][!in_p][0] != '=')
355 /* The scratch register's constraint must start with "=&". */
356 || insn_operand_constraint[(int) icode][2][0] != '='
357 || insn_operand_constraint[(int) icode][2][1] != '&')
358 abort ();
359
360 if (reg_class_subset_p (reload_class, insn_class))
361 mode = insn_operand_mode[(int) icode][2];
362 else
363 {
364 char t_letter = insn_operand_constraint[(int) icode][2][2];
365 class = insn_class;
366 t_mode = insn_operand_mode[(int) icode][2];
367 t_class = (t_letter == 'r' ? GENERAL_REGS
368 : REG_CLASS_FROM_LETTER (t_letter));
369 t_icode = icode;
370 icode = CODE_FOR_nothing;
371 }
372 }
373
374 *pmode = mode;
375 *picode = icode;
376 *ptertiary_class = t_class;
377 *ptertiary_mode = t_mode;
378 *ptertiary_icode = t_icode;
379
380 return class;
381 }
382 #endif /* HAVE_SECONDARY_RELOADS */
383 \f
384 #ifdef SECONDARY_MEMORY_NEEDED
385
386 /* Return a memory location that will be used to copy X in mode MODE.
387 If we haven't already made a location for this mode in this insn,
388 call find_reloads_address on the location being returned. */
389
390 rtx
391 get_secondary_mem (x, mode)
392 rtx x;
393 enum machine_mode mode;
394 {
395 rtx loc;
396 int mem_valid;
397
398 /* If MODE is narrower than a word, widen it. This is required because
399 most machines that require these memory locations do not support
400 short load and stores from all registers (e.g., FP registers). We could
401 possibly conditionalize this, but we lose nothing by doing the wider
402 mode. */
403
404 if (GET_MODE_BITSIZE (mode) < BITS_PER_WORD)
405 mode = mode_for_size (BITS_PER_WORD, GET_MODE_CLASS (mode), 0);
406
407 /* If we already have made a MEM for this insn, return it. */
408 if (secondary_memlocs_elim[(int) mode] != 0)
409 return secondary_memlocs_elim[(int) mode];
410
411 /* If this is the first time we've tried to get a MEM for this mode,
412 allocate a new one. `something_changed' in reload will get set
413 by noticing that the frame size has changed. */
414
415 if (secondary_memlocs[(int) mode] == 0)
416 secondary_memlocs[(int) mode]
417 = assign_stack_local (mode, GET_MODE_SIZE (mode), 0);
418
419 /* Get a version of the address doing any eliminations needed. If that
420 didn't give us a new MEM, make a new one if it isn't valid. */
421
422 loc = eliminate_regs (secondary_memlocs[(int) mode], 0, NULL_RTX);
423 mem_valid = strict_memory_address_p (mode, XEXP (loc, 0));
424
425 if (! mem_valid && loc == secondary_memlocs[(int) mode])
426 loc = copy_rtx (loc);
427
428 /* The only time the call below will do anything is if the stack
429 offset is too large. In that case IND_LEVELS doesn't matter, so we
430 can just pass a zero. */
431 if (! mem_valid)
432 find_reloads_address (mode, NULL_PTR, XEXP (loc, 0), &XEXP (loc, 0), x, 0);
433
434 /* If the address was not valid to begin with, we can not save it, because
435 there is no guarantee that the reloads needed to make it valid will
436 occur before every use of this address. */
437
438 else
439 secondary_memlocs_elim[(int) mode] = loc;
440
441 return loc;
442 }
443
444 /* Clear any secondary memory locations we've made. */
445
446 void
447 clear_secondary_mem ()
448 {
449 int i;
450
451 for (i = 0; i < NUM_MACHINE_MODES; i++)
452 secondary_memlocs[i] = 0;
453 }
454 #endif /* SECONDARY_MEMORY_NEEDED */
455 \f
456 /* Record one (sometimes two) reload that needs to be performed.
457 IN is an rtx saying where the data are to be found before this instruction.
458 OUT says where they must be stored after the instruction.
459 (IN is zero for data not read, and OUT is zero for data not written.)
460 INLOC and OUTLOC point to the places in the instructions where
461 IN and OUT were found.
462 CLASS is a register class required for the reloaded data.
463 INMODE is the machine mode that the instruction requires
464 for the reg that replaces IN and OUTMODE is likewise for OUT.
465
466 If IN is zero, then OUT's location and mode should be passed as
467 INLOC and INMODE.
468
469 STRICT_LOW is the 1 if there is a containing STRICT_LOW_PART rtx.
470
471 OPTIONAL nonzero means this reload does not need to be performed:
472 it can be discarded if that is more convenient.
473
474 The return value is the reload-number for this reload.
475
476 If both IN and OUT are nonzero, in some rare cases we might
477 want to make two separate reloads. (Actually we never do this now.)
478 Therefore, the reload-number for OUT is stored in
479 output_reloadnum when we return; the return value applies to IN.
480 Usually (presently always), when IN and OUT are nonzero,
481 the two reload-numbers are equal, but the caller should be careful to
482 distinguish them. */
483
484 static int
485 push_reload (in, out, inloc, outloc, class,
486 inmode, outmode, strict_low, optional, needed_for)
487 register rtx in, out;
488 rtx *inloc, *outloc;
489 enum reg_class class;
490 enum machine_mode inmode, outmode;
491 int strict_low;
492 int optional;
493 rtx needed_for;
494 {
495 register int i;
496 int dont_share = 0;
497 rtx *in_subreg_loc = 0, *out_subreg_loc = 0;
498 int secondary_reload = -1;
499 enum insn_code secondary_icode = CODE_FOR_nothing;
500
501 /* Compare two RTX's. */
502 #define MATCHES(x, y) \
503 (x == y || (x != 0 && (GET_CODE (x) == REG \
504 ? GET_CODE (y) == REG && REGNO (x) == REGNO (y) \
505 : rtx_equal_p (x, y) && ! side_effects_p (x))))
506
507 /* INMODE and/or OUTMODE could be VOIDmode if no mode
508 has been specified for the operand. In that case,
509 use the operand's mode as the mode to reload. */
510 if (inmode == VOIDmode && in != 0)
511 inmode = GET_MODE (in);
512 if (outmode == VOIDmode && out != 0)
513 outmode = GET_MODE (out);
514
515 /* If IN is a pseudo register everywhere-equivalent to a constant, and
516 it is not in a hard register, reload straight from the constant,
517 since we want to get rid of such pseudo registers.
518 Often this is done earlier, but not always in find_reloads_address. */
519 if (in != 0 && GET_CODE (in) == REG)
520 {
521 register int regno = REGNO (in);
522
523 if (regno >= FIRST_PSEUDO_REGISTER && reg_renumber[regno] < 0
524 && reg_equiv_constant[regno] != 0)
525 in = reg_equiv_constant[regno];
526 }
527
528 /* Likewise for OUT. Of course, OUT will never be equivalent to
529 an actual constant, but it might be equivalent to a memory location
530 (in the case of a parameter). */
531 if (out != 0 && GET_CODE (out) == REG)
532 {
533 register int regno = REGNO (out);
534
535 if (regno >= FIRST_PSEUDO_REGISTER && reg_renumber[regno] < 0
536 && reg_equiv_constant[regno] != 0)
537 out = reg_equiv_constant[regno];
538 }
539
540 /* If we have a read-write operand with an address side-effect,
541 change either IN or OUT so the side-effect happens only once. */
542 if (in != 0 && out != 0 && GET_CODE (in) == MEM && rtx_equal_p (in, out))
543 {
544 if (GET_CODE (XEXP (in, 0)) == POST_INC
545 || GET_CODE (XEXP (in, 0)) == POST_DEC)
546 in = gen_rtx (MEM, GET_MODE (in), XEXP (XEXP (in, 0), 0));
547 if (GET_CODE (XEXP (in, 0)) == PRE_INC
548 || GET_CODE (XEXP (in, 0)) == PRE_DEC)
549 out = gen_rtx (MEM, GET_MODE (out), XEXP (XEXP (out, 0), 0));
550 }
551
552 /* If we are reloading a (SUBREG (MEM ...) ...) or (SUBREG constant ...),
553 really reload just the inside expression in its own mode.
554 If we have (SUBREG:M1 (REG:M2 ...) ...) with M1 wider than M2 and the
555 register is a pseudo, this will become the same as the above case.
556 Do the same for (SUBREG:M1 (REG:M2 ...) ...) for a hard register R where
557 either M1 is not valid for R or M2 is wider than a word but we only
558 need one word to store an M2-sized quantity in R.
559 Note that the case of (SUBREG (CONST_INT...)...) is handled elsewhere;
560 we can't handle it here because CONST_INT does not indicate a mode.
561
562 Similarly, we must reload the inside expression if we have a
563 STRICT_LOW_PART (presumably, in == out in the cas).
564
565 Also reload the inner expression if it does not require a secondary
566 reload but the SUBREG does. */
567
568 if (in != 0 && GET_CODE (in) == SUBREG
569 && (GET_CODE (SUBREG_REG (in)) != REG
570 || strict_low
571 || (GET_CODE (SUBREG_REG (in)) == REG
572 && REGNO (SUBREG_REG (in)) >= FIRST_PSEUDO_REGISTER
573 && (GET_MODE_SIZE (inmode)
574 > GET_MODE_SIZE (GET_MODE (SUBREG_REG (in)))))
575 || (GET_CODE (SUBREG_REG (in)) == REG
576 && REGNO (SUBREG_REG (in)) < FIRST_PSEUDO_REGISTER
577 && (! HARD_REGNO_MODE_OK (REGNO (SUBREG_REG (in)), inmode)
578 || (GET_MODE_SIZE (inmode) <= UNITS_PER_WORD
579 && (GET_MODE_SIZE (GET_MODE (SUBREG_REG (in)))
580 > UNITS_PER_WORD)
581 && ((GET_MODE_SIZE (GET_MODE (SUBREG_REG (in)))
582 / UNITS_PER_WORD)
583 != HARD_REGNO_NREGS (REGNO (SUBREG_REG (in)),
584 GET_MODE (SUBREG_REG (in)))))))
585 #ifdef SECONDARY_INPUT_RELOAD_CLASS
586 || (SECONDARY_INPUT_RELOAD_CLASS (class, inmode, in) != NO_REGS
587 && (SECONDARY_INPUT_RELOAD_CLASS (class,
588 GET_MODE (SUBREG_REG (in)),
589 SUBREG_REG (in))
590 == NO_REGS))
591 #endif
592 ))
593 {
594 in_subreg_loc = inloc;
595 inloc = &SUBREG_REG (in);
596 in = *inloc;
597 if (GET_CODE (in) == MEM)
598 /* This is supposed to happen only for paradoxical subregs made by
599 combine.c. (SUBREG (MEM)) isn't supposed to occur other ways. */
600 if (GET_MODE_SIZE (GET_MODE (in)) > GET_MODE_SIZE (inmode))
601 abort ();
602 inmode = GET_MODE (in);
603 }
604
605 /* Similarly for paradoxical and problematical SUBREGs on the output.
606 Note that there is no reason we need worry about the previous value
607 of SUBREG_REG (out); even if wider than out,
608 storing in a subreg is entitled to clobber it all
609 (except in the case of STRICT_LOW_PART,
610 and in that case the constraint should label it input-output.) */
611 if (out != 0 && GET_CODE (out) == SUBREG
612 && (GET_CODE (SUBREG_REG (out)) != REG
613 || strict_low
614 || (GET_CODE (SUBREG_REG (out)) == REG
615 && REGNO (SUBREG_REG (out)) >= FIRST_PSEUDO_REGISTER
616 && (GET_MODE_SIZE (outmode)
617 > GET_MODE_SIZE (GET_MODE (SUBREG_REG (out)))))
618 || (GET_CODE (SUBREG_REG (out)) == REG
619 && REGNO (SUBREG_REG (out)) < FIRST_PSEUDO_REGISTER
620 && (! HARD_REGNO_MODE_OK (REGNO (SUBREG_REG (out)), outmode)
621 || (GET_MODE_SIZE (outmode) <= UNITS_PER_WORD
622 && (GET_MODE_SIZE (GET_MODE (SUBREG_REG (out)))
623 > UNITS_PER_WORD)
624 && ((GET_MODE_SIZE (GET_MODE (SUBREG_REG (out)))
625 / UNITS_PER_WORD)
626 != HARD_REGNO_NREGS (REGNO (SUBREG_REG (out)),
627 GET_MODE (SUBREG_REG (out)))))))
628 #ifdef SECONDARY_OUTPUT_RELOAD_CLASS
629 || (SECONDARY_OUTPUT_RELOAD_CLASS (class, outmode, out) != NO_REGS
630 && (SECONDARY_OUTPUT_RELOAD_CLASS (class,
631 GET_MODE (SUBREG_REG (out)),
632 SUBREG_REG (out))
633 == NO_REGS))
634 #endif
635 ))
636 {
637 out_subreg_loc = outloc;
638 outloc = &SUBREG_REG (out);
639 out = *outloc;
640 if (GET_CODE (out) == MEM
641 && GET_MODE_SIZE (GET_MODE (out)) > GET_MODE_SIZE (outmode))
642 abort ();
643 outmode = GET_MODE (out);
644 }
645
646 /* That's all we use STRICT_LOW for, so clear it. At some point,
647 we may want to get rid of reload_strict_low. */
648 strict_low = 0;
649
650 /* If IN appears in OUT, we can't share any input-only reload for IN. */
651 if (in != 0 && out != 0 && GET_CODE (out) == MEM
652 && (GET_CODE (in) == REG || GET_CODE (in) == MEM)
653 && reg_overlap_mentioned_for_reload_p (in, XEXP (out, 0)))
654 dont_share = 1;
655
656 /* If IN is a SUBREG of a hard register, make a new REG. This
657 simplifies some of the cases below. */
658
659 if (in != 0 && GET_CODE (in) == SUBREG && GET_CODE (SUBREG_REG (in)) == REG
660 && REGNO (SUBREG_REG (in)) < FIRST_PSEUDO_REGISTER)
661 in = gen_rtx (REG, GET_MODE (in),
662 REGNO (SUBREG_REG (in)) + SUBREG_WORD (in));
663
664 /* Similarly for OUT. */
665 if (out != 0 && GET_CODE (out) == SUBREG
666 && GET_CODE (SUBREG_REG (out)) == REG
667 && REGNO (SUBREG_REG (out)) < FIRST_PSEUDO_REGISTER)
668 out = gen_rtx (REG, GET_MODE (out),
669 REGNO (SUBREG_REG (out)) + SUBREG_WORD (out));
670
671 /* Narrow down the class of register wanted if that is
672 desirable on this machine for efficiency. */
673 if (in != 0)
674 class = PREFERRED_RELOAD_CLASS (in, class);
675
676 /* Output reloads may need analagous treatment, different in detail. */
677 #ifdef PREFERRED_OUTPUT_RELOAD_CLASS
678 if (out != 0)
679 class = PREFERRED_OUTPUT_RELOAD_CLASS (out, class);
680 #endif
681
682 /* Make sure we use a class that can handle the actual pseudo
683 inside any subreg. For example, on the 386, QImode regs
684 can appear within SImode subregs. Although GENERAL_REGS
685 can handle SImode, QImode needs a smaller class. */
686 #ifdef LIMIT_RELOAD_CLASS
687 if (in_subreg_loc)
688 class = LIMIT_RELOAD_CLASS (inmode, class);
689 else if (in != 0 && GET_CODE (in) == SUBREG)
690 class = LIMIT_RELOAD_CLASS (GET_MODE (SUBREG_REG (in)), class);
691
692 if (out_subreg_loc)
693 class = LIMIT_RELOAD_CLASS (outmode, class);
694 if (out != 0 && GET_CODE (out) == SUBREG)
695 class = LIMIT_RELOAD_CLASS (GET_MODE (SUBREG_REG (out)), class);
696 #endif
697
698 /* Verify that this class is at least possible for the mode that
699 is specified. */
700 if (this_insn_is_asm)
701 {
702 enum machine_mode mode;
703 if (GET_MODE_SIZE (inmode) > GET_MODE_SIZE (outmode))
704 mode = inmode;
705 else
706 mode = outmode;
707 if (mode == VOIDmode)
708 {
709 error_for_asm (this_insn, "cannot reload integer constant operand in `asm'");
710 mode = word_mode;
711 if (in != 0)
712 inmode = word_mode;
713 if (out != 0)
714 outmode = word_mode;
715 }
716 for (i = 0; i < FIRST_PSEUDO_REGISTER; i++)
717 if (HARD_REGNO_MODE_OK (i, mode)
718 && TEST_HARD_REG_BIT (reg_class_contents[(int) class], i))
719 {
720 int nregs = HARD_REGNO_NREGS (i, mode);
721
722 int j;
723 for (j = 1; j < nregs; j++)
724 if (! TEST_HARD_REG_BIT (reg_class_contents[(int) class], i + j))
725 break;
726 if (j == nregs)
727 break;
728 }
729 if (i == FIRST_PSEUDO_REGISTER)
730 {
731 error_for_asm (this_insn, "impossible register constraint in `asm'");
732 class = ALL_REGS;
733 }
734 }
735
736 if (class == NO_REGS)
737 abort ();
738
739 /* We can use an existing reload if the class is right
740 and at least one of IN and OUT is a match
741 and the other is at worst neutral.
742 (A zero compared against anything is neutral.) */
743 for (i = 0; i < n_reloads; i++)
744 if ((reg_class_subset_p (class, reload_reg_class[i])
745 || reg_class_subset_p (reload_reg_class[i], class))
746 && reload_strict_low[i] == strict_low
747 /* If the existing reload has a register, it must fit our class. */
748 && (reload_reg_rtx[i] == 0
749 || TEST_HARD_REG_BIT (reg_class_contents[(int) class],
750 true_regnum (reload_reg_rtx[i])))
751 && ((in != 0 && MATCHES (reload_in[i], in) && ! dont_share
752 && (out == 0 || reload_out[i] == 0 || MATCHES (reload_out[i], out)))
753 ||
754 (out != 0 && MATCHES (reload_out[i], out)
755 && (in == 0 || reload_in[i] == 0 || MATCHES (reload_in[i], in)))))
756 break;
757
758 /* Reloading a plain reg for input can match a reload to postincrement
759 that reg, since the postincrement's value is the right value.
760 Likewise, it can match a preincrement reload, since we regard
761 the preincrementation as happening before any ref in this insn
762 to that register. */
763 if (i == n_reloads)
764 for (i = 0; i < n_reloads; i++)
765 if ((reg_class_subset_p (class, reload_reg_class[i])
766 || reg_class_subset_p (reload_reg_class[i], class))
767 /* If the existing reload has a register, it must fit our class. */
768 && (reload_reg_rtx[i] == 0
769 || TEST_HARD_REG_BIT (reg_class_contents[(int) class],
770 true_regnum (reload_reg_rtx[i])))
771 && reload_strict_low[i] == strict_low
772 && out == 0 && reload_out[i] == 0 && reload_in[i] != 0
773 && ((GET_CODE (in) == REG
774 && (GET_CODE (reload_in[i]) == POST_INC
775 || GET_CODE (reload_in[i]) == POST_DEC
776 || GET_CODE (reload_in[i]) == PRE_INC
777 || GET_CODE (reload_in[i]) == PRE_DEC)
778 && MATCHES (XEXP (reload_in[i], 0), in))
779 ||
780 (GET_CODE (reload_in[i]) == REG
781 && (GET_CODE (in) == POST_INC
782 || GET_CODE (in) == POST_DEC
783 || GET_CODE (in) == PRE_INC
784 || GET_CODE (in) == PRE_DEC)
785 && MATCHES (XEXP (in, 0), reload_in[i]))))
786 {
787 /* Make sure reload_in ultimately has the increment,
788 not the plain register. */
789 if (GET_CODE (in) == REG)
790 in = reload_in[i];
791 break;
792 }
793
794 if (i == n_reloads)
795 {
796 #ifdef HAVE_SECONDARY_RELOADS
797 enum reg_class secondary_class = NO_REGS;
798 enum reg_class secondary_out_class = NO_REGS;
799 enum machine_mode secondary_mode = inmode;
800 enum machine_mode secondary_out_mode = outmode;
801 enum insn_code secondary_icode;
802 enum insn_code secondary_out_icode = CODE_FOR_nothing;
803 enum reg_class tertiary_class = NO_REGS;
804 enum reg_class tertiary_out_class = NO_REGS;
805 enum machine_mode tertiary_mode;
806 enum machine_mode tertiary_out_mode;
807 enum insn_code tertiary_icode;
808 enum insn_code tertiary_out_icode = CODE_FOR_nothing;
809 int tertiary_reload = -1;
810
811 /* See if we need a secondary reload register to move between
812 CLASS and IN or CLASS and OUT. Get the modes and icodes to
813 use for each of them if so. */
814
815 #ifdef SECONDARY_INPUT_RELOAD_CLASS
816 if (in != 0)
817 secondary_class
818 = find_secondary_reload (in, class, inmode, 1, &secondary_icode,
819 &secondary_mode, &tertiary_class,
820 &tertiary_icode, &tertiary_mode);
821 #endif
822
823 #ifdef SECONDARY_OUTPUT_RELOAD_CLASS
824 if (out != 0 && GET_CODE (out) != SCRATCH)
825 secondary_out_class
826 = find_secondary_reload (out, class, outmode, 0,
827 &secondary_out_icode, &secondary_out_mode,
828 &tertiary_out_class, &tertiary_out_icode,
829 &tertiary_out_mode);
830 #endif
831
832 /* We can only record one secondary and one tertiary reload. If both
833 IN and OUT need secondary reloads, we can only make an in-out
834 reload if neither need an insn and if the classes are compatible. */
835
836 if (secondary_class != NO_REGS && secondary_out_class != NO_REGS
837 && reg_class_subset_p (secondary_out_class, secondary_class))
838 secondary_class = secondary_out_class;
839
840 if (secondary_class != NO_REGS && secondary_out_class != NO_REGS
841 && (! reg_class_subset_p (secondary_class, secondary_out_class)
842 || secondary_icode != CODE_FOR_nothing
843 || secondary_out_icode != CODE_FOR_nothing))
844 {
845 push_reload (NULL_RTX, out, NULL_PTR, outloc, class,
846 VOIDmode, outmode, strict_low, optional, needed_for);
847 out = 0;
848 outloc = 0;
849 outmode = VOIDmode;
850 }
851
852 /* If we need a secondary reload for OUT but not IN, copy the
853 information. */
854 if (secondary_class == NO_REGS && secondary_out_class != NO_REGS)
855 {
856 secondary_class = secondary_out_class;
857 secondary_icode = secondary_out_icode;
858 tertiary_class = tertiary_out_class;
859 tertiary_icode = tertiary_out_icode;
860 tertiary_mode = tertiary_out_mode;
861 }
862
863 if (secondary_class != NO_REGS)
864 {
865 /* If we need a tertiary reload, see if we have one we can reuse
866 or else make one. */
867
868 if (tertiary_class != NO_REGS)
869 {
870 for (tertiary_reload = 0; tertiary_reload < n_reloads;
871 tertiary_reload++)
872 if (reload_secondary_p[tertiary_reload]
873 && (reg_class_subset_p (tertiary_class,
874 reload_reg_class[tertiary_reload])
875 || reg_class_subset_p (reload_reg_class[tertiary_reload],
876 tertiary_class))
877 && ((reload_inmode[tertiary_reload] == tertiary_mode)
878 || reload_inmode[tertiary_reload] == VOIDmode)
879 && ((reload_outmode[tertiary_reload] == tertiary_mode)
880 || reload_outmode[tertiary_reload] == VOIDmode)
881 && (reload_secondary_icode[tertiary_reload]
882 == CODE_FOR_nothing))
883
884 {
885 if (tertiary_mode != VOIDmode)
886 reload_inmode[tertiary_reload] = tertiary_mode;
887 if (tertiary_out_mode != VOIDmode)
888 reload_outmode[tertiary_reload] = tertiary_mode;
889 if (reg_class_subset_p (tertiary_class,
890 reload_reg_class[tertiary_reload]))
891 reload_reg_class[tertiary_reload] = tertiary_class;
892 if (reload_needed_for[tertiary_reload] != needed_for)
893 reload_needed_for_multiple[tertiary_reload] = 1;
894 reload_optional[tertiary_reload] &= optional;
895 reload_secondary_p[tertiary_reload] = 1;
896 }
897
898 if (tertiary_reload == n_reloads)
899 {
900 /* We need to make a new tertiary reload for this register
901 class. */
902 reload_in[tertiary_reload] = reload_out[tertiary_reload] = 0;
903 reload_reg_class[tertiary_reload] = tertiary_class;
904 reload_inmode[tertiary_reload] = tertiary_mode;
905 reload_outmode[tertiary_reload] = tertiary_mode;
906 reload_reg_rtx[tertiary_reload] = 0;
907 reload_optional[tertiary_reload] = optional;
908 reload_inc[tertiary_reload] = 0;
909 reload_strict_low[tertiary_reload] = 0;
910 /* Maybe we could combine these, but it seems too tricky. */
911 reload_nocombine[tertiary_reload] = 1;
912 reload_in_reg[tertiary_reload] = 0;
913 reload_needed_for[tertiary_reload] = needed_for;
914 reload_needed_for_multiple[tertiary_reload] = 0;
915 reload_secondary_reload[tertiary_reload] = -1;
916 reload_secondary_icode[tertiary_reload] = CODE_FOR_nothing;
917 reload_secondary_p[tertiary_reload] = 1;
918
919 n_reloads++;
920 i = n_reloads;
921 }
922 }
923
924 /* See if we can reuse an existing secondary reload. */
925 for (secondary_reload = 0; secondary_reload < n_reloads;
926 secondary_reload++)
927 if (reload_secondary_p[secondary_reload]
928 && (reg_class_subset_p (secondary_class,
929 reload_reg_class[secondary_reload])
930 || reg_class_subset_p (reload_reg_class[secondary_reload],
931 secondary_class))
932 && ((reload_inmode[secondary_reload] == secondary_mode)
933 || reload_inmode[secondary_reload] == VOIDmode)
934 && ((reload_outmode[secondary_reload] == secondary_out_mode)
935 || reload_outmode[secondary_reload] == VOIDmode)
936 && reload_secondary_reload[secondary_reload] == tertiary_reload
937 && reload_secondary_icode[secondary_reload] == tertiary_icode)
938 {
939 if (secondary_mode != VOIDmode)
940 reload_inmode[secondary_reload] = secondary_mode;
941 if (secondary_out_mode != VOIDmode)
942 reload_outmode[secondary_reload] = secondary_out_mode;
943 if (reg_class_subset_p (secondary_class,
944 reload_reg_class[secondary_reload]))
945 reload_reg_class[secondary_reload] = secondary_class;
946 if (reload_needed_for[secondary_reload] != needed_for)
947 reload_needed_for_multiple[secondary_reload] = 1;
948 reload_optional[secondary_reload] &= optional;
949 reload_secondary_p[secondary_reload] = 1;
950 }
951
952 if (secondary_reload == n_reloads)
953 {
954 /* We need to make a new secondary reload for this register
955 class. */
956 reload_in[secondary_reload] = reload_out[secondary_reload] = 0;
957 reload_reg_class[secondary_reload] = secondary_class;
958 reload_inmode[secondary_reload] = secondary_mode;
959 reload_outmode[secondary_reload] = secondary_out_mode;
960 reload_reg_rtx[secondary_reload] = 0;
961 reload_optional[secondary_reload] = optional;
962 reload_inc[secondary_reload] = 0;
963 reload_strict_low[secondary_reload] = 0;
964 /* Maybe we could combine these, but it seems too tricky. */
965 reload_nocombine[secondary_reload] = 1;
966 reload_in_reg[secondary_reload] = 0;
967 reload_needed_for[secondary_reload] = needed_for;
968 reload_needed_for_multiple[secondary_reload] = 0;
969 reload_secondary_reload[secondary_reload] = tertiary_reload;
970 reload_secondary_icode[secondary_reload] = tertiary_icode;
971 reload_secondary_p[secondary_reload] = 1;
972
973 n_reloads++;
974 i = n_reloads;
975
976 #ifdef SECONDARY_MEMORY_NEEDED
977 /* If we need a memory location to copy between the two
978 reload regs, set it up now. */
979
980 if (in != 0 && secondary_icode == CODE_FOR_nothing
981 && SECONDARY_MEMORY_NEEDED (secondary_class, class, inmode))
982 get_secondary_mem (in, inmode);
983
984 if (out != 0 && secondary_icode == CODE_FOR_nothing
985 && SECONDARY_MEMORY_NEEDED (class, secondary_class, outmode))
986 get_secondary_mem (out, outmode);
987 #endif
988 }
989 }
990 #endif
991
992 /* We found no existing reload suitable for re-use.
993 So add an additional reload. */
994
995 reload_in[i] = in;
996 reload_out[i] = out;
997 reload_reg_class[i] = class;
998 reload_inmode[i] = inmode;
999 reload_outmode[i] = outmode;
1000 reload_reg_rtx[i] = 0;
1001 reload_optional[i] = optional;
1002 reload_inc[i] = 0;
1003 reload_strict_low[i] = strict_low;
1004 reload_nocombine[i] = 0;
1005 reload_in_reg[i] = inloc ? *inloc : 0;
1006 reload_needed_for[i] = needed_for;
1007 reload_needed_for_multiple[i] = 0;
1008 reload_secondary_reload[i] = secondary_reload;
1009 reload_secondary_icode[i] = secondary_icode;
1010 reload_secondary_p[i] = 0;
1011
1012 n_reloads++;
1013
1014 #ifdef SECONDARY_MEMORY_NEEDED
1015 /* If a memory location is needed for the copy, make one. */
1016 if (in != 0 && GET_CODE (in) == REG
1017 && REGNO (in) < FIRST_PSEUDO_REGISTER
1018 && SECONDARY_MEMORY_NEEDED (REGNO_REG_CLASS (REGNO (in)),
1019 class, inmode))
1020 get_secondary_mem (in, inmode);
1021
1022 if (out != 0 && GET_CODE (out) == REG
1023 && REGNO (out) < FIRST_PSEUDO_REGISTER
1024 && SECONDARY_MEMORY_NEEDED (class, REGNO_REG_CLASS (REGNO (out)),
1025 outmode))
1026 get_secondary_mem (out, outmode);
1027 #endif
1028 }
1029 else
1030 {
1031 /* We are reusing an existing reload,
1032 but we may have additional information for it.
1033 For example, we may now have both IN and OUT
1034 while the old one may have just one of them. */
1035
1036 if (inmode != VOIDmode)
1037 reload_inmode[i] = inmode;
1038 if (outmode != VOIDmode)
1039 reload_outmode[i] = outmode;
1040 if (in != 0)
1041 reload_in[i] = in;
1042 if (out != 0)
1043 reload_out[i] = out;
1044 if (reg_class_subset_p (class, reload_reg_class[i]))
1045 reload_reg_class[i] = class;
1046 reload_optional[i] &= optional;
1047 if (reload_needed_for[i] != needed_for)
1048 reload_needed_for_multiple[i] = 1;
1049 }
1050
1051 /* If the ostensible rtx being reload differs from the rtx found
1052 in the location to substitute, this reload is not safe to combine
1053 because we cannot reliably tell whether it appears in the insn. */
1054
1055 if (in != 0 && in != *inloc)
1056 reload_nocombine[i] = 1;
1057
1058 #if 0
1059 /* This was replaced by changes in find_reloads_address_1 and the new
1060 function inc_for_reload, which go with a new meaning of reload_inc. */
1061
1062 /* If this is an IN/OUT reload in an insn that sets the CC,
1063 it must be for an autoincrement. It doesn't work to store
1064 the incremented value after the insn because that would clobber the CC.
1065 So we must do the increment of the value reloaded from,
1066 increment it, store it back, then decrement again. */
1067 if (out != 0 && sets_cc0_p (PATTERN (this_insn)))
1068 {
1069 out = 0;
1070 reload_out[i] = 0;
1071 reload_inc[i] = find_inc_amount (PATTERN (this_insn), in);
1072 /* If we did not find a nonzero amount-to-increment-by,
1073 that contradicts the belief that IN is being incremented
1074 in an address in this insn. */
1075 if (reload_inc[i] == 0)
1076 abort ();
1077 }
1078 #endif
1079
1080 /* If we will replace IN and OUT with the reload-reg,
1081 record where they are located so that substitution need
1082 not do a tree walk. */
1083
1084 if (replace_reloads)
1085 {
1086 if (inloc != 0)
1087 {
1088 register struct replacement *r = &replacements[n_replacements++];
1089 r->what = i;
1090 r->subreg_loc = in_subreg_loc;
1091 r->where = inloc;
1092 r->mode = inmode;
1093 }
1094 if (outloc != 0 && outloc != inloc)
1095 {
1096 register struct replacement *r = &replacements[n_replacements++];
1097 r->what = i;
1098 r->where = outloc;
1099 r->subreg_loc = out_subreg_loc;
1100 r->mode = outmode;
1101 }
1102 }
1103
1104 /* If this reload is just being introduced and it has both
1105 an incoming quantity and an outgoing quantity that are
1106 supposed to be made to match, see if either one of the two
1107 can serve as the place to reload into.
1108
1109 If one of them is acceptable, set reload_reg_rtx[i]
1110 to that one. */
1111
1112 if (in != 0 && out != 0 && in != out && reload_reg_rtx[i] == 0)
1113 {
1114 reload_reg_rtx[i] = find_dummy_reload (in, out, inloc, outloc,
1115 reload_reg_class[i], i);
1116
1117 /* If the outgoing register already contains the same value
1118 as the incoming one, we can dispense with loading it.
1119 The easiest way to tell the caller that is to give a phony
1120 value for the incoming operand (same as outgoing one). */
1121 if (reload_reg_rtx[i] == out
1122 && (GET_CODE (in) == REG || CONSTANT_P (in))
1123 && 0 != find_equiv_reg (in, this_insn, 0, REGNO (out),
1124 static_reload_reg_p, i, inmode))
1125 reload_in[i] = out;
1126 }
1127
1128 /* If this is an input reload and the operand contains a register that
1129 dies in this insn and is used nowhere else, see if it is the right class
1130 to be used for this reload. Use it if so. (This occurs most commonly
1131 in the case of paradoxical SUBREGs and in-out reloads). We cannot do
1132 this if it is also an output reload that mentions the register unless
1133 the output is a SUBREG that clobbers an entire register.
1134
1135 Note that the operand might be one of the spill regs, if it is a
1136 pseudo reg and we are in a block where spilling has not taken place.
1137 But if there is no spilling in this block, that is OK.
1138 An explicitly used hard reg cannot be a spill reg. */
1139
1140 if (reload_reg_rtx[i] == 0 && in != 0)
1141 {
1142 rtx note;
1143 int regno;
1144
1145 for (note = REG_NOTES (this_insn); note; note = XEXP (note, 1))
1146 if (REG_NOTE_KIND (note) == REG_DEAD
1147 && GET_CODE (XEXP (note, 0)) == REG
1148 && (regno = REGNO (XEXP (note, 0))) < FIRST_PSEUDO_REGISTER
1149 && reg_mentioned_p (XEXP (note, 0), in)
1150 && ! refers_to_regno_for_reload_p (regno,
1151 (regno
1152 + HARD_REGNO_NREGS (regno,
1153 inmode)),
1154 PATTERN (this_insn), inloc)
1155 && (in != out
1156 || (GET_CODE (in) == SUBREG
1157 && (((GET_MODE_SIZE (GET_MODE (in)) + (UNITS_PER_WORD - 1))
1158 / UNITS_PER_WORD)
1159 == ((GET_MODE_SIZE (GET_MODE (SUBREG_REG (in)))
1160 + (UNITS_PER_WORD - 1)) / UNITS_PER_WORD))))
1161 /* Make sure the operand fits in the reg that dies. */
1162 && GET_MODE_SIZE (inmode) <= GET_MODE_SIZE (GET_MODE (XEXP (note, 0)))
1163 && HARD_REGNO_MODE_OK (regno, inmode)
1164 && GET_MODE_SIZE (outmode) <= GET_MODE_SIZE (GET_MODE (XEXP (note, 0)))
1165 && HARD_REGNO_MODE_OK (regno, outmode)
1166 && TEST_HARD_REG_BIT (reg_class_contents[(int) class], regno)
1167 && !fixed_regs[regno])
1168 {
1169 reload_reg_rtx[i] = gen_rtx (REG, inmode, regno);
1170 break;
1171 }
1172 }
1173
1174 if (out)
1175 output_reloadnum = i;
1176
1177 return i;
1178 }
1179
1180 /* Record an additional place we must replace a value
1181 for which we have already recorded a reload.
1182 RELOADNUM is the value returned by push_reload
1183 when the reload was recorded.
1184 This is used in insn patterns that use match_dup. */
1185
1186 static void
1187 push_replacement (loc, reloadnum, mode)
1188 rtx *loc;
1189 int reloadnum;
1190 enum machine_mode mode;
1191 {
1192 if (replace_reloads)
1193 {
1194 register struct replacement *r = &replacements[n_replacements++];
1195 r->what = reloadnum;
1196 r->where = loc;
1197 r->subreg_loc = 0;
1198 r->mode = mode;
1199 }
1200 }
1201 \f
1202 /* If there is only one output reload, and it is not for an earlyclobber
1203 operand, try to combine it with a (logically unrelated) input reload
1204 to reduce the number of reload registers needed.
1205
1206 This is safe if the input reload does not appear in
1207 the value being output-reloaded, because this implies
1208 it is not needed any more once the original insn completes.
1209
1210 If that doesn't work, see we can use any of the registers that
1211 die in this insn as a reload register. We can if it is of the right
1212 class and does not appear in the value being output-reloaded. */
1213
1214 static void
1215 combine_reloads ()
1216 {
1217 int i;
1218 int output_reload = -1;
1219 rtx note;
1220
1221 /* Find the output reload; return unless there is exactly one
1222 and that one is mandatory. */
1223
1224 for (i = 0; i < n_reloads; i++)
1225 if (reload_out[i] != 0)
1226 {
1227 if (output_reload >= 0)
1228 return;
1229 output_reload = i;
1230 }
1231
1232 if (output_reload < 0 || reload_optional[output_reload])
1233 return;
1234
1235 /* An input-output reload isn't combinable. */
1236
1237 if (reload_in[output_reload] != 0)
1238 return;
1239
1240 /* If this reload is for an earlyclobber operand, we can't do anything. */
1241
1242 for (i = 0; i < n_earlyclobbers; i++)
1243 if (reload_out[output_reload] == reload_earlyclobbers[i])
1244 return;
1245
1246 /* Check each input reload; can we combine it? */
1247
1248 for (i = 0; i < n_reloads; i++)
1249 if (reload_in[i] && ! reload_optional[i] && ! reload_nocombine[i]
1250 /* Life span of this reload must not extend past main insn. */
1251 && reload_when_needed[i] != RELOAD_FOR_OUTPUT_RELOAD_ADDRESS
1252 && ! reload_needed_for_multiple[i]
1253 && reload_inmode[i] == reload_outmode[output_reload]
1254 && reload_inc[i] == 0
1255 && reload_reg_rtx[i] == 0
1256 && reload_strict_low[i] == 0
1257 /* Don't combine two reloads with different secondary reloads. */
1258 && (reload_secondary_reload[i] == reload_secondary_reload[output_reload]
1259 || reload_secondary_reload[i] == -1
1260 || reload_secondary_reload[output_reload] == -1)
1261 && (reg_class_subset_p (reload_reg_class[i],
1262 reload_reg_class[output_reload])
1263 || reg_class_subset_p (reload_reg_class[output_reload],
1264 reload_reg_class[i]))
1265 && (MATCHES (reload_in[i], reload_out[output_reload])
1266 /* Args reversed because the first arg seems to be
1267 the one that we imagine being modified
1268 while the second is the one that might be affected. */
1269 || (! reg_overlap_mentioned_for_reload_p (reload_out[output_reload],
1270 reload_in[i])
1271 /* However, if the input is a register that appears inside
1272 the output, then we also can't share.
1273 Imagine (set (mem (reg 69)) (plus (reg 69) ...)).
1274 If the same reload reg is used for both reg 69 and the
1275 result to be stored in memory, then that result
1276 will clobber the address of the memory ref. */
1277 && ! (GET_CODE (reload_in[i]) == REG
1278 && reg_overlap_mentioned_for_reload_p (reload_in[i],
1279 reload_out[output_reload])))))
1280 {
1281 int j;
1282
1283 /* We have found a reload to combine with! */
1284 reload_out[i] = reload_out[output_reload];
1285 reload_outmode[i] = reload_outmode[output_reload];
1286 /* Mark the old output reload as inoperative. */
1287 reload_out[output_reload] = 0;
1288 /* The combined reload is needed for the entire insn. */
1289 reload_needed_for_multiple[i] = 1;
1290 reload_when_needed[i] = RELOAD_OTHER;
1291 /* If the output reload had a secondary reload, copy it. */
1292 if (reload_secondary_reload[output_reload] != -1)
1293 reload_secondary_reload[i] = reload_secondary_reload[output_reload];
1294 /* If required, minimize the register class. */
1295 if (reg_class_subset_p (reload_reg_class[output_reload],
1296 reload_reg_class[i]))
1297 reload_reg_class[i] = reload_reg_class[output_reload];
1298
1299 /* Transfer all replacements from the old reload to the combined. */
1300 for (j = 0; j < n_replacements; j++)
1301 if (replacements[j].what == output_reload)
1302 replacements[j].what = i;
1303
1304 return;
1305 }
1306
1307 /* If this insn has only one operand that is modified or written (assumed
1308 to be the first), it must be the one corresponding to this reload. It
1309 is safe to use anything that dies in this insn for that output provided
1310 that it does not occur in the output (we already know it isn't an
1311 earlyclobber. If this is an asm insn, give up. */
1312
1313 if (INSN_CODE (this_insn) == -1)
1314 return;
1315
1316 for (i = 1; i < insn_n_operands[INSN_CODE (this_insn)]; i++)
1317 if (insn_operand_constraint[INSN_CODE (this_insn)][i][0] == '='
1318 || insn_operand_constraint[INSN_CODE (this_insn)][i][0] == '+')
1319 return;
1320
1321 /* See if some hard register that dies in this insn and is not used in
1322 the output is the right class. Only works if the register we pick
1323 up can fully hold our output reload. */
1324 for (note = REG_NOTES (this_insn); note; note = XEXP (note, 1))
1325 if (REG_NOTE_KIND (note) == REG_DEAD
1326 && GET_CODE (XEXP (note, 0)) == REG
1327 && ! reg_overlap_mentioned_for_reload_p (XEXP (note, 0),
1328 reload_out[output_reload])
1329 && REGNO (XEXP (note, 0)) < FIRST_PSEUDO_REGISTER
1330 && HARD_REGNO_MODE_OK (REGNO (XEXP (note, 0)), reload_outmode[output_reload])
1331 && TEST_HARD_REG_BIT (reg_class_contents[(int) reload_reg_class[output_reload]],
1332 REGNO (XEXP (note, 0)))
1333 && (HARD_REGNO_NREGS (REGNO (XEXP (note, 0)), reload_outmode[output_reload])
1334 <= HARD_REGNO_NREGS (REGNO (XEXP (note, 0)), GET_MODE (XEXP (note, 0))))
1335 && ! fixed_regs[REGNO (XEXP (note, 0))])
1336 {
1337 reload_reg_rtx[output_reload] = gen_rtx (REG,
1338 reload_outmode[output_reload],
1339 REGNO (XEXP (note, 0)));
1340 return;
1341 }
1342 }
1343 \f
1344 /* Try to find a reload register for an in-out reload (expressions IN and OUT).
1345 See if one of IN and OUT is a register that may be used;
1346 this is desirable since a spill-register won't be needed.
1347 If so, return the register rtx that proves acceptable.
1348
1349 INLOC and OUTLOC are locations where IN and OUT appear in the insn.
1350 CLASS is the register class required for the reload.
1351
1352 If FOR_REAL is >= 0, it is the number of the reload,
1353 and in some cases when it can be discovered that OUT doesn't need
1354 to be computed, clear out reload_out[FOR_REAL].
1355
1356 If FOR_REAL is -1, this should not be done, because this call
1357 is just to see if a register can be found, not to find and install it. */
1358
1359 static rtx
1360 find_dummy_reload (real_in, real_out, inloc, outloc, class, for_real)
1361 rtx real_in, real_out;
1362 rtx *inloc, *outloc;
1363 enum reg_class class;
1364 int for_real;
1365 {
1366 rtx in = real_in;
1367 rtx out = real_out;
1368 int in_offset = 0;
1369 int out_offset = 0;
1370 rtx value = 0;
1371
1372 /* If operands exceed a word, we can't use either of them
1373 unless they have the same size. */
1374 if (GET_MODE_SIZE (GET_MODE (real_out)) != GET_MODE_SIZE (GET_MODE (real_in))
1375 && (GET_MODE_SIZE (GET_MODE (real_out)) > UNITS_PER_WORD
1376 || GET_MODE_SIZE (GET_MODE (real_in)) > UNITS_PER_WORD))
1377 return 0;
1378
1379 /* Find the inside of any subregs. */
1380 while (GET_CODE (out) == SUBREG)
1381 {
1382 out_offset = SUBREG_WORD (out);
1383 out = SUBREG_REG (out);
1384 }
1385 while (GET_CODE (in) == SUBREG)
1386 {
1387 in_offset = SUBREG_WORD (in);
1388 in = SUBREG_REG (in);
1389 }
1390
1391 /* Narrow down the reg class, the same way push_reload will;
1392 otherwise we might find a dummy now, but push_reload won't. */
1393 class = PREFERRED_RELOAD_CLASS (in, class);
1394
1395 /* See if OUT will do. */
1396 if (GET_CODE (out) == REG
1397 && REGNO (out) < FIRST_PSEUDO_REGISTER)
1398 {
1399 register int regno = REGNO (out) + out_offset;
1400 int nwords = HARD_REGNO_NREGS (regno, GET_MODE (real_out));
1401 rtx saved_rtx;
1402
1403 /* When we consider whether the insn uses OUT,
1404 ignore references within IN. They don't prevent us
1405 from copying IN into OUT, because those refs would
1406 move into the insn that reloads IN.
1407
1408 However, we only ignore IN in its role as this reload.
1409 If the insn uses IN elsewhere and it contains OUT,
1410 that counts. We can't be sure it's the "same" operand
1411 so it might not go through this reload. */
1412 saved_rtx = *inloc;
1413 *inloc = const0_rtx;
1414
1415 if (regno < FIRST_PSEUDO_REGISTER
1416 /* A fixed reg that can overlap other regs better not be used
1417 for reloading in any way. */
1418 #ifdef OVERLAPPING_REGNO_P
1419 && ! (fixed_regs[regno] && OVERLAPPING_REGNO_P (regno))
1420 #endif
1421 && ! refers_to_regno_for_reload_p (regno, regno + nwords,
1422 PATTERN (this_insn), outloc))
1423 {
1424 int i;
1425 for (i = 0; i < nwords; i++)
1426 if (! TEST_HARD_REG_BIT (reg_class_contents[(int) class],
1427 regno + i))
1428 break;
1429
1430 if (i == nwords)
1431 {
1432 if (GET_CODE (real_out) == REG)
1433 value = real_out;
1434 else
1435 value = gen_rtx (REG, GET_MODE (real_out), regno);
1436 }
1437 }
1438
1439 *inloc = saved_rtx;
1440 }
1441
1442 /* Consider using IN if OUT was not acceptable
1443 or if OUT dies in this insn (like the quotient in a divmod insn).
1444 We can't use IN unless it is dies in this insn,
1445 which means we must know accurately which hard regs are live.
1446 Also, the result can't go in IN if IN is used within OUT. */
1447 if (hard_regs_live_known
1448 && GET_CODE (in) == REG
1449 && REGNO (in) < FIRST_PSEUDO_REGISTER
1450 && (value == 0
1451 || find_reg_note (this_insn, REG_UNUSED, real_out))
1452 && find_reg_note (this_insn, REG_DEAD, real_in)
1453 && !fixed_regs[REGNO (in)]
1454 && HARD_REGNO_MODE_OK (REGNO (in), GET_MODE (out)))
1455 {
1456 register int regno = REGNO (in) + in_offset;
1457 int nwords = HARD_REGNO_NREGS (regno, GET_MODE (real_in));
1458
1459 if (! refers_to_regno_for_reload_p (regno, regno + nwords, out, NULL_PTR)
1460 && ! hard_reg_set_here_p (regno, regno + nwords,
1461 PATTERN (this_insn)))
1462 {
1463 int i;
1464 for (i = 0; i < nwords; i++)
1465 if (! TEST_HARD_REG_BIT (reg_class_contents[(int) class],
1466 regno + i))
1467 break;
1468
1469 if (i == nwords)
1470 {
1471 /* If we were going to use OUT as the reload reg
1472 and changed our mind, it means OUT is a dummy that
1473 dies here. So don't bother copying value to it. */
1474 if (for_real >= 0 && value == real_out)
1475 reload_out[for_real] = 0;
1476 if (GET_CODE (real_in) == REG)
1477 value = real_in;
1478 else
1479 value = gen_rtx (REG, GET_MODE (real_in), regno);
1480 }
1481 }
1482 }
1483
1484 return value;
1485 }
1486 \f
1487 /* This page contains subroutines used mainly for determining
1488 whether the IN or an OUT of a reload can serve as the
1489 reload register. */
1490
1491 /* Return 1 if expression X alters a hard reg in the range
1492 from BEG_REGNO (inclusive) to END_REGNO (exclusive),
1493 either explicitly or in the guise of a pseudo-reg allocated to REGNO.
1494 X should be the body of an instruction. */
1495
1496 static int
1497 hard_reg_set_here_p (beg_regno, end_regno, x)
1498 register int beg_regno, end_regno;
1499 rtx x;
1500 {
1501 if (GET_CODE (x) == SET || GET_CODE (x) == CLOBBER)
1502 {
1503 register rtx op0 = SET_DEST (x);
1504 while (GET_CODE (op0) == SUBREG)
1505 op0 = SUBREG_REG (op0);
1506 if (GET_CODE (op0) == REG)
1507 {
1508 register int r = REGNO (op0);
1509 /* See if this reg overlaps range under consideration. */
1510 if (r < end_regno
1511 && r + HARD_REGNO_NREGS (r, GET_MODE (op0)) > beg_regno)
1512 return 1;
1513 }
1514 }
1515 else if (GET_CODE (x) == PARALLEL)
1516 {
1517 register int i = XVECLEN (x, 0) - 1;
1518 for (; i >= 0; i--)
1519 if (hard_reg_set_here_p (beg_regno, end_regno, XVECEXP (x, 0, i)))
1520 return 1;
1521 }
1522
1523 return 0;
1524 }
1525
1526 /* Return 1 if ADDR is a valid memory address for mode MODE,
1527 and check that each pseudo reg has the proper kind of
1528 hard reg. */
1529
1530 int
1531 strict_memory_address_p (mode, addr)
1532 enum machine_mode mode;
1533 register rtx addr;
1534 {
1535 GO_IF_LEGITIMATE_ADDRESS (mode, addr, win);
1536 return 0;
1537
1538 win:
1539 return 1;
1540 }
1541
1542 \f
1543 /* Like rtx_equal_p except that it allows a REG and a SUBREG to match
1544 if they are the same hard reg, and has special hacks for
1545 autoincrement and autodecrement.
1546 This is specifically intended for find_reloads to use
1547 in determining whether two operands match.
1548 X is the operand whose number is the lower of the two.
1549
1550 The value is 2 if Y contains a pre-increment that matches
1551 a non-incrementing address in X. */
1552
1553 /* ??? To be completely correct, we should arrange to pass
1554 for X the output operand and for Y the input operand.
1555 For now, we assume that the output operand has the lower number
1556 because that is natural in (SET output (... input ...)). */
1557
1558 int
1559 operands_match_p (x, y)
1560 register rtx x, y;
1561 {
1562 register int i;
1563 register RTX_CODE code = GET_CODE (x);
1564 register char *fmt;
1565 int success_2;
1566
1567 if (x == y)
1568 return 1;
1569 if ((code == REG || (code == SUBREG && GET_CODE (SUBREG_REG (x)) == REG))
1570 && (GET_CODE (y) == REG || (GET_CODE (y) == SUBREG
1571 && GET_CODE (SUBREG_REG (y)) == REG)))
1572 {
1573 register int j;
1574
1575 if (code == SUBREG)
1576 {
1577 i = REGNO (SUBREG_REG (x));
1578 if (i >= FIRST_PSEUDO_REGISTER)
1579 goto slow;
1580 i += SUBREG_WORD (x);
1581 }
1582 else
1583 i = REGNO (x);
1584
1585 if (GET_CODE (y) == SUBREG)
1586 {
1587 j = REGNO (SUBREG_REG (y));
1588 if (j >= FIRST_PSEUDO_REGISTER)
1589 goto slow;
1590 j += SUBREG_WORD (y);
1591 }
1592 else
1593 j = REGNO (y);
1594
1595 return i == j;
1596 }
1597 /* If two operands must match, because they are really a single
1598 operand of an assembler insn, then two postincrements are invalid
1599 because the assembler insn would increment only once.
1600 On the other hand, an postincrement matches ordinary indexing
1601 if the postincrement is the output operand. */
1602 if (code == POST_DEC || code == POST_INC)
1603 return operands_match_p (XEXP (x, 0), y);
1604 /* Two preincrements are invalid
1605 because the assembler insn would increment only once.
1606 On the other hand, an preincrement matches ordinary indexing
1607 if the preincrement is the input operand.
1608 In this case, return 2, since some callers need to do special
1609 things when this happens. */
1610 if (GET_CODE (y) == PRE_DEC || GET_CODE (y) == PRE_INC)
1611 return operands_match_p (x, XEXP (y, 0)) ? 2 : 0;
1612
1613 slow:
1614
1615 /* Now we have disposed of all the cases
1616 in which different rtx codes can match. */
1617 if (code != GET_CODE (y))
1618 return 0;
1619 if (code == LABEL_REF)
1620 return XEXP (x, 0) == XEXP (y, 0);
1621 if (code == SYMBOL_REF)
1622 return XSTR (x, 0) == XSTR (y, 0);
1623
1624 /* (MULT:SI x y) and (MULT:HI x y) are NOT equivalent. */
1625
1626 if (GET_MODE (x) != GET_MODE (y))
1627 return 0;
1628
1629 /* Compare the elements. If any pair of corresponding elements
1630 fail to match, return 0 for the whole things. */
1631
1632 success_2 = 0;
1633 fmt = GET_RTX_FORMAT (code);
1634 for (i = GET_RTX_LENGTH (code) - 1; i >= 0; i--)
1635 {
1636 int val;
1637 switch (fmt[i])
1638 {
1639 case 'w':
1640 if (XWINT (x, i) != XWINT (y, i))
1641 return 0;
1642 break;
1643
1644 case 'i':
1645 if (XINT (x, i) != XINT (y, i))
1646 return 0;
1647 break;
1648
1649 case 'e':
1650 val = operands_match_p (XEXP (x, i), XEXP (y, i));
1651 if (val == 0)
1652 return 0;
1653 /* If any subexpression returns 2,
1654 we should return 2 if we are successful. */
1655 if (val == 2)
1656 success_2 = 1;
1657 break;
1658
1659 case '0':
1660 break;
1661
1662 /* It is believed that rtx's at this level will never
1663 contain anything but integers and other rtx's,
1664 except for within LABEL_REFs and SYMBOL_REFs. */
1665 default:
1666 abort ();
1667 }
1668 }
1669 return 1 + success_2;
1670 }
1671 \f
1672 /* Return the number of times character C occurs in string S. */
1673
1674 int
1675 n_occurrences (c, s)
1676 char c;
1677 char *s;
1678 {
1679 int n = 0;
1680 while (*s)
1681 n += (*s++ == c);
1682 return n;
1683 }
1684 \f
1685 struct decomposition
1686 {
1687 int reg_flag;
1688 int safe;
1689 rtx base;
1690 HOST_WIDE_INT start;
1691 HOST_WIDE_INT end;
1692 };
1693
1694 /* Describe the range of registers or memory referenced by X.
1695 If X is a register, set REG_FLAG and put the first register
1696 number into START and the last plus one into END.
1697 If X is a memory reference, put a base address into BASE
1698 and a range of integer offsets into START and END.
1699 If X is pushing on the stack, we can assume it causes no trouble,
1700 so we set the SAFE field. */
1701
1702 static struct decomposition
1703 decompose (x)
1704 rtx x;
1705 {
1706 struct decomposition val;
1707 int all_const = 0;
1708
1709 val.reg_flag = 0;
1710 val.safe = 0;
1711 if (GET_CODE (x) == MEM)
1712 {
1713 rtx base, offset = 0;
1714 rtx addr = XEXP (x, 0);
1715
1716 if (GET_CODE (addr) == PRE_DEC || GET_CODE (addr) == PRE_INC
1717 || GET_CODE (addr) == POST_DEC || GET_CODE (addr) == POST_INC)
1718 {
1719 val.base = XEXP (addr, 0);
1720 val.start = - GET_MODE_SIZE (GET_MODE (x));
1721 val.end = GET_MODE_SIZE (GET_MODE (x));
1722 val.safe = REGNO (val.base) == STACK_POINTER_REGNUM;
1723 return val;
1724 }
1725
1726 if (GET_CODE (addr) == CONST)
1727 {
1728 addr = XEXP (addr, 0);
1729 all_const = 1;
1730 }
1731 if (GET_CODE (addr) == PLUS)
1732 {
1733 if (CONSTANT_P (XEXP (addr, 0)))
1734 {
1735 base = XEXP (addr, 1);
1736 offset = XEXP (addr, 0);
1737 }
1738 else if (CONSTANT_P (XEXP (addr, 1)))
1739 {
1740 base = XEXP (addr, 0);
1741 offset = XEXP (addr, 1);
1742 }
1743 }
1744
1745 if (offset == 0)
1746 {
1747 base = addr;
1748 offset = const0_rtx;
1749 }
1750 if (GET_CODE (offset) == CONST)
1751 offset = XEXP (offset, 0);
1752 if (GET_CODE (offset) == PLUS)
1753 {
1754 if (GET_CODE (XEXP (offset, 0)) == CONST_INT)
1755 {
1756 base = gen_rtx (PLUS, GET_MODE (base), base, XEXP (offset, 1));
1757 offset = XEXP (offset, 0);
1758 }
1759 else if (GET_CODE (XEXP (offset, 1)) == CONST_INT)
1760 {
1761 base = gen_rtx (PLUS, GET_MODE (base), base, XEXP (offset, 0));
1762 offset = XEXP (offset, 1);
1763 }
1764 else
1765 {
1766 base = gen_rtx (PLUS, GET_MODE (base), base, offset);
1767 offset = const0_rtx;
1768 }
1769 }
1770 else if (GET_CODE (offset) != CONST_INT)
1771 {
1772 base = gen_rtx (PLUS, GET_MODE (base), base, offset);
1773 offset = const0_rtx;
1774 }
1775
1776 if (all_const && GET_CODE (base) == PLUS)
1777 base = gen_rtx (CONST, GET_MODE (base), base);
1778
1779 if (GET_CODE (offset) != CONST_INT)
1780 abort ();
1781
1782 val.start = INTVAL (offset);
1783 val.end = val.start + GET_MODE_SIZE (GET_MODE (x));
1784 val.base = base;
1785 return val;
1786 }
1787 else if (GET_CODE (x) == REG)
1788 {
1789 val.reg_flag = 1;
1790 val.start = true_regnum (x);
1791 if (val.start < 0)
1792 {
1793 /* A pseudo with no hard reg. */
1794 val.start = REGNO (x);
1795 val.end = val.start + 1;
1796 }
1797 else
1798 /* A hard reg. */
1799 val.end = val.start + HARD_REGNO_NREGS (val.start, GET_MODE (x));
1800 }
1801 else if (GET_CODE (x) == SUBREG)
1802 {
1803 if (GET_CODE (SUBREG_REG (x)) != REG)
1804 /* This could be more precise, but it's good enough. */
1805 return decompose (SUBREG_REG (x));
1806 val.reg_flag = 1;
1807 val.start = true_regnum (x);
1808 if (val.start < 0)
1809 return decompose (SUBREG_REG (x));
1810 else
1811 /* A hard reg. */
1812 val.end = val.start + HARD_REGNO_NREGS (val.start, GET_MODE (x));
1813 }
1814 else if (CONSTANT_P (x)
1815 /* This hasn't been assigned yet, so it can't conflict yet. */
1816 || GET_CODE (x) == SCRATCH)
1817 val.safe = 1;
1818 else
1819 abort ();
1820 return val;
1821 }
1822
1823 /* Return 1 if altering Y will not modify the value of X.
1824 Y is also described by YDATA, which should be decompose (Y). */
1825
1826 static int
1827 immune_p (x, y, ydata)
1828 rtx x, y;
1829 struct decomposition ydata;
1830 {
1831 struct decomposition xdata;
1832
1833 if (ydata.reg_flag)
1834 return !refers_to_regno_for_reload_p (ydata.start, ydata.end, x, NULL_PTR);
1835 if (ydata.safe)
1836 return 1;
1837
1838 if (GET_CODE (y) != MEM)
1839 abort ();
1840 /* If Y is memory and X is not, Y can't affect X. */
1841 if (GET_CODE (x) != MEM)
1842 return 1;
1843
1844 xdata = decompose (x);
1845
1846 if (! rtx_equal_p (xdata.base, ydata.base))
1847 {
1848 /* If bases are distinct symbolic constants, there is no overlap. */
1849 if (CONSTANT_P (xdata.base) && CONSTANT_P (ydata.base))
1850 return 1;
1851 /* Constants and stack slots never overlap. */
1852 if (CONSTANT_P (xdata.base)
1853 && (ydata.base == frame_pointer_rtx
1854 || ydata.base == stack_pointer_rtx))
1855 return 1;
1856 if (CONSTANT_P (ydata.base)
1857 && (xdata.base == frame_pointer_rtx
1858 || xdata.base == stack_pointer_rtx))
1859 return 1;
1860 /* If either base is variable, we don't know anything. */
1861 return 0;
1862 }
1863
1864
1865 return (xdata.start >= ydata.end || ydata.start >= xdata.end);
1866 }
1867
1868 /* Similar, but calls decompose. */
1869
1870 int
1871 safe_from_earlyclobber (op, clobber)
1872 rtx op, clobber;
1873 {
1874 struct decomposition early_data;
1875
1876 early_data = decompose (clobber);
1877 return immune_p (op, clobber, early_data);
1878 }
1879 \f
1880 /* Main entry point of this file: search the body of INSN
1881 for values that need reloading and record them with push_reload.
1882 REPLACE nonzero means record also where the values occur
1883 so that subst_reloads can be used.
1884
1885 IND_LEVELS says how many levels of indirection are supported by this
1886 machine; a value of zero means that a memory reference is not a valid
1887 memory address.
1888
1889 LIVE_KNOWN says we have valid information about which hard
1890 regs are live at each point in the program; this is true when
1891 we are called from global_alloc but false when stupid register
1892 allocation has been done.
1893
1894 RELOAD_REG_P if nonzero is a vector indexed by hard reg number
1895 which is nonnegative if the reg has been commandeered for reloading into.
1896 It is copied into STATIC_RELOAD_REG_P and referenced from there
1897 by various subroutines. */
1898
1899 void
1900 find_reloads (insn, replace, ind_levels, live_known, reload_reg_p)
1901 rtx insn;
1902 int replace, ind_levels;
1903 int live_known;
1904 short *reload_reg_p;
1905 {
1906 rtx non_reloaded_operands[MAX_RECOG_OPERANDS];
1907 int n_non_reloaded_operands = 0;
1908 #ifdef REGISTER_CONSTRAINTS
1909
1910 enum reload_modified { RELOAD_NOTHING, RELOAD_READ, RELOAD_READ_WRITE, RELOAD_WRITE };
1911
1912 register int insn_code_number;
1913 register int i;
1914 int noperands;
1915 /* These are the constraints for the insn. We don't change them. */
1916 char *constraints1[MAX_RECOG_OPERANDS];
1917 /* These start out as the constraints for the insn
1918 and they are chewed up as we consider alternatives. */
1919 char *constraints[MAX_RECOG_OPERANDS];
1920 /* These are the preferred classes for an operand, or NO_REGS if it isn't
1921 a register. */
1922 enum reg_class preferred_class[MAX_RECOG_OPERANDS];
1923 char pref_or_nothing[MAX_RECOG_OPERANDS];
1924 /* Nonzero for a MEM operand whose entire address needs a reload. */
1925 int address_reloaded[MAX_RECOG_OPERANDS];
1926 int no_input_reloads = 0, no_output_reloads = 0;
1927 int n_alternatives;
1928 int this_alternative[MAX_RECOG_OPERANDS];
1929 char this_alternative_win[MAX_RECOG_OPERANDS];
1930 char this_alternative_offmemok[MAX_RECOG_OPERANDS];
1931 char this_alternative_earlyclobber[MAX_RECOG_OPERANDS];
1932 int this_alternative_matches[MAX_RECOG_OPERANDS];
1933 int swapped;
1934 int goal_alternative[MAX_RECOG_OPERANDS];
1935 int this_alternative_number;
1936 int goal_alternative_number;
1937 int operand_reloadnum[MAX_RECOG_OPERANDS];
1938 int goal_alternative_matches[MAX_RECOG_OPERANDS];
1939 int goal_alternative_matched[MAX_RECOG_OPERANDS];
1940 char goal_alternative_win[MAX_RECOG_OPERANDS];
1941 char goal_alternative_offmemok[MAX_RECOG_OPERANDS];
1942 char goal_alternative_earlyclobber[MAX_RECOG_OPERANDS];
1943 int goal_alternative_swapped;
1944 enum reload_modified modified[MAX_RECOG_OPERANDS];
1945 int best;
1946 int commutative;
1947 char operands_match[MAX_RECOG_OPERANDS][MAX_RECOG_OPERANDS];
1948 rtx substed_operand[MAX_RECOG_OPERANDS];
1949 rtx body = PATTERN (insn);
1950 rtx set = single_set (insn);
1951 int goal_earlyclobber, this_earlyclobber;
1952 enum machine_mode operand_mode[MAX_RECOG_OPERANDS];
1953
1954 this_insn = insn;
1955 this_insn_is_asm = 0; /* Tentative. */
1956 n_reloads = 0;
1957 n_replacements = 0;
1958 n_memlocs = 0;
1959 n_earlyclobbers = 0;
1960 replace_reloads = replace;
1961 hard_regs_live_known = live_known;
1962 static_reload_reg_p = reload_reg_p;
1963
1964 /* JUMP_INSNs and CALL_INSNs are not allowed to have any output reloads;
1965 neither are insns that SET cc0. Insns that use CC0 are not allowed
1966 to have any input reloads. */
1967 if (GET_CODE (insn) == JUMP_INSN || GET_CODE (insn) == CALL_INSN)
1968 no_output_reloads = 1;
1969
1970 #ifdef HAVE_cc0
1971 if (reg_referenced_p (cc0_rtx, PATTERN (insn)))
1972 no_input_reloads = 1;
1973 if (reg_set_p (cc0_rtx, PATTERN (insn)))
1974 no_output_reloads = 1;
1975 #endif
1976
1977 #ifdef SECONDARY_MEMORY_NEEDED
1978 /* The eliminated forms of any secondary memory locations are per-insn, so
1979 clear them out here. */
1980
1981 bzero (secondary_memlocs_elim, sizeof secondary_memlocs_elim);
1982 #endif
1983
1984 /* Find what kind of insn this is. NOPERANDS gets number of operands.
1985 Make OPERANDS point to a vector of operand values.
1986 Make OPERAND_LOCS point to a vector of pointers to
1987 where the operands were found.
1988 Fill CONSTRAINTS and CONSTRAINTS1 with pointers to the
1989 constraint-strings for this insn.
1990 Return if the insn needs no reload processing. */
1991
1992 switch (GET_CODE (body))
1993 {
1994 case USE:
1995 case CLOBBER:
1996 case ASM_INPUT:
1997 case ADDR_VEC:
1998 case ADDR_DIFF_VEC:
1999 return;
2000
2001 case SET:
2002 /* Dispose quickly of (set (reg..) (reg..)) if both have hard regs and it
2003 is cheap to move between them. If it is not, there may not be an insn
2004 to do the copy, so we may need a reload. */
2005 if (GET_CODE (SET_DEST (body)) == REG
2006 && REGNO (SET_DEST (body)) < FIRST_PSEUDO_REGISTER
2007 && GET_CODE (SET_SRC (body)) == REG
2008 && REGNO (SET_SRC (body)) < FIRST_PSEUDO_REGISTER
2009 && REGISTER_MOVE_COST (REGNO_REG_CLASS (REGNO (SET_SRC (body))),
2010 REGNO_REG_CLASS (REGNO (SET_DEST (body)))) == 2)
2011 return;
2012 case PARALLEL:
2013 case ASM_OPERANDS:
2014 noperands = asm_noperands (body);
2015 if (noperands >= 0)
2016 {
2017 /* This insn is an `asm' with operands. */
2018
2019 insn_code_number = -1;
2020 this_insn_is_asm = 1;
2021
2022 /* expand_asm_operands makes sure there aren't too many operands. */
2023 if (noperands > MAX_RECOG_OPERANDS)
2024 abort ();
2025
2026 /* Now get the operand values and constraints out of the insn. */
2027
2028 decode_asm_operands (body, recog_operand, recog_operand_loc,
2029 constraints, operand_mode);
2030 if (noperands > 0)
2031 {
2032 bcopy (constraints, constraints1, noperands * sizeof (char *));
2033 n_alternatives = n_occurrences (',', constraints[0]) + 1;
2034 for (i = 1; i < noperands; i++)
2035 if (n_alternatives != n_occurrences (',', constraints[i]) + 1)
2036 {
2037 error_for_asm (insn, "operand constraints differ in number of alternatives");
2038 /* Avoid further trouble with this insn. */
2039 PATTERN (insn) = gen_rtx (USE, VOIDmode, const0_rtx);
2040 n_reloads = 0;
2041 return;
2042 }
2043 }
2044 break;
2045 }
2046
2047 default:
2048 /* Ordinary insn: recognize it, get the operands via insn_extract
2049 and get the constraints. */
2050
2051 insn_code_number = recog_memoized (insn);
2052 if (insn_code_number < 0)
2053 fatal_insn_not_found (insn);
2054
2055 noperands = insn_n_operands[insn_code_number];
2056 n_alternatives = insn_n_alternatives[insn_code_number];
2057 /* Just return "no reloads" if insn has no operands with constraints. */
2058 if (n_alternatives == 0)
2059 return;
2060 insn_extract (insn);
2061 for (i = 0; i < noperands; i++)
2062 {
2063 constraints[i] = constraints1[i]
2064 = insn_operand_constraint[insn_code_number][i];
2065 operand_mode[i] = insn_operand_mode[insn_code_number][i];
2066 }
2067 }
2068
2069 if (noperands == 0)
2070 return;
2071
2072 commutative = -1;
2073
2074 /* If we will need to know, later, whether some pair of operands
2075 are the same, we must compare them now and save the result.
2076 Reloading the base and index registers will clobber them
2077 and afterward they will fail to match. */
2078
2079 for (i = 0; i < noperands; i++)
2080 {
2081 register char *p;
2082 register int c;
2083
2084 substed_operand[i] = recog_operand[i];
2085 p = constraints[i];
2086
2087 /* Scan this operand's constraint to see if it should match another. */
2088
2089 while (c = *p++)
2090 if (c == '%')
2091 {
2092 /* The last operand should not be marked commutative. */
2093 if (i == noperands - 1)
2094 {
2095 if (this_insn_is_asm)
2096 warning_for_asm (this_insn,
2097 "`%%' constraint used with last operand");
2098 else
2099 abort ();
2100 }
2101 else
2102 commutative = i;
2103 }
2104 else if (c >= '0' && c <= '9')
2105 {
2106 c -= '0';
2107 operands_match[c][i]
2108 = operands_match_p (recog_operand[c], recog_operand[i]);
2109
2110 /* An operand may not match itself. */
2111 if (c == i)
2112 {
2113 if (this_insn_is_asm)
2114 warning_for_asm (this_insn,
2115 "operand %d has constraint %d", i, c);
2116 else
2117 abort ();
2118 }
2119
2120 /* If C can be commuted with C+1, and C might need to match I,
2121 then C+1 might also need to match I. */
2122 if (commutative >= 0)
2123 {
2124 if (c == commutative || c == commutative + 1)
2125 {
2126 int other = c + (c == commutative ? 1 : -1);
2127 operands_match[other][i]
2128 = operands_match_p (recog_operand[other], recog_operand[i]);
2129 }
2130 if (i == commutative || i == commutative + 1)
2131 {
2132 int other = i + (i == commutative ? 1 : -1);
2133 operands_match[c][other]
2134 = operands_match_p (recog_operand[c], recog_operand[other]);
2135 }
2136 /* Note that C is supposed to be less than I.
2137 No need to consider altering both C and I
2138 because in that case we would alter one into the other. */
2139 }
2140 }
2141 }
2142
2143 /* Examine each operand that is a memory reference or memory address
2144 and reload parts of the addresses into index registers.
2145 While we are at it, initialize the array `modified'.
2146 Also here any references to pseudo regs that didn't get hard regs
2147 but are equivalent to constants get replaced in the insn itself
2148 with those constants. Nobody will ever see them again.
2149
2150 Finally, set up the preferred classes of each operand. */
2151
2152 for (i = 0; i < noperands; i++)
2153 {
2154 register RTX_CODE code = GET_CODE (recog_operand[i]);
2155 modified[i] = RELOAD_READ;
2156 address_reloaded[i] = 0;
2157
2158 if (constraints[i][0] == 'p')
2159 {
2160 find_reloads_address (VOIDmode, NULL_PTR,
2161 recog_operand[i], recog_operand_loc[i],
2162 recog_operand[i], ind_levels);
2163 substed_operand[i] = recog_operand[i] = *recog_operand_loc[i];
2164 }
2165 else if (code == MEM)
2166 {
2167 if (find_reloads_address (GET_MODE (recog_operand[i]),
2168 recog_operand_loc[i],
2169 XEXP (recog_operand[i], 0),
2170 &XEXP (recog_operand[i], 0),
2171 recog_operand[i], ind_levels))
2172 address_reloaded[i] = 1;
2173 substed_operand[i] = recog_operand[i] = *recog_operand_loc[i];
2174 }
2175 else if (code == SUBREG)
2176 substed_operand[i] = recog_operand[i] = *recog_operand_loc[i]
2177 = find_reloads_toplev (recog_operand[i], ind_levels,
2178 set != 0
2179 && &SET_DEST (set) == recog_operand_loc[i]);
2180 else if (code == REG)
2181 {
2182 /* This is equivalent to calling find_reloads_toplev.
2183 The code is duplicated for speed.
2184 When we find a pseudo always equivalent to a constant,
2185 we replace it by the constant. We must be sure, however,
2186 that we don't try to replace it in the insn in which it
2187 is being set. */
2188 register int regno = REGNO (recog_operand[i]);
2189 if (reg_equiv_constant[regno] != 0
2190 && (set == 0 || &SET_DEST (set) != recog_operand_loc[i]))
2191 substed_operand[i] = recog_operand[i]
2192 = reg_equiv_constant[regno];
2193 #if 0 /* This might screw code in reload1.c to delete prior output-reload
2194 that feeds this insn. */
2195 if (reg_equiv_mem[regno] != 0)
2196 substed_operand[i] = recog_operand[i]
2197 = reg_equiv_mem[regno];
2198 #endif
2199 if (reg_equiv_address[regno] != 0)
2200 {
2201 /* If reg_equiv_address is not a constant address, copy it,
2202 since it may be shared. */
2203 rtx address = reg_equiv_address[regno];
2204
2205 if (rtx_varies_p (address))
2206 address = copy_rtx (address);
2207
2208 /* If this is an output operand, we must output a CLOBBER
2209 after INSN so find_equiv_reg knows REGNO is being written. */
2210 if (constraints[i][0] == '='
2211 || constraints[i][0] == '+')
2212 emit_insn_after (gen_rtx (CLOBBER, VOIDmode, recog_operand[i]),
2213 insn);
2214
2215 *recog_operand_loc[i] = recog_operand[i]
2216 = gen_rtx (MEM, GET_MODE (recog_operand[i]), address);
2217 RTX_UNCHANGING_P (recog_operand[i])
2218 = RTX_UNCHANGING_P (regno_reg_rtx[regno]);
2219 find_reloads_address (GET_MODE (recog_operand[i]),
2220 recog_operand_loc[i],
2221 XEXP (recog_operand[i], 0),
2222 &XEXP (recog_operand[i], 0),
2223 recog_operand[i], ind_levels);
2224 substed_operand[i] = recog_operand[i] = *recog_operand_loc[i];
2225 }
2226 }
2227 /* If the operand is still a register (we didn't replace it with an
2228 equivalent), get the preferred class to reload it into. */
2229 code = GET_CODE (recog_operand[i]);
2230 preferred_class[i]
2231 = ((code == REG && REGNO (recog_operand[i]) >= FIRST_PSEUDO_REGISTER)
2232 ? reg_preferred_class (REGNO (recog_operand[i])) : NO_REGS);
2233 pref_or_nothing[i]
2234 = (code == REG && REGNO (recog_operand[i]) >= FIRST_PSEUDO_REGISTER
2235 && reg_alternate_class (REGNO (recog_operand[i])) == NO_REGS);
2236 }
2237
2238 /* If this is simply a copy from operand 1 to operand 0, merge the
2239 preferred classes for the operands. */
2240 if (set != 0 && noperands >= 2 && recog_operand[0] == SET_DEST (set)
2241 && recog_operand[1] == SET_SRC (set))
2242 {
2243 preferred_class[0] = preferred_class[1]
2244 = reg_class_subunion[(int) preferred_class[0]][(int) preferred_class[1]];
2245 pref_or_nothing[0] |= pref_or_nothing[1];
2246 pref_or_nothing[1] |= pref_or_nothing[0];
2247 }
2248
2249 /* Now see what we need for pseudo-regs that didn't get hard regs
2250 or got the wrong kind of hard reg. For this, we must consider
2251 all the operands together against the register constraints. */
2252
2253 best = MAX_RECOG_OPERANDS + 300;
2254
2255 swapped = 0;
2256 goal_alternative_swapped = 0;
2257 try_swapped:
2258
2259 /* The constraints are made of several alternatives.
2260 Each operand's constraint looks like foo,bar,... with commas
2261 separating the alternatives. The first alternatives for all
2262 operands go together, the second alternatives go together, etc.
2263
2264 First loop over alternatives. */
2265
2266 for (this_alternative_number = 0;
2267 this_alternative_number < n_alternatives;
2268 this_alternative_number++)
2269 {
2270 /* Loop over operands for one constraint alternative. */
2271 /* LOSERS counts those that don't fit this alternative
2272 and would require loading. */
2273 int losers = 0;
2274 /* BAD is set to 1 if it some operand can't fit this alternative
2275 even after reloading. */
2276 int bad = 0;
2277 /* REJECT is a count of how undesirable this alternative says it is
2278 if any reloading is required. If the alternative matches exactly
2279 then REJECT is ignored, but otherwise it gets this much
2280 counted against it in addition to the reloading needed. Each
2281 ? counts three times here since we want the disparaging caused by
2282 a bad register class to only count 1/3 as much. */
2283 int reject = 0;
2284
2285 this_earlyclobber = 0;
2286
2287 for (i = 0; i < noperands; i++)
2288 {
2289 register char *p = constraints[i];
2290 register int win = 0;
2291 /* 0 => this operand can be reloaded somehow for this alternative */
2292 int badop = 1;
2293 /* 0 => this operand can be reloaded if the alternative allows regs. */
2294 int winreg = 0;
2295 int c;
2296 register rtx operand = recog_operand[i];
2297 int offset = 0;
2298 /* Nonzero means this is a MEM that must be reloaded into a reg
2299 regardless of what the constraint says. */
2300 int force_reload = 0;
2301 int offmemok = 0;
2302 int earlyclobber = 0;
2303
2304 /* If the operand is a SUBREG, extract
2305 the REG or MEM (or maybe even a constant) within.
2306 (Constants can occur as a result of reg_equiv_constant.) */
2307
2308 while (GET_CODE (operand) == SUBREG)
2309 {
2310 offset += SUBREG_WORD (operand);
2311 operand = SUBREG_REG (operand);
2312 /* Force reload if this is not a register or if there may may
2313 be a problem accessing the register in the outer mode. */
2314 if (GET_CODE (operand) != REG
2315 #if defined(BYTE_LOADS_ZERO_EXTEND) || defined(BYTE_LOADS_SIGN_EXTEND)
2316 /* ??? The comment below clearly does not match the code.
2317 What the code below actually does is set force_reload
2318 for a paradoxical subreg of a pseudo. rms and kenner
2319 can't see the point of doing this. */
2320 /* Nonparadoxical subreg of a pseudoreg.
2321 Don't to load the full width if on this machine
2322 we expected the fetch to extend. */
2323 || ((GET_MODE_SIZE (operand_mode[i])
2324 > GET_MODE_SIZE (GET_MODE (operand)))
2325 && REGNO (operand) >= FIRST_PSEUDO_REGISTER)
2326 #endif
2327 /* Subreg of a hard reg which can't handle the subreg's mode
2328 or which would handle that mode in the wrong number of
2329 registers for subregging to work. */
2330 || (REGNO (operand) < FIRST_PSEUDO_REGISTER
2331 && (! HARD_REGNO_MODE_OK (REGNO (operand),
2332 operand_mode[i])
2333 || (GET_MODE_SIZE (operand_mode[i]) <= UNITS_PER_WORD
2334 && (GET_MODE_SIZE (GET_MODE (operand))
2335 > UNITS_PER_WORD)
2336 && ((GET_MODE_SIZE (GET_MODE (operand))
2337 / UNITS_PER_WORD)
2338 != HARD_REGNO_NREGS (REGNO (operand),
2339 GET_MODE (operand)))))))
2340 force_reload = 1;
2341 }
2342
2343 this_alternative[i] = (int) NO_REGS;
2344 this_alternative_win[i] = 0;
2345 this_alternative_offmemok[i] = 0;
2346 this_alternative_earlyclobber[i] = 0;
2347 this_alternative_matches[i] = -1;
2348
2349 /* An empty constraint or empty alternative
2350 allows anything which matched the pattern. */
2351 if (*p == 0 || *p == ',')
2352 win = 1, badop = 0;
2353
2354 /* Scan this alternative's specs for this operand;
2355 set WIN if the operand fits any letter in this alternative.
2356 Otherwise, clear BADOP if this operand could
2357 fit some letter after reloads,
2358 or set WINREG if this operand could fit after reloads
2359 provided the constraint allows some registers. */
2360
2361 while (*p && (c = *p++) != ',')
2362 switch (c)
2363 {
2364 case '=':
2365 modified[i] = RELOAD_WRITE;
2366 break;
2367
2368 case '+':
2369 modified[i] = RELOAD_READ_WRITE;
2370 break;
2371
2372 case '*':
2373 break;
2374
2375 case '%':
2376 /* The last operand should not be marked commutative. */
2377 if (i != noperands - 1)
2378 commutative = i;
2379 break;
2380
2381 case '?':
2382 reject += 3;
2383 break;
2384
2385 case '!':
2386 reject = 300;
2387 break;
2388
2389 case '#':
2390 /* Ignore rest of this alternative as far as
2391 reloading is concerned. */
2392 while (*p && *p != ',') p++;
2393 break;
2394
2395 case '0':
2396 case '1':
2397 case '2':
2398 case '3':
2399 case '4':
2400 c -= '0';
2401 this_alternative_matches[i] = c;
2402 /* We are supposed to match a previous operand.
2403 If we do, we win if that one did.
2404 If we do not, count both of the operands as losers.
2405 (This is too conservative, since most of the time
2406 only a single reload insn will be needed to make
2407 the two operands win. As a result, this alternative
2408 may be rejected when it is actually desirable.) */
2409 if ((swapped && (c != commutative || i != commutative + 1))
2410 /* If we are matching as if two operands were swapped,
2411 also pretend that operands_match had been computed
2412 with swapped.
2413 But if I is the second of those and C is the first,
2414 don't exchange them, because operands_match is valid
2415 only on one side of its diagonal. */
2416 ? (operands_match
2417 [(c == commutative || c == commutative + 1)
2418 ? 2*commutative + 1 - c : c]
2419 [(i == commutative || i == commutative + 1)
2420 ? 2*commutative + 1 - i : i])
2421 : operands_match[c][i])
2422 win = this_alternative_win[c];
2423 else
2424 {
2425 /* Operands don't match. */
2426 rtx value;
2427 /* Retroactively mark the operand we had to match
2428 as a loser, if it wasn't already. */
2429 if (this_alternative_win[c])
2430 losers++;
2431 this_alternative_win[c] = 0;
2432 if (this_alternative[c] == (int) NO_REGS)
2433 bad = 1;
2434 /* But count the pair only once in the total badness of
2435 this alternative, if the pair can be a dummy reload. */
2436 value
2437 = find_dummy_reload (recog_operand[i], recog_operand[c],
2438 recog_operand_loc[i], recog_operand_loc[c],
2439 this_alternative[c], -1);
2440
2441 if (value != 0)
2442 losers--;
2443 }
2444 /* This can be fixed with reloads if the operand
2445 we are supposed to match can be fixed with reloads. */
2446 badop = 0;
2447 this_alternative[i] = this_alternative[c];
2448 break;
2449
2450 case 'p':
2451 /* All necessary reloads for an address_operand
2452 were handled in find_reloads_address. */
2453 this_alternative[i] = (int) ALL_REGS;
2454 win = 1;
2455 break;
2456
2457 case 'm':
2458 if (force_reload)
2459 break;
2460 if (GET_CODE (operand) == MEM
2461 || (GET_CODE (operand) == REG
2462 && REGNO (operand) >= FIRST_PSEUDO_REGISTER
2463 && reg_renumber[REGNO (operand)] < 0))
2464 win = 1;
2465 if (CONSTANT_P (operand))
2466 badop = 0;
2467 break;
2468
2469 case '<':
2470 if (GET_CODE (operand) == MEM
2471 && ! address_reloaded[i]
2472 && (GET_CODE (XEXP (operand, 0)) == PRE_DEC
2473 || GET_CODE (XEXP (operand, 0)) == POST_DEC))
2474 win = 1;
2475 break;
2476
2477 case '>':
2478 if (GET_CODE (operand) == MEM
2479 && ! address_reloaded[i]
2480 && (GET_CODE (XEXP (operand, 0)) == PRE_INC
2481 || GET_CODE (XEXP (operand, 0)) == POST_INC))
2482 win = 1;
2483 break;
2484
2485 /* Memory operand whose address is not offsettable. */
2486 case 'V':
2487 if (force_reload)
2488 break;
2489 if (GET_CODE (operand) == MEM
2490 && ! (ind_levels ? offsettable_memref_p (operand)
2491 : offsettable_nonstrict_memref_p (operand))
2492 /* Certain mem addresses will become offsettable
2493 after they themselves are reloaded. This is important;
2494 we don't want our own handling of unoffsettables
2495 to override the handling of reg_equiv_address. */
2496 && !(GET_CODE (XEXP (operand, 0)) == REG
2497 && (ind_levels == 0
2498 || reg_equiv_address[REGNO (XEXP (operand, 0))] != 0)))
2499 win = 1;
2500 break;
2501
2502 /* Memory operand whose address is offsettable. */
2503 case 'o':
2504 if (force_reload)
2505 break;
2506 if ((GET_CODE (operand) == MEM
2507 /* If IND_LEVELS, find_reloads_address won't reload a
2508 pseudo that didn't get a hard reg, so we have to
2509 reject that case. */
2510 && (ind_levels ? offsettable_memref_p (operand)
2511 : offsettable_nonstrict_memref_p (operand)))
2512 /* Certain mem addresses will become offsettable
2513 after they themselves are reloaded. This is important;
2514 we don't want our own handling of unoffsettables
2515 to override the handling of reg_equiv_address. */
2516 || (GET_CODE (operand) == MEM
2517 && GET_CODE (XEXP (operand, 0)) == REG
2518 && (ind_levels == 0
2519 || reg_equiv_address[REGNO (XEXP (operand, 0))] != 0))
2520 || (GET_CODE (operand) == REG
2521 && REGNO (operand) >= FIRST_PSEUDO_REGISTER
2522 && reg_renumber[REGNO (operand)] < 0))
2523 win = 1;
2524 if (CONSTANT_P (operand) || GET_CODE (operand) == MEM)
2525 badop = 0;
2526 offmemok = 1;
2527 break;
2528
2529 case '&':
2530 /* Output operand that is stored before the need for the
2531 input operands (and their index registers) is over. */
2532 earlyclobber = 1, this_earlyclobber = 1;
2533 break;
2534
2535 case 'E':
2536 /* Match any floating double constant, but only if
2537 we can examine the bits of it reliably. */
2538 if ((HOST_FLOAT_FORMAT != TARGET_FLOAT_FORMAT
2539 || HOST_BITS_PER_WIDE_INT != BITS_PER_WORD)
2540 && GET_MODE (operand) != VOIDmode && ! flag_pretend_float)
2541 break;
2542 if (GET_CODE (operand) == CONST_DOUBLE)
2543 win = 1;
2544 break;
2545
2546 case 'F':
2547 if (GET_CODE (operand) == CONST_DOUBLE)
2548 win = 1;
2549 break;
2550
2551 case 'G':
2552 case 'H':
2553 if (GET_CODE (operand) == CONST_DOUBLE
2554 && CONST_DOUBLE_OK_FOR_LETTER_P (operand, c))
2555 win = 1;
2556 break;
2557
2558 case 's':
2559 if (GET_CODE (operand) == CONST_INT
2560 || (GET_CODE (operand) == CONST_DOUBLE
2561 && GET_MODE (operand) == VOIDmode))
2562 break;
2563 case 'i':
2564 if (CONSTANT_P (operand)
2565 #ifdef LEGITIMATE_PIC_OPERAND_P
2566 && (! flag_pic || LEGITIMATE_PIC_OPERAND_P (operand))
2567 #endif
2568 )
2569 win = 1;
2570 break;
2571
2572 case 'n':
2573 if (GET_CODE (operand) == CONST_INT
2574 || (GET_CODE (operand) == CONST_DOUBLE
2575 && GET_MODE (operand) == VOIDmode))
2576 win = 1;
2577 break;
2578
2579 case 'I':
2580 case 'J':
2581 case 'K':
2582 case 'L':
2583 case 'M':
2584 case 'N':
2585 case 'O':
2586 case 'P':
2587 if (GET_CODE (operand) == CONST_INT
2588 && CONST_OK_FOR_LETTER_P (INTVAL (operand), c))
2589 win = 1;
2590 break;
2591
2592 case 'X':
2593 win = 1;
2594 break;
2595
2596 case 'g':
2597 if (! force_reload
2598 /* A PLUS is never a valid operand, but reload can make
2599 it from a register when eliminating registers. */
2600 && GET_CODE (operand) != PLUS
2601 /* A SCRATCH is not a valid operand. */
2602 && GET_CODE (operand) != SCRATCH
2603 #ifdef LEGITIMATE_PIC_OPERAND_P
2604 && (! CONSTANT_P (operand)
2605 || ! flag_pic
2606 || LEGITIMATE_PIC_OPERAND_P (operand))
2607 #endif
2608 && (GENERAL_REGS == ALL_REGS
2609 || GET_CODE (operand) != REG
2610 || (REGNO (operand) >= FIRST_PSEUDO_REGISTER
2611 && reg_renumber[REGNO (operand)] < 0)))
2612 win = 1;
2613 /* Drop through into 'r' case */
2614
2615 case 'r':
2616 this_alternative[i]
2617 = (int) reg_class_subunion[this_alternative[i]][(int) GENERAL_REGS];
2618 goto reg;
2619
2620 #ifdef EXTRA_CONSTRAINT
2621 case 'Q':
2622 case 'R':
2623 case 'S':
2624 case 'T':
2625 case 'U':
2626 if (EXTRA_CONSTRAINT (operand, c))
2627 win = 1;
2628 break;
2629 #endif
2630
2631 default:
2632 this_alternative[i]
2633 = (int) reg_class_subunion[this_alternative[i]][(int) REG_CLASS_FROM_LETTER (c)];
2634
2635 reg:
2636 if (GET_MODE (operand) == BLKmode)
2637 break;
2638 winreg = 1;
2639 if (GET_CODE (operand) == REG
2640 && reg_fits_class_p (operand, this_alternative[i],
2641 offset, GET_MODE (recog_operand[i])))
2642 win = 1;
2643 break;
2644 }
2645
2646 constraints[i] = p;
2647
2648 /* If this operand could be handled with a reg,
2649 and some reg is allowed, then this operand can be handled. */
2650 if (winreg && this_alternative[i] != (int) NO_REGS)
2651 badop = 0;
2652
2653 /* Record which operands fit this alternative. */
2654 this_alternative_earlyclobber[i] = earlyclobber;
2655 if (win && ! force_reload)
2656 this_alternative_win[i] = 1;
2657 else
2658 {
2659 this_alternative_offmemok[i] = offmemok;
2660 losers++;
2661 if (badop)
2662 bad = 1;
2663 /* Alternative loses if it has no regs for a reg operand. */
2664 if (GET_CODE (operand) == REG
2665 && this_alternative[i] == (int) NO_REGS
2666 && this_alternative_matches[i] < 0)
2667 bad = 1;
2668
2669 /* Alternative loses if it requires a type of reload not
2670 permitted for this insn. We can always reload SCRATCH
2671 and objects with a REG_UNUSED note. */
2672 if (GET_CODE (operand) != SCRATCH && modified[i] != RELOAD_READ
2673 && no_output_reloads
2674 && ! find_reg_note (insn, REG_UNUSED, operand))
2675 bad = 1;
2676 else if (modified[i] != RELOAD_WRITE && no_input_reloads)
2677 bad = 1;
2678
2679 /* We prefer to reload pseudos over reloading other things,
2680 since such reloads may be able to be eliminated later.
2681 If we are reloading a SCRATCH, we won't be generating any
2682 insns, just using a register, so it is also preferred.
2683 So bump REJECT in other cases. */
2684 if (GET_CODE (operand) != REG && GET_CODE (operand) != SCRATCH)
2685 reject++;
2686 }
2687
2688 /* If this operand is a pseudo register that didn't get a hard
2689 reg and this alternative accepts some register, see if the
2690 class that we want is a subset of the preferred class for this
2691 register. If not, but it intersects that class, use the
2692 preferred class instead. If it does not intersect the preferred
2693 class, show that usage of this alternative should be discouraged;
2694 it will be discouraged more still if the register is `preferred
2695 or nothing'. We do this because it increases the chance of
2696 reusing our spill register in a later insn and avoiding a pair
2697 of memory stores and loads.
2698
2699 Don't bother with this if this alternative will accept this
2700 operand.
2701
2702 Don't do this for a multiword operand, if
2703 we have to worry about small classes, because making reg groups
2704 harder to allocate is asking for trouble.
2705
2706 Don't do this if the preferred class has only one register
2707 because we might otherwise exhaust the class. */
2708
2709
2710 if (! win && this_alternative[i] != (int) NO_REGS
2711 #ifdef SMALL_REGISTER_CLASSES
2712 && GET_MODE_SIZE (operand_mode[i]) <= UNITS_PER_WORD
2713 #endif
2714 && reg_class_size[(int) preferred_class[i]] > 1)
2715 {
2716 if (! reg_class_subset_p (this_alternative[i],
2717 preferred_class[i]))
2718 {
2719 /* Since we don't have a way of forming the intersection,
2720 we just do something special if the preferred class
2721 is a subset of the class we have; that's the most
2722 common case anyway. */
2723 if (reg_class_subset_p (preferred_class[i],
2724 this_alternative[i]))
2725 this_alternative[i] = (int) preferred_class[i];
2726 else
2727 reject += (1 + pref_or_nothing[i]);
2728 }
2729 }
2730 }
2731
2732 /* Now see if any output operands that are marked "earlyclobber"
2733 in this alternative conflict with any input operands
2734 or any memory addresses. */
2735
2736 for (i = 0; i < noperands; i++)
2737 if (this_alternative_earlyclobber[i]
2738 && this_alternative_win[i])
2739 {
2740 struct decomposition early_data;
2741 int j;
2742
2743 early_data = decompose (recog_operand[i]);
2744
2745 if (modified[i] == RELOAD_READ)
2746 {
2747 if (this_insn_is_asm)
2748 warning_for_asm (this_insn,
2749 "`&' constraint used with input operand");
2750 else
2751 abort ();
2752 continue;
2753 }
2754
2755 if (this_alternative[i] == NO_REGS)
2756 {
2757 this_alternative_earlyclobber[i] = 0;
2758 if (this_insn_is_asm)
2759 error_for_asm (this_insn,
2760 "`&' constraint used with no register class");
2761 else
2762 abort ();
2763 }
2764
2765 for (j = 0; j < noperands; j++)
2766 /* Is this an input operand or a memory ref? */
2767 if ((GET_CODE (recog_operand[j]) == MEM
2768 || modified[j] != RELOAD_WRITE)
2769 && j != i
2770 /* Ignore things like match_operator operands. */
2771 && *constraints1[j] != 0
2772 /* Don't count an input operand that is constrained to match
2773 the early clobber operand. */
2774 && ! (this_alternative_matches[j] == i
2775 && rtx_equal_p (recog_operand[i], recog_operand[j]))
2776 /* Is it altered by storing the earlyclobber operand? */
2777 && !immune_p (recog_operand[j], recog_operand[i], early_data))
2778 {
2779 /* If the output is in a single-reg class,
2780 it's costly to reload it, so reload the input instead. */
2781 if (reg_class_size[this_alternative[i]] == 1
2782 && (GET_CODE (recog_operand[j]) == REG
2783 || GET_CODE (recog_operand[j]) == SUBREG))
2784 {
2785 losers++;
2786 this_alternative_win[j] = 0;
2787 }
2788 else
2789 break;
2790 }
2791 /* If an earlyclobber operand conflicts with something,
2792 it must be reloaded, so request this and count the cost. */
2793 if (j != noperands)
2794 {
2795 losers++;
2796 this_alternative_win[i] = 0;
2797 for (j = 0; j < noperands; j++)
2798 if (this_alternative_matches[j] == i
2799 && this_alternative_win[j])
2800 {
2801 this_alternative_win[j] = 0;
2802 losers++;
2803 }
2804 }
2805 }
2806
2807 /* If one alternative accepts all the operands, no reload required,
2808 choose that alternative; don't consider the remaining ones. */
2809 if (losers == 0)
2810 {
2811 /* Unswap these so that they are never swapped at `finish'. */
2812 if (commutative >= 0)
2813 {
2814 recog_operand[commutative] = substed_operand[commutative];
2815 recog_operand[commutative + 1]
2816 = substed_operand[commutative + 1];
2817 }
2818 for (i = 0; i < noperands; i++)
2819 {
2820 goal_alternative_win[i] = 1;
2821 goal_alternative[i] = this_alternative[i];
2822 goal_alternative_offmemok[i] = this_alternative_offmemok[i];
2823 goal_alternative_matches[i] = this_alternative_matches[i];
2824 goal_alternative_earlyclobber[i]
2825 = this_alternative_earlyclobber[i];
2826 }
2827 goal_alternative_number = this_alternative_number;
2828 goal_alternative_swapped = swapped;
2829 goal_earlyclobber = this_earlyclobber;
2830 goto finish;
2831 }
2832
2833 /* REJECT, set by the ! and ? constraint characters and when a register
2834 would be reloaded into a non-preferred class, discourages the use of
2835 this alternative for a reload goal. REJECT is incremented by three
2836 for each ? and one for each non-preferred class. */
2837 losers = losers * 3 + reject;
2838
2839 /* If this alternative can be made to work by reloading,
2840 and it needs less reloading than the others checked so far,
2841 record it as the chosen goal for reloading. */
2842 if (! bad && best > losers)
2843 {
2844 for (i = 0; i < noperands; i++)
2845 {
2846 goal_alternative[i] = this_alternative[i];
2847 goal_alternative_win[i] = this_alternative_win[i];
2848 goal_alternative_offmemok[i] = this_alternative_offmemok[i];
2849 goal_alternative_matches[i] = this_alternative_matches[i];
2850 goal_alternative_earlyclobber[i]
2851 = this_alternative_earlyclobber[i];
2852 }
2853 goal_alternative_swapped = swapped;
2854 best = losers;
2855 goal_alternative_number = this_alternative_number;
2856 goal_earlyclobber = this_earlyclobber;
2857 }
2858 }
2859
2860 /* If insn is commutative (it's safe to exchange a certain pair of operands)
2861 then we need to try each alternative twice,
2862 the second time matching those two operands
2863 as if we had exchanged them.
2864 To do this, really exchange them in operands.
2865
2866 If we have just tried the alternatives the second time,
2867 return operands to normal and drop through. */
2868
2869 if (commutative >= 0)
2870 {
2871 swapped = !swapped;
2872 if (swapped)
2873 {
2874 register enum reg_class tclass;
2875 register int t;
2876
2877 recog_operand[commutative] = substed_operand[commutative + 1];
2878 recog_operand[commutative + 1] = substed_operand[commutative];
2879
2880 tclass = preferred_class[commutative];
2881 preferred_class[commutative] = preferred_class[commutative + 1];
2882 preferred_class[commutative + 1] = tclass;
2883
2884 t = pref_or_nothing[commutative];
2885 pref_or_nothing[commutative] = pref_or_nothing[commutative + 1];
2886 pref_or_nothing[commutative + 1] = t;
2887
2888 bcopy (constraints1, constraints, noperands * sizeof (char *));
2889 goto try_swapped;
2890 }
2891 else
2892 {
2893 recog_operand[commutative] = substed_operand[commutative];
2894 recog_operand[commutative + 1] = substed_operand[commutative + 1];
2895 }
2896 }
2897
2898 /* The operands don't meet the constraints.
2899 goal_alternative describes the alternative
2900 that we could reach by reloading the fewest operands.
2901 Reload so as to fit it. */
2902
2903 if (best == MAX_RECOG_OPERANDS + 300)
2904 {
2905 /* No alternative works with reloads?? */
2906 if (insn_code_number >= 0)
2907 abort ();
2908 error_for_asm (insn, "inconsistent operand constraints in an `asm'");
2909 /* Avoid further trouble with this insn. */
2910 PATTERN (insn) = gen_rtx (USE, VOIDmode, const0_rtx);
2911 n_reloads = 0;
2912 return;
2913 }
2914
2915 /* Jump to `finish' from above if all operands are valid already.
2916 In that case, goal_alternative_win is all 1. */
2917 finish:
2918
2919 /* Right now, for any pair of operands I and J that are required to match,
2920 with I < J,
2921 goal_alternative_matches[J] is I.
2922 Set up goal_alternative_matched as the inverse function:
2923 goal_alternative_matched[I] = J. */
2924
2925 for (i = 0; i < noperands; i++)
2926 goal_alternative_matched[i] = -1;
2927
2928 for (i = 0; i < noperands; i++)
2929 if (! goal_alternative_win[i]
2930 && goal_alternative_matches[i] >= 0)
2931 goal_alternative_matched[goal_alternative_matches[i]] = i;
2932
2933 /* If the best alternative is with operands 1 and 2 swapped,
2934 consider them swapped before reporting the reloads. */
2935
2936 if (goal_alternative_swapped)
2937 {
2938 register rtx tem;
2939
2940 tem = substed_operand[commutative];
2941 substed_operand[commutative] = substed_operand[commutative + 1];
2942 substed_operand[commutative + 1] = tem;
2943 tem = recog_operand[commutative];
2944 recog_operand[commutative] = recog_operand[commutative + 1];
2945 recog_operand[commutative + 1] = tem;
2946 }
2947
2948 /* Perform whatever substitutions on the operands we are supposed
2949 to make due to commutativity or replacement of registers
2950 with equivalent constants or memory slots. */
2951
2952 for (i = 0; i < noperands; i++)
2953 {
2954 *recog_operand_loc[i] = substed_operand[i];
2955 /* While we are looping on operands, initialize this. */
2956 operand_reloadnum[i] = -1;
2957 }
2958
2959 /* Any constants that aren't allowed and can't be reloaded
2960 into registers are here changed into memory references. */
2961 for (i = 0; i < noperands; i++)
2962 if (! goal_alternative_win[i]
2963 && CONSTANT_P (recog_operand[i])
2964 && (PREFERRED_RELOAD_CLASS (recog_operand[i],
2965 (enum reg_class) goal_alternative[i])
2966 == NO_REGS)
2967 && operand_mode[i] != VOIDmode)
2968 {
2969 *recog_operand_loc[i] = recog_operand[i]
2970 = find_reloads_toplev (force_const_mem (operand_mode[i],
2971 recog_operand[i]),
2972 ind_levels, 0);
2973 if (alternative_allows_memconst (constraints1[i],
2974 goal_alternative_number))
2975 goal_alternative_win[i] = 1;
2976 }
2977
2978 /* Now record reloads for all the operands that need them. */
2979 for (i = 0; i < noperands; i++)
2980 if (! goal_alternative_win[i])
2981 {
2982 /* Operands that match previous ones have already been handled. */
2983 if (goal_alternative_matches[i] >= 0)
2984 ;
2985 /* Handle an operand with a nonoffsettable address
2986 appearing where an offsettable address will do
2987 by reloading the address into a base register. */
2988 else if (goal_alternative_matched[i] == -1
2989 && goal_alternative_offmemok[i]
2990 && GET_CODE (recog_operand[i]) == MEM)
2991 {
2992 operand_reloadnum[i]
2993 = push_reload (XEXP (recog_operand[i], 0), NULL_RTX,
2994 &XEXP (recog_operand[i], 0), NULL_PTR,
2995 BASE_REG_CLASS, GET_MODE (XEXP (recog_operand[i], 0)),
2996 VOIDmode, 0, 0, NULL_RTX);
2997 reload_inc[operand_reloadnum[i]]
2998 = GET_MODE_SIZE (GET_MODE (recog_operand[i]));
2999 }
3000 else if (goal_alternative_matched[i] == -1)
3001 operand_reloadnum[i] =
3002 push_reload (modified[i] != RELOAD_WRITE ? recog_operand[i] : 0,
3003 modified[i] != RELOAD_READ ? recog_operand[i] : 0,
3004 modified[i] != RELOAD_WRITE ? recog_operand_loc[i] : 0,
3005 modified[i] != RELOAD_READ ? recog_operand_loc[i] : 0,
3006 (enum reg_class) goal_alternative[i],
3007 (modified[i] == RELOAD_WRITE ? VOIDmode : operand_mode[i]),
3008 (modified[i] == RELOAD_READ ? VOIDmode : operand_mode[i]),
3009 (insn_code_number < 0 ? 0
3010 : insn_operand_strict_low[insn_code_number][i]),
3011 0, NULL_RTX);
3012 /* In a matching pair of operands, one must be input only
3013 and the other must be output only.
3014 Pass the input operand as IN and the other as OUT. */
3015 else if (modified[i] == RELOAD_READ
3016 && modified[goal_alternative_matched[i]] == RELOAD_WRITE)
3017 {
3018 operand_reloadnum[i]
3019 = push_reload (recog_operand[i],
3020 recog_operand[goal_alternative_matched[i]],
3021 recog_operand_loc[i],
3022 recog_operand_loc[goal_alternative_matched[i]],
3023 (enum reg_class) goal_alternative[i],
3024 operand_mode[i],
3025 operand_mode[goal_alternative_matched[i]],
3026 0, 0, NULL_RTX);
3027 operand_reloadnum[goal_alternative_matched[i]] = output_reloadnum;
3028 }
3029 else if (modified[i] == RELOAD_WRITE
3030 && modified[goal_alternative_matched[i]] == RELOAD_READ)
3031 {
3032 operand_reloadnum[goal_alternative_matched[i]]
3033 = push_reload (recog_operand[goal_alternative_matched[i]],
3034 recog_operand[i],
3035 recog_operand_loc[goal_alternative_matched[i]],
3036 recog_operand_loc[i],
3037 (enum reg_class) goal_alternative[i],
3038 operand_mode[goal_alternative_matched[i]],
3039 operand_mode[i],
3040 0, 0, NULL_RTX);
3041 operand_reloadnum[i] = output_reloadnum;
3042 }
3043 else if (insn_code_number >= 0)
3044 abort ();
3045 else
3046 {
3047 error_for_asm (insn, "inconsistent operand constraints in an `asm'");
3048 /* Avoid further trouble with this insn. */
3049 PATTERN (insn) = gen_rtx (USE, VOIDmode, const0_rtx);
3050 n_reloads = 0;
3051 return;
3052 }
3053 }
3054 else if (goal_alternative_matched[i] < 0
3055 && goal_alternative_matches[i] < 0
3056 && optimize)
3057 {
3058 rtx operand = recog_operand[i];
3059 /* For each non-matching operand that's a pseudo-register
3060 that didn't get a hard register, make an optional reload.
3061 This may get done even if the insn needs no reloads otherwise. */
3062 /* (It would be safe to make an optional reload for a matching pair
3063 of operands, but we don't bother yet.) */
3064 while (GET_CODE (operand) == SUBREG)
3065 operand = XEXP (operand, 0);
3066 if (GET_CODE (operand) == REG
3067 && REGNO (operand) >= FIRST_PSEUDO_REGISTER
3068 && reg_renumber[REGNO (operand)] < 0
3069 && (enum reg_class) goal_alternative[i] != NO_REGS
3070 /* Don't make optional output reloads for jump insns
3071 (such as aobjeq on the vax). */
3072 && (modified[i] == RELOAD_READ
3073 || GET_CODE (insn) != JUMP_INSN))
3074 operand_reloadnum[i]
3075 = push_reload (modified[i] != RELOAD_WRITE ? recog_operand[i] : 0,
3076 modified[i] != RELOAD_READ ? recog_operand[i] : 0,
3077 modified[i] != RELOAD_WRITE ? recog_operand_loc[i] : 0,
3078 modified[i] != RELOAD_READ ? recog_operand_loc[i] : 0,
3079 (enum reg_class) goal_alternative[i],
3080 (modified[i] == RELOAD_WRITE ? VOIDmode : operand_mode[i]),
3081 (modified[i] == RELOAD_READ ? VOIDmode : operand_mode[i]),
3082 (insn_code_number < 0 ? 0
3083 : insn_operand_strict_low[insn_code_number][i]),
3084 1, NULL_RTX);
3085 /* Make an optional reload for an explicit mem ref. */
3086 else if (GET_CODE (operand) == MEM
3087 && (enum reg_class) goal_alternative[i] != NO_REGS
3088 /* Don't make optional output reloads for jump insns
3089 (such as aobjeq on the vax). */
3090 && (modified[i] == RELOAD_READ
3091 || GET_CODE (insn) != JUMP_INSN))
3092 operand_reloadnum[i]
3093 = push_reload (modified[i] != RELOAD_WRITE ? recog_operand[i] : 0,
3094 modified[i] != RELOAD_READ ? recog_operand[i] : 0,
3095 modified[i] != RELOAD_WRITE ? recog_operand_loc[i] : 0,
3096 modified[i] != RELOAD_READ ? recog_operand_loc[i] : 0,
3097 (enum reg_class) goal_alternative[i],
3098 (modified[i] == RELOAD_WRITE ? VOIDmode : operand_mode[i]),
3099 (modified[i] == RELOAD_READ ? VOIDmode : operand_mode[i]),
3100 (insn_code_number < 0 ? 0
3101 : insn_operand_strict_low[insn_code_number][i]),
3102 1, NULL_RTX);
3103 else
3104 non_reloaded_operands[n_non_reloaded_operands++] = recog_operand[i];
3105 }
3106 else if (goal_alternative_matched[i] < 0
3107 && goal_alternative_matches[i] < 0)
3108 non_reloaded_operands[n_non_reloaded_operands++] = recog_operand[i];
3109
3110 /* Record the values of the earlyclobber operands for the caller. */
3111 if (goal_earlyclobber)
3112 for (i = 0; i < noperands; i++)
3113 if (goal_alternative_earlyclobber[i])
3114 reload_earlyclobbers[n_earlyclobbers++] = recog_operand[i];
3115
3116 /* If this insn pattern contains any MATCH_DUP's, make sure that
3117 they will be substituted if the operands they match are substituted.
3118 Also do now any substitutions we already did on the operands.
3119
3120 Don't do this if we aren't making replacements because we might be
3121 propagating things allocated by frame pointer elimination into places
3122 it doesn't expect. */
3123
3124 if (insn_code_number >= 0 && replace)
3125 for (i = insn_n_dups[insn_code_number] - 1; i >= 0; i--)
3126 {
3127 int opno = recog_dup_num[i];
3128 *recog_dup_loc[i] = *recog_operand_loc[opno];
3129 if (operand_reloadnum[opno] >= 0)
3130 push_replacement (recog_dup_loc[i], operand_reloadnum[opno],
3131 insn_operand_mode[insn_code_number][opno]);
3132 }
3133
3134 #if 0
3135 /* This loses because reloading of prior insns can invalidate the equivalence
3136 (or at least find_equiv_reg isn't smart enough to find it any more),
3137 causing this insn to need more reload regs than it needed before.
3138 It may be too late to make the reload regs available.
3139 Now this optimization is done safely in choose_reload_regs. */
3140
3141 /* For each reload of a reg into some other class of reg,
3142 search for an existing equivalent reg (same value now) in the right class.
3143 We can use it as long as we don't need to change its contents. */
3144 for (i = 0; i < n_reloads; i++)
3145 if (reload_reg_rtx[i] == 0
3146 && reload_in[i] != 0
3147 && GET_CODE (reload_in[i]) == REG
3148 && reload_out[i] == 0)
3149 {
3150 reload_reg_rtx[i]
3151 = find_equiv_reg (reload_in[i], insn, reload_reg_class[i], -1,
3152 static_reload_reg_p, 0, reload_inmode[i]);
3153 /* Prevent generation of insn to load the value
3154 because the one we found already has the value. */
3155 if (reload_reg_rtx[i])
3156 reload_in[i] = reload_reg_rtx[i];
3157 }
3158 #endif
3159
3160 #else /* no REGISTER_CONSTRAINTS */
3161 int noperands;
3162 int insn_code_number;
3163 int goal_earlyclobber = 0; /* Always 0, to make combine_reloads happen. */
3164 register int i;
3165 rtx body = PATTERN (insn);
3166
3167 n_reloads = 0;
3168 n_replacements = 0;
3169 n_earlyclobbers = 0;
3170 replace_reloads = replace;
3171 this_insn = insn;
3172
3173 /* Find what kind of insn this is. NOPERANDS gets number of operands.
3174 Store the operand values in RECOG_OPERAND and the locations
3175 of the words in the insn that point to them in RECOG_OPERAND_LOC.
3176 Return if the insn needs no reload processing. */
3177
3178 switch (GET_CODE (body))
3179 {
3180 case USE:
3181 case CLOBBER:
3182 case ASM_INPUT:
3183 case ADDR_VEC:
3184 case ADDR_DIFF_VEC:
3185 return;
3186
3187 case PARALLEL:
3188 case SET:
3189 noperands = asm_noperands (body);
3190 if (noperands >= 0)
3191 {
3192 /* This insn is an `asm' with operands.
3193 First, find out how many operands, and allocate space. */
3194
3195 insn_code_number = -1;
3196 /* ??? This is a bug! ???
3197 Give up and delete this insn if it has too many operands. */
3198 if (noperands > MAX_RECOG_OPERANDS)
3199 abort ();
3200
3201 /* Now get the operand values out of the insn. */
3202
3203 decode_asm_operands (body, recog_operand, recog_operand_loc,
3204 NULL_PTR, NULL_PTR);
3205 break;
3206 }
3207
3208 default:
3209 /* Ordinary insn: recognize it, allocate space for operands and
3210 constraints, and get them out via insn_extract. */
3211
3212 insn_code_number = recog_memoized (insn);
3213 noperands = insn_n_operands[insn_code_number];
3214 insn_extract (insn);
3215 }
3216
3217 if (noperands == 0)
3218 return;
3219
3220 for (i = 0; i < noperands; i++)
3221 {
3222 register RTX_CODE code = GET_CODE (recog_operand[i]);
3223 int is_set_dest = GET_CODE (body) == SET && (i == 0);
3224
3225 if (insn_code_number >= 0)
3226 if (insn_operand_address_p[insn_code_number][i])
3227 find_reloads_address (VOIDmode, NULL_PTR,
3228 recog_operand[i], recog_operand_loc[i],
3229 recog_operand[i], ind_levels);
3230 if (code == MEM)
3231 find_reloads_address (GET_MODE (recog_operand[i]),
3232 recog_operand_loc[i],
3233 XEXP (recog_operand[i], 0),
3234 &XEXP (recog_operand[i], 0),
3235 recog_operand[i], ind_levels);
3236 if (code == SUBREG)
3237 recog_operand[i] = *recog_operand_loc[i]
3238 = find_reloads_toplev (recog_operand[i], ind_levels, is_set_dest);
3239 if (code == REG)
3240 {
3241 register int regno = REGNO (recog_operand[i]);
3242 if (reg_equiv_constant[regno] != 0 && !is_set_dest)
3243 recog_operand[i] = *recog_operand_loc[i]
3244 = reg_equiv_constant[regno];
3245 #if 0 /* This might screw code in reload1.c to delete prior output-reload
3246 that feeds this insn. */
3247 if (reg_equiv_mem[regno] != 0)
3248 recog_operand[i] = *recog_operand_loc[i]
3249 = reg_equiv_mem[regno];
3250 #endif
3251 }
3252 /* All operands are non-reloaded. */
3253 non_reloaded_operands[n_non_reloaded_operands++] = recog_operand[i];
3254 }
3255 #endif /* no REGISTER_CONSTRAINTS */
3256
3257 /* Determine which part of the insn each reload is needed for,
3258 based on which operand the reload is needed for.
3259 Reloads of entire operands are classified as RELOAD_OTHER.
3260 So are reloads for which a unique purpose is not known. */
3261
3262 for (i = 0; i < n_reloads; i++)
3263 {
3264 reload_when_needed[i] = RELOAD_OTHER;
3265
3266 if (reload_needed_for[i] != 0 && ! reload_needed_for_multiple[i])
3267 {
3268 int j;
3269 int output_address = 0;
3270 int input_address = 0;
3271 int operand_address = 0;
3272
3273 /* This reload is needed only for the address of something.
3274 Determine whether it is needed for addressing an operand
3275 being reloaded for input, whether it is needed for an
3276 operand being reloaded for output, and whether it is needed
3277 for addressing an operand that won't really be reloaded.
3278
3279 Note that we know that this reload is needed in only one address,
3280 but we have not yet checked for the case where that same address
3281 is used in both input and output reloads.
3282 The following code detects this case. */
3283
3284 for (j = 0; j < n_reloads; j++)
3285 if (reload_needed_for[i] == reload_in[j]
3286 || reload_needed_for[i] == reload_out[j])
3287 {
3288 if (reload_optional[j])
3289 operand_address = 1;
3290 else
3291 {
3292 if (reload_needed_for[i] == reload_in[j])
3293 input_address = 1;
3294 if (reload_needed_for[i] == reload_out[j])
3295 output_address = 1;
3296 }
3297 }
3298 /* Don't ignore memrefs without optional reloads. */
3299 for (j = 0; j < n_non_reloaded_operands; j++)
3300 if (reload_needed_for[i] == non_reloaded_operands[j])
3301 operand_address = 1;
3302
3303 /* If it is needed for only one of those, record which one. */
3304
3305 if (input_address && ! output_address && ! operand_address)
3306 reload_when_needed[i] = RELOAD_FOR_INPUT_RELOAD_ADDRESS;
3307 if (output_address && ! input_address && ! operand_address)
3308 reload_when_needed[i] = RELOAD_FOR_OUTPUT_RELOAD_ADDRESS;
3309 if (operand_address && ! input_address && ! output_address)
3310 reload_when_needed[i] = RELOAD_FOR_OPERAND_ADDRESS;
3311
3312 /* Indicate those RELOAD_OTHER reloads which, though they have
3313 0 for reload_output, still cannot overlap an output reload. */
3314
3315 if (output_address && reload_when_needed[i] == RELOAD_OTHER)
3316 reload_needed_for_multiple[i] = 1;
3317
3318 /* If we have earlyclobbers, make sure nothing overlaps them. */
3319 if (n_earlyclobbers > 0)
3320 {
3321 reload_when_needed[i] = RELOAD_OTHER;
3322 reload_needed_for_multiple[i] = 1;
3323 }
3324 }
3325 }
3326
3327 /* Perhaps an output reload can be combined with another
3328 to reduce needs by one. */
3329 if (!goal_earlyclobber)
3330 combine_reloads ();
3331 }
3332
3333 /* Return 1 if alternative number ALTNUM in constraint-string CONSTRAINT
3334 accepts a memory operand with constant address. */
3335
3336 static int
3337 alternative_allows_memconst (constraint, altnum)
3338 char *constraint;
3339 int altnum;
3340 {
3341 register int c;
3342 /* Skip alternatives before the one requested. */
3343 while (altnum > 0)
3344 {
3345 while (*constraint++ != ',');
3346 altnum--;
3347 }
3348 /* Scan the requested alternative for 'm' or 'o'.
3349 If one of them is present, this alternative accepts memory constants. */
3350 while ((c = *constraint++) && c != ',' && c != '#')
3351 if (c == 'm' || c == 'o')
3352 return 1;
3353 return 0;
3354 }
3355 \f
3356 /* Scan X for memory references and scan the addresses for reloading.
3357 Also checks for references to "constant" regs that we want to eliminate
3358 and replaces them with the values they stand for.
3359 We may alter X destructively if it contains a reference to such.
3360 If X is just a constant reg, we return the equivalent value
3361 instead of X.
3362
3363 IND_LEVELS says how many levels of indirect addressing this machine
3364 supports.
3365
3366 IS_SET_DEST is true if X is the destination of a SET, which is not
3367 appropriate to be replaced by a constant. */
3368
3369 static rtx
3370 find_reloads_toplev (x, ind_levels, is_set_dest)
3371 rtx x;
3372 int ind_levels;
3373 int is_set_dest;
3374 {
3375 register RTX_CODE code = GET_CODE (x);
3376
3377 register char *fmt = GET_RTX_FORMAT (code);
3378 register int i;
3379
3380 if (code == REG)
3381 {
3382 /* This code is duplicated for speed in find_reloads. */
3383 register int regno = REGNO (x);
3384 if (reg_equiv_constant[regno] != 0 && !is_set_dest)
3385 x = reg_equiv_constant[regno];
3386 #if 0
3387 /* This creates (subreg (mem...)) which would cause an unnecessary
3388 reload of the mem. */
3389 else if (reg_equiv_mem[regno] != 0)
3390 x = reg_equiv_mem[regno];
3391 #endif
3392 else if (reg_equiv_address[regno] != 0)
3393 {
3394 /* If reg_equiv_address varies, it may be shared, so copy it. */
3395 rtx addr = reg_equiv_address[regno];
3396
3397 if (rtx_varies_p (addr))
3398 addr = copy_rtx (addr);
3399
3400 x = gen_rtx (MEM, GET_MODE (x), addr);
3401 RTX_UNCHANGING_P (x) = RTX_UNCHANGING_P (regno_reg_rtx[regno]);
3402 find_reloads_address (GET_MODE (x), NULL_PTR,
3403 XEXP (x, 0),
3404 &XEXP (x, 0), x, ind_levels);
3405 }
3406 return x;
3407 }
3408 if (code == MEM)
3409 {
3410 rtx tem = x;
3411 find_reloads_address (GET_MODE (x), &tem, XEXP (x, 0), &XEXP (x, 0),
3412 x, ind_levels);
3413 return tem;
3414 }
3415
3416 if (code == SUBREG && GET_CODE (SUBREG_REG (x)) == REG)
3417 {
3418 /* Check for SUBREG containing a REG that's equivalent to a constant.
3419 If the constant has a known value, truncate it right now.
3420 Similarly if we are extracting a single-word of a multi-word
3421 constant. If the constant is symbolic, allow it to be substituted
3422 normally. push_reload will strip the subreg later. If the
3423 constant is VOIDmode, abort because we will lose the mode of
3424 the register (this should never happen because one of the cases
3425 above should handle it). */
3426
3427 register int regno = REGNO (SUBREG_REG (x));
3428 rtx tem;
3429
3430 if (subreg_lowpart_p (x)
3431 && regno >= FIRST_PSEUDO_REGISTER && reg_renumber[regno] < 0
3432 && reg_equiv_constant[regno] != 0
3433 && (tem = gen_lowpart_common (GET_MODE (x),
3434 reg_equiv_constant[regno])) != 0)
3435 return tem;
3436
3437 if (GET_MODE_BITSIZE (GET_MODE (x)) == BITS_PER_WORD
3438 && regno >= FIRST_PSEUDO_REGISTER && reg_renumber[regno] < 0
3439 && reg_equiv_constant[regno] != 0
3440 && (tem = operand_subword (reg_equiv_constant[regno],
3441 SUBREG_WORD (x), 0,
3442 GET_MODE (SUBREG_REG (x)))) != 0)
3443 return tem;
3444
3445 if (regno >= FIRST_PSEUDO_REGISTER && reg_renumber[regno] < 0
3446 && reg_equiv_constant[regno] != 0
3447 && GET_MODE (reg_equiv_constant[regno]) == VOIDmode)
3448 abort ();
3449
3450 /* If the subreg contains a reg that will be converted to a mem,
3451 convert the subreg to a narrower memref now.
3452 Otherwise, we would get (subreg (mem ...) ...),
3453 which would force reload of the mem.
3454
3455 We also need to do this if there is an equivalent MEM that is
3456 not offsettable. In that case, alter_subreg would produce an
3457 invalid address on big-endian machines.
3458
3459 For machines that extend byte loads, we must not reload using
3460 a wider mode if we have a paradoxical SUBREG. find_reloads will
3461 force a reload in that case. So we should not do anything here. */
3462
3463 else if (regno >= FIRST_PSEUDO_REGISTER
3464 #if defined(BYTE_LOADS_ZERO_EXTEND) || defined(BYTE_LOADS_SIGN_EXTEND)
3465 && (GET_MODE_SIZE (GET_MODE (x))
3466 <= GET_MODE_SIZE (GET_MODE (SUBREG_REG (x))))
3467 #endif
3468 && (reg_equiv_address[regno] != 0
3469 || (reg_equiv_mem[regno] != 0
3470 && ! offsettable_memref_p (reg_equiv_mem[regno]))))
3471 {
3472 int offset = SUBREG_WORD (x) * UNITS_PER_WORD;
3473 rtx addr = (reg_equiv_address[regno] ? reg_equiv_address[regno]
3474 : XEXP (reg_equiv_mem[regno], 0));
3475 #if BYTES_BIG_ENDIAN
3476 int size;
3477 size = GET_MODE_SIZE (GET_MODE (SUBREG_REG (x)));
3478 offset += MIN (size, UNITS_PER_WORD);
3479 size = GET_MODE_SIZE (GET_MODE (x));
3480 offset -= MIN (size, UNITS_PER_WORD);
3481 #endif
3482 addr = plus_constant (addr, offset);
3483 x = gen_rtx (MEM, GET_MODE (x), addr);
3484 RTX_UNCHANGING_P (x) = RTX_UNCHANGING_P (regno_reg_rtx[regno]);
3485 find_reloads_address (GET_MODE (x), NULL_PTR,
3486 XEXP (x, 0),
3487 &XEXP (x, 0), x, ind_levels);
3488 }
3489
3490 }
3491
3492 for (i = GET_RTX_LENGTH (code) - 1; i >= 0; i--)
3493 {
3494 if (fmt[i] == 'e')
3495 XEXP (x, i) = find_reloads_toplev (XEXP (x, i),
3496 ind_levels, is_set_dest);
3497 }
3498 return x;
3499 }
3500
3501 static rtx
3502 make_memloc (ad, regno)
3503 rtx ad;
3504 int regno;
3505 {
3506 register int i;
3507 rtx tem = reg_equiv_address[regno];
3508 for (i = 0; i < n_memlocs; i++)
3509 if (rtx_equal_p (tem, XEXP (memlocs[i], 0)))
3510 return memlocs[i];
3511
3512 /* If TEM might contain a pseudo, we must copy it to avoid
3513 modifying it when we do the substitution for the reload. */
3514 if (rtx_varies_p (tem))
3515 tem = copy_rtx (tem);
3516
3517 tem = gen_rtx (MEM, GET_MODE (ad), tem);
3518 RTX_UNCHANGING_P (tem) = RTX_UNCHANGING_P (regno_reg_rtx[regno]);
3519 memlocs[n_memlocs++] = tem;
3520 return tem;
3521 }
3522
3523 /* Record all reloads needed for handling memory address AD
3524 which appears in *LOC in a memory reference to mode MODE
3525 which itself is found in location *MEMREFLOC.
3526 Note that we take shortcuts assuming that no multi-reg machine mode
3527 occurs as part of an address.
3528
3529 OPERAND is the operand of the insn within which this address appears.
3530
3531 IND_LEVELS says how many levels of indirect addressing this machine
3532 supports.
3533
3534 Value is nonzero if this address is reloaded or replaced as a whole.
3535 This is interesting to the caller if the address is an autoincrement.
3536
3537 Note that there is no verification that the address will be valid after
3538 this routine does its work. Instead, we rely on the fact that the address
3539 was valid when reload started. So we need only undo things that reload
3540 could have broken. These are wrong register types, pseudos not allocated
3541 to a hard register, and frame pointer elimination. */
3542
3543 static int
3544 find_reloads_address (mode, memrefloc, ad, loc, operand, ind_levels)
3545 enum machine_mode mode;
3546 rtx *memrefloc;
3547 rtx ad;
3548 rtx *loc;
3549 rtx operand;
3550 int ind_levels;
3551 {
3552 register int regno;
3553 rtx tem;
3554
3555 /* If the address is a register, see if it is a legitimate address and
3556 reload if not. We first handle the cases where we need not reload
3557 or where we must reload in a non-standard way. */
3558
3559 if (GET_CODE (ad) == REG)
3560 {
3561 regno = REGNO (ad);
3562
3563 if (reg_equiv_constant[regno] != 0
3564 && strict_memory_address_p (mode, reg_equiv_constant[regno]))
3565 {
3566 *loc = ad = reg_equiv_constant[regno];
3567 return 1;
3568 }
3569
3570 else if (reg_equiv_address[regno] != 0)
3571 {
3572 tem = make_memloc (ad, regno);
3573 find_reloads_address (GET_MODE (tem), NULL_PTR, XEXP (tem, 0),
3574 &XEXP (tem, 0), operand, ind_levels);
3575 push_reload (tem, NULL_RTX, loc, NULL_PTR, BASE_REG_CLASS,
3576 GET_MODE (ad), VOIDmode, 0, 0,
3577 operand);
3578 return 1;
3579 }
3580
3581 else if (reg_equiv_mem[regno] != 0)
3582 {
3583 tem = XEXP (reg_equiv_mem[regno], 0);
3584
3585 /* If we can't indirect any more, a pseudo must be reloaded.
3586 If the pseudo's address in its MEM is a SYMBOL_REF, it
3587 must be reloaded unless indirect_symref_ok. Otherwise, it
3588 can be reloaded if the address is REG or REG + CONST_INT. */
3589
3590 if (ind_levels > 0
3591 && ! (GET_CODE (tem) == SYMBOL_REF && ! indirect_symref_ok)
3592 && ((GET_CODE (tem) == REG
3593 && REGNO (tem) < FIRST_PSEUDO_REGISTER)
3594 || (GET_CODE (tem) == PLUS
3595 && GET_CODE (XEXP (tem, 0)) == REG
3596 && REGNO (XEXP (tem, 0)) < FIRST_PSEUDO_REGISTER
3597 && GET_CODE (XEXP (tem, 1)) == CONST_INT)))
3598 return 0;
3599 }
3600
3601 /* The only remaining case where we can avoid a reload is if this is a
3602 hard register that is valid as a base register and which is not the
3603 subject of a CLOBBER in this insn. */
3604
3605 else if (regno < FIRST_PSEUDO_REGISTER && REGNO_OK_FOR_BASE_P (regno)
3606 && ! regno_clobbered_p (regno, this_insn))
3607 return 0;
3608
3609 /* If we do not have one of the cases above, we must do the reload. */
3610 push_reload (ad, NULL_RTX, loc, NULL_PTR, BASE_REG_CLASS,
3611 GET_MODE (ad), VOIDmode, 0, 0, operand);
3612 return 1;
3613 }
3614
3615 if (strict_memory_address_p (mode, ad))
3616 {
3617 /* The address appears valid, so reloads are not needed.
3618 But the address may contain an eliminable register.
3619 This can happen because a machine with indirect addressing
3620 may consider a pseudo register by itself a valid address even when
3621 it has failed to get a hard reg.
3622 So do a tree-walk to find and eliminate all such regs. */
3623
3624 /* But first quickly dispose of a common case. */
3625 if (GET_CODE (ad) == PLUS
3626 && GET_CODE (XEXP (ad, 1)) == CONST_INT
3627 && GET_CODE (XEXP (ad, 0)) == REG
3628 && reg_equiv_constant[REGNO (XEXP (ad, 0))] == 0)
3629 return 0;
3630
3631 subst_reg_equivs_changed = 0;
3632 *loc = subst_reg_equivs (ad);
3633
3634 if (! subst_reg_equivs_changed)
3635 return 0;
3636
3637 /* Check result for validity after substitution. */
3638 if (strict_memory_address_p (mode, ad))
3639 return 0;
3640 }
3641
3642 /* The address is not valid. We have to figure out why. One possibility
3643 is that it is itself a MEM. This can happen when the frame pointer is
3644 being eliminated, a pseudo is not allocated to a hard register, and the
3645 offset between the frame and stack pointers is not its initial value.
3646 In that case the pseudo will have been replaced by a MEM referring to
3647 the stack pointer. */
3648 if (GET_CODE (ad) == MEM)
3649 {
3650 /* First ensure that the address in this MEM is valid. Then, unless
3651 indirect addresses are valid, reload the MEM into a register. */
3652 tem = ad;
3653 find_reloads_address (GET_MODE (ad), &tem, XEXP (ad, 0), &XEXP (ad, 0),
3654 operand, ind_levels == 0 ? 0 : ind_levels - 1);
3655
3656 /* If tem was changed, then we must create a new memory reference to
3657 hold it and store it back into memrefloc. */
3658 if (tem != ad && memrefloc)
3659 {
3660 rtx oldref = *memrefloc;
3661 *memrefloc = copy_rtx (*memrefloc);
3662 copy_replacements (tem, XEXP (*memrefloc, 0));
3663 loc = &XEXP (*memrefloc, 0);
3664 if (operand == oldref)
3665 operand = *memrefloc;
3666 }
3667
3668 /* Check similar cases as for indirect addresses as above except
3669 that we can allow pseudos and a MEM since they should have been
3670 taken care of above. */
3671
3672 if (ind_levels == 0
3673 || (GET_CODE (XEXP (tem, 0)) == SYMBOL_REF && ! indirect_symref_ok)
3674 || GET_CODE (XEXP (tem, 0)) == MEM
3675 || ! (GET_CODE (XEXP (tem, 0)) == REG
3676 || (GET_CODE (XEXP (tem, 0)) == PLUS
3677 && GET_CODE (XEXP (XEXP (tem, 0), 0)) == REG
3678 && GET_CODE (XEXP (XEXP (tem, 0), 1)) == CONST_INT)))
3679 {
3680 /* Must use TEM here, not AD, since it is the one that will
3681 have any subexpressions reloaded, if needed. */
3682 push_reload (tem, NULL_RTX, loc, NULL_PTR,
3683 BASE_REG_CLASS, GET_MODE (tem), VOIDmode, 0,
3684 0, operand);
3685 return 1;
3686 }
3687 else
3688 return 0;
3689 }
3690
3691 /* If we have address of a stack slot but it's not valid
3692 (displacement is too large), compute the sum in a register. */
3693 else if (GET_CODE (ad) == PLUS
3694 && (XEXP (ad, 0) == frame_pointer_rtx
3695 #if FRAME_POINTER_REGNUM != ARG_POINTER_REGNUM
3696 || XEXP (ad, 0) == arg_pointer_rtx
3697 #endif
3698 || XEXP (ad, 0) == stack_pointer_rtx)
3699 && GET_CODE (XEXP (ad, 1)) == CONST_INT)
3700 {
3701 /* Unshare the MEM rtx so we can safely alter it. */
3702 if (memrefloc)
3703 {
3704 rtx oldref = *memrefloc;
3705 *memrefloc = copy_rtx (*memrefloc);
3706 loc = &XEXP (*memrefloc, 0);
3707 if (operand == oldref)
3708 operand = *memrefloc;
3709 }
3710 if (double_reg_address_ok)
3711 {
3712 /* Unshare the sum as well. */
3713 *loc = ad = copy_rtx (ad);
3714 /* Reload the displacement into an index reg.
3715 We assume the frame pointer or arg pointer is a base reg. */
3716 find_reloads_address_part (XEXP (ad, 1), &XEXP (ad, 1),
3717 INDEX_REG_CLASS, GET_MODE (ad), operand,
3718 ind_levels);
3719 }
3720 else
3721 {
3722 /* If the sum of two regs is not necessarily valid,
3723 reload the sum into a base reg.
3724 That will at least work. */
3725 find_reloads_address_part (ad, loc, BASE_REG_CLASS, Pmode,
3726 operand, ind_levels);
3727 }
3728 return 1;
3729 }
3730
3731 /* If we have an indexed stack slot, there are three possible reasons why
3732 it might be invalid: The index might need to be reloaded, the address
3733 might have been made by frame pointer elimination and hence have a
3734 constant out of range, or both reasons might apply.
3735
3736 We can easily check for an index needing reload, but even if that is the
3737 case, we might also have an invalid constant. To avoid making the
3738 conservative assumption and requiring two reloads, we see if this address
3739 is valid when not interpreted strictly. If it is, the only problem is
3740 that the index needs a reload and find_reloads_address_1 will take care
3741 of it.
3742
3743 There is still a case when we might generate an extra reload,
3744 however. In certain cases eliminate_regs will return a MEM for a REG
3745 (see the code there for details). In those cases, memory_address_p
3746 applied to our address will return 0 so we will think that our offset
3747 must be too large. But it might indeed be valid and the only problem
3748 is that a MEM is present where a REG should be. This case should be
3749 very rare and there doesn't seem to be any way to avoid it.
3750
3751 If we decide to do something here, it must be that
3752 `double_reg_address_ok' is true and that this address rtl was made by
3753 eliminate_regs. We generate a reload of the fp/sp/ap + constant and
3754 rework the sum so that the reload register will be added to the index.
3755 This is safe because we know the address isn't shared.
3756
3757 We check for fp/ap/sp as both the first and second operand of the
3758 innermost PLUS. */
3759
3760 else if (GET_CODE (ad) == PLUS && GET_CODE (XEXP (ad, 1)) == CONST_INT
3761 && GET_CODE (XEXP (ad, 0)) == PLUS
3762 && (XEXP (XEXP (ad, 0), 0) == frame_pointer_rtx
3763 #if FRAME_POINTER_REGNUM != ARG_POINTER_REGNUM
3764 || XEXP (XEXP (ad, 0), 0) == arg_pointer_rtx
3765 #endif
3766 || XEXP (XEXP (ad, 0), 0) == stack_pointer_rtx)
3767 && ! memory_address_p (mode, ad))
3768 {
3769 *loc = ad = gen_rtx (PLUS, GET_MODE (ad),
3770 plus_constant (XEXP (XEXP (ad, 0), 0),
3771 INTVAL (XEXP (ad, 1))),
3772 XEXP (XEXP (ad, 0), 1));
3773 find_reloads_address_part (XEXP (ad, 0), &XEXP (ad, 0), BASE_REG_CLASS,
3774 GET_MODE (ad), operand, ind_levels);
3775 find_reloads_address_1 (XEXP (ad, 1), 1, &XEXP (ad, 1), operand, 0);
3776
3777 return 1;
3778 }
3779
3780 else if (GET_CODE (ad) == PLUS && GET_CODE (XEXP (ad, 1)) == CONST_INT
3781 && GET_CODE (XEXP (ad, 0)) == PLUS
3782 && (XEXP (XEXP (ad, 0), 1) == frame_pointer_rtx
3783 #if FRAME_POINTER_REGNUM != ARG_POINTER_REGNUM
3784 || XEXP (XEXP (ad, 0), 1) == arg_pointer_rtx
3785 #endif
3786 || XEXP (XEXP (ad, 0), 1) == stack_pointer_rtx)
3787 && ! memory_address_p (mode, ad))
3788 {
3789 *loc = ad = gen_rtx (PLUS, GET_MODE (ad),
3790 plus_constant (XEXP (XEXP (ad, 0), 1),
3791 INTVAL (XEXP (ad, 1))),
3792 XEXP (XEXP (ad, 0), 0));
3793 find_reloads_address_part (XEXP (ad, 0), &XEXP (ad, 0), BASE_REG_CLASS,
3794 GET_MODE (ad), operand, ind_levels);
3795 find_reloads_address_1 (XEXP (ad, 1), 1, &XEXP (ad, 1), operand, 0);
3796
3797 return 1;
3798 }
3799
3800 /* See if address becomes valid when an eliminable register
3801 in a sum is replaced. */
3802
3803 tem = ad;
3804 if (GET_CODE (ad) == PLUS)
3805 tem = subst_indexed_address (ad);
3806 if (tem != ad && strict_memory_address_p (mode, tem))
3807 {
3808 /* Ok, we win that way. Replace any additional eliminable
3809 registers. */
3810
3811 subst_reg_equivs_changed = 0;
3812 tem = subst_reg_equivs (tem);
3813
3814 /* Make sure that didn't make the address invalid again. */
3815
3816 if (! subst_reg_equivs_changed || strict_memory_address_p (mode, tem))
3817 {
3818 *loc = tem;
3819 return 0;
3820 }
3821 }
3822
3823 /* If constants aren't valid addresses, reload the constant address
3824 into a register. */
3825 if (CONSTANT_P (ad) && ! strict_memory_address_p (mode, ad))
3826 {
3827 /* If AD is in address in the constant pool, the MEM rtx may be shared.
3828 Unshare it so we can safely alter it. */
3829 if (memrefloc && GET_CODE (ad) == SYMBOL_REF
3830 && CONSTANT_POOL_ADDRESS_P (ad))
3831 {
3832 rtx oldref = *memrefloc;
3833 *memrefloc = copy_rtx (*memrefloc);
3834 loc = &XEXP (*memrefloc, 0);
3835 if (operand == oldref)
3836 operand = *memrefloc;
3837 }
3838
3839 find_reloads_address_part (ad, loc, BASE_REG_CLASS, Pmode, operand,
3840 ind_levels);
3841 return 1;
3842 }
3843
3844 return find_reloads_address_1 (ad, 0, loc, operand, ind_levels);
3845 }
3846 \f
3847 /* Find all pseudo regs appearing in AD
3848 that are eliminable in favor of equivalent values
3849 and do not have hard regs; replace them by their equivalents. */
3850
3851 static rtx
3852 subst_reg_equivs (ad)
3853 rtx ad;
3854 {
3855 register RTX_CODE code = GET_CODE (ad);
3856 register int i;
3857 register char *fmt;
3858
3859 switch (code)
3860 {
3861 case HIGH:
3862 case CONST_INT:
3863 case CONST:
3864 case CONST_DOUBLE:
3865 case SYMBOL_REF:
3866 case LABEL_REF:
3867 case PC:
3868 case CC0:
3869 return ad;
3870
3871 case REG:
3872 {
3873 register int regno = REGNO (ad);
3874
3875 if (reg_equiv_constant[regno] != 0)
3876 {
3877 subst_reg_equivs_changed = 1;
3878 return reg_equiv_constant[regno];
3879 }
3880 }
3881 return ad;
3882
3883 case PLUS:
3884 /* Quickly dispose of a common case. */
3885 if (XEXP (ad, 0) == frame_pointer_rtx
3886 && GET_CODE (XEXP (ad, 1)) == CONST_INT)
3887 return ad;
3888 }
3889
3890 fmt = GET_RTX_FORMAT (code);
3891 for (i = GET_RTX_LENGTH (code) - 1; i >= 0; i--)
3892 if (fmt[i] == 'e')
3893 XEXP (ad, i) = subst_reg_equivs (XEXP (ad, i));
3894 return ad;
3895 }
3896 \f
3897 /* Compute the sum of X and Y, making canonicalizations assumed in an
3898 address, namely: sum constant integers, surround the sum of two
3899 constants with a CONST, put the constant as the second operand, and
3900 group the constant on the outermost sum.
3901
3902 This routine assumes both inputs are already in canonical form. */
3903
3904 rtx
3905 form_sum (x, y)
3906 rtx x, y;
3907 {
3908 rtx tem;
3909
3910 if (GET_CODE (x) == CONST_INT)
3911 return plus_constant (y, INTVAL (x));
3912 else if (GET_CODE (y) == CONST_INT)
3913 return plus_constant (x, INTVAL (y));
3914 else if (CONSTANT_P (x))
3915 tem = x, x = y, y = tem;
3916
3917 if (GET_CODE (x) == PLUS && CONSTANT_P (XEXP (x, 1)))
3918 return form_sum (XEXP (x, 0), form_sum (XEXP (x, 1), y));
3919
3920 /* Note that if the operands of Y are specified in the opposite
3921 order in the recursive calls below, infinite recursion will occur. */
3922 if (GET_CODE (y) == PLUS && CONSTANT_P (XEXP (y, 1)))
3923 return form_sum (form_sum (x, XEXP (y, 0)), XEXP (y, 1));
3924
3925 /* If both constant, encapsulate sum. Otherwise, just form sum. A
3926 constant will have been placed second. */
3927 if (CONSTANT_P (x) && CONSTANT_P (y))
3928 {
3929 if (GET_CODE (x) == CONST)
3930 x = XEXP (x, 0);
3931 if (GET_CODE (y) == CONST)
3932 y = XEXP (y, 0);
3933
3934 return gen_rtx (CONST, VOIDmode, gen_rtx (PLUS, Pmode, x, y));
3935 }
3936
3937 return gen_rtx (PLUS, Pmode, x, y);
3938 }
3939 \f
3940 /* If ADDR is a sum containing a pseudo register that should be
3941 replaced with a constant (from reg_equiv_constant),
3942 return the result of doing so, and also apply the associative
3943 law so that the result is more likely to be a valid address.
3944 (But it is not guaranteed to be one.)
3945
3946 Note that at most one register is replaced, even if more are
3947 replaceable. Also, we try to put the result into a canonical form
3948 so it is more likely to be a valid address.
3949
3950 In all other cases, return ADDR. */
3951
3952 static rtx
3953 subst_indexed_address (addr)
3954 rtx addr;
3955 {
3956 rtx op0 = 0, op1 = 0, op2 = 0;
3957 rtx tem;
3958 int regno;
3959
3960 if (GET_CODE (addr) == PLUS)
3961 {
3962 /* Try to find a register to replace. */
3963 op0 = XEXP (addr, 0), op1 = XEXP (addr, 1), op2 = 0;
3964 if (GET_CODE (op0) == REG
3965 && (regno = REGNO (op0)) >= FIRST_PSEUDO_REGISTER
3966 && reg_renumber[regno] < 0
3967 && reg_equiv_constant[regno] != 0)
3968 op0 = reg_equiv_constant[regno];
3969 else if (GET_CODE (op1) == REG
3970 && (regno = REGNO (op1)) >= FIRST_PSEUDO_REGISTER
3971 && reg_renumber[regno] < 0
3972 && reg_equiv_constant[regno] != 0)
3973 op1 = reg_equiv_constant[regno];
3974 else if (GET_CODE (op0) == PLUS
3975 && (tem = subst_indexed_address (op0)) != op0)
3976 op0 = tem;
3977 else if (GET_CODE (op1) == PLUS
3978 && (tem = subst_indexed_address (op1)) != op1)
3979 op1 = tem;
3980 else
3981 return addr;
3982
3983 /* Pick out up to three things to add. */
3984 if (GET_CODE (op1) == PLUS)
3985 op2 = XEXP (op1, 1), op1 = XEXP (op1, 0);
3986 else if (GET_CODE (op0) == PLUS)
3987 op2 = op1, op1 = XEXP (op0, 1), op0 = XEXP (op0, 0);
3988
3989 /* Compute the sum. */
3990 if (op2 != 0)
3991 op1 = form_sum (op1, op2);
3992 if (op1 != 0)
3993 op0 = form_sum (op0, op1);
3994
3995 return op0;
3996 }
3997 return addr;
3998 }
3999 \f
4000 /* Record the pseudo registers we must reload into hard registers
4001 in a subexpression of a would-be memory address, X.
4002 (This function is not called if the address we find is strictly valid.)
4003 CONTEXT = 1 means we are considering regs as index regs,
4004 = 0 means we are considering them as base regs.
4005
4006 OPERAND is the operand of the insn within which this address appears.
4007
4008 IND_LEVELS says how many levels of indirect addressing are
4009 supported at this point in the address.
4010
4011 We return nonzero if X, as a whole, is reloaded or replaced. */
4012
4013 /* Note that we take shortcuts assuming that no multi-reg machine mode
4014 occurs as part of an address.
4015 Also, this is not fully machine-customizable; it works for machines
4016 such as vaxes and 68000's and 32000's, but other possible machines
4017 could have addressing modes that this does not handle right. */
4018
4019 static int
4020 find_reloads_address_1 (x, context, loc, operand, ind_levels)
4021 rtx x;
4022 int context;
4023 rtx *loc;
4024 rtx operand;
4025 int ind_levels;
4026 {
4027 register RTX_CODE code = GET_CODE (x);
4028
4029 if (code == PLUS)
4030 {
4031 register rtx op0 = XEXP (x, 0);
4032 register rtx op1 = XEXP (x, 1);
4033 register RTX_CODE code0 = GET_CODE (op0);
4034 register RTX_CODE code1 = GET_CODE (op1);
4035 if (code0 == MULT || code0 == SIGN_EXTEND || code1 == MEM)
4036 {
4037 find_reloads_address_1 (op0, 1, &XEXP (x, 0), operand, ind_levels);
4038 find_reloads_address_1 (op1, 0, &XEXP (x, 1), operand, ind_levels);
4039 }
4040 else if (code1 == MULT || code1 == SIGN_EXTEND || code0 == MEM)
4041 {
4042 find_reloads_address_1 (op0, 0, &XEXP (x, 0), operand, ind_levels);
4043 find_reloads_address_1 (op1, 1, &XEXP (x, 1), operand, ind_levels);
4044 }
4045 else if (code0 == CONST_INT || code0 == CONST
4046 || code0 == SYMBOL_REF || code0 == LABEL_REF)
4047 {
4048 find_reloads_address_1 (op1, 0, &XEXP (x, 1), operand, ind_levels);
4049 }
4050 else if (code1 == CONST_INT || code1 == CONST
4051 || code1 == SYMBOL_REF || code1 == LABEL_REF)
4052 {
4053 find_reloads_address_1 (op0, 0, &XEXP (x, 0), operand, ind_levels);
4054 }
4055 else if (code0 == REG && code1 == REG)
4056 {
4057 if (REG_OK_FOR_INDEX_P (op0)
4058 && REG_OK_FOR_BASE_P (op1))
4059 return 0;
4060 else if (REG_OK_FOR_INDEX_P (op1)
4061 && REG_OK_FOR_BASE_P (op0))
4062 return 0;
4063 else if (REG_OK_FOR_BASE_P (op1))
4064 find_reloads_address_1 (op0, 1, &XEXP (x, 0), operand, ind_levels);
4065 else if (REG_OK_FOR_BASE_P (op0))
4066 find_reloads_address_1 (op1, 1, &XEXP (x, 1), operand, ind_levels);
4067 else if (REG_OK_FOR_INDEX_P (op1))
4068 find_reloads_address_1 (op0, 0, &XEXP (x, 0), operand, ind_levels);
4069 else if (REG_OK_FOR_INDEX_P (op0))
4070 find_reloads_address_1 (op1, 0, &XEXP (x, 1), operand, ind_levels);
4071 else
4072 {
4073 find_reloads_address_1 (op0, 1, &XEXP (x, 0), operand,
4074 ind_levels);
4075 find_reloads_address_1 (op1, 0, &XEXP (x, 1), operand,
4076 ind_levels);
4077 }
4078 }
4079 else if (code0 == REG)
4080 {
4081 find_reloads_address_1 (op0, 1, &XEXP (x, 0), operand, ind_levels);
4082 find_reloads_address_1 (op1, 0, &XEXP (x, 1), operand, ind_levels);
4083 }
4084 else if (code1 == REG)
4085 {
4086 find_reloads_address_1 (op1, 1, &XEXP (x, 1), operand, ind_levels);
4087 find_reloads_address_1 (op0, 0, &XEXP (x, 0), operand, ind_levels);
4088 }
4089 }
4090 else if (code == POST_INC || code == POST_DEC
4091 || code == PRE_INC || code == PRE_DEC)
4092 {
4093 if (GET_CODE (XEXP (x, 0)) == REG)
4094 {
4095 register int regno = REGNO (XEXP (x, 0));
4096 int value = 0;
4097 rtx x_orig = x;
4098
4099 /* A register that is incremented cannot be constant! */
4100 if (regno >= FIRST_PSEUDO_REGISTER
4101 && reg_equiv_constant[regno] != 0)
4102 abort ();
4103
4104 /* Handle a register that is equivalent to a memory location
4105 which cannot be addressed directly. */
4106 if (reg_equiv_address[regno] != 0)
4107 {
4108 rtx tem = make_memloc (XEXP (x, 0), regno);
4109 /* First reload the memory location's address. */
4110 find_reloads_address (GET_MODE (tem), 0, XEXP (tem, 0),
4111 &XEXP (tem, 0), operand, ind_levels);
4112 /* Put this inside a new increment-expression. */
4113 x = gen_rtx (GET_CODE (x), GET_MODE (x), tem);
4114 /* Proceed to reload that, as if it contained a register. */
4115 }
4116
4117 /* If we have a hard register that is ok as an index,
4118 don't make a reload. If an autoincrement of a nice register
4119 isn't "valid", it must be that no autoincrement is "valid".
4120 If that is true and something made an autoincrement anyway,
4121 this must be a special context where one is allowed.
4122 (For example, a "push" instruction.)
4123 We can't improve this address, so leave it alone. */
4124
4125 /* Otherwise, reload the autoincrement into a suitable hard reg
4126 and record how much to increment by. */
4127
4128 if (reg_renumber[regno] >= 0)
4129 regno = reg_renumber[regno];
4130 if ((regno >= FIRST_PSEUDO_REGISTER
4131 || !(context ? REGNO_OK_FOR_INDEX_P (regno)
4132 : REGNO_OK_FOR_BASE_P (regno))))
4133 {
4134 register rtx link;
4135
4136 int reloadnum
4137 = push_reload (x, NULL_RTX, loc, NULL_PTR,
4138 context ? INDEX_REG_CLASS : BASE_REG_CLASS,
4139 GET_MODE (x), GET_MODE (x), VOIDmode, 0, operand);
4140 reload_inc[reloadnum]
4141 = find_inc_amount (PATTERN (this_insn), XEXP (x_orig, 0));
4142
4143 value = 1;
4144
4145 #ifdef AUTO_INC_DEC
4146 /* Update the REG_INC notes. */
4147
4148 for (link = REG_NOTES (this_insn);
4149 link; link = XEXP (link, 1))
4150 if (REG_NOTE_KIND (link) == REG_INC
4151 && REGNO (XEXP (link, 0)) == REGNO (XEXP (x_orig, 0)))
4152 push_replacement (&XEXP (link, 0), reloadnum, VOIDmode);
4153 #endif
4154 }
4155 return value;
4156 }
4157 else if (GET_CODE (XEXP (x, 0)) == MEM)
4158 {
4159 /* This is probably the result of a substitution, by eliminate_regs,
4160 of an equivalent address for a pseudo that was not allocated to a
4161 hard register. Verify that the specified address is valid and
4162 reload it into a register. */
4163 rtx tem = XEXP (x, 0);
4164 register rtx link;
4165 int reloadnum;
4166
4167 /* Since we know we are going to reload this item, don't decrement
4168 for the indirection level.
4169
4170 Note that this is actually conservative: it would be slightly
4171 more efficient to use the value of SPILL_INDIRECT_LEVELS from
4172 reload1.c here. */
4173 find_reloads_address (GET_MODE (x), &XEXP (x, 0),
4174 XEXP (XEXP (x, 0), 0), &XEXP (XEXP (x, 0), 0),
4175 operand, ind_levels);
4176
4177 reloadnum = push_reload (x, NULL_RTX, loc, NULL_PTR,
4178 context ? INDEX_REG_CLASS : BASE_REG_CLASS,
4179 GET_MODE (x), VOIDmode, 0, 0, operand);
4180 reload_inc[reloadnum]
4181 = find_inc_amount (PATTERN (this_insn), XEXP (x, 0));
4182
4183 link = FIND_REG_INC_NOTE (this_insn, tem);
4184 if (link != 0)
4185 push_replacement (&XEXP (link, 0), reloadnum, VOIDmode);
4186
4187 return 1;
4188 }
4189 }
4190 else if (code == MEM)
4191 {
4192 /* This is probably the result of a substitution, by eliminate_regs,
4193 of an equivalent address for a pseudo that was not allocated to a
4194 hard register. Verify that the specified address is valid and reload
4195 it into a register.
4196
4197 Since we know we are going to reload this item, don't decrement
4198 for the indirection level.
4199
4200 Note that this is actually conservative: it would be slightly more
4201 efficient to use the value of SPILL_INDIRECT_LEVELS from
4202 reload1.c here. */
4203
4204 find_reloads_address (GET_MODE (x), loc, XEXP (x, 0), &XEXP (x, 0),
4205 operand, ind_levels);
4206
4207 push_reload (*loc, NULL_RTX, loc, NULL_PTR,
4208 context ? INDEX_REG_CLASS : BASE_REG_CLASS,
4209 GET_MODE (x), VOIDmode, 0, 0, operand);
4210 return 1;
4211 }
4212 else if (code == REG)
4213 {
4214 register int regno = REGNO (x);
4215
4216 if (reg_equiv_constant[regno] != 0)
4217 {
4218 find_reloads_address_part (reg_equiv_constant[regno], loc,
4219 (context ? INDEX_REG_CLASS
4220 : BASE_REG_CLASS),
4221 GET_MODE (x), operand, ind_levels);
4222 return 1;
4223 }
4224
4225 #if 0 /* This might screw code in reload1.c to delete prior output-reload
4226 that feeds this insn. */
4227 if (reg_equiv_mem[regno] != 0)
4228 {
4229 push_reload (reg_equiv_mem[regno], NULL_RTX, loc, NULL_PTR,
4230 context ? INDEX_REG_CLASS : BASE_REG_CLASS,
4231 GET_MODE (x), VOIDmode, 0, 0, operand);
4232 return 1;
4233 }
4234 #endif
4235 if (reg_equiv_address[regno] != 0)
4236 {
4237 x = make_memloc (x, regno);
4238 find_reloads_address (GET_MODE (x), 0, XEXP (x, 0), &XEXP (x, 0),
4239 operand, ind_levels);
4240 }
4241
4242 if (reg_renumber[regno] >= 0)
4243 regno = reg_renumber[regno];
4244 if ((regno >= FIRST_PSEUDO_REGISTER
4245 || !(context ? REGNO_OK_FOR_INDEX_P (regno)
4246 : REGNO_OK_FOR_BASE_P (regno))))
4247 {
4248 push_reload (x, NULL_RTX, loc, NULL_PTR,
4249 context ? INDEX_REG_CLASS : BASE_REG_CLASS,
4250 GET_MODE (x), VOIDmode, 0, 0, operand);
4251 return 1;
4252 }
4253
4254 /* If a register appearing in an address is the subject of a CLOBBER
4255 in this insn, reload it into some other register to be safe.
4256 The CLOBBER is supposed to make the register unavailable
4257 from before this insn to after it. */
4258 if (regno_clobbered_p (regno, this_insn))
4259 {
4260 push_reload (x, NULL_RTX, loc, NULL_PTR,
4261 context ? INDEX_REG_CLASS : BASE_REG_CLASS,
4262 GET_MODE (x), VOIDmode, 0, 0, operand);
4263 return 1;
4264 }
4265 }
4266 else
4267 {
4268 register char *fmt = GET_RTX_FORMAT (code);
4269 register int i;
4270 for (i = GET_RTX_LENGTH (code) - 1; i >= 0; i--)
4271 {
4272 if (fmt[i] == 'e')
4273 find_reloads_address_1 (XEXP (x, i), context, &XEXP (x, i),
4274 operand, ind_levels);
4275 }
4276 }
4277
4278 return 0;
4279 }
4280 \f
4281 /* X, which is found at *LOC, is a part of an address that needs to be
4282 reloaded into a register of class CLASS. If X is a constant, or if
4283 X is a PLUS that contains a constant, check that the constant is a
4284 legitimate operand and that we are supposed to be able to load
4285 it into the register.
4286
4287 If not, force the constant into memory and reload the MEM instead.
4288
4289 MODE is the mode to use, in case X is an integer constant.
4290
4291 NEEDED_FOR says which operand this reload is needed for.
4292
4293 IND_LEVELS says how many levels of indirect addressing this machine
4294 supports. */
4295
4296 static void
4297 find_reloads_address_part (x, loc, class, mode, needed_for, ind_levels)
4298 rtx x;
4299 rtx *loc;
4300 enum reg_class class;
4301 enum machine_mode mode;
4302 rtx needed_for;
4303 int ind_levels;
4304 {
4305 if (CONSTANT_P (x)
4306 && (! LEGITIMATE_CONSTANT_P (x)
4307 || PREFERRED_RELOAD_CLASS (x, class) == NO_REGS))
4308 {
4309 rtx tem = x = force_const_mem (mode, x);
4310 find_reloads_address (mode, &tem, XEXP (tem, 0), &XEXP (tem, 0),
4311 needed_for, ind_levels);
4312 }
4313
4314 else if (GET_CODE (x) == PLUS
4315 && CONSTANT_P (XEXP (x, 1))
4316 && (! LEGITIMATE_CONSTANT_P (XEXP (x, 1))
4317 || PREFERRED_RELOAD_CLASS (XEXP (x, 1), class) == NO_REGS))
4318 {
4319 rtx tem = force_const_mem (GET_MODE (x), XEXP (x, 1));
4320
4321 x = gen_rtx (PLUS, GET_MODE (x), XEXP (x, 0), tem);
4322 find_reloads_address (mode, &tem, XEXP (tem, 0), &XEXP (tem, 0),
4323 needed_for, ind_levels);
4324 }
4325
4326 push_reload (x, NULL_RTX, loc, NULL_PTR, class,
4327 mode, VOIDmode, 0, 0, needed_for);
4328 }
4329 \f
4330 /* Substitute into X the registers into which we have reloaded
4331 the things that need reloading. The array `replacements'
4332 says contains the locations of all pointers that must be changed
4333 and says what to replace them with.
4334
4335 Return the rtx that X translates into; usually X, but modified. */
4336
4337 void
4338 subst_reloads ()
4339 {
4340 register int i;
4341
4342 for (i = 0; i < n_replacements; i++)
4343 {
4344 register struct replacement *r = &replacements[i];
4345 register rtx reloadreg = reload_reg_rtx[r->what];
4346 if (reloadreg)
4347 {
4348 /* Encapsulate RELOADREG so its machine mode matches what
4349 used to be there. */
4350 if (GET_MODE (reloadreg) != r->mode && r->mode != VOIDmode)
4351 reloadreg = gen_rtx (REG, r->mode, REGNO (reloadreg));
4352
4353 /* If we are putting this into a SUBREG and RELOADREG is a
4354 SUBREG, we would be making nested SUBREGs, so we have to fix
4355 this up. Note that r->where == &SUBREG_REG (*r->subreg_loc). */
4356
4357 if (r->subreg_loc != 0 && GET_CODE (reloadreg) == SUBREG)
4358 {
4359 if (GET_MODE (*r->subreg_loc)
4360 == GET_MODE (SUBREG_REG (reloadreg)))
4361 *r->subreg_loc = SUBREG_REG (reloadreg);
4362 else
4363 {
4364 *r->where = SUBREG_REG (reloadreg);
4365 SUBREG_WORD (*r->subreg_loc) += SUBREG_WORD (reloadreg);
4366 }
4367 }
4368 else
4369 *r->where = reloadreg;
4370 }
4371 /* If reload got no reg and isn't optional, something's wrong. */
4372 else if (! reload_optional[r->what])
4373 abort ();
4374 }
4375 }
4376 \f
4377 /* Make a copy of any replacements being done into X and move those copies
4378 to locations in Y, a copy of X. We only look at the highest level of
4379 the RTL. */
4380
4381 void
4382 copy_replacements (x, y)
4383 rtx x;
4384 rtx y;
4385 {
4386 int i, j;
4387 enum rtx_code code = GET_CODE (x);
4388 char *fmt = GET_RTX_FORMAT (code);
4389 struct replacement *r;
4390
4391 /* We can't support X being a SUBREG because we might then need to know its
4392 location if something inside it was replaced. */
4393 if (code == SUBREG)
4394 abort ();
4395
4396 for (i = GET_RTX_LENGTH (code) - 1; i >= 0; i--)
4397 if (fmt[i] == 'e')
4398 for (j = 0; j < n_replacements; j++)
4399 {
4400 if (replacements[j].subreg_loc == &XEXP (x, i))
4401 {
4402 r = &replacements[n_replacements++];
4403 r->where = replacements[j].where;
4404 r->subreg_loc = &XEXP (y, i);
4405 r->what = replacements[j].what;
4406 r->mode = replacements[j].mode;
4407 }
4408 else if (replacements[j].where == &XEXP (x, i))
4409 {
4410 r = &replacements[n_replacements++];
4411 r->where = &XEXP (y, i);
4412 r->subreg_loc = 0;
4413 r->what = replacements[j].what;
4414 r->mode = replacements[j].mode;
4415 }
4416 }
4417 }
4418 \f
4419 /* If LOC was scheduled to be replaced by something, return the replacement.
4420 Otherwise, return *LOC. */
4421
4422 rtx
4423 find_replacement (loc)
4424 rtx *loc;
4425 {
4426 struct replacement *r;
4427
4428 for (r = &replacements[0]; r < &replacements[n_replacements]; r++)
4429 {
4430 rtx reloadreg = reload_reg_rtx[r->what];
4431
4432 if (reloadreg && r->where == loc)
4433 {
4434 if (r->mode != VOIDmode && GET_MODE (reloadreg) != r->mode)
4435 reloadreg = gen_rtx (REG, r->mode, REGNO (reloadreg));
4436
4437 return reloadreg;
4438 }
4439 else if (reloadreg && r->subreg_loc == loc)
4440 {
4441 /* RELOADREG must be either a REG or a SUBREG.
4442
4443 ??? Is it actually still ever a SUBREG? If so, why? */
4444
4445 if (GET_CODE (reloadreg) == REG)
4446 return gen_rtx (REG, GET_MODE (*loc),
4447 REGNO (reloadreg) + SUBREG_WORD (*loc));
4448 else if (GET_MODE (reloadreg) == GET_MODE (*loc))
4449 return reloadreg;
4450 else
4451 return gen_rtx (SUBREG, GET_MODE (*loc), SUBREG_REG (reloadreg),
4452 SUBREG_WORD (reloadreg) + SUBREG_WORD (*loc));
4453 }
4454 }
4455
4456 return *loc;
4457 }
4458 \f
4459 /* Return nonzero if register in range [REGNO, ENDREGNO)
4460 appears either explicitly or implicitly in X
4461 other than being stored into.
4462
4463 References contained within the substructure at LOC do not count.
4464 LOC may be zero, meaning don't ignore anything.
4465
4466 This is similar to refers_to_regno_p in rtlanal.c except that we
4467 look at equivalences for pseudos that didn't get hard registers. */
4468
4469 int
4470 refers_to_regno_for_reload_p (regno, endregno, x, loc)
4471 int regno, endregno;
4472 rtx x;
4473 rtx *loc;
4474 {
4475 register int i;
4476 register RTX_CODE code;
4477 register char *fmt;
4478
4479 if (x == 0)
4480 return 0;
4481
4482 repeat:
4483 code = GET_CODE (x);
4484
4485 switch (code)
4486 {
4487 case REG:
4488 i = REGNO (x);
4489
4490 /* If this is a pseudo, a hard register must not have been allocated.
4491 X must therefore either be a constant or be in memory. */
4492 if (i >= FIRST_PSEUDO_REGISTER)
4493 {
4494 if (reg_equiv_memory_loc[i])
4495 return refers_to_regno_for_reload_p (regno, endregno,
4496 reg_equiv_memory_loc[i],
4497 NULL_PTR);
4498
4499 if (reg_equiv_constant[i])
4500 return 0;
4501
4502 abort ();
4503 }
4504
4505 return (endregno > i
4506 && regno < i + (i < FIRST_PSEUDO_REGISTER
4507 ? HARD_REGNO_NREGS (i, GET_MODE (x))
4508 : 1));
4509
4510 case SUBREG:
4511 /* If this is a SUBREG of a hard reg, we can see exactly which
4512 registers are being modified. Otherwise, handle normally. */
4513 if (GET_CODE (SUBREG_REG (x)) == REG
4514 && REGNO (SUBREG_REG (x)) < FIRST_PSEUDO_REGISTER)
4515 {
4516 int inner_regno = REGNO (SUBREG_REG (x)) + SUBREG_WORD (x);
4517 int inner_endregno
4518 = inner_regno + (inner_regno < FIRST_PSEUDO_REGISTER
4519 ? HARD_REGNO_NREGS (regno, GET_MODE (x)) : 1);
4520
4521 return endregno > inner_regno && regno < inner_endregno;
4522 }
4523 break;
4524
4525 case CLOBBER:
4526 case SET:
4527 if (&SET_DEST (x) != loc
4528 /* Note setting a SUBREG counts as referring to the REG it is in for
4529 a pseudo but not for hard registers since we can
4530 treat each word individually. */
4531 && ((GET_CODE (SET_DEST (x)) == SUBREG
4532 && loc != &SUBREG_REG (SET_DEST (x))
4533 && GET_CODE (SUBREG_REG (SET_DEST (x))) == REG
4534 && REGNO (SUBREG_REG (SET_DEST (x))) >= FIRST_PSEUDO_REGISTER
4535 && refers_to_regno_for_reload_p (regno, endregno,
4536 SUBREG_REG (SET_DEST (x)),
4537 loc))
4538 || (GET_CODE (SET_DEST (x)) != REG
4539 && refers_to_regno_for_reload_p (regno, endregno,
4540 SET_DEST (x), loc))))
4541 return 1;
4542
4543 if (code == CLOBBER || loc == &SET_SRC (x))
4544 return 0;
4545 x = SET_SRC (x);
4546 goto repeat;
4547 }
4548
4549 /* X does not match, so try its subexpressions. */
4550
4551 fmt = GET_RTX_FORMAT (code);
4552 for (i = GET_RTX_LENGTH (code) - 1; i >= 0; i--)
4553 {
4554 if (fmt[i] == 'e' && loc != &XEXP (x, i))
4555 {
4556 if (i == 0)
4557 {
4558 x = XEXP (x, 0);
4559 goto repeat;
4560 }
4561 else
4562 if (refers_to_regno_for_reload_p (regno, endregno,
4563 XEXP (x, i), loc))
4564 return 1;
4565 }
4566 else if (fmt[i] == 'E')
4567 {
4568 register int j;
4569 for (j = XVECLEN (x, i) - 1; j >=0; j--)
4570 if (loc != &XVECEXP (x, i, j)
4571 && refers_to_regno_for_reload_p (regno, endregno,
4572 XVECEXP (x, i, j), loc))
4573 return 1;
4574 }
4575 }
4576 return 0;
4577 }
4578
4579 /* Nonzero if modifying X will affect IN. If X is a register or a SUBREG,
4580 we check if any register number in X conflicts with the relevant register
4581 numbers. If X is a constant, return 0. If X is a MEM, return 1 iff IN
4582 contains a MEM (we don't bother checking for memory addresses that can't
4583 conflict because we expect this to be a rare case.
4584
4585 This function is similar to reg_overlap_mention_p in rtlanal.c except
4586 that we look at equivalences for pseudos that didn't get hard registers. */
4587
4588 int
4589 reg_overlap_mentioned_for_reload_p (x, in)
4590 rtx x, in;
4591 {
4592 int regno, endregno;
4593
4594 if (GET_CODE (x) == SUBREG)
4595 {
4596 regno = REGNO (SUBREG_REG (x));
4597 if (regno < FIRST_PSEUDO_REGISTER)
4598 regno += SUBREG_WORD (x);
4599 }
4600 else if (GET_CODE (x) == REG)
4601 {
4602 regno = REGNO (x);
4603
4604 /* If this is a pseudo, it must not have been assigned a hard register.
4605 Therefore, it must either be in memory or be a constant. */
4606
4607 if (regno >= FIRST_PSEUDO_REGISTER)
4608 {
4609 if (reg_equiv_memory_loc[regno])
4610 return refers_to_mem_for_reload_p (in);
4611 else if (reg_equiv_constant[regno])
4612 return 0;
4613 abort ();
4614 }
4615 }
4616 else if (CONSTANT_P (x))
4617 return 0;
4618 else if (GET_CODE (x) == MEM)
4619 return refers_to_mem_for_reload_p (in);
4620 else if (GET_CODE (x) == SCRATCH || GET_CODE (x) == PC
4621 || GET_CODE (x) == CC0)
4622 return reg_mentioned_p (x, in);
4623 else
4624 abort ();
4625
4626 endregno = regno + (regno < FIRST_PSEUDO_REGISTER
4627 ? HARD_REGNO_NREGS (regno, GET_MODE (x)) : 1);
4628
4629 return refers_to_regno_for_reload_p (regno, endregno, in, NULL_PTR);
4630 }
4631
4632 /* Return nonzero if anything in X contains a MEM. Look also for pseudo
4633 registers. */
4634
4635 int
4636 refers_to_mem_for_reload_p (x)
4637 rtx x;
4638 {
4639 char *fmt;
4640 int i;
4641
4642 if (GET_CODE (x) == MEM)
4643 return 1;
4644
4645 if (GET_CODE (x) == REG)
4646 return (REGNO (x) >= FIRST_PSEUDO_REGISTER
4647 && reg_equiv_memory_loc[REGNO (x)]);
4648
4649 fmt = GET_RTX_FORMAT (GET_CODE (x));
4650 for (i = GET_RTX_LENGTH (GET_CODE (x)) - 1; i >= 0; i--)
4651 if (fmt[i] == 'e'
4652 && (GET_CODE (XEXP (x, i)) == MEM
4653 || refers_to_mem_for_reload_p (XEXP (x, i))))
4654 return 1;
4655
4656 return 0;
4657 }
4658 \f
4659 #if 0
4660
4661 /* [[This function is currently obsolete, now that volatility
4662 is represented by a special bit `volatil' so VOLATILE is never used;
4663 and UNCHANGING has never been brought into use.]]
4664
4665 Alter X by eliminating all VOLATILE and UNCHANGING expressions.
4666 Each of them is replaced by its operand.
4667 Thus, (PLUS (VOLATILE (MEM (REG 5))) (CONST_INT 4))
4668 becomes (PLUS (MEM (REG 5)) (CONST_INT 4)).
4669
4670 If X is itself a VOLATILE expression,
4671 we return the expression that should replace it
4672 but we do not modify X. */
4673
4674 static rtx
4675 forget_volatility (x)
4676 register rtx x;
4677 {
4678 enum rtx_code code = GET_CODE (x);
4679 register char *fmt;
4680 register int i;
4681 register rtx value = 0;
4682
4683 switch (code)
4684 {
4685 case LABEL_REF:
4686 case SYMBOL_REF:
4687 case CONST_INT:
4688 case CONST_DOUBLE:
4689 case CONST:
4690 case REG:
4691 case CC0:
4692 case PC:
4693 return x;
4694
4695 case VOLATILE:
4696 case UNCHANGING:
4697 return XEXP (x, 0);
4698 }
4699
4700 fmt = GET_RTX_FORMAT (code);
4701 for (i = GET_RTX_LENGTH (code) - 1; i >= 0; i--)
4702 {
4703 if (fmt[i] == 'e')
4704 XEXP (x, i) = forget_volatility (XEXP (x, i));
4705 if (fmt[i] == 'E')
4706 {
4707 register int j;
4708 for (j = XVECLEN (x, i) - 1; j >= 0; j--)
4709 XVECEXP (x, i, j) = forget_volatility (XVECEXP (x, i, j));
4710 }
4711 }
4712
4713 return x;
4714 }
4715
4716 #endif
4717 \f
4718 /* Check the insns before INSN to see if there is a suitable register
4719 containing the same value as GOAL.
4720 If OTHER is -1, look for a register in class CLASS.
4721 Otherwise, just see if register number OTHER shares GOAL's value.
4722
4723 Return an rtx for the register found, or zero if none is found.
4724
4725 If RELOAD_REG_P is (short *)1,
4726 we reject any hard reg that appears in reload_reg_rtx
4727 because such a hard reg is also needed coming into this insn.
4728
4729 If RELOAD_REG_P is any other nonzero value,
4730 it is a vector indexed by hard reg number
4731 and we reject any hard reg whose element in the vector is nonnegative
4732 as well as any that appears in reload_reg_rtx.
4733
4734 If GOAL is zero, then GOALREG is a register number; we look
4735 for an equivalent for that register.
4736
4737 MODE is the machine mode of the value we want an equivalence for.
4738 If GOAL is nonzero and not VOIDmode, then it must have mode MODE.
4739
4740 This function is used by jump.c as well as in the reload pass.
4741
4742 If GOAL is the sum of the stack pointer and a constant, we treat it
4743 as if it were a constant except that sp is required to be unchanging. */
4744
4745 rtx
4746 find_equiv_reg (goal, insn, class, other, reload_reg_p, goalreg, mode)
4747 register rtx goal;
4748 rtx insn;
4749 enum reg_class class;
4750 register int other;
4751 short *reload_reg_p;
4752 int goalreg;
4753 enum machine_mode mode;
4754 {
4755 register rtx p = insn;
4756 rtx valtry, value, where;
4757 register rtx pat;
4758 register int regno = -1;
4759 int valueno;
4760 int goal_mem = 0;
4761 int goal_const = 0;
4762 int goal_mem_addr_varies = 0;
4763 int need_stable_sp = 0;
4764 int nregs;
4765 int valuenregs;
4766
4767 if (goal == 0)
4768 regno = goalreg;
4769 else if (GET_CODE (goal) == REG)
4770 regno = REGNO (goal);
4771 else if (GET_CODE (goal) == MEM)
4772 {
4773 enum rtx_code code = GET_CODE (XEXP (goal, 0));
4774 if (MEM_VOLATILE_P (goal))
4775 return 0;
4776 if (flag_float_store && GET_MODE_CLASS (GET_MODE (goal)) == MODE_FLOAT)
4777 return 0;
4778 /* An address with side effects must be reexecuted. */
4779 switch (code)
4780 {
4781 case POST_INC:
4782 case PRE_INC:
4783 case POST_DEC:
4784 case PRE_DEC:
4785 return 0;
4786 }
4787 goal_mem = 1;
4788 }
4789 else if (CONSTANT_P (goal))
4790 goal_const = 1;
4791 else if (GET_CODE (goal) == PLUS
4792 && XEXP (goal, 0) == stack_pointer_rtx
4793 && CONSTANT_P (XEXP (goal, 1)))
4794 goal_const = need_stable_sp = 1;
4795 else
4796 return 0;
4797
4798 /* On some machines, certain regs must always be rejected
4799 because they don't behave the way ordinary registers do. */
4800
4801 #ifdef OVERLAPPING_REGNO_P
4802 if (regno >= 0 && regno < FIRST_PSEUDO_REGISTER
4803 && OVERLAPPING_REGNO_P (regno))
4804 return 0;
4805 #endif
4806
4807 /* Scan insns back from INSN, looking for one that copies
4808 a value into or out of GOAL.
4809 Stop and give up if we reach a label. */
4810
4811 while (1)
4812 {
4813 p = PREV_INSN (p);
4814 if (p == 0 || GET_CODE (p) == CODE_LABEL)
4815 return 0;
4816 if (GET_CODE (p) == INSN
4817 /* If we don't want spill regs ... */
4818 && (! (reload_reg_p != 0 && reload_reg_p != (short *)1)
4819 /* ... then ignore insns introduced by reload; they aren't useful
4820 and can cause results in reload_as_needed to be different
4821 from what they were when calculating the need for spills.
4822 If we notice an input-reload insn here, we will reject it below,
4823 but it might hide a usable equivalent. That makes bad code.
4824 It may even abort: perhaps no reg was spilled for this insn
4825 because it was assumed we would find that equivalent. */
4826 || INSN_UID (p) < reload_first_uid))
4827 {
4828 rtx tem;
4829 pat = single_set (p);
4830 /* First check for something that sets some reg equal to GOAL. */
4831 if (pat != 0
4832 && ((regno >= 0
4833 && true_regnum (SET_SRC (pat)) == regno
4834 && (valueno = true_regnum (valtry = SET_DEST (pat))) >= 0)
4835 ||
4836 (regno >= 0
4837 && true_regnum (SET_DEST (pat)) == regno
4838 && (valueno = true_regnum (valtry = SET_SRC (pat))) >= 0)
4839 ||
4840 (goal_const && rtx_equal_p (SET_SRC (pat), goal)
4841 && (valueno = true_regnum (valtry = SET_DEST (pat))) >= 0)
4842 || (goal_mem
4843 && (valueno = true_regnum (valtry = SET_DEST (pat))) >= 0
4844 && rtx_renumbered_equal_p (goal, SET_SRC (pat)))
4845 || (goal_mem
4846 && (valueno = true_regnum (valtry = SET_SRC (pat))) >= 0
4847 && rtx_renumbered_equal_p (goal, SET_DEST (pat)))
4848 /* If we are looking for a constant,
4849 and something equivalent to that constant was copied
4850 into a reg, we can use that reg. */
4851 || (goal_const && (tem = find_reg_note (p, REG_EQUIV,
4852 NULL_RTX))
4853 && rtx_equal_p (XEXP (tem, 0), goal)
4854 && (valueno = true_regnum (valtry = SET_DEST (pat))) >= 0)
4855 || (goal_const && (tem = find_reg_note (p, REG_EQUIV,
4856 NULL_RTX))
4857 && GET_CODE (SET_DEST (pat)) == REG
4858 && GET_CODE (XEXP (tem, 0)) == CONST_DOUBLE
4859 && GET_MODE_CLASS (GET_MODE (XEXP (tem, 0))) == MODE_FLOAT
4860 && GET_CODE (goal) == CONST_INT
4861 && INTVAL (goal) == CONST_DOUBLE_LOW (XEXP (tem, 0))
4862 && (valtry = operand_subword (SET_DEST (pat), 0, 0,
4863 VOIDmode))
4864 && (valueno = true_regnum (valtry)) >= 0)
4865 || (goal_const && (tem = find_reg_note (p, REG_EQUIV,
4866 NULL_RTX))
4867 && GET_CODE (SET_DEST (pat)) == REG
4868 && GET_CODE (XEXP (tem, 0)) == CONST_DOUBLE
4869 && GET_MODE_CLASS (GET_MODE (XEXP (tem, 0))) == MODE_FLOAT
4870 && GET_CODE (goal) == CONST_INT
4871 && INTVAL (goal) == CONST_DOUBLE_HIGH (XEXP (tem, 0))
4872 && (valtry
4873 = operand_subword (SET_DEST (pat), 1, 0, VOIDmode))
4874 && (valueno = true_regnum (valtry)) >= 0)))
4875 if (other >= 0
4876 ? valueno == other
4877 : ((unsigned) valueno < FIRST_PSEUDO_REGISTER
4878 && TEST_HARD_REG_BIT (reg_class_contents[(int) class],
4879 valueno)))
4880 {
4881 value = valtry;
4882 where = p;
4883 break;
4884 }
4885 }
4886 }
4887
4888 /* We found a previous insn copying GOAL into a suitable other reg VALUE
4889 (or copying VALUE into GOAL, if GOAL is also a register).
4890 Now verify that VALUE is really valid. */
4891
4892 /* VALUENO is the register number of VALUE; a hard register. */
4893
4894 /* Don't try to re-use something that is killed in this insn. We want
4895 to be able to trust REG_UNUSED notes. */
4896 if (find_reg_note (where, REG_UNUSED, value))
4897 return 0;
4898
4899 /* If we propose to get the value from the stack pointer or if GOAL is
4900 a MEM based on the stack pointer, we need a stable SP. */
4901 if (valueno == STACK_POINTER_REGNUM
4902 || (goal_mem && reg_overlap_mentioned_for_reload_p (stack_pointer_rtx,
4903 goal)))
4904 need_stable_sp = 1;
4905
4906 /* Reject VALUE if the copy-insn moved the wrong sort of datum. */
4907 if (GET_MODE (value) != mode)
4908 return 0;
4909
4910 /* Reject VALUE if it was loaded from GOAL
4911 and is also a register that appears in the address of GOAL. */
4912
4913 if (goal_mem && value == SET_DEST (PATTERN (where))
4914 && refers_to_regno_for_reload_p (valueno,
4915 (valueno
4916 + HARD_REGNO_NREGS (valueno, mode)),
4917 goal, NULL_PTR))
4918 return 0;
4919
4920 /* Reject registers that overlap GOAL. */
4921
4922 if (!goal_mem && !goal_const
4923 && regno + HARD_REGNO_NREGS (regno, mode) > valueno
4924 && regno < valueno + HARD_REGNO_NREGS (valueno, mode))
4925 return 0;
4926
4927 /* Reject VALUE if it is one of the regs reserved for reloads.
4928 Reload1 knows how to reuse them anyway, and it would get
4929 confused if we allocated one without its knowledge.
4930 (Now that insns introduced by reload are ignored above,
4931 this case shouldn't happen, but I'm not positive.) */
4932
4933 if (reload_reg_p != 0 && reload_reg_p != (short *)1
4934 && reload_reg_p[valueno] >= 0)
4935 return 0;
4936
4937 /* On some machines, certain regs must always be rejected
4938 because they don't behave the way ordinary registers do. */
4939
4940 #ifdef OVERLAPPING_REGNO_P
4941 if (OVERLAPPING_REGNO_P (valueno))
4942 return 0;
4943 #endif
4944
4945 nregs = HARD_REGNO_NREGS (regno, mode);
4946 valuenregs = HARD_REGNO_NREGS (valueno, mode);
4947
4948 /* Reject VALUE if it is a register being used for an input reload
4949 even if it is not one of those reserved. */
4950
4951 if (reload_reg_p != 0)
4952 {
4953 int i;
4954 for (i = 0; i < n_reloads; i++)
4955 if (reload_reg_rtx[i] != 0 && reload_in[i])
4956 {
4957 int regno1 = REGNO (reload_reg_rtx[i]);
4958 int nregs1 = HARD_REGNO_NREGS (regno1,
4959 GET_MODE (reload_reg_rtx[i]));
4960 if (regno1 < valueno + valuenregs
4961 && regno1 + nregs1 > valueno)
4962 return 0;
4963 }
4964 }
4965
4966 if (goal_mem)
4967 goal_mem_addr_varies = rtx_addr_varies_p (goal);
4968
4969 /* Now verify that the values of GOAL and VALUE remain unaltered
4970 until INSN is reached. */
4971
4972 p = insn;
4973 while (1)
4974 {
4975 p = PREV_INSN (p);
4976 if (p == where)
4977 return value;
4978
4979 /* Don't trust the conversion past a function call
4980 if either of the two is in a call-clobbered register, or memory. */
4981 if (GET_CODE (p) == CALL_INSN
4982 && ((regno >= 0 && regno < FIRST_PSEUDO_REGISTER
4983 && call_used_regs[regno])
4984 ||
4985 (valueno >= 0 && valueno < FIRST_PSEUDO_REGISTER
4986 && call_used_regs[valueno])
4987 ||
4988 goal_mem
4989 || need_stable_sp))
4990 return 0;
4991
4992 #ifdef INSN_CLOBBERS_REGNO_P
4993 if ((valueno >= 0 && valueno < FIRST_PSEUDO_REGISTER
4994 && INSN_CLOBBERS_REGNO_P (p, valueno))
4995 || (regno >= 0 && regno < FIRST_PSEUDO_REGISTER
4996 && INSN_CLOBBERS_REGNO_P (p, regno)))
4997 return 0;
4998 #endif
4999
5000 if (GET_RTX_CLASS (GET_CODE (p)) == 'i')
5001 {
5002 /* If this insn P stores in either GOAL or VALUE, return 0.
5003 If GOAL is a memory ref and this insn writes memory, return 0.
5004 If GOAL is a memory ref and its address is not constant,
5005 and this insn P changes a register used in GOAL, return 0. */
5006
5007 pat = PATTERN (p);
5008 if (GET_CODE (pat) == SET || GET_CODE (pat) == CLOBBER)
5009 {
5010 register rtx dest = SET_DEST (pat);
5011 while (GET_CODE (dest) == SUBREG
5012 || GET_CODE (dest) == ZERO_EXTRACT
5013 || GET_CODE (dest) == SIGN_EXTRACT
5014 || GET_CODE (dest) == STRICT_LOW_PART)
5015 dest = XEXP (dest, 0);
5016 if (GET_CODE (dest) == REG)
5017 {
5018 register int xregno = REGNO (dest);
5019 int xnregs;
5020 if (REGNO (dest) < FIRST_PSEUDO_REGISTER)
5021 xnregs = HARD_REGNO_NREGS (xregno, GET_MODE (dest));
5022 else
5023 xnregs = 1;
5024 if (xregno < regno + nregs && xregno + xnregs > regno)
5025 return 0;
5026 if (xregno < valueno + valuenregs
5027 && xregno + xnregs > valueno)
5028 return 0;
5029 if (goal_mem_addr_varies
5030 && reg_overlap_mentioned_for_reload_p (dest, goal))
5031 return 0;
5032 }
5033 else if (goal_mem && GET_CODE (dest) == MEM
5034 && ! push_operand (dest, GET_MODE (dest)))
5035 return 0;
5036 else if (need_stable_sp && push_operand (dest, GET_MODE (dest)))
5037 return 0;
5038 }
5039 else if (GET_CODE (pat) == PARALLEL)
5040 {
5041 register int i;
5042 for (i = XVECLEN (pat, 0) - 1; i >= 0; i--)
5043 {
5044 register rtx v1 = XVECEXP (pat, 0, i);
5045 if (GET_CODE (v1) == SET || GET_CODE (v1) == CLOBBER)
5046 {
5047 register rtx dest = SET_DEST (v1);
5048 while (GET_CODE (dest) == SUBREG
5049 || GET_CODE (dest) == ZERO_EXTRACT
5050 || GET_CODE (dest) == SIGN_EXTRACT
5051 || GET_CODE (dest) == STRICT_LOW_PART)
5052 dest = XEXP (dest, 0);
5053 if (GET_CODE (dest) == REG)
5054 {
5055 register int xregno = REGNO (dest);
5056 int xnregs;
5057 if (REGNO (dest) < FIRST_PSEUDO_REGISTER)
5058 xnregs = HARD_REGNO_NREGS (xregno, GET_MODE (dest));
5059 else
5060 xnregs = 1;
5061 if (xregno < regno + nregs
5062 && xregno + xnregs > regno)
5063 return 0;
5064 if (xregno < valueno + valuenregs
5065 && xregno + xnregs > valueno)
5066 return 0;
5067 if (goal_mem_addr_varies
5068 && reg_overlap_mentioned_for_reload_p (dest,
5069 goal))
5070 return 0;
5071 }
5072 else if (goal_mem && GET_CODE (dest) == MEM
5073 && ! push_operand (dest, GET_MODE (dest)))
5074 return 0;
5075 else if (need_stable_sp
5076 && push_operand (dest, GET_MODE (dest)))
5077 return 0;
5078 }
5079 }
5080 }
5081
5082 #ifdef AUTO_INC_DEC
5083 /* If this insn auto-increments or auto-decrements
5084 either regno or valueno, return 0 now.
5085 If GOAL is a memory ref and its address is not constant,
5086 and this insn P increments a register used in GOAL, return 0. */
5087 {
5088 register rtx link;
5089
5090 for (link = REG_NOTES (p); link; link = XEXP (link, 1))
5091 if (REG_NOTE_KIND (link) == REG_INC
5092 && GET_CODE (XEXP (link, 0)) == REG)
5093 {
5094 register int incno = REGNO (XEXP (link, 0));
5095 if (incno < regno + nregs && incno >= regno)
5096 return 0;
5097 if (incno < valueno + valuenregs && incno >= valueno)
5098 return 0;
5099 if (goal_mem_addr_varies
5100 && reg_overlap_mentioned_for_reload_p (XEXP (link, 0),
5101 goal))
5102 return 0;
5103 }
5104 }
5105 #endif
5106 }
5107 }
5108 }
5109 \f
5110 /* Find a place where INCED appears in an increment or decrement operator
5111 within X, and return the amount INCED is incremented or decremented by.
5112 The value is always positive. */
5113
5114 static int
5115 find_inc_amount (x, inced)
5116 rtx x, inced;
5117 {
5118 register enum rtx_code code = GET_CODE (x);
5119 register char *fmt;
5120 register int i;
5121
5122 if (code == MEM)
5123 {
5124 register rtx addr = XEXP (x, 0);
5125 if ((GET_CODE (addr) == PRE_DEC
5126 || GET_CODE (addr) == POST_DEC
5127 || GET_CODE (addr) == PRE_INC
5128 || GET_CODE (addr) == POST_INC)
5129 && XEXP (addr, 0) == inced)
5130 return GET_MODE_SIZE (GET_MODE (x));
5131 }
5132
5133 fmt = GET_RTX_FORMAT (code);
5134 for (i = GET_RTX_LENGTH (code) - 1; i >= 0; i--)
5135 {
5136 if (fmt[i] == 'e')
5137 {
5138 register int tem = find_inc_amount (XEXP (x, i), inced);
5139 if (tem != 0)
5140 return tem;
5141 }
5142 if (fmt[i] == 'E')
5143 {
5144 register int j;
5145 for (j = XVECLEN (x, i) - 1; j >= 0; j--)
5146 {
5147 register int tem = find_inc_amount (XVECEXP (x, i, j), inced);
5148 if (tem != 0)
5149 return tem;
5150 }
5151 }
5152 }
5153
5154 return 0;
5155 }
5156 \f
5157 /* Return 1 if register REGNO is the subject of a clobber in insn INSN. */
5158
5159 int
5160 regno_clobbered_p (regno, insn)
5161 int regno;
5162 rtx insn;
5163 {
5164 if (GET_CODE (PATTERN (insn)) == CLOBBER
5165 && GET_CODE (XEXP (PATTERN (insn), 0)) == REG)
5166 return REGNO (XEXP (PATTERN (insn), 0)) == regno;
5167
5168 if (GET_CODE (PATTERN (insn)) == PARALLEL)
5169 {
5170 int i = XVECLEN (PATTERN (insn), 0) - 1;
5171
5172 for (; i >= 0; i--)
5173 {
5174 rtx elt = XVECEXP (PATTERN (insn), 0, i);
5175 if (GET_CODE (elt) == CLOBBER && GET_CODE (XEXP (elt, 0)) == REG
5176 && REGNO (XEXP (elt, 0)) == regno)
5177 return 1;
5178 }
5179 }
5180
5181 return 0;
5182 }
This page took 0.29011 seconds and 4 git commands to generate.