Remove redundant variable in hash_set.
[official-gcc.git] / gcc / lra-constraints.c
blobe381c7042277ed715ec7b109617f9fd30bb66fde
1 /* Code for RTL transformations to satisfy insn constraints.
2 Copyright (C) 2010, 2011, 2012
3 Free Software Foundation, Inc.
4 Contributed by Vladimir Makarov <vmakarov@redhat.com>.
6 This file is part of GCC.
8 GCC is free software; you can redistribute it and/or modify it under
9 the terms of the GNU General Public License as published by the Free
10 Software Foundation; either version 3, or (at your option) any later
11 version.
13 GCC is distributed in the hope that it will be useful, but WITHOUT ANY
14 WARRANTY; without even the implied warranty of MERCHANTABILITY or
15 FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
16 for more details.
18 You should have received a copy of the GNU General Public License
19 along with GCC; see the file COPYING3. If not see
20 <http://www.gnu.org/licenses/>. */
23 /* This file contains code for 3 passes: constraint pass,
24 inheritance/split pass, and pass for undoing failed inheritance and
25 split.
27 The major goal of constraint pass is to transform RTL to satisfy
28 insn and address constraints by:
29 o choosing insn alternatives;
30 o generating *reload insns* (or reloads in brief) and *reload
31 pseudos* which will get necessary hard registers later;
32 o substituting pseudos with equivalent values and removing the
33 instructions that initialized those pseudos.
35 The constraint pass has biggest and most complicated code in LRA.
36 There are a lot of important details like:
37 o reuse of input reload pseudos to simplify reload pseudo
38 allocations;
39 o some heuristics to choose insn alternative to improve the
40 inheritance;
41 o early clobbers etc.
43 The pass is mimicking former reload pass in alternative choosing
44 because the reload pass is oriented to current machine description
45 model. It might be changed if the machine description model is
46 changed.
48 There is special code for preventing all LRA and this pass cycling
49 in case of bugs.
51 On the first iteration of the pass we process every instruction and
52 choose an alternative for each one. On subsequent iterations we try
53 to avoid reprocessing instructions if we can be sure that the old
54 choice is still valid.
56 The inheritance/spilt pass is to transform code to achieve
57 ineheritance and live range splitting. It is done on backward
58 traversal of EBBs.
60 The inheritance optimization goal is to reuse values in hard
61 registers. There is analogous optimization in old reload pass. The
62 inheritance is achieved by following transformation:
64 reload_p1 <- p reload_p1 <- p
65 ... new_p <- reload_p1
66 ... => ...
67 reload_p2 <- p reload_p2 <- new_p
69 where p is spilled and not changed between the insns. Reload_p1 is
70 also called *original pseudo* and new_p is called *inheritance
71 pseudo*.
73 The subsequent assignment pass will try to assign the same (or
74 another if it is not possible) hard register to new_p as to
75 reload_p1 or reload_p2.
77 If the assignment pass fails to assign a hard register to new_p,
78 this file will undo the inheritance and restore the original code.
79 This is because implementing the above sequence with a spilled
80 new_p would make the code much worse. The inheritance is done in
81 EBB scope. The above is just a simplified example to get an idea
82 of the inheritance as the inheritance is also done for non-reload
83 insns.
85 Splitting (transformation) is also done in EBB scope on the same
86 pass as the inheritance:
88 r <- ... or ... <- r r <- ... or ... <- r
89 ... s <- r (new insn -- save)
90 ... =>
91 ... r <- s (new insn -- restore)
92 ... <- r ... <- r
94 The *split pseudo* s is assigned to the hard register of the
95 original pseudo or hard register r.
97 Splitting is done:
98 o In EBBs with high register pressure for global pseudos (living
99 in at least 2 BBs) and assigned to hard registers when there
100 are more one reloads needing the hard registers;
101 o for pseudos needing save/restore code around calls.
103 If the split pseudo still has the same hard register as the
104 original pseudo after the subsequent assignment pass or the
105 original pseudo was split, the opposite transformation is done on
106 the same pass for undoing inheritance. */
108 #undef REG_OK_STRICT
110 #include "config.h"
111 #include "system.h"
112 #include "coretypes.h"
113 #include "tm.h"
114 #include "hard-reg-set.h"
115 #include "rtl.h"
116 #include "tm_p.h"
117 #include "regs.h"
118 #include "insn-config.h"
119 #include "insn-codes.h"
120 #include "recog.h"
121 #include "output.h"
122 #include "addresses.h"
123 #include "target.h"
124 #include "function.h"
125 #include "expr.h"
126 #include "basic-block.h"
127 #include "except.h"
128 #include "optabs.h"
129 #include "df.h"
130 #include "ira.h"
131 #include "rtl-error.h"
132 #include "lra-int.h"
134 /* Value of LRA_CURR_RELOAD_NUM at the beginning of BB of the current
135 insn. Remember that LRA_CURR_RELOAD_NUM is the number of emitted
136 reload insns. */
137 static int bb_reload_num;
139 /* The current insn being processed and corresponding its data (basic
140 block, the insn data, the insn static data, and the mode of each
141 operand). */
142 static rtx curr_insn;
143 static basic_block curr_bb;
144 static lra_insn_recog_data_t curr_id;
145 static struct lra_static_insn_data *curr_static_id;
146 static enum machine_mode curr_operand_mode[MAX_RECOG_OPERANDS];
150 /* Start numbers for new registers and insns at the current constraints
151 pass start. */
152 static int new_regno_start;
153 static int new_insn_uid_start;
155 /* If LOC is nonnull, strip any outer subreg from it. */
156 static inline rtx *
157 strip_subreg (rtx *loc)
159 return loc && GET_CODE (*loc) == SUBREG ? &SUBREG_REG (*loc) : loc;
162 /* Return hard regno of REGNO or if it is was not assigned to a hard
163 register, use a hard register from its allocno class. */
164 static int
165 get_try_hard_regno (int regno)
167 int hard_regno;
168 enum reg_class rclass;
170 if ((hard_regno = regno) >= FIRST_PSEUDO_REGISTER)
171 hard_regno = lra_get_regno_hard_regno (regno);
172 if (hard_regno >= 0)
173 return hard_regno;
174 rclass = lra_get_allocno_class (regno);
175 if (rclass == NO_REGS)
176 return -1;
177 return ira_class_hard_regs[rclass][0];
180 /* Return final hard regno (plus offset) which will be after
181 elimination. We do this for matching constraints because the final
182 hard regno could have a different class. */
183 static int
184 get_final_hard_regno (int hard_regno, int offset)
186 if (hard_regno < 0)
187 return hard_regno;
188 hard_regno = lra_get_elimination_hard_regno (hard_regno);
189 return hard_regno + offset;
192 /* Return hard regno of X after removing subreg and making
193 elimination. If X is not a register or subreg of register, return
194 -1. For pseudo use its assignment. */
195 static int
196 get_hard_regno (rtx x)
198 rtx reg;
199 int offset, hard_regno;
201 reg = x;
202 if (GET_CODE (x) == SUBREG)
203 reg = SUBREG_REG (x);
204 if (! REG_P (reg))
205 return -1;
206 if ((hard_regno = REGNO (reg)) >= FIRST_PSEUDO_REGISTER)
207 hard_regno = lra_get_regno_hard_regno (hard_regno);
208 if (hard_regno < 0)
209 return -1;
210 offset = 0;
211 if (GET_CODE (x) == SUBREG)
212 offset += subreg_regno_offset (hard_regno, GET_MODE (reg),
213 SUBREG_BYTE (x), GET_MODE (x));
214 return get_final_hard_regno (hard_regno, offset);
217 /* If REGNO is a hard register or has been allocated a hard register,
218 return the class of that register. If REGNO is a reload pseudo
219 created by the current constraints pass, return its allocno class.
220 Return NO_REGS otherwise. */
221 static enum reg_class
222 get_reg_class (int regno)
224 int hard_regno;
226 if ((hard_regno = regno) >= FIRST_PSEUDO_REGISTER)
227 hard_regno = lra_get_regno_hard_regno (regno);
228 if (hard_regno >= 0)
230 hard_regno = get_final_hard_regno (hard_regno, 0);
231 return REGNO_REG_CLASS (hard_regno);
233 if (regno >= new_regno_start)
234 return lra_get_allocno_class (regno);
235 return NO_REGS;
238 /* Return true if REG satisfies (or will satisfy) reg class constraint
239 CL. Use elimination first if REG is a hard register. If REG is a
240 reload pseudo created by this constraints pass, assume that it will
241 be allocated a hard register from its allocno class, but allow that
242 class to be narrowed to CL if it is currently a superset of CL.
244 If NEW_CLASS is nonnull, set *NEW_CLASS to the new allocno class of
245 REGNO (reg), or NO_REGS if no change in its class was needed. */
246 static bool
247 in_class_p (rtx reg, enum reg_class cl, enum reg_class *new_class)
249 enum reg_class rclass, common_class;
250 enum machine_mode reg_mode;
251 int class_size, hard_regno, nregs, i, j;
252 int regno = REGNO (reg);
254 if (new_class != NULL)
255 *new_class = NO_REGS;
256 if (regno < FIRST_PSEUDO_REGISTER)
258 rtx final_reg = reg;
259 rtx *final_loc = &final_reg;
261 lra_eliminate_reg_if_possible (final_loc);
262 return TEST_HARD_REG_BIT (reg_class_contents[cl], REGNO (*final_loc));
264 reg_mode = GET_MODE (reg);
265 rclass = get_reg_class (regno);
266 if (regno < new_regno_start
267 /* Do not allow the constraints for reload instructions to
268 influence the classes of new pseudos. These reloads are
269 typically moves that have many alternatives, and restricting
270 reload pseudos for one alternative may lead to situations
271 where other reload pseudos are no longer allocatable. */
272 || INSN_UID (curr_insn) >= new_insn_uid_start)
273 /* When we don't know what class will be used finally for reload
274 pseudos, we use ALL_REGS. */
275 return ((regno >= new_regno_start && rclass == ALL_REGS)
276 || (rclass != NO_REGS && ira_class_subset_p[rclass][cl]
277 && ! hard_reg_set_subset_p (reg_class_contents[cl],
278 lra_no_alloc_regs)));
279 else
281 common_class = ira_reg_class_subset[rclass][cl];
282 if (new_class != NULL)
283 *new_class = common_class;
284 if (hard_reg_set_subset_p (reg_class_contents[common_class],
285 lra_no_alloc_regs))
286 return false;
287 /* Check that there are enough allocatable regs. */
288 class_size = ira_class_hard_regs_num[common_class];
289 for (i = 0; i < class_size; i++)
291 hard_regno = ira_class_hard_regs[common_class][i];
292 nregs = hard_regno_nregs[hard_regno][reg_mode];
293 if (nregs == 1)
294 return true;
295 for (j = 0; j < nregs; j++)
296 if (TEST_HARD_REG_BIT (lra_no_alloc_regs, hard_regno + j))
297 break;
298 if (j >= nregs)
299 return true;
301 return false;
305 /* Return true if REGNO satisfies a memory constraint. */
306 static bool
307 in_mem_p (int regno)
309 return get_reg_class (regno) == NO_REGS;
312 /* If we have decided to substitute X with another value, return that
313 value, otherwise return X. */
314 static rtx
315 get_equiv_substitution (rtx x)
317 int regno;
318 rtx res;
320 if (! REG_P (x) || (regno = REGNO (x)) < FIRST_PSEUDO_REGISTER
321 || ! ira_reg_equiv[regno].defined_p
322 || ! ira_reg_equiv[regno].profitable_p
323 || lra_get_regno_hard_regno (regno) >= 0)
324 return x;
325 if ((res = ira_reg_equiv[regno].memory) != NULL_RTX)
326 return res;
327 if ((res = ira_reg_equiv[regno].constant) != NULL_RTX)
328 return res;
329 if ((res = ira_reg_equiv[regno].invariant) != NULL_RTX)
330 return res;
331 gcc_unreachable ();
334 /* Set up curr_operand_mode. */
335 static void
336 init_curr_operand_mode (void)
338 int nop = curr_static_id->n_operands;
339 for (int i = 0; i < nop; i++)
341 enum machine_mode mode = GET_MODE (*curr_id->operand_loc[i]);
342 if (mode == VOIDmode)
344 /* The .md mode for address operands is the mode of the
345 addressed value rather than the mode of the address itself. */
346 if (curr_id->icode >= 0 && curr_static_id->operand[i].is_address)
347 mode = Pmode;
348 else
349 mode = curr_static_id->operand[i].mode;
351 curr_operand_mode[i] = mode;
357 /* The page contains code to reuse input reloads. */
359 /* Structure describes input reload of the current insns. */
360 struct input_reload
362 /* Reloaded value. */
363 rtx input;
364 /* Reload pseudo used. */
365 rtx reg;
368 /* The number of elements in the following array. */
369 static int curr_insn_input_reloads_num;
370 /* Array containing info about input reloads. It is used to find the
371 same input reload and reuse the reload pseudo in this case. */
372 static struct input_reload curr_insn_input_reloads[LRA_MAX_INSN_RELOADS];
374 /* Initiate data concerning reuse of input reloads for the current
375 insn. */
376 static void
377 init_curr_insn_input_reloads (void)
379 curr_insn_input_reloads_num = 0;
382 /* Change class of pseudo REGNO to NEW_CLASS. Print info about it
383 using TITLE. Output a new line if NL_P. */
384 static void
385 change_class (int regno, enum reg_class new_class,
386 const char *title, bool nl_p)
388 lra_assert (regno >= FIRST_PSEUDO_REGISTER);
389 if (lra_dump_file != NULL)
390 fprintf (lra_dump_file, "%s to class %s for r%d",
391 title, reg_class_names[new_class], regno);
392 setup_reg_classes (regno, new_class, NO_REGS, new_class);
393 if (lra_dump_file != NULL && nl_p)
394 fprintf (lra_dump_file, "\n");
397 /* Create a new pseudo using MODE, RCLASS, ORIGINAL or reuse already
398 created input reload pseudo (only if TYPE is not OP_OUT). The
399 result pseudo is returned through RESULT_REG. Return TRUE if we
400 created a new pseudo, FALSE if we reused the already created input
401 reload pseudo. Use TITLE to describe new registers for debug
402 purposes. */
403 static bool
404 get_reload_reg (enum op_type type, enum machine_mode mode, rtx original,
405 enum reg_class rclass, const char *title, rtx *result_reg)
407 int i, regno;
408 enum reg_class new_class;
410 if (type == OP_OUT)
412 *result_reg
413 = lra_create_new_reg_with_unique_value (mode, original, rclass, title);
414 return true;
416 for (i = 0; i < curr_insn_input_reloads_num; i++)
417 if (rtx_equal_p (curr_insn_input_reloads[i].input, original)
418 && in_class_p (curr_insn_input_reloads[i].reg, rclass, &new_class))
420 lra_assert (! side_effects_p (original));
421 *result_reg = curr_insn_input_reloads[i].reg;
422 regno = REGNO (*result_reg);
423 if (lra_dump_file != NULL)
425 fprintf (lra_dump_file, " Reuse r%d for reload ", regno);
426 print_value_slim (lra_dump_file, original, 1);
428 if (new_class != lra_get_allocno_class (regno))
429 change_class (regno, new_class, ", change", false);
430 if (lra_dump_file != NULL)
431 fprintf (lra_dump_file, "\n");
432 return false;
434 *result_reg = lra_create_new_reg (mode, original, rclass, title);
435 lra_assert (curr_insn_input_reloads_num < LRA_MAX_INSN_RELOADS);
436 curr_insn_input_reloads[curr_insn_input_reloads_num].input = original;
437 curr_insn_input_reloads[curr_insn_input_reloads_num++].reg = *result_reg;
438 return true;
443 /* The page contains code to extract memory address parts. */
445 /* Wrapper around REGNO_OK_FOR_INDEX_P, to allow pseudos. */
446 static inline bool
447 ok_for_index_p_nonstrict (rtx reg)
449 unsigned regno = REGNO (reg);
451 return regno >= FIRST_PSEUDO_REGISTER || REGNO_OK_FOR_INDEX_P (regno);
454 /* A version of regno_ok_for_base_p for use here, when all pseudos
455 should count as OK. Arguments as for regno_ok_for_base_p. */
456 static inline bool
457 ok_for_base_p_nonstrict (rtx reg, enum machine_mode mode, addr_space_t as,
458 enum rtx_code outer_code, enum rtx_code index_code)
460 unsigned regno = REGNO (reg);
462 if (regno >= FIRST_PSEUDO_REGISTER)
463 return true;
464 return ok_for_base_p_1 (regno, mode, as, outer_code, index_code);
469 /* The page contains major code to choose the current insn alternative
470 and generate reloads for it. */
472 /* Return the offset from REGNO of the least significant register
473 in (reg:MODE REGNO).
475 This function is used to tell whether two registers satisfy
476 a matching constraint. (reg:MODE1 REGNO1) matches (reg:MODE2 REGNO2) if:
478 REGNO1 + lra_constraint_offset (REGNO1, MODE1)
479 == REGNO2 + lra_constraint_offset (REGNO2, MODE2) */
481 lra_constraint_offset (int regno, enum machine_mode mode)
483 lra_assert (regno < FIRST_PSEUDO_REGISTER);
484 if (WORDS_BIG_ENDIAN && GET_MODE_SIZE (mode) > UNITS_PER_WORD
485 && SCALAR_INT_MODE_P (mode))
486 return hard_regno_nregs[regno][mode] - 1;
487 return 0;
490 /* Like rtx_equal_p except that it allows a REG and a SUBREG to match
491 if they are the same hard reg, and has special hacks for
492 auto-increment and auto-decrement. This is specifically intended for
493 process_alt_operands to use in determining whether two operands
494 match. X is the operand whose number is the lower of the two.
496 It is supposed that X is the output operand and Y is the input
497 operand. Y_HARD_REGNO is the final hard regno of register Y or
498 register in subreg Y as we know it now. Otherwise, it is a
499 negative value. */
500 static bool
501 operands_match_p (rtx x, rtx y, int y_hard_regno)
503 int i;
504 RTX_CODE code = GET_CODE (x);
505 const char *fmt;
507 if (x == y)
508 return true;
509 if ((code == REG || (code == SUBREG && REG_P (SUBREG_REG (x))))
510 && (REG_P (y) || (GET_CODE (y) == SUBREG && REG_P (SUBREG_REG (y)))))
512 int j;
514 i = get_hard_regno (x);
515 if (i < 0)
516 goto slow;
518 if ((j = y_hard_regno) < 0)
519 goto slow;
521 i += lra_constraint_offset (i, GET_MODE (x));
522 j += lra_constraint_offset (j, GET_MODE (y));
524 return i == j;
527 /* If two operands must match, because they are really a single
528 operand of an assembler insn, then two post-increments are invalid
529 because the assembler insn would increment only once. On the
530 other hand, a post-increment matches ordinary indexing if the
531 post-increment is the output operand. */
532 if (code == POST_DEC || code == POST_INC || code == POST_MODIFY)
533 return operands_match_p (XEXP (x, 0), y, y_hard_regno);
535 /* Two pre-increments are invalid because the assembler insn would
536 increment only once. On the other hand, a pre-increment matches
537 ordinary indexing if the pre-increment is the input operand. */
538 if (GET_CODE (y) == PRE_DEC || GET_CODE (y) == PRE_INC
539 || GET_CODE (y) == PRE_MODIFY)
540 return operands_match_p (x, XEXP (y, 0), -1);
542 slow:
544 if (code == REG && GET_CODE (y) == SUBREG && REG_P (SUBREG_REG (y))
545 && x == SUBREG_REG (y))
546 return true;
547 if (GET_CODE (y) == REG && code == SUBREG && REG_P (SUBREG_REG (x))
548 && SUBREG_REG (x) == y)
549 return true;
551 /* Now we have disposed of all the cases in which different rtx
552 codes can match. */
553 if (code != GET_CODE (y))
554 return false;
556 /* (MULT:SI x y) and (MULT:HI x y) are NOT equivalent. */
557 if (GET_MODE (x) != GET_MODE (y))
558 return false;
560 switch (code)
562 CASE_CONST_UNIQUE:
563 return false;
565 case LABEL_REF:
566 return XEXP (x, 0) == XEXP (y, 0);
567 case SYMBOL_REF:
568 return XSTR (x, 0) == XSTR (y, 0);
570 default:
571 break;
574 /* Compare the elements. If any pair of corresponding elements fail
575 to match, return false for the whole things. */
577 fmt = GET_RTX_FORMAT (code);
578 for (i = GET_RTX_LENGTH (code) - 1; i >= 0; i--)
580 int val, j;
581 switch (fmt[i])
583 case 'w':
584 if (XWINT (x, i) != XWINT (y, i))
585 return false;
586 break;
588 case 'i':
589 if (XINT (x, i) != XINT (y, i))
590 return false;
591 break;
593 case 'e':
594 val = operands_match_p (XEXP (x, i), XEXP (y, i), -1);
595 if (val == 0)
596 return false;
597 break;
599 case '0':
600 break;
602 case 'E':
603 if (XVECLEN (x, i) != XVECLEN (y, i))
604 return false;
605 for (j = XVECLEN (x, i) - 1; j >= 0; --j)
607 val = operands_match_p (XVECEXP (x, i, j), XVECEXP (y, i, j), -1);
608 if (val == 0)
609 return false;
611 break;
613 /* It is believed that rtx's at this level will never
614 contain anything but integers and other rtx's, except for
615 within LABEL_REFs and SYMBOL_REFs. */
616 default:
617 gcc_unreachable ();
620 return true;
623 /* True if X is a constant that can be forced into the constant pool.
624 MODE is the mode of the operand, or VOIDmode if not known. */
625 #define CONST_POOL_OK_P(MODE, X) \
626 ((MODE) != VOIDmode \
627 && CONSTANT_P (X) \
628 && GET_CODE (X) != HIGH \
629 && !targetm.cannot_force_const_mem (MODE, X))
631 /* True if C is a non-empty register class that has too few registers
632 to be safely used as a reload target class. */
633 #define SMALL_REGISTER_CLASS_P(C) \
634 (reg_class_size [(C)] == 1 \
635 || (reg_class_size [(C)] >= 1 && targetm.class_likely_spilled_p (C)))
637 /* If REG is a reload pseudo, try to make its class satisfying CL. */
638 static void
639 narrow_reload_pseudo_class (rtx reg, enum reg_class cl)
641 enum reg_class rclass;
643 /* Do not make more accurate class from reloads generated. They are
644 mostly moves with a lot of constraints. Making more accurate
645 class may results in very narrow class and impossibility of find
646 registers for several reloads of one insn. */
647 if (INSN_UID (curr_insn) >= new_insn_uid_start)
648 return;
649 if (GET_CODE (reg) == SUBREG)
650 reg = SUBREG_REG (reg);
651 if (! REG_P (reg) || (int) REGNO (reg) < new_regno_start)
652 return;
653 if (in_class_p (reg, cl, &rclass) && rclass != cl)
654 change_class (REGNO (reg), rclass, " Change", true);
657 /* Generate reloads for matching OUT and INS (array of input operand
658 numbers with end marker -1) with reg class GOAL_CLASS. Add input
659 and output reloads correspondingly to the lists *BEFORE and
660 *AFTER. */
661 static void
662 match_reload (signed char out, signed char *ins, enum reg_class goal_class,
663 rtx *before, rtx *after)
665 int i, in;
666 rtx new_in_reg, new_out_reg, reg, clobber;
667 enum machine_mode inmode, outmode;
668 rtx in_rtx = *curr_id->operand_loc[ins[0]];
669 rtx out_rtx = *curr_id->operand_loc[out];
671 outmode = curr_operand_mode[out];
672 inmode = curr_operand_mode[ins[0]];
673 push_to_sequence (*before);
674 if (inmode != outmode)
676 if (GET_MODE_SIZE (inmode) > GET_MODE_SIZE (outmode))
678 reg = new_in_reg
679 = lra_create_new_reg_with_unique_value (inmode, in_rtx,
680 goal_class, "");
681 if (SCALAR_INT_MODE_P (inmode))
682 new_out_reg = gen_lowpart_SUBREG (outmode, reg);
683 else
684 new_out_reg = gen_rtx_SUBREG (outmode, reg, 0);
685 /* If the input reg is dying here, we can use the same hard
686 register for REG and IN_RTX. */
687 if (REG_P (in_rtx)
688 && find_regno_note (curr_insn, REG_DEAD, REGNO (in_rtx)))
689 lra_reg_info[REGNO (reg)].val = lra_reg_info[REGNO (in_rtx)].val;
691 else
693 reg = new_out_reg
694 = lra_create_new_reg_with_unique_value (outmode, out_rtx,
695 goal_class, "");
696 if (SCALAR_INT_MODE_P (outmode))
697 new_in_reg = gen_lowpart_SUBREG (inmode, reg);
698 else
699 new_in_reg = gen_rtx_SUBREG (inmode, reg, 0);
700 /* NEW_IN_REG is non-paradoxical subreg. We don't want
701 NEW_OUT_REG living above. We add clobber clause for
702 this. This is just a temporary clobber. We can remove
703 it at the end of LRA work. */
704 clobber = emit_clobber (new_out_reg);
705 LRA_TEMP_CLOBBER_P (PATTERN (clobber)) = 1;
706 if (GET_CODE (in_rtx) == SUBREG)
708 rtx subreg_reg = SUBREG_REG (in_rtx);
710 /* If SUBREG_REG is dying here and sub-registers IN_RTX
711 and NEW_IN_REG are similar, we can use the same hard
712 register for REG and SUBREG_REG. */
713 if (REG_P (subreg_reg) && GET_MODE (subreg_reg) == outmode
714 && SUBREG_BYTE (in_rtx) == SUBREG_BYTE (new_in_reg)
715 && find_regno_note (curr_insn, REG_DEAD, REGNO (subreg_reg)))
716 lra_reg_info[REGNO (reg)].val
717 = lra_reg_info[REGNO (subreg_reg)].val;
721 else
723 /* Pseudos have values -- see comments for lra_reg_info.
724 Different pseudos with the same value do not conflict even if
725 they live in the same place. When we create a pseudo we
726 assign value of original pseudo (if any) from which we
727 created the new pseudo. If we create the pseudo from the
728 input pseudo, the new pseudo will no conflict with the input
729 pseudo which is wrong when the input pseudo lives after the
730 insn and as the new pseudo value is changed by the insn
731 output. Therefore we create the new pseudo from the output.
733 We cannot reuse the current output register because we might
734 have a situation like "a <- a op b", where the constraints
735 force the second input operand ("b") to match the output
736 operand ("a"). "b" must then be copied into a new register
737 so that it doesn't clobber the current value of "a". */
739 new_in_reg = new_out_reg
740 = lra_create_new_reg_with_unique_value (outmode, out_rtx,
741 goal_class, "");
743 /* In and out operand can be got from transformations before
744 processing insn constraints. One example of such transformations
745 is subreg reloading (see function simplify_operand_subreg). The
746 new pseudos created by the transformations might have inaccurate
747 class (ALL_REGS) and we should make their classes more
748 accurate. */
749 narrow_reload_pseudo_class (in_rtx, goal_class);
750 narrow_reload_pseudo_class (out_rtx, goal_class);
751 lra_emit_move (copy_rtx (new_in_reg), in_rtx);
752 *before = get_insns ();
753 end_sequence ();
754 for (i = 0; (in = ins[i]) >= 0; i++)
756 lra_assert
757 (GET_MODE (*curr_id->operand_loc[in]) == VOIDmode
758 || GET_MODE (new_in_reg) == GET_MODE (*curr_id->operand_loc[in]));
759 *curr_id->operand_loc[in] = new_in_reg;
761 lra_update_dups (curr_id, ins);
762 if (find_reg_note (curr_insn, REG_UNUSED, out_rtx) == NULL_RTX)
764 start_sequence ();
765 lra_emit_move (out_rtx, copy_rtx (new_out_reg));
766 emit_insn (*after);
767 *after = get_insns ();
768 end_sequence ();
770 *curr_id->operand_loc[out] = new_out_reg;
771 lra_update_dup (curr_id, out);
774 /* Return register class which is union of all reg classes in insn
775 constraint alternative string starting with P. */
776 static enum reg_class
777 reg_class_from_constraints (const char *p)
779 int c, len;
780 enum reg_class op_class = NO_REGS;
783 switch ((c = *p, len = CONSTRAINT_LEN (c, p)), c)
785 case '#':
786 case ',':
787 return op_class;
789 case 'p':
790 op_class = (reg_class_subunion
791 [op_class][base_reg_class (VOIDmode, ADDR_SPACE_GENERIC,
792 ADDRESS, SCRATCH)]);
793 break;
795 case 'g':
796 case 'r':
797 op_class = reg_class_subunion[op_class][GENERAL_REGS];
798 break;
800 default:
801 if (REG_CLASS_FROM_CONSTRAINT (c, p) == NO_REGS)
803 #ifdef EXTRA_CONSTRAINT_STR
804 if (EXTRA_ADDRESS_CONSTRAINT (c, p))
805 op_class
806 = (reg_class_subunion
807 [op_class][base_reg_class (VOIDmode, ADDR_SPACE_GENERIC,
808 ADDRESS, SCRATCH)]);
809 #endif
810 break;
813 op_class
814 = reg_class_subunion[op_class][REG_CLASS_FROM_CONSTRAINT (c, p)];
815 break;
817 while ((p += len), c);
818 return op_class;
821 /* If OP is a register, return the class of the register as per
822 get_reg_class, otherwise return NO_REGS. */
823 static inline enum reg_class
824 get_op_class (rtx op)
826 return REG_P (op) ? get_reg_class (REGNO (op)) : NO_REGS;
829 /* Return generated insn mem_pseudo:=val if TO_P or val:=mem_pseudo
830 otherwise. If modes of MEM_PSEUDO and VAL are different, use
831 SUBREG for VAL to make them equal. */
832 static rtx
833 emit_spill_move (bool to_p, rtx mem_pseudo, rtx val)
835 if (GET_MODE (mem_pseudo) != GET_MODE (val))
836 val = gen_rtx_SUBREG (GET_MODE (mem_pseudo),
837 GET_CODE (val) == SUBREG ? SUBREG_REG (val) : val,
839 return (to_p
840 ? gen_move_insn (mem_pseudo, val)
841 : gen_move_insn (val, mem_pseudo));
844 /* Process a special case insn (register move), return true if we
845 don't need to process it anymore. Return that RTL was changed
846 through CHANGE_P and macro SECONDARY_MEMORY_NEEDED says to use
847 secondary memory through SEC_MEM_P. */
848 static bool
849 check_and_process_move (bool *change_p, bool *sec_mem_p)
851 int sregno, dregno;
852 rtx set, dest, src, dreg, sreg, old_sreg, new_reg, before, scratch_reg;
853 enum reg_class dclass, sclass, secondary_class;
854 enum machine_mode sreg_mode;
855 secondary_reload_info sri;
857 *sec_mem_p = *change_p = false;
858 if ((set = single_set (curr_insn)) == NULL)
859 return false;
860 dreg = dest = SET_DEST (set);
861 sreg = src = SET_SRC (set);
862 /* Quick check on the right move insn which does not need
863 reloads. */
864 if ((dclass = get_op_class (dest)) != NO_REGS
865 && (sclass = get_op_class (src)) != NO_REGS
866 /* The backend guarantees that register moves of cost 2 never
867 need reloads. */
868 && targetm.register_move_cost (GET_MODE (src), dclass, sclass) == 2)
869 return true;
870 if (GET_CODE (dest) == SUBREG)
871 dreg = SUBREG_REG (dest);
872 if (GET_CODE (src) == SUBREG)
873 sreg = SUBREG_REG (src);
874 if (! REG_P (dreg) || ! REG_P (sreg))
875 return false;
876 sclass = dclass = NO_REGS;
877 dreg = get_equiv_substitution (dreg);
878 if (REG_P (dreg))
879 dclass = get_reg_class (REGNO (dreg));
880 if (dclass == ALL_REGS)
881 /* ALL_REGS is used for new pseudos created by transformations
882 like reload of SUBREG_REG (see function
883 simplify_operand_subreg). We don't know their class yet. We
884 should figure out the class from processing the insn
885 constraints not in this fast path function. Even if ALL_REGS
886 were a right class for the pseudo, secondary_... hooks usually
887 are not define for ALL_REGS. */
888 return false;
889 sreg_mode = GET_MODE (sreg);
890 old_sreg = sreg;
891 sreg = get_equiv_substitution (sreg);
892 if (REG_P (sreg))
893 sclass = get_reg_class (REGNO (sreg));
894 if (sclass == ALL_REGS)
895 /* See comments above. */
896 return false;
897 #ifdef SECONDARY_MEMORY_NEEDED
898 if (dclass != NO_REGS && sclass != NO_REGS
899 && SECONDARY_MEMORY_NEEDED (sclass, dclass, GET_MODE (src)))
901 *sec_mem_p = true;
902 return false;
904 #endif
905 sri.prev_sri = NULL;
906 sri.icode = CODE_FOR_nothing;
907 sri.extra_cost = 0;
908 secondary_class = NO_REGS;
909 /* Set up hard register for a reload pseudo for hook
910 secondary_reload because some targets just ignore unassigned
911 pseudos in the hook. */
912 if (dclass != NO_REGS && lra_get_regno_hard_regno (REGNO (dreg)) < 0)
914 dregno = REGNO (dreg);
915 reg_renumber[dregno] = ira_class_hard_regs[dclass][0];
917 else
918 dregno = -1;
919 if (sclass != NO_REGS && lra_get_regno_hard_regno (REGNO (sreg)) < 0)
921 sregno = REGNO (sreg);
922 reg_renumber[sregno] = ira_class_hard_regs[sclass][0];
924 else
925 sregno = -1;
926 if (sclass != NO_REGS)
927 secondary_class
928 = (enum reg_class) targetm.secondary_reload (false, dest,
929 (reg_class_t) sclass,
930 GET_MODE (src), &sri);
931 if (sclass == NO_REGS
932 || ((secondary_class != NO_REGS || sri.icode != CODE_FOR_nothing)
933 && dclass != NO_REGS))
935 enum reg_class old_sclass = secondary_class;
936 secondary_reload_info old_sri = sri;
938 sri.prev_sri = NULL;
939 sri.icode = CODE_FOR_nothing;
940 sri.extra_cost = 0;
941 secondary_class
942 = (enum reg_class) targetm.secondary_reload (true, sreg,
943 (reg_class_t) dclass,
944 sreg_mode, &sri);
945 /* Check the target hook consistency. */
946 lra_assert
947 ((secondary_class == NO_REGS && sri.icode == CODE_FOR_nothing)
948 || (old_sclass == NO_REGS && old_sri.icode == CODE_FOR_nothing)
949 || (secondary_class == old_sclass && sri.icode == old_sri.icode));
951 if (sregno >= 0)
952 reg_renumber [sregno] = -1;
953 if (dregno >= 0)
954 reg_renumber [dregno] = -1;
955 if (secondary_class == NO_REGS && sri.icode == CODE_FOR_nothing)
956 return false;
957 *change_p = true;
958 new_reg = NULL_RTX;
959 if (secondary_class != NO_REGS)
960 new_reg = lra_create_new_reg_with_unique_value (sreg_mode, NULL_RTX,
961 secondary_class,
962 "secondary");
963 start_sequence ();
964 if (old_sreg != sreg)
965 sreg = copy_rtx (sreg);
966 if (sri.icode == CODE_FOR_nothing)
967 lra_emit_move (new_reg, sreg);
968 else
970 enum reg_class scratch_class;
972 scratch_class = (reg_class_from_constraints
973 (insn_data[sri.icode].operand[2].constraint));
974 scratch_reg = (lra_create_new_reg_with_unique_value
975 (insn_data[sri.icode].operand[2].mode, NULL_RTX,
976 scratch_class, "scratch"));
977 emit_insn (GEN_FCN (sri.icode) (new_reg != NULL_RTX ? new_reg : dest,
978 sreg, scratch_reg));
980 before = get_insns ();
981 end_sequence ();
982 lra_process_new_insns (curr_insn, before, NULL_RTX, "Inserting the move");
983 if (new_reg != NULL_RTX)
985 if (GET_CODE (src) == SUBREG)
986 SUBREG_REG (src) = new_reg;
987 else
988 SET_SRC (set) = new_reg;
990 else
992 if (lra_dump_file != NULL)
994 fprintf (lra_dump_file, "Deleting move %u\n", INSN_UID (curr_insn));
995 debug_rtl_slim (lra_dump_file, curr_insn, curr_insn, -1, 0);
997 lra_set_insn_deleted (curr_insn);
998 return true;
1000 return false;
1003 /* The following data describe the result of process_alt_operands.
1004 The data are used in curr_insn_transform to generate reloads. */
1006 /* The chosen reg classes which should be used for the corresponding
1007 operands. */
1008 static enum reg_class goal_alt[MAX_RECOG_OPERANDS];
1009 /* True if the operand should be the same as another operand and that
1010 other operand does not need a reload. */
1011 static bool goal_alt_match_win[MAX_RECOG_OPERANDS];
1012 /* True if the operand does not need a reload. */
1013 static bool goal_alt_win[MAX_RECOG_OPERANDS];
1014 /* True if the operand can be offsetable memory. */
1015 static bool goal_alt_offmemok[MAX_RECOG_OPERANDS];
1016 /* The number of an operand to which given operand can be matched to. */
1017 static int goal_alt_matches[MAX_RECOG_OPERANDS];
1018 /* The number of elements in the following array. */
1019 static int goal_alt_dont_inherit_ops_num;
1020 /* Numbers of operands whose reload pseudos should not be inherited. */
1021 static int goal_alt_dont_inherit_ops[MAX_RECOG_OPERANDS];
1022 /* True if the insn commutative operands should be swapped. */
1023 static bool goal_alt_swapped;
1024 /* The chosen insn alternative. */
1025 static int goal_alt_number;
1027 /* The following five variables are used to choose the best insn
1028 alternative. They reflect final characteristics of the best
1029 alternative. */
1031 /* Number of necessary reloads and overall cost reflecting the
1032 previous value and other unpleasantness of the best alternative. */
1033 static int best_losers, best_overall;
1034 /* Number of small register classes used for operands of the best
1035 alternative. */
1036 static int best_small_class_operands_num;
1037 /* Overall number hard registers used for reloads. For example, on
1038 some targets we need 2 general registers to reload DFmode and only
1039 one floating point register. */
1040 static int best_reload_nregs;
1041 /* Overall number reflecting distances of previous reloading the same
1042 value. The distances are counted from the current BB start. It is
1043 used to improve inheritance chances. */
1044 static int best_reload_sum;
1046 /* True if the current insn should have no correspondingly input or
1047 output reloads. */
1048 static bool no_input_reloads_p, no_output_reloads_p;
1050 /* True if we swapped the commutative operands in the current
1051 insn. */
1052 static int curr_swapped;
1054 /* Arrange for address element *LOC to be a register of class CL.
1055 Add any input reloads to list BEFORE. AFTER is nonnull if *LOC is an
1056 automodified value; handle that case by adding the required output
1057 reloads to list AFTER. Return true if the RTL was changed. */
1058 static bool
1059 process_addr_reg (rtx *loc, rtx *before, rtx *after, enum reg_class cl)
1061 int regno;
1062 enum reg_class rclass, new_class;
1063 rtx reg;
1064 rtx new_reg;
1065 enum machine_mode mode;
1066 bool before_p = false;
1068 loc = strip_subreg (loc);
1069 reg = *loc;
1070 mode = GET_MODE (reg);
1071 if (! REG_P (reg))
1073 /* Always reload memory in an address even if the target supports
1074 such addresses. */
1075 new_reg = lra_create_new_reg_with_unique_value (mode, reg, cl, "address");
1076 before_p = true;
1078 else
1080 regno = REGNO (reg);
1081 rclass = get_reg_class (regno);
1082 if ((*loc = get_equiv_substitution (reg)) != reg)
1084 if (lra_dump_file != NULL)
1086 fprintf (lra_dump_file,
1087 "Changing pseudo %d in address of insn %u on equiv ",
1088 REGNO (reg), INSN_UID (curr_insn));
1089 print_value_slim (lra_dump_file, *loc, 1);
1090 fprintf (lra_dump_file, "\n");
1092 *loc = copy_rtx (*loc);
1094 if (*loc != reg || ! in_class_p (reg, cl, &new_class))
1096 reg = *loc;
1097 if (get_reload_reg (after == NULL ? OP_IN : OP_INOUT,
1098 mode, reg, cl, "address", &new_reg))
1099 before_p = true;
1101 else if (new_class != NO_REGS && rclass != new_class)
1103 change_class (regno, new_class, " Change", true);
1104 return false;
1106 else
1107 return false;
1109 if (before_p)
1111 push_to_sequence (*before);
1112 lra_emit_move (new_reg, reg);
1113 *before = get_insns ();
1114 end_sequence ();
1116 *loc = new_reg;
1117 if (after != NULL)
1119 start_sequence ();
1120 lra_emit_move (reg, new_reg);
1121 emit_insn (*after);
1122 *after = get_insns ();
1123 end_sequence ();
1125 return true;
1128 /* Make reloads for subreg in operand NOP with internal subreg mode
1129 REG_MODE, add new reloads for further processing. Return true if
1130 any reload was generated. */
1131 static bool
1132 simplify_operand_subreg (int nop, enum machine_mode reg_mode)
1134 int hard_regno;
1135 rtx before, after;
1136 enum machine_mode mode;
1137 rtx reg, new_reg;
1138 rtx operand = *curr_id->operand_loc[nop];
1140 before = after = NULL_RTX;
1142 if (GET_CODE (operand) != SUBREG)
1143 return false;
1145 mode = GET_MODE (operand);
1146 reg = SUBREG_REG (operand);
1147 /* If we change address for paradoxical subreg of memory, the
1148 address might violate the necessary alignment or the access might
1149 be slow. So take this into consideration. We should not worry
1150 about access beyond allocated memory for paradoxical memory
1151 subregs as we don't substitute such equiv memory (see processing
1152 equivalences in function lra_constraints) and because for spilled
1153 pseudos we allocate stack memory enough for the biggest
1154 corresponding paradoxical subreg. */
1155 if ((MEM_P (reg)
1156 && (! SLOW_UNALIGNED_ACCESS (mode, MEM_ALIGN (reg))
1157 || MEM_ALIGN (reg) >= GET_MODE_ALIGNMENT (mode)))
1158 || (REG_P (reg) && REGNO (reg) < FIRST_PSEUDO_REGISTER))
1160 alter_subreg (curr_id->operand_loc[nop], false);
1161 return true;
1163 /* Put constant into memory when we have mixed modes. It generates
1164 a better code in most cases as it does not need a secondary
1165 reload memory. It also prevents LRA looping when LRA is using
1166 secondary reload memory again and again. */
1167 if (CONSTANT_P (reg) && CONST_POOL_OK_P (reg_mode, reg)
1168 && SCALAR_INT_MODE_P (reg_mode) != SCALAR_INT_MODE_P (mode))
1170 SUBREG_REG (operand) = force_const_mem (reg_mode, reg);
1171 alter_subreg (curr_id->operand_loc[nop], false);
1172 return true;
1174 /* Force a reload of the SUBREG_REG if this is a constant or PLUS or
1175 if there may be a problem accessing OPERAND in the outer
1176 mode. */
1177 if ((REG_P (reg)
1178 && REGNO (reg) >= FIRST_PSEUDO_REGISTER
1179 && (hard_regno = lra_get_regno_hard_regno (REGNO (reg))) >= 0
1180 /* Don't reload paradoxical subregs because we could be looping
1181 having repeatedly final regno out of hard regs range. */
1182 && (hard_regno_nregs[hard_regno][GET_MODE (reg)]
1183 >= hard_regno_nregs[hard_regno][mode])
1184 && simplify_subreg_regno (hard_regno, GET_MODE (reg),
1185 SUBREG_BYTE (operand), mode) < 0)
1186 || CONSTANT_P (reg) || GET_CODE (reg) == PLUS || MEM_P (reg))
1188 enum op_type type = curr_static_id->operand[nop].type;
1189 /* The class will be defined later in curr_insn_transform. */
1190 enum reg_class rclass
1191 = (enum reg_class) targetm.preferred_reload_class (reg, ALL_REGS);
1193 new_reg = lra_create_new_reg_with_unique_value (reg_mode, reg, rclass,
1194 "subreg reg");
1195 bitmap_set_bit (&lra_optional_reload_pseudos, REGNO (new_reg));
1196 if (type != OP_OUT
1197 || GET_MODE_SIZE (GET_MODE (reg)) > GET_MODE_SIZE (mode))
1199 push_to_sequence (before);
1200 lra_emit_move (new_reg, reg);
1201 before = get_insns ();
1202 end_sequence ();
1204 if (type != OP_IN)
1206 start_sequence ();
1207 lra_emit_move (reg, new_reg);
1208 emit_insn (after);
1209 after = get_insns ();
1210 end_sequence ();
1212 SUBREG_REG (operand) = new_reg;
1213 lra_process_new_insns (curr_insn, before, after,
1214 "Inserting subreg reload");
1215 return true;
1217 return false;
1220 /* Return TRUE if X refers for a hard register from SET. */
1221 static bool
1222 uses_hard_regs_p (rtx x, HARD_REG_SET set)
1224 int i, j, x_hard_regno;
1225 enum machine_mode mode;
1226 const char *fmt;
1227 enum rtx_code code;
1229 if (x == NULL_RTX)
1230 return false;
1231 code = GET_CODE (x);
1232 mode = GET_MODE (x);
1233 if (code == SUBREG)
1235 x = SUBREG_REG (x);
1236 code = GET_CODE (x);
1237 if (GET_MODE_SIZE (GET_MODE (x)) > GET_MODE_SIZE (mode))
1238 mode = GET_MODE (x);
1241 if (REG_P (x))
1243 x_hard_regno = get_hard_regno (x);
1244 return (x_hard_regno >= 0
1245 && overlaps_hard_reg_set_p (set, mode, x_hard_regno));
1247 if (MEM_P (x))
1249 struct address_info ad;
1251 decompose_mem_address (&ad, x);
1252 if (ad.base_term != NULL && uses_hard_regs_p (*ad.base_term, set))
1253 return true;
1254 if (ad.index_term != NULL && uses_hard_regs_p (*ad.index_term, set))
1255 return true;
1257 fmt = GET_RTX_FORMAT (code);
1258 for (i = GET_RTX_LENGTH (code) - 1; i >= 0; i--)
1260 if (fmt[i] == 'e')
1262 if (uses_hard_regs_p (XEXP (x, i), set))
1263 return true;
1265 else if (fmt[i] == 'E')
1267 for (j = XVECLEN (x, i) - 1; j >= 0; j--)
1268 if (uses_hard_regs_p (XVECEXP (x, i, j), set))
1269 return true;
1272 return false;
1275 /* Return true if OP is a spilled pseudo. */
1276 static inline bool
1277 spilled_pseudo_p (rtx op)
1279 return (REG_P (op)
1280 && REGNO (op) >= FIRST_PSEUDO_REGISTER && in_mem_p (REGNO (op)));
1283 /* Return true if X is a general constant. */
1284 static inline bool
1285 general_constant_p (rtx x)
1287 return CONSTANT_P (x) && (! flag_pic || LEGITIMATE_PIC_OPERAND_P (x));
1290 /* Major function to choose the current insn alternative and what
1291 operands should be reloaded and how. If ONLY_ALTERNATIVE is not
1292 negative we should consider only this alternative. Return false if
1293 we can not choose the alternative or find how to reload the
1294 operands. */
1295 static bool
1296 process_alt_operands (int only_alternative)
1298 bool ok_p = false;
1299 int nop, small_class_operands_num, overall, nalt;
1300 int n_alternatives = curr_static_id->n_alternatives;
1301 int n_operands = curr_static_id->n_operands;
1302 /* LOSERS counts the operands that don't fit this alternative and
1303 would require loading. */
1304 int losers;
1305 /* REJECT is a count of how undesirable this alternative says it is
1306 if any reloading is required. If the alternative matches exactly
1307 then REJECT is ignored, but otherwise it gets this much counted
1308 against it in addition to the reloading needed. */
1309 int reject;
1310 /* The number of elements in the following array. */
1311 int early_clobbered_regs_num;
1312 /* Numbers of operands which are early clobber registers. */
1313 int early_clobbered_nops[MAX_RECOG_OPERANDS];
1314 enum reg_class curr_alt[MAX_RECOG_OPERANDS];
1315 HARD_REG_SET curr_alt_set[MAX_RECOG_OPERANDS];
1316 bool curr_alt_match_win[MAX_RECOG_OPERANDS];
1317 bool curr_alt_win[MAX_RECOG_OPERANDS];
1318 bool curr_alt_offmemok[MAX_RECOG_OPERANDS];
1319 int curr_alt_matches[MAX_RECOG_OPERANDS];
1320 /* The number of elements in the following array. */
1321 int curr_alt_dont_inherit_ops_num;
1322 /* Numbers of operands whose reload pseudos should not be inherited. */
1323 int curr_alt_dont_inherit_ops[MAX_RECOG_OPERANDS];
1324 rtx op;
1325 /* The register when the operand is a subreg of register, otherwise the
1326 operand itself. */
1327 rtx no_subreg_reg_operand[MAX_RECOG_OPERANDS];
1328 /* The register if the operand is a register or subreg of register,
1329 otherwise NULL. */
1330 rtx operand_reg[MAX_RECOG_OPERANDS];
1331 int hard_regno[MAX_RECOG_OPERANDS];
1332 enum machine_mode biggest_mode[MAX_RECOG_OPERANDS];
1333 int reload_nregs, reload_sum;
1334 bool costly_p;
1335 enum reg_class cl;
1337 /* Calculate some data common for all alternatives to speed up the
1338 function. */
1339 for (nop = 0; nop < n_operands; nop++)
1341 op = no_subreg_reg_operand[nop] = *curr_id->operand_loc[nop];
1342 /* The real hard regno of the operand after the allocation. */
1343 hard_regno[nop] = get_hard_regno (op);
1345 operand_reg[nop] = op;
1346 biggest_mode[nop] = GET_MODE (operand_reg[nop]);
1347 if (GET_CODE (operand_reg[nop]) == SUBREG)
1349 operand_reg[nop] = SUBREG_REG (operand_reg[nop]);
1350 if (GET_MODE_SIZE (biggest_mode[nop])
1351 < GET_MODE_SIZE (GET_MODE (operand_reg[nop])))
1352 biggest_mode[nop] = GET_MODE (operand_reg[nop]);
1354 if (REG_P (operand_reg[nop]))
1355 no_subreg_reg_operand[nop] = operand_reg[nop];
1356 else
1357 operand_reg[nop] = NULL_RTX;
1360 /* The constraints are made of several alternatives. Each operand's
1361 constraint looks like foo,bar,... with commas separating the
1362 alternatives. The first alternatives for all operands go
1363 together, the second alternatives go together, etc.
1365 First loop over alternatives. */
1366 for (nalt = 0; nalt < n_alternatives; nalt++)
1368 /* Loop over operands for one constraint alternative. */
1369 #ifdef HAVE_ATTR_enabled
1370 if (curr_id->alternative_enabled_p != NULL
1371 && ! curr_id->alternative_enabled_p[nalt])
1372 continue;
1373 #endif
1375 if (only_alternative >= 0 && nalt != only_alternative)
1376 continue;
1378 overall = losers = reject = reload_nregs = reload_sum = 0;
1379 for (nop = 0; nop < n_operands; nop++)
1380 reject += (curr_static_id
1381 ->operand_alternative[nalt * n_operands + nop].reject);
1382 early_clobbered_regs_num = 0;
1384 for (nop = 0; nop < n_operands; nop++)
1386 const char *p;
1387 char *end;
1388 int len, c, m, i, opalt_num, this_alternative_matches;
1389 bool win, did_match, offmemok, early_clobber_p;
1390 /* false => this operand can be reloaded somehow for this
1391 alternative. */
1392 bool badop;
1393 /* true => this operand can be reloaded if the alternative
1394 allows regs. */
1395 bool winreg;
1396 /* True if a constant forced into memory would be OK for
1397 this operand. */
1398 bool constmemok;
1399 enum reg_class this_alternative, this_costly_alternative;
1400 HARD_REG_SET this_alternative_set, this_costly_alternative_set;
1401 bool this_alternative_match_win, this_alternative_win;
1402 bool this_alternative_offmemok;
1403 enum machine_mode mode;
1405 opalt_num = nalt * n_operands + nop;
1406 if (curr_static_id->operand_alternative[opalt_num].anything_ok)
1408 /* Fast track for no constraints at all. */
1409 curr_alt[nop] = NO_REGS;
1410 CLEAR_HARD_REG_SET (curr_alt_set[nop]);
1411 curr_alt_win[nop] = true;
1412 curr_alt_match_win[nop] = false;
1413 curr_alt_offmemok[nop] = false;
1414 curr_alt_matches[nop] = -1;
1415 continue;
1418 op = no_subreg_reg_operand[nop];
1419 mode = curr_operand_mode[nop];
1421 win = did_match = winreg = offmemok = constmemok = false;
1422 badop = true;
1424 early_clobber_p = false;
1425 p = curr_static_id->operand_alternative[opalt_num].constraint;
1427 this_costly_alternative = this_alternative = NO_REGS;
1428 /* We update set of possible hard regs besides its class
1429 because reg class might be inaccurate. For example,
1430 union of LO_REGS (l), HI_REGS(h), and STACK_REG(k) in ARM
1431 is translated in HI_REGS because classes are merged by
1432 pairs and there is no accurate intermediate class. */
1433 CLEAR_HARD_REG_SET (this_alternative_set);
1434 CLEAR_HARD_REG_SET (this_costly_alternative_set);
1435 this_alternative_win = false;
1436 this_alternative_match_win = false;
1437 this_alternative_offmemok = false;
1438 this_alternative_matches = -1;
1440 /* An empty constraint should be excluded by the fast
1441 track. */
1442 lra_assert (*p != 0 && *p != ',');
1444 /* Scan this alternative's specs for this operand; set WIN
1445 if the operand fits any letter in this alternative.
1446 Otherwise, clear BADOP if this operand could fit some
1447 letter after reloads, or set WINREG if this operand could
1448 fit after reloads provided the constraint allows some
1449 registers. */
1450 costly_p = false;
1453 switch ((c = *p, len = CONSTRAINT_LEN (c, p)), c)
1455 case '\0':
1456 len = 0;
1457 break;
1458 case ',':
1459 c = '\0';
1460 break;
1462 case '=': case '+': case '?': case '*': case '!':
1463 case ' ': case '\t':
1464 break;
1466 case '%':
1467 /* We only support one commutative marker, the first
1468 one. We already set commutative above. */
1469 break;
1471 case '&':
1472 early_clobber_p = true;
1473 break;
1475 case '#':
1476 /* Ignore rest of this alternative. */
1477 c = '\0';
1478 break;
1480 case '0': case '1': case '2': case '3': case '4':
1481 case '5': case '6': case '7': case '8': case '9':
1483 int m_hregno;
1484 bool match_p;
1486 m = strtoul (p, &end, 10);
1487 p = end;
1488 len = 0;
1489 lra_assert (nop > m);
1491 this_alternative_matches = m;
1492 m_hregno = get_hard_regno (*curr_id->operand_loc[m]);
1493 /* We are supposed to match a previous operand.
1494 If we do, we win if that one did. If we do
1495 not, count both of the operands as losers.
1496 (This is too conservative, since most of the
1497 time only a single reload insn will be needed
1498 to make the two operands win. As a result,
1499 this alternative may be rejected when it is
1500 actually desirable.) */
1501 match_p = false;
1502 if (operands_match_p (*curr_id->operand_loc[nop],
1503 *curr_id->operand_loc[m], m_hregno))
1505 /* We should reject matching of an early
1506 clobber operand if the matching operand is
1507 not dying in the insn. */
1508 if (! curr_static_id->operand[m].early_clobber
1509 || operand_reg[nop] == NULL_RTX
1510 || (find_regno_note (curr_insn, REG_DEAD,
1511 REGNO (operand_reg[nop]))
1512 != NULL_RTX))
1513 match_p = true;
1515 if (match_p)
1517 /* If we are matching a non-offsettable
1518 address where an offsettable address was
1519 expected, then we must reject this
1520 combination, because we can't reload
1521 it. */
1522 if (curr_alt_offmemok[m]
1523 && MEM_P (*curr_id->operand_loc[m])
1524 && curr_alt[m] == NO_REGS && ! curr_alt_win[m])
1525 continue;
1528 else
1530 /* Operands don't match. Both operands must
1531 allow a reload register, otherwise we
1532 cannot make them match. */
1533 if (curr_alt[m] == NO_REGS)
1534 break;
1535 /* Retroactively mark the operand we had to
1536 match as a loser, if it wasn't already and
1537 it wasn't matched to a register constraint
1538 (e.g it might be matched by memory). */
1539 if (curr_alt_win[m]
1540 && (operand_reg[m] == NULL_RTX
1541 || hard_regno[m] < 0))
1543 losers++;
1544 reload_nregs
1545 += (ira_reg_class_max_nregs[curr_alt[m]]
1546 [GET_MODE (*curr_id->operand_loc[m])]);
1549 /* We prefer no matching alternatives because
1550 it gives more freedom in RA. */
1551 if (operand_reg[nop] == NULL_RTX
1552 || (find_regno_note (curr_insn, REG_DEAD,
1553 REGNO (operand_reg[nop]))
1554 == NULL_RTX))
1555 reject += 2;
1557 /* If we have to reload this operand and some
1558 previous operand also had to match the same
1559 thing as this operand, we don't know how to do
1560 that. */
1561 if (!match_p || !curr_alt_win[m])
1563 for (i = 0; i < nop; i++)
1564 if (curr_alt_matches[i] == m)
1565 break;
1566 if (i < nop)
1567 break;
1569 else
1570 did_match = true;
1572 /* This can be fixed with reloads if the operand
1573 we are supposed to match can be fixed with
1574 reloads. */
1575 badop = false;
1576 this_alternative = curr_alt[m];
1577 COPY_HARD_REG_SET (this_alternative_set, curr_alt_set[m]);
1578 winreg = this_alternative != NO_REGS;
1579 break;
1582 case 'p':
1583 cl = base_reg_class (VOIDmode, ADDR_SPACE_GENERIC,
1584 ADDRESS, SCRATCH);
1585 this_alternative = reg_class_subunion[this_alternative][cl];
1586 IOR_HARD_REG_SET (this_alternative_set,
1587 reg_class_contents[cl]);
1588 if (costly_p)
1590 this_costly_alternative
1591 = reg_class_subunion[this_costly_alternative][cl];
1592 IOR_HARD_REG_SET (this_costly_alternative_set,
1593 reg_class_contents[cl]);
1595 win = true;
1596 badop = false;
1597 break;
1599 case TARGET_MEM_CONSTRAINT:
1600 if (MEM_P (op) || spilled_pseudo_p (op))
1601 win = true;
1602 /* We can put constant or pseudo value into memory
1603 to satisfy the constraint. */
1604 if (CONST_POOL_OK_P (mode, op) || REG_P (op))
1605 badop = false;
1606 constmemok = true;
1607 break;
1609 case '<':
1610 if (MEM_P (op)
1611 && (GET_CODE (XEXP (op, 0)) == PRE_DEC
1612 || GET_CODE (XEXP (op, 0)) == POST_DEC))
1613 win = true;
1614 break;
1616 case '>':
1617 if (MEM_P (op)
1618 && (GET_CODE (XEXP (op, 0)) == PRE_INC
1619 || GET_CODE (XEXP (op, 0)) == POST_INC))
1620 win = true;
1621 break;
1623 /* Memory op whose address is not offsettable. */
1624 case 'V':
1625 if (MEM_P (op)
1626 && ! offsettable_nonstrict_memref_p (op))
1627 win = true;
1628 break;
1630 /* Memory operand whose address is offsettable. */
1631 case 'o':
1632 if ((MEM_P (op)
1633 && offsettable_nonstrict_memref_p (op))
1634 || spilled_pseudo_p (op))
1635 win = true;
1636 /* We can put constant or pseudo value into memory
1637 or make memory address offsetable to satisfy the
1638 constraint. */
1639 if (CONST_POOL_OK_P (mode, op) || MEM_P (op) || REG_P (op))
1640 badop = false;
1641 constmemok = true;
1642 offmemok = true;
1643 break;
1645 case 'E':
1646 case 'F':
1647 if (GET_CODE (op) == CONST_DOUBLE
1648 || (GET_CODE (op) == CONST_VECTOR
1649 && (GET_MODE_CLASS (mode) == MODE_VECTOR_FLOAT)))
1650 win = true;
1651 break;
1653 case 'G':
1654 case 'H':
1655 if (GET_CODE (op) == CONST_DOUBLE
1656 && CONST_DOUBLE_OK_FOR_CONSTRAINT_P (op, c, p))
1657 win = true;
1658 break;
1660 case 's':
1661 if (CONST_INT_P (op)
1662 || (GET_CODE (op) == CONST_DOUBLE && mode == VOIDmode))
1663 break;
1665 case 'i':
1666 if (general_constant_p (op))
1667 win = true;
1668 break;
1670 case 'n':
1671 if (CONST_INT_P (op)
1672 || (GET_CODE (op) == CONST_DOUBLE && mode == VOIDmode))
1673 win = true;
1674 break;
1676 case 'I':
1677 case 'J':
1678 case 'K':
1679 case 'L':
1680 case 'M':
1681 case 'N':
1682 case 'O':
1683 case 'P':
1684 if (CONST_INT_P (op)
1685 && CONST_OK_FOR_CONSTRAINT_P (INTVAL (op), c, p))
1686 win = true;
1687 break;
1689 case 'X':
1690 /* This constraint should be excluded by the fast
1691 track. */
1692 gcc_unreachable ();
1693 break;
1695 case 'g':
1696 if (MEM_P (op)
1697 || general_constant_p (op)
1698 || spilled_pseudo_p (op))
1699 win = true;
1700 /* Drop through into 'r' case. */
1702 case 'r':
1703 this_alternative
1704 = reg_class_subunion[this_alternative][GENERAL_REGS];
1705 IOR_HARD_REG_SET (this_alternative_set,
1706 reg_class_contents[GENERAL_REGS]);
1707 if (costly_p)
1709 this_costly_alternative
1710 = (reg_class_subunion
1711 [this_costly_alternative][GENERAL_REGS]);
1712 IOR_HARD_REG_SET (this_costly_alternative_set,
1713 reg_class_contents[GENERAL_REGS]);
1715 goto reg;
1717 default:
1718 if (REG_CLASS_FROM_CONSTRAINT (c, p) == NO_REGS)
1720 #ifdef EXTRA_CONSTRAINT_STR
1721 if (EXTRA_MEMORY_CONSTRAINT (c, p))
1723 if (EXTRA_CONSTRAINT_STR (op, c, p))
1724 win = true;
1725 else if (spilled_pseudo_p (op))
1726 win = true;
1728 /* If we didn't already win, we can reload
1729 constants via force_const_mem or put the
1730 pseudo value into memory, or make other
1731 memory by reloading the address like for
1732 'o'. */
1733 if (CONST_POOL_OK_P (mode, op)
1734 || MEM_P (op) || REG_P (op))
1735 badop = false;
1736 constmemok = true;
1737 offmemok = true;
1738 break;
1740 if (EXTRA_ADDRESS_CONSTRAINT (c, p))
1742 if (EXTRA_CONSTRAINT_STR (op, c, p))
1743 win = true;
1745 /* If we didn't already win, we can reload
1746 the address into a base register. */
1747 cl = base_reg_class (VOIDmode, ADDR_SPACE_GENERIC,
1748 ADDRESS, SCRATCH);
1749 this_alternative
1750 = reg_class_subunion[this_alternative][cl];
1751 IOR_HARD_REG_SET (this_alternative_set,
1752 reg_class_contents[cl]);
1753 if (costly_p)
1755 this_costly_alternative
1756 = (reg_class_subunion
1757 [this_costly_alternative][cl]);
1758 IOR_HARD_REG_SET (this_costly_alternative_set,
1759 reg_class_contents[cl]);
1761 badop = false;
1762 break;
1765 if (EXTRA_CONSTRAINT_STR (op, c, p))
1766 win = true;
1767 #endif
1768 break;
1771 cl = REG_CLASS_FROM_CONSTRAINT (c, p);
1772 this_alternative = reg_class_subunion[this_alternative][cl];
1773 IOR_HARD_REG_SET (this_alternative_set,
1774 reg_class_contents[cl]);
1775 if (costly_p)
1777 this_costly_alternative
1778 = reg_class_subunion[this_costly_alternative][cl];
1779 IOR_HARD_REG_SET (this_costly_alternative_set,
1780 reg_class_contents[cl]);
1782 reg:
1783 if (mode == BLKmode)
1784 break;
1785 winreg = true;
1786 if (REG_P (op))
1788 if (hard_regno[nop] >= 0
1789 && in_hard_reg_set_p (this_alternative_set,
1790 mode, hard_regno[nop]))
1791 win = true;
1792 else if (hard_regno[nop] < 0
1793 && in_class_p (op, this_alternative, NULL))
1794 win = true;
1796 break;
1798 if (c != ' ' && c != '\t')
1799 costly_p = c == '*';
1801 while ((p += len), c);
1803 /* Record which operands fit this alternative. */
1804 if (win)
1806 this_alternative_win = true;
1807 if (operand_reg[nop] != NULL_RTX)
1809 if (hard_regno[nop] >= 0)
1811 if (in_hard_reg_set_p (this_costly_alternative_set,
1812 mode, hard_regno[nop]))
1813 reject++;
1815 else
1817 /* Prefer won reg to spilled pseudo under other equal
1818 conditions. */
1819 reject++;
1820 if (in_class_p (operand_reg[nop],
1821 this_costly_alternative, NULL))
1822 reject++;
1824 /* We simulate the behaviour of old reload here.
1825 Although scratches need hard registers and it
1826 might result in spilling other pseudos, no reload
1827 insns are generated for the scratches. So it
1828 might cost something but probably less than old
1829 reload pass believes. */
1830 if (lra_former_scratch_p (REGNO (operand_reg[nop])))
1831 reject += LRA_LOSER_COST_FACTOR;
1834 else if (did_match)
1835 this_alternative_match_win = true;
1836 else
1838 int const_to_mem = 0;
1839 bool no_regs_p;
1841 no_regs_p
1842 = (this_alternative == NO_REGS
1843 || (hard_reg_set_subset_p
1844 (reg_class_contents[this_alternative],
1845 lra_no_alloc_regs)));
1846 /* If this operand accepts a register, and if the
1847 register class has at least one allocatable register,
1848 then this operand can be reloaded. */
1849 if (winreg && !no_regs_p)
1850 badop = false;
1852 if (badop)
1853 goto fail;
1855 this_alternative_offmemok = offmemok;
1856 if (this_costly_alternative != NO_REGS)
1857 reject++;
1858 /* If the operand is dying, has a matching constraint,
1859 and satisfies constraints of the matched operand
1860 which failed to satisfy the own constraints, we do
1861 not need to generate a reload insn for this
1862 operand. */
1863 if (!(this_alternative_matches >= 0
1864 && !curr_alt_win[this_alternative_matches]
1865 && REG_P (op)
1866 && find_regno_note (curr_insn, REG_DEAD, REGNO (op))
1867 && (hard_regno[nop] >= 0
1868 ? in_hard_reg_set_p (this_alternative_set,
1869 mode, hard_regno[nop])
1870 : in_class_p (op, this_alternative, NULL))))
1871 losers++;
1872 if (operand_reg[nop] != NULL_RTX
1873 /* Output operands and matched input operands are
1874 not inherited. The following conditions do not
1875 exactly describe the previous statement but they
1876 are pretty close. */
1877 && curr_static_id->operand[nop].type != OP_OUT
1878 && (this_alternative_matches < 0
1879 || curr_static_id->operand[nop].type != OP_IN))
1881 int last_reload = (lra_reg_info[ORIGINAL_REGNO
1882 (operand_reg[nop])]
1883 .last_reload);
1885 if (last_reload > bb_reload_num)
1886 reload_sum += last_reload - bb_reload_num;
1888 /* If this is a constant that is reloaded into the
1889 desired class by copying it to memory first, count
1890 that as another reload. This is consistent with
1891 other code and is required to avoid choosing another
1892 alternative when the constant is moved into memory.
1893 Note that the test here is precisely the same as in
1894 the code below that calls force_const_mem. */
1895 if (CONST_POOL_OK_P (mode, op)
1896 && ((targetm.preferred_reload_class
1897 (op, this_alternative) == NO_REGS)
1898 || no_input_reloads_p))
1900 const_to_mem = 1;
1901 if (! no_regs_p)
1902 losers++;
1905 /* Alternative loses if it requires a type of reload not
1906 permitted for this insn. We can always reload
1907 objects with a REG_UNUSED note. */
1908 if ((curr_static_id->operand[nop].type != OP_IN
1909 && no_output_reloads_p
1910 && ! find_reg_note (curr_insn, REG_UNUSED, op))
1911 || (curr_static_id->operand[nop].type != OP_OUT
1912 && no_input_reloads_p && ! const_to_mem))
1913 goto fail;
1915 /* Check strong discouragement of reload of non-constant
1916 into class THIS_ALTERNATIVE. */
1917 if (! CONSTANT_P (op) && ! no_regs_p
1918 && (targetm.preferred_reload_class
1919 (op, this_alternative) == NO_REGS
1920 || (curr_static_id->operand[nop].type == OP_OUT
1921 && (targetm.preferred_output_reload_class
1922 (op, this_alternative) == NO_REGS))))
1923 reject += LRA_MAX_REJECT;
1925 if (! ((const_to_mem && constmemok)
1926 || (MEM_P (op) && offmemok)))
1928 /* We prefer to reload pseudos over reloading other
1929 things, since such reloads may be able to be
1930 eliminated later. So bump REJECT in other cases.
1931 Don't do this in the case where we are forcing a
1932 constant into memory and it will then win since
1933 we don't want to have a different alternative
1934 match then. */
1935 if (! (REG_P (op) && REGNO (op) >= FIRST_PSEUDO_REGISTER))
1936 reject += 2;
1938 if (! no_regs_p)
1939 reload_nregs
1940 += ira_reg_class_max_nregs[this_alternative][mode];
1943 /* We are trying to spill pseudo into memory. It is
1944 usually more costly than moving to a hard register
1945 although it might takes the same number of
1946 reloads. */
1947 if (no_regs_p && REG_P (op))
1948 reject++;
1950 #ifdef SECONDARY_MEMORY_NEEDED
1951 /* If reload requires moving value through secondary
1952 memory, it will need one more insn at least. */
1953 if (this_alternative != NO_REGS
1954 && REG_P (op) && (cl = get_reg_class (REGNO (op))) != NO_REGS
1955 && ((curr_static_id->operand[nop].type != OP_OUT
1956 && SECONDARY_MEMORY_NEEDED (cl, this_alternative,
1957 GET_MODE (op)))
1958 || (curr_static_id->operand[nop].type != OP_IN
1959 && SECONDARY_MEMORY_NEEDED (this_alternative, cl,
1960 GET_MODE (op)))))
1961 losers++;
1962 #endif
1963 /* Input reloads can be inherited more often than output
1964 reloads can be removed, so penalize output
1965 reloads. */
1966 if (!REG_P (op) || curr_static_id->operand[nop].type != OP_IN)
1967 reject++;
1970 if (early_clobber_p)
1971 reject++;
1972 /* ??? We check early clobbers after processing all operands
1973 (see loop below) and there we update the costs more.
1974 Should we update the cost (may be approximately) here
1975 because of early clobber register reloads or it is a rare
1976 or non-important thing to be worth to do it. */
1977 overall = losers * LRA_LOSER_COST_FACTOR + reject;
1978 if ((best_losers == 0 || losers != 0) && best_overall < overall)
1979 goto fail;
1981 curr_alt[nop] = this_alternative;
1982 COPY_HARD_REG_SET (curr_alt_set[nop], this_alternative_set);
1983 curr_alt_win[nop] = this_alternative_win;
1984 curr_alt_match_win[nop] = this_alternative_match_win;
1985 curr_alt_offmemok[nop] = this_alternative_offmemok;
1986 curr_alt_matches[nop] = this_alternative_matches;
1988 if (this_alternative_matches >= 0
1989 && !did_match && !this_alternative_win)
1990 curr_alt_win[this_alternative_matches] = false;
1992 if (early_clobber_p && operand_reg[nop] != NULL_RTX)
1993 early_clobbered_nops[early_clobbered_regs_num++] = nop;
1995 ok_p = true;
1996 curr_alt_dont_inherit_ops_num = 0;
1997 for (nop = 0; nop < early_clobbered_regs_num; nop++)
1999 int i, j, clobbered_hard_regno;
2000 HARD_REG_SET temp_set;
2002 i = early_clobbered_nops[nop];
2003 if ((! curr_alt_win[i] && ! curr_alt_match_win[i])
2004 || hard_regno[i] < 0)
2005 continue;
2006 clobbered_hard_regno = hard_regno[i];
2007 CLEAR_HARD_REG_SET (temp_set);
2008 add_to_hard_reg_set (&temp_set, biggest_mode[i], clobbered_hard_regno);
2009 for (j = 0; j < n_operands; j++)
2010 if (j == i
2011 /* We don't want process insides of match_operator and
2012 match_parallel because otherwise we would process
2013 their operands once again generating a wrong
2014 code. */
2015 || curr_static_id->operand[j].is_operator)
2016 continue;
2017 else if ((curr_alt_matches[j] == i && curr_alt_match_win[j])
2018 || (curr_alt_matches[i] == j && curr_alt_match_win[i]))
2019 continue;
2020 else if (uses_hard_regs_p (*curr_id->operand_loc[j], temp_set))
2021 break;
2022 if (j >= n_operands)
2023 continue;
2024 /* We need to reload early clobbered register. */
2025 for (j = 0; j < n_operands; j++)
2026 if (curr_alt_matches[j] == i)
2028 curr_alt_match_win[j] = false;
2029 losers++;
2030 overall += LRA_LOSER_COST_FACTOR;
2032 if (! curr_alt_match_win[i])
2033 curr_alt_dont_inherit_ops[curr_alt_dont_inherit_ops_num++] = i;
2034 else
2036 /* Remember pseudos used for match reloads are never
2037 inherited. */
2038 lra_assert (curr_alt_matches[i] >= 0);
2039 curr_alt_win[curr_alt_matches[i]] = false;
2041 curr_alt_win[i] = curr_alt_match_win[i] = false;
2042 losers++;
2043 overall += LRA_LOSER_COST_FACTOR;
2045 small_class_operands_num = 0;
2046 for (nop = 0; nop < n_operands; nop++)
2047 small_class_operands_num
2048 += SMALL_REGISTER_CLASS_P (curr_alt[nop]) ? 1 : 0;
2050 /* If this alternative can be made to work by reloading, and it
2051 needs less reloading than the others checked so far, record
2052 it as the chosen goal for reloading. */
2053 if ((best_losers != 0 && losers == 0)
2054 || (((best_losers == 0 && losers == 0)
2055 || (best_losers != 0 && losers != 0))
2056 && (best_overall > overall
2057 || (best_overall == overall
2058 /* If the cost of the reloads is the same,
2059 prefer alternative which requires minimal
2060 number of small register classes for the
2061 operands. This improves chances of reloads
2062 for insn requiring small register
2063 classes. */
2064 && (small_class_operands_num
2065 < best_small_class_operands_num
2066 || (small_class_operands_num
2067 == best_small_class_operands_num
2068 && (reload_nregs < best_reload_nregs
2069 || (reload_nregs == best_reload_nregs
2070 && best_reload_sum < reload_sum))))))))
2072 for (nop = 0; nop < n_operands; nop++)
2074 goal_alt_win[nop] = curr_alt_win[nop];
2075 goal_alt_match_win[nop] = curr_alt_match_win[nop];
2076 goal_alt_matches[nop] = curr_alt_matches[nop];
2077 goal_alt[nop] = curr_alt[nop];
2078 goal_alt_offmemok[nop] = curr_alt_offmemok[nop];
2080 goal_alt_dont_inherit_ops_num = curr_alt_dont_inherit_ops_num;
2081 for (nop = 0; nop < curr_alt_dont_inherit_ops_num; nop++)
2082 goal_alt_dont_inherit_ops[nop] = curr_alt_dont_inherit_ops[nop];
2083 goal_alt_swapped = curr_swapped;
2084 best_overall = overall;
2085 best_losers = losers;
2086 best_small_class_operands_num = small_class_operands_num;
2087 best_reload_nregs = reload_nregs;
2088 best_reload_sum = reload_sum;
2089 goal_alt_number = nalt;
2091 if (losers == 0)
2092 /* Everything is satisfied. Do not process alternatives
2093 anymore. */
2094 break;
2095 fail:
2098 return ok_p;
2101 /* Return 1 if ADDR is a valid memory address for mode MODE in address
2102 space AS, and check that each pseudo has the proper kind of hard
2103 reg. */
2104 static int
2105 valid_address_p (enum machine_mode mode ATTRIBUTE_UNUSED,
2106 rtx addr, addr_space_t as)
2108 #ifdef GO_IF_LEGITIMATE_ADDRESS
2109 lra_assert (ADDR_SPACE_GENERIC_P (as));
2110 GO_IF_LEGITIMATE_ADDRESS (mode, addr, win);
2111 return 0;
2113 win:
2114 return 1;
2115 #else
2116 return targetm.addr_space.legitimate_address_p (mode, addr, 0, as);
2117 #endif
2120 /* Return whether address AD is valid. */
2122 static bool
2123 valid_address_p (struct address_info *ad)
2125 /* Some ports do not check displacements for eliminable registers,
2126 so we replace them temporarily with the elimination target. */
2127 rtx saved_base_reg = NULL_RTX;
2128 rtx saved_index_reg = NULL_RTX;
2129 rtx *base_term = strip_subreg (ad->base_term);
2130 rtx *index_term = strip_subreg (ad->index_term);
2131 if (base_term != NULL)
2133 saved_base_reg = *base_term;
2134 lra_eliminate_reg_if_possible (base_term);
2135 if (ad->base_term2 != NULL)
2136 *ad->base_term2 = *ad->base_term;
2138 if (index_term != NULL)
2140 saved_index_reg = *index_term;
2141 lra_eliminate_reg_if_possible (index_term);
2143 bool ok_p = valid_address_p (ad->mode, *ad->outer, ad->as);
2144 if (saved_base_reg != NULL_RTX)
2146 *base_term = saved_base_reg;
2147 if (ad->base_term2 != NULL)
2148 *ad->base_term2 = *ad->base_term;
2150 if (saved_index_reg != NULL_RTX)
2151 *index_term = saved_index_reg;
2152 return ok_p;
2155 /* Make reload base reg + disp from address AD. Return the new pseudo. */
2156 static rtx
2157 base_plus_disp_to_reg (struct address_info *ad)
2159 enum reg_class cl;
2160 rtx new_reg;
2162 lra_assert (ad->base == ad->base_term && ad->disp == ad->disp_term);
2163 cl = base_reg_class (ad->mode, ad->as, ad->base_outer_code,
2164 get_index_code (ad));
2165 new_reg = lra_create_new_reg (GET_MODE (*ad->base_term), NULL_RTX,
2166 cl, "base + disp");
2167 lra_emit_add (new_reg, *ad->base_term, *ad->disp_term);
2168 return new_reg;
2171 /* Return true if we can add a displacement to address AD, even if that
2172 makes the address invalid. The fix-up code requires any new address
2173 to be the sum of the BASE_TERM, INDEX and DISP_TERM fields. */
2174 static bool
2175 can_add_disp_p (struct address_info *ad)
2177 return (!ad->autoinc_p
2178 && ad->segment == NULL
2179 && ad->base == ad->base_term
2180 && ad->disp == ad->disp_term);
2183 /* Make equiv substitution in address AD. Return true if a substitution
2184 was made. */
2185 static bool
2186 equiv_address_substitution (struct address_info *ad)
2188 rtx base_reg, new_base_reg, index_reg, new_index_reg, *base_term, *index_term;
2189 HOST_WIDE_INT disp, scale;
2190 bool change_p;
2192 base_term = strip_subreg (ad->base_term);
2193 if (base_term == NULL)
2194 base_reg = new_base_reg = NULL_RTX;
2195 else
2197 base_reg = *base_term;
2198 new_base_reg = get_equiv_substitution (base_reg);
2200 index_term = strip_subreg (ad->index_term);
2201 if (index_term == NULL)
2202 index_reg = new_index_reg = NULL_RTX;
2203 else
2205 index_reg = *index_term;
2206 new_index_reg = get_equiv_substitution (index_reg);
2208 if (base_reg == new_base_reg && index_reg == new_index_reg)
2209 return false;
2210 disp = 0;
2211 change_p = false;
2212 if (lra_dump_file != NULL)
2214 fprintf (lra_dump_file, "Changing address in insn %d ",
2215 INSN_UID (curr_insn));
2216 print_value_slim (lra_dump_file, *ad->outer, 1);
2218 if (base_reg != new_base_reg)
2220 if (REG_P (new_base_reg))
2222 *base_term = new_base_reg;
2223 change_p = true;
2225 else if (GET_CODE (new_base_reg) == PLUS
2226 && REG_P (XEXP (new_base_reg, 0))
2227 && CONST_INT_P (XEXP (new_base_reg, 1))
2228 && can_add_disp_p (ad))
2230 disp += INTVAL (XEXP (new_base_reg, 1));
2231 *base_term = XEXP (new_base_reg, 0);
2232 change_p = true;
2234 if (ad->base_term2 != NULL)
2235 *ad->base_term2 = *ad->base_term;
2237 if (index_reg != new_index_reg)
2239 if (REG_P (new_index_reg))
2241 *index_term = new_index_reg;
2242 change_p = true;
2244 else if (GET_CODE (new_index_reg) == PLUS
2245 && REG_P (XEXP (new_index_reg, 0))
2246 && CONST_INT_P (XEXP (new_index_reg, 1))
2247 && can_add_disp_p (ad)
2248 && (scale = get_index_scale (ad)))
2250 disp += INTVAL (XEXP (new_index_reg, 1)) * scale;
2251 *index_term = XEXP (new_index_reg, 0);
2252 change_p = true;
2255 if (disp != 0)
2257 if (ad->disp != NULL)
2258 *ad->disp = plus_constant (GET_MODE (*ad->inner), *ad->disp, disp);
2259 else
2261 *ad->inner = plus_constant (GET_MODE (*ad->inner), *ad->inner, disp);
2262 update_address (ad);
2264 change_p = true;
2266 if (lra_dump_file != NULL)
2268 if (! change_p)
2269 fprintf (lra_dump_file, " -- no change\n");
2270 else
2272 fprintf (lra_dump_file, " on equiv ");
2273 print_value_slim (lra_dump_file, *ad->outer, 1);
2274 fprintf (lra_dump_file, "\n");
2277 return change_p;
2280 /* Major function to make reloads for an address in operand NOP.
2281 The supported cases are:
2283 1) an address that existed before LRA started, at which point it must
2284 have been valid. These addresses are subject to elimination and
2285 may have become invalid due to the elimination offset being out
2286 of range.
2288 2) an address created by forcing a constant to memory (force_const_to_mem).
2289 The initial form of these addresses might not be valid, and it is this
2290 function's job to make them valid.
2292 3) a frame address formed from a register and a (possibly zero)
2293 constant offset. As above, these addresses might not be valid
2294 and this function must make them so.
2296 Add reloads to the lists *BEFORE and *AFTER. We might need to add
2297 reloads to *AFTER because of inc/dec, {pre, post} modify in the
2298 address. Return true for any RTL change. */
2299 static bool
2300 process_address (int nop, rtx *before, rtx *after)
2302 struct address_info ad;
2303 rtx new_reg;
2304 rtx op = *curr_id->operand_loc[nop];
2305 const char *constraint = curr_static_id->operand[nop].constraint;
2306 bool change_p;
2308 if (constraint[0] == 'p'
2309 || EXTRA_ADDRESS_CONSTRAINT (constraint[0], constraint))
2310 decompose_lea_address (&ad, curr_id->operand_loc[nop]);
2311 else if (MEM_P (op))
2312 decompose_mem_address (&ad, op);
2313 else if (GET_CODE (op) == SUBREG
2314 && MEM_P (SUBREG_REG (op)))
2315 decompose_mem_address (&ad, SUBREG_REG (op));
2316 else
2317 return false;
2318 change_p = equiv_address_substitution (&ad);
2319 if (ad.base_term != NULL
2320 && (process_addr_reg
2321 (ad.base_term, before,
2322 (ad.autoinc_p
2323 && !(REG_P (*ad.base_term)
2324 && find_regno_note (curr_insn, REG_DEAD,
2325 REGNO (*ad.base_term)) != NULL_RTX)
2326 ? after : NULL),
2327 base_reg_class (ad.mode, ad.as, ad.base_outer_code,
2328 get_index_code (&ad)))))
2330 change_p = true;
2331 if (ad.base_term2 != NULL)
2332 *ad.base_term2 = *ad.base_term;
2334 if (ad.index_term != NULL
2335 && process_addr_reg (ad.index_term, before, NULL, INDEX_REG_CLASS))
2336 change_p = true;
2338 /* There are three cases where the shape of *AD.INNER may now be invalid:
2340 1) the original address was valid, but either elimination or
2341 equiv_address_substitution applied a displacement that made
2342 it invalid.
2344 2) the address is an invalid symbolic address created by
2345 force_const_to_mem.
2347 3) the address is a frame address with an invalid offset.
2349 All these cases involve a displacement and a non-autoinc address,
2350 so there is no point revalidating other types. */
2351 if (ad.disp == NULL || ad.autoinc_p || valid_address_p (&ad))
2352 return change_p;
2354 /* Any index existed before LRA started, so we can assume that the
2355 presence and shape of the index is valid. */
2356 push_to_sequence (*before);
2357 gcc_assert (ad.segment == NULL);
2358 gcc_assert (ad.disp == ad.disp_term);
2359 if (ad.base == NULL)
2361 if (ad.index == NULL)
2363 int code = -1;
2364 enum reg_class cl = base_reg_class (ad.mode, ad.as,
2365 SCRATCH, SCRATCH);
2366 rtx disp = *ad.disp;
2368 new_reg = lra_create_new_reg (Pmode, NULL_RTX, cl, "disp");
2369 #ifdef HAVE_lo_sum
2371 rtx insn;
2372 rtx last = get_last_insn ();
2374 /* disp => lo_sum (new_base, disp), case (2) above. */
2375 insn = emit_insn (gen_rtx_SET
2376 (VOIDmode, new_reg,
2377 gen_rtx_HIGH (Pmode, copy_rtx (disp))));
2378 code = recog_memoized (insn);
2379 if (code >= 0)
2381 *ad.disp = gen_rtx_LO_SUM (Pmode, new_reg, disp);
2382 if (! valid_address_p (ad.mode, *ad.outer, ad.as))
2384 *ad.disp = disp;
2385 code = -1;
2388 if (code < 0)
2389 delete_insns_since (last);
2391 #endif
2392 if (code < 0)
2394 /* disp => new_base, case (2) above. */
2395 lra_emit_move (new_reg, disp);
2396 *ad.disp = new_reg;
2399 else
2401 /* index * scale + disp => new base + index * scale,
2402 case (1) above. */
2403 enum reg_class cl = base_reg_class (ad.mode, ad.as, PLUS,
2404 GET_CODE (*ad.index));
2406 lra_assert (INDEX_REG_CLASS != NO_REGS);
2407 new_reg = lra_create_new_reg (Pmode, NULL_RTX, cl, "disp");
2408 lra_emit_move (new_reg, *ad.disp);
2409 *ad.inner = simplify_gen_binary (PLUS, GET_MODE (new_reg),
2410 new_reg, *ad.index);
2413 else if (ad.index == NULL)
2415 /* base + disp => new base, cases (1) and (3) above. */
2416 /* Another option would be to reload the displacement into an
2417 index register. However, postreload has code to optimize
2418 address reloads that have the same base and different
2419 displacements, so reloading into an index register would
2420 not necessarily be a win. */
2421 new_reg = base_plus_disp_to_reg (&ad);
2422 *ad.inner = new_reg;
2424 else
2426 /* base + scale * index + disp => new base + scale * index,
2427 case (1) above. */
2428 new_reg = base_plus_disp_to_reg (&ad);
2429 *ad.inner = simplify_gen_binary (PLUS, GET_MODE (new_reg),
2430 new_reg, *ad.index);
2432 *before = get_insns ();
2433 end_sequence ();
2434 return true;
2437 /* Emit insns to reload VALUE into a new register. VALUE is an
2438 auto-increment or auto-decrement RTX whose operand is a register or
2439 memory location; so reloading involves incrementing that location.
2440 IN is either identical to VALUE, or some cheaper place to reload
2441 value being incremented/decremented from.
2443 INC_AMOUNT is the number to increment or decrement by (always
2444 positive and ignored for POST_MODIFY/PRE_MODIFY).
2446 Return pseudo containing the result. */
2447 static rtx
2448 emit_inc (enum reg_class new_rclass, rtx in, rtx value, int inc_amount)
2450 /* REG or MEM to be copied and incremented. */
2451 rtx incloc = XEXP (value, 0);
2452 /* Nonzero if increment after copying. */
2453 int post = (GET_CODE (value) == POST_DEC || GET_CODE (value) == POST_INC
2454 || GET_CODE (value) == POST_MODIFY);
2455 rtx last;
2456 rtx inc;
2457 rtx add_insn;
2458 int code;
2459 rtx real_in = in == value ? incloc : in;
2460 rtx result;
2461 bool plus_p = true;
2463 if (GET_CODE (value) == PRE_MODIFY || GET_CODE (value) == POST_MODIFY)
2465 lra_assert (GET_CODE (XEXP (value, 1)) == PLUS
2466 || GET_CODE (XEXP (value, 1)) == MINUS);
2467 lra_assert (rtx_equal_p (XEXP (XEXP (value, 1), 0), XEXP (value, 0)));
2468 plus_p = GET_CODE (XEXP (value, 1)) == PLUS;
2469 inc = XEXP (XEXP (value, 1), 1);
2471 else
2473 if (GET_CODE (value) == PRE_DEC || GET_CODE (value) == POST_DEC)
2474 inc_amount = -inc_amount;
2476 inc = GEN_INT (inc_amount);
2479 if (! post && REG_P (incloc))
2480 result = incloc;
2481 else
2482 result = lra_create_new_reg (GET_MODE (value), value, new_rclass,
2483 "INC/DEC result");
2485 if (real_in != result)
2487 /* First copy the location to the result register. */
2488 lra_assert (REG_P (result));
2489 emit_insn (gen_move_insn (result, real_in));
2492 /* We suppose that there are insns to add/sub with the constant
2493 increment permitted in {PRE/POST)_{DEC/INC/MODIFY}. At least the
2494 old reload worked with this assumption. If the assumption
2495 becomes wrong, we should use approach in function
2496 base_plus_disp_to_reg. */
2497 if (in == value)
2499 /* See if we can directly increment INCLOC. */
2500 last = get_last_insn ();
2501 add_insn = emit_insn (plus_p
2502 ? gen_add2_insn (incloc, inc)
2503 : gen_sub2_insn (incloc, inc));
2505 code = recog_memoized (add_insn);
2506 if (code >= 0)
2508 if (! post && result != incloc)
2509 emit_insn (gen_move_insn (result, incloc));
2510 return result;
2512 delete_insns_since (last);
2515 /* If couldn't do the increment directly, must increment in RESULT.
2516 The way we do this depends on whether this is pre- or
2517 post-increment. For pre-increment, copy INCLOC to the reload
2518 register, increment it there, then save back. */
2519 if (! post)
2521 if (real_in != result)
2522 emit_insn (gen_move_insn (result, real_in));
2523 if (plus_p)
2524 emit_insn (gen_add2_insn (result, inc));
2525 else
2526 emit_insn (gen_sub2_insn (result, inc));
2527 if (result != incloc)
2528 emit_insn (gen_move_insn (incloc, result));
2530 else
2532 /* Post-increment.
2534 Because this might be a jump insn or a compare, and because
2535 RESULT may not be available after the insn in an input
2536 reload, we must do the incrementing before the insn being
2537 reloaded for.
2539 We have already copied IN to RESULT. Increment the copy in
2540 RESULT, save that back, then decrement RESULT so it has
2541 the original value. */
2542 if (plus_p)
2543 emit_insn (gen_add2_insn (result, inc));
2544 else
2545 emit_insn (gen_sub2_insn (result, inc));
2546 emit_insn (gen_move_insn (incloc, result));
2547 /* Restore non-modified value for the result. We prefer this
2548 way because it does not require an additional hard
2549 register. */
2550 if (plus_p)
2552 if (CONST_INT_P (inc))
2553 emit_insn (gen_add2_insn (result, GEN_INT (-INTVAL (inc))));
2554 else
2555 emit_insn (gen_sub2_insn (result, inc));
2557 else
2558 emit_insn (gen_add2_insn (result, inc));
2560 return result;
2563 /* Swap operands NOP and NOP + 1. */
2564 static inline void
2565 swap_operands (int nop)
2567 enum machine_mode mode = curr_operand_mode[nop];
2568 curr_operand_mode[nop] = curr_operand_mode[nop + 1];
2569 curr_operand_mode[nop + 1] = mode;
2570 rtx x = *curr_id->operand_loc[nop];
2571 *curr_id->operand_loc[nop] = *curr_id->operand_loc[nop + 1];
2572 *curr_id->operand_loc[nop + 1] = x;
2573 /* Swap the duplicates too. */
2574 lra_update_dup (curr_id, nop);
2575 lra_update_dup (curr_id, nop + 1);
2578 /* Main entry point of the constraint code: search the body of the
2579 current insn to choose the best alternative. It is mimicking insn
2580 alternative cost calculation model of former reload pass. That is
2581 because machine descriptions were written to use this model. This
2582 model can be changed in future. Make commutative operand exchange
2583 if it is chosen.
2585 Return true if some RTL changes happened during function call. */
2586 static bool
2587 curr_insn_transform (void)
2589 int i, j, k;
2590 int n_operands;
2591 int n_alternatives;
2592 int commutative;
2593 signed char goal_alt_matched[MAX_RECOG_OPERANDS][MAX_RECOG_OPERANDS];
2594 rtx before, after;
2595 bool alt_p = false;
2596 /* Flag that the insn has been changed through a transformation. */
2597 bool change_p;
2598 bool sec_mem_p;
2599 #ifdef SECONDARY_MEMORY_NEEDED
2600 bool use_sec_mem_p;
2601 #endif
2602 int max_regno_before;
2603 int reused_alternative_num;
2605 no_input_reloads_p = no_output_reloads_p = false;
2606 goal_alt_number = -1;
2608 if (check_and_process_move (&change_p, &sec_mem_p))
2609 return change_p;
2611 /* JUMP_INSNs and CALL_INSNs are not allowed to have any output
2612 reloads; neither are insns that SET cc0. Insns that use CC0 are
2613 not allowed to have any input reloads. */
2614 if (JUMP_P (curr_insn) || CALL_P (curr_insn))
2615 no_output_reloads_p = true;
2617 #ifdef HAVE_cc0
2618 if (reg_referenced_p (cc0_rtx, PATTERN (curr_insn)))
2619 no_input_reloads_p = true;
2620 if (reg_set_p (cc0_rtx, PATTERN (curr_insn)))
2621 no_output_reloads_p = true;
2622 #endif
2624 n_operands = curr_static_id->n_operands;
2625 n_alternatives = curr_static_id->n_alternatives;
2627 /* Just return "no reloads" if insn has no operands with
2628 constraints. */
2629 if (n_operands == 0 || n_alternatives == 0)
2630 return false;
2632 max_regno_before = max_reg_num ();
2634 for (i = 0; i < n_operands; i++)
2636 goal_alt_matched[i][0] = -1;
2637 goal_alt_matches[i] = -1;
2640 commutative = curr_static_id->commutative;
2642 /* Now see what we need for pseudos that didn't get hard regs or got
2643 the wrong kind of hard reg. For this, we must consider all the
2644 operands together against the register constraints. */
2646 best_losers = best_overall = INT_MAX;
2647 best_small_class_operands_num = best_reload_sum = 0;
2649 curr_swapped = false;
2650 goal_alt_swapped = false;
2652 /* Make equivalence substitution and memory subreg elimination
2653 before address processing because an address legitimacy can
2654 depend on memory mode. */
2655 for (i = 0; i < n_operands; i++)
2657 rtx op = *curr_id->operand_loc[i];
2658 rtx subst, old = op;
2659 bool op_change_p = false;
2661 if (GET_CODE (old) == SUBREG)
2662 old = SUBREG_REG (old);
2663 subst = get_equiv_substitution (old);
2664 if (subst != old)
2666 subst = copy_rtx (subst);
2667 lra_assert (REG_P (old));
2668 if (GET_CODE (op) == SUBREG)
2669 SUBREG_REG (op) = subst;
2670 else
2671 *curr_id->operand_loc[i] = subst;
2672 if (lra_dump_file != NULL)
2674 fprintf (lra_dump_file,
2675 "Changing pseudo %d in operand %i of insn %u on equiv ",
2676 REGNO (old), i, INSN_UID (curr_insn));
2677 print_value_slim (lra_dump_file, subst, 1);
2678 fprintf (lra_dump_file, "\n");
2680 op_change_p = change_p = true;
2682 if (simplify_operand_subreg (i, GET_MODE (old)) || op_change_p)
2684 change_p = true;
2685 lra_update_dup (curr_id, i);
2689 /* Reload address registers and displacements. We do it before
2690 finding an alternative because of memory constraints. */
2691 before = after = NULL_RTX;
2692 for (i = 0; i < n_operands; i++)
2693 if (! curr_static_id->operand[i].is_operator
2694 && process_address (i, &before, &after))
2696 change_p = true;
2697 lra_update_dup (curr_id, i);
2700 if (change_p)
2701 /* If we've changed the instruction then any alternative that
2702 we chose previously may no longer be valid. */
2703 lra_set_used_insn_alternative (curr_insn, -1);
2705 try_swapped:
2707 reused_alternative_num = curr_id->used_insn_alternative;
2708 if (lra_dump_file != NULL && reused_alternative_num >= 0)
2709 fprintf (lra_dump_file, "Reusing alternative %d for insn #%u\n",
2710 reused_alternative_num, INSN_UID (curr_insn));
2712 if (process_alt_operands (reused_alternative_num))
2713 alt_p = true;
2715 /* If insn is commutative (it's safe to exchange a certain pair of
2716 operands) then we need to try each alternative twice, the second
2717 time matching those two operands as if we had exchanged them. To
2718 do this, really exchange them in operands.
2720 If we have just tried the alternatives the second time, return
2721 operands to normal and drop through. */
2723 if (reused_alternative_num < 0 && commutative >= 0)
2725 curr_swapped = !curr_swapped;
2726 if (curr_swapped)
2728 swap_operands (commutative);
2729 goto try_swapped;
2731 else
2732 swap_operands (commutative);
2735 /* The operands don't meet the constraints. goal_alt describes the
2736 alternative that we could reach by reloading the fewest operands.
2737 Reload so as to fit it. */
2739 if (! alt_p && ! sec_mem_p)
2741 /* No alternative works with reloads?? */
2742 if (INSN_CODE (curr_insn) >= 0)
2743 fatal_insn ("unable to generate reloads for:", curr_insn);
2744 error_for_asm (curr_insn,
2745 "inconsistent operand constraints in an %<asm%>");
2746 /* Avoid further trouble with this insn. */
2747 PATTERN (curr_insn) = gen_rtx_USE (VOIDmode, const0_rtx);
2748 lra_invalidate_insn_data (curr_insn);
2749 return true;
2752 /* If the best alternative is with operands 1 and 2 swapped, swap
2753 them. Update the operand numbers of any reloads already
2754 pushed. */
2756 if (goal_alt_swapped)
2758 if (lra_dump_file != NULL)
2759 fprintf (lra_dump_file, " Commutative operand exchange in insn %u\n",
2760 INSN_UID (curr_insn));
2762 /* Swap the duplicates too. */
2763 swap_operands (commutative);
2764 change_p = true;
2767 #ifdef SECONDARY_MEMORY_NEEDED
2768 /* Some target macros SECONDARY_MEMORY_NEEDED (e.g. x86) are defined
2769 too conservatively. So we use the secondary memory only if there
2770 is no any alternative without reloads. */
2771 use_sec_mem_p = false;
2772 if (! alt_p)
2773 use_sec_mem_p = true;
2774 else if (sec_mem_p)
2776 for (i = 0; i < n_operands; i++)
2777 if (! goal_alt_win[i] && ! goal_alt_match_win[i])
2778 break;
2779 use_sec_mem_p = i < n_operands;
2782 if (use_sec_mem_p)
2784 rtx new_reg, set, src, dest;
2785 enum machine_mode sec_mode;
2787 lra_assert (sec_mem_p);
2788 set = single_set (curr_insn);
2789 lra_assert (set != NULL_RTX && ! side_effects_p (set));
2790 dest = SET_DEST (set);
2791 src = SET_SRC (set);
2792 #ifdef SECONDARY_MEMORY_NEEDED_MODE
2793 sec_mode = SECONDARY_MEMORY_NEEDED_MODE (GET_MODE (src));
2794 #else
2795 sec_mode = GET_MODE (src);
2796 #endif
2797 new_reg = lra_create_new_reg (sec_mode, NULL_RTX,
2798 NO_REGS, "secondary");
2799 /* If the mode is changed, it should be wider. */
2800 lra_assert (GET_MODE_SIZE (GET_MODE (new_reg))
2801 >= GET_MODE_SIZE (GET_MODE (src)));
2802 after = emit_spill_move (false, new_reg, dest);
2803 lra_process_new_insns (curr_insn, NULL_RTX, after,
2804 "Inserting the sec. move");
2805 before = emit_spill_move (true, new_reg, src);
2806 lra_process_new_insns (curr_insn, before, NULL_RTX, "Changing on");
2807 lra_set_insn_deleted (curr_insn);
2808 return true;
2810 #endif
2812 lra_assert (goal_alt_number >= 0);
2813 lra_set_used_insn_alternative (curr_insn, goal_alt_number);
2815 if (lra_dump_file != NULL)
2817 const char *p;
2819 fprintf (lra_dump_file, " Choosing alt %d in insn %u:",
2820 goal_alt_number, INSN_UID (curr_insn));
2821 for (i = 0; i < n_operands; i++)
2823 p = (curr_static_id->operand_alternative
2824 [goal_alt_number * n_operands + i].constraint);
2825 if (*p == '\0')
2826 continue;
2827 fprintf (lra_dump_file, " (%d) ", i);
2828 for (; *p != '\0' && *p != ',' && *p != '#'; p++)
2829 fputc (*p, lra_dump_file);
2831 fprintf (lra_dump_file, "\n");
2834 /* Right now, for any pair of operands I and J that are required to
2835 match, with J < I, goal_alt_matches[I] is J. Add I to
2836 goal_alt_matched[J]. */
2838 for (i = 0; i < n_operands; i++)
2839 if ((j = goal_alt_matches[i]) >= 0)
2841 for (k = 0; goal_alt_matched[j][k] >= 0; k++)
2843 /* We allow matching one output operand and several input
2844 operands. */
2845 lra_assert (k == 0
2846 || (curr_static_id->operand[j].type == OP_OUT
2847 && curr_static_id->operand[i].type == OP_IN
2848 && (curr_static_id->operand
2849 [goal_alt_matched[j][0]].type == OP_IN)));
2850 goal_alt_matched[j][k] = i;
2851 goal_alt_matched[j][k + 1] = -1;
2854 for (i = 0; i < n_operands; i++)
2855 goal_alt_win[i] |= goal_alt_match_win[i];
2857 /* Any constants that aren't allowed and can't be reloaded into
2858 registers are here changed into memory references. */
2859 for (i = 0; i < n_operands; i++)
2860 if (goal_alt_win[i])
2862 int regno;
2863 enum reg_class new_class;
2864 rtx reg = *curr_id->operand_loc[i];
2866 if (GET_CODE (reg) == SUBREG)
2867 reg = SUBREG_REG (reg);
2869 if (REG_P (reg) && (regno = REGNO (reg)) >= FIRST_PSEUDO_REGISTER)
2871 bool ok_p = in_class_p (reg, goal_alt[i], &new_class);
2873 if (new_class != NO_REGS && get_reg_class (regno) != new_class)
2875 lra_assert (ok_p);
2876 change_class (regno, new_class, " Change", true);
2880 else
2882 const char *constraint;
2883 char c;
2884 rtx op = *curr_id->operand_loc[i];
2885 rtx subreg = NULL_RTX;
2886 enum machine_mode mode = curr_operand_mode[i];
2888 if (GET_CODE (op) == SUBREG)
2890 subreg = op;
2891 op = SUBREG_REG (op);
2892 mode = GET_MODE (op);
2895 if (CONST_POOL_OK_P (mode, op)
2896 && ((targetm.preferred_reload_class
2897 (op, (enum reg_class) goal_alt[i]) == NO_REGS)
2898 || no_input_reloads_p))
2900 rtx tem = force_const_mem (mode, op);
2902 change_p = true;
2903 if (subreg != NULL_RTX)
2904 tem = gen_rtx_SUBREG (mode, tem, SUBREG_BYTE (subreg));
2906 *curr_id->operand_loc[i] = tem;
2907 lra_update_dup (curr_id, i);
2908 process_address (i, &before, &after);
2910 /* If the alternative accepts constant pool refs directly
2911 there will be no reload needed at all. */
2912 if (subreg != NULL_RTX)
2913 continue;
2914 /* Skip alternatives before the one requested. */
2915 constraint = (curr_static_id->operand_alternative
2916 [goal_alt_number * n_operands + i].constraint);
2917 for (;
2918 (c = *constraint) && c != ',' && c != '#';
2919 constraint += CONSTRAINT_LEN (c, constraint))
2921 if (c == TARGET_MEM_CONSTRAINT || c == 'o')
2922 break;
2923 #ifdef EXTRA_CONSTRAINT_STR
2924 if (EXTRA_MEMORY_CONSTRAINT (c, constraint)
2925 && EXTRA_CONSTRAINT_STR (tem, c, constraint))
2926 break;
2927 #endif
2929 if (c == '\0' || c == ',' || c == '#')
2930 continue;
2932 goal_alt_win[i] = true;
2936 for (i = 0; i < n_operands; i++)
2938 rtx old, new_reg;
2939 rtx op = *curr_id->operand_loc[i];
2941 if (goal_alt_win[i])
2943 if (goal_alt[i] == NO_REGS
2944 && REG_P (op)
2945 /* When we assign NO_REGS it means that we will not
2946 assign a hard register to the scratch pseudo by
2947 assigment pass and the scratch pseudo will be
2948 spilled. Spilled scratch pseudos are transformed
2949 back to scratches at the LRA end. */
2950 && lra_former_scratch_operand_p (curr_insn, i))
2951 change_class (REGNO (op), NO_REGS, " Change", true);
2952 continue;
2955 /* Operands that match previous ones have already been handled. */
2956 if (goal_alt_matches[i] >= 0)
2957 continue;
2959 /* We should not have an operand with a non-offsettable address
2960 appearing where an offsettable address will do. It also may
2961 be a case when the address should be special in other words
2962 not a general one (e.g. it needs no index reg). */
2963 if (goal_alt_matched[i][0] == -1 && goal_alt_offmemok[i] && MEM_P (op))
2965 enum reg_class rclass;
2966 rtx *loc = &XEXP (op, 0);
2967 enum rtx_code code = GET_CODE (*loc);
2969 push_to_sequence (before);
2970 rclass = base_reg_class (GET_MODE (op), MEM_ADDR_SPACE (op),
2971 MEM, SCRATCH);
2972 if (GET_RTX_CLASS (code) == RTX_AUTOINC)
2973 new_reg = emit_inc (rclass, *loc, *loc,
2974 /* This value does not matter for MODIFY. */
2975 GET_MODE_SIZE (GET_MODE (op)));
2976 else if (get_reload_reg (OP_IN, Pmode, *loc, rclass,
2977 "offsetable address", &new_reg))
2978 lra_emit_move (new_reg, *loc);
2979 before = get_insns ();
2980 end_sequence ();
2981 *loc = new_reg;
2982 lra_update_dup (curr_id, i);
2984 else if (goal_alt_matched[i][0] == -1)
2986 enum machine_mode mode;
2987 rtx reg, *loc;
2988 int hard_regno, byte;
2989 enum op_type type = curr_static_id->operand[i].type;
2991 loc = curr_id->operand_loc[i];
2992 mode = curr_operand_mode[i];
2993 if (GET_CODE (*loc) == SUBREG)
2995 reg = SUBREG_REG (*loc);
2996 byte = SUBREG_BYTE (*loc);
2997 if (REG_P (reg)
2998 /* Strict_low_part requires reload the register not
2999 the sub-register. */
3000 && (curr_static_id->operand[i].strict_low
3001 || (GET_MODE_SIZE (mode)
3002 <= GET_MODE_SIZE (GET_MODE (reg))
3003 && (hard_regno
3004 = get_try_hard_regno (REGNO (reg))) >= 0
3005 && (simplify_subreg_regno
3006 (hard_regno,
3007 GET_MODE (reg), byte, mode) < 0)
3008 && (goal_alt[i] == NO_REGS
3009 || (simplify_subreg_regno
3010 (ira_class_hard_regs[goal_alt[i]][0],
3011 GET_MODE (reg), byte, mode) >= 0)))))
3013 loc = &SUBREG_REG (*loc);
3014 mode = GET_MODE (*loc);
3017 old = *loc;
3018 if (get_reload_reg (type, mode, old, goal_alt[i], "", &new_reg)
3019 && type != OP_OUT)
3021 push_to_sequence (before);
3022 lra_emit_move (new_reg, old);
3023 before = get_insns ();
3024 end_sequence ();
3026 *loc = new_reg;
3027 if (type != OP_IN
3028 && find_reg_note (curr_insn, REG_UNUSED, old) == NULL_RTX)
3030 start_sequence ();
3031 lra_emit_move (type == OP_INOUT ? copy_rtx (old) : old, new_reg);
3032 emit_insn (after);
3033 after = get_insns ();
3034 end_sequence ();
3035 *loc = new_reg;
3037 for (j = 0; j < goal_alt_dont_inherit_ops_num; j++)
3038 if (goal_alt_dont_inherit_ops[j] == i)
3040 lra_set_regno_unique_value (REGNO (new_reg));
3041 break;
3043 lra_update_dup (curr_id, i);
3045 else if (curr_static_id->operand[i].type == OP_IN
3046 && (curr_static_id->operand[goal_alt_matched[i][0]].type
3047 == OP_OUT))
3049 signed char arr[2];
3051 arr[0] = i;
3052 arr[1] = -1;
3053 match_reload (goal_alt_matched[i][0], arr,
3054 goal_alt[i], &before, &after);
3056 else if (curr_static_id->operand[i].type == OP_OUT
3057 && (curr_static_id->operand[goal_alt_matched[i][0]].type
3058 == OP_IN))
3059 match_reload (i, goal_alt_matched[i], goal_alt[i], &before, &after);
3060 else
3061 /* We must generate code in any case when function
3062 process_alt_operands decides that it is possible. */
3063 gcc_unreachable ();
3065 if (before != NULL_RTX || after != NULL_RTX
3066 || max_regno_before != max_reg_num ())
3067 change_p = true;
3068 if (change_p)
3070 lra_update_operator_dups (curr_id);
3071 /* Something changes -- process the insn. */
3072 lra_update_insn_regno_info (curr_insn);
3074 lra_process_new_insns (curr_insn, before, after, "Inserting insn reload");
3075 return change_p;
3078 /* Return true if X is in LIST. */
3079 static bool
3080 in_list_p (rtx x, rtx list)
3082 for (; list != NULL_RTX; list = XEXP (list, 1))
3083 if (XEXP (list, 0) == x)
3084 return true;
3085 return false;
3088 /* Return true if X contains an allocatable hard register (if
3089 HARD_REG_P) or a (spilled if SPILLED_P) pseudo. */
3090 static bool
3091 contains_reg_p (rtx x, bool hard_reg_p, bool spilled_p)
3093 int i, j;
3094 const char *fmt;
3095 enum rtx_code code;
3097 code = GET_CODE (x);
3098 if (REG_P (x))
3100 int regno = REGNO (x);
3101 HARD_REG_SET alloc_regs;
3103 if (hard_reg_p)
3105 if (regno >= FIRST_PSEUDO_REGISTER)
3106 regno = lra_get_regno_hard_regno (regno);
3107 if (regno < 0)
3108 return false;
3109 COMPL_HARD_REG_SET (alloc_regs, lra_no_alloc_regs);
3110 return overlaps_hard_reg_set_p (alloc_regs, GET_MODE (x), regno);
3112 else
3114 if (regno < FIRST_PSEUDO_REGISTER)
3115 return false;
3116 if (! spilled_p)
3117 return true;
3118 return lra_get_regno_hard_regno (regno) < 0;
3121 fmt = GET_RTX_FORMAT (code);
3122 for (i = GET_RTX_LENGTH (code) - 1; i >= 0; i--)
3124 if (fmt[i] == 'e')
3126 if (contains_reg_p (XEXP (x, i), hard_reg_p, spilled_p))
3127 return true;
3129 else if (fmt[i] == 'E')
3131 for (j = XVECLEN (x, i) - 1; j >= 0; j--)
3132 if (contains_reg_p (XVECEXP (x, i, j), hard_reg_p, spilled_p))
3133 return true;
3136 return false;
3139 /* Process all regs in location *LOC and change them on equivalent
3140 substitution. Return true if any change was done. */
3141 static bool
3142 loc_equivalence_change_p (rtx *loc)
3144 rtx subst, reg, x = *loc;
3145 bool result = false;
3146 enum rtx_code code = GET_CODE (x);
3147 const char *fmt;
3148 int i, j;
3150 if (code == SUBREG)
3152 reg = SUBREG_REG (x);
3153 if ((subst = get_equiv_substitution (reg)) != reg
3154 && GET_MODE (subst) == VOIDmode)
3156 /* We cannot reload debug location. Simplify subreg here
3157 while we know the inner mode. */
3158 *loc = simplify_gen_subreg (GET_MODE (x), subst,
3159 GET_MODE (reg), SUBREG_BYTE (x));
3160 return true;
3163 if (code == REG && (subst = get_equiv_substitution (x)) != x)
3165 *loc = subst;
3166 return true;
3169 /* Scan all the operand sub-expressions. */
3170 fmt = GET_RTX_FORMAT (code);
3171 for (i = GET_RTX_LENGTH (code) - 1; i >= 0; i--)
3173 if (fmt[i] == 'e')
3174 result = loc_equivalence_change_p (&XEXP (x, i)) || result;
3175 else if (fmt[i] == 'E')
3176 for (j = XVECLEN (x, i) - 1; j >= 0; j--)
3177 result
3178 = loc_equivalence_change_p (&XVECEXP (x, i, j)) || result;
3180 return result;
3183 /* Maximum allowed number of constraint pass iterations after the last
3184 spill pass. It is for preventing LRA cycling in a bug case. */
3185 #define MAX_CONSTRAINT_ITERATION_NUMBER 15
3187 /* Maximum number of generated reload insns per an insn. It is for
3188 preventing this pass cycling in a bug case. */
3189 #define MAX_RELOAD_INSNS_NUMBER LRA_MAX_INSN_RELOADS
3191 /* The current iteration number of this LRA pass. */
3192 int lra_constraint_iter;
3194 /* The current iteration number of this LRA pass after the last spill
3195 pass. */
3196 int lra_constraint_iter_after_spill;
3198 /* True if we substituted equiv which needs checking register
3199 allocation correctness because the equivalent value contains
3200 allocatable hard registers or when we restore multi-register
3201 pseudo. */
3202 bool lra_risky_transformations_p;
3204 /* Return true if REGNO is referenced in more than one block. */
3205 static bool
3206 multi_block_pseudo_p (int regno)
3208 basic_block bb = NULL;
3209 unsigned int uid;
3210 bitmap_iterator bi;
3212 if (regno < FIRST_PSEUDO_REGISTER)
3213 return false;
3215 EXECUTE_IF_SET_IN_BITMAP (&lra_reg_info[regno].insn_bitmap, 0, uid, bi)
3216 if (bb == NULL)
3217 bb = BLOCK_FOR_INSN (lra_insn_recog_data[uid]->insn);
3218 else if (BLOCK_FOR_INSN (lra_insn_recog_data[uid]->insn) != bb)
3219 return true;
3220 return false;
3223 /* Return true if LIST contains a deleted insn. */
3224 static bool
3225 contains_deleted_insn_p (rtx list)
3227 for (; list != NULL_RTX; list = XEXP (list, 1))
3228 if (NOTE_P (XEXP (list, 0))
3229 && NOTE_KIND (XEXP (list, 0)) == NOTE_INSN_DELETED)
3230 return true;
3231 return false;
3234 /* Return true if X contains a pseudo dying in INSN. */
3235 static bool
3236 dead_pseudo_p (rtx x, rtx insn)
3238 int i, j;
3239 const char *fmt;
3240 enum rtx_code code;
3242 if (REG_P (x))
3243 return (insn != NULL_RTX
3244 && find_regno_note (insn, REG_DEAD, REGNO (x)) != NULL_RTX);
3245 code = GET_CODE (x);
3246 fmt = GET_RTX_FORMAT (code);
3247 for (i = GET_RTX_LENGTH (code) - 1; i >= 0; i--)
3249 if (fmt[i] == 'e')
3251 if (dead_pseudo_p (XEXP (x, i), insn))
3252 return true;
3254 else if (fmt[i] == 'E')
3256 for (j = XVECLEN (x, i) - 1; j >= 0; j--)
3257 if (dead_pseudo_p (XVECEXP (x, i, j), insn))
3258 return true;
3261 return false;
3264 /* Return true if INSN contains a dying pseudo in INSN right hand
3265 side. */
3266 static bool
3267 insn_rhs_dead_pseudo_p (rtx insn)
3269 rtx set = single_set (insn);
3271 gcc_assert (set != NULL);
3272 return dead_pseudo_p (SET_SRC (set), insn);
3275 /* Return true if any init insn of REGNO contains a dying pseudo in
3276 insn right hand side. */
3277 static bool
3278 init_insn_rhs_dead_pseudo_p (int regno)
3280 rtx insns = ira_reg_equiv[regno].init_insns;
3282 if (insns == NULL)
3283 return false;
3284 if (INSN_P (insns))
3285 return insn_rhs_dead_pseudo_p (insns);
3286 for (; insns != NULL_RTX; insns = XEXP (insns, 1))
3287 if (insn_rhs_dead_pseudo_p (XEXP (insns, 0)))
3288 return true;
3289 return false;
3292 /* Entry function of LRA constraint pass. Return true if the
3293 constraint pass did change the code. */
3294 bool
3295 lra_constraints (bool first_p)
3297 bool changed_p;
3298 int i, hard_regno, new_insns_num;
3299 unsigned int min_len, new_min_len, uid;
3300 rtx set, x, reg, dest_reg;
3301 basic_block last_bb;
3302 bitmap_head equiv_insn_bitmap;
3303 bitmap_iterator bi;
3305 lra_constraint_iter++;
3306 if (lra_dump_file != NULL)
3307 fprintf (lra_dump_file, "\n********** Local #%d: **********\n\n",
3308 lra_constraint_iter);
3309 lra_constraint_iter_after_spill++;
3310 if (lra_constraint_iter_after_spill > MAX_CONSTRAINT_ITERATION_NUMBER)
3311 internal_error
3312 ("Maximum number of LRA constraint passes is achieved (%d)\n",
3313 MAX_CONSTRAINT_ITERATION_NUMBER);
3314 changed_p = false;
3315 lra_risky_transformations_p = false;
3316 new_insn_uid_start = get_max_uid ();
3317 new_regno_start = first_p ? lra_constraint_new_regno_start : max_reg_num ();
3318 bitmap_initialize (&equiv_insn_bitmap, &reg_obstack);
3319 for (i = FIRST_PSEUDO_REGISTER; i < new_regno_start; i++)
3320 if (lra_reg_info[i].nrefs != 0)
3322 ira_reg_equiv[i].profitable_p = true;
3323 reg = regno_reg_rtx[i];
3324 if ((hard_regno = lra_get_regno_hard_regno (i)) >= 0)
3326 int j, nregs = hard_regno_nregs[hard_regno][PSEUDO_REGNO_MODE (i)];
3328 for (j = 0; j < nregs; j++)
3329 df_set_regs_ever_live (hard_regno + j, true);
3331 else if ((x = get_equiv_substitution (reg)) != reg)
3333 bool pseudo_p = contains_reg_p (x, false, false);
3334 rtx set, insn;
3336 /* After RTL transformation, we can not guarantee that
3337 pseudo in the substitution was not reloaded which might
3338 make equivalence invalid. For example, in reverse
3339 equiv of p0
3341 p0 <- ...
3343 equiv_mem <- p0
3345 the memory address register was reloaded before the 2nd
3346 insn. */
3347 if ((! first_p && pseudo_p)
3348 /* We don't use DF for compilation speed sake. So it
3349 is problematic to update live info when we use an
3350 equivalence containing pseudos in more than one
3351 BB. */
3352 || (pseudo_p && multi_block_pseudo_p (i))
3353 /* If an init insn was deleted for some reason, cancel
3354 the equiv. We could update the equiv insns after
3355 transformations including an equiv insn deletion
3356 but it is not worthy as such cases are extremely
3357 rare. */
3358 || contains_deleted_insn_p (ira_reg_equiv[i].init_insns)
3359 /* If it is not a reverse equivalence, we check that a
3360 pseudo in rhs of the init insn is not dying in the
3361 insn. Otherwise, the live info at the beginning of
3362 the corresponding BB might be wrong after we
3363 removed the insn. When the equiv can be a
3364 constant, the right hand side of the init insn can
3365 be a pseudo. */
3366 || (! ((insn = ira_reg_equiv[i].init_insns) != NULL_RTX
3367 && INSN_P (insn)
3368 && (set = single_set (insn)) != NULL_RTX
3369 && REG_P (SET_DEST (set))
3370 && (int) REGNO (SET_DEST (set)) == i)
3371 && init_insn_rhs_dead_pseudo_p (i))
3372 /* Prevent access beyond equivalent memory for
3373 paradoxical subregs. */
3374 || (MEM_P (x)
3375 && (GET_MODE_SIZE (lra_reg_info[i].biggest_mode)
3376 > GET_MODE_SIZE (GET_MODE (x)))))
3377 ira_reg_equiv[i].defined_p = false;
3378 if (contains_reg_p (x, false, true))
3379 ira_reg_equiv[i].profitable_p = false;
3380 if (get_equiv_substitution (reg) != reg)
3381 bitmap_ior_into (&equiv_insn_bitmap, &lra_reg_info[i].insn_bitmap);
3384 /* We should add all insns containing pseudos which should be
3385 substituted by their equivalences. */
3386 EXECUTE_IF_SET_IN_BITMAP (&equiv_insn_bitmap, 0, uid, bi)
3387 lra_push_insn_by_uid (uid);
3388 lra_eliminate (false);
3389 min_len = lra_insn_stack_length ();
3390 new_insns_num = 0;
3391 last_bb = NULL;
3392 changed_p = false;
3393 while ((new_min_len = lra_insn_stack_length ()) != 0)
3395 curr_insn = lra_pop_insn ();
3396 --new_min_len;
3397 curr_bb = BLOCK_FOR_INSN (curr_insn);
3398 if (curr_bb != last_bb)
3400 last_bb = curr_bb;
3401 bb_reload_num = lra_curr_reload_num;
3403 if (min_len > new_min_len)
3405 min_len = new_min_len;
3406 new_insns_num = 0;
3408 if (new_insns_num > MAX_RELOAD_INSNS_NUMBER)
3409 internal_error
3410 ("Max. number of generated reload insns per insn is achieved (%d)\n",
3411 MAX_RELOAD_INSNS_NUMBER);
3412 new_insns_num++;
3413 if (DEBUG_INSN_P (curr_insn))
3415 /* We need to check equivalence in debug insn and change
3416 pseudo to the equivalent value if necessary. */
3417 curr_id = lra_get_insn_recog_data (curr_insn);
3418 if (bitmap_bit_p (&equiv_insn_bitmap, INSN_UID (curr_insn))
3419 && loc_equivalence_change_p (curr_id->operand_loc[0]))
3421 lra_update_insn_regno_info (curr_insn);
3422 changed_p = true;
3425 else if (INSN_P (curr_insn))
3427 if ((set = single_set (curr_insn)) != NULL_RTX)
3429 dest_reg = SET_DEST (set);
3430 /* The equivalence pseudo could be set up as SUBREG in a
3431 case when it is a call restore insn in a mode
3432 different from the pseudo mode. */
3433 if (GET_CODE (dest_reg) == SUBREG)
3434 dest_reg = SUBREG_REG (dest_reg);
3435 if ((REG_P (dest_reg)
3436 && (x = get_equiv_substitution (dest_reg)) != dest_reg
3437 /* Remove insns which set up a pseudo whose value
3438 can not be changed. Such insns might be not in
3439 init_insns because we don't update equiv data
3440 during insn transformations.
3442 As an example, let suppose that a pseudo got
3443 hard register and on the 1st pass was not
3444 changed to equivalent constant. We generate an
3445 additional insn setting up the pseudo because of
3446 secondary memory movement. Then the pseudo is
3447 spilled and we use the equiv constant. In this
3448 case we should remove the additional insn and
3449 this insn is not init_insns list. */
3450 && (! MEM_P (x) || MEM_READONLY_P (x)
3451 || in_list_p (curr_insn,
3452 ira_reg_equiv
3453 [REGNO (dest_reg)].init_insns)))
3454 || (((x = get_equiv_substitution (SET_SRC (set)))
3455 != SET_SRC (set))
3456 && in_list_p (curr_insn,
3457 ira_reg_equiv
3458 [REGNO (SET_SRC (set))].init_insns)))
3460 /* This is equiv init insn of pseudo which did not get a
3461 hard register -- remove the insn. */
3462 if (lra_dump_file != NULL)
3464 fprintf (lra_dump_file,
3465 " Removing equiv init insn %i (freq=%d)\n",
3466 INSN_UID (curr_insn),
3467 BLOCK_FOR_INSN (curr_insn)->frequency);
3468 debug_rtl_slim (lra_dump_file,
3469 curr_insn, curr_insn, -1, 0);
3471 if (contains_reg_p (x, true, false))
3472 lra_risky_transformations_p = true;
3473 lra_set_insn_deleted (curr_insn);
3474 continue;
3477 curr_id = lra_get_insn_recog_data (curr_insn);
3478 curr_static_id = curr_id->insn_static_data;
3479 init_curr_insn_input_reloads ();
3480 init_curr_operand_mode ();
3481 if (curr_insn_transform ())
3482 changed_p = true;
3483 /* Check non-transformed insns too for equiv change as USE
3484 or CLOBBER don't need reloads but can contain pseudos
3485 being changed on their equivalences. */
3486 else if (bitmap_bit_p (&equiv_insn_bitmap, INSN_UID (curr_insn))
3487 && loc_equivalence_change_p (&PATTERN (curr_insn)))
3489 lra_update_insn_regno_info (curr_insn);
3490 changed_p = true;
3494 bitmap_clear (&equiv_insn_bitmap);
3495 /* If we used a new hard regno, changed_p should be true because the
3496 hard reg is assigned to a new pseudo. */
3497 #ifdef ENABLE_CHECKING
3498 if (! changed_p)
3500 for (i = FIRST_PSEUDO_REGISTER; i < new_regno_start; i++)
3501 if (lra_reg_info[i].nrefs != 0
3502 && (hard_regno = lra_get_regno_hard_regno (i)) >= 0)
3504 int j, nregs = hard_regno_nregs[hard_regno][PSEUDO_REGNO_MODE (i)];
3506 for (j = 0; j < nregs; j++)
3507 lra_assert (df_regs_ever_live_p (hard_regno + j));
3510 #endif
3511 return changed_p;
3514 /* Initiate the LRA constraint pass. It is done once per
3515 function. */
3516 void
3517 lra_constraints_init (void)
3521 /* Finalize the LRA constraint pass. It is done once per
3522 function. */
3523 void
3524 lra_constraints_finish (void)
3530 /* This page contains code to do inheritance/split
3531 transformations. */
3533 /* Number of reloads passed so far in current EBB. */
3534 static int reloads_num;
3536 /* Number of calls passed so far in current EBB. */
3537 static int calls_num;
3539 /* Current reload pseudo check for validity of elements in
3540 USAGE_INSNS. */
3541 static int curr_usage_insns_check;
3543 /* Info about last usage of registers in EBB to do inheritance/split
3544 transformation. Inheritance transformation is done from a spilled
3545 pseudo and split transformations from a hard register or a pseudo
3546 assigned to a hard register. */
3547 struct usage_insns
3549 /* If the value is equal to CURR_USAGE_INSNS_CHECK, then the member
3550 value INSNS is valid. The insns is chain of optional debug insns
3551 and a finishing non-debug insn using the corresponding reg. */
3552 int check;
3553 /* Value of global reloads_num at the last insn in INSNS. */
3554 int reloads_num;
3555 /* Value of global reloads_nums at the last insn in INSNS. */
3556 int calls_num;
3557 /* It can be true only for splitting. And it means that the restore
3558 insn should be put after insn given by the following member. */
3559 bool after_p;
3560 /* Next insns in the current EBB which use the original reg and the
3561 original reg value is not changed between the current insn and
3562 the next insns. In order words, e.g. for inheritance, if we need
3563 to use the original reg value again in the next insns we can try
3564 to use the value in a hard register from a reload insn of the
3565 current insn. */
3566 rtx insns;
3569 /* Map: regno -> corresponding pseudo usage insns. */
3570 static struct usage_insns *usage_insns;
3572 static void
3573 setup_next_usage_insn (int regno, rtx insn, int reloads_num, bool after_p)
3575 usage_insns[regno].check = curr_usage_insns_check;
3576 usage_insns[regno].insns = insn;
3577 usage_insns[regno].reloads_num = reloads_num;
3578 usage_insns[regno].calls_num = calls_num;
3579 usage_insns[regno].after_p = after_p;
3582 /* The function is used to form list REGNO usages which consists of
3583 optional debug insns finished by a non-debug insn using REGNO.
3584 RELOADS_NUM is current number of reload insns processed so far. */
3585 static void
3586 add_next_usage_insn (int regno, rtx insn, int reloads_num)
3588 rtx next_usage_insns;
3590 if (usage_insns[regno].check == curr_usage_insns_check
3591 && (next_usage_insns = usage_insns[regno].insns) != NULL_RTX
3592 && DEBUG_INSN_P (insn))
3594 /* Check that we did not add the debug insn yet. */
3595 if (next_usage_insns != insn
3596 && (GET_CODE (next_usage_insns) != INSN_LIST
3597 || XEXP (next_usage_insns, 0) != insn))
3598 usage_insns[regno].insns = gen_rtx_INSN_LIST (VOIDmode, insn,
3599 next_usage_insns);
3601 else if (NONDEBUG_INSN_P (insn))
3602 setup_next_usage_insn (regno, insn, reloads_num, false);
3603 else
3604 usage_insns[regno].check = 0;
3607 /* Replace all references to register OLD_REGNO in *LOC with pseudo
3608 register NEW_REG. Return true if any change was made. */
3609 static bool
3610 substitute_pseudo (rtx *loc, int old_regno, rtx new_reg)
3612 rtx x = *loc;
3613 bool result = false;
3614 enum rtx_code code;
3615 const char *fmt;
3616 int i, j;
3618 if (x == NULL_RTX)
3619 return false;
3621 code = GET_CODE (x);
3622 if (code == REG && (int) REGNO (x) == old_regno)
3624 enum machine_mode mode = GET_MODE (*loc);
3625 enum machine_mode inner_mode = GET_MODE (new_reg);
3627 if (mode != inner_mode)
3629 if (GET_MODE_SIZE (mode) >= GET_MODE_SIZE (inner_mode)
3630 || ! SCALAR_INT_MODE_P (inner_mode))
3631 new_reg = gen_rtx_SUBREG (mode, new_reg, 0);
3632 else
3633 new_reg = gen_lowpart_SUBREG (mode, new_reg);
3635 *loc = new_reg;
3636 return true;
3639 /* Scan all the operand sub-expressions. */
3640 fmt = GET_RTX_FORMAT (code);
3641 for (i = GET_RTX_LENGTH (code) - 1; i >= 0; i--)
3643 if (fmt[i] == 'e')
3645 if (substitute_pseudo (&XEXP (x, i), old_regno, new_reg))
3646 result = true;
3648 else if (fmt[i] == 'E')
3650 for (j = XVECLEN (x, i) - 1; j >= 0; j--)
3651 if (substitute_pseudo (&XVECEXP (x, i, j), old_regno, new_reg))
3652 result = true;
3655 return result;
3658 /* Return first non-debug insn in list USAGE_INSNS. */
3659 static rtx
3660 skip_usage_debug_insns (rtx usage_insns)
3662 rtx insn;
3664 /* Skip debug insns. */
3665 for (insn = usage_insns;
3666 insn != NULL_RTX && GET_CODE (insn) == INSN_LIST;
3667 insn = XEXP (insn, 1))
3669 return insn;
3672 /* Return true if we need secondary memory moves for insn in
3673 USAGE_INSNS after inserting inherited pseudo of class INHER_CL
3674 into the insn. */
3675 static bool
3676 check_secondary_memory_needed_p (enum reg_class inher_cl ATTRIBUTE_UNUSED,
3677 rtx usage_insns ATTRIBUTE_UNUSED)
3679 #ifndef SECONDARY_MEMORY_NEEDED
3680 return false;
3681 #else
3682 rtx insn, set, dest;
3683 enum reg_class cl;
3685 if (inher_cl == ALL_REGS
3686 || (insn = skip_usage_debug_insns (usage_insns)) == NULL_RTX)
3687 return false;
3688 lra_assert (INSN_P (insn));
3689 if ((set = single_set (insn)) == NULL_RTX || ! REG_P (SET_DEST (set)))
3690 return false;
3691 dest = SET_DEST (set);
3692 if (! REG_P (dest))
3693 return false;
3694 lra_assert (inher_cl != NO_REGS);
3695 cl = get_reg_class (REGNO (dest));
3696 return (cl != NO_REGS && cl != ALL_REGS
3697 && SECONDARY_MEMORY_NEEDED (inher_cl, cl, GET_MODE (dest)));
3698 #endif
3701 /* Registers involved in inheritance/split in the current EBB
3702 (inheritance/split pseudos and original registers). */
3703 static bitmap_head check_only_regs;
3705 /* Do inheritance transformations for insn INSN, which defines (if
3706 DEF_P) or uses ORIGINAL_REGNO. NEXT_USAGE_INSNS specifies which
3707 instruction in the EBB next uses ORIGINAL_REGNO; it has the same
3708 form as the "insns" field of usage_insns. Return true if we
3709 succeed in such transformation.
3711 The transformations look like:
3713 p <- ... i <- ...
3714 ... p <- i (new insn)
3715 ... =>
3716 <- ... p ... <- ... i ...
3718 ... i <- p (new insn)
3719 <- ... p ... <- ... i ...
3720 ... =>
3721 <- ... p ... <- ... i ...
3722 where p is a spilled original pseudo and i is a new inheritance pseudo.
3725 The inheritance pseudo has the smallest class of two classes CL and
3726 class of ORIGINAL REGNO. */
3727 static bool
3728 inherit_reload_reg (bool def_p, int original_regno,
3729 enum reg_class cl, rtx insn, rtx next_usage_insns)
3731 enum reg_class rclass = lra_get_allocno_class (original_regno);
3732 rtx original_reg = regno_reg_rtx[original_regno];
3733 rtx new_reg, new_insns, usage_insn;
3735 lra_assert (! usage_insns[original_regno].after_p);
3736 if (lra_dump_file != NULL)
3737 fprintf (lra_dump_file,
3738 " <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<\n");
3739 if (! ira_reg_classes_intersect_p[cl][rclass])
3741 if (lra_dump_file != NULL)
3743 fprintf (lra_dump_file,
3744 " Rejecting inheritance for %d "
3745 "because of disjoint classes %s and %s\n",
3746 original_regno, reg_class_names[cl],
3747 reg_class_names[rclass]);
3748 fprintf (lra_dump_file,
3749 " >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>\n");
3751 return false;
3753 if ((ira_class_subset_p[cl][rclass] && cl != rclass)
3754 /* We don't use a subset of two classes because it can be
3755 NO_REGS. This transformation is still profitable in most
3756 cases even if the classes are not intersected as register
3757 move is probably cheaper than a memory load. */
3758 || ira_class_hard_regs_num[cl] < ira_class_hard_regs_num[rclass])
3760 if (lra_dump_file != NULL)
3761 fprintf (lra_dump_file, " Use smallest class of %s and %s\n",
3762 reg_class_names[cl], reg_class_names[rclass]);
3764 rclass = cl;
3766 if (check_secondary_memory_needed_p (cl, next_usage_insns))
3768 /* Reject inheritance resulting in secondary memory moves.
3769 Otherwise, there is a danger in LRA cycling. Also such
3770 transformation will be unprofitable. */
3771 if (lra_dump_file != NULL)
3773 rtx insn = skip_usage_debug_insns (next_usage_insns);
3774 rtx set = single_set (insn);
3776 lra_assert (set != NULL_RTX);
3778 rtx dest = SET_DEST (set);
3780 lra_assert (REG_P (dest));
3781 fprintf (lra_dump_file,
3782 " Rejecting inheritance for insn %d(%s)<-%d(%s) "
3783 "as secondary mem is needed\n",
3784 REGNO (dest), reg_class_names[get_reg_class (REGNO (dest))],
3785 original_regno, reg_class_names[cl]);
3786 fprintf (lra_dump_file,
3787 " >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>\n");
3789 return false;
3791 new_reg = lra_create_new_reg (GET_MODE (original_reg), original_reg,
3792 rclass, "inheritance");
3793 start_sequence ();
3794 if (def_p)
3795 emit_move_insn (original_reg, new_reg);
3796 else
3797 emit_move_insn (new_reg, original_reg);
3798 new_insns = get_insns ();
3799 end_sequence ();
3800 if (NEXT_INSN (new_insns) != NULL_RTX)
3802 if (lra_dump_file != NULL)
3804 fprintf (lra_dump_file,
3805 " Rejecting inheritance %d->%d "
3806 "as it results in 2 or more insns:\n",
3807 original_regno, REGNO (new_reg));
3808 debug_rtl_slim (lra_dump_file, new_insns, NULL_RTX, -1, 0);
3809 fprintf (lra_dump_file,
3810 " >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>\n");
3812 return false;
3814 substitute_pseudo (&insn, original_regno, new_reg);
3815 lra_update_insn_regno_info (insn);
3816 if (! def_p)
3817 /* We now have a new usage insn for original regno. */
3818 setup_next_usage_insn (original_regno, new_insns, reloads_num, false);
3819 if (lra_dump_file != NULL)
3820 fprintf (lra_dump_file, " Original reg change %d->%d (bb%d):\n",
3821 original_regno, REGNO (new_reg), BLOCK_FOR_INSN (insn)->index);
3822 lra_reg_info[REGNO (new_reg)].restore_regno = original_regno;
3823 bitmap_set_bit (&check_only_regs, REGNO (new_reg));
3824 bitmap_set_bit (&check_only_regs, original_regno);
3825 bitmap_set_bit (&lra_inheritance_pseudos, REGNO (new_reg));
3826 if (def_p)
3827 lra_process_new_insns (insn, NULL_RTX, new_insns,
3828 "Add original<-inheritance");
3829 else
3830 lra_process_new_insns (insn, new_insns, NULL_RTX,
3831 "Add inheritance<-original");
3832 while (next_usage_insns != NULL_RTX)
3834 if (GET_CODE (next_usage_insns) != INSN_LIST)
3836 usage_insn = next_usage_insns;
3837 lra_assert (NONDEBUG_INSN_P (usage_insn));
3838 next_usage_insns = NULL;
3840 else
3842 usage_insn = XEXP (next_usage_insns, 0);
3843 lra_assert (DEBUG_INSN_P (usage_insn));
3844 next_usage_insns = XEXP (next_usage_insns, 1);
3846 substitute_pseudo (&usage_insn, original_regno, new_reg);
3847 lra_update_insn_regno_info (usage_insn);
3848 if (lra_dump_file != NULL)
3850 fprintf (lra_dump_file,
3851 " Inheritance reuse change %d->%d (bb%d):\n",
3852 original_regno, REGNO (new_reg),
3853 BLOCK_FOR_INSN (usage_insn)->index);
3854 debug_rtl_slim (lra_dump_file, usage_insn, usage_insn,
3855 -1, 0);
3858 if (lra_dump_file != NULL)
3859 fprintf (lra_dump_file,
3860 " >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>\n");
3861 return true;
3864 /* Return true if we need a caller save/restore for pseudo REGNO which
3865 was assigned to a hard register. */
3866 static inline bool
3867 need_for_call_save_p (int regno)
3869 lra_assert (regno >= FIRST_PSEUDO_REGISTER && reg_renumber[regno] >= 0);
3870 return (usage_insns[regno].calls_num < calls_num
3871 && (overlaps_hard_reg_set_p
3872 (call_used_reg_set,
3873 PSEUDO_REGNO_MODE (regno), reg_renumber[regno])));
3876 /* Global registers occuring in the current EBB. */
3877 static bitmap_head ebb_global_regs;
3879 /* Return true if we need a split for hard register REGNO or pseudo
3880 REGNO which was assigned to a hard register.
3881 POTENTIAL_RELOAD_HARD_REGS contains hard registers which might be
3882 used for reloads since the EBB end. It is an approximation of the
3883 used hard registers in the split range. The exact value would
3884 require expensive calculations. If we were aggressive with
3885 splitting because of the approximation, the split pseudo will save
3886 the same hard register assignment and will be removed in the undo
3887 pass. We still need the approximation because too aggressive
3888 splitting would result in too inaccurate cost calculation in the
3889 assignment pass because of too many generated moves which will be
3890 probably removed in the undo pass. */
3891 static inline bool
3892 need_for_split_p (HARD_REG_SET potential_reload_hard_regs, int regno)
3894 int hard_regno = regno < FIRST_PSEUDO_REGISTER ? regno : reg_renumber[regno];
3896 lra_assert (hard_regno >= 0);
3897 return ((TEST_HARD_REG_BIT (potential_reload_hard_regs, hard_regno)
3898 /* Don't split eliminable hard registers, otherwise we can
3899 split hard registers like hard frame pointer, which
3900 lives on BB start/end according to DF-infrastructure,
3901 when there is a pseudo assigned to the register and
3902 living in the same BB. */
3903 && (regno >= FIRST_PSEUDO_REGISTER
3904 || ! TEST_HARD_REG_BIT (eliminable_regset, hard_regno))
3905 && ! TEST_HARD_REG_BIT (lra_no_alloc_regs, hard_regno)
3906 /* We need at least 2 reloads to make pseudo splitting
3907 profitable. We should provide hard regno splitting in
3908 any case to solve 1st insn scheduling problem when
3909 moving hard register definition up might result in
3910 impossibility to find hard register for reload pseudo of
3911 small register class. */
3912 && (usage_insns[regno].reloads_num
3913 + (regno < FIRST_PSEUDO_REGISTER ? 0 : 2) < reloads_num)
3914 && (regno < FIRST_PSEUDO_REGISTER
3915 /* For short living pseudos, spilling + inheritance can
3916 be considered a substitution for splitting.
3917 Therefore we do not splitting for local pseudos. It
3918 decreases also aggressiveness of splitting. The
3919 minimal number of references is chosen taking into
3920 account that for 2 references splitting has no sense
3921 as we can just spill the pseudo. */
3922 || (regno >= FIRST_PSEUDO_REGISTER
3923 && lra_reg_info[regno].nrefs > 3
3924 && bitmap_bit_p (&ebb_global_regs, regno))))
3925 || (regno >= FIRST_PSEUDO_REGISTER && need_for_call_save_p (regno)));
3928 /* Return class for the split pseudo created from original pseudo with
3929 ALLOCNO_CLASS and MODE which got a hard register HARD_REGNO. We
3930 choose subclass of ALLOCNO_CLASS which contains HARD_REGNO and
3931 results in no secondary memory movements. */
3932 static enum reg_class
3933 choose_split_class (enum reg_class allocno_class,
3934 int hard_regno ATTRIBUTE_UNUSED,
3935 enum machine_mode mode ATTRIBUTE_UNUSED)
3937 #ifndef SECONDARY_MEMORY_NEEDED
3938 return allocno_class;
3939 #else
3940 int i;
3941 enum reg_class cl, best_cl = NO_REGS;
3942 enum reg_class hard_reg_class ATTRIBUTE_UNUSED
3943 = REGNO_REG_CLASS (hard_regno);
3945 if (! SECONDARY_MEMORY_NEEDED (allocno_class, allocno_class, mode)
3946 && TEST_HARD_REG_BIT (reg_class_contents[allocno_class], hard_regno))
3947 return allocno_class;
3948 for (i = 0;
3949 (cl = reg_class_subclasses[allocno_class][i]) != LIM_REG_CLASSES;
3950 i++)
3951 if (! SECONDARY_MEMORY_NEEDED (cl, hard_reg_class, mode)
3952 && ! SECONDARY_MEMORY_NEEDED (hard_reg_class, cl, mode)
3953 && TEST_HARD_REG_BIT (reg_class_contents[cl], hard_regno)
3954 && (best_cl == NO_REGS
3955 || ira_class_hard_regs_num[best_cl] < ira_class_hard_regs_num[cl]))
3956 best_cl = cl;
3957 return best_cl;
3958 #endif
3961 /* Do split transformations for insn INSN, which defines or uses
3962 ORIGINAL_REGNO. NEXT_USAGE_INSNS specifies which instruction in
3963 the EBB next uses ORIGINAL_REGNO; it has the same form as the
3964 "insns" field of usage_insns.
3966 The transformations look like:
3968 p <- ... p <- ...
3969 ... s <- p (new insn -- save)
3970 ... =>
3971 ... p <- s (new insn -- restore)
3972 <- ... p ... <- ... p ...
3974 <- ... p ... <- ... p ...
3975 ... s <- p (new insn -- save)
3976 ... =>
3977 ... p <- s (new insn -- restore)
3978 <- ... p ... <- ... p ...
3980 where p is an original pseudo got a hard register or a hard
3981 register and s is a new split pseudo. The save is put before INSN
3982 if BEFORE_P is true. Return true if we succeed in such
3983 transformation. */
3984 static bool
3985 split_reg (bool before_p, int original_regno, rtx insn, rtx next_usage_insns)
3987 enum reg_class rclass;
3988 rtx original_reg;
3989 int hard_regno;
3990 rtx new_reg, save, restore, usage_insn;
3991 bool after_p;
3992 bool call_save_p;
3994 if (original_regno < FIRST_PSEUDO_REGISTER)
3996 rclass = ira_allocno_class_translate[REGNO_REG_CLASS (original_regno)];
3997 hard_regno = original_regno;
3998 call_save_p = false;
4000 else
4002 hard_regno = reg_renumber[original_regno];
4003 rclass = lra_get_allocno_class (original_regno);
4004 original_reg = regno_reg_rtx[original_regno];
4005 call_save_p = need_for_call_save_p (original_regno);
4007 original_reg = regno_reg_rtx[original_regno];
4008 lra_assert (hard_regno >= 0);
4009 if (lra_dump_file != NULL)
4010 fprintf (lra_dump_file,
4011 " ((((((((((((((((((((((((((((((((((((((((((((((((\n");
4012 if (call_save_p)
4014 enum machine_mode sec_mode;
4016 #ifdef SECONDARY_MEMORY_NEEDED_MODE
4017 sec_mode = SECONDARY_MEMORY_NEEDED_MODE (GET_MODE (original_reg));
4018 #else
4019 sec_mode = GET_MODE (original_reg);
4020 #endif
4021 new_reg = lra_create_new_reg (sec_mode, NULL_RTX,
4022 NO_REGS, "save");
4024 else
4026 rclass = choose_split_class (rclass, hard_regno,
4027 GET_MODE (original_reg));
4028 if (rclass == NO_REGS)
4030 if (lra_dump_file != NULL)
4032 fprintf (lra_dump_file,
4033 " Rejecting split of %d(%s): "
4034 "no good reg class for %d(%s)\n",
4035 original_regno,
4036 reg_class_names[lra_get_allocno_class (original_regno)],
4037 hard_regno,
4038 reg_class_names[REGNO_REG_CLASS (hard_regno)]);
4039 fprintf
4040 (lra_dump_file,
4041 " ))))))))))))))))))))))))))))))))))))))))))))))))\n");
4043 return false;
4045 new_reg = lra_create_new_reg (GET_MODE (original_reg), original_reg,
4046 rclass, "split");
4047 reg_renumber[REGNO (new_reg)] = hard_regno;
4049 save = emit_spill_move (true, new_reg, original_reg);
4050 if (NEXT_INSN (save) != NULL_RTX)
4052 lra_assert (! call_save_p);
4053 if (lra_dump_file != NULL)
4055 fprintf
4056 (lra_dump_file,
4057 " Rejecting split %d->%d resulting in > 2 %s save insns:\n",
4058 original_regno, REGNO (new_reg), call_save_p ? "call" : "");
4059 debug_rtl_slim (lra_dump_file, save, NULL_RTX, -1, 0);
4060 fprintf (lra_dump_file,
4061 " ))))))))))))))))))))))))))))))))))))))))))))))))\n");
4063 return false;
4065 restore = emit_spill_move (false, new_reg, original_reg);
4066 if (NEXT_INSN (restore) != NULL_RTX)
4068 lra_assert (! call_save_p);
4069 if (lra_dump_file != NULL)
4071 fprintf (lra_dump_file,
4072 " Rejecting split %d->%d "
4073 "resulting in > 2 %s restore insns:\n",
4074 original_regno, REGNO (new_reg), call_save_p ? "call" : "");
4075 debug_rtl_slim (lra_dump_file, restore, NULL_RTX, -1, 0);
4076 fprintf (lra_dump_file,
4077 " ))))))))))))))))))))))))))))))))))))))))))))))))\n");
4079 return false;
4081 after_p = usage_insns[original_regno].after_p;
4082 lra_reg_info[REGNO (new_reg)].restore_regno = original_regno;
4083 bitmap_set_bit (&check_only_regs, REGNO (new_reg));
4084 bitmap_set_bit (&check_only_regs, original_regno);
4085 bitmap_set_bit (&lra_split_regs, REGNO (new_reg));
4086 for (;;)
4088 if (GET_CODE (next_usage_insns) != INSN_LIST)
4090 usage_insn = next_usage_insns;
4091 break;
4093 usage_insn = XEXP (next_usage_insns, 0);
4094 lra_assert (DEBUG_INSN_P (usage_insn));
4095 next_usage_insns = XEXP (next_usage_insns, 1);
4096 substitute_pseudo (&usage_insn, original_regno, new_reg);
4097 lra_update_insn_regno_info (usage_insn);
4098 if (lra_dump_file != NULL)
4100 fprintf (lra_dump_file, " Split reuse change %d->%d:\n",
4101 original_regno, REGNO (new_reg));
4102 debug_rtl_slim (lra_dump_file, usage_insn, usage_insn,
4103 -1, 0);
4106 lra_assert (NOTE_P (usage_insn) || NONDEBUG_INSN_P (usage_insn));
4107 lra_assert (usage_insn != insn || (after_p && before_p));
4108 lra_process_new_insns (usage_insn, after_p ? NULL_RTX : restore,
4109 after_p ? restore : NULL_RTX,
4110 call_save_p
4111 ? "Add reg<-save" : "Add reg<-split");
4112 lra_process_new_insns (insn, before_p ? save : NULL_RTX,
4113 before_p ? NULL_RTX : save,
4114 call_save_p
4115 ? "Add save<-reg" : "Add split<-reg");
4116 if (lra_dump_file != NULL)
4117 fprintf (lra_dump_file,
4118 " ))))))))))))))))))))))))))))))))))))))))))))))))\n");
4119 return true;
4122 /* Recognize that we need a split transformation for insn INSN, which
4123 defines or uses REGNO in its insn biggest MODE (we use it only if
4124 REGNO is a hard register). POTENTIAL_RELOAD_HARD_REGS contains
4125 hard registers which might be used for reloads since the EBB end.
4126 Put the save before INSN if BEFORE_P is true. MAX_UID is maximla
4127 uid before starting INSN processing. Return true if we succeed in
4128 such transformation. */
4129 static bool
4130 split_if_necessary (int regno, enum machine_mode mode,
4131 HARD_REG_SET potential_reload_hard_regs,
4132 bool before_p, rtx insn, int max_uid)
4134 bool res = false;
4135 int i, nregs = 1;
4136 rtx next_usage_insns;
4138 if (regno < FIRST_PSEUDO_REGISTER)
4139 nregs = hard_regno_nregs[regno][mode];
4140 for (i = 0; i < nregs; i++)
4141 if (usage_insns[regno + i].check == curr_usage_insns_check
4142 && (next_usage_insns = usage_insns[regno + i].insns) != NULL_RTX
4143 /* To avoid processing the register twice or more. */
4144 && ((GET_CODE (next_usage_insns) != INSN_LIST
4145 && INSN_UID (next_usage_insns) < max_uid)
4146 || (GET_CODE (next_usage_insns) == INSN_LIST
4147 && (INSN_UID (XEXP (next_usage_insns, 0)) < max_uid)))
4148 && need_for_split_p (potential_reload_hard_regs, regno + i)
4149 && split_reg (before_p, regno + i, insn, next_usage_insns))
4150 res = true;
4151 return res;
4154 /* Check only registers living at the current program point in the
4155 current EBB. */
4156 static bitmap_head live_regs;
4158 /* Update live info in EBB given by its HEAD and TAIL insns after
4159 inheritance/split transformation. The function removes dead moves
4160 too. */
4161 static void
4162 update_ebb_live_info (rtx head, rtx tail)
4164 unsigned int j;
4165 int regno;
4166 bool live_p;
4167 rtx prev_insn, set;
4168 bool remove_p;
4169 basic_block last_bb, prev_bb, curr_bb;
4170 bitmap_iterator bi;
4171 struct lra_insn_reg *reg;
4172 edge e;
4173 edge_iterator ei;
4175 last_bb = BLOCK_FOR_INSN (tail);
4176 prev_bb = NULL;
4177 for (curr_insn = tail;
4178 curr_insn != PREV_INSN (head);
4179 curr_insn = prev_insn)
4181 prev_insn = PREV_INSN (curr_insn);
4182 /* We need to process empty blocks too. They contain
4183 NOTE_INSN_BASIC_BLOCK referring for the basic block. */
4184 if (NOTE_P (curr_insn) && NOTE_KIND (curr_insn) != NOTE_INSN_BASIC_BLOCK)
4185 continue;
4186 curr_bb = BLOCK_FOR_INSN (curr_insn);
4187 if (curr_bb != prev_bb)
4189 if (prev_bb != NULL)
4191 /* Update df_get_live_in (prev_bb): */
4192 EXECUTE_IF_SET_IN_BITMAP (&check_only_regs, 0, j, bi)
4193 if (bitmap_bit_p (&live_regs, j))
4194 bitmap_set_bit (df_get_live_in (prev_bb), j);
4195 else
4196 bitmap_clear_bit (df_get_live_in (prev_bb), j);
4198 if (curr_bb != last_bb)
4200 /* Update df_get_live_out (curr_bb): */
4201 EXECUTE_IF_SET_IN_BITMAP (&check_only_regs, 0, j, bi)
4203 live_p = bitmap_bit_p (&live_regs, j);
4204 if (! live_p)
4205 FOR_EACH_EDGE (e, ei, curr_bb->succs)
4206 if (bitmap_bit_p (df_get_live_in (e->dest), j))
4208 live_p = true;
4209 break;
4211 if (live_p)
4212 bitmap_set_bit (df_get_live_out (curr_bb), j);
4213 else
4214 bitmap_clear_bit (df_get_live_out (curr_bb), j);
4217 prev_bb = curr_bb;
4218 bitmap_and (&live_regs, &check_only_regs, df_get_live_out (curr_bb));
4220 if (! NONDEBUG_INSN_P (curr_insn))
4221 continue;
4222 curr_id = lra_get_insn_recog_data (curr_insn);
4223 remove_p = false;
4224 if ((set = single_set (curr_insn)) != NULL_RTX && REG_P (SET_DEST (set))
4225 && (regno = REGNO (SET_DEST (set))) >= FIRST_PSEUDO_REGISTER
4226 && bitmap_bit_p (&check_only_regs, regno)
4227 && ! bitmap_bit_p (&live_regs, regno))
4228 remove_p = true;
4229 /* See which defined values die here. */
4230 for (reg = curr_id->regs; reg != NULL; reg = reg->next)
4231 if (reg->type == OP_OUT && ! reg->subreg_p)
4232 bitmap_clear_bit (&live_regs, reg->regno);
4233 /* Mark each used value as live. */
4234 for (reg = curr_id->regs; reg != NULL; reg = reg->next)
4235 if (reg->type == OP_IN
4236 && bitmap_bit_p (&check_only_regs, reg->regno))
4237 bitmap_set_bit (&live_regs, reg->regno);
4238 /* It is quite important to remove dead move insns because it
4239 means removing dead store. We don't need to process them for
4240 constraints. */
4241 if (remove_p)
4243 if (lra_dump_file != NULL)
4245 fprintf (lra_dump_file, " Removing dead insn:\n ");
4246 debug_rtl_slim (lra_dump_file, curr_insn, curr_insn, -1, 0);
4248 lra_set_insn_deleted (curr_insn);
4253 /* The structure describes info to do an inheritance for the current
4254 insn. We need to collect such info first before doing the
4255 transformations because the transformations change the insn
4256 internal representation. */
4257 struct to_inherit
4259 /* Original regno. */
4260 int regno;
4261 /* Subsequent insns which can inherit original reg value. */
4262 rtx insns;
4265 /* Array containing all info for doing inheritance from the current
4266 insn. */
4267 static struct to_inherit to_inherit[LRA_MAX_INSN_RELOADS];
4269 /* Number elements in the previous array. */
4270 static int to_inherit_num;
4272 /* Add inheritance info REGNO and INSNS. Their meaning is described in
4273 structure to_inherit. */
4274 static void
4275 add_to_inherit (int regno, rtx insns)
4277 int i;
4279 for (i = 0; i < to_inherit_num; i++)
4280 if (to_inherit[i].regno == regno)
4281 return;
4282 lra_assert (to_inherit_num < LRA_MAX_INSN_RELOADS);
4283 to_inherit[to_inherit_num].regno = regno;
4284 to_inherit[to_inherit_num++].insns = insns;
4287 /* Return the last non-debug insn in basic block BB, or the block begin
4288 note if none. */
4289 static rtx
4290 get_last_insertion_point (basic_block bb)
4292 rtx insn;
4294 FOR_BB_INSNS_REVERSE (bb, insn)
4295 if (NONDEBUG_INSN_P (insn) || NOTE_INSN_BASIC_BLOCK_P (insn))
4296 return insn;
4297 gcc_unreachable ();
4300 /* Set up RES by registers living on edges FROM except the edge (FROM,
4301 TO) or by registers set up in a jump insn in BB FROM. */
4302 static void
4303 get_live_on_other_edges (basic_block from, basic_block to, bitmap res)
4305 rtx last;
4306 struct lra_insn_reg *reg;
4307 edge e;
4308 edge_iterator ei;
4310 lra_assert (to != NULL);
4311 bitmap_clear (res);
4312 FOR_EACH_EDGE (e, ei, from->succs)
4313 if (e->dest != to)
4314 bitmap_ior_into (res, df_get_live_in (e->dest));
4315 last = get_last_insertion_point (from);
4316 if (! JUMP_P (last))
4317 return;
4318 curr_id = lra_get_insn_recog_data (last);
4319 for (reg = curr_id->regs; reg != NULL; reg = reg->next)
4320 if (reg->type != OP_IN)
4321 bitmap_set_bit (res, reg->regno);
4324 /* Used as a temporary results of some bitmap calculations. */
4325 static bitmap_head temp_bitmap;
4327 /* Do inheritance/split transformations in EBB starting with HEAD and
4328 finishing on TAIL. We process EBB insns in the reverse order.
4329 Return true if we did any inheritance/split transformation in the
4330 EBB.
4332 We should avoid excessive splitting which results in worse code
4333 because of inaccurate cost calculations for spilling new split
4334 pseudos in such case. To achieve this we do splitting only if
4335 register pressure is high in given basic block and there are reload
4336 pseudos requiring hard registers. We could do more register
4337 pressure calculations at any given program point to avoid necessary
4338 splitting even more but it is to expensive and the current approach
4339 works well enough. */
4340 static bool
4341 inherit_in_ebb (rtx head, rtx tail)
4343 int i, src_regno, dst_regno, nregs;
4344 bool change_p, succ_p;
4345 rtx prev_insn, next_usage_insns, set, last_insn;
4346 enum reg_class cl;
4347 struct lra_insn_reg *reg;
4348 basic_block last_processed_bb, curr_bb = NULL;
4349 HARD_REG_SET potential_reload_hard_regs, live_hard_regs;
4350 bitmap to_process;
4351 unsigned int j;
4352 bitmap_iterator bi;
4353 bool head_p, after_p;
4355 change_p = false;
4356 curr_usage_insns_check++;
4357 reloads_num = calls_num = 0;
4358 bitmap_clear (&check_only_regs);
4359 last_processed_bb = NULL;
4360 CLEAR_HARD_REG_SET (potential_reload_hard_regs);
4361 CLEAR_HARD_REG_SET (live_hard_regs);
4362 /* We don't process new insns generated in the loop. */
4363 for (curr_insn = tail; curr_insn != PREV_INSN (head); curr_insn = prev_insn)
4365 prev_insn = PREV_INSN (curr_insn);
4366 if (BLOCK_FOR_INSN (curr_insn) != NULL)
4367 curr_bb = BLOCK_FOR_INSN (curr_insn);
4368 if (last_processed_bb != curr_bb)
4370 /* We are at the end of BB. Add qualified living
4371 pseudos for potential splitting. */
4372 to_process = df_get_live_out (curr_bb);
4373 if (last_processed_bb != NULL)
4375 /* We are somewhere in the middle of EBB. */
4376 get_live_on_other_edges (curr_bb, last_processed_bb,
4377 &temp_bitmap);
4378 to_process = &temp_bitmap;
4380 last_processed_bb = curr_bb;
4381 last_insn = get_last_insertion_point (curr_bb);
4382 after_p = (! JUMP_P (last_insn)
4383 && (! CALL_P (last_insn)
4384 || (find_reg_note (last_insn,
4385 REG_NORETURN, NULL_RTX) == NULL_RTX
4386 && ! SIBLING_CALL_P (last_insn))));
4387 REG_SET_TO_HARD_REG_SET (live_hard_regs, df_get_live_out (curr_bb));
4388 IOR_HARD_REG_SET (live_hard_regs, eliminable_regset);
4389 IOR_HARD_REG_SET (live_hard_regs, lra_no_alloc_regs);
4390 CLEAR_HARD_REG_SET (potential_reload_hard_regs);
4391 EXECUTE_IF_SET_IN_BITMAP (to_process, 0, j, bi)
4393 if ((int) j >= lra_constraint_new_regno_start)
4394 break;
4395 if (j < FIRST_PSEUDO_REGISTER || reg_renumber[j] >= 0)
4397 if (j < FIRST_PSEUDO_REGISTER)
4398 SET_HARD_REG_BIT (live_hard_regs, j);
4399 else
4400 add_to_hard_reg_set (&live_hard_regs,
4401 PSEUDO_REGNO_MODE (j),
4402 reg_renumber[j]);
4403 setup_next_usage_insn (j, last_insn, reloads_num, after_p);
4407 src_regno = dst_regno = -1;
4408 if (NONDEBUG_INSN_P (curr_insn)
4409 && (set = single_set (curr_insn)) != NULL_RTX
4410 && REG_P (SET_DEST (set)) && REG_P (SET_SRC (set)))
4412 src_regno = REGNO (SET_SRC (set));
4413 dst_regno = REGNO (SET_DEST (set));
4415 if (src_regno < lra_constraint_new_regno_start
4416 && src_regno >= FIRST_PSEUDO_REGISTER
4417 && reg_renumber[src_regno] < 0
4418 && dst_regno >= lra_constraint_new_regno_start
4419 && (cl = lra_get_allocno_class (dst_regno)) != NO_REGS)
4421 /* 'reload_pseudo <- original_pseudo'. */
4422 reloads_num++;
4423 succ_p = false;
4424 if (usage_insns[src_regno].check == curr_usage_insns_check
4425 && (next_usage_insns = usage_insns[src_regno].insns) != NULL_RTX)
4426 succ_p = inherit_reload_reg (false, src_regno, cl,
4427 curr_insn, next_usage_insns);
4428 if (succ_p)
4429 change_p = true;
4430 else
4431 setup_next_usage_insn (src_regno, curr_insn, reloads_num, false);
4432 if (hard_reg_set_subset_p (reg_class_contents[cl], live_hard_regs))
4433 IOR_HARD_REG_SET (potential_reload_hard_regs,
4434 reg_class_contents[cl]);
4436 else if (src_regno >= lra_constraint_new_regno_start
4437 && dst_regno < lra_constraint_new_regno_start
4438 && dst_regno >= FIRST_PSEUDO_REGISTER
4439 && reg_renumber[dst_regno] < 0
4440 && (cl = lra_get_allocno_class (src_regno)) != NO_REGS
4441 && usage_insns[dst_regno].check == curr_usage_insns_check
4442 && (next_usage_insns
4443 = usage_insns[dst_regno].insns) != NULL_RTX)
4445 reloads_num++;
4446 /* 'original_pseudo <- reload_pseudo'. */
4447 if (! JUMP_P (curr_insn)
4448 && inherit_reload_reg (true, dst_regno, cl,
4449 curr_insn, next_usage_insns))
4450 change_p = true;
4451 /* Invalidate. */
4452 usage_insns[dst_regno].check = 0;
4453 if (hard_reg_set_subset_p (reg_class_contents[cl], live_hard_regs))
4454 IOR_HARD_REG_SET (potential_reload_hard_regs,
4455 reg_class_contents[cl]);
4457 else if (INSN_P (curr_insn))
4459 int max_uid = get_max_uid ();
4461 curr_id = lra_get_insn_recog_data (curr_insn);
4462 to_inherit_num = 0;
4463 /* Process insn definitions. */
4464 for (reg = curr_id->regs; reg != NULL; reg = reg->next)
4465 if (reg->type != OP_IN
4466 && (dst_regno = reg->regno) < lra_constraint_new_regno_start)
4468 if (dst_regno >= FIRST_PSEUDO_REGISTER && reg->type == OP_OUT
4469 && reg_renumber[dst_regno] < 0 && ! reg->subreg_p
4470 && usage_insns[dst_regno].check == curr_usage_insns_check
4471 && (next_usage_insns
4472 = usage_insns[dst_regno].insns) != NULL_RTX)
4474 struct lra_insn_reg *r;
4476 for (r = curr_id->regs; r != NULL; r = r->next)
4477 if (r->type != OP_OUT && r->regno == dst_regno)
4478 break;
4479 /* Don't do inheritance if the pseudo is also
4480 used in the insn. */
4481 if (r == NULL)
4482 /* We can not do inheritance right now
4483 because the current insn reg info (chain
4484 regs) can change after that. */
4485 add_to_inherit (dst_regno, next_usage_insns);
4487 /* We can not process one reg twice here because of
4488 usage_insns invalidation. */
4489 if ((dst_regno < FIRST_PSEUDO_REGISTER
4490 || reg_renumber[dst_regno] >= 0)
4491 && ! reg->subreg_p && reg->type == OP_OUT)
4493 HARD_REG_SET s;
4495 if (split_if_necessary (dst_regno, reg->biggest_mode,
4496 potential_reload_hard_regs,
4497 false, curr_insn, max_uid))
4498 change_p = true;
4499 CLEAR_HARD_REG_SET (s);
4500 if (dst_regno < FIRST_PSEUDO_REGISTER)
4501 add_to_hard_reg_set (&s, reg->biggest_mode, dst_regno);
4502 else
4503 add_to_hard_reg_set (&s, PSEUDO_REGNO_MODE (dst_regno),
4504 reg_renumber[dst_regno]);
4505 AND_COMPL_HARD_REG_SET (live_hard_regs, s);
4507 /* We should invalidate potential inheritance or
4508 splitting for the current insn usages to the next
4509 usage insns (see code below) as the output pseudo
4510 prevents this. */
4511 if ((dst_regno >= FIRST_PSEUDO_REGISTER
4512 && reg_renumber[dst_regno] < 0)
4513 || (reg->type == OP_OUT && ! reg->subreg_p
4514 && (dst_regno < FIRST_PSEUDO_REGISTER
4515 || reg_renumber[dst_regno] >= 0)))
4517 /* Invalidate. */
4518 if (dst_regno >= FIRST_PSEUDO_REGISTER)
4519 usage_insns[dst_regno].check = 0;
4520 else
4522 nregs = hard_regno_nregs[dst_regno][reg->biggest_mode];
4523 for (i = 0; i < nregs; i++)
4524 usage_insns[dst_regno + i].check = 0;
4528 if (! JUMP_P (curr_insn))
4529 for (i = 0; i < to_inherit_num; i++)
4530 if (inherit_reload_reg (true, to_inherit[i].regno,
4531 ALL_REGS, curr_insn,
4532 to_inherit[i].insns))
4533 change_p = true;
4534 if (CALL_P (curr_insn))
4536 rtx cheap, pat, dest, restore;
4537 int regno, hard_regno;
4539 calls_num++;
4540 if ((cheap = find_reg_note (curr_insn,
4541 REG_RETURNED, NULL_RTX)) != NULL_RTX
4542 && ((cheap = XEXP (cheap, 0)), true)
4543 && (regno = REGNO (cheap)) >= FIRST_PSEUDO_REGISTER
4544 && (hard_regno = reg_renumber[regno]) >= 0
4545 /* If there are pending saves/restores, the
4546 optimization is not worth. */
4547 && usage_insns[regno].calls_num == calls_num - 1
4548 && TEST_HARD_REG_BIT (call_used_reg_set, hard_regno))
4550 /* Restore the pseudo from the call result as
4551 REG_RETURNED note says that the pseudo value is
4552 in the call result and the pseudo is an argument
4553 of the call. */
4554 pat = PATTERN (curr_insn);
4555 if (GET_CODE (pat) == PARALLEL)
4556 pat = XVECEXP (pat, 0, 0);
4557 dest = SET_DEST (pat);
4558 start_sequence ();
4559 emit_move_insn (cheap, copy_rtx (dest));
4560 restore = get_insns ();
4561 end_sequence ();
4562 lra_process_new_insns (curr_insn, NULL, restore,
4563 "Inserting call parameter restore");
4564 /* We don't need to save/restore of the pseudo from
4565 this call. */
4566 usage_insns[regno].calls_num = calls_num;
4567 bitmap_set_bit (&check_only_regs, regno);
4570 to_inherit_num = 0;
4571 /* Process insn usages. */
4572 for (reg = curr_id->regs; reg != NULL; reg = reg->next)
4573 if ((reg->type != OP_OUT
4574 || (reg->type == OP_OUT && reg->subreg_p))
4575 && (src_regno = reg->regno) < lra_constraint_new_regno_start)
4577 if (src_regno >= FIRST_PSEUDO_REGISTER
4578 && reg_renumber[src_regno] < 0 && reg->type == OP_IN)
4580 if (usage_insns[src_regno].check == curr_usage_insns_check
4581 && (next_usage_insns
4582 = usage_insns[src_regno].insns) != NULL_RTX
4583 && NONDEBUG_INSN_P (curr_insn))
4584 add_to_inherit (src_regno, next_usage_insns);
4585 else
4586 /* Add usages. */
4587 add_next_usage_insn (src_regno, curr_insn, reloads_num);
4589 else if (src_regno < FIRST_PSEUDO_REGISTER
4590 || reg_renumber[src_regno] >= 0)
4592 bool before_p;
4593 rtx use_insn = curr_insn;
4595 before_p = (JUMP_P (curr_insn)
4596 || (CALL_P (curr_insn) && reg->type == OP_IN));
4597 if (NONDEBUG_INSN_P (curr_insn)
4598 && split_if_necessary (src_regno, reg->biggest_mode,
4599 potential_reload_hard_regs,
4600 before_p, curr_insn, max_uid))
4602 if (reg->subreg_p)
4603 lra_risky_transformations_p = true;
4604 change_p = true;
4605 /* Invalidate. */
4606 usage_insns[src_regno].check = 0;
4607 if (before_p)
4608 use_insn = PREV_INSN (curr_insn);
4610 if (NONDEBUG_INSN_P (curr_insn))
4612 if (src_regno < FIRST_PSEUDO_REGISTER)
4613 add_to_hard_reg_set (&live_hard_regs,
4614 reg->biggest_mode, src_regno);
4615 else
4616 add_to_hard_reg_set (&live_hard_regs,
4617 PSEUDO_REGNO_MODE (src_regno),
4618 reg_renumber[src_regno]);
4620 add_next_usage_insn (src_regno, use_insn, reloads_num);
4623 for (i = 0; i < to_inherit_num; i++)
4625 src_regno = to_inherit[i].regno;
4626 if (inherit_reload_reg (false, src_regno, ALL_REGS,
4627 curr_insn, to_inherit[i].insns))
4628 change_p = true;
4629 else
4630 setup_next_usage_insn (src_regno, curr_insn, reloads_num, false);
4633 /* We reached the start of the current basic block. */
4634 if (prev_insn == NULL_RTX || prev_insn == PREV_INSN (head)
4635 || BLOCK_FOR_INSN (prev_insn) != curr_bb)
4637 /* We reached the beginning of the current block -- do
4638 rest of spliting in the current BB. */
4639 to_process = df_get_live_in (curr_bb);
4640 if (BLOCK_FOR_INSN (head) != curr_bb)
4642 /* We are somewhere in the middle of EBB. */
4643 get_live_on_other_edges (EDGE_PRED (curr_bb, 0)->src,
4644 curr_bb, &temp_bitmap);
4645 to_process = &temp_bitmap;
4647 head_p = true;
4648 EXECUTE_IF_SET_IN_BITMAP (to_process, 0, j, bi)
4650 if ((int) j >= lra_constraint_new_regno_start)
4651 break;
4652 if (((int) j < FIRST_PSEUDO_REGISTER || reg_renumber[j] >= 0)
4653 && usage_insns[j].check == curr_usage_insns_check
4654 && (next_usage_insns = usage_insns[j].insns) != NULL_RTX)
4656 if (need_for_split_p (potential_reload_hard_regs, j))
4658 if (lra_dump_file != NULL && head_p)
4660 fprintf (lra_dump_file,
4661 " ----------------------------------\n");
4662 head_p = false;
4664 if (split_reg (false, j, bb_note (curr_bb),
4665 next_usage_insns))
4666 change_p = true;
4668 usage_insns[j].check = 0;
4673 return change_p;
4676 /* The maximal number of inheritance/split passes in LRA. It should
4677 be more 1 in order to perform caller saves transformations and much
4678 less MAX_CONSTRAINT_ITERATION_NUMBER to prevent LRA to do as many
4679 as permitted constraint passes in some complicated cases. The
4680 first inheritance/split pass has a biggest impact on generated code
4681 quality. Each subsequent affects generated code in less degree.
4682 For example, the 3rd pass does not change generated SPEC2000 code
4683 at all on x86-64. */
4684 #define MAX_INHERITANCE_PASSES 2
4686 #if MAX_INHERITANCE_PASSES <= 0 \
4687 || MAX_INHERITANCE_PASSES >= MAX_CONSTRAINT_ITERATION_NUMBER - 8
4688 #error wrong MAX_INHERITANCE_PASSES value
4689 #endif
4691 /* This value affects EBB forming. If probability of edge from EBB to
4692 a BB is not greater than the following value, we don't add the BB
4693 to EBB. */
4694 #define EBB_PROBABILITY_CUTOFF (REG_BR_PROB_BASE / 2)
4696 /* Current number of inheritance/split iteration. */
4697 int lra_inheritance_iter;
4699 /* Entry function for inheritance/split pass. */
4700 void
4701 lra_inheritance (void)
4703 int i;
4704 basic_block bb, start_bb;
4705 edge e;
4707 lra_inheritance_iter++;
4708 if (lra_inheritance_iter > MAX_INHERITANCE_PASSES)
4709 return;
4710 timevar_push (TV_LRA_INHERITANCE);
4711 if (lra_dump_file != NULL)
4712 fprintf (lra_dump_file, "\n********** Inheritance #%d: **********\n\n",
4713 lra_inheritance_iter);
4714 curr_usage_insns_check = 0;
4715 usage_insns = XNEWVEC (struct usage_insns, lra_constraint_new_regno_start);
4716 for (i = 0; i < lra_constraint_new_regno_start; i++)
4717 usage_insns[i].check = 0;
4718 bitmap_initialize (&check_only_regs, &reg_obstack);
4719 bitmap_initialize (&live_regs, &reg_obstack);
4720 bitmap_initialize (&temp_bitmap, &reg_obstack);
4721 bitmap_initialize (&ebb_global_regs, &reg_obstack);
4722 FOR_EACH_BB (bb)
4724 start_bb = bb;
4725 if (lra_dump_file != NULL)
4726 fprintf (lra_dump_file, "EBB");
4727 /* Form a EBB starting with BB. */
4728 bitmap_clear (&ebb_global_regs);
4729 bitmap_ior_into (&ebb_global_regs, df_get_live_in (bb));
4730 for (;;)
4732 if (lra_dump_file != NULL)
4733 fprintf (lra_dump_file, " %d", bb->index);
4734 if (bb->next_bb == EXIT_BLOCK_PTR || LABEL_P (BB_HEAD (bb->next_bb)))
4735 break;
4736 e = find_fallthru_edge (bb->succs);
4737 if (! e)
4738 break;
4739 if (e->probability <= EBB_PROBABILITY_CUTOFF)
4740 break;
4741 bb = bb->next_bb;
4743 bitmap_ior_into (&ebb_global_regs, df_get_live_out (bb));
4744 if (lra_dump_file != NULL)
4745 fprintf (lra_dump_file, "\n");
4746 if (inherit_in_ebb (BB_HEAD (start_bb), BB_END (bb)))
4747 /* Remember that the EBB head and tail can change in
4748 inherit_in_ebb. */
4749 update_ebb_live_info (BB_HEAD (start_bb), BB_END (bb));
4751 bitmap_clear (&ebb_global_regs);
4752 bitmap_clear (&temp_bitmap);
4753 bitmap_clear (&live_regs);
4754 bitmap_clear (&check_only_regs);
4755 free (usage_insns);
4757 timevar_pop (TV_LRA_INHERITANCE);
4762 /* This page contains code to undo failed inheritance/split
4763 transformations. */
4765 /* Current number of iteration undoing inheritance/split. */
4766 int lra_undo_inheritance_iter;
4768 /* Fix BB live info LIVE after removing pseudos created on pass doing
4769 inheritance/split which are REMOVED_PSEUDOS. */
4770 static void
4771 fix_bb_live_info (bitmap live, bitmap removed_pseudos)
4773 unsigned int regno;
4774 bitmap_iterator bi;
4776 EXECUTE_IF_SET_IN_BITMAP (removed_pseudos, 0, regno, bi)
4777 if (bitmap_clear_bit (live, regno))
4778 bitmap_set_bit (live, lra_reg_info[regno].restore_regno);
4781 /* Return regno of the (subreg of) REG. Otherwise, return a negative
4782 number. */
4783 static int
4784 get_regno (rtx reg)
4786 if (GET_CODE (reg) == SUBREG)
4787 reg = SUBREG_REG (reg);
4788 if (REG_P (reg))
4789 return REGNO (reg);
4790 return -1;
4793 /* Remove inheritance/split pseudos which are in REMOVE_PSEUDOS and
4794 return true if we did any change. The undo transformations for
4795 inheritance looks like
4796 i <- i2
4797 p <- i => p <- i2
4798 or removing
4799 p <- i, i <- p, and i <- i3
4800 where p is original pseudo from which inheritance pseudo i was
4801 created, i and i3 are removed inheritance pseudos, i2 is another
4802 not removed inheritance pseudo. All split pseudos or other
4803 occurrences of removed inheritance pseudos are changed on the
4804 corresponding original pseudos.
4806 The function also schedules insns changed and created during
4807 inheritance/split pass for processing by the subsequent constraint
4808 pass. */
4809 static bool
4810 remove_inheritance_pseudos (bitmap remove_pseudos)
4812 basic_block bb;
4813 int regno, sregno, prev_sregno, dregno, restore_regno;
4814 rtx set, prev_set, prev_insn;
4815 bool change_p, done_p;
4817 change_p = ! bitmap_empty_p (remove_pseudos);
4818 /* We can not finish the function right away if CHANGE_P is true
4819 because we need to marks insns affected by previous
4820 inheritance/split pass for processing by the subsequent
4821 constraint pass. */
4822 FOR_EACH_BB (bb)
4824 fix_bb_live_info (df_get_live_in (bb), remove_pseudos);
4825 fix_bb_live_info (df_get_live_out (bb), remove_pseudos);
4826 FOR_BB_INSNS_REVERSE (bb, curr_insn)
4828 if (! INSN_P (curr_insn))
4829 continue;
4830 done_p = false;
4831 sregno = dregno = -1;
4832 if (change_p && NONDEBUG_INSN_P (curr_insn)
4833 && (set = single_set (curr_insn)) != NULL_RTX)
4835 dregno = get_regno (SET_DEST (set));
4836 sregno = get_regno (SET_SRC (set));
4839 if (sregno >= 0 && dregno >= 0)
4841 if ((bitmap_bit_p (remove_pseudos, sregno)
4842 && (lra_reg_info[sregno].restore_regno == dregno
4843 || (bitmap_bit_p (remove_pseudos, dregno)
4844 && (lra_reg_info[sregno].restore_regno
4845 == lra_reg_info[dregno].restore_regno))))
4846 || (bitmap_bit_p (remove_pseudos, dregno)
4847 && lra_reg_info[dregno].restore_regno == sregno))
4848 /* One of the following cases:
4849 original <- removed inheritance pseudo
4850 removed inherit pseudo <- another removed inherit pseudo
4851 removed inherit pseudo <- original pseudo
4853 removed_split_pseudo <- original_reg
4854 original_reg <- removed_split_pseudo */
4856 if (lra_dump_file != NULL)
4858 fprintf (lra_dump_file, " Removing %s:\n",
4859 bitmap_bit_p (&lra_split_regs, sregno)
4860 || bitmap_bit_p (&lra_split_regs, dregno)
4861 ? "split" : "inheritance");
4862 debug_rtl_slim (lra_dump_file,
4863 curr_insn, curr_insn, -1, 0);
4865 lra_set_insn_deleted (curr_insn);
4866 done_p = true;
4868 else if (bitmap_bit_p (remove_pseudos, sregno)
4869 && bitmap_bit_p (&lra_inheritance_pseudos, sregno))
4871 /* Search the following pattern:
4872 inherit_or_split_pseudo1 <- inherit_or_split_pseudo2
4873 original_pseudo <- inherit_or_split_pseudo1
4874 where the 2nd insn is the current insn and
4875 inherit_or_split_pseudo2 is not removed. If it is found,
4876 change the current insn onto:
4877 original_pseudo <- inherit_or_split_pseudo2. */
4878 for (prev_insn = PREV_INSN (curr_insn);
4879 prev_insn != NULL_RTX && ! NONDEBUG_INSN_P (prev_insn);
4880 prev_insn = PREV_INSN (prev_insn))
4882 if (prev_insn != NULL_RTX && BLOCK_FOR_INSN (prev_insn) == bb
4883 && (prev_set = single_set (prev_insn)) != NULL_RTX
4884 /* There should be no subregs in insn we are
4885 searching because only the original reg might
4886 be in subreg when we changed the mode of
4887 load/store for splitting. */
4888 && REG_P (SET_DEST (prev_set))
4889 && REG_P (SET_SRC (prev_set))
4890 && (int) REGNO (SET_DEST (prev_set)) == sregno
4891 && ((prev_sregno = REGNO (SET_SRC (prev_set)))
4892 >= FIRST_PSEUDO_REGISTER)
4893 /* As we consider chain of inheritance or
4894 splitting described in above comment we should
4895 check that sregno and prev_sregno were
4896 inheritance/split pseudos created from the
4897 same original regno. */
4898 && (lra_reg_info[sregno].restore_regno
4899 == lra_reg_info[prev_sregno].restore_regno)
4900 && ! bitmap_bit_p (remove_pseudos, prev_sregno))
4902 lra_assert (GET_MODE (SET_SRC (prev_set))
4903 == GET_MODE (regno_reg_rtx[sregno]));
4904 if (GET_CODE (SET_SRC (set)) == SUBREG)
4905 SUBREG_REG (SET_SRC (set)) = SET_SRC (prev_set);
4906 else
4907 SET_SRC (set) = SET_SRC (prev_set);
4908 lra_push_insn_and_update_insn_regno_info (curr_insn);
4909 lra_set_used_insn_alternative_by_uid
4910 (INSN_UID (curr_insn), -1);
4911 done_p = true;
4912 if (lra_dump_file != NULL)
4914 fprintf (lra_dump_file, " Change reload insn:\n");
4915 debug_rtl_slim (lra_dump_file,
4916 curr_insn, curr_insn, -1, 0);
4921 if (! done_p)
4923 struct lra_insn_reg *reg;
4924 bool restored_regs_p = false;
4925 bool kept_regs_p = false;
4927 curr_id = lra_get_insn_recog_data (curr_insn);
4928 for (reg = curr_id->regs; reg != NULL; reg = reg->next)
4930 regno = reg->regno;
4931 restore_regno = lra_reg_info[regno].restore_regno;
4932 if (restore_regno >= 0)
4934 if (change_p && bitmap_bit_p (remove_pseudos, regno))
4936 substitute_pseudo (&curr_insn, regno,
4937 regno_reg_rtx[restore_regno]);
4938 restored_regs_p = true;
4940 else
4941 kept_regs_p = true;
4944 if (NONDEBUG_INSN_P (curr_insn) && kept_regs_p)
4946 /* The instruction has changed since the previous
4947 constraints pass. */
4948 lra_push_insn_and_update_insn_regno_info (curr_insn);
4949 lra_set_used_insn_alternative_by_uid
4950 (INSN_UID (curr_insn), -1);
4952 else if (restored_regs_p)
4953 /* The instruction has been restored to the form that
4954 it had during the previous constraints pass. */
4955 lra_update_insn_regno_info (curr_insn);
4956 if (restored_regs_p && lra_dump_file != NULL)
4958 fprintf (lra_dump_file, " Insn after restoring regs:\n");
4959 debug_rtl_slim (lra_dump_file, curr_insn, curr_insn, -1, 0);
4964 return change_p;
4967 /* Entry function for undoing inheritance/split transformation. Return true
4968 if we did any RTL change in this pass. */
4969 bool
4970 lra_undo_inheritance (void)
4972 unsigned int regno;
4973 int restore_regno, hard_regno;
4974 int n_all_inherit, n_inherit, n_all_split, n_split;
4975 bitmap_head remove_pseudos;
4976 bitmap_iterator bi;
4977 bool change_p;
4979 lra_undo_inheritance_iter++;
4980 if (lra_undo_inheritance_iter > MAX_INHERITANCE_PASSES)
4981 return false;
4982 if (lra_dump_file != NULL)
4983 fprintf (lra_dump_file,
4984 "\n********** Undoing inheritance #%d: **********\n\n",
4985 lra_undo_inheritance_iter);
4986 bitmap_initialize (&remove_pseudos, &reg_obstack);
4987 n_inherit = n_all_inherit = 0;
4988 EXECUTE_IF_SET_IN_BITMAP (&lra_inheritance_pseudos, 0, regno, bi)
4989 if (lra_reg_info[regno].restore_regno >= 0)
4991 n_all_inherit++;
4992 if (reg_renumber[regno] < 0)
4993 bitmap_set_bit (&remove_pseudos, regno);
4994 else
4995 n_inherit++;
4997 if (lra_dump_file != NULL && n_all_inherit != 0)
4998 fprintf (lra_dump_file, "Inherit %d out of %d (%.2f%%)\n",
4999 n_inherit, n_all_inherit,
5000 (double) n_inherit / n_all_inherit * 100);
5001 n_split = n_all_split = 0;
5002 EXECUTE_IF_SET_IN_BITMAP (&lra_split_regs, 0, regno, bi)
5003 if ((restore_regno = lra_reg_info[regno].restore_regno) >= 0)
5005 n_all_split++;
5006 hard_regno = (restore_regno >= FIRST_PSEUDO_REGISTER
5007 ? reg_renumber[restore_regno] : restore_regno);
5008 if (hard_regno < 0 || reg_renumber[regno] == hard_regno)
5009 bitmap_set_bit (&remove_pseudos, regno);
5010 else
5012 n_split++;
5013 if (lra_dump_file != NULL)
5014 fprintf (lra_dump_file, " Keep split r%d (orig=r%d)\n",
5015 regno, restore_regno);
5018 if (lra_dump_file != NULL && n_all_split != 0)
5019 fprintf (lra_dump_file, "Split %d out of %d (%.2f%%)\n",
5020 n_split, n_all_split,
5021 (double) n_split / n_all_split * 100);
5022 change_p = remove_inheritance_pseudos (&remove_pseudos);
5023 bitmap_clear (&remove_pseudos);
5024 /* Clear restore_regnos. */
5025 EXECUTE_IF_SET_IN_BITMAP (&lra_inheritance_pseudos, 0, regno, bi)
5026 lra_reg_info[regno].restore_regno = -1;
5027 EXECUTE_IF_SET_IN_BITMAP (&lra_split_regs, 0, regno, bi)
5028 lra_reg_info[regno].restore_regno = -1;
5029 return change_p;