oops - omitted in previous delta
[official-gcc.git] / gcc / reload.c
blob99e4c6ec0273a2e8d2bf2741c7d959bb3746494b
1 /* Search an insn for pseudo regs that must be in hard regs and are not.
2 Copyright (C) 1987, 1988, 1989, 1992, 1993, 1994, 1995, 1996, 1997, 1998,
3 1999, 2000, 2001 Free Software Foundation, Inc.
5 This file is part of GCC.
7 GCC is free software; you can redistribute it and/or modify it under
8 the terms of the GNU General Public License as published by the Free
9 Software Foundation; either version 2, or (at your option) any later
10 version.
12 GCC is distributed in the hope that it will be useful, but WITHOUT ANY
13 WARRANTY; without even the implied warranty of MERCHANTABILITY or
14 FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
15 for more details.
17 You should have received a copy of the GNU General Public License
18 along with GCC; see the file COPYING. If not, write to the Free
19 Software Foundation, 59 Temple Place - Suite 330, Boston, MA
20 02111-1307, USA. */
22 /* This file contains subroutines used only from the file reload1.c.
23 It knows how to scan one insn for operands and values
24 that need to be copied into registers to make valid code.
25 It also finds other operands and values which are valid
26 but for which equivalent values in registers exist and
27 ought to be used instead.
29 Before processing the first insn of the function, call `init_reload'.
31 To scan an insn, call `find_reloads'. This does two things:
32 1. sets up tables describing which values must be reloaded
33 for this insn, and what kind of hard regs they must be reloaded into;
34 2. optionally record the locations where those values appear in
35 the data, so they can be replaced properly later.
36 This is done only if the second arg to `find_reloads' is nonzero.
38 The third arg to `find_reloads' specifies the number of levels
39 of indirect addressing supported by the machine. If it is zero,
40 indirect addressing is not valid. If it is one, (MEM (REG n))
41 is valid even if (REG n) did not get a hard register; if it is two,
42 (MEM (MEM (REG n))) is also valid even if (REG n) did not get a
43 hard register, and similarly for higher values.
45 Then you must choose the hard regs to reload those pseudo regs into,
46 and generate appropriate load insns before this insn and perhaps
47 also store insns after this insn. Set up the array `reload_reg_rtx'
48 to contain the REG rtx's for the registers you used. In some
49 cases `find_reloads' will return a nonzero value in `reload_reg_rtx'
50 for certain reloads. Then that tells you which register to use,
51 so you do not need to allocate one. But you still do need to add extra
52 instructions to copy the value into and out of that register.
54 Finally you must call `subst_reloads' to substitute the reload reg rtx's
55 into the locations already recorded.
57 NOTE SIDE EFFECTS:
59 find_reloads can alter the operands of the instruction it is called on.
61 1. Two operands of any sort may be interchanged, if they are in a
62 commutative instruction.
63 This happens only if find_reloads thinks the instruction will compile
64 better that way.
66 2. Pseudo-registers that are equivalent to constants are replaced
67 with those constants if they are not in hard registers.
69 1 happens every time find_reloads is called.
70 2 happens only when REPLACE is 1, which is only when
71 actually doing the reloads, not when just counting them.
73 Using a reload register for several reloads in one insn:
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.
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.
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. */
87 #define REG_OK_STRICT
89 #include "config.h"
90 #include "system.h"
91 #include "rtl.h"
92 #include "tm_p.h"
93 #include "insn-config.h"
94 #include "expr.h"
95 #include "optabs.h"
96 #include "recog.h"
97 #include "reload.h"
98 #include "regs.h"
99 #include "hard-reg-set.h"
100 #include "flags.h"
101 #include "real.h"
102 #include "output.h"
103 #include "function.h"
104 #include "toplev.h"
106 #ifndef REGISTER_MOVE_COST
107 #define REGISTER_MOVE_COST(m, x, y) 2
108 #endif
110 #ifndef REGNO_MODE_OK_FOR_BASE_P
111 #define REGNO_MODE_OK_FOR_BASE_P(REGNO, MODE) REGNO_OK_FOR_BASE_P (REGNO)
112 #endif
114 #ifndef REG_MODE_OK_FOR_BASE_P
115 #define REG_MODE_OK_FOR_BASE_P(REGNO, MODE) REG_OK_FOR_BASE_P (REGNO)
116 #endif
118 /* All reloads of the current insn are recorded here. See reload.h for
119 comments. */
120 int n_reloads;
121 struct reload rld[MAX_RELOADS];
123 /* All the "earlyclobber" operands of the current insn
124 are recorded here. */
125 int n_earlyclobbers;
126 rtx reload_earlyclobbers[MAX_RECOG_OPERANDS];
128 int reload_n_operands;
130 /* Replacing reloads.
132 If `replace_reloads' is nonzero, then as each reload is recorded
133 an entry is made for it in the table `replacements'.
134 Then later `subst_reloads' can look through that table and
135 perform all the replacements needed. */
137 /* Nonzero means record the places to replace. */
138 static int replace_reloads;
140 /* Each replacement is recorded with a structure like this. */
141 struct replacement
143 rtx *where; /* Location to store in */
144 rtx *subreg_loc; /* Location of SUBREG if WHERE is inside
145 a SUBREG; 0 otherwise. */
146 int what; /* which reload this is for */
147 enum machine_mode mode; /* mode it must have */
150 static struct replacement replacements[MAX_RECOG_OPERANDS * ((MAX_REGS_PER_ADDRESS * 2) + 1)];
152 /* Number of replacements currently recorded. */
153 static int n_replacements;
155 /* Used to track what is modified by an operand. */
156 struct decomposition
158 int reg_flag; /* Nonzero if referencing a register. */
159 int safe; /* Nonzero if this can't conflict with anything. */
160 rtx base; /* Base address for MEM. */
161 HOST_WIDE_INT start; /* Starting offset or register number. */
162 HOST_WIDE_INT end; /* Ending offset or register number. */
165 #ifdef SECONDARY_MEMORY_NEEDED
167 /* Save MEMs needed to copy from one class of registers to another. One MEM
168 is used per mode, but normally only one or two modes are ever used.
170 We keep two versions, before and after register elimination. The one
171 after register elimination is record separately for each operand. This
172 is done in case the address is not valid to be sure that we separately
173 reload each. */
175 static rtx secondary_memlocs[NUM_MACHINE_MODES];
176 static rtx secondary_memlocs_elim[NUM_MACHINE_MODES][MAX_RECOG_OPERANDS];
177 #endif
179 /* The instruction we are doing reloads for;
180 so we can test whether a register dies in it. */
181 static rtx this_insn;
183 /* Nonzero if this instruction is a user-specified asm with operands. */
184 static int this_insn_is_asm;
186 /* If hard_regs_live_known is nonzero,
187 we can tell which hard regs are currently live,
188 at least enough to succeed in choosing dummy reloads. */
189 static int hard_regs_live_known;
191 /* Indexed by hard reg number,
192 element is nonnegative if hard reg has been spilled.
193 This vector is passed to `find_reloads' as an argument
194 and is not changed here. */
195 static short *static_reload_reg_p;
197 /* Set to 1 in subst_reg_equivs if it changes anything. */
198 static int subst_reg_equivs_changed;
200 /* On return from push_reload, holds the reload-number for the OUT
201 operand, which can be different for that from the input operand. */
202 static int output_reloadnum;
204 /* Compare two RTX's. */
205 #define MATCHES(x, y) \
206 (x == y || (x != 0 && (GET_CODE (x) == REG \
207 ? GET_CODE (y) == REG && REGNO (x) == REGNO (y) \
208 : rtx_equal_p (x, y) && ! side_effects_p (x))))
210 /* Indicates if two reloads purposes are for similar enough things that we
211 can merge their reloads. */
212 #define MERGABLE_RELOADS(when1, when2, op1, op2) \
213 ((when1) == RELOAD_OTHER || (when2) == RELOAD_OTHER \
214 || ((when1) == (when2) && (op1) == (op2)) \
215 || ((when1) == RELOAD_FOR_INPUT && (when2) == RELOAD_FOR_INPUT) \
216 || ((when1) == RELOAD_FOR_OPERAND_ADDRESS \
217 && (when2) == RELOAD_FOR_OPERAND_ADDRESS) \
218 || ((when1) == RELOAD_FOR_OTHER_ADDRESS \
219 && (when2) == RELOAD_FOR_OTHER_ADDRESS))
221 /* Nonzero if these two reload purposes produce RELOAD_OTHER when merged. */
222 #define MERGE_TO_OTHER(when1, when2, op1, op2) \
223 ((when1) != (when2) \
224 || ! ((op1) == (op2) \
225 || (when1) == RELOAD_FOR_INPUT \
226 || (when1) == RELOAD_FOR_OPERAND_ADDRESS \
227 || (when1) == RELOAD_FOR_OTHER_ADDRESS))
229 /* If we are going to reload an address, compute the reload type to
230 use. */
231 #define ADDR_TYPE(type) \
232 ((type) == RELOAD_FOR_INPUT_ADDRESS \
233 ? RELOAD_FOR_INPADDR_ADDRESS \
234 : ((type) == RELOAD_FOR_OUTPUT_ADDRESS \
235 ? RELOAD_FOR_OUTADDR_ADDRESS \
236 : (type)))
238 #ifdef HAVE_SECONDARY_RELOADS
239 static int push_secondary_reload PARAMS ((int, rtx, int, int, enum reg_class,
240 enum machine_mode, enum reload_type,
241 enum insn_code *));
242 #endif
243 static enum reg_class find_valid_class PARAMS ((enum machine_mode, int));
244 static int reload_inner_reg_of_subreg PARAMS ((rtx, enum machine_mode));
245 static void push_replacement PARAMS ((rtx *, int, enum machine_mode));
246 static void combine_reloads PARAMS ((void));
247 static int find_reusable_reload PARAMS ((rtx *, rtx, enum reg_class,
248 enum reload_type, int, int));
249 static rtx find_dummy_reload PARAMS ((rtx, rtx, rtx *, rtx *,
250 enum machine_mode, enum machine_mode,
251 enum reg_class, int, int));
252 static int hard_reg_set_here_p PARAMS ((unsigned int, unsigned int, rtx));
253 static struct decomposition decompose PARAMS ((rtx));
254 static int immune_p PARAMS ((rtx, rtx, struct decomposition));
255 static int alternative_allows_memconst PARAMS ((const char *, int));
256 static rtx find_reloads_toplev PARAMS ((rtx, int, enum reload_type, int,
257 int, rtx, int *));
258 static rtx make_memloc PARAMS ((rtx, int));
259 static int find_reloads_address PARAMS ((enum machine_mode, rtx *, rtx, rtx *,
260 int, enum reload_type, int, rtx));
261 static rtx subst_reg_equivs PARAMS ((rtx, rtx));
262 static rtx subst_indexed_address PARAMS ((rtx));
263 static void update_auto_inc_notes PARAMS ((rtx, int, int));
264 static int find_reloads_address_1 PARAMS ((enum machine_mode, rtx, int, rtx *,
265 int, enum reload_type,int, rtx));
266 static void find_reloads_address_part PARAMS ((rtx, rtx *, enum reg_class,
267 enum machine_mode, int,
268 enum reload_type, int));
269 static rtx find_reloads_subreg_address PARAMS ((rtx, int, int, enum reload_type,
270 int, rtx));
271 static int find_inc_amount PARAMS ((rtx, rtx));
273 #ifdef HAVE_SECONDARY_RELOADS
275 /* Determine if any secondary reloads are needed for loading (if IN_P is
276 non-zero) or storing (if IN_P is zero) X to or from a reload register of
277 register class RELOAD_CLASS in mode RELOAD_MODE. If secondary reloads
278 are needed, push them.
280 Return the reload number of the secondary reload we made, or -1 if
281 we didn't need one. *PICODE is set to the insn_code to use if we do
282 need a secondary reload. */
284 static int
285 push_secondary_reload (in_p, x, opnum, optional, reload_class, reload_mode,
286 type, picode)
287 int in_p;
288 rtx x;
289 int opnum;
290 int optional;
291 enum reg_class reload_class;
292 enum machine_mode reload_mode;
293 enum reload_type type;
294 enum insn_code *picode;
296 enum reg_class class = NO_REGS;
297 enum machine_mode mode = reload_mode;
298 enum insn_code icode = CODE_FOR_nothing;
299 enum reg_class t_class = NO_REGS;
300 enum machine_mode t_mode = VOIDmode;
301 enum insn_code t_icode = CODE_FOR_nothing;
302 enum reload_type secondary_type;
303 int s_reload, t_reload = -1;
305 if (type == RELOAD_FOR_INPUT_ADDRESS
306 || type == RELOAD_FOR_OUTPUT_ADDRESS
307 || type == RELOAD_FOR_INPADDR_ADDRESS
308 || type == RELOAD_FOR_OUTADDR_ADDRESS)
309 secondary_type = type;
310 else
311 secondary_type = in_p ? RELOAD_FOR_INPUT_ADDRESS : RELOAD_FOR_OUTPUT_ADDRESS;
313 *picode = CODE_FOR_nothing;
315 /* If X is a paradoxical SUBREG, use the inner value to determine both the
316 mode and object being reloaded. */
317 if (GET_CODE (x) == SUBREG
318 && (GET_MODE_SIZE (GET_MODE (x))
319 > GET_MODE_SIZE (GET_MODE (SUBREG_REG (x)))))
321 x = SUBREG_REG (x);
322 reload_mode = GET_MODE (x);
325 /* If X is a pseudo-register that has an equivalent MEM (actually, if it
326 is still a pseudo-register by now, it *must* have an equivalent MEM
327 but we don't want to assume that), use that equivalent when seeing if
328 a secondary reload is needed since whether or not a reload is needed
329 might be sensitive to the form of the MEM. */
331 if (GET_CODE (x) == REG && REGNO (x) >= FIRST_PSEUDO_REGISTER
332 && reg_equiv_mem[REGNO (x)] != 0)
333 x = reg_equiv_mem[REGNO (x)];
335 #ifdef SECONDARY_INPUT_RELOAD_CLASS
336 if (in_p)
337 class = SECONDARY_INPUT_RELOAD_CLASS (reload_class, reload_mode, x);
338 #endif
340 #ifdef SECONDARY_OUTPUT_RELOAD_CLASS
341 if (! in_p)
342 class = SECONDARY_OUTPUT_RELOAD_CLASS (reload_class, reload_mode, x);
343 #endif
345 /* If we don't need any secondary registers, done. */
346 if (class == NO_REGS)
347 return -1;
349 /* Get a possible insn to use. If the predicate doesn't accept X, don't
350 use the insn. */
352 icode = (in_p ? reload_in_optab[(int) reload_mode]
353 : reload_out_optab[(int) reload_mode]);
355 if (icode != CODE_FOR_nothing
356 && insn_data[(int) icode].operand[in_p].predicate
357 && (! (insn_data[(int) icode].operand[in_p].predicate) (x, reload_mode)))
358 icode = CODE_FOR_nothing;
360 /* If we will be using an insn, see if it can directly handle the reload
361 register we will be using. If it can, the secondary reload is for a
362 scratch register. If it can't, we will use the secondary reload for
363 an intermediate register and require a tertiary reload for the scratch
364 register. */
366 if (icode != CODE_FOR_nothing)
368 /* If IN_P is non-zero, the reload register will be the output in
369 operand 0. If IN_P is zero, the reload register will be the input
370 in operand 1. Outputs should have an initial "=", which we must
371 skip. */
373 enum reg_class insn_class;
375 if (insn_data[(int) icode].operand[!in_p].constraint[0] == 0)
376 insn_class = ALL_REGS;
377 else
379 char insn_letter
380 = insn_data[(int) icode].operand[!in_p].constraint[in_p];
381 insn_class
382 = (insn_letter == 'r' ? GENERAL_REGS
383 : REG_CLASS_FROM_LETTER ((unsigned char) insn_letter));
386 if (insn_class == NO_REGS
387 || (in_p
388 && insn_data[(int) icode].operand[!in_p].constraint[0] != '=')
389 /* The scratch register's constraint must start with "=&". */
390 || insn_data[(int) icode].operand[2].constraint[0] != '='
391 || insn_data[(int) icode].operand[2].constraint[1] != '&')
392 abort ();
394 if (reg_class_subset_p (reload_class, insn_class))
395 mode = insn_data[(int) icode].operand[2].mode;
396 else
398 char t_letter = insn_data[(int) icode].operand[2].constraint[2];
399 class = insn_class;
400 t_mode = insn_data[(int) icode].operand[2].mode;
401 t_class = (t_letter == 'r' ? GENERAL_REGS
402 : REG_CLASS_FROM_LETTER ((unsigned char) t_letter));
403 t_icode = icode;
404 icode = CODE_FOR_nothing;
408 /* This case isn't valid, so fail. Reload is allowed to use the same
409 register for RELOAD_FOR_INPUT_ADDRESS and RELOAD_FOR_INPUT reloads, but
410 in the case of a secondary register, we actually need two different
411 registers for correct code. We fail here to prevent the possibility of
412 silently generating incorrect code later.
414 The convention is that secondary input reloads are valid only if the
415 secondary_class is different from class. If you have such a case, you
416 can not use secondary reloads, you must work around the problem some
417 other way.
419 Allow this when a reload_in/out pattern is being used. I.e. assume
420 that the generated code handles this case. */
422 if (in_p && class == reload_class && icode == CODE_FOR_nothing
423 && t_icode == CODE_FOR_nothing)
424 abort ();
426 /* If we need a tertiary reload, see if we have one we can reuse or else
427 make a new one. */
429 if (t_class != NO_REGS)
431 for (t_reload = 0; t_reload < n_reloads; t_reload++)
432 if (rld[t_reload].secondary_p
433 && (reg_class_subset_p (t_class, rld[t_reload].class)
434 || reg_class_subset_p (rld[t_reload].class, t_class))
435 && ((in_p && rld[t_reload].inmode == t_mode)
436 || (! in_p && rld[t_reload].outmode == t_mode))
437 && ((in_p && (rld[t_reload].secondary_in_icode
438 == CODE_FOR_nothing))
439 || (! in_p &&(rld[t_reload].secondary_out_icode
440 == CODE_FOR_nothing)))
441 && (reg_class_size[(int) t_class] == 1 || SMALL_REGISTER_CLASSES)
442 && MERGABLE_RELOADS (secondary_type,
443 rld[t_reload].when_needed,
444 opnum, rld[t_reload].opnum))
446 if (in_p)
447 rld[t_reload].inmode = t_mode;
448 if (! in_p)
449 rld[t_reload].outmode = t_mode;
451 if (reg_class_subset_p (t_class, rld[t_reload].class))
452 rld[t_reload].class = t_class;
454 rld[t_reload].opnum = MIN (rld[t_reload].opnum, opnum);
455 rld[t_reload].optional &= optional;
456 rld[t_reload].secondary_p = 1;
457 if (MERGE_TO_OTHER (secondary_type, rld[t_reload].when_needed,
458 opnum, rld[t_reload].opnum))
459 rld[t_reload].when_needed = RELOAD_OTHER;
462 if (t_reload == n_reloads)
464 /* We need to make a new tertiary reload for this register class. */
465 rld[t_reload].in = rld[t_reload].out = 0;
466 rld[t_reload].class = t_class;
467 rld[t_reload].inmode = in_p ? t_mode : VOIDmode;
468 rld[t_reload].outmode = ! in_p ? t_mode : VOIDmode;
469 rld[t_reload].reg_rtx = 0;
470 rld[t_reload].optional = optional;
471 rld[t_reload].inc = 0;
472 /* Maybe we could combine these, but it seems too tricky. */
473 rld[t_reload].nocombine = 1;
474 rld[t_reload].in_reg = 0;
475 rld[t_reload].out_reg = 0;
476 rld[t_reload].opnum = opnum;
477 rld[t_reload].when_needed = secondary_type;
478 rld[t_reload].secondary_in_reload = -1;
479 rld[t_reload].secondary_out_reload = -1;
480 rld[t_reload].secondary_in_icode = CODE_FOR_nothing;
481 rld[t_reload].secondary_out_icode = CODE_FOR_nothing;
482 rld[t_reload].secondary_p = 1;
484 n_reloads++;
488 /* See if we can reuse an existing secondary reload. */
489 for (s_reload = 0; s_reload < n_reloads; s_reload++)
490 if (rld[s_reload].secondary_p
491 && (reg_class_subset_p (class, rld[s_reload].class)
492 || reg_class_subset_p (rld[s_reload].class, class))
493 && ((in_p && rld[s_reload].inmode == mode)
494 || (! in_p && rld[s_reload].outmode == mode))
495 && ((in_p && rld[s_reload].secondary_in_reload == t_reload)
496 || (! in_p && rld[s_reload].secondary_out_reload == t_reload))
497 && ((in_p && rld[s_reload].secondary_in_icode == t_icode)
498 || (! in_p && rld[s_reload].secondary_out_icode == t_icode))
499 && (reg_class_size[(int) class] == 1 || SMALL_REGISTER_CLASSES)
500 && MERGABLE_RELOADS (secondary_type, rld[s_reload].when_needed,
501 opnum, rld[s_reload].opnum))
503 if (in_p)
504 rld[s_reload].inmode = mode;
505 if (! in_p)
506 rld[s_reload].outmode = mode;
508 if (reg_class_subset_p (class, rld[s_reload].class))
509 rld[s_reload].class = class;
511 rld[s_reload].opnum = MIN (rld[s_reload].opnum, opnum);
512 rld[s_reload].optional &= optional;
513 rld[s_reload].secondary_p = 1;
514 if (MERGE_TO_OTHER (secondary_type, rld[s_reload].when_needed,
515 opnum, rld[s_reload].opnum))
516 rld[s_reload].when_needed = RELOAD_OTHER;
519 if (s_reload == n_reloads)
521 #ifdef SECONDARY_MEMORY_NEEDED
522 /* If we need a memory location to copy between the two reload regs,
523 set it up now. Note that we do the input case before making
524 the reload and the output case after. This is due to the
525 way reloads are output. */
527 if (in_p && icode == CODE_FOR_nothing
528 && SECONDARY_MEMORY_NEEDED (class, reload_class, mode))
530 get_secondary_mem (x, reload_mode, opnum, type);
532 /* We may have just added new reloads. Make sure we add
533 the new reload at the end. */
534 s_reload = n_reloads;
536 #endif
538 /* We need to make a new secondary reload for this register class. */
539 rld[s_reload].in = rld[s_reload].out = 0;
540 rld[s_reload].class = class;
542 rld[s_reload].inmode = in_p ? mode : VOIDmode;
543 rld[s_reload].outmode = ! in_p ? mode : VOIDmode;
544 rld[s_reload].reg_rtx = 0;
545 rld[s_reload].optional = optional;
546 rld[s_reload].inc = 0;
547 /* Maybe we could combine these, but it seems too tricky. */
548 rld[s_reload].nocombine = 1;
549 rld[s_reload].in_reg = 0;
550 rld[s_reload].out_reg = 0;
551 rld[s_reload].opnum = opnum;
552 rld[s_reload].when_needed = secondary_type;
553 rld[s_reload].secondary_in_reload = in_p ? t_reload : -1;
554 rld[s_reload].secondary_out_reload = ! in_p ? t_reload : -1;
555 rld[s_reload].secondary_in_icode = in_p ? t_icode : CODE_FOR_nothing;
556 rld[s_reload].secondary_out_icode
557 = ! in_p ? t_icode : CODE_FOR_nothing;
558 rld[s_reload].secondary_p = 1;
560 n_reloads++;
562 #ifdef SECONDARY_MEMORY_NEEDED
563 if (! in_p && icode == CODE_FOR_nothing
564 && SECONDARY_MEMORY_NEEDED (reload_class, class, mode))
565 get_secondary_mem (x, mode, opnum, type);
566 #endif
569 *picode = icode;
570 return s_reload;
572 #endif /* HAVE_SECONDARY_RELOADS */
574 #ifdef SECONDARY_MEMORY_NEEDED
576 /* Return a memory location that will be used to copy X in mode MODE.
577 If we haven't already made a location for this mode in this insn,
578 call find_reloads_address on the location being returned. */
581 get_secondary_mem (x, mode, opnum, type)
582 rtx x ATTRIBUTE_UNUSED;
583 enum machine_mode mode;
584 int opnum;
585 enum reload_type type;
587 rtx loc;
588 int mem_valid;
590 /* By default, if MODE is narrower than a word, widen it to a word.
591 This is required because most machines that require these memory
592 locations do not support short load and stores from all registers
593 (e.g., FP registers). */
595 #ifdef SECONDARY_MEMORY_NEEDED_MODE
596 mode = SECONDARY_MEMORY_NEEDED_MODE (mode);
597 #else
598 if (GET_MODE_BITSIZE (mode) < BITS_PER_WORD && INTEGRAL_MODE_P (mode))
599 mode = mode_for_size (BITS_PER_WORD, GET_MODE_CLASS (mode), 0);
600 #endif
602 /* If we already have made a MEM for this operand in MODE, return it. */
603 if (secondary_memlocs_elim[(int) mode][opnum] != 0)
604 return secondary_memlocs_elim[(int) mode][opnum];
606 /* If this is the first time we've tried to get a MEM for this mode,
607 allocate a new one. `something_changed' in reload will get set
608 by noticing that the frame size has changed. */
610 if (secondary_memlocs[(int) mode] == 0)
612 #ifdef SECONDARY_MEMORY_NEEDED_RTX
613 secondary_memlocs[(int) mode] = SECONDARY_MEMORY_NEEDED_RTX (mode);
614 #else
615 secondary_memlocs[(int) mode]
616 = assign_stack_local (mode, GET_MODE_SIZE (mode), 0);
617 #endif
620 /* Get a version of the address doing any eliminations needed. If that
621 didn't give us a new MEM, make a new one if it isn't valid. */
623 loc = eliminate_regs (secondary_memlocs[(int) mode], VOIDmode, NULL_RTX);
624 mem_valid = strict_memory_address_p (mode, XEXP (loc, 0));
626 if (! mem_valid && loc == secondary_memlocs[(int) mode])
627 loc = copy_rtx (loc);
629 /* The only time the call below will do anything is if the stack
630 offset is too large. In that case IND_LEVELS doesn't matter, so we
631 can just pass a zero. Adjust the type to be the address of the
632 corresponding object. If the address was valid, save the eliminated
633 address. If it wasn't valid, we need to make a reload each time, so
634 don't save it. */
636 if (! mem_valid)
638 type = (type == RELOAD_FOR_INPUT ? RELOAD_FOR_INPUT_ADDRESS
639 : type == RELOAD_FOR_OUTPUT ? RELOAD_FOR_OUTPUT_ADDRESS
640 : RELOAD_OTHER);
642 find_reloads_address (mode, (rtx*)0, XEXP (loc, 0), &XEXP (loc, 0),
643 opnum, type, 0, 0);
646 secondary_memlocs_elim[(int) mode][opnum] = loc;
647 return loc;
650 /* Clear any secondary memory locations we've made. */
652 void
653 clear_secondary_mem ()
655 memset ((char *) secondary_memlocs, 0, sizeof secondary_memlocs);
657 #endif /* SECONDARY_MEMORY_NEEDED */
659 /* Find the largest class for which every register number plus N is valid in
660 M1 (if in range). Abort if no such class exists. */
662 static enum reg_class
663 find_valid_class (m1, n)
664 enum machine_mode m1 ATTRIBUTE_UNUSED;
665 int n;
667 int class;
668 int regno;
669 enum reg_class best_class = NO_REGS;
670 unsigned int best_size = 0;
672 for (class = 1; class < N_REG_CLASSES; class++)
674 int bad = 0;
675 for (regno = 0; regno < FIRST_PSEUDO_REGISTER && ! bad; regno++)
676 if (TEST_HARD_REG_BIT (reg_class_contents[class], regno)
677 && TEST_HARD_REG_BIT (reg_class_contents[class], regno + n)
678 && ! HARD_REGNO_MODE_OK (regno + n, m1))
679 bad = 1;
681 if (! bad && reg_class_size[class] > best_size)
682 best_class = class, best_size = reg_class_size[class];
685 if (best_size == 0)
686 abort ();
688 return best_class;
691 /* Return the number of a previously made reload that can be combined with
692 a new one, or n_reloads if none of the existing reloads can be used.
693 OUT, CLASS, TYPE and OPNUM are the same arguments as passed to
694 push_reload, they determine the kind of the new reload that we try to
695 combine. P_IN points to the corresponding value of IN, which can be
696 modified by this function.
697 DONT_SHARE is nonzero if we can't share any input-only reload for IN. */
699 static int
700 find_reusable_reload (p_in, out, class, type, opnum, dont_share)
701 rtx *p_in, out;
702 enum reg_class class;
703 enum reload_type type;
704 int opnum, dont_share;
706 rtx in = *p_in;
707 int i;
708 /* We can't merge two reloads if the output of either one is
709 earlyclobbered. */
711 if (earlyclobber_operand_p (out))
712 return n_reloads;
714 /* We can use an existing reload if the class is right
715 and at least one of IN and OUT is a match
716 and the other is at worst neutral.
717 (A zero compared against anything is neutral.)
719 If SMALL_REGISTER_CLASSES, don't use existing reloads unless they are
720 for the same thing since that can cause us to need more reload registers
721 than we otherwise would. */
723 for (i = 0; i < n_reloads; i++)
724 if ((reg_class_subset_p (class, rld[i].class)
725 || reg_class_subset_p (rld[i].class, class))
726 /* If the existing reload has a register, it must fit our class. */
727 && (rld[i].reg_rtx == 0
728 || TEST_HARD_REG_BIT (reg_class_contents[(int) class],
729 true_regnum (rld[i].reg_rtx)))
730 && ((in != 0 && MATCHES (rld[i].in, in) && ! dont_share
731 && (out == 0 || rld[i].out == 0 || MATCHES (rld[i].out, out)))
732 || (out != 0 && MATCHES (rld[i].out, out)
733 && (in == 0 || rld[i].in == 0 || MATCHES (rld[i].in, in))))
734 && (rld[i].out == 0 || ! earlyclobber_operand_p (rld[i].out))
735 && (reg_class_size[(int) class] == 1 || SMALL_REGISTER_CLASSES)
736 && MERGABLE_RELOADS (type, rld[i].when_needed, opnum, rld[i].opnum))
737 return i;
739 /* Reloading a plain reg for input can match a reload to postincrement
740 that reg, since the postincrement's value is the right value.
741 Likewise, it can match a preincrement reload, since we regard
742 the preincrementation as happening before any ref in this insn
743 to that register. */
744 for (i = 0; i < n_reloads; i++)
745 if ((reg_class_subset_p (class, rld[i].class)
746 || reg_class_subset_p (rld[i].class, class))
747 /* If the existing reload has a register, it must fit our
748 class. */
749 && (rld[i].reg_rtx == 0
750 || TEST_HARD_REG_BIT (reg_class_contents[(int) class],
751 true_regnum (rld[i].reg_rtx)))
752 && out == 0 && rld[i].out == 0 && rld[i].in != 0
753 && ((GET_CODE (in) == REG
754 && GET_RTX_CLASS (GET_CODE (rld[i].in)) == 'a'
755 && MATCHES (XEXP (rld[i].in, 0), in))
756 || (GET_CODE (rld[i].in) == REG
757 && GET_RTX_CLASS (GET_CODE (in)) == 'a'
758 && MATCHES (XEXP (in, 0), rld[i].in)))
759 && (rld[i].out == 0 || ! earlyclobber_operand_p (rld[i].out))
760 && (reg_class_size[(int) class] == 1 || SMALL_REGISTER_CLASSES)
761 && MERGABLE_RELOADS (type, rld[i].when_needed,
762 opnum, rld[i].opnum))
764 /* Make sure reload_in ultimately has the increment,
765 not the plain register. */
766 if (GET_CODE (in) == REG)
767 *p_in = rld[i].in;
768 return i;
770 return n_reloads;
773 /* Return nonzero if X is a SUBREG which will require reloading of its
774 SUBREG_REG expression. */
776 static int
777 reload_inner_reg_of_subreg (x, mode)
778 rtx x;
779 enum machine_mode mode;
781 rtx inner;
783 /* Only SUBREGs are problematical. */
784 if (GET_CODE (x) != SUBREG)
785 return 0;
787 inner = SUBREG_REG (x);
789 /* If INNER is a constant or PLUS, then INNER must be reloaded. */
790 if (CONSTANT_P (inner) || GET_CODE (inner) == PLUS)
791 return 1;
793 /* If INNER is not a hard register, then INNER will not need to
794 be reloaded. */
795 if (GET_CODE (inner) != REG
796 || REGNO (inner) >= FIRST_PSEUDO_REGISTER)
797 return 0;
799 /* If INNER is not ok for MODE, then INNER will need reloading. */
800 if (! HARD_REGNO_MODE_OK (subreg_regno (x), mode))
801 return 1;
803 /* If the outer part is a word or smaller, INNER larger than a
804 word and the number of regs for INNER is not the same as the
805 number of words in INNER, then INNER will need reloading. */
806 return (GET_MODE_SIZE (mode) <= UNITS_PER_WORD
807 && GET_MODE_SIZE (GET_MODE (inner)) > UNITS_PER_WORD
808 && ((GET_MODE_SIZE (GET_MODE (inner)) / UNITS_PER_WORD)
809 != HARD_REGNO_NREGS (REGNO (inner), GET_MODE (inner))));
812 /* Record one reload that needs to be performed.
813 IN is an rtx saying where the data are to be found before this instruction.
814 OUT says where they must be stored after the instruction.
815 (IN is zero for data not read, and OUT is zero for data not written.)
816 INLOC and OUTLOC point to the places in the instructions where
817 IN and OUT were found.
818 If IN and OUT are both non-zero, it means the same register must be used
819 to reload both IN and OUT.
821 CLASS is a register class required for the reloaded data.
822 INMODE is the machine mode that the instruction requires
823 for the reg that replaces IN and OUTMODE is likewise for OUT.
825 If IN is zero, then OUT's location and mode should be passed as
826 INLOC and INMODE.
828 STRICT_LOW is the 1 if there is a containing STRICT_LOW_PART rtx.
830 OPTIONAL nonzero means this reload does not need to be performed:
831 it can be discarded if that is more convenient.
833 OPNUM and TYPE say what the purpose of this reload is.
835 The return value is the reload-number for this reload.
837 If both IN and OUT are nonzero, in some rare cases we might
838 want to make two separate reloads. (Actually we never do this now.)
839 Therefore, the reload-number for OUT is stored in
840 output_reloadnum when we return; the return value applies to IN.
841 Usually (presently always), when IN and OUT are nonzero,
842 the two reload-numbers are equal, but the caller should be careful to
843 distinguish them. */
846 push_reload (in, out, inloc, outloc, class,
847 inmode, outmode, strict_low, optional, opnum, type)
848 rtx in, out;
849 rtx *inloc, *outloc;
850 enum reg_class class;
851 enum machine_mode inmode, outmode;
852 int strict_low;
853 int optional;
854 int opnum;
855 enum reload_type type;
857 register int i;
858 int dont_share = 0;
859 int dont_remove_subreg = 0;
860 rtx *in_subreg_loc = 0, *out_subreg_loc = 0;
861 int secondary_in_reload = -1, secondary_out_reload = -1;
862 enum insn_code secondary_in_icode = CODE_FOR_nothing;
863 enum insn_code secondary_out_icode = CODE_FOR_nothing;
865 /* INMODE and/or OUTMODE could be VOIDmode if no mode
866 has been specified for the operand. In that case,
867 use the operand's mode as the mode to reload. */
868 if (inmode == VOIDmode && in != 0)
869 inmode = GET_MODE (in);
870 if (outmode == VOIDmode && out != 0)
871 outmode = GET_MODE (out);
873 /* If IN is a pseudo register everywhere-equivalent to a constant, and
874 it is not in a hard register, reload straight from the constant,
875 since we want to get rid of such pseudo registers.
876 Often this is done earlier, but not always in find_reloads_address. */
877 if (in != 0 && GET_CODE (in) == REG)
879 register int regno = REGNO (in);
881 if (regno >= FIRST_PSEUDO_REGISTER && reg_renumber[regno] < 0
882 && reg_equiv_constant[regno] != 0)
883 in = reg_equiv_constant[regno];
886 /* Likewise for OUT. Of course, OUT will never be equivalent to
887 an actual constant, but it might be equivalent to a memory location
888 (in the case of a parameter). */
889 if (out != 0 && GET_CODE (out) == REG)
891 register int regno = REGNO (out);
893 if (regno >= FIRST_PSEUDO_REGISTER && reg_renumber[regno] < 0
894 && reg_equiv_constant[regno] != 0)
895 out = reg_equiv_constant[regno];
898 /* If we have a read-write operand with an address side-effect,
899 change either IN or OUT so the side-effect happens only once. */
900 if (in != 0 && out != 0 && GET_CODE (in) == MEM && rtx_equal_p (in, out))
901 switch (GET_CODE (XEXP (in, 0)))
903 case POST_INC: case POST_DEC: case POST_MODIFY:
904 in = replace_equiv_address_nv (in, XEXP (XEXP (in, 0), 0));
905 break;
907 case PRE_INC: case PRE_DEC: case PRE_MODIFY:
908 out = replace_equiv_address_nv (out, XEXP (XEXP (out, 0), 0));
909 break;
911 default:
912 break;
915 /* If we are reloading a (SUBREG constant ...), really reload just the
916 inside expression in its own mode. Similarly for (SUBREG (PLUS ...)).
917 If we have (SUBREG:M1 (MEM:M2 ...) ...) (or an inner REG that is still
918 a pseudo and hence will become a MEM) with M1 wider than M2 and the
919 register is a pseudo, also reload the inside expression.
920 For machines that extend byte loads, do this for any SUBREG of a pseudo
921 where both M1 and M2 are a word or smaller, M1 is wider than M2, and
922 M2 is an integral mode that gets extended when loaded.
923 Similar issue for (SUBREG:M1 (REG:M2 ...) ...) for a hard register R where
924 either M1 is not valid for R or M2 is wider than a word but we only
925 need one word to store an M2-sized quantity in R.
926 (However, if OUT is nonzero, we need to reload the reg *and*
927 the subreg, so do nothing here, and let following statement handle it.)
929 Note that the case of (SUBREG (CONST_INT...)...) is handled elsewhere;
930 we can't handle it here because CONST_INT does not indicate a mode.
932 Similarly, we must reload the inside expression if we have a
933 STRICT_LOW_PART (presumably, in == out in the cas).
935 Also reload the inner expression if it does not require a secondary
936 reload but the SUBREG does.
938 Finally, reload the inner expression if it is a register that is in
939 the class whose registers cannot be referenced in a different size
940 and M1 is not the same size as M2. If subreg_lowpart_p is false, we
941 cannot reload just the inside since we might end up with the wrong
942 register class. But if it is inside a STRICT_LOW_PART, we have
943 no choice, so we hope we do get the right register class there. */
945 if (in != 0 && GET_CODE (in) == SUBREG
946 && (subreg_lowpart_p (in) || strict_low)
947 #ifdef CLASS_CANNOT_CHANGE_MODE
948 && (class != CLASS_CANNOT_CHANGE_MODE
949 || ! CLASS_CANNOT_CHANGE_MODE_P (GET_MODE (SUBREG_REG (in)), inmode))
950 #endif
951 && (CONSTANT_P (SUBREG_REG (in))
952 || GET_CODE (SUBREG_REG (in)) == PLUS
953 || strict_low
954 || (((GET_CODE (SUBREG_REG (in)) == REG
955 && REGNO (SUBREG_REG (in)) >= FIRST_PSEUDO_REGISTER)
956 || GET_CODE (SUBREG_REG (in)) == MEM)
957 && ((GET_MODE_SIZE (inmode)
958 > GET_MODE_SIZE (GET_MODE (SUBREG_REG (in))))
959 #ifdef LOAD_EXTEND_OP
960 || (GET_MODE_SIZE (inmode) <= UNITS_PER_WORD
961 && (GET_MODE_SIZE (GET_MODE (SUBREG_REG (in)))
962 <= UNITS_PER_WORD)
963 && (GET_MODE_SIZE (inmode)
964 > GET_MODE_SIZE (GET_MODE (SUBREG_REG (in))))
965 && INTEGRAL_MODE_P (GET_MODE (SUBREG_REG (in)))
966 && LOAD_EXTEND_OP (GET_MODE (SUBREG_REG (in))) != NIL)
967 #endif
968 #ifdef WORD_REGISTER_OPERATIONS
969 || ((GET_MODE_SIZE (inmode)
970 < GET_MODE_SIZE (GET_MODE (SUBREG_REG (in))))
971 && ((GET_MODE_SIZE (inmode) - 1) / UNITS_PER_WORD ==
972 ((GET_MODE_SIZE (GET_MODE (SUBREG_REG (in))) - 1)
973 / UNITS_PER_WORD)))
974 #endif
976 || (GET_CODE (SUBREG_REG (in)) == REG
977 && REGNO (SUBREG_REG (in)) < FIRST_PSEUDO_REGISTER
978 /* The case where out is nonzero
979 is handled differently in the following statement. */
980 && (out == 0 || subreg_lowpart_p (in))
981 && ((GET_MODE_SIZE (inmode) <= UNITS_PER_WORD
982 && (GET_MODE_SIZE (GET_MODE (SUBREG_REG (in)))
983 > UNITS_PER_WORD)
984 && ((GET_MODE_SIZE (GET_MODE (SUBREG_REG (in)))
985 / UNITS_PER_WORD)
986 != HARD_REGNO_NREGS (REGNO (SUBREG_REG (in)),
987 GET_MODE (SUBREG_REG (in)))))
988 || ! HARD_REGNO_MODE_OK (subreg_regno (in), inmode)))
989 #ifdef SECONDARY_INPUT_RELOAD_CLASS
990 || (SECONDARY_INPUT_RELOAD_CLASS (class, inmode, in) != NO_REGS
991 && (SECONDARY_INPUT_RELOAD_CLASS (class,
992 GET_MODE (SUBREG_REG (in)),
993 SUBREG_REG (in))
994 == NO_REGS))
995 #endif
996 #ifdef CLASS_CANNOT_CHANGE_MODE
997 || (GET_CODE (SUBREG_REG (in)) == REG
998 && REGNO (SUBREG_REG (in)) < FIRST_PSEUDO_REGISTER
999 && (TEST_HARD_REG_BIT
1000 (reg_class_contents[(int) CLASS_CANNOT_CHANGE_MODE],
1001 REGNO (SUBREG_REG (in))))
1002 && CLASS_CANNOT_CHANGE_MODE_P (GET_MODE (SUBREG_REG (in)),
1003 inmode))
1004 #endif
1007 in_subreg_loc = inloc;
1008 inloc = &SUBREG_REG (in);
1009 in = *inloc;
1010 #if ! defined (LOAD_EXTEND_OP) && ! defined (WORD_REGISTER_OPERATIONS)
1011 if (GET_CODE (in) == MEM)
1012 /* This is supposed to happen only for paradoxical subregs made by
1013 combine.c. (SUBREG (MEM)) isn't supposed to occur other ways. */
1014 if (GET_MODE_SIZE (GET_MODE (in)) > GET_MODE_SIZE (inmode))
1015 abort ();
1016 #endif
1017 inmode = GET_MODE (in);
1020 /* Similar issue for (SUBREG:M1 (REG:M2 ...) ...) for a hard register R where
1021 either M1 is not valid for R or M2 is wider than a word but we only
1022 need one word to store an M2-sized quantity in R.
1024 However, we must reload the inner reg *as well as* the subreg in
1025 that case. */
1027 /* Similar issue for (SUBREG constant ...) if it was not handled by the
1028 code above. This can happen if SUBREG_BYTE != 0. */
1030 if (in != 0 && reload_inner_reg_of_subreg (in, inmode))
1032 enum reg_class in_class = class;
1034 if (GET_CODE (SUBREG_REG (in)) == REG)
1035 in_class
1036 = find_valid_class (inmode,
1037 subreg_regno_offset (REGNO (SUBREG_REG (in)),
1038 GET_MODE (SUBREG_REG (in)),
1039 SUBREG_BYTE (in),
1040 GET_MODE (in)));
1042 /* This relies on the fact that emit_reload_insns outputs the
1043 instructions for input reloads of type RELOAD_OTHER in the same
1044 order as the reloads. Thus if the outer reload is also of type
1045 RELOAD_OTHER, we are guaranteed that this inner reload will be
1046 output before the outer reload. */
1047 push_reload (SUBREG_REG (in), NULL_RTX, &SUBREG_REG (in), (rtx *)0,
1048 in_class, VOIDmode, VOIDmode, 0, 0, opnum, type);
1049 dont_remove_subreg = 1;
1052 /* Similarly for paradoxical and problematical SUBREGs on the output.
1053 Note that there is no reason we need worry about the previous value
1054 of SUBREG_REG (out); even if wider than out,
1055 storing in a subreg is entitled to clobber it all
1056 (except in the case of STRICT_LOW_PART,
1057 and in that case the constraint should label it input-output.) */
1058 if (out != 0 && GET_CODE (out) == SUBREG
1059 && (subreg_lowpart_p (out) || strict_low)
1060 #ifdef CLASS_CANNOT_CHANGE_MODE
1061 && (class != CLASS_CANNOT_CHANGE_MODE
1062 || ! CLASS_CANNOT_CHANGE_MODE_P (GET_MODE (SUBREG_REG (out)),
1063 outmode))
1064 #endif
1065 && (CONSTANT_P (SUBREG_REG (out))
1066 || strict_low
1067 || (((GET_CODE (SUBREG_REG (out)) == REG
1068 && REGNO (SUBREG_REG (out)) >= FIRST_PSEUDO_REGISTER)
1069 || GET_CODE (SUBREG_REG (out)) == MEM)
1070 && ((GET_MODE_SIZE (outmode)
1071 > GET_MODE_SIZE (GET_MODE (SUBREG_REG (out))))
1072 #ifdef WORD_REGISTER_OPERATIONS
1073 || ((GET_MODE_SIZE (outmode)
1074 < GET_MODE_SIZE (GET_MODE (SUBREG_REG (out))))
1075 && ((GET_MODE_SIZE (outmode) - 1) / UNITS_PER_WORD ==
1076 ((GET_MODE_SIZE (GET_MODE (SUBREG_REG (out))) - 1)
1077 / UNITS_PER_WORD)))
1078 #endif
1080 || (GET_CODE (SUBREG_REG (out)) == REG
1081 && REGNO (SUBREG_REG (out)) < FIRST_PSEUDO_REGISTER
1082 && ((GET_MODE_SIZE (outmode) <= UNITS_PER_WORD
1083 && (GET_MODE_SIZE (GET_MODE (SUBREG_REG (out)))
1084 > UNITS_PER_WORD)
1085 && ((GET_MODE_SIZE (GET_MODE (SUBREG_REG (out)))
1086 / UNITS_PER_WORD)
1087 != HARD_REGNO_NREGS (REGNO (SUBREG_REG (out)),
1088 GET_MODE (SUBREG_REG (out)))))
1089 || ! HARD_REGNO_MODE_OK (subreg_regno (out), outmode)))
1090 #ifdef SECONDARY_OUTPUT_RELOAD_CLASS
1091 || (SECONDARY_OUTPUT_RELOAD_CLASS (class, outmode, out) != NO_REGS
1092 && (SECONDARY_OUTPUT_RELOAD_CLASS (class,
1093 GET_MODE (SUBREG_REG (out)),
1094 SUBREG_REG (out))
1095 == NO_REGS))
1096 #endif
1097 #ifdef CLASS_CANNOT_CHANGE_MODE
1098 || (GET_CODE (SUBREG_REG (out)) == REG
1099 && REGNO (SUBREG_REG (out)) < FIRST_PSEUDO_REGISTER
1100 && (TEST_HARD_REG_BIT
1101 (reg_class_contents[(int) CLASS_CANNOT_CHANGE_MODE],
1102 REGNO (SUBREG_REG (out))))
1103 && CLASS_CANNOT_CHANGE_MODE_P (GET_MODE (SUBREG_REG (out)),
1104 outmode))
1105 #endif
1108 out_subreg_loc = outloc;
1109 outloc = &SUBREG_REG (out);
1110 out = *outloc;
1111 #if ! defined (LOAD_EXTEND_OP) && ! defined (WORD_REGISTER_OPERATIONS)
1112 if (GET_CODE (out) == MEM
1113 && GET_MODE_SIZE (GET_MODE (out)) > GET_MODE_SIZE (outmode))
1114 abort ();
1115 #endif
1116 outmode = GET_MODE (out);
1119 /* Similar issue for (SUBREG:M1 (REG:M2 ...) ...) for a hard register R where
1120 either M1 is not valid for R or M2 is wider than a word but we only
1121 need one word to store an M2-sized quantity in R.
1123 However, we must reload the inner reg *as well as* the subreg in
1124 that case. In this case, the inner reg is an in-out reload. */
1126 if (out != 0 && reload_inner_reg_of_subreg (out, outmode))
1128 /* This relies on the fact that emit_reload_insns outputs the
1129 instructions for output reloads of type RELOAD_OTHER in reverse
1130 order of the reloads. Thus if the outer reload is also of type
1131 RELOAD_OTHER, we are guaranteed that this inner reload will be
1132 output after the outer reload. */
1133 dont_remove_subreg = 1;
1134 push_reload (SUBREG_REG (out), SUBREG_REG (out), &SUBREG_REG (out),
1135 &SUBREG_REG (out),
1136 find_valid_class (outmode,
1137 subreg_regno_offset (REGNO (SUBREG_REG (out)),
1138 GET_MODE (SUBREG_REG (out)),
1139 SUBREG_BYTE (out),
1140 GET_MODE (out))),
1141 VOIDmode, VOIDmode, 0, 0,
1142 opnum, RELOAD_OTHER);
1145 /* If IN appears in OUT, we can't share any input-only reload for IN. */
1146 if (in != 0 && out != 0 && GET_CODE (out) == MEM
1147 && (GET_CODE (in) == REG || GET_CODE (in) == MEM)
1148 && reg_overlap_mentioned_for_reload_p (in, XEXP (out, 0)))
1149 dont_share = 1;
1151 /* If IN is a SUBREG of a hard register, make a new REG. This
1152 simplifies some of the cases below. */
1154 if (in != 0 && GET_CODE (in) == SUBREG && GET_CODE (SUBREG_REG (in)) == REG
1155 && REGNO (SUBREG_REG (in)) < FIRST_PSEUDO_REGISTER
1156 && ! dont_remove_subreg)
1157 in = gen_rtx_REG (GET_MODE (in), subreg_regno (in));
1159 /* Similarly for OUT. */
1160 if (out != 0 && GET_CODE (out) == SUBREG
1161 && GET_CODE (SUBREG_REG (out)) == REG
1162 && REGNO (SUBREG_REG (out)) < FIRST_PSEUDO_REGISTER
1163 && ! dont_remove_subreg)
1164 out = gen_rtx_REG (GET_MODE (out), subreg_regno (out));
1166 /* Narrow down the class of register wanted if that is
1167 desirable on this machine for efficiency. */
1168 if (in != 0)
1169 class = PREFERRED_RELOAD_CLASS (in, class);
1171 /* Output reloads may need analogous treatment, different in detail. */
1172 #ifdef PREFERRED_OUTPUT_RELOAD_CLASS
1173 if (out != 0)
1174 class = PREFERRED_OUTPUT_RELOAD_CLASS (out, class);
1175 #endif
1177 /* Make sure we use a class that can handle the actual pseudo
1178 inside any subreg. For example, on the 386, QImode regs
1179 can appear within SImode subregs. Although GENERAL_REGS
1180 can handle SImode, QImode needs a smaller class. */
1181 #ifdef LIMIT_RELOAD_CLASS
1182 if (in_subreg_loc)
1183 class = LIMIT_RELOAD_CLASS (inmode, class);
1184 else if (in != 0 && GET_CODE (in) == SUBREG)
1185 class = LIMIT_RELOAD_CLASS (GET_MODE (SUBREG_REG (in)), class);
1187 if (out_subreg_loc)
1188 class = LIMIT_RELOAD_CLASS (outmode, class);
1189 if (out != 0 && GET_CODE (out) == SUBREG)
1190 class = LIMIT_RELOAD_CLASS (GET_MODE (SUBREG_REG (out)), class);
1191 #endif
1193 /* Verify that this class is at least possible for the mode that
1194 is specified. */
1195 if (this_insn_is_asm)
1197 enum machine_mode mode;
1198 if (GET_MODE_SIZE (inmode) > GET_MODE_SIZE (outmode))
1199 mode = inmode;
1200 else
1201 mode = outmode;
1202 if (mode == VOIDmode)
1204 error_for_asm (this_insn, "cannot reload integer constant operand in `asm'");
1205 mode = word_mode;
1206 if (in != 0)
1207 inmode = word_mode;
1208 if (out != 0)
1209 outmode = word_mode;
1211 for (i = 0; i < FIRST_PSEUDO_REGISTER; i++)
1212 if (HARD_REGNO_MODE_OK (i, mode)
1213 && TEST_HARD_REG_BIT (reg_class_contents[(int) class], i))
1215 int nregs = HARD_REGNO_NREGS (i, mode);
1217 int j;
1218 for (j = 1; j < nregs; j++)
1219 if (! TEST_HARD_REG_BIT (reg_class_contents[(int) class], i + j))
1220 break;
1221 if (j == nregs)
1222 break;
1224 if (i == FIRST_PSEUDO_REGISTER)
1226 error_for_asm (this_insn, "impossible register constraint in `asm'");
1227 class = ALL_REGS;
1231 /* Optional output reloads are always OK even if we have no register class,
1232 since the function of these reloads is only to have spill_reg_store etc.
1233 set, so that the storing insn can be deleted later. */
1234 if (class == NO_REGS
1235 && (optional == 0 || type != RELOAD_FOR_OUTPUT))
1236 abort ();
1238 i = find_reusable_reload (&in, out, class, type, opnum, dont_share);
1240 if (i == n_reloads)
1242 /* See if we need a secondary reload register to move between CLASS
1243 and IN or CLASS and OUT. Get the icode and push any required reloads
1244 needed for each of them if so. */
1246 #ifdef SECONDARY_INPUT_RELOAD_CLASS
1247 if (in != 0)
1248 secondary_in_reload
1249 = push_secondary_reload (1, in, opnum, optional, class, inmode, type,
1250 &secondary_in_icode);
1251 #endif
1253 #ifdef SECONDARY_OUTPUT_RELOAD_CLASS
1254 if (out != 0 && GET_CODE (out) != SCRATCH)
1255 secondary_out_reload
1256 = push_secondary_reload (0, out, opnum, optional, class, outmode,
1257 type, &secondary_out_icode);
1258 #endif
1260 /* We found no existing reload suitable for re-use.
1261 So add an additional reload. */
1263 #ifdef SECONDARY_MEMORY_NEEDED
1264 /* If a memory location is needed for the copy, make one. */
1265 if (in != 0 && GET_CODE (in) == REG
1266 && REGNO (in) < FIRST_PSEUDO_REGISTER
1267 && SECONDARY_MEMORY_NEEDED (REGNO_REG_CLASS (REGNO (in)),
1268 class, inmode))
1269 get_secondary_mem (in, inmode, opnum, type);
1270 #endif
1272 i = n_reloads;
1273 rld[i].in = in;
1274 rld[i].out = out;
1275 rld[i].class = class;
1276 rld[i].inmode = inmode;
1277 rld[i].outmode = outmode;
1278 rld[i].reg_rtx = 0;
1279 rld[i].optional = optional;
1280 rld[i].inc = 0;
1281 rld[i].nocombine = 0;
1282 rld[i].in_reg = inloc ? *inloc : 0;
1283 rld[i].out_reg = outloc ? *outloc : 0;
1284 rld[i].opnum = opnum;
1285 rld[i].when_needed = type;
1286 rld[i].secondary_in_reload = secondary_in_reload;
1287 rld[i].secondary_out_reload = secondary_out_reload;
1288 rld[i].secondary_in_icode = secondary_in_icode;
1289 rld[i].secondary_out_icode = secondary_out_icode;
1290 rld[i].secondary_p = 0;
1292 n_reloads++;
1294 #ifdef SECONDARY_MEMORY_NEEDED
1295 if (out != 0 && GET_CODE (out) == REG
1296 && REGNO (out) < FIRST_PSEUDO_REGISTER
1297 && SECONDARY_MEMORY_NEEDED (class, REGNO_REG_CLASS (REGNO (out)),
1298 outmode))
1299 get_secondary_mem (out, outmode, opnum, type);
1300 #endif
1302 else
1304 /* We are reusing an existing reload,
1305 but we may have additional information for it.
1306 For example, we may now have both IN and OUT
1307 while the old one may have just one of them. */
1309 /* The modes can be different. If they are, we want to reload in
1310 the larger mode, so that the value is valid for both modes. */
1311 if (inmode != VOIDmode
1312 && GET_MODE_SIZE (inmode) > GET_MODE_SIZE (rld[i].inmode))
1313 rld[i].inmode = inmode;
1314 if (outmode != VOIDmode
1315 && GET_MODE_SIZE (outmode) > GET_MODE_SIZE (rld[i].outmode))
1316 rld[i].outmode = outmode;
1317 if (in != 0)
1319 rtx in_reg = inloc ? *inloc : 0;
1320 /* If we merge reloads for two distinct rtl expressions that
1321 are identical in content, there might be duplicate address
1322 reloads. Remove the extra set now, so that if we later find
1323 that we can inherit this reload, we can get rid of the
1324 address reloads altogether.
1326 Do not do this if both reloads are optional since the result
1327 would be an optional reload which could potentially leave
1328 unresolved address replacements.
1330 It is not sufficient to call transfer_replacements since
1331 choose_reload_regs will remove the replacements for address
1332 reloads of inherited reloads which results in the same
1333 problem. */
1334 if (rld[i].in != in && rtx_equal_p (in, rld[i].in)
1335 && ! (rld[i].optional && optional))
1337 /* We must keep the address reload with the lower operand
1338 number alive. */
1339 if (opnum > rld[i].opnum)
1341 remove_address_replacements (in);
1342 in = rld[i].in;
1343 in_reg = rld[i].in_reg;
1345 else
1346 remove_address_replacements (rld[i].in);
1348 rld[i].in = in;
1349 rld[i].in_reg = in_reg;
1351 if (out != 0)
1353 rld[i].out = out;
1354 rld[i].out_reg = outloc ? *outloc : 0;
1356 if (reg_class_subset_p (class, rld[i].class))
1357 rld[i].class = class;
1358 rld[i].optional &= optional;
1359 if (MERGE_TO_OTHER (type, rld[i].when_needed,
1360 opnum, rld[i].opnum))
1361 rld[i].when_needed = RELOAD_OTHER;
1362 rld[i].opnum = MIN (rld[i].opnum, opnum);
1365 /* If the ostensible rtx being reloaded differs from the rtx found
1366 in the location to substitute, this reload is not safe to combine
1367 because we cannot reliably tell whether it appears in the insn. */
1369 if (in != 0 && in != *inloc)
1370 rld[i].nocombine = 1;
1372 #if 0
1373 /* This was replaced by changes in find_reloads_address_1 and the new
1374 function inc_for_reload, which go with a new meaning of reload_inc. */
1376 /* If this is an IN/OUT reload in an insn that sets the CC,
1377 it must be for an autoincrement. It doesn't work to store
1378 the incremented value after the insn because that would clobber the CC.
1379 So we must do the increment of the value reloaded from,
1380 increment it, store it back, then decrement again. */
1381 if (out != 0 && sets_cc0_p (PATTERN (this_insn)))
1383 out = 0;
1384 rld[i].out = 0;
1385 rld[i].inc = find_inc_amount (PATTERN (this_insn), in);
1386 /* If we did not find a nonzero amount-to-increment-by,
1387 that contradicts the belief that IN is being incremented
1388 in an address in this insn. */
1389 if (rld[i].inc == 0)
1390 abort ();
1392 #endif
1394 /* If we will replace IN and OUT with the reload-reg,
1395 record where they are located so that substitution need
1396 not do a tree walk. */
1398 if (replace_reloads)
1400 if (inloc != 0)
1402 register struct replacement *r = &replacements[n_replacements++];
1403 r->what = i;
1404 r->subreg_loc = in_subreg_loc;
1405 r->where = inloc;
1406 r->mode = inmode;
1408 if (outloc != 0 && outloc != inloc)
1410 register struct replacement *r = &replacements[n_replacements++];
1411 r->what = i;
1412 r->where = outloc;
1413 r->subreg_loc = out_subreg_loc;
1414 r->mode = outmode;
1418 /* If this reload is just being introduced and it has both
1419 an incoming quantity and an outgoing quantity that are
1420 supposed to be made to match, see if either one of the two
1421 can serve as the place to reload into.
1423 If one of them is acceptable, set rld[i].reg_rtx
1424 to that one. */
1426 if (in != 0 && out != 0 && in != out && rld[i].reg_rtx == 0)
1428 rld[i].reg_rtx = find_dummy_reload (in, out, inloc, outloc,
1429 inmode, outmode,
1430 rld[i].class, i,
1431 earlyclobber_operand_p (out));
1433 /* If the outgoing register already contains the same value
1434 as the incoming one, we can dispense with loading it.
1435 The easiest way to tell the caller that is to give a phony
1436 value for the incoming operand (same as outgoing one). */
1437 if (rld[i].reg_rtx == out
1438 && (GET_CODE (in) == REG || CONSTANT_P (in))
1439 && 0 != find_equiv_reg (in, this_insn, 0, REGNO (out),
1440 static_reload_reg_p, i, inmode))
1441 rld[i].in = out;
1444 /* If this is an input reload and the operand contains a register that
1445 dies in this insn and is used nowhere else, see if it is the right class
1446 to be used for this reload. Use it if so. (This occurs most commonly
1447 in the case of paradoxical SUBREGs and in-out reloads). We cannot do
1448 this if it is also an output reload that mentions the register unless
1449 the output is a SUBREG that clobbers an entire register.
1451 Note that the operand might be one of the spill regs, if it is a
1452 pseudo reg and we are in a block where spilling has not taken place.
1453 But if there is no spilling in this block, that is OK.
1454 An explicitly used hard reg cannot be a spill reg. */
1456 if (rld[i].reg_rtx == 0 && in != 0)
1458 rtx note;
1459 int regno;
1460 enum machine_mode rel_mode = inmode;
1462 if (out && GET_MODE_SIZE (outmode) > GET_MODE_SIZE (inmode))
1463 rel_mode = outmode;
1465 for (note = REG_NOTES (this_insn); note; note = XEXP (note, 1))
1466 if (REG_NOTE_KIND (note) == REG_DEAD
1467 && GET_CODE (XEXP (note, 0)) == REG
1468 && (regno = REGNO (XEXP (note, 0))) < FIRST_PSEUDO_REGISTER
1469 && reg_mentioned_p (XEXP (note, 0), in)
1470 && ! refers_to_regno_for_reload_p (regno,
1471 (regno
1472 + HARD_REGNO_NREGS (regno,
1473 rel_mode)),
1474 PATTERN (this_insn), inloc)
1475 /* If this is also an output reload, IN cannot be used as
1476 the reload register if it is set in this insn unless IN
1477 is also OUT. */
1478 && (out == 0 || in == out
1479 || ! hard_reg_set_here_p (regno,
1480 (regno
1481 + HARD_REGNO_NREGS (regno,
1482 rel_mode)),
1483 PATTERN (this_insn)))
1484 /* ??? Why is this code so different from the previous?
1485 Is there any simple coherent way to describe the two together?
1486 What's going on here. */
1487 && (in != out
1488 || (GET_CODE (in) == SUBREG
1489 && (((GET_MODE_SIZE (GET_MODE (in)) + (UNITS_PER_WORD - 1))
1490 / UNITS_PER_WORD)
1491 == ((GET_MODE_SIZE (GET_MODE (SUBREG_REG (in)))
1492 + (UNITS_PER_WORD - 1)) / UNITS_PER_WORD))))
1493 /* Make sure the operand fits in the reg that dies. */
1494 && (GET_MODE_SIZE (rel_mode)
1495 <= GET_MODE_SIZE (GET_MODE (XEXP (note, 0))))
1496 && HARD_REGNO_MODE_OK (regno, inmode)
1497 && HARD_REGNO_MODE_OK (regno, outmode))
1499 unsigned int offs;
1500 unsigned int nregs = MAX (HARD_REGNO_NREGS (regno, inmode),
1501 HARD_REGNO_NREGS (regno, outmode));
1503 for (offs = 0; offs < nregs; offs++)
1504 if (fixed_regs[regno + offs]
1505 || ! TEST_HARD_REG_BIT (reg_class_contents[(int) class],
1506 regno + offs))
1507 break;
1509 if (offs == nregs)
1511 rld[i].reg_rtx = gen_rtx_REG (rel_mode, regno);
1512 break;
1517 if (out)
1518 output_reloadnum = i;
1520 return i;
1523 /* Record an additional place we must replace a value
1524 for which we have already recorded a reload.
1525 RELOADNUM is the value returned by push_reload
1526 when the reload was recorded.
1527 This is used in insn patterns that use match_dup. */
1529 static void
1530 push_replacement (loc, reloadnum, mode)
1531 rtx *loc;
1532 int reloadnum;
1533 enum machine_mode mode;
1535 if (replace_reloads)
1537 register struct replacement *r = &replacements[n_replacements++];
1538 r->what = reloadnum;
1539 r->where = loc;
1540 r->subreg_loc = 0;
1541 r->mode = mode;
1545 /* Transfer all replacements that used to be in reload FROM to be in
1546 reload TO. */
1548 void
1549 transfer_replacements (to, from)
1550 int to, from;
1552 int i;
1554 for (i = 0; i < n_replacements; i++)
1555 if (replacements[i].what == from)
1556 replacements[i].what = to;
1559 /* IN_RTX is the value loaded by a reload that we now decided to inherit,
1560 or a subpart of it. If we have any replacements registered for IN_RTX,
1561 cancel the reloads that were supposed to load them.
1562 Return non-zero if we canceled any reloads. */
1564 remove_address_replacements (in_rtx)
1565 rtx in_rtx;
1567 int i, j;
1568 char reload_flags[MAX_RELOADS];
1569 int something_changed = 0;
1571 memset (reload_flags, 0, sizeof reload_flags);
1572 for (i = 0, j = 0; i < n_replacements; i++)
1574 if (loc_mentioned_in_p (replacements[i].where, in_rtx))
1575 reload_flags[replacements[i].what] |= 1;
1576 else
1578 replacements[j++] = replacements[i];
1579 reload_flags[replacements[i].what] |= 2;
1582 /* Note that the following store must be done before the recursive calls. */
1583 n_replacements = j;
1585 for (i = n_reloads - 1; i >= 0; i--)
1587 if (reload_flags[i] == 1)
1589 deallocate_reload_reg (i);
1590 remove_address_replacements (rld[i].in);
1591 rld[i].in = 0;
1592 something_changed = 1;
1595 return something_changed;
1598 /* If there is only one output reload, and it is not for an earlyclobber
1599 operand, try to combine it with a (logically unrelated) input reload
1600 to reduce the number of reload registers needed.
1602 This is safe if the input reload does not appear in
1603 the value being output-reloaded, because this implies
1604 it is not needed any more once the original insn completes.
1606 If that doesn't work, see we can use any of the registers that
1607 die in this insn as a reload register. We can if it is of the right
1608 class and does not appear in the value being output-reloaded. */
1610 static void
1611 combine_reloads ()
1613 int i;
1614 int output_reload = -1;
1615 int secondary_out = -1;
1616 rtx note;
1618 /* Find the output reload; return unless there is exactly one
1619 and that one is mandatory. */
1621 for (i = 0; i < n_reloads; i++)
1622 if (rld[i].out != 0)
1624 if (output_reload >= 0)
1625 return;
1626 output_reload = i;
1629 if (output_reload < 0 || rld[output_reload].optional)
1630 return;
1632 /* An input-output reload isn't combinable. */
1634 if (rld[output_reload].in != 0)
1635 return;
1637 /* If this reload is for an earlyclobber operand, we can't do anything. */
1638 if (earlyclobber_operand_p (rld[output_reload].out))
1639 return;
1641 /* Check each input reload; can we combine it? */
1643 for (i = 0; i < n_reloads; i++)
1644 if (rld[i].in && ! rld[i].optional && ! rld[i].nocombine
1645 /* Life span of this reload must not extend past main insn. */
1646 && rld[i].when_needed != RELOAD_FOR_OUTPUT_ADDRESS
1647 && rld[i].when_needed != RELOAD_FOR_OUTADDR_ADDRESS
1648 && rld[i].when_needed != RELOAD_OTHER
1649 && (CLASS_MAX_NREGS (rld[i].class, rld[i].inmode)
1650 == CLASS_MAX_NREGS (rld[output_reload].class,
1651 rld[output_reload].outmode))
1652 && rld[i].inc == 0
1653 && rld[i].reg_rtx == 0
1654 #ifdef SECONDARY_MEMORY_NEEDED
1655 /* Don't combine two reloads with different secondary
1656 memory locations. */
1657 && (secondary_memlocs_elim[(int) rld[output_reload].outmode][rld[i].opnum] == 0
1658 || secondary_memlocs_elim[(int) rld[output_reload].outmode][rld[output_reload].opnum] == 0
1659 || rtx_equal_p (secondary_memlocs_elim[(int) rld[output_reload].outmode][rld[i].opnum],
1660 secondary_memlocs_elim[(int) rld[output_reload].outmode][rld[output_reload].opnum]))
1661 #endif
1662 && (SMALL_REGISTER_CLASSES
1663 ? (rld[i].class == rld[output_reload].class)
1664 : (reg_class_subset_p (rld[i].class,
1665 rld[output_reload].class)
1666 || reg_class_subset_p (rld[output_reload].class,
1667 rld[i].class)))
1668 && (MATCHES (rld[i].in, rld[output_reload].out)
1669 /* Args reversed because the first arg seems to be
1670 the one that we imagine being modified
1671 while the second is the one that might be affected. */
1672 || (! reg_overlap_mentioned_for_reload_p (rld[output_reload].out,
1673 rld[i].in)
1674 /* However, if the input is a register that appears inside
1675 the output, then we also can't share.
1676 Imagine (set (mem (reg 69)) (plus (reg 69) ...)).
1677 If the same reload reg is used for both reg 69 and the
1678 result to be stored in memory, then that result
1679 will clobber the address of the memory ref. */
1680 && ! (GET_CODE (rld[i].in) == REG
1681 && reg_overlap_mentioned_for_reload_p (rld[i].in,
1682 rld[output_reload].out))))
1683 && ! reload_inner_reg_of_subreg (rld[i].in, rld[i].inmode)
1684 && (reg_class_size[(int) rld[i].class]
1685 || SMALL_REGISTER_CLASSES)
1686 /* We will allow making things slightly worse by combining an
1687 input and an output, but no worse than that. */
1688 && (rld[i].when_needed == RELOAD_FOR_INPUT
1689 || rld[i].when_needed == RELOAD_FOR_OUTPUT))
1691 int j;
1693 /* We have found a reload to combine with! */
1694 rld[i].out = rld[output_reload].out;
1695 rld[i].out_reg = rld[output_reload].out_reg;
1696 rld[i].outmode = rld[output_reload].outmode;
1697 /* Mark the old output reload as inoperative. */
1698 rld[output_reload].out = 0;
1699 /* The combined reload is needed for the entire insn. */
1700 rld[i].when_needed = RELOAD_OTHER;
1701 /* If the output reload had a secondary reload, copy it. */
1702 if (rld[output_reload].secondary_out_reload != -1)
1704 rld[i].secondary_out_reload
1705 = rld[output_reload].secondary_out_reload;
1706 rld[i].secondary_out_icode
1707 = rld[output_reload].secondary_out_icode;
1710 #ifdef SECONDARY_MEMORY_NEEDED
1711 /* Copy any secondary MEM. */
1712 if (secondary_memlocs_elim[(int) rld[output_reload].outmode][rld[output_reload].opnum] != 0)
1713 secondary_memlocs_elim[(int) rld[output_reload].outmode][rld[i].opnum]
1714 = secondary_memlocs_elim[(int) rld[output_reload].outmode][rld[output_reload].opnum];
1715 #endif
1716 /* If required, minimize the register class. */
1717 if (reg_class_subset_p (rld[output_reload].class,
1718 rld[i].class))
1719 rld[i].class = rld[output_reload].class;
1721 /* Transfer all replacements from the old reload to the combined. */
1722 for (j = 0; j < n_replacements; j++)
1723 if (replacements[j].what == output_reload)
1724 replacements[j].what = i;
1726 return;
1729 /* If this insn has only one operand that is modified or written (assumed
1730 to be the first), it must be the one corresponding to this reload. It
1731 is safe to use anything that dies in this insn for that output provided
1732 that it does not occur in the output (we already know it isn't an
1733 earlyclobber. If this is an asm insn, give up. */
1735 if (INSN_CODE (this_insn) == -1)
1736 return;
1738 for (i = 1; i < insn_data[INSN_CODE (this_insn)].n_operands; i++)
1739 if (insn_data[INSN_CODE (this_insn)].operand[i].constraint[0] == '='
1740 || insn_data[INSN_CODE (this_insn)].operand[i].constraint[0] == '+')
1741 return;
1743 /* See if some hard register that dies in this insn and is not used in
1744 the output is the right class. Only works if the register we pick
1745 up can fully hold our output reload. */
1746 for (note = REG_NOTES (this_insn); note; note = XEXP (note, 1))
1747 if (REG_NOTE_KIND (note) == REG_DEAD
1748 && GET_CODE (XEXP (note, 0)) == REG
1749 && ! reg_overlap_mentioned_for_reload_p (XEXP (note, 0),
1750 rld[output_reload].out)
1751 && REGNO (XEXP (note, 0)) < FIRST_PSEUDO_REGISTER
1752 && HARD_REGNO_MODE_OK (REGNO (XEXP (note, 0)), rld[output_reload].outmode)
1753 && TEST_HARD_REG_BIT (reg_class_contents[(int) rld[output_reload].class],
1754 REGNO (XEXP (note, 0)))
1755 && (HARD_REGNO_NREGS (REGNO (XEXP (note, 0)), rld[output_reload].outmode)
1756 <= HARD_REGNO_NREGS (REGNO (XEXP (note, 0)), GET_MODE (XEXP (note, 0))))
1757 /* Ensure that a secondary or tertiary reload for this output
1758 won't want this register. */
1759 && ((secondary_out = rld[output_reload].secondary_out_reload) == -1
1760 || (! (TEST_HARD_REG_BIT
1761 (reg_class_contents[(int) rld[secondary_out].class],
1762 REGNO (XEXP (note, 0))))
1763 && ((secondary_out = rld[secondary_out].secondary_out_reload) == -1
1764 || ! (TEST_HARD_REG_BIT
1765 (reg_class_contents[(int) rld[secondary_out].class],
1766 REGNO (XEXP (note, 0)))))))
1767 && ! fixed_regs[REGNO (XEXP (note, 0))])
1769 rld[output_reload].reg_rtx
1770 = gen_rtx_REG (rld[output_reload].outmode,
1771 REGNO (XEXP (note, 0)));
1772 return;
1776 /* Try to find a reload register for an in-out reload (expressions IN and OUT).
1777 See if one of IN and OUT is a register that may be used;
1778 this is desirable since a spill-register won't be needed.
1779 If so, return the register rtx that proves acceptable.
1781 INLOC and OUTLOC are locations where IN and OUT appear in the insn.
1782 CLASS is the register class required for the reload.
1784 If FOR_REAL is >= 0, it is the number of the reload,
1785 and in some cases when it can be discovered that OUT doesn't need
1786 to be computed, clear out rld[FOR_REAL].out.
1788 If FOR_REAL is -1, this should not be done, because this call
1789 is just to see if a register can be found, not to find and install it.
1791 EARLYCLOBBER is non-zero if OUT is an earlyclobber operand. This
1792 puts an additional constraint on being able to use IN for OUT since
1793 IN must not appear elsewhere in the insn (it is assumed that IN itself
1794 is safe from the earlyclobber). */
1796 static rtx
1797 find_dummy_reload (real_in, real_out, inloc, outloc,
1798 inmode, outmode, class, for_real, earlyclobber)
1799 rtx real_in, real_out;
1800 rtx *inloc, *outloc;
1801 enum machine_mode inmode, outmode;
1802 enum reg_class class;
1803 int for_real;
1804 int earlyclobber;
1806 rtx in = real_in;
1807 rtx out = real_out;
1808 int in_offset = 0;
1809 int out_offset = 0;
1810 rtx value = 0;
1812 /* If operands exceed a word, we can't use either of them
1813 unless they have the same size. */
1814 if (GET_MODE_SIZE (outmode) != GET_MODE_SIZE (inmode)
1815 && (GET_MODE_SIZE (outmode) > UNITS_PER_WORD
1816 || GET_MODE_SIZE (inmode) > UNITS_PER_WORD))
1817 return 0;
1819 /* Note that {in,out}_offset are needed only when 'in' or 'out'
1820 respectively refers to a hard register. */
1822 /* Find the inside of any subregs. */
1823 while (GET_CODE (out) == SUBREG)
1825 if (GET_CODE (SUBREG_REG (out)) == REG
1826 && REGNO (SUBREG_REG (out)) < FIRST_PSEUDO_REGISTER)
1827 out_offset += subreg_regno_offset (REGNO (SUBREG_REG (out)),
1828 GET_MODE (SUBREG_REG (out)),
1829 SUBREG_BYTE (out),
1830 GET_MODE (out));
1831 out = SUBREG_REG (out);
1833 while (GET_CODE (in) == SUBREG)
1835 if (GET_CODE (SUBREG_REG (in)) == REG
1836 && REGNO (SUBREG_REG (in)) < FIRST_PSEUDO_REGISTER)
1837 in_offset += subreg_regno_offset (REGNO (SUBREG_REG (in)),
1838 GET_MODE (SUBREG_REG (in)),
1839 SUBREG_BYTE (in),
1840 GET_MODE (in));
1841 in = SUBREG_REG (in);
1844 /* Narrow down the reg class, the same way push_reload will;
1845 otherwise we might find a dummy now, but push_reload won't. */
1846 class = PREFERRED_RELOAD_CLASS (in, class);
1848 /* See if OUT will do. */
1849 if (GET_CODE (out) == REG
1850 && REGNO (out) < FIRST_PSEUDO_REGISTER)
1852 unsigned int regno = REGNO (out) + out_offset;
1853 unsigned int nwords = HARD_REGNO_NREGS (regno, outmode);
1854 rtx saved_rtx;
1856 /* When we consider whether the insn uses OUT,
1857 ignore references within IN. They don't prevent us
1858 from copying IN into OUT, because those refs would
1859 move into the insn that reloads IN.
1861 However, we only ignore IN in its role as this reload.
1862 If the insn uses IN elsewhere and it contains OUT,
1863 that counts. We can't be sure it's the "same" operand
1864 so it might not go through this reload. */
1865 saved_rtx = *inloc;
1866 *inloc = const0_rtx;
1868 if (regno < FIRST_PSEUDO_REGISTER
1869 && ! refers_to_regno_for_reload_p (regno, regno + nwords,
1870 PATTERN (this_insn), outloc))
1872 unsigned int i;
1874 for (i = 0; i < nwords; i++)
1875 if (! TEST_HARD_REG_BIT (reg_class_contents[(int) class],
1876 regno + i))
1877 break;
1879 if (i == nwords)
1881 if (GET_CODE (real_out) == REG)
1882 value = real_out;
1883 else
1884 value = gen_rtx_REG (outmode, regno);
1888 *inloc = saved_rtx;
1891 /* Consider using IN if OUT was not acceptable
1892 or if OUT dies in this insn (like the quotient in a divmod insn).
1893 We can't use IN unless it is dies in this insn,
1894 which means we must know accurately which hard regs are live.
1895 Also, the result can't go in IN if IN is used within OUT,
1896 or if OUT is an earlyclobber and IN appears elsewhere in the insn. */
1897 if (hard_regs_live_known
1898 && GET_CODE (in) == REG
1899 && REGNO (in) < FIRST_PSEUDO_REGISTER
1900 && (value == 0
1901 || find_reg_note (this_insn, REG_UNUSED, real_out))
1902 && find_reg_note (this_insn, REG_DEAD, real_in)
1903 && !fixed_regs[REGNO (in)]
1904 && HARD_REGNO_MODE_OK (REGNO (in),
1905 /* The only case where out and real_out might
1906 have different modes is where real_out
1907 is a subreg, and in that case, out
1908 has a real mode. */
1909 (GET_MODE (out) != VOIDmode
1910 ? GET_MODE (out) : outmode)))
1912 unsigned int regno = REGNO (in) + in_offset;
1913 unsigned int nwords = HARD_REGNO_NREGS (regno, inmode);
1915 if (! refers_to_regno_for_reload_p (regno, regno + nwords, out, (rtx*)0)
1916 && ! hard_reg_set_here_p (regno, regno + nwords,
1917 PATTERN (this_insn))
1918 && (! earlyclobber
1919 || ! refers_to_regno_for_reload_p (regno, regno + nwords,
1920 PATTERN (this_insn), inloc)))
1922 unsigned int i;
1924 for (i = 0; i < nwords; i++)
1925 if (! TEST_HARD_REG_BIT (reg_class_contents[(int) class],
1926 regno + i))
1927 break;
1929 if (i == nwords)
1931 /* If we were going to use OUT as the reload reg
1932 and changed our mind, it means OUT is a dummy that
1933 dies here. So don't bother copying value to it. */
1934 if (for_real >= 0 && value == real_out)
1935 rld[for_real].out = 0;
1936 if (GET_CODE (real_in) == REG)
1937 value = real_in;
1938 else
1939 value = gen_rtx_REG (inmode, regno);
1944 return value;
1947 /* This page contains subroutines used mainly for determining
1948 whether the IN or an OUT of a reload can serve as the
1949 reload register. */
1951 /* Return 1 if X is an operand of an insn that is being earlyclobbered. */
1954 earlyclobber_operand_p (x)
1955 rtx x;
1957 int i;
1959 for (i = 0; i < n_earlyclobbers; i++)
1960 if (reload_earlyclobbers[i] == x)
1961 return 1;
1963 return 0;
1966 /* Return 1 if expression X alters a hard reg in the range
1967 from BEG_REGNO (inclusive) to END_REGNO (exclusive),
1968 either explicitly or in the guise of a pseudo-reg allocated to REGNO.
1969 X should be the body of an instruction. */
1971 static int
1972 hard_reg_set_here_p (beg_regno, end_regno, x)
1973 unsigned int beg_regno, end_regno;
1974 rtx x;
1976 if (GET_CODE (x) == SET || GET_CODE (x) == CLOBBER)
1978 register rtx op0 = SET_DEST (x);
1980 while (GET_CODE (op0) == SUBREG)
1981 op0 = SUBREG_REG (op0);
1982 if (GET_CODE (op0) == REG)
1984 unsigned int r = REGNO (op0);
1986 /* See if this reg overlaps range under consideration. */
1987 if (r < end_regno
1988 && r + HARD_REGNO_NREGS (r, GET_MODE (op0)) > beg_regno)
1989 return 1;
1992 else if (GET_CODE (x) == PARALLEL)
1994 register int i = XVECLEN (x, 0) - 1;
1996 for (; i >= 0; i--)
1997 if (hard_reg_set_here_p (beg_regno, end_regno, XVECEXP (x, 0, i)))
1998 return 1;
2001 return 0;
2004 /* Return 1 if ADDR is a valid memory address for mode MODE,
2005 and check that each pseudo reg has the proper kind of
2006 hard reg. */
2009 strict_memory_address_p (mode, addr)
2010 enum machine_mode mode ATTRIBUTE_UNUSED;
2011 register rtx addr;
2013 GO_IF_LEGITIMATE_ADDRESS (mode, addr, win);
2014 return 0;
2016 win:
2017 return 1;
2020 /* Like rtx_equal_p except that it allows a REG and a SUBREG to match
2021 if they are the same hard reg, and has special hacks for
2022 autoincrement and autodecrement.
2023 This is specifically intended for find_reloads to use
2024 in determining whether two operands match.
2025 X is the operand whose number is the lower of the two.
2027 The value is 2 if Y contains a pre-increment that matches
2028 a non-incrementing address in X. */
2030 /* ??? To be completely correct, we should arrange to pass
2031 for X the output operand and for Y the input operand.
2032 For now, we assume that the output operand has the lower number
2033 because that is natural in (SET output (... input ...)). */
2036 operands_match_p (x, y)
2037 register rtx x, y;
2039 register int i;
2040 register RTX_CODE code = GET_CODE (x);
2041 register const char *fmt;
2042 int success_2;
2044 if (x == y)
2045 return 1;
2046 if ((code == REG || (code == SUBREG && GET_CODE (SUBREG_REG (x)) == REG))
2047 && (GET_CODE (y) == REG || (GET_CODE (y) == SUBREG
2048 && GET_CODE (SUBREG_REG (y)) == REG)))
2050 register int j;
2052 if (code == SUBREG)
2054 i = REGNO (SUBREG_REG (x));
2055 if (i >= FIRST_PSEUDO_REGISTER)
2056 goto slow;
2057 i += subreg_regno_offset (REGNO (SUBREG_REG (x)),
2058 GET_MODE (SUBREG_REG (x)),
2059 SUBREG_BYTE (x),
2060 GET_MODE (x));
2062 else
2063 i = REGNO (x);
2065 if (GET_CODE (y) == SUBREG)
2067 j = REGNO (SUBREG_REG (y));
2068 if (j >= FIRST_PSEUDO_REGISTER)
2069 goto slow;
2070 j += subreg_regno_offset (REGNO (SUBREG_REG (y)),
2071 GET_MODE (SUBREG_REG (y)),
2072 SUBREG_BYTE (y),
2073 GET_MODE (y));
2075 else
2076 j = REGNO (y);
2078 /* On a WORDS_BIG_ENDIAN machine, point to the last register of a
2079 multiple hard register group, so that for example (reg:DI 0) and
2080 (reg:SI 1) will be considered the same register. */
2081 if (WORDS_BIG_ENDIAN && GET_MODE_SIZE (GET_MODE (x)) > UNITS_PER_WORD
2082 && i < FIRST_PSEUDO_REGISTER)
2083 i += (GET_MODE_SIZE (GET_MODE (x)) / UNITS_PER_WORD) - 1;
2084 if (WORDS_BIG_ENDIAN && GET_MODE_SIZE (GET_MODE (y)) > UNITS_PER_WORD
2085 && j < FIRST_PSEUDO_REGISTER)
2086 j += (GET_MODE_SIZE (GET_MODE (y)) / UNITS_PER_WORD) - 1;
2088 return i == j;
2090 /* If two operands must match, because they are really a single
2091 operand of an assembler insn, then two postincrements are invalid
2092 because the assembler insn would increment only once.
2093 On the other hand, an postincrement matches ordinary indexing
2094 if the postincrement is the output operand. */
2095 if (code == POST_DEC || code == POST_INC || code == POST_MODIFY)
2096 return operands_match_p (XEXP (x, 0), y);
2097 /* Two preincrements are invalid
2098 because the assembler insn would increment only once.
2099 On the other hand, an preincrement matches ordinary indexing
2100 if the preincrement is the input operand.
2101 In this case, return 2, since some callers need to do special
2102 things when this happens. */
2103 if (GET_CODE (y) == PRE_DEC || GET_CODE (y) == PRE_INC
2104 || GET_CODE (y) == PRE_MODIFY)
2105 return operands_match_p (x, XEXP (y, 0)) ? 2 : 0;
2107 slow:
2109 /* Now we have disposed of all the cases
2110 in which different rtx codes can match. */
2111 if (code != GET_CODE (y))
2112 return 0;
2113 if (code == LABEL_REF)
2114 return XEXP (x, 0) == XEXP (y, 0);
2115 if (code == SYMBOL_REF)
2116 return XSTR (x, 0) == XSTR (y, 0);
2118 /* (MULT:SI x y) and (MULT:HI x y) are NOT equivalent. */
2120 if (GET_MODE (x) != GET_MODE (y))
2121 return 0;
2123 /* Compare the elements. If any pair of corresponding elements
2124 fail to match, return 0 for the whole things. */
2126 success_2 = 0;
2127 fmt = GET_RTX_FORMAT (code);
2128 for (i = GET_RTX_LENGTH (code) - 1; i >= 0; i--)
2130 int val, j;
2131 switch (fmt[i])
2133 case 'w':
2134 if (XWINT (x, i) != XWINT (y, i))
2135 return 0;
2136 break;
2138 case 'i':
2139 if (XINT (x, i) != XINT (y, i))
2140 return 0;
2141 break;
2143 case 'e':
2144 val = operands_match_p (XEXP (x, i), XEXP (y, i));
2145 if (val == 0)
2146 return 0;
2147 /* If any subexpression returns 2,
2148 we should return 2 if we are successful. */
2149 if (val == 2)
2150 success_2 = 1;
2151 break;
2153 case '0':
2154 break;
2156 case 'E':
2157 if (XVECLEN (x, i) != XVECLEN (y, i))
2158 return 0;
2159 for (j = XVECLEN (x, i) - 1; j >= 0; --j)
2161 val = operands_match_p (XVECEXP (x, i, j), XVECEXP (y, i, j));
2162 if (val == 0)
2163 return 0;
2164 if (val == 2)
2165 success_2 = 1;
2167 break;
2169 /* It is believed that rtx's at this level will never
2170 contain anything but integers and other rtx's,
2171 except for within LABEL_REFs and SYMBOL_REFs. */
2172 default:
2173 abort ();
2176 return 1 + success_2;
2179 /* Describe the range of registers or memory referenced by X.
2180 If X is a register, set REG_FLAG and put the first register
2181 number into START and the last plus one into END.
2182 If X is a memory reference, put a base address into BASE
2183 and a range of integer offsets into START and END.
2184 If X is pushing on the stack, we can assume it causes no trouble,
2185 so we set the SAFE field. */
2187 static struct decomposition
2188 decompose (x)
2189 rtx x;
2191 struct decomposition val;
2192 int all_const = 0;
2194 val.reg_flag = 0;
2195 val.safe = 0;
2196 val.base = 0;
2197 if (GET_CODE (x) == MEM)
2199 rtx base = NULL_RTX, offset = 0;
2200 rtx addr = XEXP (x, 0);
2202 if (GET_CODE (addr) == PRE_DEC || GET_CODE (addr) == PRE_INC
2203 || GET_CODE (addr) == POST_DEC || GET_CODE (addr) == POST_INC)
2205 val.base = XEXP (addr, 0);
2206 val.start = -GET_MODE_SIZE (GET_MODE (x));
2207 val.end = GET_MODE_SIZE (GET_MODE (x));
2208 val.safe = REGNO (val.base) == STACK_POINTER_REGNUM;
2209 return val;
2212 if (GET_CODE (addr) == PRE_MODIFY || GET_CODE (addr) == POST_MODIFY)
2214 if (GET_CODE (XEXP (addr, 1)) == PLUS
2215 && XEXP (addr, 0) == XEXP (XEXP (addr, 1), 0)
2216 && CONSTANT_P (XEXP (XEXP (addr, 1), 1)))
2218 val.base = XEXP (addr, 0);
2219 val.start = -INTVAL (XEXP (XEXP (addr, 1), 1));
2220 val.end = INTVAL (XEXP (XEXP (addr, 1), 1));
2221 val.safe = REGNO (val.base) == STACK_POINTER_REGNUM;
2222 return val;
2226 if (GET_CODE (addr) == CONST)
2228 addr = XEXP (addr, 0);
2229 all_const = 1;
2231 if (GET_CODE (addr) == PLUS)
2233 if (CONSTANT_P (XEXP (addr, 0)))
2235 base = XEXP (addr, 1);
2236 offset = XEXP (addr, 0);
2238 else if (CONSTANT_P (XEXP (addr, 1)))
2240 base = XEXP (addr, 0);
2241 offset = XEXP (addr, 1);
2245 if (offset == 0)
2247 base = addr;
2248 offset = const0_rtx;
2250 if (GET_CODE (offset) == CONST)
2251 offset = XEXP (offset, 0);
2252 if (GET_CODE (offset) == PLUS)
2254 if (GET_CODE (XEXP (offset, 0)) == CONST_INT)
2256 base = gen_rtx_PLUS (GET_MODE (base), base, XEXP (offset, 1));
2257 offset = XEXP (offset, 0);
2259 else if (GET_CODE (XEXP (offset, 1)) == CONST_INT)
2261 base = gen_rtx_PLUS (GET_MODE (base), base, XEXP (offset, 0));
2262 offset = XEXP (offset, 1);
2264 else
2266 base = gen_rtx_PLUS (GET_MODE (base), base, offset);
2267 offset = const0_rtx;
2270 else if (GET_CODE (offset) != CONST_INT)
2272 base = gen_rtx_PLUS (GET_MODE (base), base, offset);
2273 offset = const0_rtx;
2276 if (all_const && GET_CODE (base) == PLUS)
2277 base = gen_rtx_CONST (GET_MODE (base), base);
2279 if (GET_CODE (offset) != CONST_INT)
2280 abort ();
2282 val.start = INTVAL (offset);
2283 val.end = val.start + GET_MODE_SIZE (GET_MODE (x));
2284 val.base = base;
2285 return val;
2287 else if (GET_CODE (x) == REG)
2289 val.reg_flag = 1;
2290 val.start = true_regnum (x);
2291 if (val.start < 0)
2293 /* A pseudo with no hard reg. */
2294 val.start = REGNO (x);
2295 val.end = val.start + 1;
2297 else
2298 /* A hard reg. */
2299 val.end = val.start + HARD_REGNO_NREGS (val.start, GET_MODE (x));
2301 else if (GET_CODE (x) == SUBREG)
2303 if (GET_CODE (SUBREG_REG (x)) != REG)
2304 /* This could be more precise, but it's good enough. */
2305 return decompose (SUBREG_REG (x));
2306 val.reg_flag = 1;
2307 val.start = true_regnum (x);
2308 if (val.start < 0)
2309 return decompose (SUBREG_REG (x));
2310 else
2311 /* A hard reg. */
2312 val.end = val.start + HARD_REGNO_NREGS (val.start, GET_MODE (x));
2314 else if (CONSTANT_P (x)
2315 /* This hasn't been assigned yet, so it can't conflict yet. */
2316 || GET_CODE (x) == SCRATCH)
2317 val.safe = 1;
2318 else
2319 abort ();
2320 return val;
2323 /* Return 1 if altering Y will not modify the value of X.
2324 Y is also described by YDATA, which should be decompose (Y). */
2326 static int
2327 immune_p (x, y, ydata)
2328 rtx x, y;
2329 struct decomposition ydata;
2331 struct decomposition xdata;
2333 if (ydata.reg_flag)
2334 return !refers_to_regno_for_reload_p (ydata.start, ydata.end, x, (rtx*)0);
2335 if (ydata.safe)
2336 return 1;
2338 if (GET_CODE (y) != MEM)
2339 abort ();
2340 /* If Y is memory and X is not, Y can't affect X. */
2341 if (GET_CODE (x) != MEM)
2342 return 1;
2344 xdata = decompose (x);
2346 if (! rtx_equal_p (xdata.base, ydata.base))
2348 /* If bases are distinct symbolic constants, there is no overlap. */
2349 if (CONSTANT_P (xdata.base) && CONSTANT_P (ydata.base))
2350 return 1;
2351 /* Constants and stack slots never overlap. */
2352 if (CONSTANT_P (xdata.base)
2353 && (ydata.base == frame_pointer_rtx
2354 || ydata.base == hard_frame_pointer_rtx
2355 || ydata.base == stack_pointer_rtx))
2356 return 1;
2357 if (CONSTANT_P (ydata.base)
2358 && (xdata.base == frame_pointer_rtx
2359 || xdata.base == hard_frame_pointer_rtx
2360 || xdata.base == stack_pointer_rtx))
2361 return 1;
2362 /* If either base is variable, we don't know anything. */
2363 return 0;
2366 return (xdata.start >= ydata.end || ydata.start >= xdata.end);
2369 /* Similar, but calls decompose. */
2372 safe_from_earlyclobber (op, clobber)
2373 rtx op, clobber;
2375 struct decomposition early_data;
2377 early_data = decompose (clobber);
2378 return immune_p (op, clobber, early_data);
2381 /* Main entry point of this file: search the body of INSN
2382 for values that need reloading and record them with push_reload.
2383 REPLACE nonzero means record also where the values occur
2384 so that subst_reloads can be used.
2386 IND_LEVELS says how many levels of indirection are supported by this
2387 machine; a value of zero means that a memory reference is not a valid
2388 memory address.
2390 LIVE_KNOWN says we have valid information about which hard
2391 regs are live at each point in the program; this is true when
2392 we are called from global_alloc but false when stupid register
2393 allocation has been done.
2395 RELOAD_REG_P if nonzero is a vector indexed by hard reg number
2396 which is nonnegative if the reg has been commandeered for reloading into.
2397 It is copied into STATIC_RELOAD_REG_P and referenced from there
2398 by various subroutines.
2400 Return TRUE if some operands need to be changed, because of swapping
2401 commutative operands, reg_equiv_address substitution, or whatever. */
2404 find_reloads (insn, replace, ind_levels, live_known, reload_reg_p)
2405 rtx insn;
2406 int replace, ind_levels;
2407 int live_known;
2408 short *reload_reg_p;
2410 register int insn_code_number;
2411 register int i, j;
2412 int noperands;
2413 /* These start out as the constraints for the insn
2414 and they are chewed up as we consider alternatives. */
2415 char *constraints[MAX_RECOG_OPERANDS];
2416 /* These are the preferred classes for an operand, or NO_REGS if it isn't
2417 a register. */
2418 enum reg_class preferred_class[MAX_RECOG_OPERANDS];
2419 char pref_or_nothing[MAX_RECOG_OPERANDS];
2420 /* Nonzero for a MEM operand whose entire address needs a reload. */
2421 int address_reloaded[MAX_RECOG_OPERANDS];
2422 /* Value of enum reload_type to use for operand. */
2423 enum reload_type operand_type[MAX_RECOG_OPERANDS];
2424 /* Value of enum reload_type to use within address of operand. */
2425 enum reload_type address_type[MAX_RECOG_OPERANDS];
2426 /* Save the usage of each operand. */
2427 enum reload_usage { RELOAD_READ, RELOAD_READ_WRITE, RELOAD_WRITE } modified[MAX_RECOG_OPERANDS];
2428 int no_input_reloads = 0, no_output_reloads = 0;
2429 int n_alternatives;
2430 int this_alternative[MAX_RECOG_OPERANDS];
2431 char this_alternative_match_win[MAX_RECOG_OPERANDS];
2432 char this_alternative_win[MAX_RECOG_OPERANDS];
2433 char this_alternative_offmemok[MAX_RECOG_OPERANDS];
2434 char this_alternative_earlyclobber[MAX_RECOG_OPERANDS];
2435 int this_alternative_matches[MAX_RECOG_OPERANDS];
2436 int swapped;
2437 int goal_alternative[MAX_RECOG_OPERANDS];
2438 int this_alternative_number;
2439 int goal_alternative_number = 0;
2440 int operand_reloadnum[MAX_RECOG_OPERANDS];
2441 int goal_alternative_matches[MAX_RECOG_OPERANDS];
2442 int goal_alternative_matched[MAX_RECOG_OPERANDS];
2443 char goal_alternative_match_win[MAX_RECOG_OPERANDS];
2444 char goal_alternative_win[MAX_RECOG_OPERANDS];
2445 char goal_alternative_offmemok[MAX_RECOG_OPERANDS];
2446 char goal_alternative_earlyclobber[MAX_RECOG_OPERANDS];
2447 int goal_alternative_swapped;
2448 int best;
2449 int commutative;
2450 char operands_match[MAX_RECOG_OPERANDS][MAX_RECOG_OPERANDS];
2451 rtx substed_operand[MAX_RECOG_OPERANDS];
2452 rtx body = PATTERN (insn);
2453 rtx set = single_set (insn);
2454 int goal_earlyclobber = 0, this_earlyclobber;
2455 enum machine_mode operand_mode[MAX_RECOG_OPERANDS];
2456 int retval = 0;
2458 this_insn = insn;
2459 n_reloads = 0;
2460 n_replacements = 0;
2461 n_earlyclobbers = 0;
2462 replace_reloads = replace;
2463 hard_regs_live_known = live_known;
2464 static_reload_reg_p = reload_reg_p;
2466 /* JUMP_INSNs and CALL_INSNs are not allowed to have any output reloads;
2467 neither are insns that SET cc0. Insns that use CC0 are not allowed
2468 to have any input reloads. */
2469 if (GET_CODE (insn) == JUMP_INSN || GET_CODE (insn) == CALL_INSN)
2470 no_output_reloads = 1;
2472 #ifdef HAVE_cc0
2473 if (reg_referenced_p (cc0_rtx, PATTERN (insn)))
2474 no_input_reloads = 1;
2475 if (reg_set_p (cc0_rtx, PATTERN (insn)))
2476 no_output_reloads = 1;
2477 #endif
2479 #ifdef SECONDARY_MEMORY_NEEDED
2480 /* The eliminated forms of any secondary memory locations are per-insn, so
2481 clear them out here. */
2483 memset ((char *) secondary_memlocs_elim, 0, sizeof secondary_memlocs_elim);
2484 #endif
2486 /* Dispose quickly of (set (reg..) (reg..)) if both have hard regs and it
2487 is cheap to move between them. If it is not, there may not be an insn
2488 to do the copy, so we may need a reload. */
2489 if (GET_CODE (body) == SET
2490 && GET_CODE (SET_DEST (body)) == REG
2491 && REGNO (SET_DEST (body)) < FIRST_PSEUDO_REGISTER
2492 && GET_CODE (SET_SRC (body)) == REG
2493 && REGNO (SET_SRC (body)) < FIRST_PSEUDO_REGISTER
2494 && REGISTER_MOVE_COST (GET_MODE (SET_SRC (body)),
2495 REGNO_REG_CLASS (REGNO (SET_SRC (body))),
2496 REGNO_REG_CLASS (REGNO (SET_DEST (body)))) == 2)
2497 return 0;
2499 extract_insn (insn);
2501 noperands = reload_n_operands = recog_data.n_operands;
2502 n_alternatives = recog_data.n_alternatives;
2504 /* Just return "no reloads" if insn has no operands with constraints. */
2505 if (noperands == 0 || n_alternatives == 0)
2506 return 0;
2508 insn_code_number = INSN_CODE (insn);
2509 this_insn_is_asm = insn_code_number < 0;
2511 memcpy (operand_mode, recog_data.operand_mode,
2512 noperands * sizeof (enum machine_mode));
2513 memcpy (constraints, recog_data.constraints, noperands * sizeof (char *));
2515 commutative = -1;
2517 /* If we will need to know, later, whether some pair of operands
2518 are the same, we must compare them now and save the result.
2519 Reloading the base and index registers will clobber them
2520 and afterward they will fail to match. */
2522 for (i = 0; i < noperands; i++)
2524 register char *p;
2525 register int c;
2527 substed_operand[i] = recog_data.operand[i];
2528 p = constraints[i];
2530 modified[i] = RELOAD_READ;
2532 /* Scan this operand's constraint to see if it is an output operand,
2533 an in-out operand, is commutative, or should match another. */
2535 while ((c = *p++))
2537 if (c == '=')
2538 modified[i] = RELOAD_WRITE;
2539 else if (c == '+')
2540 modified[i] = RELOAD_READ_WRITE;
2541 else if (c == '%')
2543 /* The last operand should not be marked commutative. */
2544 if (i == noperands - 1)
2545 abort ();
2547 commutative = i;
2549 else if (c >= '0' && c <= '9')
2551 c -= '0';
2552 operands_match[c][i]
2553 = operands_match_p (recog_data.operand[c],
2554 recog_data.operand[i]);
2556 /* An operand may not match itself. */
2557 if (c == i)
2558 abort ();
2560 /* If C can be commuted with C+1, and C might need to match I,
2561 then C+1 might also need to match I. */
2562 if (commutative >= 0)
2564 if (c == commutative || c == commutative + 1)
2566 int other = c + (c == commutative ? 1 : -1);
2567 operands_match[other][i]
2568 = operands_match_p (recog_data.operand[other],
2569 recog_data.operand[i]);
2571 if (i == commutative || i == commutative + 1)
2573 int other = i + (i == commutative ? 1 : -1);
2574 operands_match[c][other]
2575 = operands_match_p (recog_data.operand[c],
2576 recog_data.operand[other]);
2578 /* Note that C is supposed to be less than I.
2579 No need to consider altering both C and I because in
2580 that case we would alter one into the other. */
2586 /* Examine each operand that is a memory reference or memory address
2587 and reload parts of the addresses into index registers.
2588 Also here any references to pseudo regs that didn't get hard regs
2589 but are equivalent to constants get replaced in the insn itself
2590 with those constants. Nobody will ever see them again.
2592 Finally, set up the preferred classes of each operand. */
2594 for (i = 0; i < noperands; i++)
2596 register RTX_CODE code = GET_CODE (recog_data.operand[i]);
2598 address_reloaded[i] = 0;
2599 operand_type[i] = (modified[i] == RELOAD_READ ? RELOAD_FOR_INPUT
2600 : modified[i] == RELOAD_WRITE ? RELOAD_FOR_OUTPUT
2601 : RELOAD_OTHER);
2602 address_type[i]
2603 = (modified[i] == RELOAD_READ ? RELOAD_FOR_INPUT_ADDRESS
2604 : modified[i] == RELOAD_WRITE ? RELOAD_FOR_OUTPUT_ADDRESS
2605 : RELOAD_OTHER);
2607 if (*constraints[i] == 0)
2608 /* Ignore things like match_operator operands. */
2610 else if (constraints[i][0] == 'p')
2612 find_reloads_address (VOIDmode, (rtx*)0,
2613 recog_data.operand[i],
2614 recog_data.operand_loc[i],
2615 i, operand_type[i], ind_levels, insn);
2617 /* If we now have a simple operand where we used to have a
2618 PLUS or MULT, re-recognize and try again. */
2619 if ((GET_RTX_CLASS (GET_CODE (*recog_data.operand_loc[i])) == 'o'
2620 || GET_CODE (*recog_data.operand_loc[i]) == SUBREG)
2621 && (GET_CODE (recog_data.operand[i]) == MULT
2622 || GET_CODE (recog_data.operand[i]) == PLUS))
2624 INSN_CODE (insn) = -1;
2625 retval = find_reloads (insn, replace, ind_levels, live_known,
2626 reload_reg_p);
2627 return retval;
2630 recog_data.operand[i] = *recog_data.operand_loc[i];
2631 substed_operand[i] = recog_data.operand[i];
2633 else if (code == MEM)
2635 address_reloaded[i]
2636 = find_reloads_address (GET_MODE (recog_data.operand[i]),
2637 recog_data.operand_loc[i],
2638 XEXP (recog_data.operand[i], 0),
2639 &XEXP (recog_data.operand[i], 0),
2640 i, address_type[i], ind_levels, insn);
2641 recog_data.operand[i] = *recog_data.operand_loc[i];
2642 substed_operand[i] = recog_data.operand[i];
2644 else if (code == SUBREG)
2646 rtx reg = SUBREG_REG (recog_data.operand[i]);
2647 rtx op
2648 = find_reloads_toplev (recog_data.operand[i], i, address_type[i],
2649 ind_levels,
2650 set != 0
2651 && &SET_DEST (set) == recog_data.operand_loc[i],
2652 insn,
2653 &address_reloaded[i]);
2655 /* If we made a MEM to load (a part of) the stackslot of a pseudo
2656 that didn't get a hard register, emit a USE with a REG_EQUAL
2657 note in front so that we might inherit a previous, possibly
2658 wider reload. */
2660 if (replace
2661 && GET_CODE (op) == MEM
2662 && GET_CODE (reg) == REG
2663 && (GET_MODE_SIZE (GET_MODE (reg))
2664 >= GET_MODE_SIZE (GET_MODE (op))))
2665 REG_NOTES (emit_insn_before (gen_rtx_USE (VOIDmode, reg), insn))
2666 = gen_rtx_EXPR_LIST (REG_EQUAL,
2667 reg_equiv_memory_loc[REGNO (reg)], NULL_RTX);
2669 substed_operand[i] = recog_data.operand[i] = op;
2671 else if (code == PLUS || GET_RTX_CLASS (code) == '1')
2672 /* We can get a PLUS as an "operand" as a result of register
2673 elimination. See eliminate_regs and gen_reload. We handle
2674 a unary operator by reloading the operand. */
2675 substed_operand[i] = recog_data.operand[i]
2676 = find_reloads_toplev (recog_data.operand[i], i, address_type[i],
2677 ind_levels, 0, insn,
2678 &address_reloaded[i]);
2679 else if (code == REG)
2681 /* This is equivalent to calling find_reloads_toplev.
2682 The code is duplicated for speed.
2683 When we find a pseudo always equivalent to a constant,
2684 we replace it by the constant. We must be sure, however,
2685 that we don't try to replace it in the insn in which it
2686 is being set. */
2687 register int regno = REGNO (recog_data.operand[i]);
2688 if (reg_equiv_constant[regno] != 0
2689 && (set == 0 || &SET_DEST (set) != recog_data.operand_loc[i]))
2691 /* Record the existing mode so that the check if constants are
2692 allowed will work when operand_mode isn't specified. */
2694 if (operand_mode[i] == VOIDmode)
2695 operand_mode[i] = GET_MODE (recog_data.operand[i]);
2697 substed_operand[i] = recog_data.operand[i]
2698 = reg_equiv_constant[regno];
2700 if (reg_equiv_memory_loc[regno] != 0
2701 && (reg_equiv_address[regno] != 0 || num_not_at_initial_offset))
2702 /* We need not give a valid is_set_dest argument since the case
2703 of a constant equivalence was checked above. */
2704 substed_operand[i] = recog_data.operand[i]
2705 = find_reloads_toplev (recog_data.operand[i], i, address_type[i],
2706 ind_levels, 0, insn,
2707 &address_reloaded[i]);
2709 /* If the operand is still a register (we didn't replace it with an
2710 equivalent), get the preferred class to reload it into. */
2711 code = GET_CODE (recog_data.operand[i]);
2712 preferred_class[i]
2713 = ((code == REG && REGNO (recog_data.operand[i])
2714 >= FIRST_PSEUDO_REGISTER)
2715 ? reg_preferred_class (REGNO (recog_data.operand[i]))
2716 : NO_REGS);
2717 pref_or_nothing[i]
2718 = (code == REG
2719 && REGNO (recog_data.operand[i]) >= FIRST_PSEUDO_REGISTER
2720 && reg_alternate_class (REGNO (recog_data.operand[i])) == NO_REGS);
2723 /* If this is simply a copy from operand 1 to operand 0, merge the
2724 preferred classes for the operands. */
2725 if (set != 0 && noperands >= 2 && recog_data.operand[0] == SET_DEST (set)
2726 && recog_data.operand[1] == SET_SRC (set))
2728 preferred_class[0] = preferred_class[1]
2729 = reg_class_subunion[(int) preferred_class[0]][(int) preferred_class[1]];
2730 pref_or_nothing[0] |= pref_or_nothing[1];
2731 pref_or_nothing[1] |= pref_or_nothing[0];
2734 /* Now see what we need for pseudo-regs that didn't get hard regs
2735 or got the wrong kind of hard reg. For this, we must consider
2736 all the operands together against the register constraints. */
2738 best = MAX_RECOG_OPERANDS * 2 + 600;
2740 swapped = 0;
2741 goal_alternative_swapped = 0;
2742 try_swapped:
2744 /* The constraints are made of several alternatives.
2745 Each operand's constraint looks like foo,bar,... with commas
2746 separating the alternatives. The first alternatives for all
2747 operands go together, the second alternatives go together, etc.
2749 First loop over alternatives. */
2751 for (this_alternative_number = 0;
2752 this_alternative_number < n_alternatives;
2753 this_alternative_number++)
2755 /* Loop over operands for one constraint alternative. */
2756 /* LOSERS counts those that don't fit this alternative
2757 and would require loading. */
2758 int losers = 0;
2759 /* BAD is set to 1 if it some operand can't fit this alternative
2760 even after reloading. */
2761 int bad = 0;
2762 /* REJECT is a count of how undesirable this alternative says it is
2763 if any reloading is required. If the alternative matches exactly
2764 then REJECT is ignored, but otherwise it gets this much
2765 counted against it in addition to the reloading needed. Each
2766 ? counts three times here since we want the disparaging caused by
2767 a bad register class to only count 1/3 as much. */
2768 int reject = 0;
2770 this_earlyclobber = 0;
2772 for (i = 0; i < noperands; i++)
2774 register char *p = constraints[i];
2775 register int win = 0;
2776 int did_match = 0;
2777 /* 0 => this operand can be reloaded somehow for this alternative. */
2778 int badop = 1;
2779 /* 0 => this operand can be reloaded if the alternative allows regs. */
2780 int winreg = 0;
2781 int c;
2782 register rtx operand = recog_data.operand[i];
2783 int offset = 0;
2784 /* Nonzero means this is a MEM that must be reloaded into a reg
2785 regardless of what the constraint says. */
2786 int force_reload = 0;
2787 int offmemok = 0;
2788 /* Nonzero if a constant forced into memory would be OK for this
2789 operand. */
2790 int constmemok = 0;
2791 int earlyclobber = 0;
2793 /* If the predicate accepts a unary operator, it means that
2794 we need to reload the operand, but do not do this for
2795 match_operator and friends. */
2796 if (GET_RTX_CLASS (GET_CODE (operand)) == '1' && *p != 0)
2797 operand = XEXP (operand, 0);
2799 /* If the operand is a SUBREG, extract
2800 the REG or MEM (or maybe even a constant) within.
2801 (Constants can occur as a result of reg_equiv_constant.) */
2803 while (GET_CODE (operand) == SUBREG)
2805 /* Offset only matters when operand is a REG and
2806 it is a hard reg. This is because it is passed
2807 to reg_fits_class_p if it is a REG and all pseudos
2808 return 0 from that function. */
2809 if (GET_CODE (SUBREG_REG (operand)) == REG
2810 && REGNO (SUBREG_REG (operand)) < FIRST_PSEUDO_REGISTER)
2812 offset += subreg_regno_offset (REGNO (SUBREG_REG (operand)),
2813 GET_MODE (SUBREG_REG (operand)),
2814 SUBREG_BYTE (operand),
2815 GET_MODE (operand));
2817 operand = SUBREG_REG (operand);
2818 /* Force reload if this is a constant or PLUS or if there may
2819 be a problem accessing OPERAND in the outer mode. */
2820 if (CONSTANT_P (operand)
2821 || GET_CODE (operand) == PLUS
2822 /* We must force a reload of paradoxical SUBREGs
2823 of a MEM because the alignment of the inner value
2824 may not be enough to do the outer reference. On
2825 big-endian machines, it may also reference outside
2826 the object.
2828 On machines that extend byte operations and we have a
2829 SUBREG where both the inner and outer modes are no wider
2830 than a word and the inner mode is narrower, is integral,
2831 and gets extended when loaded from memory, combine.c has
2832 made assumptions about the behavior of the machine in such
2833 register access. If the data is, in fact, in memory we
2834 must always load using the size assumed to be in the
2835 register and let the insn do the different-sized
2836 accesses.
2838 This is doubly true if WORD_REGISTER_OPERATIONS. In
2839 this case eliminate_regs has left non-paradoxical
2840 subregs for push_reloads to see. Make sure it does
2841 by forcing the reload.
2843 ??? When is it right at this stage to have a subreg
2844 of a mem that is _not_ to be handled specialy? IMO
2845 those should have been reduced to just a mem. */
2846 || ((GET_CODE (operand) == MEM
2847 || (GET_CODE (operand)== REG
2848 && REGNO (operand) >= FIRST_PSEUDO_REGISTER))
2849 #ifndef WORD_REGISTER_OPERATIONS
2850 && (((GET_MODE_BITSIZE (GET_MODE (operand))
2851 < BIGGEST_ALIGNMENT)
2852 && (GET_MODE_SIZE (operand_mode[i])
2853 > GET_MODE_SIZE (GET_MODE (operand))))
2854 || (GET_CODE (operand) == MEM && BYTES_BIG_ENDIAN)
2855 #ifdef LOAD_EXTEND_OP
2856 || (GET_MODE_SIZE (operand_mode[i]) <= UNITS_PER_WORD
2857 && (GET_MODE_SIZE (GET_MODE (operand))
2858 <= UNITS_PER_WORD)
2859 && (GET_MODE_SIZE (operand_mode[i])
2860 > GET_MODE_SIZE (GET_MODE (operand)))
2861 && INTEGRAL_MODE_P (GET_MODE (operand))
2862 && LOAD_EXTEND_OP (GET_MODE (operand)) != NIL)
2863 #endif
2865 #endif
2867 /* This following hunk of code should no longer be
2868 needed at all with SUBREG_BYTE. If you need this
2869 code back, please explain to me why so I can
2870 fix the real problem. -DaveM */
2871 #if 0
2872 /* Subreg of a hard reg which can't handle the subreg's mode
2873 or which would handle that mode in the wrong number of
2874 registers for subregging to work. */
2875 || (GET_CODE (operand) == REG
2876 && REGNO (operand) < FIRST_PSEUDO_REGISTER
2877 && ((GET_MODE_SIZE (operand_mode[i]) <= UNITS_PER_WORD
2878 && (GET_MODE_SIZE (GET_MODE (operand))
2879 > UNITS_PER_WORD)
2880 && ((GET_MODE_SIZE (GET_MODE (operand))
2881 / UNITS_PER_WORD)
2882 != HARD_REGNO_NREGS (REGNO (operand),
2883 GET_MODE (operand))))
2884 || ! HARD_REGNO_MODE_OK (REGNO (operand) + offset,
2885 operand_mode[i])))
2886 #endif
2888 force_reload = 1;
2891 this_alternative[i] = (int) NO_REGS;
2892 this_alternative_win[i] = 0;
2893 this_alternative_match_win[i] = 0;
2894 this_alternative_offmemok[i] = 0;
2895 this_alternative_earlyclobber[i] = 0;
2896 this_alternative_matches[i] = -1;
2898 /* An empty constraint or empty alternative
2899 allows anything which matched the pattern. */
2900 if (*p == 0 || *p == ',')
2901 win = 1, badop = 0;
2903 /* Scan this alternative's specs for this operand;
2904 set WIN if the operand fits any letter in this alternative.
2905 Otherwise, clear BADOP if this operand could
2906 fit some letter after reloads,
2907 or set WINREG if this operand could fit after reloads
2908 provided the constraint allows some registers. */
2910 while (*p && (c = *p++) != ',')
2911 switch (c)
2913 case '=': case '+': case '*':
2914 break;
2916 case '%':
2917 /* The last operand should not be marked commutative. */
2918 if (i != noperands - 1)
2919 commutative = i;
2920 break;
2922 case '?':
2923 reject += 6;
2924 break;
2926 case '!':
2927 reject = 600;
2928 break;
2930 case '#':
2931 /* Ignore rest of this alternative as far as
2932 reloading is concerned. */
2933 while (*p && *p != ',')
2934 p++;
2935 break;
2937 case '0': case '1': case '2': case '3': case '4':
2938 case '5': case '6': case '7': case '8': case '9':
2940 c -= '0';
2941 this_alternative_matches[i] = c;
2942 /* We are supposed to match a previous operand.
2943 If we do, we win if that one did.
2944 If we do not, count both of the operands as losers.
2945 (This is too conservative, since most of the time
2946 only a single reload insn will be needed to make
2947 the two operands win. As a result, this alternative
2948 may be rejected when it is actually desirable.) */
2949 if ((swapped && (c != commutative || i != commutative + 1))
2950 /* If we are matching as if two operands were swapped,
2951 also pretend that operands_match had been computed
2952 with swapped.
2953 But if I is the second of those and C is the first,
2954 don't exchange them, because operands_match is valid
2955 only on one side of its diagonal. */
2956 ? (operands_match
2957 [(c == commutative || c == commutative + 1)
2958 ? 2 * commutative + 1 - c : c]
2959 [(i == commutative || i == commutative + 1)
2960 ? 2 * commutative + 1 - i : i])
2961 : operands_match[c][i])
2963 /* If we are matching a non-offsettable address where an
2964 offsettable address was expected, then we must reject
2965 this combination, because we can't reload it. */
2966 if (this_alternative_offmemok[c]
2967 && GET_CODE (recog_data.operand[c]) == MEM
2968 && this_alternative[c] == (int) NO_REGS
2969 && ! this_alternative_win[c])
2970 bad = 1;
2972 did_match = this_alternative_win[c];
2974 else
2976 /* Operands don't match. */
2977 rtx value;
2978 /* Retroactively mark the operand we had to match
2979 as a loser, if it wasn't already. */
2980 if (this_alternative_win[c])
2981 losers++;
2982 this_alternative_win[c] = 0;
2983 if (this_alternative[c] == (int) NO_REGS)
2984 bad = 1;
2985 /* But count the pair only once in the total badness of
2986 this alternative, if the pair can be a dummy reload. */
2987 value
2988 = find_dummy_reload (recog_data.operand[i],
2989 recog_data.operand[c],
2990 recog_data.operand_loc[i],
2991 recog_data.operand_loc[c],
2992 operand_mode[i], operand_mode[c],
2993 this_alternative[c], -1,
2994 this_alternative_earlyclobber[c]);
2996 if (value != 0)
2997 losers--;
2999 /* This can be fixed with reloads if the operand
3000 we are supposed to match can be fixed with reloads. */
3001 badop = 0;
3002 this_alternative[i] = this_alternative[c];
3004 /* If we have to reload this operand and some previous
3005 operand also had to match the same thing as this
3006 operand, we don't know how to do that. So reject this
3007 alternative. */
3008 if (! did_match || force_reload)
3009 for (j = 0; j < i; j++)
3010 if (this_alternative_matches[j]
3011 == this_alternative_matches[i])
3012 badop = 1;
3013 break;
3015 case 'p':
3016 /* All necessary reloads for an address_operand
3017 were handled in find_reloads_address. */
3018 this_alternative[i] = (int) BASE_REG_CLASS;
3019 win = 1;
3020 break;
3022 case 'm':
3023 if (force_reload)
3024 break;
3025 if (GET_CODE (operand) == MEM
3026 || (GET_CODE (operand) == REG
3027 && REGNO (operand) >= FIRST_PSEUDO_REGISTER
3028 && reg_renumber[REGNO (operand)] < 0))
3029 win = 1;
3030 if (CONSTANT_P (operand)
3031 /* force_const_mem does not accept HIGH. */
3032 && GET_CODE (operand) != HIGH)
3033 badop = 0;
3034 constmemok = 1;
3035 break;
3037 case '<':
3038 if (GET_CODE (operand) == MEM
3039 && ! address_reloaded[i]
3040 && (GET_CODE (XEXP (operand, 0)) == PRE_DEC
3041 || GET_CODE (XEXP (operand, 0)) == POST_DEC))
3042 win = 1;
3043 break;
3045 case '>':
3046 if (GET_CODE (operand) == MEM
3047 && ! address_reloaded[i]
3048 && (GET_CODE (XEXP (operand, 0)) == PRE_INC
3049 || GET_CODE (XEXP (operand, 0)) == POST_INC))
3050 win = 1;
3051 break;
3053 /* Memory operand whose address is not offsettable. */
3054 case 'V':
3055 if (force_reload)
3056 break;
3057 if (GET_CODE (operand) == MEM
3058 && ! (ind_levels ? offsettable_memref_p (operand)
3059 : offsettable_nonstrict_memref_p (operand))
3060 /* Certain mem addresses will become offsettable
3061 after they themselves are reloaded. This is important;
3062 we don't want our own handling of unoffsettables
3063 to override the handling of reg_equiv_address. */
3064 && !(GET_CODE (XEXP (operand, 0)) == REG
3065 && (ind_levels == 0
3066 || reg_equiv_address[REGNO (XEXP (operand, 0))] != 0)))
3067 win = 1;
3068 break;
3070 /* Memory operand whose address is offsettable. */
3071 case 'o':
3072 if (force_reload)
3073 break;
3074 if ((GET_CODE (operand) == MEM
3075 /* If IND_LEVELS, find_reloads_address won't reload a
3076 pseudo that didn't get a hard reg, so we have to
3077 reject that case. */
3078 && ((ind_levels ? offsettable_memref_p (operand)
3079 : offsettable_nonstrict_memref_p (operand))
3080 /* A reloaded address is offsettable because it is now
3081 just a simple register indirect. */
3082 || address_reloaded[i]))
3083 || (GET_CODE (operand) == REG
3084 && REGNO (operand) >= FIRST_PSEUDO_REGISTER
3085 && reg_renumber[REGNO (operand)] < 0
3086 /* If reg_equiv_address is nonzero, we will be
3087 loading it into a register; hence it will be
3088 offsettable, but we cannot say that reg_equiv_mem
3089 is offsettable without checking. */
3090 && ((reg_equiv_mem[REGNO (operand)] != 0
3091 && offsettable_memref_p (reg_equiv_mem[REGNO (operand)]))
3092 || (reg_equiv_address[REGNO (operand)] != 0))))
3093 win = 1;
3094 /* force_const_mem does not accept HIGH. */
3095 if ((CONSTANT_P (operand) && GET_CODE (operand) != HIGH)
3096 || GET_CODE (operand) == MEM)
3097 badop = 0;
3098 constmemok = 1;
3099 offmemok = 1;
3100 break;
3102 case '&':
3103 /* Output operand that is stored before the need for the
3104 input operands (and their index registers) is over. */
3105 earlyclobber = 1, this_earlyclobber = 1;
3106 break;
3108 case 'E':
3109 #ifndef REAL_ARITHMETIC
3110 /* Match any floating double constant, but only if
3111 we can examine the bits of it reliably. */
3112 if ((HOST_FLOAT_FORMAT != TARGET_FLOAT_FORMAT
3113 || HOST_BITS_PER_WIDE_INT != BITS_PER_WORD)
3114 && GET_MODE (operand) != VOIDmode && ! flag_pretend_float)
3115 break;
3116 #endif
3117 if (GET_CODE (operand) == CONST_DOUBLE)
3118 win = 1;
3119 break;
3121 case 'F':
3122 if (GET_CODE (operand) == CONST_DOUBLE)
3123 win = 1;
3124 break;
3126 case 'G':
3127 case 'H':
3128 if (GET_CODE (operand) == CONST_DOUBLE
3129 && CONST_DOUBLE_OK_FOR_LETTER_P (operand, c))
3130 win = 1;
3131 break;
3133 case 's':
3134 if (GET_CODE (operand) == CONST_INT
3135 || (GET_CODE (operand) == CONST_DOUBLE
3136 && GET_MODE (operand) == VOIDmode))
3137 break;
3138 case 'i':
3139 if (CONSTANT_P (operand)
3140 #ifdef LEGITIMATE_PIC_OPERAND_P
3141 && (! flag_pic || LEGITIMATE_PIC_OPERAND_P (operand))
3142 #endif
3144 win = 1;
3145 break;
3147 case 'n':
3148 if (GET_CODE (operand) == CONST_INT
3149 || (GET_CODE (operand) == CONST_DOUBLE
3150 && GET_MODE (operand) == VOIDmode))
3151 win = 1;
3152 break;
3154 case 'I':
3155 case 'J':
3156 case 'K':
3157 case 'L':
3158 case 'M':
3159 case 'N':
3160 case 'O':
3161 case 'P':
3162 if (GET_CODE (operand) == CONST_INT
3163 && CONST_OK_FOR_LETTER_P (INTVAL (operand), c))
3164 win = 1;
3165 break;
3167 case 'X':
3168 win = 1;
3169 break;
3171 case 'g':
3172 if (! force_reload
3173 /* A PLUS is never a valid operand, but reload can make
3174 it from a register when eliminating registers. */
3175 && GET_CODE (operand) != PLUS
3176 /* A SCRATCH is not a valid operand. */
3177 && GET_CODE (operand) != SCRATCH
3178 #ifdef LEGITIMATE_PIC_OPERAND_P
3179 && (! CONSTANT_P (operand)
3180 || ! flag_pic
3181 || LEGITIMATE_PIC_OPERAND_P (operand))
3182 #endif
3183 && (GENERAL_REGS == ALL_REGS
3184 || GET_CODE (operand) != REG
3185 || (REGNO (operand) >= FIRST_PSEUDO_REGISTER
3186 && reg_renumber[REGNO (operand)] < 0)))
3187 win = 1;
3188 /* Drop through into 'r' case. */
3190 case 'r':
3191 this_alternative[i]
3192 = (int) reg_class_subunion[this_alternative[i]][(int) GENERAL_REGS];
3193 goto reg;
3195 default:
3196 if (REG_CLASS_FROM_LETTER (c) == NO_REGS)
3198 #ifdef EXTRA_CONSTRAINT
3199 if (EXTRA_CONSTRAINT (operand, c))
3200 win = 1;
3201 #endif
3202 break;
3205 this_alternative[i]
3206 = (int) reg_class_subunion[this_alternative[i]][(int) REG_CLASS_FROM_LETTER (c)];
3207 reg:
3208 if (GET_MODE (operand) == BLKmode)
3209 break;
3210 winreg = 1;
3211 if (GET_CODE (operand) == REG
3212 && reg_fits_class_p (operand, this_alternative[i],
3213 offset, GET_MODE (recog_data.operand[i])))
3214 win = 1;
3215 break;
3218 constraints[i] = p;
3220 /* If this operand could be handled with a reg,
3221 and some reg is allowed, then this operand can be handled. */
3222 if (winreg && this_alternative[i] != (int) NO_REGS)
3223 badop = 0;
3225 /* Record which operands fit this alternative. */
3226 this_alternative_earlyclobber[i] = earlyclobber;
3227 if (win && ! force_reload)
3228 this_alternative_win[i] = 1;
3229 else if (did_match && ! force_reload)
3230 this_alternative_match_win[i] = 1;
3231 else
3233 int const_to_mem = 0;
3235 this_alternative_offmemok[i] = offmemok;
3236 losers++;
3237 if (badop)
3238 bad = 1;
3239 /* Alternative loses if it has no regs for a reg operand. */
3240 if (GET_CODE (operand) == REG
3241 && this_alternative[i] == (int) NO_REGS
3242 && this_alternative_matches[i] < 0)
3243 bad = 1;
3245 /* If this is a constant that is reloaded into the desired
3246 class by copying it to memory first, count that as another
3247 reload. This is consistent with other code and is
3248 required to avoid choosing another alternative when
3249 the constant is moved into memory by this function on
3250 an early reload pass. Note that the test here is
3251 precisely the same as in the code below that calls
3252 force_const_mem. */
3253 if (CONSTANT_P (operand)
3254 /* force_const_mem does not accept HIGH. */
3255 && GET_CODE (operand) != HIGH
3256 && ((PREFERRED_RELOAD_CLASS (operand,
3257 (enum reg_class) this_alternative[i])
3258 == NO_REGS)
3259 || no_input_reloads)
3260 && operand_mode[i] != VOIDmode)
3262 const_to_mem = 1;
3263 if (this_alternative[i] != (int) NO_REGS)
3264 losers++;
3267 /* If we can't reload this value at all, reject this
3268 alternative. Note that we could also lose due to
3269 LIMIT_RELOAD_RELOAD_CLASS, but we don't check that
3270 here. */
3272 if (! CONSTANT_P (operand)
3273 && (enum reg_class) this_alternative[i] != NO_REGS
3274 && (PREFERRED_RELOAD_CLASS (operand,
3275 (enum reg_class) this_alternative[i])
3276 == NO_REGS))
3277 bad = 1;
3279 /* Alternative loses if it requires a type of reload not
3280 permitted for this insn. We can always reload SCRATCH
3281 and objects with a REG_UNUSED note. */
3282 else if (GET_CODE (operand) != SCRATCH
3283 && modified[i] != RELOAD_READ && no_output_reloads
3284 && ! find_reg_note (insn, REG_UNUSED, operand))
3285 bad = 1;
3286 else if (modified[i] != RELOAD_WRITE && no_input_reloads
3287 && ! const_to_mem)
3288 bad = 1;
3290 /* We prefer to reload pseudos over reloading other things,
3291 since such reloads may be able to be eliminated later.
3292 If we are reloading a SCRATCH, we won't be generating any
3293 insns, just using a register, so it is also preferred.
3294 So bump REJECT in other cases. Don't do this in the
3295 case where we are forcing a constant into memory and
3296 it will then win since we don't want to have a different
3297 alternative match then. */
3298 if (! (GET_CODE (operand) == REG
3299 && REGNO (operand) >= FIRST_PSEUDO_REGISTER)
3300 && GET_CODE (operand) != SCRATCH
3301 && ! (const_to_mem && constmemok))
3302 reject += 2;
3304 /* Input reloads can be inherited more often than output
3305 reloads can be removed, so penalize output reloads. */
3306 if (operand_type[i] != RELOAD_FOR_INPUT
3307 && GET_CODE (operand) != SCRATCH)
3308 reject++;
3311 /* If this operand is a pseudo register that didn't get a hard
3312 reg and this alternative accepts some register, see if the
3313 class that we want is a subset of the preferred class for this
3314 register. If not, but it intersects that class, use the
3315 preferred class instead. If it does not intersect the preferred
3316 class, show that usage of this alternative should be discouraged;
3317 it will be discouraged more still if the register is `preferred
3318 or nothing'. We do this because it increases the chance of
3319 reusing our spill register in a later insn and avoiding a pair
3320 of memory stores and loads.
3322 Don't bother with this if this alternative will accept this
3323 operand.
3325 Don't do this for a multiword operand, since it is only a
3326 small win and has the risk of requiring more spill registers,
3327 which could cause a large loss.
3329 Don't do this if the preferred class has only one register
3330 because we might otherwise exhaust the class. */
3332 if (! win && ! did_match
3333 && this_alternative[i] != (int) NO_REGS
3334 && GET_MODE_SIZE (operand_mode[i]) <= UNITS_PER_WORD
3335 && reg_class_size[(int) preferred_class[i]] > 1)
3337 if (! reg_class_subset_p (this_alternative[i],
3338 preferred_class[i]))
3340 /* Since we don't have a way of forming the intersection,
3341 we just do something special if the preferred class
3342 is a subset of the class we have; that's the most
3343 common case anyway. */
3344 if (reg_class_subset_p (preferred_class[i],
3345 this_alternative[i]))
3346 this_alternative[i] = (int) preferred_class[i];
3347 else
3348 reject += (2 + 2 * pref_or_nothing[i]);
3353 /* Now see if any output operands that are marked "earlyclobber"
3354 in this alternative conflict with any input operands
3355 or any memory addresses. */
3357 for (i = 0; i < noperands; i++)
3358 if (this_alternative_earlyclobber[i]
3359 && (this_alternative_win[i] || this_alternative_match_win[i]))
3361 struct decomposition early_data;
3363 early_data = decompose (recog_data.operand[i]);
3365 if (modified[i] == RELOAD_READ)
3366 abort ();
3368 if (this_alternative[i] == NO_REGS)
3370 this_alternative_earlyclobber[i] = 0;
3371 if (this_insn_is_asm)
3372 error_for_asm (this_insn,
3373 "`&' constraint used with no register class");
3374 else
3375 abort ();
3378 for (j = 0; j < noperands; j++)
3379 /* Is this an input operand or a memory ref? */
3380 if ((GET_CODE (recog_data.operand[j]) == MEM
3381 || modified[j] != RELOAD_WRITE)
3382 && j != i
3383 /* Ignore things like match_operator operands. */
3384 && *recog_data.constraints[j] != 0
3385 /* Don't count an input operand that is constrained to match
3386 the early clobber operand. */
3387 && ! (this_alternative_matches[j] == i
3388 && rtx_equal_p (recog_data.operand[i],
3389 recog_data.operand[j]))
3390 /* Is it altered by storing the earlyclobber operand? */
3391 && !immune_p (recog_data.operand[j], recog_data.operand[i],
3392 early_data))
3394 /* If the output is in a single-reg class,
3395 it's costly to reload it, so reload the input instead. */
3396 if (reg_class_size[this_alternative[i]] == 1
3397 && (GET_CODE (recog_data.operand[j]) == REG
3398 || GET_CODE (recog_data.operand[j]) == SUBREG))
3400 losers++;
3401 this_alternative_win[j] = 0;
3402 this_alternative_match_win[j] = 0;
3404 else
3405 break;
3407 /* If an earlyclobber operand conflicts with something,
3408 it must be reloaded, so request this and count the cost. */
3409 if (j != noperands)
3411 losers++;
3412 this_alternative_win[i] = 0;
3413 this_alternative_match_win[j] = 0;
3414 for (j = 0; j < noperands; j++)
3415 if (this_alternative_matches[j] == i
3416 && this_alternative_match_win[j])
3418 this_alternative_win[j] = 0;
3419 this_alternative_match_win[j] = 0;
3420 losers++;
3425 /* If one alternative accepts all the operands, no reload required,
3426 choose that alternative; don't consider the remaining ones. */
3427 if (losers == 0)
3429 /* Unswap these so that they are never swapped at `finish'. */
3430 if (commutative >= 0)
3432 recog_data.operand[commutative] = substed_operand[commutative];
3433 recog_data.operand[commutative + 1]
3434 = substed_operand[commutative + 1];
3436 for (i = 0; i < noperands; i++)
3438 goal_alternative_win[i] = this_alternative_win[i];
3439 goal_alternative_match_win[i] = this_alternative_match_win[i];
3440 goal_alternative[i] = this_alternative[i];
3441 goal_alternative_offmemok[i] = this_alternative_offmemok[i];
3442 goal_alternative_matches[i] = this_alternative_matches[i];
3443 goal_alternative_earlyclobber[i]
3444 = this_alternative_earlyclobber[i];
3446 goal_alternative_number = this_alternative_number;
3447 goal_alternative_swapped = swapped;
3448 goal_earlyclobber = this_earlyclobber;
3449 goto finish;
3452 /* REJECT, set by the ! and ? constraint characters and when a register
3453 would be reloaded into a non-preferred class, discourages the use of
3454 this alternative for a reload goal. REJECT is incremented by six
3455 for each ? and two for each non-preferred class. */
3456 losers = losers * 6 + reject;
3458 /* If this alternative can be made to work by reloading,
3459 and it needs less reloading than the others checked so far,
3460 record it as the chosen goal for reloading. */
3461 if (! bad && best > losers)
3463 for (i = 0; i < noperands; i++)
3465 goal_alternative[i] = this_alternative[i];
3466 goal_alternative_win[i] = this_alternative_win[i];
3467 goal_alternative_match_win[i] = this_alternative_match_win[i];
3468 goal_alternative_offmemok[i] = this_alternative_offmemok[i];
3469 goal_alternative_matches[i] = this_alternative_matches[i];
3470 goal_alternative_earlyclobber[i]
3471 = this_alternative_earlyclobber[i];
3473 goal_alternative_swapped = swapped;
3474 best = losers;
3475 goal_alternative_number = this_alternative_number;
3476 goal_earlyclobber = this_earlyclobber;
3480 /* If insn is commutative (it's safe to exchange a certain pair of operands)
3481 then we need to try each alternative twice,
3482 the second time matching those two operands
3483 as if we had exchanged them.
3484 To do this, really exchange them in operands.
3486 If we have just tried the alternatives the second time,
3487 return operands to normal and drop through. */
3489 if (commutative >= 0)
3491 swapped = !swapped;
3492 if (swapped)
3494 register enum reg_class tclass;
3495 register int t;
3497 recog_data.operand[commutative] = substed_operand[commutative + 1];
3498 recog_data.operand[commutative + 1] = substed_operand[commutative];
3500 tclass = preferred_class[commutative];
3501 preferred_class[commutative] = preferred_class[commutative + 1];
3502 preferred_class[commutative + 1] = tclass;
3504 t = pref_or_nothing[commutative];
3505 pref_or_nothing[commutative] = pref_or_nothing[commutative + 1];
3506 pref_or_nothing[commutative + 1] = t;
3508 memcpy (constraints, recog_data.constraints,
3509 noperands * sizeof (char *));
3510 goto try_swapped;
3512 else
3514 recog_data.operand[commutative] = substed_operand[commutative];
3515 recog_data.operand[commutative + 1]
3516 = substed_operand[commutative + 1];
3520 /* The operands don't meet the constraints.
3521 goal_alternative describes the alternative
3522 that we could reach by reloading the fewest operands.
3523 Reload so as to fit it. */
3525 if (best == MAX_RECOG_OPERANDS * 2 + 600)
3527 /* No alternative works with reloads?? */
3528 if (insn_code_number >= 0)
3529 fatal_insn ("Unable to generate reloads for:", insn);
3530 error_for_asm (insn, "inconsistent operand constraints in an `asm'");
3531 /* Avoid further trouble with this insn. */
3532 PATTERN (insn) = gen_rtx_USE (VOIDmode, const0_rtx);
3533 n_reloads = 0;
3534 return 0;
3537 /* Jump to `finish' from above if all operands are valid already.
3538 In that case, goal_alternative_win is all 1. */
3539 finish:
3541 /* Right now, for any pair of operands I and J that are required to match,
3542 with I < J,
3543 goal_alternative_matches[J] is I.
3544 Set up goal_alternative_matched as the inverse function:
3545 goal_alternative_matched[I] = J. */
3547 for (i = 0; i < noperands; i++)
3548 goal_alternative_matched[i] = -1;
3550 for (i = 0; i < noperands; i++)
3551 if (! goal_alternative_win[i]
3552 && goal_alternative_matches[i] >= 0)
3553 goal_alternative_matched[goal_alternative_matches[i]] = i;
3555 for (i = 0; i < noperands; i++)
3556 goal_alternative_win[i] |= goal_alternative_match_win[i];
3558 /* If the best alternative is with operands 1 and 2 swapped,
3559 consider them swapped before reporting the reloads. Update the
3560 operand numbers of any reloads already pushed. */
3562 if (goal_alternative_swapped)
3564 register rtx tem;
3566 tem = substed_operand[commutative];
3567 substed_operand[commutative] = substed_operand[commutative + 1];
3568 substed_operand[commutative + 1] = tem;
3569 tem = recog_data.operand[commutative];
3570 recog_data.operand[commutative] = recog_data.operand[commutative + 1];
3571 recog_data.operand[commutative + 1] = tem;
3572 tem = *recog_data.operand_loc[commutative];
3573 *recog_data.operand_loc[commutative]
3574 = *recog_data.operand_loc[commutative + 1];
3575 *recog_data.operand_loc[commutative + 1] = tem;
3577 for (i = 0; i < n_reloads; i++)
3579 if (rld[i].opnum == commutative)
3580 rld[i].opnum = commutative + 1;
3581 else if (rld[i].opnum == commutative + 1)
3582 rld[i].opnum = commutative;
3586 for (i = 0; i < noperands; i++)
3588 operand_reloadnum[i] = -1;
3590 /* If this is an earlyclobber operand, we need to widen the scope.
3591 The reload must remain valid from the start of the insn being
3592 reloaded until after the operand is stored into its destination.
3593 We approximate this with RELOAD_OTHER even though we know that we
3594 do not conflict with RELOAD_FOR_INPUT_ADDRESS reloads.
3596 One special case that is worth checking is when we have an
3597 output that is earlyclobber but isn't used past the insn (typically
3598 a SCRATCH). In this case, we only need have the reload live
3599 through the insn itself, but not for any of our input or output
3600 reloads.
3601 But we must not accidentally narrow the scope of an existing
3602 RELOAD_OTHER reload - leave these alone.
3604 In any case, anything needed to address this operand can remain
3605 however they were previously categorized. */
3607 if (goal_alternative_earlyclobber[i] && operand_type[i] != RELOAD_OTHER)
3608 operand_type[i]
3609 = (find_reg_note (insn, REG_UNUSED, recog_data.operand[i])
3610 ? RELOAD_FOR_INSN : RELOAD_OTHER);
3613 /* Any constants that aren't allowed and can't be reloaded
3614 into registers are here changed into memory references. */
3615 for (i = 0; i < noperands; i++)
3616 if (! goal_alternative_win[i]
3617 && CONSTANT_P (recog_data.operand[i])
3618 /* force_const_mem does not accept HIGH. */
3619 && GET_CODE (recog_data.operand[i]) != HIGH
3620 && ((PREFERRED_RELOAD_CLASS (recog_data.operand[i],
3621 (enum reg_class) goal_alternative[i])
3622 == NO_REGS)
3623 || no_input_reloads)
3624 && operand_mode[i] != VOIDmode)
3626 substed_operand[i] = recog_data.operand[i]
3627 = find_reloads_toplev (force_const_mem (operand_mode[i],
3628 recog_data.operand[i]),
3629 i, address_type[i], ind_levels, 0, insn,
3630 NULL);
3631 if (alternative_allows_memconst (recog_data.constraints[i],
3632 goal_alternative_number))
3633 goal_alternative_win[i] = 1;
3636 /* Record the values of the earlyclobber operands for the caller. */
3637 if (goal_earlyclobber)
3638 for (i = 0; i < noperands; i++)
3639 if (goal_alternative_earlyclobber[i])
3640 reload_earlyclobbers[n_earlyclobbers++] = recog_data.operand[i];
3642 /* Now record reloads for all the operands that need them. */
3643 for (i = 0; i < noperands; i++)
3644 if (! goal_alternative_win[i])
3646 /* Operands that match previous ones have already been handled. */
3647 if (goal_alternative_matches[i] >= 0)
3649 /* Handle an operand with a nonoffsettable address
3650 appearing where an offsettable address will do
3651 by reloading the address into a base register.
3653 ??? We can also do this when the operand is a register and
3654 reg_equiv_mem is not offsettable, but this is a bit tricky,
3655 so we don't bother with it. It may not be worth doing. */
3656 else if (goal_alternative_matched[i] == -1
3657 && goal_alternative_offmemok[i]
3658 && GET_CODE (recog_data.operand[i]) == MEM)
3660 operand_reloadnum[i]
3661 = push_reload (XEXP (recog_data.operand[i], 0), NULL_RTX,
3662 &XEXP (recog_data.operand[i], 0), (rtx*)0,
3663 BASE_REG_CLASS,
3664 GET_MODE (XEXP (recog_data.operand[i], 0)),
3665 VOIDmode, 0, 0, i, RELOAD_FOR_INPUT);
3666 rld[operand_reloadnum[i]].inc
3667 = GET_MODE_SIZE (GET_MODE (recog_data.operand[i]));
3669 /* If this operand is an output, we will have made any
3670 reloads for its address as RELOAD_FOR_OUTPUT_ADDRESS, but
3671 now we are treating part of the operand as an input, so
3672 we must change these to RELOAD_FOR_INPUT_ADDRESS. */
3674 if (modified[i] == RELOAD_WRITE)
3676 for (j = 0; j < n_reloads; j++)
3678 if (rld[j].opnum == i)
3680 if (rld[j].when_needed == RELOAD_FOR_OUTPUT_ADDRESS)
3681 rld[j].when_needed = RELOAD_FOR_INPUT_ADDRESS;
3682 else if (rld[j].when_needed
3683 == RELOAD_FOR_OUTADDR_ADDRESS)
3684 rld[j].when_needed = RELOAD_FOR_INPADDR_ADDRESS;
3689 else if (goal_alternative_matched[i] == -1)
3691 operand_reloadnum[i]
3692 = push_reload ((modified[i] != RELOAD_WRITE
3693 ? recog_data.operand[i] : 0),
3694 (modified[i] != RELOAD_READ
3695 ? recog_data.operand[i] : 0),
3696 (modified[i] != RELOAD_WRITE
3697 ? recog_data.operand_loc[i] : 0),
3698 (modified[i] != RELOAD_READ
3699 ? recog_data.operand_loc[i] : 0),
3700 (enum reg_class) goal_alternative[i],
3701 (modified[i] == RELOAD_WRITE
3702 ? VOIDmode : operand_mode[i]),
3703 (modified[i] == RELOAD_READ
3704 ? VOIDmode : operand_mode[i]),
3705 (insn_code_number < 0 ? 0
3706 : insn_data[insn_code_number].operand[i].strict_low),
3707 0, i, operand_type[i]);
3709 /* In a matching pair of operands, one must be input only
3710 and the other must be output only.
3711 Pass the input operand as IN and the other as OUT. */
3712 else if (modified[i] == RELOAD_READ
3713 && modified[goal_alternative_matched[i]] == RELOAD_WRITE)
3715 operand_reloadnum[i]
3716 = push_reload (recog_data.operand[i],
3717 recog_data.operand[goal_alternative_matched[i]],
3718 recog_data.operand_loc[i],
3719 recog_data.operand_loc[goal_alternative_matched[i]],
3720 (enum reg_class) goal_alternative[i],
3721 operand_mode[i],
3722 operand_mode[goal_alternative_matched[i]],
3723 0, 0, i, RELOAD_OTHER);
3724 operand_reloadnum[goal_alternative_matched[i]] = output_reloadnum;
3726 else if (modified[i] == RELOAD_WRITE
3727 && modified[goal_alternative_matched[i]] == RELOAD_READ)
3729 operand_reloadnum[goal_alternative_matched[i]]
3730 = push_reload (recog_data.operand[goal_alternative_matched[i]],
3731 recog_data.operand[i],
3732 recog_data.operand_loc[goal_alternative_matched[i]],
3733 recog_data.operand_loc[i],
3734 (enum reg_class) goal_alternative[i],
3735 operand_mode[goal_alternative_matched[i]],
3736 operand_mode[i],
3737 0, 0, i, RELOAD_OTHER);
3738 operand_reloadnum[i] = output_reloadnum;
3740 else if (insn_code_number >= 0)
3741 abort ();
3742 else
3744 error_for_asm (insn, "inconsistent operand constraints in an `asm'");
3745 /* Avoid further trouble with this insn. */
3746 PATTERN (insn) = gen_rtx_USE (VOIDmode, const0_rtx);
3747 n_reloads = 0;
3748 return 0;
3751 else if (goal_alternative_matched[i] < 0
3752 && goal_alternative_matches[i] < 0
3753 && optimize)
3755 /* For each non-matching operand that's a MEM or a pseudo-register
3756 that didn't get a hard register, make an optional reload.
3757 This may get done even if the insn needs no reloads otherwise. */
3759 rtx operand = recog_data.operand[i];
3761 while (GET_CODE (operand) == SUBREG)
3762 operand = SUBREG_REG (operand);
3763 if ((GET_CODE (operand) == MEM
3764 || (GET_CODE (operand) == REG
3765 && REGNO (operand) >= FIRST_PSEUDO_REGISTER))
3766 /* If this is only for an output, the optional reload would not
3767 actually cause us to use a register now, just note that
3768 something is stored here. */
3769 && ((enum reg_class) goal_alternative[i] != NO_REGS
3770 || modified[i] == RELOAD_WRITE)
3771 && ! no_input_reloads
3772 /* An optional output reload might allow to delete INSN later.
3773 We mustn't make in-out reloads on insns that are not permitted
3774 output reloads.
3775 If this is an asm, we can't delete it; we must not even call
3776 push_reload for an optional output reload in this case,
3777 because we can't be sure that the constraint allows a register,
3778 and push_reload verifies the constraints for asms. */
3779 && (modified[i] == RELOAD_READ
3780 || (! no_output_reloads && ! this_insn_is_asm)))
3781 operand_reloadnum[i]
3782 = push_reload ((modified[i] != RELOAD_WRITE
3783 ? recog_data.operand[i] : 0),
3784 (modified[i] != RELOAD_READ
3785 ? recog_data.operand[i] : 0),
3786 (modified[i] != RELOAD_WRITE
3787 ? recog_data.operand_loc[i] : 0),
3788 (modified[i] != RELOAD_READ
3789 ? recog_data.operand_loc[i] : 0),
3790 (enum reg_class) goal_alternative[i],
3791 (modified[i] == RELOAD_WRITE
3792 ? VOIDmode : operand_mode[i]),
3793 (modified[i] == RELOAD_READ
3794 ? VOIDmode : operand_mode[i]),
3795 (insn_code_number < 0 ? 0
3796 : insn_data[insn_code_number].operand[i].strict_low),
3797 1, i, operand_type[i]);
3798 /* If a memory reference remains (either as a MEM or a pseudo that
3799 did not get a hard register), yet we can't make an optional
3800 reload, check if this is actually a pseudo register reference;
3801 we then need to emit a USE and/or a CLOBBER so that reload
3802 inheritance will do the right thing. */
3803 else if (replace
3804 && (GET_CODE (operand) == MEM
3805 || (GET_CODE (operand) == REG
3806 && REGNO (operand) >= FIRST_PSEUDO_REGISTER
3807 && reg_renumber [REGNO (operand)] < 0)))
3809 operand = *recog_data.operand_loc[i];
3811 while (GET_CODE (operand) == SUBREG)
3812 operand = SUBREG_REG (operand);
3813 if (GET_CODE (operand) == REG)
3815 if (modified[i] != RELOAD_WRITE)
3816 emit_insn_before (gen_rtx_USE (VOIDmode, operand), insn);
3817 if (modified[i] != RELOAD_READ)
3818 emit_insn_after (gen_rtx_CLOBBER (VOIDmode, operand), insn);
3822 else if (goal_alternative_matches[i] >= 0
3823 && goal_alternative_win[goal_alternative_matches[i]]
3824 && modified[i] == RELOAD_READ
3825 && modified[goal_alternative_matches[i]] == RELOAD_WRITE
3826 && ! no_input_reloads && ! no_output_reloads
3827 && optimize)
3829 /* Similarly, make an optional reload for a pair of matching
3830 objects that are in MEM or a pseudo that didn't get a hard reg. */
3832 rtx operand = recog_data.operand[i];
3834 while (GET_CODE (operand) == SUBREG)
3835 operand = SUBREG_REG (operand);
3836 if ((GET_CODE (operand) == MEM
3837 || (GET_CODE (operand) == REG
3838 && REGNO (operand) >= FIRST_PSEUDO_REGISTER))
3839 && ((enum reg_class) goal_alternative[goal_alternative_matches[i]]
3840 != NO_REGS))
3841 operand_reloadnum[i] = operand_reloadnum[goal_alternative_matches[i]]
3842 = push_reload (recog_data.operand[goal_alternative_matches[i]],
3843 recog_data.operand[i],
3844 recog_data.operand_loc[goal_alternative_matches[i]],
3845 recog_data.operand_loc[i],
3846 (enum reg_class) goal_alternative[goal_alternative_matches[i]],
3847 operand_mode[goal_alternative_matches[i]],
3848 operand_mode[i],
3849 0, 1, goal_alternative_matches[i], RELOAD_OTHER);
3852 /* Perform whatever substitutions on the operands we are supposed
3853 to make due to commutativity or replacement of registers
3854 with equivalent constants or memory slots. */
3856 for (i = 0; i < noperands; i++)
3858 /* We only do this on the last pass through reload, because it is
3859 possible for some data (like reg_equiv_address) to be changed during
3860 later passes. Moreover, we loose the opportunity to get a useful
3861 reload_{in,out}_reg when we do these replacements. */
3863 if (replace)
3865 rtx substitution = substed_operand[i];
3867 *recog_data.operand_loc[i] = substitution;
3869 /* If we're replacing an operand with a LABEL_REF, we need
3870 to make sure that there's a REG_LABEL note attached to
3871 this instruction. */
3872 if (GET_CODE (insn) != JUMP_INSN
3873 && GET_CODE (substitution) == LABEL_REF
3874 && !find_reg_note (insn, REG_LABEL, XEXP (substitution, 0)))
3875 REG_NOTES (insn) = gen_rtx_INSN_LIST (REG_LABEL,
3876 XEXP (substitution, 0),
3877 REG_NOTES (insn));
3879 else
3880 retval |= (substed_operand[i] != *recog_data.operand_loc[i]);
3883 /* If this insn pattern contains any MATCH_DUP's, make sure that
3884 they will be substituted if the operands they match are substituted.
3885 Also do now any substitutions we already did on the operands.
3887 Don't do this if we aren't making replacements because we might be
3888 propagating things allocated by frame pointer elimination into places
3889 it doesn't expect. */
3891 if (insn_code_number >= 0 && replace)
3892 for (i = insn_data[insn_code_number].n_dups - 1; i >= 0; i--)
3894 int opno = recog_data.dup_num[i];
3895 *recog_data.dup_loc[i] = *recog_data.operand_loc[opno];
3896 if (operand_reloadnum[opno] >= 0)
3897 push_replacement (recog_data.dup_loc[i], operand_reloadnum[opno],
3898 insn_data[insn_code_number].operand[opno].mode);
3901 #if 0
3902 /* This loses because reloading of prior insns can invalidate the equivalence
3903 (or at least find_equiv_reg isn't smart enough to find it any more),
3904 causing this insn to need more reload regs than it needed before.
3905 It may be too late to make the reload regs available.
3906 Now this optimization is done safely in choose_reload_regs. */
3908 /* For each reload of a reg into some other class of reg,
3909 search for an existing equivalent reg (same value now) in the right class.
3910 We can use it as long as we don't need to change its contents. */
3911 for (i = 0; i < n_reloads; i++)
3912 if (rld[i].reg_rtx == 0
3913 && rld[i].in != 0
3914 && GET_CODE (rld[i].in) == REG
3915 && rld[i].out == 0)
3917 rld[i].reg_rtx
3918 = find_equiv_reg (rld[i].in, insn, rld[i].class, -1,
3919 static_reload_reg_p, 0, rld[i].inmode);
3920 /* Prevent generation of insn to load the value
3921 because the one we found already has the value. */
3922 if (rld[i].reg_rtx)
3923 rld[i].in = rld[i].reg_rtx;
3925 #endif
3927 /* Perhaps an output reload can be combined with another
3928 to reduce needs by one. */
3929 if (!goal_earlyclobber)
3930 combine_reloads ();
3932 /* If we have a pair of reloads for parts of an address, they are reloading
3933 the same object, the operands themselves were not reloaded, and they
3934 are for two operands that are supposed to match, merge the reloads and
3935 change the type of the surviving reload to RELOAD_FOR_OPERAND_ADDRESS. */
3937 for (i = 0; i < n_reloads; i++)
3939 int k;
3941 for (j = i + 1; j < n_reloads; j++)
3942 if ((rld[i].when_needed == RELOAD_FOR_INPUT_ADDRESS
3943 || rld[i].when_needed == RELOAD_FOR_OUTPUT_ADDRESS
3944 || rld[i].when_needed == RELOAD_FOR_INPADDR_ADDRESS
3945 || rld[i].when_needed == RELOAD_FOR_OUTADDR_ADDRESS)
3946 && (rld[j].when_needed == RELOAD_FOR_INPUT_ADDRESS
3947 || rld[j].when_needed == RELOAD_FOR_OUTPUT_ADDRESS
3948 || rld[j].when_needed == RELOAD_FOR_INPADDR_ADDRESS
3949 || rld[j].when_needed == RELOAD_FOR_OUTADDR_ADDRESS)
3950 && rtx_equal_p (rld[i].in, rld[j].in)
3951 && (operand_reloadnum[rld[i].opnum] < 0
3952 || rld[operand_reloadnum[rld[i].opnum]].optional)
3953 && (operand_reloadnum[rld[j].opnum] < 0
3954 || rld[operand_reloadnum[rld[j].opnum]].optional)
3955 && (goal_alternative_matches[rld[i].opnum] == rld[j].opnum
3956 || (goal_alternative_matches[rld[j].opnum]
3957 == rld[i].opnum)))
3959 for (k = 0; k < n_replacements; k++)
3960 if (replacements[k].what == j)
3961 replacements[k].what = i;
3963 if (rld[i].when_needed == RELOAD_FOR_INPADDR_ADDRESS
3964 || rld[i].when_needed == RELOAD_FOR_OUTADDR_ADDRESS)
3965 rld[i].when_needed = RELOAD_FOR_OPADDR_ADDR;
3966 else
3967 rld[i].when_needed = RELOAD_FOR_OPERAND_ADDRESS;
3968 rld[j].in = 0;
3972 /* Scan all the reloads and update their type.
3973 If a reload is for the address of an operand and we didn't reload
3974 that operand, change the type. Similarly, change the operand number
3975 of a reload when two operands match. If a reload is optional, treat it
3976 as though the operand isn't reloaded.
3978 ??? This latter case is somewhat odd because if we do the optional
3979 reload, it means the object is hanging around. Thus we need only
3980 do the address reload if the optional reload was NOT done.
3982 Change secondary reloads to be the address type of their operand, not
3983 the normal type.
3985 If an operand's reload is now RELOAD_OTHER, change any
3986 RELOAD_FOR_INPUT_ADDRESS reloads of that operand to
3987 RELOAD_FOR_OTHER_ADDRESS. */
3989 for (i = 0; i < n_reloads; i++)
3991 if (rld[i].secondary_p
3992 && rld[i].when_needed == operand_type[rld[i].opnum])
3993 rld[i].when_needed = address_type[rld[i].opnum];
3995 if ((rld[i].when_needed == RELOAD_FOR_INPUT_ADDRESS
3996 || rld[i].when_needed == RELOAD_FOR_OUTPUT_ADDRESS
3997 || rld[i].when_needed == RELOAD_FOR_INPADDR_ADDRESS
3998 || rld[i].when_needed == RELOAD_FOR_OUTADDR_ADDRESS)
3999 && (operand_reloadnum[rld[i].opnum] < 0
4000 || rld[operand_reloadnum[rld[i].opnum]].optional))
4002 /* If we have a secondary reload to go along with this reload,
4003 change its type to RELOAD_FOR_OPADDR_ADDR. */
4005 if ((rld[i].when_needed == RELOAD_FOR_INPUT_ADDRESS
4006 || rld[i].when_needed == RELOAD_FOR_INPADDR_ADDRESS)
4007 && rld[i].secondary_in_reload != -1)
4009 int secondary_in_reload = rld[i].secondary_in_reload;
4011 rld[secondary_in_reload].when_needed = RELOAD_FOR_OPADDR_ADDR;
4013 /* If there's a tertiary reload we have to change it also. */
4014 if (secondary_in_reload > 0
4015 && rld[secondary_in_reload].secondary_in_reload != -1)
4016 rld[rld[secondary_in_reload].secondary_in_reload].when_needed
4017 = RELOAD_FOR_OPADDR_ADDR;
4020 if ((rld[i].when_needed == RELOAD_FOR_OUTPUT_ADDRESS
4021 || rld[i].when_needed == RELOAD_FOR_OUTADDR_ADDRESS)
4022 && rld[i].secondary_out_reload != -1)
4024 int secondary_out_reload = rld[i].secondary_out_reload;
4026 rld[secondary_out_reload].when_needed = RELOAD_FOR_OPADDR_ADDR;
4028 /* If there's a tertiary reload we have to change it also. */
4029 if (secondary_out_reload
4030 && rld[secondary_out_reload].secondary_out_reload != -1)
4031 rld[rld[secondary_out_reload].secondary_out_reload].when_needed
4032 = RELOAD_FOR_OPADDR_ADDR;
4035 if (rld[i].when_needed == RELOAD_FOR_INPADDR_ADDRESS
4036 || rld[i].when_needed == RELOAD_FOR_OUTADDR_ADDRESS)
4037 rld[i].when_needed = RELOAD_FOR_OPADDR_ADDR;
4038 else
4039 rld[i].when_needed = RELOAD_FOR_OPERAND_ADDRESS;
4042 if ((rld[i].when_needed == RELOAD_FOR_INPUT_ADDRESS
4043 || rld[i].when_needed == RELOAD_FOR_INPADDR_ADDRESS)
4044 && operand_reloadnum[rld[i].opnum] >= 0
4045 && (rld[operand_reloadnum[rld[i].opnum]].when_needed
4046 == RELOAD_OTHER))
4047 rld[i].when_needed = RELOAD_FOR_OTHER_ADDRESS;
4049 if (goal_alternative_matches[rld[i].opnum] >= 0)
4050 rld[i].opnum = goal_alternative_matches[rld[i].opnum];
4053 /* Scan all the reloads, and check for RELOAD_FOR_OPERAND_ADDRESS reloads.
4054 If we have more than one, then convert all RELOAD_FOR_OPADDR_ADDR
4055 reloads to RELOAD_FOR_OPERAND_ADDRESS reloads.
4057 choose_reload_regs assumes that RELOAD_FOR_OPADDR_ADDR reloads never
4058 conflict with RELOAD_FOR_OPERAND_ADDRESS reloads. This is true for a
4059 single pair of RELOAD_FOR_OPADDR_ADDR/RELOAD_FOR_OPERAND_ADDRESS reloads.
4060 However, if there is more than one RELOAD_FOR_OPERAND_ADDRESS reload,
4061 then a RELOAD_FOR_OPADDR_ADDR reload conflicts with all
4062 RELOAD_FOR_OPERAND_ADDRESS reloads other than the one that uses it.
4063 This is complicated by the fact that a single operand can have more
4064 than one RELOAD_FOR_OPERAND_ADDRESS reload. It is very difficult to fix
4065 choose_reload_regs without affecting code quality, and cases that
4066 actually fail are extremely rare, so it turns out to be better to fix
4067 the problem here by not generating cases that choose_reload_regs will
4068 fail for. */
4069 /* There is a similar problem with RELOAD_FOR_INPUT_ADDRESS /
4070 RELOAD_FOR_OUTPUT_ADDRESS when there is more than one of a kind for
4071 a single operand.
4072 We can reduce the register pressure by exploiting that a
4073 RELOAD_FOR_X_ADDR_ADDR that precedes all RELOAD_FOR_X_ADDRESS reloads
4074 does not conflict with any of them, if it is only used for the first of
4075 the RELOAD_FOR_X_ADDRESS reloads. */
4077 int first_op_addr_num = -2;
4078 int first_inpaddr_num[MAX_RECOG_OPERANDS];
4079 int first_outpaddr_num[MAX_RECOG_OPERANDS];
4080 int need_change = 0;
4081 /* We use last_op_addr_reload and the contents of the above arrays
4082 first as flags - -2 means no instance encountered, -1 means exactly
4083 one instance encountered.
4084 If more than one instance has been encountered, we store the reload
4085 number of the first reload of the kind in question; reload numbers
4086 are known to be non-negative. */
4087 for (i = 0; i < noperands; i++)
4088 first_inpaddr_num[i] = first_outpaddr_num[i] = -2;
4089 for (i = n_reloads - 1; i >= 0; i--)
4091 switch (rld[i].when_needed)
4093 case RELOAD_FOR_OPERAND_ADDRESS:
4094 if (++first_op_addr_num >= 0)
4096 first_op_addr_num = i;
4097 need_change = 1;
4099 break;
4100 case RELOAD_FOR_INPUT_ADDRESS:
4101 if (++first_inpaddr_num[rld[i].opnum] >= 0)
4103 first_inpaddr_num[rld[i].opnum] = i;
4104 need_change = 1;
4106 break;
4107 case RELOAD_FOR_OUTPUT_ADDRESS:
4108 if (++first_outpaddr_num[rld[i].opnum] >= 0)
4110 first_outpaddr_num[rld[i].opnum] = i;
4111 need_change = 1;
4113 break;
4114 default:
4115 break;
4119 if (need_change)
4121 for (i = 0; i < n_reloads; i++)
4123 int first_num;
4124 enum reload_type type;
4126 switch (rld[i].when_needed)
4128 case RELOAD_FOR_OPADDR_ADDR:
4129 first_num = first_op_addr_num;
4130 type = RELOAD_FOR_OPERAND_ADDRESS;
4131 break;
4132 case RELOAD_FOR_INPADDR_ADDRESS:
4133 first_num = first_inpaddr_num[rld[i].opnum];
4134 type = RELOAD_FOR_INPUT_ADDRESS;
4135 break;
4136 case RELOAD_FOR_OUTADDR_ADDRESS:
4137 first_num = first_outpaddr_num[rld[i].opnum];
4138 type = RELOAD_FOR_OUTPUT_ADDRESS;
4139 break;
4140 default:
4141 continue;
4143 if (first_num < 0)
4144 continue;
4145 else if (i > first_num)
4146 rld[i].when_needed = type;
4147 else
4149 /* Check if the only TYPE reload that uses reload I is
4150 reload FIRST_NUM. */
4151 for (j = n_reloads - 1; j > first_num; j--)
4153 if (rld[j].when_needed == type
4154 && (rld[i].secondary_p
4155 ? rld[j].secondary_in_reload == i
4156 : reg_mentioned_p (rld[i].in, rld[j].in)))
4158 rld[i].when_needed = type;
4159 break;
4167 /* See if we have any reloads that are now allowed to be merged
4168 because we've changed when the reload is needed to
4169 RELOAD_FOR_OPERAND_ADDRESS or RELOAD_FOR_OTHER_ADDRESS. Only
4170 check for the most common cases. */
4172 for (i = 0; i < n_reloads; i++)
4173 if (rld[i].in != 0 && rld[i].out == 0
4174 && (rld[i].when_needed == RELOAD_FOR_OPERAND_ADDRESS
4175 || rld[i].when_needed == RELOAD_FOR_OPADDR_ADDR
4176 || rld[i].when_needed == RELOAD_FOR_OTHER_ADDRESS))
4177 for (j = 0; j < n_reloads; j++)
4178 if (i != j && rld[j].in != 0 && rld[j].out == 0
4179 && rld[j].when_needed == rld[i].when_needed
4180 && MATCHES (rld[i].in, rld[j].in)
4181 && rld[i].class == rld[j].class
4182 && !rld[i].nocombine && !rld[j].nocombine
4183 && rld[i].reg_rtx == rld[j].reg_rtx)
4185 rld[i].opnum = MIN (rld[i].opnum, rld[j].opnum);
4186 transfer_replacements (i, j);
4187 rld[j].in = 0;
4190 #ifdef HAVE_cc0
4191 /* If we made any reloads for addresses, see if they violate a
4192 "no input reloads" requirement for this insn. But loads that we
4193 do after the insn (such as for output addresses) are fine. */
4194 if (no_input_reloads)
4195 for (i = 0; i < n_reloads; i++)
4196 if (rld[i].in != 0
4197 && rld[i].when_needed != RELOAD_FOR_OUTADDR_ADDRESS
4198 && rld[i].when_needed != RELOAD_FOR_OUTPUT_ADDRESS)
4199 abort ();
4200 #endif
4202 /* Compute reload_mode and reload_nregs. */
4203 for (i = 0; i < n_reloads; i++)
4205 rld[i].mode
4206 = (rld[i].inmode == VOIDmode
4207 || (GET_MODE_SIZE (rld[i].outmode)
4208 > GET_MODE_SIZE (rld[i].inmode)))
4209 ? rld[i].outmode : rld[i].inmode;
4211 rld[i].nregs = CLASS_MAX_NREGS (rld[i].class, rld[i].mode);
4214 return retval;
4217 /* Return 1 if alternative number ALTNUM in constraint-string CONSTRAINT
4218 accepts a memory operand with constant address. */
4220 static int
4221 alternative_allows_memconst (constraint, altnum)
4222 const char *constraint;
4223 int altnum;
4225 register int c;
4226 /* Skip alternatives before the one requested. */
4227 while (altnum > 0)
4229 while (*constraint++ != ',');
4230 altnum--;
4232 /* Scan the requested alternative for 'm' or 'o'.
4233 If one of them is present, this alternative accepts memory constants. */
4234 while ((c = *constraint++) && c != ',' && c != '#')
4235 if (c == 'm' || c == 'o')
4236 return 1;
4237 return 0;
4240 /* Scan X for memory references and scan the addresses for reloading.
4241 Also checks for references to "constant" regs that we want to eliminate
4242 and replaces them with the values they stand for.
4243 We may alter X destructively if it contains a reference to such.
4244 If X is just a constant reg, we return the equivalent value
4245 instead of X.
4247 IND_LEVELS says how many levels of indirect addressing this machine
4248 supports.
4250 OPNUM and TYPE identify the purpose of the reload.
4252 IS_SET_DEST is true if X is the destination of a SET, which is not
4253 appropriate to be replaced by a constant.
4255 INSN, if nonzero, is the insn in which we do the reload. It is used
4256 to determine if we may generate output reloads, and where to put USEs
4257 for pseudos that we have to replace with stack slots.
4259 ADDRESS_RELOADED. If nonzero, is a pointer to where we put the
4260 result of find_reloads_address. */
4262 static rtx
4263 find_reloads_toplev (x, opnum, type, ind_levels, is_set_dest, insn,
4264 address_reloaded)
4265 rtx x;
4266 int opnum;
4267 enum reload_type type;
4268 int ind_levels;
4269 int is_set_dest;
4270 rtx insn;
4271 int *address_reloaded;
4273 register RTX_CODE code = GET_CODE (x);
4275 register const char *fmt = GET_RTX_FORMAT (code);
4276 register int i;
4277 int copied;
4279 if (code == REG)
4281 /* This code is duplicated for speed in find_reloads. */
4282 register int regno = REGNO (x);
4283 if (reg_equiv_constant[regno] != 0 && !is_set_dest)
4284 x = reg_equiv_constant[regno];
4285 #if 0
4286 /* This creates (subreg (mem...)) which would cause an unnecessary
4287 reload of the mem. */
4288 else if (reg_equiv_mem[regno] != 0)
4289 x = reg_equiv_mem[regno];
4290 #endif
4291 else if (reg_equiv_memory_loc[regno]
4292 && (reg_equiv_address[regno] != 0 || num_not_at_initial_offset))
4294 rtx mem = make_memloc (x, regno);
4295 if (reg_equiv_address[regno]
4296 || ! rtx_equal_p (mem, reg_equiv_mem[regno]))
4298 /* If this is not a toplevel operand, find_reloads doesn't see
4299 this substitution. We have to emit a USE of the pseudo so
4300 that delete_output_reload can see it. */
4301 if (replace_reloads && recog_data.operand[opnum] != x)
4302 emit_insn_before (gen_rtx_USE (VOIDmode, x), insn);
4303 x = mem;
4304 i = find_reloads_address (GET_MODE (x), &x, XEXP (x, 0), &XEXP (x, 0),
4305 opnum, type, ind_levels, insn);
4306 if (address_reloaded)
4307 *address_reloaded = i;
4310 return x;
4312 if (code == MEM)
4314 rtx tem = x;
4316 i = find_reloads_address (GET_MODE (x), &tem, XEXP (x, 0), &XEXP (x, 0),
4317 opnum, type, ind_levels, insn);
4318 if (address_reloaded)
4319 *address_reloaded = i;
4321 return tem;
4324 if (code == SUBREG && GET_CODE (SUBREG_REG (x)) == REG)
4326 /* Check for SUBREG containing a REG that's equivalent to a constant.
4327 If the constant has a known value, truncate it right now.
4328 Similarly if we are extracting a single-word of a multi-word
4329 constant. If the constant is symbolic, allow it to be substituted
4330 normally. push_reload will strip the subreg later. If the
4331 constant is VOIDmode, abort because we will lose the mode of
4332 the register (this should never happen because one of the cases
4333 above should handle it). */
4335 register int regno = REGNO (SUBREG_REG (x));
4336 rtx tem;
4338 if (subreg_lowpart_p (x)
4339 && regno >= FIRST_PSEUDO_REGISTER && reg_renumber[regno] < 0
4340 && reg_equiv_constant[regno] != 0
4341 && (tem = gen_lowpart_common (GET_MODE (x),
4342 reg_equiv_constant[regno])) != 0)
4343 return tem;
4345 if (GET_MODE_BITSIZE (GET_MODE (x)) == BITS_PER_WORD
4346 && regno >= FIRST_PSEUDO_REGISTER && reg_renumber[regno] < 0
4347 && reg_equiv_constant[regno] != 0
4348 && (tem = operand_subword (reg_equiv_constant[regno],
4349 SUBREG_BYTE (x) / UNITS_PER_WORD, 0,
4350 GET_MODE (SUBREG_REG (x)))) != 0)
4352 /* TEM is now a word sized constant for the bits from X that
4353 we wanted. However, TEM may be the wrong representation.
4355 Use gen_lowpart_common to convert a CONST_INT into a
4356 CONST_DOUBLE and vice versa as needed according to by the mode
4357 of the SUBREG. */
4358 tem = gen_lowpart_common (GET_MODE (x), tem);
4359 if (!tem)
4360 abort ();
4361 return tem;
4364 /* If the SUBREG is wider than a word, the above test will fail.
4365 For example, we might have a SImode SUBREG of a DImode SUBREG_REG
4366 for a 16 bit target, or a DImode SUBREG of a TImode SUBREG_REG for
4367 a 32 bit target. We still can - and have to - handle this
4368 for non-paradoxical subregs of CONST_INTs. */
4369 if (regno >= FIRST_PSEUDO_REGISTER && reg_renumber[regno] < 0
4370 && reg_equiv_constant[regno] != 0
4371 && GET_CODE (reg_equiv_constant[regno]) == CONST_INT
4372 && (GET_MODE_SIZE (GET_MODE (x))
4373 < GET_MODE_SIZE (GET_MODE (SUBREG_REG (x)))))
4375 int shift = SUBREG_BYTE (x) * BITS_PER_UNIT;
4376 if (WORDS_BIG_ENDIAN)
4377 shift = (GET_MODE_BITSIZE (GET_MODE (SUBREG_REG (x)))
4378 - GET_MODE_BITSIZE (GET_MODE (x))
4379 - shift);
4380 /* Here we use the knowledge that CONST_INTs have a
4381 HOST_WIDE_INT field. */
4382 if (shift >= HOST_BITS_PER_WIDE_INT)
4383 shift = HOST_BITS_PER_WIDE_INT - 1;
4384 return GEN_INT (INTVAL (reg_equiv_constant[regno]) >> shift);
4387 if (regno >= FIRST_PSEUDO_REGISTER && reg_renumber[regno] < 0
4388 && reg_equiv_constant[regno] != 0
4389 && GET_MODE (reg_equiv_constant[regno]) == VOIDmode)
4390 abort ();
4392 /* If the subreg contains a reg that will be converted to a mem,
4393 convert the subreg to a narrower memref now.
4394 Otherwise, we would get (subreg (mem ...) ...),
4395 which would force reload of the mem.
4397 We also need to do this if there is an equivalent MEM that is
4398 not offsettable. In that case, alter_subreg would produce an
4399 invalid address on big-endian machines.
4401 For machines that extend byte loads, we must not reload using
4402 a wider mode if we have a paradoxical SUBREG. find_reloads will
4403 force a reload in that case. So we should not do anything here. */
4405 else if (regno >= FIRST_PSEUDO_REGISTER
4406 #ifdef LOAD_EXTEND_OP
4407 && (GET_MODE_SIZE (GET_MODE (x))
4408 <= GET_MODE_SIZE (GET_MODE (SUBREG_REG (x))))
4409 #endif
4410 && (reg_equiv_address[regno] != 0
4411 || (reg_equiv_mem[regno] != 0
4412 && (! strict_memory_address_p (GET_MODE (x),
4413 XEXP (reg_equiv_mem[regno], 0))
4414 || ! offsettable_memref_p (reg_equiv_mem[regno])
4415 || num_not_at_initial_offset))))
4416 x = find_reloads_subreg_address (x, 1, opnum, type, ind_levels,
4417 insn);
4420 for (copied = 0, i = GET_RTX_LENGTH (code) - 1; i >= 0; i--)
4422 if (fmt[i] == 'e')
4424 rtx new_part = find_reloads_toplev (XEXP (x, i), opnum, type,
4425 ind_levels, is_set_dest, insn,
4426 address_reloaded);
4427 /* If we have replaced a reg with it's equivalent memory loc -
4428 that can still be handled here e.g. if it's in a paradoxical
4429 subreg - we must make the change in a copy, rather than using
4430 a destructive change. This way, find_reloads can still elect
4431 not to do the change. */
4432 if (new_part != XEXP (x, i) && ! CONSTANT_P (new_part) && ! copied)
4434 x = shallow_copy_rtx (x);
4435 copied = 1;
4437 XEXP (x, i) = new_part;
4440 return x;
4443 /* Return a mem ref for the memory equivalent of reg REGNO.
4444 This mem ref is not shared with anything. */
4446 static rtx
4447 make_memloc (ad, regno)
4448 rtx ad;
4449 int regno;
4451 /* We must rerun eliminate_regs, in case the elimination
4452 offsets have changed. */
4453 rtx tem
4454 = XEXP (eliminate_regs (reg_equiv_memory_loc[regno], 0, NULL_RTX), 0);
4456 /* If TEM might contain a pseudo, we must copy it to avoid
4457 modifying it when we do the substitution for the reload. */
4458 if (rtx_varies_p (tem, 0))
4459 tem = copy_rtx (tem);
4461 tem = replace_equiv_address_nv (reg_equiv_memory_loc[regno], tem);
4462 tem = adjust_address_nv (tem, GET_MODE (ad), 0);
4464 /* Copy the result if it's still the same as the equivalence, to avoid
4465 modifying it when we do the substitution for the reload. */
4466 if (tem == reg_equiv_memory_loc[regno])
4467 tem = copy_rtx (tem);
4468 return tem;
4471 /* Record all reloads needed for handling memory address AD
4472 which appears in *LOC in a memory reference to mode MODE
4473 which itself is found in location *MEMREFLOC.
4474 Note that we take shortcuts assuming that no multi-reg machine mode
4475 occurs as part of an address.
4477 OPNUM and TYPE specify the purpose of this reload.
4479 IND_LEVELS says how many levels of indirect addressing this machine
4480 supports.
4482 INSN, if nonzero, is the insn in which we do the reload. It is used
4483 to determine if we may generate output reloads, and where to put USEs
4484 for pseudos that we have to replace with stack slots.
4486 Value is nonzero if this address is reloaded or replaced as a whole.
4487 This is interesting to the caller if the address is an autoincrement.
4489 Note that there is no verification that the address will be valid after
4490 this routine does its work. Instead, we rely on the fact that the address
4491 was valid when reload started. So we need only undo things that reload
4492 could have broken. These are wrong register types, pseudos not allocated
4493 to a hard register, and frame pointer elimination. */
4495 static int
4496 find_reloads_address (mode, memrefloc, ad, loc, opnum, type, ind_levels, insn)
4497 enum machine_mode mode;
4498 rtx *memrefloc;
4499 rtx ad;
4500 rtx *loc;
4501 int opnum;
4502 enum reload_type type;
4503 int ind_levels;
4504 rtx insn;
4506 register int regno;
4507 int removed_and = 0;
4508 rtx tem;
4510 /* If the address is a register, see if it is a legitimate address and
4511 reload if not. We first handle the cases where we need not reload
4512 or where we must reload in a non-standard way. */
4514 if (GET_CODE (ad) == REG)
4516 regno = REGNO (ad);
4518 /* If the register is equivalent to an invariant expression, substitute
4519 the invariant, and eliminate any eliminable register references. */
4520 tem = reg_equiv_constant[regno];
4521 if (tem != 0
4522 && (tem = eliminate_regs (tem, mode, insn))
4523 && strict_memory_address_p (mode, tem))
4525 *loc = ad = tem;
4526 return 0;
4529 tem = reg_equiv_memory_loc[regno];
4530 if (tem != 0)
4532 if (reg_equiv_address[regno] != 0 || num_not_at_initial_offset)
4534 tem = make_memloc (ad, regno);
4535 if (! strict_memory_address_p (GET_MODE (tem), XEXP (tem, 0)))
4537 find_reloads_address (GET_MODE (tem), (rtx*)0, XEXP (tem, 0),
4538 &XEXP (tem, 0), opnum, ADDR_TYPE (type),
4539 ind_levels, insn);
4541 /* We can avoid a reload if the register's equivalent memory
4542 expression is valid as an indirect memory address.
4543 But not all addresses are valid in a mem used as an indirect
4544 address: only reg or reg+constant. */
4546 if (ind_levels > 0
4547 && strict_memory_address_p (mode, tem)
4548 && (GET_CODE (XEXP (tem, 0)) == REG
4549 || (GET_CODE (XEXP (tem, 0)) == PLUS
4550 && GET_CODE (XEXP (XEXP (tem, 0), 0)) == REG
4551 && CONSTANT_P (XEXP (XEXP (tem, 0), 1)))))
4553 /* TEM is not the same as what we'll be replacing the
4554 pseudo with after reload, put a USE in front of INSN
4555 in the final reload pass. */
4556 if (replace_reloads
4557 && num_not_at_initial_offset
4558 && ! rtx_equal_p (tem, reg_equiv_mem[regno]))
4560 *loc = tem;
4561 emit_insn_before (gen_rtx_USE (VOIDmode, ad), insn);
4562 /* This doesn't really count as replacing the address
4563 as a whole, since it is still a memory access. */
4565 return 0;
4567 ad = tem;
4571 /* The only remaining case where we can avoid a reload is if this is a
4572 hard register that is valid as a base register and which is not the
4573 subject of a CLOBBER in this insn. */
4575 else if (regno < FIRST_PSEUDO_REGISTER
4576 && REGNO_MODE_OK_FOR_BASE_P (regno, mode)
4577 && ! regno_clobbered_p (regno, this_insn, mode, 0))
4578 return 0;
4580 /* If we do not have one of the cases above, we must do the reload. */
4581 push_reload (ad, NULL_RTX, loc, (rtx*)0, BASE_REG_CLASS,
4582 GET_MODE (ad), VOIDmode, 0, 0, opnum, type);
4583 return 1;
4586 if (strict_memory_address_p (mode, ad))
4588 /* The address appears valid, so reloads are not needed.
4589 But the address may contain an eliminable register.
4590 This can happen because a machine with indirect addressing
4591 may consider a pseudo register by itself a valid address even when
4592 it has failed to get a hard reg.
4593 So do a tree-walk to find and eliminate all such regs. */
4595 /* But first quickly dispose of a common case. */
4596 if (GET_CODE (ad) == PLUS
4597 && GET_CODE (XEXP (ad, 1)) == CONST_INT
4598 && GET_CODE (XEXP (ad, 0)) == REG
4599 && reg_equiv_constant[REGNO (XEXP (ad, 0))] == 0)
4600 return 0;
4602 subst_reg_equivs_changed = 0;
4603 *loc = subst_reg_equivs (ad, insn);
4605 if (! subst_reg_equivs_changed)
4606 return 0;
4608 /* Check result for validity after substitution. */
4609 if (strict_memory_address_p (mode, ad))
4610 return 0;
4613 #ifdef LEGITIMIZE_RELOAD_ADDRESS
4616 if (memrefloc)
4618 LEGITIMIZE_RELOAD_ADDRESS (ad, GET_MODE (*memrefloc), opnum, type,
4619 ind_levels, win);
4621 break;
4622 win:
4623 *memrefloc = copy_rtx (*memrefloc);
4624 XEXP (*memrefloc, 0) = ad;
4625 move_replacements (&ad, &XEXP (*memrefloc, 0));
4626 return 1;
4628 while (0);
4629 #endif
4631 /* The address is not valid. We have to figure out why. First see if
4632 we have an outer AND and remove it if so. Then analyze what's inside. */
4634 if (GET_CODE (ad) == AND)
4636 removed_and = 1;
4637 loc = &XEXP (ad, 0);
4638 ad = *loc;
4641 /* One possibility for why the address is invalid is that it is itself
4642 a MEM. This can happen when the frame pointer is being eliminated, a
4643 pseudo is not allocated to a hard register, and the offset between the
4644 frame and stack pointers is not its initial value. In that case the
4645 pseudo will have been replaced by a MEM referring to the
4646 stack pointer. */
4647 if (GET_CODE (ad) == MEM)
4649 /* First ensure that the address in this MEM is valid. Then, unless
4650 indirect addresses are valid, reload the MEM into a register. */
4651 tem = ad;
4652 find_reloads_address (GET_MODE (ad), &tem, XEXP (ad, 0), &XEXP (ad, 0),
4653 opnum, ADDR_TYPE (type),
4654 ind_levels == 0 ? 0 : ind_levels - 1, insn);
4656 /* If tem was changed, then we must create a new memory reference to
4657 hold it and store it back into memrefloc. */
4658 if (tem != ad && memrefloc)
4660 *memrefloc = copy_rtx (*memrefloc);
4661 copy_replacements (tem, XEXP (*memrefloc, 0));
4662 loc = &XEXP (*memrefloc, 0);
4663 if (removed_and)
4664 loc = &XEXP (*loc, 0);
4667 /* Check similar cases as for indirect addresses as above except
4668 that we can allow pseudos and a MEM since they should have been
4669 taken care of above. */
4671 if (ind_levels == 0
4672 || (GET_CODE (XEXP (tem, 0)) == SYMBOL_REF && ! indirect_symref_ok)
4673 || GET_CODE (XEXP (tem, 0)) == MEM
4674 || ! (GET_CODE (XEXP (tem, 0)) == REG
4675 || (GET_CODE (XEXP (tem, 0)) == PLUS
4676 && GET_CODE (XEXP (XEXP (tem, 0), 0)) == REG
4677 && GET_CODE (XEXP (XEXP (tem, 0), 1)) == CONST_INT)))
4679 /* Must use TEM here, not AD, since it is the one that will
4680 have any subexpressions reloaded, if needed. */
4681 push_reload (tem, NULL_RTX, loc, (rtx*)0,
4682 BASE_REG_CLASS, GET_MODE (tem),
4683 VOIDmode, 0,
4684 0, opnum, type);
4685 return ! removed_and;
4687 else
4688 return 0;
4691 /* If we have address of a stack slot but it's not valid because the
4692 displacement is too large, compute the sum in a register.
4693 Handle all base registers here, not just fp/ap/sp, because on some
4694 targets (namely SH) we can also get too large displacements from
4695 big-endian corrections. */
4696 else if (GET_CODE (ad) == PLUS
4697 && GET_CODE (XEXP (ad, 0)) == REG
4698 && REGNO (XEXP (ad, 0)) < FIRST_PSEUDO_REGISTER
4699 && REG_MODE_OK_FOR_BASE_P (XEXP (ad, 0), mode)
4700 && GET_CODE (XEXP (ad, 1)) == CONST_INT)
4702 /* Unshare the MEM rtx so we can safely alter it. */
4703 if (memrefloc)
4705 *memrefloc = copy_rtx (*memrefloc);
4706 loc = &XEXP (*memrefloc, 0);
4707 if (removed_and)
4708 loc = &XEXP (*loc, 0);
4711 if (double_reg_address_ok)
4713 /* Unshare the sum as well. */
4714 *loc = ad = copy_rtx (ad);
4716 /* Reload the displacement into an index reg.
4717 We assume the frame pointer or arg pointer is a base reg. */
4718 find_reloads_address_part (XEXP (ad, 1), &XEXP (ad, 1),
4719 INDEX_REG_CLASS, GET_MODE (ad), opnum,
4720 type, ind_levels);
4721 return 0;
4723 else
4725 /* If the sum of two regs is not necessarily valid,
4726 reload the sum into a base reg.
4727 That will at least work. */
4728 find_reloads_address_part (ad, loc, BASE_REG_CLASS,
4729 Pmode, opnum, type, ind_levels);
4731 return ! removed_and;
4734 /* If we have an indexed stack slot, there are three possible reasons why
4735 it might be invalid: The index might need to be reloaded, the address
4736 might have been made by frame pointer elimination and hence have a
4737 constant out of range, or both reasons might apply.
4739 We can easily check for an index needing reload, but even if that is the
4740 case, we might also have an invalid constant. To avoid making the
4741 conservative assumption and requiring two reloads, we see if this address
4742 is valid when not interpreted strictly. If it is, the only problem is
4743 that the index needs a reload and find_reloads_address_1 will take care
4744 of it.
4746 If we decide to do something here, it must be that
4747 `double_reg_address_ok' is true and that this address rtl was made by
4748 eliminate_regs. We generate a reload of the fp/sp/ap + constant and
4749 rework the sum so that the reload register will be added to the index.
4750 This is safe because we know the address isn't shared.
4752 We check for fp/ap/sp as both the first and second operand of the
4753 innermost PLUS. */
4755 else if (GET_CODE (ad) == PLUS && GET_CODE (XEXP (ad, 1)) == CONST_INT
4756 && GET_CODE (XEXP (ad, 0)) == PLUS
4757 && (XEXP (XEXP (ad, 0), 0) == frame_pointer_rtx
4758 #if FRAME_POINTER_REGNUM != HARD_FRAME_POINTER_REGNUM
4759 || XEXP (XEXP (ad, 0), 0) == hard_frame_pointer_rtx
4760 #endif
4761 #if FRAME_POINTER_REGNUM != ARG_POINTER_REGNUM
4762 || XEXP (XEXP (ad, 0), 0) == arg_pointer_rtx
4763 #endif
4764 || XEXP (XEXP (ad, 0), 0) == stack_pointer_rtx)
4765 && ! memory_address_p (mode, ad))
4767 *loc = ad = gen_rtx_PLUS (GET_MODE (ad),
4768 plus_constant (XEXP (XEXP (ad, 0), 0),
4769 INTVAL (XEXP (ad, 1))),
4770 XEXP (XEXP (ad, 0), 1));
4771 find_reloads_address_part (XEXP (ad, 0), &XEXP (ad, 0), BASE_REG_CLASS,
4772 GET_MODE (ad), opnum, type, ind_levels);
4773 find_reloads_address_1 (mode, XEXP (ad, 1), 1, &XEXP (ad, 1), opnum,
4774 type, 0, insn);
4776 return 0;
4779 else if (GET_CODE (ad) == PLUS && GET_CODE (XEXP (ad, 1)) == CONST_INT
4780 && GET_CODE (XEXP (ad, 0)) == PLUS
4781 && (XEXP (XEXP (ad, 0), 1) == frame_pointer_rtx
4782 #if HARD_FRAME_POINTER_REGNUM != FRAME_POINTER_REGNUM
4783 || XEXP (XEXP (ad, 0), 1) == hard_frame_pointer_rtx
4784 #endif
4785 #if FRAME_POINTER_REGNUM != ARG_POINTER_REGNUM
4786 || XEXP (XEXP (ad, 0), 1) == arg_pointer_rtx
4787 #endif
4788 || XEXP (XEXP (ad, 0), 1) == stack_pointer_rtx)
4789 && ! memory_address_p (mode, ad))
4791 *loc = ad = gen_rtx_PLUS (GET_MODE (ad),
4792 XEXP (XEXP (ad, 0), 0),
4793 plus_constant (XEXP (XEXP (ad, 0), 1),
4794 INTVAL (XEXP (ad, 1))));
4795 find_reloads_address_part (XEXP (ad, 1), &XEXP (ad, 1), BASE_REG_CLASS,
4796 GET_MODE (ad), opnum, type, ind_levels);
4797 find_reloads_address_1 (mode, XEXP (ad, 0), 1, &XEXP (ad, 0), opnum,
4798 type, 0, insn);
4800 return 0;
4803 /* See if address becomes valid when an eliminable register
4804 in a sum is replaced. */
4806 tem = ad;
4807 if (GET_CODE (ad) == PLUS)
4808 tem = subst_indexed_address (ad);
4809 if (tem != ad && strict_memory_address_p (mode, tem))
4811 /* Ok, we win that way. Replace any additional eliminable
4812 registers. */
4814 subst_reg_equivs_changed = 0;
4815 tem = subst_reg_equivs (tem, insn);
4817 /* Make sure that didn't make the address invalid again. */
4819 if (! subst_reg_equivs_changed || strict_memory_address_p (mode, tem))
4821 *loc = tem;
4822 return 0;
4826 /* If constants aren't valid addresses, reload the constant address
4827 into a register. */
4828 if (CONSTANT_P (ad) && ! strict_memory_address_p (mode, ad))
4830 /* If AD is an address in the constant pool, the MEM rtx may be shared.
4831 Unshare it so we can safely alter it. */
4832 if (memrefloc && GET_CODE (ad) == SYMBOL_REF
4833 && CONSTANT_POOL_ADDRESS_P (ad))
4835 *memrefloc = copy_rtx (*memrefloc);
4836 loc = &XEXP (*memrefloc, 0);
4837 if (removed_and)
4838 loc = &XEXP (*loc, 0);
4841 find_reloads_address_part (ad, loc, BASE_REG_CLASS, Pmode, opnum, type,
4842 ind_levels);
4843 return ! removed_and;
4846 return find_reloads_address_1 (mode, ad, 0, loc, opnum, type, ind_levels,
4847 insn);
4850 /* Find all pseudo regs appearing in AD
4851 that are eliminable in favor of equivalent values
4852 and do not have hard regs; replace them by their equivalents.
4853 INSN, if nonzero, is the insn in which we do the reload. We put USEs in
4854 front of it for pseudos that we have to replace with stack slots. */
4856 static rtx
4857 subst_reg_equivs (ad, insn)
4858 rtx ad;
4859 rtx insn;
4861 register RTX_CODE code = GET_CODE (ad);
4862 register int i;
4863 register const char *fmt;
4865 switch (code)
4867 case HIGH:
4868 case CONST_INT:
4869 case CONST:
4870 case CONST_DOUBLE:
4871 case SYMBOL_REF:
4872 case LABEL_REF:
4873 case PC:
4874 case CC0:
4875 return ad;
4877 case REG:
4879 register int regno = REGNO (ad);
4881 if (reg_equiv_constant[regno] != 0)
4883 subst_reg_equivs_changed = 1;
4884 return reg_equiv_constant[regno];
4886 if (reg_equiv_memory_loc[regno] && num_not_at_initial_offset)
4888 rtx mem = make_memloc (ad, regno);
4889 if (! rtx_equal_p (mem, reg_equiv_mem[regno]))
4891 subst_reg_equivs_changed = 1;
4892 emit_insn_before (gen_rtx_USE (VOIDmode, ad), insn);
4893 return mem;
4897 return ad;
4899 case PLUS:
4900 /* Quickly dispose of a common case. */
4901 if (XEXP (ad, 0) == frame_pointer_rtx
4902 && GET_CODE (XEXP (ad, 1)) == CONST_INT)
4903 return ad;
4904 break;
4906 default:
4907 break;
4910 fmt = GET_RTX_FORMAT (code);
4911 for (i = GET_RTX_LENGTH (code) - 1; i >= 0; i--)
4912 if (fmt[i] == 'e')
4913 XEXP (ad, i) = subst_reg_equivs (XEXP (ad, i), insn);
4914 return ad;
4917 /* Compute the sum of X and Y, making canonicalizations assumed in an
4918 address, namely: sum constant integers, surround the sum of two
4919 constants with a CONST, put the constant as the second operand, and
4920 group the constant on the outermost sum.
4922 This routine assumes both inputs are already in canonical form. */
4925 form_sum (x, y)
4926 rtx x, y;
4928 rtx tem;
4929 enum machine_mode mode = GET_MODE (x);
4931 if (mode == VOIDmode)
4932 mode = GET_MODE (y);
4934 if (mode == VOIDmode)
4935 mode = Pmode;
4937 if (GET_CODE (x) == CONST_INT)
4938 return plus_constant (y, INTVAL (x));
4939 else if (GET_CODE (y) == CONST_INT)
4940 return plus_constant (x, INTVAL (y));
4941 else if (CONSTANT_P (x))
4942 tem = x, x = y, y = tem;
4944 if (GET_CODE (x) == PLUS && CONSTANT_P (XEXP (x, 1)))
4945 return form_sum (XEXP (x, 0), form_sum (XEXP (x, 1), y));
4947 /* Note that if the operands of Y are specified in the opposite
4948 order in the recursive calls below, infinite recursion will occur. */
4949 if (GET_CODE (y) == PLUS && CONSTANT_P (XEXP (y, 1)))
4950 return form_sum (form_sum (x, XEXP (y, 0)), XEXP (y, 1));
4952 /* If both constant, encapsulate sum. Otherwise, just form sum. A
4953 constant will have been placed second. */
4954 if (CONSTANT_P (x) && CONSTANT_P (y))
4956 if (GET_CODE (x) == CONST)
4957 x = XEXP (x, 0);
4958 if (GET_CODE (y) == CONST)
4959 y = XEXP (y, 0);
4961 return gen_rtx_CONST (VOIDmode, gen_rtx_PLUS (mode, x, y));
4964 return gen_rtx_PLUS (mode, x, y);
4967 /* If ADDR is a sum containing a pseudo register that should be
4968 replaced with a constant (from reg_equiv_constant),
4969 return the result of doing so, and also apply the associative
4970 law so that the result is more likely to be a valid address.
4971 (But it is not guaranteed to be one.)
4973 Note that at most one register is replaced, even if more are
4974 replaceable. Also, we try to put the result into a canonical form
4975 so it is more likely to be a valid address.
4977 In all other cases, return ADDR. */
4979 static rtx
4980 subst_indexed_address (addr)
4981 rtx addr;
4983 rtx op0 = 0, op1 = 0, op2 = 0;
4984 rtx tem;
4985 int regno;
4987 if (GET_CODE (addr) == PLUS)
4989 /* Try to find a register to replace. */
4990 op0 = XEXP (addr, 0), op1 = XEXP (addr, 1), op2 = 0;
4991 if (GET_CODE (op0) == REG
4992 && (regno = REGNO (op0)) >= FIRST_PSEUDO_REGISTER
4993 && reg_renumber[regno] < 0
4994 && reg_equiv_constant[regno] != 0)
4995 op0 = reg_equiv_constant[regno];
4996 else if (GET_CODE (op1) == REG
4997 && (regno = REGNO (op1)) >= FIRST_PSEUDO_REGISTER
4998 && reg_renumber[regno] < 0
4999 && reg_equiv_constant[regno] != 0)
5000 op1 = reg_equiv_constant[regno];
5001 else if (GET_CODE (op0) == PLUS
5002 && (tem = subst_indexed_address (op0)) != op0)
5003 op0 = tem;
5004 else if (GET_CODE (op1) == PLUS
5005 && (tem = subst_indexed_address (op1)) != op1)
5006 op1 = tem;
5007 else
5008 return addr;
5010 /* Pick out up to three things to add. */
5011 if (GET_CODE (op1) == PLUS)
5012 op2 = XEXP (op1, 1), op1 = XEXP (op1, 0);
5013 else if (GET_CODE (op0) == PLUS)
5014 op2 = op1, op1 = XEXP (op0, 1), op0 = XEXP (op0, 0);
5016 /* Compute the sum. */
5017 if (op2 != 0)
5018 op1 = form_sum (op1, op2);
5019 if (op1 != 0)
5020 op0 = form_sum (op0, op1);
5022 return op0;
5024 return addr;
5027 /* Update the REG_INC notes for an insn. It updates all REG_INC
5028 notes for the instruction which refer to REGNO the to refer
5029 to the reload number.
5031 INSN is the insn for which any REG_INC notes need updating.
5033 REGNO is the register number which has been reloaded.
5035 RELOADNUM is the reload number. */
5037 static void
5038 update_auto_inc_notes (insn, regno, reloadnum)
5039 rtx insn ATTRIBUTE_UNUSED;
5040 int regno ATTRIBUTE_UNUSED;
5041 int reloadnum ATTRIBUTE_UNUSED;
5043 #ifdef AUTO_INC_DEC
5044 rtx link;
5046 for (link = REG_NOTES (insn); link; link = XEXP (link, 1))
5047 if (REG_NOTE_KIND (link) == REG_INC
5048 && REGNO (XEXP (link, 0)) == regno)
5049 push_replacement (&XEXP (link, 0), reloadnum, VOIDmode);
5050 #endif
5053 /* Record the pseudo registers we must reload into hard registers in a
5054 subexpression of a would-be memory address, X referring to a value
5055 in mode MODE. (This function is not called if the address we find
5056 is strictly valid.)
5058 CONTEXT = 1 means we are considering regs as index regs,
5059 = 0 means we are considering them as base regs.
5061 OPNUM and TYPE specify the purpose of any reloads made.
5063 IND_LEVELS says how many levels of indirect addressing are
5064 supported at this point in the address.
5066 INSN, if nonzero, is the insn in which we do the reload. It is used
5067 to determine if we may generate output reloads.
5069 We return nonzero if X, as a whole, is reloaded or replaced. */
5071 /* Note that we take shortcuts assuming that no multi-reg machine mode
5072 occurs as part of an address.
5073 Also, this is not fully machine-customizable; it works for machines
5074 such as VAXen and 68000's and 32000's, but other possible machines
5075 could have addressing modes that this does not handle right. */
5077 static int
5078 find_reloads_address_1 (mode, x, context, loc, opnum, type, ind_levels, insn)
5079 enum machine_mode mode;
5080 rtx x;
5081 int context;
5082 rtx *loc;
5083 int opnum;
5084 enum reload_type type;
5085 int ind_levels;
5086 rtx insn;
5088 register RTX_CODE code = GET_CODE (x);
5090 switch (code)
5092 case PLUS:
5094 register rtx orig_op0 = XEXP (x, 0);
5095 register rtx orig_op1 = XEXP (x, 1);
5096 register RTX_CODE code0 = GET_CODE (orig_op0);
5097 register RTX_CODE code1 = GET_CODE (orig_op1);
5098 register rtx op0 = orig_op0;
5099 register rtx op1 = orig_op1;
5101 if (GET_CODE (op0) == SUBREG)
5103 op0 = SUBREG_REG (op0);
5104 code0 = GET_CODE (op0);
5105 if (code0 == REG && REGNO (op0) < FIRST_PSEUDO_REGISTER)
5106 op0 = gen_rtx_REG (word_mode,
5107 (REGNO (op0) +
5108 subreg_regno_offset (REGNO (SUBREG_REG (orig_op0)),
5109 GET_MODE (SUBREG_REG (orig_op0)),
5110 SUBREG_BYTE (orig_op0),
5111 GET_MODE (orig_op0))));
5114 if (GET_CODE (op1) == SUBREG)
5116 op1 = SUBREG_REG (op1);
5117 code1 = GET_CODE (op1);
5118 if (code1 == REG && REGNO (op1) < FIRST_PSEUDO_REGISTER)
5119 /* ??? Why is this given op1's mode and above for
5120 ??? op0 SUBREGs we use word_mode? */
5121 op1 = gen_rtx_REG (GET_MODE (op1),
5122 (REGNO (op1) +
5123 subreg_regno_offset (REGNO (SUBREG_REG (orig_op1)),
5124 GET_MODE (SUBREG_REG (orig_op1)),
5125 SUBREG_BYTE (orig_op1),
5126 GET_MODE (orig_op1))));
5129 if (code0 == MULT || code0 == SIGN_EXTEND || code0 == TRUNCATE
5130 || code0 == ZERO_EXTEND || code1 == MEM)
5132 find_reloads_address_1 (mode, orig_op0, 1, &XEXP (x, 0), opnum,
5133 type, ind_levels, insn);
5134 find_reloads_address_1 (mode, orig_op1, 0, &XEXP (x, 1), opnum,
5135 type, ind_levels, insn);
5138 else if (code1 == MULT || code1 == SIGN_EXTEND || code1 == TRUNCATE
5139 || code1 == ZERO_EXTEND || code0 == MEM)
5141 find_reloads_address_1 (mode, orig_op0, 0, &XEXP (x, 0), opnum,
5142 type, ind_levels, insn);
5143 find_reloads_address_1 (mode, orig_op1, 1, &XEXP (x, 1), opnum,
5144 type, ind_levels, insn);
5147 else if (code0 == CONST_INT || code0 == CONST
5148 || code0 == SYMBOL_REF || code0 == LABEL_REF)
5149 find_reloads_address_1 (mode, orig_op1, 0, &XEXP (x, 1), opnum,
5150 type, ind_levels, insn);
5152 else if (code1 == CONST_INT || code1 == CONST
5153 || code1 == SYMBOL_REF || code1 == LABEL_REF)
5154 find_reloads_address_1 (mode, orig_op0, 0, &XEXP (x, 0), opnum,
5155 type, ind_levels, insn);
5157 else if (code0 == REG && code1 == REG)
5159 if (REG_OK_FOR_INDEX_P (op0)
5160 && REG_MODE_OK_FOR_BASE_P (op1, mode))
5161 return 0;
5162 else if (REG_OK_FOR_INDEX_P (op1)
5163 && REG_MODE_OK_FOR_BASE_P (op0, mode))
5164 return 0;
5165 else if (REG_MODE_OK_FOR_BASE_P (op1, mode))
5166 find_reloads_address_1 (mode, orig_op0, 1, &XEXP (x, 0), opnum,
5167 type, ind_levels, insn);
5168 else if (REG_MODE_OK_FOR_BASE_P (op0, mode))
5169 find_reloads_address_1 (mode, orig_op1, 1, &XEXP (x, 1), opnum,
5170 type, ind_levels, insn);
5171 else if (REG_OK_FOR_INDEX_P (op1))
5172 find_reloads_address_1 (mode, orig_op0, 0, &XEXP (x, 0), opnum,
5173 type, ind_levels, insn);
5174 else if (REG_OK_FOR_INDEX_P (op0))
5175 find_reloads_address_1 (mode, orig_op1, 0, &XEXP (x, 1), opnum,
5176 type, ind_levels, insn);
5177 else
5179 find_reloads_address_1 (mode, orig_op0, 1, &XEXP (x, 0), opnum,
5180 type, ind_levels, insn);
5181 find_reloads_address_1 (mode, orig_op1, 0, &XEXP (x, 1), opnum,
5182 type, ind_levels, insn);
5186 else if (code0 == REG)
5188 find_reloads_address_1 (mode, orig_op0, 1, &XEXP (x, 0), opnum,
5189 type, ind_levels, insn);
5190 find_reloads_address_1 (mode, orig_op1, 0, &XEXP (x, 1), opnum,
5191 type, ind_levels, insn);
5194 else if (code1 == REG)
5196 find_reloads_address_1 (mode, orig_op1, 1, &XEXP (x, 1), opnum,
5197 type, ind_levels, insn);
5198 find_reloads_address_1 (mode, orig_op0, 0, &XEXP (x, 0), opnum,
5199 type, ind_levels, insn);
5203 return 0;
5205 case POST_MODIFY:
5206 case PRE_MODIFY:
5208 rtx op0 = XEXP (x, 0);
5209 rtx op1 = XEXP (x, 1);
5211 if (GET_CODE (op1) != PLUS && GET_CODE (op1) != MINUS)
5212 return 0;
5214 /* Currently, we only support {PRE,POST}_MODIFY constructs
5215 where a base register is {inc,dec}remented by the contents
5216 of another register or by a constant value. Thus, these
5217 operands must match. */
5218 if (op0 != XEXP (op1, 0))
5219 abort ();
5221 /* Require index register (or constant). Let's just handle the
5222 register case in the meantime... If the target allows
5223 auto-modify by a constant then we could try replacing a pseudo
5224 register with its equivalent constant where applicable. */
5225 if (REG_P (XEXP (op1, 1)))
5226 if (!REGNO_OK_FOR_INDEX_P (REGNO (XEXP (op1, 1))))
5227 find_reloads_address_1 (mode, XEXP (op1, 1), 1, &XEXP (op1, 1),
5228 opnum, type, ind_levels, insn);
5230 if (REG_P (XEXP (op1, 0)))
5232 int regno = REGNO (XEXP (op1, 0));
5233 int reloadnum;
5235 /* A register that is incremented cannot be constant! */
5236 if (regno >= FIRST_PSEUDO_REGISTER
5237 && reg_equiv_constant[regno] != 0)
5238 abort ();
5240 /* Handle a register that is equivalent to a memory location
5241 which cannot be addressed directly. */
5242 if (reg_equiv_memory_loc[regno] != 0
5243 && (reg_equiv_address[regno] != 0
5244 || num_not_at_initial_offset))
5246 rtx tem = make_memloc (XEXP (x, 0), regno);
5248 if (reg_equiv_address[regno]
5249 || ! rtx_equal_p (tem, reg_equiv_mem[regno]))
5251 /* First reload the memory location's address.
5252 We can't use ADDR_TYPE (type) here, because we need to
5253 write back the value after reading it, hence we actually
5254 need two registers. */
5255 find_reloads_address (GET_MODE (tem), 0, XEXP (tem, 0),
5256 &XEXP (tem, 0), opnum,
5257 RELOAD_OTHER,
5258 ind_levels, insn);
5260 /* Then reload the memory location into a base
5261 register. */
5262 reloadnum = push_reload (tem, tem, &XEXP (x, 0),
5263 &XEXP (op1, 0), BASE_REG_CLASS,
5264 GET_MODE (x), GET_MODE (x), 0,
5265 0, opnum, RELOAD_OTHER);
5267 update_auto_inc_notes (this_insn, regno, reloadnum);
5268 return 0;
5272 if (reg_renumber[regno] >= 0)
5273 regno = reg_renumber[regno];
5275 /* We require a base register here... */
5276 if (!REGNO_MODE_OK_FOR_BASE_P (regno, GET_MODE (x)))
5278 reloadnum = push_reload (XEXP (op1, 0), XEXP (x, 0),
5279 &XEXP (op1, 0), &XEXP (x, 0),
5280 BASE_REG_CLASS,
5281 GET_MODE (x), GET_MODE (x), 0, 0,
5282 opnum, RELOAD_OTHER);
5284 update_auto_inc_notes (this_insn, regno, reloadnum);
5285 return 0;
5288 else
5289 abort ();
5291 return 0;
5293 case POST_INC:
5294 case POST_DEC:
5295 case PRE_INC:
5296 case PRE_DEC:
5297 if (GET_CODE (XEXP (x, 0)) == REG)
5299 register int regno = REGNO (XEXP (x, 0));
5300 int value = 0;
5301 rtx x_orig = x;
5303 /* A register that is incremented cannot be constant! */
5304 if (regno >= FIRST_PSEUDO_REGISTER
5305 && reg_equiv_constant[regno] != 0)
5306 abort ();
5308 /* Handle a register that is equivalent to a memory location
5309 which cannot be addressed directly. */
5310 if (reg_equiv_memory_loc[regno] != 0
5311 && (reg_equiv_address[regno] != 0 || num_not_at_initial_offset))
5313 rtx tem = make_memloc (XEXP (x, 0), regno);
5314 if (reg_equiv_address[regno]
5315 || ! rtx_equal_p (tem, reg_equiv_mem[regno]))
5317 /* First reload the memory location's address.
5318 We can't use ADDR_TYPE (type) here, because we need to
5319 write back the value after reading it, hence we actually
5320 need two registers. */
5321 find_reloads_address (GET_MODE (tem), &tem, XEXP (tem, 0),
5322 &XEXP (tem, 0), opnum, type,
5323 ind_levels, insn);
5324 /* Put this inside a new increment-expression. */
5325 x = gen_rtx_fmt_e (GET_CODE (x), GET_MODE (x), tem);
5326 /* Proceed to reload that, as if it contained a register. */
5330 /* If we have a hard register that is ok as an index,
5331 don't make a reload. If an autoincrement of a nice register
5332 isn't "valid", it must be that no autoincrement is "valid".
5333 If that is true and something made an autoincrement anyway,
5334 this must be a special context where one is allowed.
5335 (For example, a "push" instruction.)
5336 We can't improve this address, so leave it alone. */
5338 /* Otherwise, reload the autoincrement into a suitable hard reg
5339 and record how much to increment by. */
5341 if (reg_renumber[regno] >= 0)
5342 regno = reg_renumber[regno];
5343 if ((regno >= FIRST_PSEUDO_REGISTER
5344 || !(context ? REGNO_OK_FOR_INDEX_P (regno)
5345 : REGNO_MODE_OK_FOR_BASE_P (regno, mode))))
5347 int reloadnum;
5349 /* If we can output the register afterwards, do so, this
5350 saves the extra update.
5351 We can do so if we have an INSN - i.e. no JUMP_INSN nor
5352 CALL_INSN - and it does not set CC0.
5353 But don't do this if we cannot directly address the
5354 memory location, since this will make it harder to
5355 reuse address reloads, and increases register pressure.
5356 Also don't do this if we can probably update x directly. */
5357 rtx equiv = (GET_CODE (XEXP (x, 0)) == MEM
5358 ? XEXP (x, 0)
5359 : reg_equiv_mem[regno]);
5360 int icode = (int) add_optab->handlers[(int) Pmode].insn_code;
5361 if (insn && GET_CODE (insn) == INSN && equiv
5362 && memory_operand (equiv, GET_MODE (equiv))
5363 #ifdef HAVE_cc0
5364 && ! sets_cc0_p (PATTERN (insn))
5365 #endif
5366 && ! (icode != CODE_FOR_nothing
5367 && ((*insn_data[icode].operand[0].predicate)
5368 (equiv, Pmode))
5369 && ((*insn_data[icode].operand[1].predicate)
5370 (equiv, Pmode))))
5372 /* We use the original pseudo for loc, so that
5373 emit_reload_insns() knows which pseudo this
5374 reload refers to and updates the pseudo rtx, not
5375 its equivalent memory location, as well as the
5376 corresponding entry in reg_last_reload_reg. */
5377 loc = &XEXP (x_orig, 0);
5378 x = XEXP (x, 0);
5379 reloadnum
5380 = push_reload (x, x, loc, loc,
5381 (context ? INDEX_REG_CLASS : BASE_REG_CLASS),
5382 GET_MODE (x), GET_MODE (x), 0, 0,
5383 opnum, RELOAD_OTHER);
5385 else
5387 reloadnum
5388 = push_reload (x, NULL_RTX, loc, (rtx*)0,
5389 (context ? INDEX_REG_CLASS : BASE_REG_CLASS),
5390 GET_MODE (x), GET_MODE (x), 0, 0,
5391 opnum, type);
5392 rld[reloadnum].inc
5393 = find_inc_amount (PATTERN (this_insn), XEXP (x_orig, 0));
5395 value = 1;
5398 update_auto_inc_notes (this_insn, REGNO (XEXP (x_orig, 0)),
5399 reloadnum);
5401 return value;
5404 else if (GET_CODE (XEXP (x, 0)) == MEM)
5406 /* This is probably the result of a substitution, by eliminate_regs,
5407 of an equivalent address for a pseudo that was not allocated to a
5408 hard register. Verify that the specified address is valid and
5409 reload it into a register. */
5410 /* Variable `tem' might or might not be used in FIND_REG_INC_NOTE. */
5411 rtx tem ATTRIBUTE_UNUSED = XEXP (x, 0);
5412 register rtx link;
5413 int reloadnum;
5415 /* Since we know we are going to reload this item, don't decrement
5416 for the indirection level.
5418 Note that this is actually conservative: it would be slightly
5419 more efficient to use the value of SPILL_INDIRECT_LEVELS from
5420 reload1.c here. */
5421 /* We can't use ADDR_TYPE (type) here, because we need to
5422 write back the value after reading it, hence we actually
5423 need two registers. */
5424 find_reloads_address (GET_MODE (x), &XEXP (x, 0),
5425 XEXP (XEXP (x, 0), 0), &XEXP (XEXP (x, 0), 0),
5426 opnum, type, ind_levels, insn);
5428 reloadnum = push_reload (x, NULL_RTX, loc, (rtx*)0,
5429 (context ? INDEX_REG_CLASS : BASE_REG_CLASS),
5430 GET_MODE (x), VOIDmode, 0, 0, opnum, type);
5431 rld[reloadnum].inc
5432 = find_inc_amount (PATTERN (this_insn), XEXP (x, 0));
5434 link = FIND_REG_INC_NOTE (this_insn, tem);
5435 if (link != 0)
5436 push_replacement (&XEXP (link, 0), reloadnum, VOIDmode);
5438 return 1;
5440 return 0;
5442 case MEM:
5443 /* This is probably the result of a substitution, by eliminate_regs, of
5444 an equivalent address for a pseudo that was not allocated to a hard
5445 register. Verify that the specified address is valid and reload it
5446 into a register.
5448 Since we know we are going to reload this item, don't decrement for
5449 the indirection level.
5451 Note that this is actually conservative: it would be slightly more
5452 efficient to use the value of SPILL_INDIRECT_LEVELS from
5453 reload1.c here. */
5455 find_reloads_address (GET_MODE (x), loc, XEXP (x, 0), &XEXP (x, 0),
5456 opnum, ADDR_TYPE (type), ind_levels, insn);
5457 push_reload (*loc, NULL_RTX, loc, (rtx*)0,
5458 (context ? INDEX_REG_CLASS : BASE_REG_CLASS),
5459 GET_MODE (x), VOIDmode, 0, 0, opnum, type);
5460 return 1;
5462 case REG:
5464 register int regno = REGNO (x);
5466 if (reg_equiv_constant[regno] != 0)
5468 find_reloads_address_part (reg_equiv_constant[regno], loc,
5469 (context ? INDEX_REG_CLASS : BASE_REG_CLASS),
5470 GET_MODE (x), opnum, type, ind_levels);
5471 return 1;
5474 #if 0 /* This might screw code in reload1.c to delete prior output-reload
5475 that feeds this insn. */
5476 if (reg_equiv_mem[regno] != 0)
5478 push_reload (reg_equiv_mem[regno], NULL_RTX, loc, (rtx*)0,
5479 (context ? INDEX_REG_CLASS : BASE_REG_CLASS),
5480 GET_MODE (x), VOIDmode, 0, 0, opnum, type);
5481 return 1;
5483 #endif
5485 if (reg_equiv_memory_loc[regno]
5486 && (reg_equiv_address[regno] != 0 || num_not_at_initial_offset))
5488 rtx tem = make_memloc (x, regno);
5489 if (reg_equiv_address[regno] != 0
5490 || ! rtx_equal_p (tem, reg_equiv_mem[regno]))
5492 x = tem;
5493 find_reloads_address (GET_MODE (x), &x, XEXP (x, 0),
5494 &XEXP (x, 0), opnum, ADDR_TYPE (type),
5495 ind_levels, insn);
5499 if (reg_renumber[regno] >= 0)
5500 regno = reg_renumber[regno];
5502 if ((regno >= FIRST_PSEUDO_REGISTER
5503 || !(context ? REGNO_OK_FOR_INDEX_P (regno)
5504 : REGNO_MODE_OK_FOR_BASE_P (regno, mode))))
5506 push_reload (x, NULL_RTX, loc, (rtx*)0,
5507 (context ? INDEX_REG_CLASS : BASE_REG_CLASS),
5508 GET_MODE (x), VOIDmode, 0, 0, opnum, type);
5509 return 1;
5512 /* If a register appearing in an address is the subject of a CLOBBER
5513 in this insn, reload it into some other register to be safe.
5514 The CLOBBER is supposed to make the register unavailable
5515 from before this insn to after it. */
5516 if (regno_clobbered_p (regno, this_insn, GET_MODE (x), 0))
5518 push_reload (x, NULL_RTX, loc, (rtx*)0,
5519 (context ? INDEX_REG_CLASS : BASE_REG_CLASS),
5520 GET_MODE (x), VOIDmode, 0, 0, opnum, type);
5521 return 1;
5524 return 0;
5526 case SUBREG:
5527 if (GET_CODE (SUBREG_REG (x)) == REG)
5529 /* If this is a SUBREG of a hard register and the resulting register
5530 is of the wrong class, reload the whole SUBREG. This avoids
5531 needless copies if SUBREG_REG is multi-word. */
5532 if (REGNO (SUBREG_REG (x)) < FIRST_PSEUDO_REGISTER)
5534 int regno = subreg_regno (x);
5536 if (! (context ? REGNO_OK_FOR_INDEX_P (regno)
5537 : REGNO_MODE_OK_FOR_BASE_P (regno, mode)))
5539 push_reload (x, NULL_RTX, loc, (rtx*)0,
5540 (context ? INDEX_REG_CLASS : BASE_REG_CLASS),
5541 GET_MODE (x), VOIDmode, 0, 0, opnum, type);
5542 return 1;
5545 /* If this is a SUBREG of a pseudo-register, and the pseudo-register
5546 is larger than the class size, then reload the whole SUBREG. */
5547 else
5549 enum reg_class class = (context ? INDEX_REG_CLASS
5550 : BASE_REG_CLASS);
5551 if (CLASS_MAX_NREGS (class, GET_MODE (SUBREG_REG (x)))
5552 > reg_class_size[class])
5554 x = find_reloads_subreg_address (x, 0, opnum, type,
5555 ind_levels, insn);
5556 push_reload (x, NULL_RTX, loc, (rtx*)0, class,
5557 GET_MODE (x), VOIDmode, 0, 0, opnum, type);
5558 return 1;
5562 break;
5564 default:
5565 break;
5569 register const char *fmt = GET_RTX_FORMAT (code);
5570 register int i;
5572 for (i = GET_RTX_LENGTH (code) - 1; i >= 0; i--)
5574 if (fmt[i] == 'e')
5575 find_reloads_address_1 (mode, XEXP (x, i), context, &XEXP (x, i),
5576 opnum, type, ind_levels, insn);
5580 return 0;
5583 /* X, which is found at *LOC, is a part of an address that needs to be
5584 reloaded into a register of class CLASS. If X is a constant, or if
5585 X is a PLUS that contains a constant, check that the constant is a
5586 legitimate operand and that we are supposed to be able to load
5587 it into the register.
5589 If not, force the constant into memory and reload the MEM instead.
5591 MODE is the mode to use, in case X is an integer constant.
5593 OPNUM and TYPE describe the purpose of any reloads made.
5595 IND_LEVELS says how many levels of indirect addressing this machine
5596 supports. */
5598 static void
5599 find_reloads_address_part (x, loc, class, mode, opnum, type, ind_levels)
5600 rtx x;
5601 rtx *loc;
5602 enum reg_class class;
5603 enum machine_mode mode;
5604 int opnum;
5605 enum reload_type type;
5606 int ind_levels;
5608 if (CONSTANT_P (x)
5609 && (! LEGITIMATE_CONSTANT_P (x)
5610 || PREFERRED_RELOAD_CLASS (x, class) == NO_REGS))
5612 rtx tem;
5614 tem = x = force_const_mem (mode, x);
5615 find_reloads_address (mode, &tem, XEXP (tem, 0), &XEXP (tem, 0),
5616 opnum, type, ind_levels, 0);
5619 else if (GET_CODE (x) == PLUS
5620 && CONSTANT_P (XEXP (x, 1))
5621 && (! LEGITIMATE_CONSTANT_P (XEXP (x, 1))
5622 || PREFERRED_RELOAD_CLASS (XEXP (x, 1), class) == NO_REGS))
5624 rtx tem;
5626 tem = force_const_mem (GET_MODE (x), XEXP (x, 1));
5627 x = gen_rtx_PLUS (GET_MODE (x), XEXP (x, 0), tem);
5628 find_reloads_address (mode, &tem, XEXP (tem, 0), &XEXP (tem, 0),
5629 opnum, type, ind_levels, 0);
5632 push_reload (x, NULL_RTX, loc, (rtx*)0, class,
5633 mode, VOIDmode, 0, 0, opnum, type);
5636 /* X, a subreg of a pseudo, is a part of an address that needs to be
5637 reloaded.
5639 If the pseudo is equivalent to a memory location that cannot be directly
5640 addressed, make the necessary address reloads.
5642 If address reloads have been necessary, or if the address is changed
5643 by register elimination, return the rtx of the memory location;
5644 otherwise, return X.
5646 If FORCE_REPLACE is nonzero, unconditionally replace the subreg with the
5647 memory location.
5649 OPNUM and TYPE identify the purpose of the reload.
5651 IND_LEVELS says how many levels of indirect addressing are
5652 supported at this point in the address.
5654 INSN, if nonzero, is the insn in which we do the reload. It is used
5655 to determine where to put USEs for pseudos that we have to replace with
5656 stack slots. */
5658 static rtx
5659 find_reloads_subreg_address (x, force_replace, opnum, type,
5660 ind_levels, insn)
5661 rtx x;
5662 int force_replace;
5663 int opnum;
5664 enum reload_type type;
5665 int ind_levels;
5666 rtx insn;
5668 int regno = REGNO (SUBREG_REG (x));
5670 if (reg_equiv_memory_loc[regno])
5672 /* If the address is not directly addressable, or if the address is not
5673 offsettable, then it must be replaced. */
5674 if (! force_replace
5675 && (reg_equiv_address[regno]
5676 || ! offsettable_memref_p (reg_equiv_mem[regno])))
5677 force_replace = 1;
5679 if (force_replace || num_not_at_initial_offset)
5681 rtx tem = make_memloc (SUBREG_REG (x), regno);
5683 /* If the address changes because of register elimination, then
5684 it must be replaced. */
5685 if (force_replace
5686 || ! rtx_equal_p (tem, reg_equiv_mem[regno]))
5688 int offset = SUBREG_BYTE (x);
5689 unsigned outer_size = GET_MODE_SIZE (GET_MODE (x));
5690 unsigned inner_size = GET_MODE_SIZE (GET_MODE (SUBREG_REG (x)));
5692 XEXP (tem, 0) = plus_constant (XEXP (tem, 0), offset);
5693 PUT_MODE (tem, GET_MODE (x));
5695 /* If this was a paradoxical subreg that we replaced, the
5696 resulting memory must be sufficiently aligned to allow
5697 us to widen the mode of the memory. */
5698 if (outer_size > inner_size && STRICT_ALIGNMENT)
5700 rtx base;
5702 base = XEXP (tem, 0);
5703 if (GET_CODE (base) == PLUS)
5705 if (GET_CODE (XEXP (base, 1)) == CONST_INT
5706 && INTVAL (XEXP (base, 1)) % outer_size != 0)
5707 return x;
5708 base = XEXP (base, 0);
5710 if (GET_CODE (base) != REG
5711 || (REGNO_POINTER_ALIGN (REGNO (base))
5712 < outer_size * BITS_PER_UNIT))
5713 return x;
5716 find_reloads_address (GET_MODE (tem), &tem, XEXP (tem, 0),
5717 &XEXP (tem, 0), opnum, ADDR_TYPE (type),
5718 ind_levels, insn);
5720 /* If this is not a toplevel operand, find_reloads doesn't see
5721 this substitution. We have to emit a USE of the pseudo so
5722 that delete_output_reload can see it. */
5723 if (replace_reloads && recog_data.operand[opnum] != x)
5724 emit_insn_before (gen_rtx_USE (VOIDmode, SUBREG_REG (x)), insn);
5725 x = tem;
5729 return x;
5732 /* Substitute into the current INSN the registers into which we have reloaded
5733 the things that need reloading. The array `replacements'
5734 contains the locations of all pointers that must be changed
5735 and says what to replace them with.
5737 Return the rtx that X translates into; usually X, but modified. */
5739 void
5740 subst_reloads (insn)
5741 rtx insn;
5743 register int i;
5745 for (i = 0; i < n_replacements; i++)
5747 register struct replacement *r = &replacements[i];
5748 register rtx reloadreg = rld[r->what].reg_rtx;
5749 if (reloadreg)
5751 #ifdef ENABLE_CHECKING
5752 /* Internal consistency test. Check that we don't modify
5753 anything in the equivalence arrays. Whenever something from
5754 those arrays needs to be reloaded, it must be unshared before
5755 being substituted into; the equivalence must not be modified.
5756 Otherwise, if the equivalence is used after that, it will
5757 have been modified, and the thing substituted (probably a
5758 register) is likely overwritten and not a usable equivalence. */
5759 int check_regno;
5761 for (check_regno = 0; check_regno < max_regno; check_regno++)
5763 #define CHECK_MODF(ARRAY) \
5764 if (ARRAY[check_regno] \
5765 && loc_mentioned_in_p (r->where, \
5766 ARRAY[check_regno])) \
5767 abort ()
5769 CHECK_MODF (reg_equiv_constant);
5770 CHECK_MODF (reg_equiv_memory_loc);
5771 CHECK_MODF (reg_equiv_address);
5772 CHECK_MODF (reg_equiv_mem);
5773 #undef CHECK_MODF
5775 #endif /* ENABLE_CHECKING */
5777 /* If we're replacing a LABEL_REF with a register, add a
5778 REG_LABEL note to indicate to flow which label this
5779 register refers to. */
5780 if (GET_CODE (*r->where) == LABEL_REF
5781 && GET_CODE (insn) == JUMP_INSN)
5782 REG_NOTES (insn) = gen_rtx_INSN_LIST (REG_LABEL,
5783 XEXP (*r->where, 0),
5784 REG_NOTES (insn));
5786 /* Encapsulate RELOADREG so its machine mode matches what
5787 used to be there. Note that gen_lowpart_common will
5788 do the wrong thing if RELOADREG is multi-word. RELOADREG
5789 will always be a REG here. */
5790 if (GET_MODE (reloadreg) != r->mode && r->mode != VOIDmode)
5791 reloadreg = gen_rtx_REG (r->mode, REGNO (reloadreg));
5793 /* If we are putting this into a SUBREG and RELOADREG is a
5794 SUBREG, we would be making nested SUBREGs, so we have to fix
5795 this up. Note that r->where == &SUBREG_REG (*r->subreg_loc). */
5797 if (r->subreg_loc != 0 && GET_CODE (reloadreg) == SUBREG)
5799 if (GET_MODE (*r->subreg_loc)
5800 == GET_MODE (SUBREG_REG (reloadreg)))
5801 *r->subreg_loc = SUBREG_REG (reloadreg);
5802 else
5804 int final_offset =
5805 SUBREG_BYTE (*r->subreg_loc) + SUBREG_BYTE (reloadreg);
5807 /* When working with SUBREGs the rule is that the byte
5808 offset must be a multiple of the SUBREG's mode. */
5809 final_offset = (final_offset /
5810 GET_MODE_SIZE (GET_MODE (*r->subreg_loc)));
5811 final_offset = (final_offset *
5812 GET_MODE_SIZE (GET_MODE (*r->subreg_loc)));
5814 *r->where = SUBREG_REG (reloadreg);
5815 SUBREG_BYTE (*r->subreg_loc) = final_offset;
5818 else
5819 *r->where = reloadreg;
5821 /* If reload got no reg and isn't optional, something's wrong. */
5822 else if (! rld[r->what].optional)
5823 abort ();
5827 /* Make a copy of any replacements being done into X and move those copies
5828 to locations in Y, a copy of X. We only look at the highest level of
5829 the RTL. */
5831 void
5832 copy_replacements (x, y)
5833 rtx x;
5834 rtx y;
5836 int i, j;
5837 enum rtx_code code = GET_CODE (x);
5838 const char *fmt = GET_RTX_FORMAT (code);
5839 struct replacement *r;
5841 /* We can't support X being a SUBREG because we might then need to know its
5842 location if something inside it was replaced. */
5843 if (code == SUBREG)
5844 abort ();
5846 for (i = GET_RTX_LENGTH (code) - 1; i >= 0; i--)
5847 if (fmt[i] == 'e')
5848 for (j = 0; j < n_replacements; j++)
5850 if (replacements[j].subreg_loc == &XEXP (x, i))
5852 r = &replacements[n_replacements++];
5853 r->where = replacements[j].where;
5854 r->subreg_loc = &XEXP (y, i);
5855 r->what = replacements[j].what;
5856 r->mode = replacements[j].mode;
5858 else if (replacements[j].where == &XEXP (x, i))
5860 r = &replacements[n_replacements++];
5861 r->where = &XEXP (y, i);
5862 r->subreg_loc = 0;
5863 r->what = replacements[j].what;
5864 r->mode = replacements[j].mode;
5869 /* Change any replacements being done to *X to be done to *Y */
5871 void
5872 move_replacements (x, y)
5873 rtx *x;
5874 rtx *y;
5876 int i;
5878 for (i = 0; i < n_replacements; i++)
5879 if (replacements[i].subreg_loc == x)
5880 replacements[i].subreg_loc = y;
5881 else if (replacements[i].where == x)
5883 replacements[i].where = y;
5884 replacements[i].subreg_loc = 0;
5888 /* If LOC was scheduled to be replaced by something, return the replacement.
5889 Otherwise, return *LOC. */
5892 find_replacement (loc)
5893 rtx *loc;
5895 struct replacement *r;
5897 for (r = &replacements[0]; r < &replacements[n_replacements]; r++)
5899 rtx reloadreg = rld[r->what].reg_rtx;
5901 if (reloadreg && r->where == loc)
5903 if (r->mode != VOIDmode && GET_MODE (reloadreg) != r->mode)
5904 reloadreg = gen_rtx_REG (r->mode, REGNO (reloadreg));
5906 return reloadreg;
5908 else if (reloadreg && r->subreg_loc == loc)
5910 /* RELOADREG must be either a REG or a SUBREG.
5912 ??? Is it actually still ever a SUBREG? If so, why? */
5914 if (GET_CODE (reloadreg) == REG)
5915 return gen_rtx_REG (GET_MODE (*loc),
5916 (REGNO (reloadreg) +
5917 subreg_regno_offset (REGNO (SUBREG_REG (*loc)),
5918 GET_MODE (SUBREG_REG (*loc)),
5919 SUBREG_BYTE (*loc),
5920 GET_MODE (*loc))));
5921 else if (GET_MODE (reloadreg) == GET_MODE (*loc))
5922 return reloadreg;
5923 else
5925 int final_offset = SUBREG_BYTE (reloadreg) + SUBREG_BYTE (*loc);
5927 /* When working with SUBREGs the rule is that the byte
5928 offset must be a multiple of the SUBREG's mode. */
5929 final_offset = (final_offset / GET_MODE_SIZE (GET_MODE (*loc)));
5930 final_offset = (final_offset * GET_MODE_SIZE (GET_MODE (*loc)));
5931 return gen_rtx_SUBREG (GET_MODE (*loc), SUBREG_REG (reloadreg),
5932 final_offset);
5937 /* If *LOC is a PLUS, MINUS, or MULT, see if a replacement is scheduled for
5938 what's inside and make a new rtl if so. */
5939 if (GET_CODE (*loc) == PLUS || GET_CODE (*loc) == MINUS
5940 || GET_CODE (*loc) == MULT)
5942 rtx x = find_replacement (&XEXP (*loc, 0));
5943 rtx y = find_replacement (&XEXP (*loc, 1));
5945 if (x != XEXP (*loc, 0) || y != XEXP (*loc, 1))
5946 return gen_rtx_fmt_ee (GET_CODE (*loc), GET_MODE (*loc), x, y);
5949 return *loc;
5952 /* Return nonzero if register in range [REGNO, ENDREGNO)
5953 appears either explicitly or implicitly in X
5954 other than being stored into (except for earlyclobber operands).
5956 References contained within the substructure at LOC do not count.
5957 LOC may be zero, meaning don't ignore anything.
5959 This is similar to refers_to_regno_p in rtlanal.c except that we
5960 look at equivalences for pseudos that didn't get hard registers. */
5963 refers_to_regno_for_reload_p (regno, endregno, x, loc)
5964 unsigned int regno, endregno;
5965 rtx x;
5966 rtx *loc;
5968 int i;
5969 unsigned int r;
5970 RTX_CODE code;
5971 const char *fmt;
5973 if (x == 0)
5974 return 0;
5976 repeat:
5977 code = GET_CODE (x);
5979 switch (code)
5981 case REG:
5982 r = REGNO (x);
5984 /* If this is a pseudo, a hard register must not have been allocated.
5985 X must therefore either be a constant or be in memory. */
5986 if (r >= FIRST_PSEUDO_REGISTER)
5988 if (reg_equiv_memory_loc[r])
5989 return refers_to_regno_for_reload_p (regno, endregno,
5990 reg_equiv_memory_loc[r],
5991 (rtx*)0);
5993 if (reg_equiv_constant[r])
5994 return 0;
5996 abort ();
5999 return (endregno > r
6000 && regno < r + (r < FIRST_PSEUDO_REGISTER
6001 ? HARD_REGNO_NREGS (r, GET_MODE (x))
6002 : 1));
6004 case SUBREG:
6005 /* If this is a SUBREG of a hard reg, we can see exactly which
6006 registers are being modified. Otherwise, handle normally. */
6007 if (GET_CODE (SUBREG_REG (x)) == REG
6008 && REGNO (SUBREG_REG (x)) < FIRST_PSEUDO_REGISTER)
6010 unsigned int inner_regno = subreg_regno (x);
6011 unsigned int inner_endregno
6012 = inner_regno + (inner_regno < FIRST_PSEUDO_REGISTER
6013 ? HARD_REGNO_NREGS (regno, GET_MODE (x)) : 1);
6015 return endregno > inner_regno && regno < inner_endregno;
6017 break;
6019 case CLOBBER:
6020 case SET:
6021 if (&SET_DEST (x) != loc
6022 /* Note setting a SUBREG counts as referring to the REG it is in for
6023 a pseudo but not for hard registers since we can
6024 treat each word individually. */
6025 && ((GET_CODE (SET_DEST (x)) == SUBREG
6026 && loc != &SUBREG_REG (SET_DEST (x))
6027 && GET_CODE (SUBREG_REG (SET_DEST (x))) == REG
6028 && REGNO (SUBREG_REG (SET_DEST (x))) >= FIRST_PSEUDO_REGISTER
6029 && refers_to_regno_for_reload_p (regno, endregno,
6030 SUBREG_REG (SET_DEST (x)),
6031 loc))
6032 /* If the output is an earlyclobber operand, this is
6033 a conflict. */
6034 || ((GET_CODE (SET_DEST (x)) != REG
6035 || earlyclobber_operand_p (SET_DEST (x)))
6036 && refers_to_regno_for_reload_p (regno, endregno,
6037 SET_DEST (x), loc))))
6038 return 1;
6040 if (code == CLOBBER || loc == &SET_SRC (x))
6041 return 0;
6042 x = SET_SRC (x);
6043 goto repeat;
6045 default:
6046 break;
6049 /* X does not match, so try its subexpressions. */
6051 fmt = GET_RTX_FORMAT (code);
6052 for (i = GET_RTX_LENGTH (code) - 1; i >= 0; i--)
6054 if (fmt[i] == 'e' && loc != &XEXP (x, i))
6056 if (i == 0)
6058 x = XEXP (x, 0);
6059 goto repeat;
6061 else
6062 if (refers_to_regno_for_reload_p (regno, endregno,
6063 XEXP (x, i), loc))
6064 return 1;
6066 else if (fmt[i] == 'E')
6068 register int j;
6069 for (j = XVECLEN (x, i) - 1; j >= 0; j--)
6070 if (loc != &XVECEXP (x, i, j)
6071 && refers_to_regno_for_reload_p (regno, endregno,
6072 XVECEXP (x, i, j), loc))
6073 return 1;
6076 return 0;
6079 /* Nonzero if modifying X will affect IN. If X is a register or a SUBREG,
6080 we check if any register number in X conflicts with the relevant register
6081 numbers. If X is a constant, return 0. If X is a MEM, return 1 iff IN
6082 contains a MEM (we don't bother checking for memory addresses that can't
6083 conflict because we expect this to be a rare case.
6085 This function is similar to reg_overlap_mentioned_p in rtlanal.c except
6086 that we look at equivalences for pseudos that didn't get hard registers. */
6089 reg_overlap_mentioned_for_reload_p (x, in)
6090 rtx x, in;
6092 int regno, endregno;
6094 /* Overly conservative. */
6095 if (GET_CODE (x) == STRICT_LOW_PART)
6096 x = XEXP (x, 0);
6098 /* If either argument is a constant, then modifying X can not affect IN. */
6099 if (CONSTANT_P (x) || CONSTANT_P (in))
6100 return 0;
6101 else if (GET_CODE (x) == SUBREG)
6103 regno = REGNO (SUBREG_REG (x));
6104 if (regno < FIRST_PSEUDO_REGISTER)
6105 regno += subreg_regno_offset (REGNO (SUBREG_REG (x)),
6106 GET_MODE (SUBREG_REG (x)),
6107 SUBREG_BYTE (x),
6108 GET_MODE (x));
6110 else if (GET_CODE (x) == REG)
6112 regno = REGNO (x);
6114 /* If this is a pseudo, it must not have been assigned a hard register.
6115 Therefore, it must either be in memory or be a constant. */
6117 if (regno >= FIRST_PSEUDO_REGISTER)
6119 if (reg_equiv_memory_loc[regno])
6120 return refers_to_mem_for_reload_p (in);
6121 else if (reg_equiv_constant[regno])
6122 return 0;
6123 abort ();
6126 else if (GET_CODE (x) == MEM)
6127 return refers_to_mem_for_reload_p (in);
6128 else if (GET_CODE (x) == SCRATCH || GET_CODE (x) == PC
6129 || GET_CODE (x) == CC0)
6130 return reg_mentioned_p (x, in);
6131 else
6132 abort ();
6134 endregno = regno + (regno < FIRST_PSEUDO_REGISTER
6135 ? HARD_REGNO_NREGS (regno, GET_MODE (x)) : 1);
6137 return refers_to_regno_for_reload_p (regno, endregno, in, (rtx*)0);
6140 /* Return nonzero if anything in X contains a MEM. Look also for pseudo
6141 registers. */
6144 refers_to_mem_for_reload_p (x)
6145 rtx x;
6147 const char *fmt;
6148 int i;
6150 if (GET_CODE (x) == MEM)
6151 return 1;
6153 if (GET_CODE (x) == REG)
6154 return (REGNO (x) >= FIRST_PSEUDO_REGISTER
6155 && reg_equiv_memory_loc[REGNO (x)]);
6157 fmt = GET_RTX_FORMAT (GET_CODE (x));
6158 for (i = GET_RTX_LENGTH (GET_CODE (x)) - 1; i >= 0; i--)
6159 if (fmt[i] == 'e'
6160 && (GET_CODE (XEXP (x, i)) == MEM
6161 || refers_to_mem_for_reload_p (XEXP (x, i))))
6162 return 1;
6164 return 0;
6167 /* Check the insns before INSN to see if there is a suitable register
6168 containing the same value as GOAL.
6169 If OTHER is -1, look for a register in class CLASS.
6170 Otherwise, just see if register number OTHER shares GOAL's value.
6172 Return an rtx for the register found, or zero if none is found.
6174 If RELOAD_REG_P is (short *)1,
6175 we reject any hard reg that appears in reload_reg_rtx
6176 because such a hard reg is also needed coming into this insn.
6178 If RELOAD_REG_P is any other nonzero value,
6179 it is a vector indexed by hard reg number
6180 and we reject any hard reg whose element in the vector is nonnegative
6181 as well as any that appears in reload_reg_rtx.
6183 If GOAL is zero, then GOALREG is a register number; we look
6184 for an equivalent for that register.
6186 MODE is the machine mode of the value we want an equivalence for.
6187 If GOAL is nonzero and not VOIDmode, then it must have mode MODE.
6189 This function is used by jump.c as well as in the reload pass.
6191 If GOAL is the sum of the stack pointer and a constant, we treat it
6192 as if it were a constant except that sp is required to be unchanging. */
6195 find_equiv_reg (goal, insn, class, other, reload_reg_p, goalreg, mode)
6196 register rtx goal;
6197 rtx insn;
6198 enum reg_class class;
6199 register int other;
6200 short *reload_reg_p;
6201 int goalreg;
6202 enum machine_mode mode;
6204 register rtx p = insn;
6205 rtx goaltry, valtry, value, where;
6206 register rtx pat;
6207 register int regno = -1;
6208 int valueno;
6209 int goal_mem = 0;
6210 int goal_const = 0;
6211 int goal_mem_addr_varies = 0;
6212 int need_stable_sp = 0;
6213 int nregs;
6214 int valuenregs;
6216 if (goal == 0)
6217 regno = goalreg;
6218 else if (GET_CODE (goal) == REG)
6219 regno = REGNO (goal);
6220 else if (GET_CODE (goal) == MEM)
6222 enum rtx_code code = GET_CODE (XEXP (goal, 0));
6223 if (MEM_VOLATILE_P (goal))
6224 return 0;
6225 if (flag_float_store && GET_MODE_CLASS (GET_MODE (goal)) == MODE_FLOAT)
6226 return 0;
6227 /* An address with side effects must be reexecuted. */
6228 switch (code)
6230 case POST_INC:
6231 case PRE_INC:
6232 case POST_DEC:
6233 case PRE_DEC:
6234 case POST_MODIFY:
6235 case PRE_MODIFY:
6236 return 0;
6237 default:
6238 break;
6240 goal_mem = 1;
6242 else if (CONSTANT_P (goal))
6243 goal_const = 1;
6244 else if (GET_CODE (goal) == PLUS
6245 && XEXP (goal, 0) == stack_pointer_rtx
6246 && CONSTANT_P (XEXP (goal, 1)))
6247 goal_const = need_stable_sp = 1;
6248 else if (GET_CODE (goal) == PLUS
6249 && XEXP (goal, 0) == frame_pointer_rtx
6250 && CONSTANT_P (XEXP (goal, 1)))
6251 goal_const = 1;
6252 else
6253 return 0;
6255 /* Scan insns back from INSN, looking for one that copies
6256 a value into or out of GOAL.
6257 Stop and give up if we reach a label. */
6259 while (1)
6261 p = PREV_INSN (p);
6262 if (p == 0 || GET_CODE (p) == CODE_LABEL)
6263 return 0;
6265 if (GET_CODE (p) == INSN
6266 /* If we don't want spill regs ... */
6267 && (! (reload_reg_p != 0
6268 && reload_reg_p != (short *) (HOST_WIDE_INT) 1)
6269 /* ... then ignore insns introduced by reload; they aren't
6270 useful and can cause results in reload_as_needed to be
6271 different from what they were when calculating the need for
6272 spills. If we notice an input-reload insn here, we will
6273 reject it below, but it might hide a usable equivalent.
6274 That makes bad code. It may even abort: perhaps no reg was
6275 spilled for this insn because it was assumed we would find
6276 that equivalent. */
6277 || INSN_UID (p) < reload_first_uid))
6279 rtx tem;
6280 pat = single_set (p);
6282 /* First check for something that sets some reg equal to GOAL. */
6283 if (pat != 0
6284 && ((regno >= 0
6285 && true_regnum (SET_SRC (pat)) == regno
6286 && (valueno = true_regnum (valtry = SET_DEST (pat))) >= 0)
6288 (regno >= 0
6289 && true_regnum (SET_DEST (pat)) == regno
6290 && (valueno = true_regnum (valtry = SET_SRC (pat))) >= 0)
6292 (goal_const && rtx_equal_p (SET_SRC (pat), goal)
6293 /* When looking for stack pointer + const,
6294 make sure we don't use a stack adjust. */
6295 && !reg_overlap_mentioned_for_reload_p (SET_DEST (pat), goal)
6296 && (valueno = true_regnum (valtry = SET_DEST (pat))) >= 0)
6297 || (goal_mem
6298 && (valueno = true_regnum (valtry = SET_DEST (pat))) >= 0
6299 && rtx_renumbered_equal_p (goal, SET_SRC (pat)))
6300 || (goal_mem
6301 && (valueno = true_regnum (valtry = SET_SRC (pat))) >= 0
6302 && rtx_renumbered_equal_p (goal, SET_DEST (pat)))
6303 /* If we are looking for a constant,
6304 and something equivalent to that constant was copied
6305 into a reg, we can use that reg. */
6306 || (goal_const && REG_NOTES (p) != 0
6307 && (tem = find_reg_note (p, REG_EQUIV, NULL_RTX))
6308 && ((rtx_equal_p (XEXP (tem, 0), goal)
6309 && (valueno
6310 = true_regnum (valtry = SET_DEST (pat))) >= 0)
6311 || (GET_CODE (SET_DEST (pat)) == REG
6312 && GET_CODE (XEXP (tem, 0)) == CONST_DOUBLE
6313 && (GET_MODE_CLASS (GET_MODE (XEXP (tem, 0)))
6314 == MODE_FLOAT)
6315 && GET_CODE (goal) == CONST_INT
6316 && 0 != (goaltry
6317 = operand_subword (XEXP (tem, 0), 0, 0,
6318 VOIDmode))
6319 && rtx_equal_p (goal, goaltry)
6320 && (valtry
6321 = operand_subword (SET_DEST (pat), 0, 0,
6322 VOIDmode))
6323 && (valueno = true_regnum (valtry)) >= 0)))
6324 || (goal_const && (tem = find_reg_note (p, REG_EQUIV,
6325 NULL_RTX))
6326 && GET_CODE (SET_DEST (pat)) == REG
6327 && GET_CODE (XEXP (tem, 0)) == CONST_DOUBLE
6328 && (GET_MODE_CLASS (GET_MODE (XEXP (tem, 0)))
6329 == MODE_FLOAT)
6330 && GET_CODE (goal) == CONST_INT
6331 && 0 != (goaltry = operand_subword (XEXP (tem, 0), 1, 0,
6332 VOIDmode))
6333 && rtx_equal_p (goal, goaltry)
6334 && (valtry
6335 = operand_subword (SET_DEST (pat), 1, 0, VOIDmode))
6336 && (valueno = true_regnum (valtry)) >= 0)))
6338 if (other >= 0)
6340 if (valueno != other)
6341 continue;
6343 else if ((unsigned) valueno >= FIRST_PSEUDO_REGISTER)
6344 continue;
6345 else
6347 int i;
6349 for (i = HARD_REGNO_NREGS (valueno, mode) - 1; i >= 0; i--)
6350 if (! TEST_HARD_REG_BIT (reg_class_contents[(int) class],
6351 valueno + i))
6352 break;
6353 if (i >= 0)
6354 continue;
6356 value = valtry;
6357 where = p;
6358 break;
6363 /* We found a previous insn copying GOAL into a suitable other reg VALUE
6364 (or copying VALUE into GOAL, if GOAL is also a register).
6365 Now verify that VALUE is really valid. */
6367 /* VALUENO is the register number of VALUE; a hard register. */
6369 /* Don't try to re-use something that is killed in this insn. We want
6370 to be able to trust REG_UNUSED notes. */
6371 if (REG_NOTES (where) != 0 && find_reg_note (where, REG_UNUSED, value))
6372 return 0;
6374 /* If we propose to get the value from the stack pointer or if GOAL is
6375 a MEM based on the stack pointer, we need a stable SP. */
6376 if (valueno == STACK_POINTER_REGNUM || regno == STACK_POINTER_REGNUM
6377 || (goal_mem && reg_overlap_mentioned_for_reload_p (stack_pointer_rtx,
6378 goal)))
6379 need_stable_sp = 1;
6381 /* Reject VALUE if the copy-insn moved the wrong sort of datum. */
6382 if (GET_MODE (value) != mode)
6383 return 0;
6385 /* Reject VALUE if it was loaded from GOAL
6386 and is also a register that appears in the address of GOAL. */
6388 if (goal_mem && value == SET_DEST (single_set (where))
6389 && refers_to_regno_for_reload_p (valueno,
6390 (valueno
6391 + HARD_REGNO_NREGS (valueno, mode)),
6392 goal, (rtx*)0))
6393 return 0;
6395 /* Reject registers that overlap GOAL. */
6397 if (!goal_mem && !goal_const
6398 && regno + (int) HARD_REGNO_NREGS (regno, mode) > valueno
6399 && regno < valueno + (int) HARD_REGNO_NREGS (valueno, mode))
6400 return 0;
6402 nregs = HARD_REGNO_NREGS (regno, mode);
6403 valuenregs = HARD_REGNO_NREGS (valueno, mode);
6405 /* Reject VALUE if it is one of the regs reserved for reloads.
6406 Reload1 knows how to reuse them anyway, and it would get
6407 confused if we allocated one without its knowledge.
6408 (Now that insns introduced by reload are ignored above,
6409 this case shouldn't happen, but I'm not positive.) */
6411 if (reload_reg_p != 0 && reload_reg_p != (short *) (HOST_WIDE_INT) 1)
6413 int i;
6414 for (i = 0; i < valuenregs; ++i)
6415 if (reload_reg_p[valueno + i] >= 0)
6416 return 0;
6419 /* Reject VALUE if it is a register being used for an input reload
6420 even if it is not one of those reserved. */
6422 if (reload_reg_p != 0)
6424 int i;
6425 for (i = 0; i < n_reloads; i++)
6426 if (rld[i].reg_rtx != 0 && rld[i].in)
6428 int regno1 = REGNO (rld[i].reg_rtx);
6429 int nregs1 = HARD_REGNO_NREGS (regno1,
6430 GET_MODE (rld[i].reg_rtx));
6431 if (regno1 < valueno + valuenregs
6432 && regno1 + nregs1 > valueno)
6433 return 0;
6437 if (goal_mem)
6438 /* We must treat frame pointer as varying here,
6439 since it can vary--in a nonlocal goto as generated by expand_goto. */
6440 goal_mem_addr_varies = !CONSTANT_ADDRESS_P (XEXP (goal, 0));
6442 /* Now verify that the values of GOAL and VALUE remain unaltered
6443 until INSN is reached. */
6445 p = insn;
6446 while (1)
6448 p = PREV_INSN (p);
6449 if (p == where)
6450 return value;
6452 /* Don't trust the conversion past a function call
6453 if either of the two is in a call-clobbered register, or memory. */
6454 if (GET_CODE (p) == CALL_INSN)
6456 int i;
6458 if (goal_mem || need_stable_sp)
6459 return 0;
6461 if (regno >= 0 && regno < FIRST_PSEUDO_REGISTER)
6462 for (i = 0; i < nregs; ++i)
6463 if (call_used_regs[regno + i])
6464 return 0;
6466 if (valueno >= 0 && valueno < FIRST_PSEUDO_REGISTER)
6467 for (i = 0; i < valuenregs; ++i)
6468 if (call_used_regs[valueno + i])
6469 return 0;
6470 #ifdef NON_SAVING_SETJMP
6471 if (NON_SAVING_SETJMP && find_reg_note (p, REG_SETJMP, NULL))
6472 return 0;
6473 #endif
6476 if (INSN_P (p))
6478 pat = PATTERN (p);
6480 /* Watch out for unspec_volatile, and volatile asms. */
6481 if (volatile_insn_p (pat))
6482 return 0;
6484 /* If this insn P stores in either GOAL or VALUE, return 0.
6485 If GOAL is a memory ref and this insn writes memory, return 0.
6486 If GOAL is a memory ref and its address is not constant,
6487 and this insn P changes a register used in GOAL, return 0. */
6489 if (GET_CODE (pat) == COND_EXEC)
6490 pat = COND_EXEC_CODE (pat);
6491 if (GET_CODE (pat) == SET || GET_CODE (pat) == CLOBBER)
6493 register rtx dest = SET_DEST (pat);
6494 while (GET_CODE (dest) == SUBREG
6495 || GET_CODE (dest) == ZERO_EXTRACT
6496 || GET_CODE (dest) == SIGN_EXTRACT
6497 || GET_CODE (dest) == STRICT_LOW_PART)
6498 dest = XEXP (dest, 0);
6499 if (GET_CODE (dest) == REG)
6501 register int xregno = REGNO (dest);
6502 int xnregs;
6503 if (REGNO (dest) < FIRST_PSEUDO_REGISTER)
6504 xnregs = HARD_REGNO_NREGS (xregno, GET_MODE (dest));
6505 else
6506 xnregs = 1;
6507 if (xregno < regno + nregs && xregno + xnregs > regno)
6508 return 0;
6509 if (xregno < valueno + valuenregs
6510 && xregno + xnregs > valueno)
6511 return 0;
6512 if (goal_mem_addr_varies
6513 && reg_overlap_mentioned_for_reload_p (dest, goal))
6514 return 0;
6515 if (xregno == STACK_POINTER_REGNUM && need_stable_sp)
6516 return 0;
6518 else if (goal_mem && GET_CODE (dest) == MEM
6519 && ! push_operand (dest, GET_MODE (dest)))
6520 return 0;
6521 else if (GET_CODE (dest) == MEM && regno >= FIRST_PSEUDO_REGISTER
6522 && reg_equiv_memory_loc[regno] != 0)
6523 return 0;
6524 else if (need_stable_sp && push_operand (dest, GET_MODE (dest)))
6525 return 0;
6527 else if (GET_CODE (pat) == PARALLEL)
6529 register int i;
6530 for (i = XVECLEN (pat, 0) - 1; i >= 0; i--)
6532 register rtx v1 = XVECEXP (pat, 0, i);
6533 if (GET_CODE (v1) == COND_EXEC)
6534 v1 = COND_EXEC_CODE (v1);
6535 if (GET_CODE (v1) == SET || GET_CODE (v1) == CLOBBER)
6537 register rtx dest = SET_DEST (v1);
6538 while (GET_CODE (dest) == SUBREG
6539 || GET_CODE (dest) == ZERO_EXTRACT
6540 || GET_CODE (dest) == SIGN_EXTRACT
6541 || GET_CODE (dest) == STRICT_LOW_PART)
6542 dest = XEXP (dest, 0);
6543 if (GET_CODE (dest) == REG)
6545 register int xregno = REGNO (dest);
6546 int xnregs;
6547 if (REGNO (dest) < FIRST_PSEUDO_REGISTER)
6548 xnregs = HARD_REGNO_NREGS (xregno, GET_MODE (dest));
6549 else
6550 xnregs = 1;
6551 if (xregno < regno + nregs
6552 && xregno + xnregs > regno)
6553 return 0;
6554 if (xregno < valueno + valuenregs
6555 && xregno + xnregs > valueno)
6556 return 0;
6557 if (goal_mem_addr_varies
6558 && reg_overlap_mentioned_for_reload_p (dest,
6559 goal))
6560 return 0;
6561 if (xregno == STACK_POINTER_REGNUM && need_stable_sp)
6562 return 0;
6564 else if (goal_mem && GET_CODE (dest) == MEM
6565 && ! push_operand (dest, GET_MODE (dest)))
6566 return 0;
6567 else if (GET_CODE (dest) == MEM && regno >= FIRST_PSEUDO_REGISTER
6568 && reg_equiv_memory_loc[regno] != 0)
6569 return 0;
6570 else if (need_stable_sp
6571 && push_operand (dest, GET_MODE (dest)))
6572 return 0;
6577 if (GET_CODE (p) == CALL_INSN && CALL_INSN_FUNCTION_USAGE (p))
6579 rtx link;
6581 for (link = CALL_INSN_FUNCTION_USAGE (p); XEXP (link, 1) != 0;
6582 link = XEXP (link, 1))
6584 pat = XEXP (link, 0);
6585 if (GET_CODE (pat) == CLOBBER)
6587 register rtx dest = SET_DEST (pat);
6589 if (GET_CODE (dest) == REG)
6591 register int xregno = REGNO (dest);
6592 int xnregs
6593 = HARD_REGNO_NREGS (xregno, GET_MODE (dest));
6595 if (xregno < regno + nregs
6596 && xregno + xnregs > regno)
6597 return 0;
6598 else if (xregno < valueno + valuenregs
6599 && xregno + xnregs > valueno)
6600 return 0;
6601 else if (goal_mem_addr_varies
6602 && reg_overlap_mentioned_for_reload_p (dest,
6603 goal))
6604 return 0;
6607 else if (goal_mem && GET_CODE (dest) == MEM
6608 && ! push_operand (dest, GET_MODE (dest)))
6609 return 0;
6610 else if (need_stable_sp
6611 && push_operand (dest, GET_MODE (dest)))
6612 return 0;
6617 #ifdef AUTO_INC_DEC
6618 /* If this insn auto-increments or auto-decrements
6619 either regno or valueno, return 0 now.
6620 If GOAL is a memory ref and its address is not constant,
6621 and this insn P increments a register used in GOAL, return 0. */
6623 register rtx link;
6625 for (link = REG_NOTES (p); link; link = XEXP (link, 1))
6626 if (REG_NOTE_KIND (link) == REG_INC
6627 && GET_CODE (XEXP (link, 0)) == REG)
6629 register int incno = REGNO (XEXP (link, 0));
6630 if (incno < regno + nregs && incno >= regno)
6631 return 0;
6632 if (incno < valueno + valuenregs && incno >= valueno)
6633 return 0;
6634 if (goal_mem_addr_varies
6635 && reg_overlap_mentioned_for_reload_p (XEXP (link, 0),
6636 goal))
6637 return 0;
6640 #endif
6645 /* Find a place where INCED appears in an increment or decrement operator
6646 within X, and return the amount INCED is incremented or decremented by.
6647 The value is always positive. */
6649 static int
6650 find_inc_amount (x, inced)
6651 rtx x, inced;
6653 register enum rtx_code code = GET_CODE (x);
6654 register const char *fmt;
6655 register int i;
6657 if (code == MEM)
6659 register rtx addr = XEXP (x, 0);
6660 if ((GET_CODE (addr) == PRE_DEC
6661 || GET_CODE (addr) == POST_DEC
6662 || GET_CODE (addr) == PRE_INC
6663 || GET_CODE (addr) == POST_INC)
6664 && XEXP (addr, 0) == inced)
6665 return GET_MODE_SIZE (GET_MODE (x));
6666 else if ((GET_CODE (addr) == PRE_MODIFY
6667 || GET_CODE (addr) == POST_MODIFY)
6668 && GET_CODE (XEXP (addr, 1)) == PLUS
6669 && XEXP (addr, 0) == XEXP (XEXP (addr, 1), 0)
6670 && XEXP (addr, 0) == inced
6671 && GET_CODE (XEXP (XEXP (addr, 1), 1)) == CONST_INT)
6673 i = INTVAL (XEXP (XEXP (addr, 1), 1));
6674 return i < 0 ? -i : i;
6678 fmt = GET_RTX_FORMAT (code);
6679 for (i = GET_RTX_LENGTH (code) - 1; i >= 0; i--)
6681 if (fmt[i] == 'e')
6683 register int tem = find_inc_amount (XEXP (x, i), inced);
6684 if (tem != 0)
6685 return tem;
6687 if (fmt[i] == 'E')
6689 register int j;
6690 for (j = XVECLEN (x, i) - 1; j >= 0; j--)
6692 register int tem = find_inc_amount (XVECEXP (x, i, j), inced);
6693 if (tem != 0)
6694 return tem;
6699 return 0;
6702 /* Return 1 if register REGNO is the subject of a clobber in insn INSN.
6703 If SETS is nonzero, also consider SETs. */
6706 regno_clobbered_p (regno, insn, mode, sets)
6707 unsigned int regno;
6708 rtx insn;
6709 enum machine_mode mode;
6710 int sets;
6712 unsigned int nregs = HARD_REGNO_NREGS (regno, mode);
6713 unsigned int endregno = regno + nregs;
6715 if ((GET_CODE (PATTERN (insn)) == CLOBBER
6716 || (sets && GET_CODE (PATTERN (insn)) == SET))
6717 && GET_CODE (XEXP (PATTERN (insn), 0)) == REG)
6719 unsigned int test = REGNO (XEXP (PATTERN (insn), 0));
6721 return test >= regno && test < endregno;
6724 if (GET_CODE (PATTERN (insn)) == PARALLEL)
6726 int i = XVECLEN (PATTERN (insn), 0) - 1;
6728 for (; i >= 0; i--)
6730 rtx elt = XVECEXP (PATTERN (insn), 0, i);
6731 if ((GET_CODE (elt) == CLOBBER
6732 || (sets && GET_CODE (PATTERN (insn)) == SET))
6733 && GET_CODE (XEXP (elt, 0)) == REG)
6735 unsigned int test = REGNO (XEXP (elt, 0));
6737 if (test >= regno && test < endregno)
6738 return 1;
6743 return 0;
6746 static const char *const reload_when_needed_name[] =
6748 "RELOAD_FOR_INPUT",
6749 "RELOAD_FOR_OUTPUT",
6750 "RELOAD_FOR_INSN",
6751 "RELOAD_FOR_INPUT_ADDRESS",
6752 "RELOAD_FOR_INPADDR_ADDRESS",
6753 "RELOAD_FOR_OUTPUT_ADDRESS",
6754 "RELOAD_FOR_OUTADDR_ADDRESS",
6755 "RELOAD_FOR_OPERAND_ADDRESS",
6756 "RELOAD_FOR_OPADDR_ADDR",
6757 "RELOAD_OTHER",
6758 "RELOAD_FOR_OTHER_ADDRESS"
6761 static const char * const reg_class_names[] = REG_CLASS_NAMES;
6763 /* These functions are used to print the variables set by 'find_reloads' */
6765 void
6766 debug_reload_to_stream (f)
6767 FILE *f;
6769 int r;
6770 const char *prefix;
6772 if (! f)
6773 f = stderr;
6774 for (r = 0; r < n_reloads; r++)
6776 fprintf (f, "Reload %d: ", r);
6778 if (rld[r].in != 0)
6780 fprintf (f, "reload_in (%s) = ",
6781 GET_MODE_NAME (rld[r].inmode));
6782 print_inline_rtx (f, rld[r].in, 24);
6783 fprintf (f, "\n\t");
6786 if (rld[r].out != 0)
6788 fprintf (f, "reload_out (%s) = ",
6789 GET_MODE_NAME (rld[r].outmode));
6790 print_inline_rtx (f, rld[r].out, 24);
6791 fprintf (f, "\n\t");
6794 fprintf (f, "%s, ", reg_class_names[(int) rld[r].class]);
6796 fprintf (f, "%s (opnum = %d)",
6797 reload_when_needed_name[(int) rld[r].when_needed],
6798 rld[r].opnum);
6800 if (rld[r].optional)
6801 fprintf (f, ", optional");
6803 if (rld[r].nongroup)
6804 fprintf (f, ", nongroup");
6806 if (rld[r].inc != 0)
6807 fprintf (f, ", inc by %d", rld[r].inc);
6809 if (rld[r].nocombine)
6810 fprintf (f, ", can't combine");
6812 if (rld[r].secondary_p)
6813 fprintf (f, ", secondary_reload_p");
6815 if (rld[r].in_reg != 0)
6817 fprintf (f, "\n\treload_in_reg: ");
6818 print_inline_rtx (f, rld[r].in_reg, 24);
6821 if (rld[r].out_reg != 0)
6823 fprintf (f, "\n\treload_out_reg: ");
6824 print_inline_rtx (f, rld[r].out_reg, 24);
6827 if (rld[r].reg_rtx != 0)
6829 fprintf (f, "\n\treload_reg_rtx: ");
6830 print_inline_rtx (f, rld[r].reg_rtx, 24);
6833 prefix = "\n\t";
6834 if (rld[r].secondary_in_reload != -1)
6836 fprintf (f, "%ssecondary_in_reload = %d",
6837 prefix, rld[r].secondary_in_reload);
6838 prefix = ", ";
6841 if (rld[r].secondary_out_reload != -1)
6842 fprintf (f, "%ssecondary_out_reload = %d\n",
6843 prefix, rld[r].secondary_out_reload);
6845 prefix = "\n\t";
6846 if (rld[r].secondary_in_icode != CODE_FOR_nothing)
6848 fprintf (f, "%ssecondary_in_icode = %s", prefix,
6849 insn_data[rld[r].secondary_in_icode].name);
6850 prefix = ", ";
6853 if (rld[r].secondary_out_icode != CODE_FOR_nothing)
6854 fprintf (f, "%ssecondary_out_icode = %s", prefix,
6855 insn_data[rld[r].secondary_out_icode].name);
6857 fprintf (f, "\n");
6861 void
6862 debug_reload ()
6864 debug_reload_to_stream (stderr);