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
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
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
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.
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
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
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. */
93 #include "insn-config.h"
99 #include "hard-reg-set.h"
103 #include "function.h"
106 #ifndef REGISTER_MOVE_COST
107 #define REGISTER_MOVE_COST(m, x, y) 2
110 #ifndef REGNO_MODE_OK_FOR_BASE_P
111 #define REGNO_MODE_OK_FOR_BASE_P(REGNO, MODE) REGNO_OK_FOR_BASE_P (REGNO)
114 #ifndef REG_MODE_OK_FOR_BASE_P
115 #define REG_MODE_OK_FOR_BASE_P(REGNO, MODE) REG_OK_FOR_BASE_P (REGNO)
118 /* All reloads of the current insn are recorded here. See reload.h for
121 struct reload rld
[MAX_RELOADS
];
123 /* All the "earlyclobber" operands of the current insn
124 are recorded here. */
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. */
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. */
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
175 static rtx secondary_memlocs
[NUM_MACHINE_MODES
];
176 static rtx secondary_memlocs_elim
[NUM_MACHINE_MODES
][MAX_RECOG_OPERANDS
];
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
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 \
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
,
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,
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
,
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. */
285 push_secondary_reload (in_p
, x
, opnum
, optional
, reload_class
, reload_mode
,
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
;
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
)))))
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
337 class = SECONDARY_INPUT_RELOAD_CLASS (reload_class
, reload_mode
, x
);
340 #ifdef SECONDARY_OUTPUT_RELOAD_CLASS
342 class = SECONDARY_OUTPUT_RELOAD_CLASS (reload_class
, reload_mode
, x
);
345 /* If we don't need any secondary registers, done. */
346 if (class == NO_REGS
)
349 /* Get a possible insn to use. If the predicate doesn't accept X, don't
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
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
373 enum reg_class insn_class
;
375 if (insn_data
[(int) icode
].operand
[!in_p
].constraint
[0] == 0)
376 insn_class
= ALL_REGS
;
380 = insn_data
[(int) icode
].operand
[!in_p
].constraint
[in_p
];
382 = (insn_letter
== 'r' ? GENERAL_REGS
383 : REG_CLASS_FROM_LETTER ((unsigned char) insn_letter
));
386 if (insn_class
== NO_REGS
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] != '&')
394 if (reg_class_subset_p (reload_class
, insn_class
))
395 mode
= insn_data
[(int) icode
].operand
[2].mode
;
398 char t_letter
= insn_data
[(int) icode
].operand
[2].constraint
[2];
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
));
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
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
)
426 /* If we need a tertiary reload, see if we have one we can reuse or else
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
))
447 rld
[t_reload
].inmode
= t_mode
;
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;
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
))
504 rld
[s_reload
].inmode
= mode
;
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
;
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;
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
);
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
;
585 enum reload_type type
;
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
);
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);
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
);
615 secondary_memlocs
[(int) mode
]
616 = assign_stack_local (mode
, GET_MODE_SIZE (mode
), 0);
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
638 type
= (type
== RELOAD_FOR_INPUT
? RELOAD_FOR_INPUT_ADDRESS
639 : type
== RELOAD_FOR_OUTPUT
? RELOAD_FOR_OUTPUT_ADDRESS
642 find_reloads_address (mode
, (rtx
*)0, XEXP (loc
, 0), &XEXP (loc
, 0),
646 secondary_memlocs_elim
[(int) mode
][opnum
] = loc
;
650 /* Clear any secondary memory locations we've made. */
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
;
669 enum reg_class best_class
= NO_REGS
;
670 unsigned int best_size
= 0;
672 for (class = 1; class < N_REG_CLASSES
; class++)
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
))
681 if (! bad
&& reg_class_size
[class] > best_size
)
682 best_class
= class, best_size
= reg_class_size
[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. */
700 find_reusable_reload (p_in
, out
, class, type
, opnum
, dont_share
)
702 enum reg_class
class;
703 enum reload_type type
;
704 int opnum
, dont_share
;
708 /* We can't merge two reloads if the output of either one is
711 if (earlyclobber_operand_p (out
))
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
))
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
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
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
)
773 /* Return nonzero if X is a SUBREG which will require reloading of its
774 SUBREG_REG expression. */
777 reload_inner_reg_of_subreg (x
, mode
)
779 enum machine_mode mode
;
783 /* Only SUBREGs are problematical. */
784 if (GET_CODE (x
) != SUBREG
)
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
)
793 /* If INNER is not a hard register, then INNER will not need to
795 if (GET_CODE (inner
) != REG
796 || REGNO (inner
) >= FIRST_PSEUDO_REGISTER
)
799 /* If INNER is not ok for MODE, then INNER will need reloading. */
800 if (! HARD_REGNO_MODE_OK (subreg_regno (x
), mode
))
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
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
846 push_reload (in
, out
, inloc
, outloc
, class,
847 inmode
, outmode
, strict_low
, optional
, opnum
, type
)
850 enum reg_class
class;
851 enum machine_mode inmode
, outmode
;
855 enum reload_type type
;
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));
907 case PRE_INC
: case PRE_DEC
: case PRE_MODIFY
:
908 out
= replace_equiv_address_nv (out
, XEXP (XEXP (out
, 0), 0));
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
))
951 && (CONSTANT_P (SUBREG_REG (in
))
952 || GET_CODE (SUBREG_REG (in
)) == PLUS
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
)))
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
)
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)
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
)))
984 && ((GET_MODE_SIZE (GET_MODE (SUBREG_REG (in
)))
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
)),
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
)),
1007 in_subreg_loc
= inloc
;
1008 inloc
= &SUBREG_REG (in
);
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
))
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
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
)
1036 = find_valid_class (inmode
,
1037 subreg_regno_offset (REGNO (SUBREG_REG (in
)),
1038 GET_MODE (SUBREG_REG (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
)),
1065 && (CONSTANT_P (SUBREG_REG (out
))
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)
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
)))
1085 && ((GET_MODE_SIZE (GET_MODE (SUBREG_REG (out
)))
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
)),
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
)),
1108 out_subreg_loc
= outloc
;
1109 outloc
= &SUBREG_REG (out
);
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
))
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
),
1136 find_valid_class (outmode
,
1137 subreg_regno_offset (REGNO (SUBREG_REG (out
)),
1138 GET_MODE (SUBREG_REG (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)))
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. */
1169 class = PREFERRED_RELOAD_CLASS (in
, class);
1171 /* Output reloads may need analogous treatment, different in detail. */
1172 #ifdef PREFERRED_OUTPUT_RELOAD_CLASS
1174 class = PREFERRED_OUTPUT_RELOAD_CLASS (out
, class);
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
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);
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);
1193 /* Verify that this class is at least possible for the mode that
1195 if (this_insn_is_asm
)
1197 enum machine_mode mode
;
1198 if (GET_MODE_SIZE (inmode
) > GET_MODE_SIZE (outmode
))
1202 if (mode
== VOIDmode
)
1204 error_for_asm (this_insn
, "cannot reload integer constant operand in `asm'");
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
);
1218 for (j
= 1; j
< nregs
; j
++)
1219 if (! TEST_HARD_REG_BIT (reg_class_contents
[(int) class], i
+ j
))
1224 if (i
== FIRST_PSEUDO_REGISTER
)
1226 error_for_asm (this_insn
, "impossible register constraint in `asm'");
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
))
1238 i
= find_reusable_reload (&in
, out
, class, type
, opnum
, dont_share
);
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
1249 = push_secondary_reload (1, in
, opnum
, optional
, class, inmode
, type
,
1250 &secondary_in_icode
);
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
);
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
)),
1269 get_secondary_mem (in
, inmode
, opnum
, type
);
1275 rld
[i
].class = class;
1276 rld
[i
].inmode
= inmode
;
1277 rld
[i
].outmode
= outmode
;
1279 rld
[i
].optional
= optional
;
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;
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
)),
1299 get_secondary_mem (out
, outmode
, opnum
, type
);
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
;
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
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
1339 if (opnum
> rld
[i
].opnum
)
1341 remove_address_replacements (in
);
1343 in_reg
= rld
[i
].in_reg
;
1346 remove_address_replacements (rld
[i
].in
);
1349 rld
[i
].in_reg
= in_reg
;
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;
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
)))
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)
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
)
1402 register struct replacement
*r
= &replacements
[n_replacements
++];
1404 r
->subreg_loc
= in_subreg_loc
;
1408 if (outloc
!= 0 && outloc
!= inloc
)
1410 register struct replacement
*r
= &replacements
[n_replacements
++];
1413 r
->subreg_loc
= out_subreg_loc
;
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
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
,
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
))
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)
1460 enum machine_mode rel_mode
= inmode
;
1462 if (out
&& GET_MODE_SIZE (outmode
) > GET_MODE_SIZE (inmode
))
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
,
1472 + HARD_REGNO_NREGS (regno
,
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
1478 && (out
== 0 || in
== out
1479 || ! hard_reg_set_here_p (regno
,
1481 + HARD_REGNO_NREGS (regno
,
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. */
1488 || (GET_CODE (in
) == SUBREG
1489 && (((GET_MODE_SIZE (GET_MODE (in
)) + (UNITS_PER_WORD
- 1))
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
))
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],
1511 rld
[i
].reg_rtx
= gen_rtx_REG (rel_mode
, regno
);
1518 output_reloadnum
= 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. */
1530 push_replacement (loc
, reloadnum
, mode
)
1533 enum machine_mode mode
;
1535 if (replace_reloads
)
1537 register struct replacement
*r
= &replacements
[n_replacements
++];
1538 r
->what
= reloadnum
;
1545 /* Transfer all replacements that used to be in reload FROM to be in
1549 transfer_replacements (to
, from
)
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
)
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;
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. */
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
);
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. */
1614 int output_reload
= -1;
1615 int secondary_out
= -1;
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)
1629 if (output_reload
< 0 || rld
[output_reload
].optional
)
1632 /* An input-output reload isn't combinable. */
1634 if (rld
[output_reload
].in
!= 0)
1637 /* If this reload is for an earlyclobber operand, we can't do anything. */
1638 if (earlyclobber_operand_p (rld
[output_reload
].out
))
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
))
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
]))
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,
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
,
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
))
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
];
1716 /* If required, minimize the register class. */
1717 if (reg_class_subset_p (rld
[output_reload
].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
;
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)
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] == '+')
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)));
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). */
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;
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
))
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
)),
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
)),
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
);
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. */
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
))
1874 for (i
= 0; i
< nwords
; i
++)
1875 if (! TEST_HARD_REG_BIT (reg_class_contents
[(int) class],
1881 if (GET_CODE (real_out
) == REG
)
1884 value
= gen_rtx_REG (outmode
, regno
);
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
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
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
))
1919 || ! refers_to_regno_for_reload_p (regno
, regno
+ nwords
,
1920 PATTERN (this_insn
), inloc
)))
1924 for (i
= 0; i
< nwords
; i
++)
1925 if (! TEST_HARD_REG_BIT (reg_class_contents
[(int) class],
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
)
1939 value
= gen_rtx_REG (inmode
, regno
);
1947 /* This page contains subroutines used mainly for determining
1948 whether the IN or an OUT of a reload can serve as the
1951 /* Return 1 if X is an operand of an insn that is being earlyclobbered. */
1954 earlyclobber_operand_p (x
)
1959 for (i
= 0; i
< n_earlyclobbers
; i
++)
1960 if (reload_earlyclobbers
[i
] == x
)
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. */
1972 hard_reg_set_here_p (beg_regno
, end_regno
, x
)
1973 unsigned int beg_regno
, end_regno
;
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. */
1988 && r
+ HARD_REGNO_NREGS (r
, GET_MODE (op0
)) > beg_regno
)
1992 else if (GET_CODE (x
) == PARALLEL
)
1994 register int i
= XVECLEN (x
, 0) - 1;
1997 if (hard_reg_set_here_p (beg_regno
, end_regno
, XVECEXP (x
, 0, i
)))
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
2009 strict_memory_address_p (mode
, addr
)
2010 enum machine_mode mode ATTRIBUTE_UNUSED
;
2013 GO_IF_LEGITIMATE_ADDRESS (mode
, addr
, win
);
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
)
2040 register RTX_CODE code
= GET_CODE (x
);
2041 register const char *fmt
;
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
)))
2054 i
= REGNO (SUBREG_REG (x
));
2055 if (i
>= FIRST_PSEUDO_REGISTER
)
2057 i
+= subreg_regno_offset (REGNO (SUBREG_REG (x
)),
2058 GET_MODE (SUBREG_REG (x
)),
2065 if (GET_CODE (y
) == SUBREG
)
2067 j
= REGNO (SUBREG_REG (y
));
2068 if (j
>= FIRST_PSEUDO_REGISTER
)
2070 j
+= subreg_regno_offset (REGNO (SUBREG_REG (y
)),
2071 GET_MODE (SUBREG_REG (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;
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;
2109 /* Now we have disposed of all the cases
2110 in which different rtx codes can match. */
2111 if (code
!= GET_CODE (y
))
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
))
2123 /* Compare the elements. If any pair of corresponding elements
2124 fail to match, return 0 for the whole things. */
2127 fmt
= GET_RTX_FORMAT (code
);
2128 for (i
= GET_RTX_LENGTH (code
) - 1; i
>= 0; i
--)
2134 if (XWINT (x
, i
) != XWINT (y
, i
))
2139 if (XINT (x
, i
) != XINT (y
, i
))
2144 val
= operands_match_p (XEXP (x
, i
), XEXP (y
, i
));
2147 /* If any subexpression returns 2,
2148 we should return 2 if we are successful. */
2157 if (XVECLEN (x
, i
) != XVECLEN (y
, i
))
2159 for (j
= XVECLEN (x
, i
) - 1; j
>= 0; --j
)
2161 val
= operands_match_p (XVECEXP (x
, i
, j
), XVECEXP (y
, i
, j
));
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. */
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
2191 struct decomposition val
;
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
;
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
;
2226 if (GET_CODE (addr
) == CONST
)
2228 addr
= XEXP (addr
, 0);
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);
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);
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
)
2282 val
.start
= INTVAL (offset
);
2283 val
.end
= val
.start
+ GET_MODE_SIZE (GET_MODE (x
));
2287 else if (GET_CODE (x
) == REG
)
2290 val
.start
= true_regnum (x
);
2293 /* A pseudo with no hard reg. */
2294 val
.start
= REGNO (x
);
2295 val
.end
= val
.start
+ 1;
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
));
2307 val
.start
= true_regnum (x
);
2309 return decompose (SUBREG_REG (x
));
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
)
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). */
2327 immune_p (x
, y
, ydata
)
2329 struct decomposition ydata
;
2331 struct decomposition xdata
;
2334 return !refers_to_regno_for_reload_p (ydata
.start
, ydata
.end
, x
, (rtx
*)0);
2338 if (GET_CODE (y
) != MEM
)
2340 /* If Y is memory and X is not, Y can't affect X. */
2341 if (GET_CODE (x
) != MEM
)
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
))
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
))
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
))
2362 /* If either base is variable, we don't know anything. */
2366 return (xdata
.start
>= ydata
.end
|| ydata
.start
>= xdata
.end
);
2369 /* Similar, but calls decompose. */
2372 safe_from_earlyclobber (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
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
)
2406 int replace
, ind_levels
;
2408 short *reload_reg_p
;
2410 register int insn_code_number
;
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
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;
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
];
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
;
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
];
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;
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;
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
);
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)
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)
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 *));
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
++)
2527 substed_operand
[i
] = recog_data
.operand
[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. */
2538 modified
[i
] = RELOAD_WRITE
;
2540 modified
[i
] = RELOAD_READ_WRITE
;
2543 /* The last operand should not be marked commutative. */
2544 if (i
== noperands
- 1)
2549 else if (c
>= '0' && c
<= '9')
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. */
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
2603 = (modified
[i
] == RELOAD_READ
? RELOAD_FOR_INPUT_ADDRESS
2604 : modified
[i
] == RELOAD_WRITE
? RELOAD_FOR_OUTPUT_ADDRESS
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
,
2630 recog_data
.operand
[i
] = *recog_data
.operand_loc
[i
];
2631 substed_operand
[i
] = recog_data
.operand
[i
];
2633 else if (code
== MEM
)
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
]);
2648 = find_reloads_toplev (recog_data
.operand
[i
], i
, address_type
[i
],
2651 && &SET_DEST (set
) == recog_data
.operand_loc
[i
],
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
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
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
]);
2713 = ((code
== REG
&& REGNO (recog_data
.operand
[i
])
2714 >= FIRST_PSEUDO_REGISTER
)
2715 ? reg_preferred_class (REGNO (recog_data
.operand
[i
]))
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;
2741 goal_alternative_swapped
= 0;
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. */
2759 /* BAD is set to 1 if it some operand can't fit this alternative
2760 even after reloading. */
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. */
2770 this_earlyclobber
= 0;
2772 for (i
= 0; i
< noperands
; i
++)
2774 register char *p
= constraints
[i
];
2775 register int win
= 0;
2777 /* 0 => this operand can be reloaded somehow for this alternative. */
2779 /* 0 => this operand can be reloaded if the alternative allows regs. */
2782 register rtx operand
= recog_data
.operand
[i
];
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;
2788 /* Nonzero if a constant forced into memory would be OK for this
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
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
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
))
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
)
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 */
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
))
2880 && ((GET_MODE_SIZE (GET_MODE (operand
))
2882 != HARD_REGNO_NREGS (REGNO (operand
),
2883 GET_MODE (operand
))))
2884 || ! HARD_REGNO_MODE_OK (REGNO (operand
) + offset
,
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
== ',')
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
++) != ',')
2913 case '=': case '+': case '*':
2917 /* The last operand should not be marked commutative. */
2918 if (i
!= noperands
- 1)
2931 /* Ignore rest of this alternative as far as
2932 reloading is concerned. */
2933 while (*p
&& *p
!= ',')
2937 case '0': case '1': case '2': case '3': case '4':
2938 case '5': case '6': case '7': case '8': case '9':
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
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. */
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
])
2972 did_match
= this_alternative_win
[c
];
2976 /* Operands don't match. */
2978 /* Retroactively mark the operand we had to match
2979 as a loser, if it wasn't already. */
2980 if (this_alternative_win
[c
])
2982 this_alternative_win
[c
] = 0;
2983 if (this_alternative
[c
] == (int) NO_REGS
)
2985 /* But count the pair only once in the total badness of
2986 this alternative, if the pair can be a dummy reload. */
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
]);
2999 /* This can be fixed with reloads if the operand
3000 we are supposed to match can be fixed with reloads. */
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
3008 if (! did_match
|| force_reload
)
3009 for (j
= 0; j
< i
; j
++)
3010 if (this_alternative_matches
[j
]
3011 == this_alternative_matches
[i
])
3016 /* All necessary reloads for an address_operand
3017 were handled in find_reloads_address. */
3018 this_alternative
[i
] = (int) BASE_REG_CLASS
;
3025 if (GET_CODE (operand
) == MEM
3026 || (GET_CODE (operand
) == REG
3027 && REGNO (operand
) >= FIRST_PSEUDO_REGISTER
3028 && reg_renumber
[REGNO (operand
)] < 0))
3030 if (CONSTANT_P (operand
)
3031 /* force_const_mem does not accept HIGH. */
3032 && GET_CODE (operand
) != HIGH
)
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
))
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
))
3053 /* Memory operand whose address is not offsettable. */
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
3066 || reg_equiv_address
[REGNO (XEXP (operand
, 0))] != 0)))
3070 /* Memory operand whose address is offsettable. */
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))))
3094 /* force_const_mem does not accept HIGH. */
3095 if ((CONSTANT_P (operand
) && GET_CODE (operand
) != HIGH
)
3096 || GET_CODE (operand
) == MEM
)
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;
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
)
3117 if (GET_CODE (operand
) == CONST_DOUBLE
)
3122 if (GET_CODE (operand
) == CONST_DOUBLE
)
3128 if (GET_CODE (operand
) == CONST_DOUBLE
3129 && CONST_DOUBLE_OK_FOR_LETTER_P (operand
, c
))
3134 if (GET_CODE (operand
) == CONST_INT
3135 || (GET_CODE (operand
) == CONST_DOUBLE
3136 && GET_MODE (operand
) == VOIDmode
))
3139 if (CONSTANT_P (operand
)
3140 #ifdef LEGITIMATE_PIC_OPERAND_P
3141 && (! flag_pic
|| LEGITIMATE_PIC_OPERAND_P (operand
))
3148 if (GET_CODE (operand
) == CONST_INT
3149 || (GET_CODE (operand
) == CONST_DOUBLE
3150 && GET_MODE (operand
) == VOIDmode
))
3162 if (GET_CODE (operand
) == CONST_INT
3163 && CONST_OK_FOR_LETTER_P (INTVAL (operand
), c
))
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
)
3181 || LEGITIMATE_PIC_OPERAND_P (operand
))
3183 && (GENERAL_REGS
== ALL_REGS
3184 || GET_CODE (operand
) != REG
3185 || (REGNO (operand
) >= FIRST_PSEUDO_REGISTER
3186 && reg_renumber
[REGNO (operand
)] < 0)))
3188 /* Drop through into 'r' case. */
3192 = (int) reg_class_subunion
[this_alternative
[i
]][(int) GENERAL_REGS
];
3196 if (REG_CLASS_FROM_LETTER (c
) == NO_REGS
)
3198 #ifdef EXTRA_CONSTRAINT
3199 if (EXTRA_CONSTRAINT (operand
, c
))
3206 = (int) reg_class_subunion
[this_alternative
[i
]][(int) REG_CLASS_FROM_LETTER (c
)];
3208 if (GET_MODE (operand
) == BLKmode
)
3211 if (GET_CODE (operand
) == REG
3212 && reg_fits_class_p (operand
, this_alternative
[i
],
3213 offset
, GET_MODE (recog_data
.operand
[i
])))
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
)
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;
3233 int const_to_mem
= 0;
3235 this_alternative_offmemok
[i
] = offmemok
;
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)
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
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
])
3259 || no_input_reloads
)
3260 && operand_mode
[i
] != VOIDmode
)
3263 if (this_alternative
[i
] != (int) NO_REGS
)
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
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
])
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
))
3286 else if (modified
[i
] != RELOAD_WRITE
&& no_input_reloads
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
))
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
)
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
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
];
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
)
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");
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
)
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
],
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
))
3401 this_alternative_win
[j
] = 0;
3402 this_alternative_match_win
[j
] = 0;
3407 /* If an earlyclobber operand conflicts with something,
3408 it must be reloaded, so request this and count the cost. */
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;
3425 /* If one alternative accepts all the operands, no reload required,
3426 choose that alternative; don't consider the remaining ones. */
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
;
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
;
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)
3494 register enum reg_class tclass
;
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 *));
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
);
3537 /* Jump to `finish' from above if all operands are valid already.
3538 In that case, goal_alternative_win is all 1. */
3541 /* Right now, for any pair of operands I and J that are required to match,
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
)
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
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
)
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
])
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
,
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,
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
],
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
]],
3737 0, 0, i
, RELOAD_OTHER
);
3738 operand_reloadnum
[i
] = output_reloadnum
;
3740 else if (insn_code_number
>= 0)
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
);
3751 else if (goal_alternative_matched
[i
] < 0
3752 && goal_alternative_matches
[i
] < 0
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
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. */
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
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
]]
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
]],
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. */
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),
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
);
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
3914 && GET_CODE (rld
[i
].in
) == REG
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. */
3923 rld
[i
].in
= rld
[i
].reg_rtx
;
3927 /* Perhaps an output reload can be combined with another
3928 to reduce needs by one. */
3929 if (!goal_earlyclobber
)
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
++)
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
]
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
;
3967 rld
[i
].when_needed
= RELOAD_FOR_OPERAND_ADDRESS
;
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
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
;
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
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
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
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
;
4100 case RELOAD_FOR_INPUT_ADDRESS
:
4101 if (++first_inpaddr_num
[rld
[i
].opnum
] >= 0)
4103 first_inpaddr_num
[rld
[i
].opnum
] = i
;
4107 case RELOAD_FOR_OUTPUT_ADDRESS
:
4108 if (++first_outpaddr_num
[rld
[i
].opnum
] >= 0)
4110 first_outpaddr_num
[rld
[i
].opnum
] = i
;
4121 for (i
= 0; i
< n_reloads
; i
++)
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
;
4132 case RELOAD_FOR_INPADDR_ADDRESS
:
4133 first_num
= first_inpaddr_num
[rld
[i
].opnum
];
4134 type
= RELOAD_FOR_INPUT_ADDRESS
;
4136 case RELOAD_FOR_OUTADDR_ADDRESS
:
4137 first_num
= first_outpaddr_num
[rld
[i
].opnum
];
4138 type
= RELOAD_FOR_OUTPUT_ADDRESS
;
4145 else if (i
> first_num
)
4146 rld
[i
].when_needed
= type
;
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
;
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
);
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
++)
4197 && rld
[i
].when_needed
!= RELOAD_FOR_OUTADDR_ADDRESS
4198 && rld
[i
].when_needed
!= RELOAD_FOR_OUTPUT_ADDRESS
)
4202 /* Compute reload_mode and reload_nregs. */
4203 for (i
= 0; i
< n_reloads
; i
++)
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
);
4217 /* Return 1 if alternative number ALTNUM in constraint-string CONSTRAINT
4218 accepts a memory operand with constant address. */
4221 alternative_allows_memconst (constraint
, altnum
)
4222 const char *constraint
;
4226 /* Skip alternatives before the one requested. */
4229 while (*constraint
++ != ',');
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')
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
4247 IND_LEVELS says how many levels of indirect addressing this machine
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. */
4263 find_reloads_toplev (x
, opnum
, type
, ind_levels
, is_set_dest
, insn
,
4267 enum reload_type type
;
4271 int *address_reloaded
;
4273 register RTX_CODE code
= GET_CODE (x
);
4275 register const char *fmt
= GET_RTX_FORMAT (code
);
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
];
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
];
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
);
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
;
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
;
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
));
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)
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
4358 tem
= gen_lowpart_common (GET_MODE (x
), 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
))
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
)
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
))))
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
,
4420 for (copied
= 0, i
= GET_RTX_LENGTH (code
) - 1; i
>= 0; i
--)
4424 rtx new_part
= find_reloads_toplev (XEXP (x
, i
), opnum
, type
,
4425 ind_levels
, is_set_dest
, insn
,
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
);
4437 XEXP (x
, i
) = new_part
;
4443 /* Return a mem ref for the memory equivalent of reg REGNO.
4444 This mem ref is not shared with anything. */
4447 make_memloc (ad
, regno
)
4451 /* We must rerun eliminate_regs, in case the elimination
4452 offsets have changed. */
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
);
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
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. */
4496 find_reloads_address (mode
, memrefloc
, ad
, loc
, opnum
, type
, ind_levels
, insn
)
4497 enum machine_mode mode
;
4502 enum reload_type type
;
4507 int removed_and
= 0;
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
)
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
];
4522 && (tem
= eliminate_regs (tem
, mode
, insn
))
4523 && strict_memory_address_p (mode
, tem
))
4529 tem
= reg_equiv_memory_loc
[regno
];
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
),
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. */
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. */
4557 && num_not_at_initial_offset
4558 && ! rtx_equal_p (tem
, reg_equiv_mem
[regno
]))
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. */
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))
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
);
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)
4602 subst_reg_equivs_changed
= 0;
4603 *loc
= subst_reg_equivs (ad
, insn
);
4605 if (! subst_reg_equivs_changed
)
4608 /* Check result for validity after substitution. */
4609 if (strict_memory_address_p (mode
, ad
))
4613 #ifdef LEGITIMIZE_RELOAD_ADDRESS
4618 LEGITIMIZE_RELOAD_ADDRESS (ad
, GET_MODE (*memrefloc
), opnum
, type
,
4623 *memrefloc
= copy_rtx (*memrefloc
);
4624 XEXP (*memrefloc
, 0) = ad
;
4625 move_replacements (&ad
, &XEXP (*memrefloc
, 0));
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
)
4637 loc
= &XEXP (ad
, 0);
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
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. */
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);
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. */
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
),
4685 return ! removed_and
;
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. */
4705 *memrefloc
= copy_rtx (*memrefloc
);
4706 loc
= &XEXP (*memrefloc
, 0);
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
,
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
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
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
4761 #if FRAME_POINTER_REGNUM != ARG_POINTER_REGNUM
4762 || XEXP (XEXP (ad
, 0), 0) == arg_pointer_rtx
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
,
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
4785 #if FRAME_POINTER_REGNUM != ARG_POINTER_REGNUM
4786 || XEXP (XEXP (ad
, 0), 1) == arg_pointer_rtx
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
,
4803 /* See if address becomes valid when an eliminable register
4804 in a sum is replaced. */
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
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
))
4826 /* If constants aren't valid addresses, reload the constant address
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);
4838 loc
= &XEXP (*loc
, 0);
4841 find_reloads_address_part (ad
, loc
, BASE_REG_CLASS
, Pmode
, opnum
, type
,
4843 return ! removed_and
;
4846 return find_reloads_address_1 (mode
, ad
, 0, loc
, opnum
, type
, ind_levels
,
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. */
4857 subst_reg_equivs (ad
, insn
)
4861 register RTX_CODE code
= GET_CODE (ad
);
4863 register const char *fmt
;
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
);
4900 /* Quickly dispose of a common case. */
4901 if (XEXP (ad
, 0) == frame_pointer_rtx
4902 && GET_CODE (XEXP (ad
, 1)) == CONST_INT
)
4910 fmt
= GET_RTX_FORMAT (code
);
4911 for (i
= GET_RTX_LENGTH (code
) - 1; i
>= 0; i
--)
4913 XEXP (ad
, i
) = subst_reg_equivs (XEXP (ad
, i
), insn
);
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. */
4929 enum machine_mode mode
= GET_MODE (x
);
4931 if (mode
== VOIDmode
)
4932 mode
= GET_MODE (y
);
4934 if (mode
== VOIDmode
)
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
)
4958 if (GET_CODE (y
) == CONST
)
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. */
4980 subst_indexed_address (addr
)
4983 rtx op0
= 0, op1
= 0, op2
= 0;
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
)
5004 else if (GET_CODE (op1
) == PLUS
5005 && (tem
= subst_indexed_address (op1
)) != op1
)
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. */
5018 op1
= form_sum (op1
, op2
);
5020 op0
= form_sum (op0
, op1
);
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. */
5038 update_auto_inc_notes (insn
, regno
, reloadnum
)
5039 rtx insn ATTRIBUTE_UNUSED
;
5040 int regno ATTRIBUTE_UNUSED
;
5041 int reloadnum ATTRIBUTE_UNUSED
;
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
);
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
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. */
5078 find_reloads_address_1 (mode
, x
, context
, loc
, opnum
, type
, ind_levels
, insn
)
5079 enum machine_mode mode
;
5084 enum reload_type type
;
5088 register RTX_CODE code
= GET_CODE (x
);
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
,
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
),
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
))
5162 else if (REG_OK_FOR_INDEX_P (op1
)
5163 && REG_MODE_OK_FOR_BASE_P (op0
, mode
))
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
);
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
);
5208 rtx op0
= XEXP (x
, 0);
5209 rtx op1
= XEXP (x
, 1);
5211 if (GET_CODE (op1
) != PLUS
&& GET_CODE (op1
) != MINUS
)
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))
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));
5235 /* A register that is incremented cannot be constant! */
5236 if (regno
>= FIRST_PSEUDO_REGISTER
5237 && reg_equiv_constant
[regno
] != 0)
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
,
5260 /* Then reload the memory location into a base
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
);
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),
5281 GET_MODE (x
), GET_MODE (x
), 0, 0,
5282 opnum
, RELOAD_OTHER
);
5284 update_auto_inc_notes (this_insn
, regno
, reloadnum
);
5297 if (GET_CODE (XEXP (x
, 0)) == REG
)
5299 register int regno
= REGNO (XEXP (x
, 0));
5303 /* A register that is incremented cannot be constant! */
5304 if (regno
>= FIRST_PSEUDO_REGISTER
5305 && reg_equiv_constant
[regno
] != 0)
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
,
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
))))
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
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
))
5364 && ! sets_cc0_p (PATTERN (insn
))
5366 && ! (icode
!= CODE_FOR_nothing
5367 && ((*insn_data
[icode
].operand
[0].predicate
)
5369 && ((*insn_data
[icode
].operand
[1].predicate
)
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);
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
);
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,
5393 = find_inc_amount (PATTERN (this_insn
), XEXP (x_orig
, 0));
5398 update_auto_inc_notes (this_insn
, REGNO (XEXP (x_orig
, 0)),
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);
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
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
);
5432 = find_inc_amount (PATTERN (this_insn
), XEXP (x
, 0));
5434 link
= FIND_REG_INC_NOTE (this_insn
, tem
);
5436 push_replacement (&XEXP (link
, 0), reloadnum
, VOIDmode
);
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
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
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
);
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
);
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
);
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
]))
5493 find_reloads_address (GET_MODE (x
), &x
, XEXP (x
, 0),
5494 &XEXP (x
, 0), opnum
, ADDR_TYPE (type
),
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
);
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
);
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
);
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. */
5549 enum reg_class
class = (context
? INDEX_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
,
5556 push_reload (x
, NULL_RTX
, loc
, (rtx
*)0, class,
5557 GET_MODE (x
), VOIDmode
, 0, 0, opnum
, type
);
5569 register const char *fmt
= GET_RTX_FORMAT (code
);
5572 for (i
= GET_RTX_LENGTH (code
) - 1; i
>= 0; i
--)
5575 find_reloads_address_1 (mode
, XEXP (x
, i
), context
, &XEXP (x
, i
),
5576 opnum
, type
, ind_levels
, insn
);
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
5599 find_reloads_address_part (x
, loc
, class, mode
, opnum
, type
, ind_levels
)
5602 enum reg_class
class;
5603 enum machine_mode mode
;
5605 enum reload_type type
;
5609 && (! LEGITIMATE_CONSTANT_P (x
)
5610 || PREFERRED_RELOAD_CLASS (x
, class) == NO_REGS
))
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
))
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
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
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
5659 find_reloads_subreg_address (x
, force_replace
, opnum
, type
,
5664 enum reload_type type
;
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. */
5675 && (reg_equiv_address
[regno
]
5676 || ! offsettable_memref_p (reg_equiv_mem
[regno
])))
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. */
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
)
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)
5708 base
= XEXP (base
, 0);
5710 if (GET_CODE (base
) != REG
5711 || (REGNO_POINTER_ALIGN (REGNO (base
))
5712 < outer_size
* BITS_PER_UNIT
))
5716 find_reloads_address (GET_MODE (tem
), &tem
, XEXP (tem
, 0),
5717 &XEXP (tem
, 0), opnum
, ADDR_TYPE (type
),
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
);
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. */
5740 subst_reloads (insn
)
5745 for (i
= 0; i
< n_replacements
; i
++)
5747 register struct replacement
*r
= &replacements
[i
];
5748 register rtx reloadreg
= rld
[r
->what
].reg_rtx
;
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. */
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])) \
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
);
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),
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
);
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
;
5819 *r
->where
= reloadreg
;
5821 /* If reload got no reg and isn't optional, something's wrong. */
5822 else if (! rld
[r
->what
].optional
)
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
5832 copy_replacements (x
, y
)
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. */
5846 for (i
= GET_RTX_LENGTH (code
) - 1; i
>= 0; i
--)
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
);
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 */
5872 move_replacements (x
, y
)
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
)
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
));
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
)),
5921 else if (GET_MODE (reloadreg
) == GET_MODE (*loc
))
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
),
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
);
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
;
5977 code
= GET_CODE (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
],
5993 if (reg_equiv_constant
[r
])
5999 return (endregno
> r
6000 && regno
< r
+ (r
< FIRST_PSEUDO_REGISTER
6001 ? HARD_REGNO_NREGS (r
, GET_MODE (x
))
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
;
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
)),
6032 /* If the output is an earlyclobber operand, this is
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
))))
6040 if (code
== CLOBBER
|| loc
== &SET_SRC (x
))
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
))
6062 if (refers_to_regno_for_reload_p (regno
, endregno
,
6066 else if (fmt
[i
] == 'E')
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
))
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
)
6092 int regno
, endregno
;
6094 /* Overly conservative. */
6095 if (GET_CODE (x
) == STRICT_LOW_PART
)
6098 /* If either argument is a constant, then modifying X can not affect IN. */
6099 if (CONSTANT_P (x
) || CONSTANT_P (in
))
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
)),
6110 else if (GET_CODE (x
) == REG
)
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
])
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
);
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
6144 refers_to_mem_for_reload_p (x
)
6150 if (GET_CODE (x
) == MEM
)
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
--)
6160 && (GET_CODE (XEXP (x
, i
)) == MEM
6161 || refers_to_mem_for_reload_p (XEXP (x
, i
))))
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
)
6198 enum reg_class
class;
6200 short *reload_reg_p
;
6202 enum machine_mode mode
;
6204 register rtx p
= insn
;
6205 rtx goaltry
, valtry
, value
, where
;
6207 register int regno
= -1;
6211 int goal_mem_addr_varies
= 0;
6212 int need_stable_sp
= 0;
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
))
6225 if (flag_float_store
&& GET_MODE_CLASS (GET_MODE (goal
)) == MODE_FLOAT
)
6227 /* An address with side effects must be reexecuted. */
6242 else if (CONSTANT_P (goal
))
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)))
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. */
6262 if (p
== 0 || GET_CODE (p
) == CODE_LABEL
)
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
6277 || INSN_UID (p
) < reload_first_uid
))
6280 pat
= single_set (p
);
6282 /* First check for something that sets some reg equal to GOAL. */
6285 && true_regnum (SET_SRC (pat
)) == regno
6286 && (valueno
= true_regnum (valtry
= SET_DEST (pat
))) >= 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)
6298 && (valueno
= true_regnum (valtry
= SET_DEST (pat
))) >= 0
6299 && rtx_renumbered_equal_p (goal
, SET_SRC (pat
)))
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
)
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)))
6315 && GET_CODE (goal
) == CONST_INT
6317 = operand_subword (XEXP (tem
, 0), 0, 0,
6319 && rtx_equal_p (goal
, goaltry
)
6321 = operand_subword (SET_DEST (pat
), 0, 0,
6323 && (valueno
= true_regnum (valtry
)) >= 0)))
6324 || (goal_const
&& (tem
= find_reg_note (p
, REG_EQUIV
,
6326 && GET_CODE (SET_DEST (pat
)) == REG
6327 && GET_CODE (XEXP (tem
, 0)) == CONST_DOUBLE
6328 && (GET_MODE_CLASS (GET_MODE (XEXP (tem
, 0)))
6330 && GET_CODE (goal
) == CONST_INT
6331 && 0 != (goaltry
= operand_subword (XEXP (tem
, 0), 1, 0,
6333 && rtx_equal_p (goal
, goaltry
)
6335 = operand_subword (SET_DEST (pat
), 1, 0, VOIDmode
))
6336 && (valueno
= true_regnum (valtry
)) >= 0)))
6340 if (valueno
!= other
)
6343 else if ((unsigned) valueno
>= FIRST_PSEUDO_REGISTER
)
6349 for (i
= HARD_REGNO_NREGS (valueno
, mode
) - 1; i
>= 0; i
--)
6350 if (! TEST_HARD_REG_BIT (reg_class_contents
[(int) class],
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
))
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
,
6381 /* Reject VALUE if the copy-insn moved the wrong sort of datum. */
6382 if (GET_MODE (value
) != mode
)
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
,
6391 + HARD_REGNO_NREGS (valueno
, mode
)),
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
))
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)
6414 for (i
= 0; i
< valuenregs
; ++i
)
6415 if (reload_reg_p
[valueno
+ i
] >= 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)
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
)
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. */
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
)
6458 if (goal_mem
|| need_stable_sp
)
6461 if (regno
>= 0 && regno
< FIRST_PSEUDO_REGISTER
)
6462 for (i
= 0; i
< nregs
; ++i
)
6463 if (call_used_regs
[regno
+ i
])
6466 if (valueno
>= 0 && valueno
< FIRST_PSEUDO_REGISTER
)
6467 for (i
= 0; i
< valuenregs
; ++i
)
6468 if (call_used_regs
[valueno
+ i
])
6470 #ifdef NON_SAVING_SETJMP
6471 if (NON_SAVING_SETJMP
&& find_reg_note (p
, REG_SETJMP
, NULL
))
6480 /* Watch out for unspec_volatile, and volatile asms. */
6481 if (volatile_insn_p (pat
))
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
);
6503 if (REGNO (dest
) < FIRST_PSEUDO_REGISTER
)
6504 xnregs
= HARD_REGNO_NREGS (xregno
, GET_MODE (dest
));
6507 if (xregno
< regno
+ nregs
&& xregno
+ xnregs
> regno
)
6509 if (xregno
< valueno
+ valuenregs
6510 && xregno
+ xnregs
> valueno
)
6512 if (goal_mem_addr_varies
6513 && reg_overlap_mentioned_for_reload_p (dest
, goal
))
6515 if (xregno
== STACK_POINTER_REGNUM
&& need_stable_sp
)
6518 else if (goal_mem
&& GET_CODE (dest
) == MEM
6519 && ! push_operand (dest
, GET_MODE (dest
)))
6521 else if (GET_CODE (dest
) == MEM
&& regno
>= FIRST_PSEUDO_REGISTER
6522 && reg_equiv_memory_loc
[regno
] != 0)
6524 else if (need_stable_sp
&& push_operand (dest
, GET_MODE (dest
)))
6527 else if (GET_CODE (pat
) == PARALLEL
)
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
);
6547 if (REGNO (dest
) < FIRST_PSEUDO_REGISTER
)
6548 xnregs
= HARD_REGNO_NREGS (xregno
, GET_MODE (dest
));
6551 if (xregno
< regno
+ nregs
6552 && xregno
+ xnregs
> regno
)
6554 if (xregno
< valueno
+ valuenregs
6555 && xregno
+ xnregs
> valueno
)
6557 if (goal_mem_addr_varies
6558 && reg_overlap_mentioned_for_reload_p (dest
,
6561 if (xregno
== STACK_POINTER_REGNUM
&& need_stable_sp
)
6564 else if (goal_mem
&& GET_CODE (dest
) == MEM
6565 && ! push_operand (dest
, GET_MODE (dest
)))
6567 else if (GET_CODE (dest
) == MEM
&& regno
>= FIRST_PSEUDO_REGISTER
6568 && reg_equiv_memory_loc
[regno
] != 0)
6570 else if (need_stable_sp
6571 && push_operand (dest
, GET_MODE (dest
)))
6577 if (GET_CODE (p
) == CALL_INSN
&& CALL_INSN_FUNCTION_USAGE (p
))
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
);
6593 = HARD_REGNO_NREGS (xregno
, GET_MODE (dest
));
6595 if (xregno
< regno
+ nregs
6596 && xregno
+ xnregs
> regno
)
6598 else if (xregno
< valueno
+ valuenregs
6599 && xregno
+ xnregs
> valueno
)
6601 else if (goal_mem_addr_varies
6602 && reg_overlap_mentioned_for_reload_p (dest
,
6607 else if (goal_mem
&& GET_CODE (dest
) == MEM
6608 && ! push_operand (dest
, GET_MODE (dest
)))
6610 else if (need_stable_sp
6611 && push_operand (dest
, GET_MODE (dest
)))
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. */
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
)
6632 if (incno
< valueno
+ valuenregs
&& incno
>= valueno
)
6634 if (goal_mem_addr_varies
6635 && reg_overlap_mentioned_for_reload_p (XEXP (link
, 0),
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. */
6650 find_inc_amount (x
, inced
)
6653 register enum rtx_code code
= GET_CODE (x
);
6654 register const char *fmt
;
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
--)
6683 register int tem
= find_inc_amount (XEXP (x
, i
), inced
);
6690 for (j
= XVECLEN (x
, i
) - 1; j
>= 0; j
--)
6692 register int tem
= find_inc_amount (XVECEXP (x
, i
, j
), inced
);
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
)
6709 enum machine_mode mode
;
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;
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
)
6746 static const char *const reload_when_needed_name
[] =
6749 "RELOAD_FOR_OUTPUT",
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",
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' */
6766 debug_reload_to_stream (f
)
6774 for (r
= 0; r
< n_reloads
; r
++)
6776 fprintf (f
, "Reload %d: ", r
);
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
],
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);
6834 if (rld
[r
].secondary_in_reload
!= -1)
6836 fprintf (f
, "%ssecondary_in_reload = %d",
6837 prefix
, rld
[r
].secondary_in_reload
);
6841 if (rld
[r
].secondary_out_reload
!= -1)
6842 fprintf (f
, "%ssecondary_out_reload = %d\n",
6843 prefix
, rld
[r
].secondary_out_reload
);
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
);
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
);
6864 debug_reload_to_stream (stderr
);