* include/ext/array_allocator.h: Replace uses of
[official-gcc.git] / gcc / lra-constraints.c
blob6f19c183eae82c5ad991c2a4713716449cbcd760
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 (rclass != new_class)
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. */
1150 if ((MEM_P (reg)
1151 && (! SLOW_UNALIGNED_ACCESS (mode, MEM_ALIGN (reg))
1152 || MEM_ALIGN (reg) >= GET_MODE_ALIGNMENT (mode)))
1153 || (REG_P (reg) && REGNO (reg) < FIRST_PSEUDO_REGISTER))
1155 alter_subreg (curr_id->operand_loc[nop], false);
1156 return true;
1158 /* Put constant into memory when we have mixed modes. It generates
1159 a better code in most cases as it does not need a secondary
1160 reload memory. It also prevents LRA looping when LRA is using
1161 secondary reload memory again and again. */
1162 if (CONSTANT_P (reg) && CONST_POOL_OK_P (reg_mode, reg)
1163 && SCALAR_INT_MODE_P (reg_mode) != SCALAR_INT_MODE_P (mode))
1165 SUBREG_REG (operand) = force_const_mem (reg_mode, reg);
1166 alter_subreg (curr_id->operand_loc[nop], false);
1167 return true;
1169 /* Force a reload of the SUBREG_REG if this is a constant or PLUS or
1170 if there may be a problem accessing OPERAND in the outer
1171 mode. */
1172 if ((REG_P (reg)
1173 && REGNO (reg) >= FIRST_PSEUDO_REGISTER
1174 && (hard_regno = lra_get_regno_hard_regno (REGNO (reg))) >= 0
1175 /* Don't reload paradoxical subregs because we could be looping
1176 having repeatedly final regno out of hard regs range. */
1177 && (hard_regno_nregs[hard_regno][GET_MODE (reg)]
1178 >= hard_regno_nregs[hard_regno][mode])
1179 && simplify_subreg_regno (hard_regno, GET_MODE (reg),
1180 SUBREG_BYTE (operand), mode) < 0)
1181 || CONSTANT_P (reg) || GET_CODE (reg) == PLUS || MEM_P (reg))
1183 enum op_type type = curr_static_id->operand[nop].type;
1184 /* The class will be defined later in curr_insn_transform. */
1185 enum reg_class rclass
1186 = (enum reg_class) targetm.preferred_reload_class (reg, ALL_REGS);
1188 new_reg = lra_create_new_reg_with_unique_value (reg_mode, reg, rclass,
1189 "subreg reg");
1190 bitmap_set_bit (&lra_optional_reload_pseudos, REGNO (new_reg));
1191 if (type != OP_OUT
1192 || GET_MODE_SIZE (GET_MODE (reg)) > GET_MODE_SIZE (mode))
1194 push_to_sequence (before);
1195 lra_emit_move (new_reg, reg);
1196 before = get_insns ();
1197 end_sequence ();
1199 if (type != OP_IN)
1201 start_sequence ();
1202 lra_emit_move (reg, new_reg);
1203 emit_insn (after);
1204 after = get_insns ();
1205 end_sequence ();
1207 SUBREG_REG (operand) = new_reg;
1208 lra_process_new_insns (curr_insn, before, after,
1209 "Inserting subreg reload");
1210 return true;
1212 return false;
1215 /* Return TRUE if X refers for a hard register from SET. */
1216 static bool
1217 uses_hard_regs_p (rtx x, HARD_REG_SET set)
1219 int i, j, x_hard_regno;
1220 enum machine_mode mode;
1221 const char *fmt;
1222 enum rtx_code code;
1224 if (x == NULL_RTX)
1225 return false;
1226 code = GET_CODE (x);
1227 mode = GET_MODE (x);
1228 if (code == SUBREG)
1230 x = SUBREG_REG (x);
1231 code = GET_CODE (x);
1232 if (GET_MODE_SIZE (GET_MODE (x)) > GET_MODE_SIZE (mode))
1233 mode = GET_MODE (x);
1236 if (REG_P (x))
1238 x_hard_regno = get_hard_regno (x);
1239 return (x_hard_regno >= 0
1240 && overlaps_hard_reg_set_p (set, mode, x_hard_regno));
1242 if (MEM_P (x))
1244 struct address_info ad;
1246 decompose_mem_address (&ad, x);
1247 if (ad.base_term != NULL && uses_hard_regs_p (*ad.base_term, set))
1248 return true;
1249 if (ad.index_term != NULL && uses_hard_regs_p (*ad.index_term, set))
1250 return true;
1252 fmt = GET_RTX_FORMAT (code);
1253 for (i = GET_RTX_LENGTH (code) - 1; i >= 0; i--)
1255 if (fmt[i] == 'e')
1257 if (uses_hard_regs_p (XEXP (x, i), set))
1258 return true;
1260 else if (fmt[i] == 'E')
1262 for (j = XVECLEN (x, i) - 1; j >= 0; j--)
1263 if (uses_hard_regs_p (XVECEXP (x, i, j), set))
1264 return true;
1267 return false;
1270 /* Return true if OP is a spilled pseudo. */
1271 static inline bool
1272 spilled_pseudo_p (rtx op)
1274 return (REG_P (op)
1275 && REGNO (op) >= FIRST_PSEUDO_REGISTER && in_mem_p (REGNO (op)));
1278 /* Return true if X is a general constant. */
1279 static inline bool
1280 general_constant_p (rtx x)
1282 return CONSTANT_P (x) && (! flag_pic || LEGITIMATE_PIC_OPERAND_P (x));
1285 /* Major function to choose the current insn alternative and what
1286 operands should be reloaded and how. If ONLY_ALTERNATIVE is not
1287 negative we should consider only this alternative. Return false if
1288 we can not choose the alternative or find how to reload the
1289 operands. */
1290 static bool
1291 process_alt_operands (int only_alternative)
1293 bool ok_p = false;
1294 int nop, small_class_operands_num, overall, nalt;
1295 int n_alternatives = curr_static_id->n_alternatives;
1296 int n_operands = curr_static_id->n_operands;
1297 /* LOSERS counts the operands that don't fit this alternative and
1298 would require loading. */
1299 int losers;
1300 /* REJECT is a count of how undesirable this alternative says it is
1301 if any reloading is required. If the alternative matches exactly
1302 then REJECT is ignored, but otherwise it gets this much counted
1303 against it in addition to the reloading needed. */
1304 int reject;
1305 /* The number of elements in the following array. */
1306 int early_clobbered_regs_num;
1307 /* Numbers of operands which are early clobber registers. */
1308 int early_clobbered_nops[MAX_RECOG_OPERANDS];
1309 enum reg_class curr_alt[MAX_RECOG_OPERANDS];
1310 HARD_REG_SET curr_alt_set[MAX_RECOG_OPERANDS];
1311 bool curr_alt_match_win[MAX_RECOG_OPERANDS];
1312 bool curr_alt_win[MAX_RECOG_OPERANDS];
1313 bool curr_alt_offmemok[MAX_RECOG_OPERANDS];
1314 int curr_alt_matches[MAX_RECOG_OPERANDS];
1315 /* The number of elements in the following array. */
1316 int curr_alt_dont_inherit_ops_num;
1317 /* Numbers of operands whose reload pseudos should not be inherited. */
1318 int curr_alt_dont_inherit_ops[MAX_RECOG_OPERANDS];
1319 rtx op;
1320 /* The register when the operand is a subreg of register, otherwise the
1321 operand itself. */
1322 rtx no_subreg_reg_operand[MAX_RECOG_OPERANDS];
1323 /* The register if the operand is a register or subreg of register,
1324 otherwise NULL. */
1325 rtx operand_reg[MAX_RECOG_OPERANDS];
1326 int hard_regno[MAX_RECOG_OPERANDS];
1327 enum machine_mode biggest_mode[MAX_RECOG_OPERANDS];
1328 int reload_nregs, reload_sum;
1329 bool costly_p;
1330 enum reg_class cl;
1332 /* Calculate some data common for all alternatives to speed up the
1333 function. */
1334 for (nop = 0; nop < n_operands; nop++)
1336 op = no_subreg_reg_operand[nop] = *curr_id->operand_loc[nop];
1337 /* The real hard regno of the operand after the allocation. */
1338 hard_regno[nop] = get_hard_regno (op);
1340 operand_reg[nop] = op;
1341 biggest_mode[nop] = GET_MODE (operand_reg[nop]);
1342 if (GET_CODE (operand_reg[nop]) == SUBREG)
1344 operand_reg[nop] = SUBREG_REG (operand_reg[nop]);
1345 if (GET_MODE_SIZE (biggest_mode[nop])
1346 < GET_MODE_SIZE (GET_MODE (operand_reg[nop])))
1347 biggest_mode[nop] = GET_MODE (operand_reg[nop]);
1349 if (REG_P (operand_reg[nop]))
1350 no_subreg_reg_operand[nop] = operand_reg[nop];
1351 else
1352 operand_reg[nop] = NULL_RTX;
1355 /* The constraints are made of several alternatives. Each operand's
1356 constraint looks like foo,bar,... with commas separating the
1357 alternatives. The first alternatives for all operands go
1358 together, the second alternatives go together, etc.
1360 First loop over alternatives. */
1361 for (nalt = 0; nalt < n_alternatives; nalt++)
1363 /* Loop over operands for one constraint alternative. */
1364 #ifdef HAVE_ATTR_enabled
1365 if (curr_id->alternative_enabled_p != NULL
1366 && ! curr_id->alternative_enabled_p[nalt])
1367 continue;
1368 #endif
1370 if (only_alternative >= 0 && nalt != only_alternative)
1371 continue;
1373 overall = losers = reject = reload_nregs = reload_sum = 0;
1374 for (nop = 0; nop < n_operands; nop++)
1375 reject += (curr_static_id
1376 ->operand_alternative[nalt * n_operands + nop].reject);
1377 early_clobbered_regs_num = 0;
1379 for (nop = 0; nop < n_operands; nop++)
1381 const char *p;
1382 char *end;
1383 int len, c, m, i, opalt_num, this_alternative_matches;
1384 bool win, did_match, offmemok, early_clobber_p;
1385 /* false => this operand can be reloaded somehow for this
1386 alternative. */
1387 bool badop;
1388 /* true => this operand can be reloaded if the alternative
1389 allows regs. */
1390 bool winreg;
1391 /* True if a constant forced into memory would be OK for
1392 this operand. */
1393 bool constmemok;
1394 enum reg_class this_alternative, this_costly_alternative;
1395 HARD_REG_SET this_alternative_set, this_costly_alternative_set;
1396 bool this_alternative_match_win, this_alternative_win;
1397 bool this_alternative_offmemok;
1398 enum machine_mode mode;
1400 opalt_num = nalt * n_operands + nop;
1401 if (curr_static_id->operand_alternative[opalt_num].anything_ok)
1403 /* Fast track for no constraints at all. */
1404 curr_alt[nop] = NO_REGS;
1405 CLEAR_HARD_REG_SET (curr_alt_set[nop]);
1406 curr_alt_win[nop] = true;
1407 curr_alt_match_win[nop] = false;
1408 curr_alt_offmemok[nop] = false;
1409 curr_alt_matches[nop] = -1;
1410 continue;
1413 op = no_subreg_reg_operand[nop];
1414 mode = curr_operand_mode[nop];
1416 win = did_match = winreg = offmemok = constmemok = false;
1417 badop = true;
1419 early_clobber_p = false;
1420 p = curr_static_id->operand_alternative[opalt_num].constraint;
1422 this_costly_alternative = this_alternative = NO_REGS;
1423 /* We update set of possible hard regs besides its class
1424 because reg class might be inaccurate. For example,
1425 union of LO_REGS (l), HI_REGS(h), and STACK_REG(k) in ARM
1426 is translated in HI_REGS because classes are merged by
1427 pairs and there is no accurate intermediate class. */
1428 CLEAR_HARD_REG_SET (this_alternative_set);
1429 CLEAR_HARD_REG_SET (this_costly_alternative_set);
1430 this_alternative_win = false;
1431 this_alternative_match_win = false;
1432 this_alternative_offmemok = false;
1433 this_alternative_matches = -1;
1435 /* An empty constraint should be excluded by the fast
1436 track. */
1437 lra_assert (*p != 0 && *p != ',');
1439 /* Scan this alternative's specs for this operand; set WIN
1440 if the operand fits any letter in this alternative.
1441 Otherwise, clear BADOP if this operand could fit some
1442 letter after reloads, or set WINREG if this operand could
1443 fit after reloads provided the constraint allows some
1444 registers. */
1445 costly_p = false;
1448 switch ((c = *p, len = CONSTRAINT_LEN (c, p)), c)
1450 case '\0':
1451 len = 0;
1452 break;
1453 case ',':
1454 c = '\0';
1455 break;
1457 case '=': case '+': case '?': case '*': case '!':
1458 case ' ': case '\t':
1459 break;
1461 case '%':
1462 /* We only support one commutative marker, the first
1463 one. We already set commutative above. */
1464 break;
1466 case '&':
1467 early_clobber_p = true;
1468 break;
1470 case '#':
1471 /* Ignore rest of this alternative. */
1472 c = '\0';
1473 break;
1475 case '0': case '1': case '2': case '3': case '4':
1476 case '5': case '6': case '7': case '8': case '9':
1478 int m_hregno;
1479 bool match_p;
1481 m = strtoul (p, &end, 10);
1482 p = end;
1483 len = 0;
1484 lra_assert (nop > m);
1486 this_alternative_matches = m;
1487 m_hregno = get_hard_regno (*curr_id->operand_loc[m]);
1488 /* We are supposed to match a previous operand.
1489 If we do, we win if that one did. If we do
1490 not, count both of the operands as losers.
1491 (This is too conservative, since most of the
1492 time only a single reload insn will be needed
1493 to make the two operands win. As a result,
1494 this alternative may be rejected when it is
1495 actually desirable.) */
1496 match_p = false;
1497 if (operands_match_p (*curr_id->operand_loc[nop],
1498 *curr_id->operand_loc[m], m_hregno))
1500 /* We should reject matching of an early
1501 clobber operand if the matching operand is
1502 not dying in the insn. */
1503 if (! curr_static_id->operand[m].early_clobber
1504 || operand_reg[nop] == NULL_RTX
1505 || (find_regno_note (curr_insn, REG_DEAD,
1506 REGNO (operand_reg[nop]))
1507 != NULL_RTX))
1508 match_p = true;
1510 if (match_p)
1512 /* If we are matching a non-offsettable
1513 address where an offsettable address was
1514 expected, then we must reject this
1515 combination, because we can't reload
1516 it. */
1517 if (curr_alt_offmemok[m]
1518 && MEM_P (*curr_id->operand_loc[m])
1519 && curr_alt[m] == NO_REGS && ! curr_alt_win[m])
1520 continue;
1523 else
1525 /* Operands don't match. Both operands must
1526 allow a reload register, otherwise we
1527 cannot make them match. */
1528 if (curr_alt[m] == NO_REGS)
1529 break;
1530 /* Retroactively mark the operand we had to
1531 match as a loser, if it wasn't already and
1532 it wasn't matched to a register constraint
1533 (e.g it might be matched by memory). */
1534 if (curr_alt_win[m]
1535 && (operand_reg[m] == NULL_RTX
1536 || hard_regno[m] < 0))
1538 losers++;
1539 reload_nregs
1540 += (ira_reg_class_max_nregs[curr_alt[m]]
1541 [GET_MODE (*curr_id->operand_loc[m])]);
1544 /* We prefer no matching alternatives because
1545 it gives more freedom in RA. */
1546 if (operand_reg[nop] == NULL_RTX
1547 || (find_regno_note (curr_insn, REG_DEAD,
1548 REGNO (operand_reg[nop]))
1549 == NULL_RTX))
1550 reject += 2;
1552 /* If we have to reload this operand and some
1553 previous operand also had to match the same
1554 thing as this operand, we don't know how to do
1555 that. */
1556 if (!match_p || !curr_alt_win[m])
1558 for (i = 0; i < nop; i++)
1559 if (curr_alt_matches[i] == m)
1560 break;
1561 if (i < nop)
1562 break;
1564 else
1565 did_match = true;
1567 /* This can be fixed with reloads if the operand
1568 we are supposed to match can be fixed with
1569 reloads. */
1570 badop = false;
1571 this_alternative = curr_alt[m];
1572 COPY_HARD_REG_SET (this_alternative_set, curr_alt_set[m]);
1573 winreg = this_alternative != NO_REGS;
1574 break;
1577 case 'p':
1578 cl = base_reg_class (VOIDmode, ADDR_SPACE_GENERIC,
1579 ADDRESS, SCRATCH);
1580 this_alternative = reg_class_subunion[this_alternative][cl];
1581 IOR_HARD_REG_SET (this_alternative_set,
1582 reg_class_contents[cl]);
1583 if (costly_p)
1585 this_costly_alternative
1586 = reg_class_subunion[this_costly_alternative][cl];
1587 IOR_HARD_REG_SET (this_costly_alternative_set,
1588 reg_class_contents[cl]);
1590 win = true;
1591 badop = false;
1592 break;
1594 case TARGET_MEM_CONSTRAINT:
1595 if (MEM_P (op) || spilled_pseudo_p (op))
1596 win = true;
1597 /* We can put constant or pseudo value into memory
1598 to satisfy the constraint. */
1599 if (CONST_POOL_OK_P (mode, op) || REG_P (op))
1600 badop = false;
1601 constmemok = true;
1602 break;
1604 case '<':
1605 if (MEM_P (op)
1606 && (GET_CODE (XEXP (op, 0)) == PRE_DEC
1607 || GET_CODE (XEXP (op, 0)) == POST_DEC))
1608 win = true;
1609 break;
1611 case '>':
1612 if (MEM_P (op)
1613 && (GET_CODE (XEXP (op, 0)) == PRE_INC
1614 || GET_CODE (XEXP (op, 0)) == POST_INC))
1615 win = true;
1616 break;
1618 /* Memory op whose address is not offsettable. */
1619 case 'V':
1620 if (MEM_P (op)
1621 && ! offsettable_nonstrict_memref_p (op))
1622 win = true;
1623 break;
1625 /* Memory operand whose address is offsettable. */
1626 case 'o':
1627 if ((MEM_P (op)
1628 && offsettable_nonstrict_memref_p (op))
1629 || spilled_pseudo_p (op))
1630 win = true;
1631 /* We can put constant or pseudo value into memory
1632 or make memory address offsetable to satisfy the
1633 constraint. */
1634 if (CONST_POOL_OK_P (mode, op) || MEM_P (op) || REG_P (op))
1635 badop = false;
1636 constmemok = true;
1637 offmemok = true;
1638 break;
1640 case 'E':
1641 case 'F':
1642 if (GET_CODE (op) == CONST_DOUBLE
1643 || (GET_CODE (op) == CONST_VECTOR
1644 && (GET_MODE_CLASS (mode) == MODE_VECTOR_FLOAT)))
1645 win = true;
1646 break;
1648 case 'G':
1649 case 'H':
1650 if (GET_CODE (op) == CONST_DOUBLE
1651 && CONST_DOUBLE_OK_FOR_CONSTRAINT_P (op, c, p))
1652 win = true;
1653 break;
1655 case 's':
1656 if (CONST_INT_P (op)
1657 || (GET_CODE (op) == CONST_DOUBLE && mode == VOIDmode))
1658 break;
1660 case 'i':
1661 if (general_constant_p (op))
1662 win = true;
1663 break;
1665 case 'n':
1666 if (CONST_INT_P (op)
1667 || (GET_CODE (op) == CONST_DOUBLE && mode == VOIDmode))
1668 win = true;
1669 break;
1671 case 'I':
1672 case 'J':
1673 case 'K':
1674 case 'L':
1675 case 'M':
1676 case 'N':
1677 case 'O':
1678 case 'P':
1679 if (CONST_INT_P (op)
1680 && CONST_OK_FOR_CONSTRAINT_P (INTVAL (op), c, p))
1681 win = true;
1682 break;
1684 case 'X':
1685 /* This constraint should be excluded by the fast
1686 track. */
1687 gcc_unreachable ();
1688 break;
1690 case 'g':
1691 if (MEM_P (op)
1692 || general_constant_p (op)
1693 || spilled_pseudo_p (op))
1694 win = true;
1695 /* Drop through into 'r' case. */
1697 case 'r':
1698 this_alternative
1699 = reg_class_subunion[this_alternative][GENERAL_REGS];
1700 IOR_HARD_REG_SET (this_alternative_set,
1701 reg_class_contents[GENERAL_REGS]);
1702 if (costly_p)
1704 this_costly_alternative
1705 = (reg_class_subunion
1706 [this_costly_alternative][GENERAL_REGS]);
1707 IOR_HARD_REG_SET (this_costly_alternative_set,
1708 reg_class_contents[GENERAL_REGS]);
1710 goto reg;
1712 default:
1713 if (REG_CLASS_FROM_CONSTRAINT (c, p) == NO_REGS)
1715 #ifdef EXTRA_CONSTRAINT_STR
1716 if (EXTRA_MEMORY_CONSTRAINT (c, p))
1718 if (EXTRA_CONSTRAINT_STR (op, c, p))
1719 win = true;
1720 else if (spilled_pseudo_p (op))
1721 win = true;
1723 /* If we didn't already win, we can reload
1724 constants via force_const_mem or put the
1725 pseudo value into memory, or make other
1726 memory by reloading the address like for
1727 'o'. */
1728 if (CONST_POOL_OK_P (mode, op)
1729 || MEM_P (op) || REG_P (op))
1730 badop = false;
1731 constmemok = true;
1732 offmemok = true;
1733 break;
1735 if (EXTRA_ADDRESS_CONSTRAINT (c, p))
1737 if (EXTRA_CONSTRAINT_STR (op, c, p))
1738 win = true;
1740 /* If we didn't already win, we can reload
1741 the address into a base register. */
1742 cl = base_reg_class (VOIDmode, ADDR_SPACE_GENERIC,
1743 ADDRESS, SCRATCH);
1744 this_alternative
1745 = reg_class_subunion[this_alternative][cl];
1746 IOR_HARD_REG_SET (this_alternative_set,
1747 reg_class_contents[cl]);
1748 if (costly_p)
1750 this_costly_alternative
1751 = (reg_class_subunion
1752 [this_costly_alternative][cl]);
1753 IOR_HARD_REG_SET (this_costly_alternative_set,
1754 reg_class_contents[cl]);
1756 badop = false;
1757 break;
1760 if (EXTRA_CONSTRAINT_STR (op, c, p))
1761 win = true;
1762 #endif
1763 break;
1766 cl = REG_CLASS_FROM_CONSTRAINT (c, p);
1767 this_alternative = reg_class_subunion[this_alternative][cl];
1768 IOR_HARD_REG_SET (this_alternative_set,
1769 reg_class_contents[cl]);
1770 if (costly_p)
1772 this_costly_alternative
1773 = reg_class_subunion[this_costly_alternative][cl];
1774 IOR_HARD_REG_SET (this_costly_alternative_set,
1775 reg_class_contents[cl]);
1777 reg:
1778 if (mode == BLKmode)
1779 break;
1780 winreg = true;
1781 if (REG_P (op))
1783 if (hard_regno[nop] >= 0
1784 && in_hard_reg_set_p (this_alternative_set,
1785 mode, hard_regno[nop]))
1786 win = true;
1787 else if (hard_regno[nop] < 0
1788 && in_class_p (op, this_alternative, NULL))
1789 win = true;
1791 break;
1793 if (c != ' ' && c != '\t')
1794 costly_p = c == '*';
1796 while ((p += len), c);
1798 /* Record which operands fit this alternative. */
1799 if (win)
1801 this_alternative_win = true;
1802 if (operand_reg[nop] != NULL_RTX)
1804 if (hard_regno[nop] >= 0)
1806 if (in_hard_reg_set_p (this_costly_alternative_set,
1807 mode, hard_regno[nop]))
1808 reject++;
1810 else
1812 /* Prefer won reg to spilled pseudo under other equal
1813 conditions. */
1814 reject++;
1815 if (in_class_p (operand_reg[nop],
1816 this_costly_alternative, NULL))
1817 reject++;
1819 /* We simulate the behaviour of old reload here.
1820 Although scratches need hard registers and it
1821 might result in spilling other pseudos, no reload
1822 insns are generated for the scratches. So it
1823 might cost something but probably less than old
1824 reload pass believes. */
1825 if (lra_former_scratch_p (REGNO (operand_reg[nop])))
1826 reject += LRA_LOSER_COST_FACTOR;
1829 else if (did_match)
1830 this_alternative_match_win = true;
1831 else
1833 int const_to_mem = 0;
1834 bool no_regs_p;
1836 no_regs_p
1837 = (this_alternative == NO_REGS
1838 || (hard_reg_set_subset_p
1839 (reg_class_contents[this_alternative],
1840 lra_no_alloc_regs)));
1841 /* If this operand accepts a register, and if the
1842 register class has at least one allocatable register,
1843 then this operand can be reloaded. */
1844 if (winreg && !no_regs_p)
1845 badop = false;
1847 if (badop)
1848 goto fail;
1850 this_alternative_offmemok = offmemok;
1851 if (this_costly_alternative != NO_REGS)
1852 reject++;
1853 /* If the operand is dying, has a matching constraint,
1854 and satisfies constraints of the matched operand
1855 which failed to satisfy the own constraints, we do
1856 not need to generate a reload insn for this
1857 operand. */
1858 if (!(this_alternative_matches >= 0
1859 && !curr_alt_win[this_alternative_matches]
1860 && REG_P (op)
1861 && find_regno_note (curr_insn, REG_DEAD, REGNO (op))
1862 && (hard_regno[nop] >= 0
1863 ? in_hard_reg_set_p (this_alternative_set,
1864 mode, hard_regno[nop])
1865 : in_class_p (op, this_alternative, NULL))))
1866 losers++;
1867 if (operand_reg[nop] != NULL_RTX
1868 /* Output operands and matched input operands are
1869 not inherited. The following conditions do not
1870 exactly describe the previous statement but they
1871 are pretty close. */
1872 && curr_static_id->operand[nop].type != OP_OUT
1873 && (this_alternative_matches < 0
1874 || curr_static_id->operand[nop].type != OP_IN))
1876 int last_reload = (lra_reg_info[ORIGINAL_REGNO
1877 (operand_reg[nop])]
1878 .last_reload);
1880 if (last_reload > bb_reload_num)
1881 reload_sum += last_reload - bb_reload_num;
1883 /* If this is a constant that is reloaded into the
1884 desired class by copying it to memory first, count
1885 that as another reload. This is consistent with
1886 other code and is required to avoid choosing another
1887 alternative when the constant is moved into memory.
1888 Note that the test here is precisely the same as in
1889 the code below that calls force_const_mem. */
1890 if (CONST_POOL_OK_P (mode, op)
1891 && ((targetm.preferred_reload_class
1892 (op, this_alternative) == NO_REGS)
1893 || no_input_reloads_p))
1895 const_to_mem = 1;
1896 if (! no_regs_p)
1897 losers++;
1900 /* Alternative loses if it requires a type of reload not
1901 permitted for this insn. We can always reload
1902 objects with a REG_UNUSED note. */
1903 if ((curr_static_id->operand[nop].type != OP_IN
1904 && no_output_reloads_p
1905 && ! find_reg_note (curr_insn, REG_UNUSED, op))
1906 || (curr_static_id->operand[nop].type != OP_OUT
1907 && no_input_reloads_p && ! const_to_mem))
1908 goto fail;
1910 /* Check strong discouragement of reload of non-constant
1911 into class THIS_ALTERNATIVE. */
1912 if (! CONSTANT_P (op) && ! no_regs_p
1913 && (targetm.preferred_reload_class
1914 (op, this_alternative) == NO_REGS
1915 || (curr_static_id->operand[nop].type == OP_OUT
1916 && (targetm.preferred_output_reload_class
1917 (op, this_alternative) == NO_REGS))))
1918 reject += LRA_MAX_REJECT;
1920 if (! ((const_to_mem && constmemok)
1921 || (MEM_P (op) && offmemok)))
1923 /* We prefer to reload pseudos over reloading other
1924 things, since such reloads may be able to be
1925 eliminated later. So bump REJECT in other cases.
1926 Don't do this in the case where we are forcing a
1927 constant into memory and it will then win since
1928 we don't want to have a different alternative
1929 match then. */
1930 if (! (REG_P (op) && REGNO (op) >= FIRST_PSEUDO_REGISTER))
1931 reject += 2;
1933 if (! no_regs_p)
1934 reload_nregs
1935 += ira_reg_class_max_nregs[this_alternative][mode];
1938 /* We are trying to spill pseudo into memory. It is
1939 usually more costly than moving to a hard register
1940 although it might takes the same number of
1941 reloads. */
1942 if (no_regs_p && REG_P (op))
1943 reject++;
1945 /* Input reloads can be inherited more often than output
1946 reloads can be removed, so penalize output
1947 reloads. */
1948 if (!REG_P (op) || curr_static_id->operand[nop].type != OP_IN)
1949 reject++;
1952 if (early_clobber_p)
1953 reject++;
1954 /* ??? We check early clobbers after processing all operands
1955 (see loop below) and there we update the costs more.
1956 Should we update the cost (may be approximately) here
1957 because of early clobber register reloads or it is a rare
1958 or non-important thing to be worth to do it. */
1959 overall = losers * LRA_LOSER_COST_FACTOR + reject;
1960 if ((best_losers == 0 || losers != 0) && best_overall < overall)
1961 goto fail;
1963 curr_alt[nop] = this_alternative;
1964 COPY_HARD_REG_SET (curr_alt_set[nop], this_alternative_set);
1965 curr_alt_win[nop] = this_alternative_win;
1966 curr_alt_match_win[nop] = this_alternative_match_win;
1967 curr_alt_offmemok[nop] = this_alternative_offmemok;
1968 curr_alt_matches[nop] = this_alternative_matches;
1970 if (this_alternative_matches >= 0
1971 && !did_match && !this_alternative_win)
1972 curr_alt_win[this_alternative_matches] = false;
1974 if (early_clobber_p && operand_reg[nop] != NULL_RTX)
1975 early_clobbered_nops[early_clobbered_regs_num++] = nop;
1977 ok_p = true;
1978 curr_alt_dont_inherit_ops_num = 0;
1979 for (nop = 0; nop < early_clobbered_regs_num; nop++)
1981 int i, j, clobbered_hard_regno;
1982 HARD_REG_SET temp_set;
1984 i = early_clobbered_nops[nop];
1985 if ((! curr_alt_win[i] && ! curr_alt_match_win[i])
1986 || hard_regno[i] < 0)
1987 continue;
1988 clobbered_hard_regno = hard_regno[i];
1989 CLEAR_HARD_REG_SET (temp_set);
1990 add_to_hard_reg_set (&temp_set, biggest_mode[i], clobbered_hard_regno);
1991 for (j = 0; j < n_operands; j++)
1992 if (j == i
1993 /* We don't want process insides of match_operator and
1994 match_parallel because otherwise we would process
1995 their operands once again generating a wrong
1996 code. */
1997 || curr_static_id->operand[j].is_operator)
1998 continue;
1999 else if ((curr_alt_matches[j] == i && curr_alt_match_win[j])
2000 || (curr_alt_matches[i] == j && curr_alt_match_win[i]))
2001 continue;
2002 else if (uses_hard_regs_p (*curr_id->operand_loc[j], temp_set))
2003 break;
2004 if (j >= n_operands)
2005 continue;
2006 /* We need to reload early clobbered register. */
2007 for (j = 0; j < n_operands; j++)
2008 if (curr_alt_matches[j] == i)
2010 curr_alt_match_win[j] = false;
2011 losers++;
2012 overall += LRA_LOSER_COST_FACTOR;
2014 if (! curr_alt_match_win[i])
2015 curr_alt_dont_inherit_ops[curr_alt_dont_inherit_ops_num++] = i;
2016 else
2018 /* Remember pseudos used for match reloads are never
2019 inherited. */
2020 lra_assert (curr_alt_matches[i] >= 0);
2021 curr_alt_win[curr_alt_matches[i]] = false;
2023 curr_alt_win[i] = curr_alt_match_win[i] = false;
2024 losers++;
2025 overall += LRA_LOSER_COST_FACTOR;
2027 small_class_operands_num = 0;
2028 for (nop = 0; nop < n_operands; nop++)
2029 small_class_operands_num
2030 += SMALL_REGISTER_CLASS_P (curr_alt[nop]) ? 1 : 0;
2032 /* If this alternative can be made to work by reloading, and it
2033 needs less reloading than the others checked so far, record
2034 it as the chosen goal for reloading. */
2035 if ((best_losers != 0 && losers == 0)
2036 || (((best_losers == 0 && losers == 0)
2037 || (best_losers != 0 && losers != 0))
2038 && (best_overall > overall
2039 || (best_overall == overall
2040 /* If the cost of the reloads is the same,
2041 prefer alternative which requires minimal
2042 number of small register classes for the
2043 operands. This improves chances of reloads
2044 for insn requiring small register
2045 classes. */
2046 && (small_class_operands_num
2047 < best_small_class_operands_num
2048 || (small_class_operands_num
2049 == best_small_class_operands_num
2050 && (reload_nregs < best_reload_nregs
2051 || (reload_nregs == best_reload_nregs
2052 && best_reload_sum < reload_sum))))))))
2054 for (nop = 0; nop < n_operands; nop++)
2056 goal_alt_win[nop] = curr_alt_win[nop];
2057 goal_alt_match_win[nop] = curr_alt_match_win[nop];
2058 goal_alt_matches[nop] = curr_alt_matches[nop];
2059 goal_alt[nop] = curr_alt[nop];
2060 goal_alt_offmemok[nop] = curr_alt_offmemok[nop];
2062 goal_alt_dont_inherit_ops_num = curr_alt_dont_inherit_ops_num;
2063 for (nop = 0; nop < curr_alt_dont_inherit_ops_num; nop++)
2064 goal_alt_dont_inherit_ops[nop] = curr_alt_dont_inherit_ops[nop];
2065 goal_alt_swapped = curr_swapped;
2066 best_overall = overall;
2067 best_losers = losers;
2068 best_small_class_operands_num = small_class_operands_num;
2069 best_reload_nregs = reload_nregs;
2070 best_reload_sum = reload_sum;
2071 goal_alt_number = nalt;
2073 if (losers == 0)
2074 /* Everything is satisfied. Do not process alternatives
2075 anymore. */
2076 break;
2077 fail:
2080 return ok_p;
2083 /* Return 1 if ADDR is a valid memory address for mode MODE in address
2084 space AS, and check that each pseudo has the proper kind of hard
2085 reg. */
2086 static int
2087 valid_address_p (enum machine_mode mode ATTRIBUTE_UNUSED,
2088 rtx addr, addr_space_t as)
2090 #ifdef GO_IF_LEGITIMATE_ADDRESS
2091 lra_assert (ADDR_SPACE_GENERIC_P (as));
2092 GO_IF_LEGITIMATE_ADDRESS (mode, addr, win);
2093 return 0;
2095 win:
2096 return 1;
2097 #else
2098 return targetm.addr_space.legitimate_address_p (mode, addr, 0, as);
2099 #endif
2102 /* Return whether address AD is valid. */
2104 static bool
2105 valid_address_p (struct address_info *ad)
2107 /* Some ports do not check displacements for eliminable registers,
2108 so we replace them temporarily with the elimination target. */
2109 rtx saved_base_reg = NULL_RTX;
2110 rtx saved_index_reg = NULL_RTX;
2111 rtx *base_term = strip_subreg (ad->base_term);
2112 rtx *index_term = strip_subreg (ad->index_term);
2113 if (base_term != NULL)
2115 saved_base_reg = *base_term;
2116 lra_eliminate_reg_if_possible (base_term);
2117 if (ad->base_term2 != NULL)
2118 *ad->base_term2 = *ad->base_term;
2120 if (index_term != NULL)
2122 saved_index_reg = *index_term;
2123 lra_eliminate_reg_if_possible (index_term);
2125 bool ok_p = valid_address_p (ad->mode, *ad->outer, ad->as);
2126 if (saved_base_reg != NULL_RTX)
2128 *base_term = saved_base_reg;
2129 if (ad->base_term2 != NULL)
2130 *ad->base_term2 = *ad->base_term;
2132 if (saved_index_reg != NULL_RTX)
2133 *index_term = saved_index_reg;
2134 return ok_p;
2137 /* Make reload base reg + disp from address AD. Return the new pseudo. */
2138 static rtx
2139 base_plus_disp_to_reg (struct address_info *ad)
2141 enum reg_class cl;
2142 rtx new_reg;
2144 lra_assert (ad->base == ad->base_term && ad->disp == ad->disp_term);
2145 cl = base_reg_class (ad->mode, ad->as, ad->base_outer_code,
2146 get_index_code (ad));
2147 new_reg = lra_create_new_reg (GET_MODE (*ad->base_term), NULL_RTX,
2148 cl, "base + disp");
2149 lra_emit_add (new_reg, *ad->base_term, *ad->disp_term);
2150 return new_reg;
2153 /* Return true if we can add a displacement to address AD, even if that
2154 makes the address invalid. The fix-up code requires any new address
2155 to be the sum of the BASE_TERM, INDEX and DISP_TERM fields. */
2156 static bool
2157 can_add_disp_p (struct address_info *ad)
2159 return (!ad->autoinc_p
2160 && ad->segment == NULL
2161 && ad->base == ad->base_term
2162 && ad->disp == ad->disp_term);
2165 /* Make equiv substitution in address AD. Return true if a substitution
2166 was made. */
2167 static bool
2168 equiv_address_substitution (struct address_info *ad)
2170 rtx base_reg, new_base_reg, index_reg, new_index_reg, *base_term, *index_term;
2171 HOST_WIDE_INT disp, scale;
2172 bool change_p;
2174 base_term = strip_subreg (ad->base_term);
2175 if (base_term == NULL)
2176 base_reg = new_base_reg = NULL_RTX;
2177 else
2179 base_reg = *base_term;
2180 new_base_reg = get_equiv_substitution (base_reg);
2182 index_term = strip_subreg (ad->index_term);
2183 if (index_term == NULL)
2184 index_reg = new_index_reg = NULL_RTX;
2185 else
2187 index_reg = *index_term;
2188 new_index_reg = get_equiv_substitution (index_reg);
2190 if (base_reg == new_base_reg && index_reg == new_index_reg)
2191 return false;
2192 disp = 0;
2193 change_p = false;
2194 if (lra_dump_file != NULL)
2196 fprintf (lra_dump_file, "Changing address in insn %d ",
2197 INSN_UID (curr_insn));
2198 print_value_slim (lra_dump_file, *ad->outer, 1);
2200 if (base_reg != new_base_reg)
2202 if (REG_P (new_base_reg))
2204 *base_term = new_base_reg;
2205 change_p = true;
2207 else if (GET_CODE (new_base_reg) == PLUS
2208 && REG_P (XEXP (new_base_reg, 0))
2209 && CONST_INT_P (XEXP (new_base_reg, 1))
2210 && can_add_disp_p (ad))
2212 disp += INTVAL (XEXP (new_base_reg, 1));
2213 *base_term = XEXP (new_base_reg, 0);
2214 change_p = true;
2216 if (ad->base_term2 != NULL)
2217 *ad->base_term2 = *ad->base_term;
2219 if (index_reg != new_index_reg)
2221 if (REG_P (new_index_reg))
2223 *index_term = new_index_reg;
2224 change_p = true;
2226 else if (GET_CODE (new_index_reg) == PLUS
2227 && REG_P (XEXP (new_index_reg, 0))
2228 && CONST_INT_P (XEXP (new_index_reg, 1))
2229 && can_add_disp_p (ad)
2230 && (scale = get_index_scale (ad)))
2232 disp += INTVAL (XEXP (new_index_reg, 1)) * scale;
2233 *index_term = XEXP (new_index_reg, 0);
2234 change_p = true;
2237 if (disp != 0)
2239 if (ad->disp != NULL)
2240 *ad->disp = plus_constant (GET_MODE (*ad->inner), *ad->disp, disp);
2241 else
2243 *ad->inner = plus_constant (GET_MODE (*ad->inner), *ad->inner, disp);
2244 update_address (ad);
2246 change_p = true;
2248 if (lra_dump_file != NULL)
2250 if (! change_p)
2251 fprintf (lra_dump_file, " -- no change\n");
2252 else
2254 fprintf (lra_dump_file, " on equiv ");
2255 print_value_slim (lra_dump_file, *ad->outer, 1);
2256 fprintf (lra_dump_file, "\n");
2259 return change_p;
2262 /* Major function to make reloads for an address in operand NOP.
2263 The supported cases are:
2265 1) an address that existed before LRA started, at which point it must
2266 have been valid. These addresses are subject to elimination and
2267 may have become invalid due to the elimination offset being out
2268 of range.
2270 2) an address created by forcing a constant to memory (force_const_to_mem).
2271 The initial form of these addresses might not be valid, and it is this
2272 function's job to make them valid.
2274 3) a frame address formed from a register and a (possibly zero)
2275 constant offset. As above, these addresses might not be valid
2276 and this function must make them so.
2278 Add reloads to the lists *BEFORE and *AFTER. We might need to add
2279 reloads to *AFTER because of inc/dec, {pre, post} modify in the
2280 address. Return true for any RTL change. */
2281 static bool
2282 process_address (int nop, rtx *before, rtx *after)
2284 struct address_info ad;
2285 rtx new_reg;
2286 rtx op = *curr_id->operand_loc[nop];
2287 const char *constraint = curr_static_id->operand[nop].constraint;
2288 bool change_p;
2290 if (constraint[0] == 'p'
2291 || EXTRA_ADDRESS_CONSTRAINT (constraint[0], constraint))
2292 decompose_lea_address (&ad, curr_id->operand_loc[nop]);
2293 else if (MEM_P (op))
2294 decompose_mem_address (&ad, op);
2295 else if (GET_CODE (op) == SUBREG
2296 && MEM_P (SUBREG_REG (op)))
2297 decompose_mem_address (&ad, SUBREG_REG (op));
2298 else
2299 return false;
2300 change_p = equiv_address_substitution (&ad);
2301 if (ad.base_term != NULL
2302 && (process_addr_reg
2303 (ad.base_term, before,
2304 (ad.autoinc_p
2305 && !(REG_P (*ad.base_term)
2306 && find_regno_note (curr_insn, REG_DEAD,
2307 REGNO (*ad.base_term)) != NULL_RTX)
2308 ? after : NULL),
2309 base_reg_class (ad.mode, ad.as, ad.base_outer_code,
2310 get_index_code (&ad)))))
2312 change_p = true;
2313 if (ad.base_term2 != NULL)
2314 *ad.base_term2 = *ad.base_term;
2316 if (ad.index_term != NULL
2317 && process_addr_reg (ad.index_term, before, NULL, INDEX_REG_CLASS))
2318 change_p = true;
2320 /* There are three cases where the shape of *AD.INNER may now be invalid:
2322 1) the original address was valid, but either elimination or
2323 equiv_address_substitution applied a displacement that made
2324 it invalid.
2326 2) the address is an invalid symbolic address created by
2327 force_const_to_mem.
2329 3) the address is a frame address with an invalid offset.
2331 All these cases involve a displacement and a non-autoinc address,
2332 so there is no point revalidating other types. */
2333 if (ad.disp == NULL || ad.autoinc_p || valid_address_p (&ad))
2334 return change_p;
2336 /* Any index existed before LRA started, so we can assume that the
2337 presence and shape of the index is valid. */
2338 push_to_sequence (*before);
2339 gcc_assert (ad.segment == NULL);
2340 gcc_assert (ad.disp == ad.disp_term);
2341 if (ad.base == NULL)
2343 if (ad.index == NULL)
2345 int code = -1;
2346 enum reg_class cl = base_reg_class (ad.mode, ad.as,
2347 SCRATCH, SCRATCH);
2348 rtx disp = *ad.disp;
2350 new_reg = lra_create_new_reg (Pmode, NULL_RTX, cl, "disp");
2351 #ifdef HAVE_lo_sum
2353 rtx insn;
2354 rtx last = get_last_insn ();
2356 /* disp => lo_sum (new_base, disp), case (2) above. */
2357 insn = emit_insn (gen_rtx_SET
2358 (VOIDmode, new_reg,
2359 gen_rtx_HIGH (Pmode, copy_rtx (disp))));
2360 code = recog_memoized (insn);
2361 if (code >= 0)
2363 *ad.disp = gen_rtx_LO_SUM (Pmode, new_reg, disp);
2364 if (! valid_address_p (ad.mode, *ad.outer, ad.as))
2366 *ad.disp = disp;
2367 code = -1;
2370 if (code < 0)
2371 delete_insns_since (last);
2373 #endif
2374 if (code < 0)
2376 /* disp => new_base, case (2) above. */
2377 lra_emit_move (new_reg, disp);
2378 *ad.disp = new_reg;
2381 else
2383 /* index * scale + disp => new base + index * scale,
2384 case (1) above. */
2385 enum reg_class cl = base_reg_class (ad.mode, ad.as, PLUS,
2386 GET_CODE (*ad.index));
2388 lra_assert (INDEX_REG_CLASS != NO_REGS);
2389 new_reg = lra_create_new_reg (Pmode, NULL_RTX, cl, "disp");
2390 lra_emit_move (new_reg, *ad.disp);
2391 *ad.inner = simplify_gen_binary (PLUS, GET_MODE (new_reg),
2392 new_reg, *ad.index);
2395 else if (ad.index == NULL)
2397 /* base + disp => new base, cases (1) and (3) above. */
2398 /* Another option would be to reload the displacement into an
2399 index register. However, postreload has code to optimize
2400 address reloads that have the same base and different
2401 displacements, so reloading into an index register would
2402 not necessarily be a win. */
2403 new_reg = base_plus_disp_to_reg (&ad);
2404 *ad.inner = new_reg;
2406 else
2408 /* base + scale * index + disp => new base + scale * index,
2409 case (1) above. */
2410 new_reg = base_plus_disp_to_reg (&ad);
2411 *ad.inner = simplify_gen_binary (PLUS, GET_MODE (new_reg),
2412 new_reg, *ad.index);
2414 *before = get_insns ();
2415 end_sequence ();
2416 return true;
2419 /* Emit insns to reload VALUE into a new register. VALUE is an
2420 auto-increment or auto-decrement RTX whose operand is a register or
2421 memory location; so reloading involves incrementing that location.
2422 IN is either identical to VALUE, or some cheaper place to reload
2423 value being incremented/decremented from.
2425 INC_AMOUNT is the number to increment or decrement by (always
2426 positive and ignored for POST_MODIFY/PRE_MODIFY).
2428 Return pseudo containing the result. */
2429 static rtx
2430 emit_inc (enum reg_class new_rclass, rtx in, rtx value, int inc_amount)
2432 /* REG or MEM to be copied and incremented. */
2433 rtx incloc = XEXP (value, 0);
2434 /* Nonzero if increment after copying. */
2435 int post = (GET_CODE (value) == POST_DEC || GET_CODE (value) == POST_INC
2436 || GET_CODE (value) == POST_MODIFY);
2437 rtx last;
2438 rtx inc;
2439 rtx add_insn;
2440 int code;
2441 rtx real_in = in == value ? incloc : in;
2442 rtx result;
2443 bool plus_p = true;
2445 if (GET_CODE (value) == PRE_MODIFY || GET_CODE (value) == POST_MODIFY)
2447 lra_assert (GET_CODE (XEXP (value, 1)) == PLUS
2448 || GET_CODE (XEXP (value, 1)) == MINUS);
2449 lra_assert (rtx_equal_p (XEXP (XEXP (value, 1), 0), XEXP (value, 0)));
2450 plus_p = GET_CODE (XEXP (value, 1)) == PLUS;
2451 inc = XEXP (XEXP (value, 1), 1);
2453 else
2455 if (GET_CODE (value) == PRE_DEC || GET_CODE (value) == POST_DEC)
2456 inc_amount = -inc_amount;
2458 inc = GEN_INT (inc_amount);
2461 if (! post && REG_P (incloc))
2462 result = incloc;
2463 else
2464 result = lra_create_new_reg (GET_MODE (value), value, new_rclass,
2465 "INC/DEC result");
2467 if (real_in != result)
2469 /* First copy the location to the result register. */
2470 lra_assert (REG_P (result));
2471 emit_insn (gen_move_insn (result, real_in));
2474 /* We suppose that there are insns to add/sub with the constant
2475 increment permitted in {PRE/POST)_{DEC/INC/MODIFY}. At least the
2476 old reload worked with this assumption. If the assumption
2477 becomes wrong, we should use approach in function
2478 base_plus_disp_to_reg. */
2479 if (in == value)
2481 /* See if we can directly increment INCLOC. */
2482 last = get_last_insn ();
2483 add_insn = emit_insn (plus_p
2484 ? gen_add2_insn (incloc, inc)
2485 : gen_sub2_insn (incloc, inc));
2487 code = recog_memoized (add_insn);
2488 if (code >= 0)
2490 if (! post && result != incloc)
2491 emit_insn (gen_move_insn (result, incloc));
2492 return result;
2494 delete_insns_since (last);
2497 /* If couldn't do the increment directly, must increment in RESULT.
2498 The way we do this depends on whether this is pre- or
2499 post-increment. For pre-increment, copy INCLOC to the reload
2500 register, increment it there, then save back. */
2501 if (! post)
2503 if (real_in != result)
2504 emit_insn (gen_move_insn (result, real_in));
2505 if (plus_p)
2506 emit_insn (gen_add2_insn (result, inc));
2507 else
2508 emit_insn (gen_sub2_insn (result, inc));
2509 if (result != incloc)
2510 emit_insn (gen_move_insn (incloc, result));
2512 else
2514 /* Post-increment.
2516 Because this might be a jump insn or a compare, and because
2517 RESULT may not be available after the insn in an input
2518 reload, we must do the incrementing before the insn being
2519 reloaded for.
2521 We have already copied IN to RESULT. Increment the copy in
2522 RESULT, save that back, then decrement RESULT so it has
2523 the original value. */
2524 if (plus_p)
2525 emit_insn (gen_add2_insn (result, inc));
2526 else
2527 emit_insn (gen_sub2_insn (result, inc));
2528 emit_insn (gen_move_insn (incloc, result));
2529 /* Restore non-modified value for the result. We prefer this
2530 way because it does not require an additional hard
2531 register. */
2532 if (plus_p)
2534 if (CONST_INT_P (inc))
2535 emit_insn (gen_add2_insn (result, GEN_INT (-INTVAL (inc))));
2536 else
2537 emit_insn (gen_sub2_insn (result, inc));
2539 else
2540 emit_insn (gen_add2_insn (result, inc));
2542 return result;
2545 /* Swap operands NOP and NOP + 1. */
2546 static inline void
2547 swap_operands (int nop)
2549 enum machine_mode mode = curr_operand_mode[nop];
2550 curr_operand_mode[nop] = curr_operand_mode[nop + 1];
2551 curr_operand_mode[nop + 1] = mode;
2552 rtx x = *curr_id->operand_loc[nop];
2553 *curr_id->operand_loc[nop] = *curr_id->operand_loc[nop + 1];
2554 *curr_id->operand_loc[nop + 1] = x;
2555 /* Swap the duplicates too. */
2556 lra_update_dup (curr_id, nop);
2557 lra_update_dup (curr_id, nop + 1);
2560 /* Main entry point of the constraint code: search the body of the
2561 current insn to choose the best alternative. It is mimicking insn
2562 alternative cost calculation model of former reload pass. That is
2563 because machine descriptions were written to use this model. This
2564 model can be changed in future. Make commutative operand exchange
2565 if it is chosen.
2567 Return true if some RTL changes happened during function call. */
2568 static bool
2569 curr_insn_transform (void)
2571 int i, j, k;
2572 int n_operands;
2573 int n_alternatives;
2574 int commutative;
2575 signed char goal_alt_matched[MAX_RECOG_OPERANDS][MAX_RECOG_OPERANDS];
2576 rtx before, after;
2577 bool alt_p = false;
2578 /* Flag that the insn has been changed through a transformation. */
2579 bool change_p;
2580 bool sec_mem_p;
2581 #ifdef SECONDARY_MEMORY_NEEDED
2582 bool use_sec_mem_p;
2583 #endif
2584 int max_regno_before;
2585 int reused_alternative_num;
2587 no_input_reloads_p = no_output_reloads_p = false;
2588 goal_alt_number = -1;
2590 if (check_and_process_move (&change_p, &sec_mem_p))
2591 return change_p;
2593 /* JUMP_INSNs and CALL_INSNs are not allowed to have any output
2594 reloads; neither are insns that SET cc0. Insns that use CC0 are
2595 not allowed to have any input reloads. */
2596 if (JUMP_P (curr_insn) || CALL_P (curr_insn))
2597 no_output_reloads_p = true;
2599 #ifdef HAVE_cc0
2600 if (reg_referenced_p (cc0_rtx, PATTERN (curr_insn)))
2601 no_input_reloads_p = true;
2602 if (reg_set_p (cc0_rtx, PATTERN (curr_insn)))
2603 no_output_reloads_p = true;
2604 #endif
2606 n_operands = curr_static_id->n_operands;
2607 n_alternatives = curr_static_id->n_alternatives;
2609 /* Just return "no reloads" if insn has no operands with
2610 constraints. */
2611 if (n_operands == 0 || n_alternatives == 0)
2612 return false;
2614 max_regno_before = max_reg_num ();
2616 for (i = 0; i < n_operands; i++)
2618 goal_alt_matched[i][0] = -1;
2619 goal_alt_matches[i] = -1;
2622 commutative = curr_static_id->commutative;
2624 /* Now see what we need for pseudos that didn't get hard regs or got
2625 the wrong kind of hard reg. For this, we must consider all the
2626 operands together against the register constraints. */
2628 best_losers = best_overall = INT_MAX;
2629 best_small_class_operands_num = best_reload_sum = 0;
2631 curr_swapped = false;
2632 goal_alt_swapped = false;
2634 /* Make equivalence substitution and memory subreg elimination
2635 before address processing because an address legitimacy can
2636 depend on memory mode. */
2637 for (i = 0; i < n_operands; i++)
2639 rtx op = *curr_id->operand_loc[i];
2640 rtx subst, old = op;
2641 bool op_change_p = false;
2643 if (GET_CODE (old) == SUBREG)
2644 old = SUBREG_REG (old);
2645 subst = get_equiv_substitution (old);
2646 if (subst != old)
2648 subst = copy_rtx (subst);
2649 lra_assert (REG_P (old));
2650 if (GET_CODE (op) == SUBREG)
2651 SUBREG_REG (op) = subst;
2652 else
2653 *curr_id->operand_loc[i] = subst;
2654 if (lra_dump_file != NULL)
2656 fprintf (lra_dump_file,
2657 "Changing pseudo %d in operand %i of insn %u on equiv ",
2658 REGNO (old), i, INSN_UID (curr_insn));
2659 print_value_slim (lra_dump_file, subst, 1);
2660 fprintf (lra_dump_file, "\n");
2662 op_change_p = change_p = true;
2664 if (simplify_operand_subreg (i, GET_MODE (old)) || op_change_p)
2666 change_p = true;
2667 lra_update_dup (curr_id, i);
2671 /* Reload address registers and displacements. We do it before
2672 finding an alternative because of memory constraints. */
2673 before = after = NULL_RTX;
2674 for (i = 0; i < n_operands; i++)
2675 if (! curr_static_id->operand[i].is_operator
2676 && process_address (i, &before, &after))
2678 change_p = true;
2679 lra_update_dup (curr_id, i);
2682 if (change_p)
2683 /* If we've changed the instruction then any alternative that
2684 we chose previously may no longer be valid. */
2685 lra_set_used_insn_alternative (curr_insn, -1);
2687 try_swapped:
2689 reused_alternative_num = curr_id->used_insn_alternative;
2690 if (lra_dump_file != NULL && reused_alternative_num >= 0)
2691 fprintf (lra_dump_file, "Reusing alternative %d for insn #%u\n",
2692 reused_alternative_num, INSN_UID (curr_insn));
2694 if (process_alt_operands (reused_alternative_num))
2695 alt_p = true;
2697 /* If insn is commutative (it's safe to exchange a certain pair of
2698 operands) then we need to try each alternative twice, the second
2699 time matching those two operands as if we had exchanged them. To
2700 do this, really exchange them in operands.
2702 If we have just tried the alternatives the second time, return
2703 operands to normal and drop through. */
2705 if (reused_alternative_num < 0 && commutative >= 0)
2707 curr_swapped = !curr_swapped;
2708 if (curr_swapped)
2710 swap_operands (commutative);
2711 goto try_swapped;
2713 else
2714 swap_operands (commutative);
2717 /* The operands don't meet the constraints. goal_alt describes the
2718 alternative that we could reach by reloading the fewest operands.
2719 Reload so as to fit it. */
2721 if (! alt_p && ! sec_mem_p)
2723 /* No alternative works with reloads?? */
2724 if (INSN_CODE (curr_insn) >= 0)
2725 fatal_insn ("unable to generate reloads for:", curr_insn);
2726 error_for_asm (curr_insn,
2727 "inconsistent operand constraints in an %<asm%>");
2728 /* Avoid further trouble with this insn. */
2729 PATTERN (curr_insn) = gen_rtx_USE (VOIDmode, const0_rtx);
2730 lra_invalidate_insn_data (curr_insn);
2731 return true;
2734 /* If the best alternative is with operands 1 and 2 swapped, swap
2735 them. Update the operand numbers of any reloads already
2736 pushed. */
2738 if (goal_alt_swapped)
2740 if (lra_dump_file != NULL)
2741 fprintf (lra_dump_file, " Commutative operand exchange in insn %u\n",
2742 INSN_UID (curr_insn));
2744 /* Swap the duplicates too. */
2745 swap_operands (commutative);
2746 change_p = true;
2749 #ifdef SECONDARY_MEMORY_NEEDED
2750 /* Some target macros SECONDARY_MEMORY_NEEDED (e.g. x86) are defined
2751 too conservatively. So we use the secondary memory only if there
2752 is no any alternative without reloads. */
2753 use_sec_mem_p = false;
2754 if (! alt_p)
2755 use_sec_mem_p = true;
2756 else if (sec_mem_p)
2758 for (i = 0; i < n_operands; i++)
2759 if (! goal_alt_win[i] && ! goal_alt_match_win[i])
2760 break;
2761 use_sec_mem_p = i < n_operands;
2764 if (use_sec_mem_p)
2766 rtx new_reg, set, src, dest;
2767 enum machine_mode sec_mode;
2769 lra_assert (sec_mem_p);
2770 set = single_set (curr_insn);
2771 lra_assert (set != NULL_RTX && ! side_effects_p (set));
2772 dest = SET_DEST (set);
2773 src = SET_SRC (set);
2774 #ifdef SECONDARY_MEMORY_NEEDED_MODE
2775 sec_mode = SECONDARY_MEMORY_NEEDED_MODE (GET_MODE (src));
2776 #else
2777 sec_mode = GET_MODE (src);
2778 #endif
2779 new_reg = lra_create_new_reg (sec_mode, NULL_RTX,
2780 NO_REGS, "secondary");
2781 /* If the mode is changed, it should be wider. */
2782 lra_assert (GET_MODE_SIZE (GET_MODE (new_reg))
2783 >= GET_MODE_SIZE (GET_MODE (src)));
2784 after = emit_spill_move (false, new_reg, dest);
2785 lra_process_new_insns (curr_insn, NULL_RTX, after,
2786 "Inserting the sec. move");
2787 before = emit_spill_move (true, new_reg, src);
2788 lra_process_new_insns (curr_insn, before, NULL_RTX, "Changing on");
2789 lra_set_insn_deleted (curr_insn);
2790 return true;
2792 #endif
2794 lra_assert (goal_alt_number >= 0);
2795 lra_set_used_insn_alternative (curr_insn, goal_alt_number);
2797 if (lra_dump_file != NULL)
2799 const char *p;
2801 fprintf (lra_dump_file, " Choosing alt %d in insn %u:",
2802 goal_alt_number, INSN_UID (curr_insn));
2803 for (i = 0; i < n_operands; i++)
2805 p = (curr_static_id->operand_alternative
2806 [goal_alt_number * n_operands + i].constraint);
2807 if (*p == '\0')
2808 continue;
2809 fprintf (lra_dump_file, " (%d) ", i);
2810 for (; *p != '\0' && *p != ',' && *p != '#'; p++)
2811 fputc (*p, lra_dump_file);
2813 fprintf (lra_dump_file, "\n");
2816 /* Right now, for any pair of operands I and J that are required to
2817 match, with J < I, goal_alt_matches[I] is J. Add I to
2818 goal_alt_matched[J]. */
2820 for (i = 0; i < n_operands; i++)
2821 if ((j = goal_alt_matches[i]) >= 0)
2823 for (k = 0; goal_alt_matched[j][k] >= 0; k++)
2825 /* We allow matching one output operand and several input
2826 operands. */
2827 lra_assert (k == 0
2828 || (curr_static_id->operand[j].type == OP_OUT
2829 && curr_static_id->operand[i].type == OP_IN
2830 && (curr_static_id->operand
2831 [goal_alt_matched[j][0]].type == OP_IN)));
2832 goal_alt_matched[j][k] = i;
2833 goal_alt_matched[j][k + 1] = -1;
2836 for (i = 0; i < n_operands; i++)
2837 goal_alt_win[i] |= goal_alt_match_win[i];
2839 /* Any constants that aren't allowed and can't be reloaded into
2840 registers are here changed into memory references. */
2841 for (i = 0; i < n_operands; i++)
2842 if (goal_alt_win[i])
2844 int regno;
2845 enum reg_class new_class;
2846 rtx reg = *curr_id->operand_loc[i];
2848 if (GET_CODE (reg) == SUBREG)
2849 reg = SUBREG_REG (reg);
2851 if (REG_P (reg) && (regno = REGNO (reg)) >= FIRST_PSEUDO_REGISTER)
2853 bool ok_p = in_class_p (reg, goal_alt[i], &new_class);
2855 if (new_class != NO_REGS && get_reg_class (regno) != new_class)
2857 lra_assert (ok_p);
2858 change_class (regno, new_class, " Change", true);
2862 else
2864 const char *constraint;
2865 char c;
2866 rtx op = *curr_id->operand_loc[i];
2867 rtx subreg = NULL_RTX;
2868 enum machine_mode mode = curr_operand_mode[i];
2870 if (GET_CODE (op) == SUBREG)
2872 subreg = op;
2873 op = SUBREG_REG (op);
2874 mode = GET_MODE (op);
2877 if (CONST_POOL_OK_P (mode, op)
2878 && ((targetm.preferred_reload_class
2879 (op, (enum reg_class) goal_alt[i]) == NO_REGS)
2880 || no_input_reloads_p))
2882 rtx tem = force_const_mem (mode, op);
2884 change_p = true;
2885 if (subreg != NULL_RTX)
2886 tem = gen_rtx_SUBREG (mode, tem, SUBREG_BYTE (subreg));
2888 *curr_id->operand_loc[i] = tem;
2889 lra_update_dup (curr_id, i);
2890 process_address (i, &before, &after);
2892 /* If the alternative accepts constant pool refs directly
2893 there will be no reload needed at all. */
2894 if (subreg != NULL_RTX)
2895 continue;
2896 /* Skip alternatives before the one requested. */
2897 constraint = (curr_static_id->operand_alternative
2898 [goal_alt_number * n_operands + i].constraint);
2899 for (;
2900 (c = *constraint) && c != ',' && c != '#';
2901 constraint += CONSTRAINT_LEN (c, constraint))
2903 if (c == TARGET_MEM_CONSTRAINT || c == 'o')
2904 break;
2905 #ifdef EXTRA_CONSTRAINT_STR
2906 if (EXTRA_MEMORY_CONSTRAINT (c, constraint)
2907 && EXTRA_CONSTRAINT_STR (tem, c, constraint))
2908 break;
2909 #endif
2911 if (c == '\0' || c == ',' || c == '#')
2912 continue;
2914 goal_alt_win[i] = true;
2918 for (i = 0; i < n_operands; i++)
2920 rtx old, new_reg;
2921 rtx op = *curr_id->operand_loc[i];
2923 if (goal_alt_win[i])
2925 if (goal_alt[i] == NO_REGS
2926 && REG_P (op)
2927 /* When we assign NO_REGS it means that we will not
2928 assign a hard register to the scratch pseudo by
2929 assigment pass and the scratch pseudo will be
2930 spilled. Spilled scratch pseudos are transformed
2931 back to scratches at the LRA end. */
2932 && lra_former_scratch_operand_p (curr_insn, i))
2933 change_class (REGNO (op), NO_REGS, " Change", true);
2934 continue;
2937 /* Operands that match previous ones have already been handled. */
2938 if (goal_alt_matches[i] >= 0)
2939 continue;
2941 /* We should not have an operand with a non-offsettable address
2942 appearing where an offsettable address will do. It also may
2943 be a case when the address should be special in other words
2944 not a general one (e.g. it needs no index reg). */
2945 if (goal_alt_matched[i][0] == -1 && goal_alt_offmemok[i] && MEM_P (op))
2947 enum reg_class rclass;
2948 rtx *loc = &XEXP (op, 0);
2949 enum rtx_code code = GET_CODE (*loc);
2951 push_to_sequence (before);
2952 rclass = base_reg_class (GET_MODE (op), MEM_ADDR_SPACE (op),
2953 MEM, SCRATCH);
2954 if (GET_RTX_CLASS (code) == RTX_AUTOINC)
2955 new_reg = emit_inc (rclass, *loc, *loc,
2956 /* This value does not matter for MODIFY. */
2957 GET_MODE_SIZE (GET_MODE (op)));
2958 else if (get_reload_reg (OP_IN, Pmode, *loc, rclass,
2959 "offsetable address", &new_reg))
2960 lra_emit_move (new_reg, *loc);
2961 before = get_insns ();
2962 end_sequence ();
2963 *loc = new_reg;
2964 lra_update_dup (curr_id, i);
2966 else if (goal_alt_matched[i][0] == -1)
2968 enum machine_mode mode;
2969 rtx reg, *loc;
2970 int hard_regno, byte;
2971 enum op_type type = curr_static_id->operand[i].type;
2973 loc = curr_id->operand_loc[i];
2974 mode = curr_operand_mode[i];
2975 if (GET_CODE (*loc) == SUBREG)
2977 reg = SUBREG_REG (*loc);
2978 byte = SUBREG_BYTE (*loc);
2979 if (REG_P (reg)
2980 /* Strict_low_part requires reload the register not
2981 the sub-register. */
2982 && (curr_static_id->operand[i].strict_low
2983 || (GET_MODE_SIZE (mode)
2984 <= GET_MODE_SIZE (GET_MODE (reg))
2985 && (hard_regno
2986 = get_try_hard_regno (REGNO (reg))) >= 0
2987 && (simplify_subreg_regno
2988 (hard_regno,
2989 GET_MODE (reg), byte, mode) < 0)
2990 && (goal_alt[i] == NO_REGS
2991 || (simplify_subreg_regno
2992 (ira_class_hard_regs[goal_alt[i]][0],
2993 GET_MODE (reg), byte, mode) >= 0)))))
2995 loc = &SUBREG_REG (*loc);
2996 mode = GET_MODE (*loc);
2999 old = *loc;
3000 if (get_reload_reg (type, mode, old, goal_alt[i], "", &new_reg)
3001 && type != OP_OUT)
3003 push_to_sequence (before);
3004 lra_emit_move (new_reg, old);
3005 before = get_insns ();
3006 end_sequence ();
3008 *loc = new_reg;
3009 if (type != OP_IN
3010 && find_reg_note (curr_insn, REG_UNUSED, old) == NULL_RTX)
3012 start_sequence ();
3013 lra_emit_move (type == OP_INOUT ? copy_rtx (old) : old, new_reg);
3014 emit_insn (after);
3015 after = get_insns ();
3016 end_sequence ();
3017 *loc = new_reg;
3019 for (j = 0; j < goal_alt_dont_inherit_ops_num; j++)
3020 if (goal_alt_dont_inherit_ops[j] == i)
3022 lra_set_regno_unique_value (REGNO (new_reg));
3023 break;
3025 lra_update_dup (curr_id, i);
3027 else if (curr_static_id->operand[i].type == OP_IN
3028 && (curr_static_id->operand[goal_alt_matched[i][0]].type
3029 == OP_OUT))
3031 signed char arr[2];
3033 arr[0] = i;
3034 arr[1] = -1;
3035 match_reload (goal_alt_matched[i][0], arr,
3036 goal_alt[i], &before, &after);
3038 else if (curr_static_id->operand[i].type == OP_OUT
3039 && (curr_static_id->operand[goal_alt_matched[i][0]].type
3040 == OP_IN))
3041 match_reload (i, goal_alt_matched[i], goal_alt[i], &before, &after);
3042 else
3043 /* We must generate code in any case when function
3044 process_alt_operands decides that it is possible. */
3045 gcc_unreachable ();
3047 if (before != NULL_RTX || after != NULL_RTX
3048 || max_regno_before != max_reg_num ())
3049 change_p = true;
3050 if (change_p)
3052 lra_update_operator_dups (curr_id);
3053 /* Something changes -- process the insn. */
3054 lra_update_insn_regno_info (curr_insn);
3056 lra_process_new_insns (curr_insn, before, after, "Inserting insn reload");
3057 return change_p;
3060 /* Return true if X is in LIST. */
3061 static bool
3062 in_list_p (rtx x, rtx list)
3064 for (; list != NULL_RTX; list = XEXP (list, 1))
3065 if (XEXP (list, 0) == x)
3066 return true;
3067 return false;
3070 /* Return true if X contains an allocatable hard register (if
3071 HARD_REG_P) or a (spilled if SPILLED_P) pseudo. */
3072 static bool
3073 contains_reg_p (rtx x, bool hard_reg_p, bool spilled_p)
3075 int i, j;
3076 const char *fmt;
3077 enum rtx_code code;
3079 code = GET_CODE (x);
3080 if (REG_P (x))
3082 int regno = REGNO (x);
3083 HARD_REG_SET alloc_regs;
3085 if (hard_reg_p)
3087 if (regno >= FIRST_PSEUDO_REGISTER)
3088 regno = lra_get_regno_hard_regno (regno);
3089 if (regno < 0)
3090 return false;
3091 COMPL_HARD_REG_SET (alloc_regs, lra_no_alloc_regs);
3092 return overlaps_hard_reg_set_p (alloc_regs, GET_MODE (x), regno);
3094 else
3096 if (regno < FIRST_PSEUDO_REGISTER)
3097 return false;
3098 if (! spilled_p)
3099 return true;
3100 return lra_get_regno_hard_regno (regno) < 0;
3103 fmt = GET_RTX_FORMAT (code);
3104 for (i = GET_RTX_LENGTH (code) - 1; i >= 0; i--)
3106 if (fmt[i] == 'e')
3108 if (contains_reg_p (XEXP (x, i), hard_reg_p, spilled_p))
3109 return true;
3111 else if (fmt[i] == 'E')
3113 for (j = XVECLEN (x, i) - 1; j >= 0; j--)
3114 if (contains_reg_p (XVECEXP (x, i, j), hard_reg_p, spilled_p))
3115 return true;
3118 return false;
3121 /* Process all regs in location *LOC and change them on equivalent
3122 substitution. Return true if any change was done. */
3123 static bool
3124 loc_equivalence_change_p (rtx *loc)
3126 rtx subst, reg, x = *loc;
3127 bool result = false;
3128 enum rtx_code code = GET_CODE (x);
3129 const char *fmt;
3130 int i, j;
3132 if (code == SUBREG)
3134 reg = SUBREG_REG (x);
3135 if ((subst = get_equiv_substitution (reg)) != reg
3136 && GET_MODE (subst) == VOIDmode)
3138 /* We cannot reload debug location. Simplify subreg here
3139 while we know the inner mode. */
3140 *loc = simplify_gen_subreg (GET_MODE (x), subst,
3141 GET_MODE (reg), SUBREG_BYTE (x));
3142 return true;
3145 if (code == REG && (subst = get_equiv_substitution (x)) != x)
3147 *loc = subst;
3148 return true;
3151 /* Scan all the operand sub-expressions. */
3152 fmt = GET_RTX_FORMAT (code);
3153 for (i = GET_RTX_LENGTH (code) - 1; i >= 0; i--)
3155 if (fmt[i] == 'e')
3156 result = loc_equivalence_change_p (&XEXP (x, i)) || result;
3157 else if (fmt[i] == 'E')
3158 for (j = XVECLEN (x, i) - 1; j >= 0; j--)
3159 result
3160 = loc_equivalence_change_p (&XVECEXP (x, i, j)) || result;
3162 return result;
3165 /* Maximum allowed number of constraint pass iterations after the last
3166 spill pass. It is for preventing LRA cycling in a bug case. */
3167 #define MAX_CONSTRAINT_ITERATION_NUMBER 15
3169 /* Maximum number of generated reload insns per an insn. It is for
3170 preventing this pass cycling in a bug case. */
3171 #define MAX_RELOAD_INSNS_NUMBER LRA_MAX_INSN_RELOADS
3173 /* The current iteration number of this LRA pass. */
3174 int lra_constraint_iter;
3176 /* The current iteration number of this LRA pass after the last spill
3177 pass. */
3178 int lra_constraint_iter_after_spill;
3180 /* True if we substituted equiv which needs checking register
3181 allocation correctness because the equivalent value contains
3182 allocatable hard registers or when we restore multi-register
3183 pseudo. */
3184 bool lra_risky_transformations_p;
3186 /* Return true if REGNO is referenced in more than one block. */
3187 static bool
3188 multi_block_pseudo_p (int regno)
3190 basic_block bb = NULL;
3191 unsigned int uid;
3192 bitmap_iterator bi;
3194 if (regno < FIRST_PSEUDO_REGISTER)
3195 return false;
3197 EXECUTE_IF_SET_IN_BITMAP (&lra_reg_info[regno].insn_bitmap, 0, uid, bi)
3198 if (bb == NULL)
3199 bb = BLOCK_FOR_INSN (lra_insn_recog_data[uid]->insn);
3200 else if (BLOCK_FOR_INSN (lra_insn_recog_data[uid]->insn) != bb)
3201 return true;
3202 return false;
3205 /* Return true if X contains a pseudo dying in INSN. */
3206 static bool
3207 dead_pseudo_p (rtx x, rtx insn)
3209 int i, j;
3210 const char *fmt;
3211 enum rtx_code code;
3213 if (REG_P (x))
3214 return (insn != NULL_RTX
3215 && find_regno_note (insn, REG_DEAD, REGNO (x)) != NULL_RTX);
3216 code = GET_CODE (x);
3217 fmt = GET_RTX_FORMAT (code);
3218 for (i = GET_RTX_LENGTH (code) - 1; i >= 0; i--)
3220 if (fmt[i] == 'e')
3222 if (dead_pseudo_p (XEXP (x, i), insn))
3223 return true;
3225 else if (fmt[i] == 'E')
3227 for (j = XVECLEN (x, i) - 1; j >= 0; j--)
3228 if (dead_pseudo_p (XVECEXP (x, i, j), insn))
3229 return true;
3232 return false;
3235 /* Return true if INSN contains a dying pseudo in INSN right hand
3236 side. */
3237 static bool
3238 insn_rhs_dead_pseudo_p (rtx insn)
3240 rtx set = single_set (insn);
3242 gcc_assert (set != NULL);
3243 return dead_pseudo_p (SET_SRC (set), insn);
3246 /* Return true if any init insn of REGNO contains a dying pseudo in
3247 insn right hand side. */
3248 static bool
3249 init_insn_rhs_dead_pseudo_p (int regno)
3251 rtx insns = ira_reg_equiv[regno].init_insns;
3253 if (insns == NULL)
3254 return false;
3255 if (INSN_P (insns))
3256 return insn_rhs_dead_pseudo_p (insns);
3257 for (; insns != NULL_RTX; insns = XEXP (insns, 1))
3258 if (insn_rhs_dead_pseudo_p (XEXP (insns, 0)))
3259 return true;
3260 return false;
3263 /* Entry function of LRA constraint pass. Return true if the
3264 constraint pass did change the code. */
3265 bool
3266 lra_constraints (bool first_p)
3268 bool changed_p;
3269 int i, hard_regno, new_insns_num;
3270 unsigned int min_len, new_min_len, uid;
3271 rtx set, x, reg, dest_reg;
3272 basic_block last_bb;
3273 bitmap_head equiv_insn_bitmap;
3274 bitmap_iterator bi;
3276 lra_constraint_iter++;
3277 if (lra_dump_file != NULL)
3278 fprintf (lra_dump_file, "\n********** Local #%d: **********\n\n",
3279 lra_constraint_iter);
3280 lra_constraint_iter_after_spill++;
3281 if (lra_constraint_iter_after_spill > MAX_CONSTRAINT_ITERATION_NUMBER)
3282 internal_error
3283 ("Maximum number of LRA constraint passes is achieved (%d)\n",
3284 MAX_CONSTRAINT_ITERATION_NUMBER);
3285 changed_p = false;
3286 lra_risky_transformations_p = false;
3287 new_insn_uid_start = get_max_uid ();
3288 new_regno_start = first_p ? lra_constraint_new_regno_start : max_reg_num ();
3289 bitmap_initialize (&equiv_insn_bitmap, &reg_obstack);
3290 for (i = FIRST_PSEUDO_REGISTER; i < new_regno_start; i++)
3291 if (lra_reg_info[i].nrefs != 0)
3293 ira_reg_equiv[i].profitable_p = true;
3294 reg = regno_reg_rtx[i];
3295 if ((hard_regno = lra_get_regno_hard_regno (i)) >= 0)
3297 int j, nregs = hard_regno_nregs[hard_regno][PSEUDO_REGNO_MODE (i)];
3299 for (j = 0; j < nregs; j++)
3300 df_set_regs_ever_live (hard_regno + j, true);
3302 else if ((x = get_equiv_substitution (reg)) != reg)
3304 bool pseudo_p = contains_reg_p (x, false, false);
3305 rtx set, insn;
3307 /* We don't use DF for compilation speed sake. So it is
3308 problematic to update live info when we use an
3309 equivalence containing pseudos in more than one BB. */
3310 if ((pseudo_p && multi_block_pseudo_p (i))
3311 /* If it is not a reverse equivalence, we check that a
3312 pseudo in rhs of the init insn is not dying in the
3313 insn. Otherwise, the live info at the beginning of
3314 the corresponding BB might be wrong after we
3315 removed the insn. When the equiv can be a
3316 constant, the right hand side of the init insn can
3317 be a pseudo. */
3318 || (! ((insn = ira_reg_equiv[i].init_insns) != NULL_RTX
3319 && INSN_P (insn)
3320 && (set = single_set (insn)) != NULL_RTX
3321 && REG_P (SET_DEST (set))
3322 && (int) REGNO (SET_DEST (set)) == i)
3323 && init_insn_rhs_dead_pseudo_p (i)))
3324 ira_reg_equiv[i].defined_p = false;
3325 else if (! first_p && pseudo_p)
3326 /* After RTL transformation, we can not guarantee that
3327 pseudo in the substitution was not reloaded which
3328 might make equivalence invalid. For example, in
3329 reverse equiv of p0
3331 p0 <- ...
3333 equiv_mem <- p0
3335 the memory address register was reloaded before the
3336 2nd insn. */
3337 ira_reg_equiv[i].defined_p = false;
3338 if (contains_reg_p (x, false, true))
3339 ira_reg_equiv[i].profitable_p = false;
3340 if (get_equiv_substitution (reg) != reg)
3341 bitmap_ior_into (&equiv_insn_bitmap, &lra_reg_info[i].insn_bitmap);
3344 /* We should add all insns containing pseudos which should be
3345 substituted by their equivalences. */
3346 EXECUTE_IF_SET_IN_BITMAP (&equiv_insn_bitmap, 0, uid, bi)
3347 lra_push_insn_by_uid (uid);
3348 lra_eliminate (false);
3349 min_len = lra_insn_stack_length ();
3350 new_insns_num = 0;
3351 last_bb = NULL;
3352 changed_p = false;
3353 while ((new_min_len = lra_insn_stack_length ()) != 0)
3355 curr_insn = lra_pop_insn ();
3356 --new_min_len;
3357 curr_bb = BLOCK_FOR_INSN (curr_insn);
3358 if (curr_bb != last_bb)
3360 last_bb = curr_bb;
3361 bb_reload_num = lra_curr_reload_num;
3363 if (min_len > new_min_len)
3365 min_len = new_min_len;
3366 new_insns_num = 0;
3368 if (new_insns_num > MAX_RELOAD_INSNS_NUMBER)
3369 internal_error
3370 ("Max. number of generated reload insns per insn is achieved (%d)\n",
3371 MAX_RELOAD_INSNS_NUMBER);
3372 new_insns_num++;
3373 if (DEBUG_INSN_P (curr_insn))
3375 /* We need to check equivalence in debug insn and change
3376 pseudo to the equivalent value if necessary. */
3377 curr_id = lra_get_insn_recog_data (curr_insn);
3378 if (bitmap_bit_p (&equiv_insn_bitmap, INSN_UID (curr_insn))
3379 && loc_equivalence_change_p (curr_id->operand_loc[0]))
3381 lra_update_insn_regno_info (curr_insn);
3382 changed_p = true;
3385 else if (INSN_P (curr_insn))
3387 if ((set = single_set (curr_insn)) != NULL_RTX)
3389 dest_reg = SET_DEST (set);
3390 /* The equivalence pseudo could be set up as SUBREG in a
3391 case when it is a call restore insn in a mode
3392 different from the pseudo mode. */
3393 if (GET_CODE (dest_reg) == SUBREG)
3394 dest_reg = SUBREG_REG (dest_reg);
3395 if ((REG_P (dest_reg)
3396 && (x = get_equiv_substitution (dest_reg)) != dest_reg
3397 /* Remove insns which set up a pseudo whose value
3398 can not be changed. Such insns might be not in
3399 init_insns because we don't update equiv data
3400 during insn transformations.
3402 As an example, let suppose that a pseudo got
3403 hard register and on the 1st pass was not
3404 changed to equivalent constant. We generate an
3405 additional insn setting up the pseudo because of
3406 secondary memory movement. Then the pseudo is
3407 spilled and we use the equiv constant. In this
3408 case we should remove the additional insn and
3409 this insn is not init_insns list. */
3410 && (! MEM_P (x) || MEM_READONLY_P (x)
3411 || in_list_p (curr_insn,
3412 ira_reg_equiv
3413 [REGNO (dest_reg)].init_insns)))
3414 || (((x = get_equiv_substitution (SET_SRC (set)))
3415 != SET_SRC (set))
3416 && in_list_p (curr_insn,
3417 ira_reg_equiv
3418 [REGNO (SET_SRC (set))].init_insns)))
3420 /* This is equiv init insn of pseudo which did not get a
3421 hard register -- remove the insn. */
3422 if (lra_dump_file != NULL)
3424 fprintf (lra_dump_file,
3425 " Removing equiv init insn %i (freq=%d)\n",
3426 INSN_UID (curr_insn),
3427 BLOCK_FOR_INSN (curr_insn)->frequency);
3428 debug_rtl_slim (lra_dump_file,
3429 curr_insn, curr_insn, -1, 0);
3431 if (contains_reg_p (x, true, false))
3432 lra_risky_transformations_p = true;
3433 lra_set_insn_deleted (curr_insn);
3434 continue;
3437 curr_id = lra_get_insn_recog_data (curr_insn);
3438 curr_static_id = curr_id->insn_static_data;
3439 init_curr_insn_input_reloads ();
3440 init_curr_operand_mode ();
3441 if (curr_insn_transform ())
3442 changed_p = true;
3443 /* Check non-transformed insns too for equiv change as USE
3444 or CLOBBER don't need reloads but can contain pseudos
3445 being changed on their equivalences. */
3446 else if (bitmap_bit_p (&equiv_insn_bitmap, INSN_UID (curr_insn))
3447 && loc_equivalence_change_p (&PATTERN (curr_insn)))
3449 lra_update_insn_regno_info (curr_insn);
3450 changed_p = true;
3454 bitmap_clear (&equiv_insn_bitmap);
3455 /* If we used a new hard regno, changed_p should be true because the
3456 hard reg is assigned to a new pseudo. */
3457 #ifdef ENABLE_CHECKING
3458 if (! changed_p)
3460 for (i = FIRST_PSEUDO_REGISTER; i < new_regno_start; i++)
3461 if (lra_reg_info[i].nrefs != 0
3462 && (hard_regno = lra_get_regno_hard_regno (i)) >= 0)
3464 int j, nregs = hard_regno_nregs[hard_regno][PSEUDO_REGNO_MODE (i)];
3466 for (j = 0; j < nregs; j++)
3467 lra_assert (df_regs_ever_live_p (hard_regno + j));
3470 #endif
3471 return changed_p;
3474 /* Initiate the LRA constraint pass. It is done once per
3475 function. */
3476 void
3477 lra_constraints_init (void)
3481 /* Finalize the LRA constraint pass. It is done once per
3482 function. */
3483 void
3484 lra_constraints_finish (void)
3490 /* This page contains code to do inheritance/split
3491 transformations. */
3493 /* Number of reloads passed so far in current EBB. */
3494 static int reloads_num;
3496 /* Number of calls passed so far in current EBB. */
3497 static int calls_num;
3499 /* Current reload pseudo check for validity of elements in
3500 USAGE_INSNS. */
3501 static int curr_usage_insns_check;
3503 /* Info about last usage of registers in EBB to do inheritance/split
3504 transformation. Inheritance transformation is done from a spilled
3505 pseudo and split transformations from a hard register or a pseudo
3506 assigned to a hard register. */
3507 struct usage_insns
3509 /* If the value is equal to CURR_USAGE_INSNS_CHECK, then the member
3510 value INSNS is valid. The insns is chain of optional debug insns
3511 and a finishing non-debug insn using the corresponding reg. */
3512 int check;
3513 /* Value of global reloads_num at the last insn in INSNS. */
3514 int reloads_num;
3515 /* Value of global reloads_nums at the last insn in INSNS. */
3516 int calls_num;
3517 /* It can be true only for splitting. And it means that the restore
3518 insn should be put after insn given by the following member. */
3519 bool after_p;
3520 /* Next insns in the current EBB which use the original reg and the
3521 original reg value is not changed between the current insn and
3522 the next insns. In order words, e.g. for inheritance, if we need
3523 to use the original reg value again in the next insns we can try
3524 to use the value in a hard register from a reload insn of the
3525 current insn. */
3526 rtx insns;
3529 /* Map: regno -> corresponding pseudo usage insns. */
3530 static struct usage_insns *usage_insns;
3532 static void
3533 setup_next_usage_insn (int regno, rtx insn, int reloads_num, bool after_p)
3535 usage_insns[regno].check = curr_usage_insns_check;
3536 usage_insns[regno].insns = insn;
3537 usage_insns[regno].reloads_num = reloads_num;
3538 usage_insns[regno].calls_num = calls_num;
3539 usage_insns[regno].after_p = after_p;
3542 /* The function is used to form list REGNO usages which consists of
3543 optional debug insns finished by a non-debug insn using REGNO.
3544 RELOADS_NUM is current number of reload insns processed so far. */
3545 static void
3546 add_next_usage_insn (int regno, rtx insn, int reloads_num)
3548 rtx next_usage_insns;
3550 if (usage_insns[regno].check == curr_usage_insns_check
3551 && (next_usage_insns = usage_insns[regno].insns) != NULL_RTX
3552 && DEBUG_INSN_P (insn))
3554 /* Check that we did not add the debug insn yet. */
3555 if (next_usage_insns != insn
3556 && (GET_CODE (next_usage_insns) != INSN_LIST
3557 || XEXP (next_usage_insns, 0) != insn))
3558 usage_insns[regno].insns = gen_rtx_INSN_LIST (VOIDmode, insn,
3559 next_usage_insns);
3561 else if (NONDEBUG_INSN_P (insn))
3562 setup_next_usage_insn (regno, insn, reloads_num, false);
3563 else
3564 usage_insns[regno].check = 0;
3567 /* Replace all references to register OLD_REGNO in *LOC with pseudo
3568 register NEW_REG. Return true if any change was made. */
3569 static bool
3570 substitute_pseudo (rtx *loc, int old_regno, rtx new_reg)
3572 rtx x = *loc;
3573 bool result = false;
3574 enum rtx_code code;
3575 const char *fmt;
3576 int i, j;
3578 if (x == NULL_RTX)
3579 return false;
3581 code = GET_CODE (x);
3582 if (code == REG && (int) REGNO (x) == old_regno)
3584 enum machine_mode mode = GET_MODE (*loc);
3585 enum machine_mode inner_mode = GET_MODE (new_reg);
3587 if (mode != inner_mode)
3589 if (GET_MODE_SIZE (mode) >= GET_MODE_SIZE (inner_mode)
3590 || ! SCALAR_INT_MODE_P (inner_mode))
3591 new_reg = gen_rtx_SUBREG (mode, new_reg, 0);
3592 else
3593 new_reg = gen_lowpart_SUBREG (mode, new_reg);
3595 *loc = new_reg;
3596 return true;
3599 /* Scan all the operand sub-expressions. */
3600 fmt = GET_RTX_FORMAT (code);
3601 for (i = GET_RTX_LENGTH (code) - 1; i >= 0; i--)
3603 if (fmt[i] == 'e')
3605 if (substitute_pseudo (&XEXP (x, i), old_regno, new_reg))
3606 result = true;
3608 else if (fmt[i] == 'E')
3610 for (j = XVECLEN (x, i) - 1; j >= 0; j--)
3611 if (substitute_pseudo (&XVECEXP (x, i, j), old_regno, new_reg))
3612 result = true;
3615 return result;
3618 /* Return first non-debug insn in list USAGE_INSNS. */
3619 static rtx
3620 skip_usage_debug_insns (rtx usage_insns)
3622 rtx insn;
3624 /* Skip debug insns. */
3625 for (insn = usage_insns;
3626 insn != NULL_RTX && GET_CODE (insn) == INSN_LIST;
3627 insn = XEXP (insn, 1))
3629 return insn;
3632 /* Return true if we need secondary memory moves for insn in
3633 USAGE_INSNS after inserting inherited pseudo of class INHER_CL
3634 into the insn. */
3635 static bool
3636 check_secondary_memory_needed_p (enum reg_class inher_cl ATTRIBUTE_UNUSED,
3637 rtx usage_insns ATTRIBUTE_UNUSED)
3639 #ifndef SECONDARY_MEMORY_NEEDED
3640 return false;
3641 #else
3642 rtx insn, set, dest;
3643 enum reg_class cl;
3645 if (inher_cl == ALL_REGS
3646 || (insn = skip_usage_debug_insns (usage_insns)) == NULL_RTX)
3647 return false;
3648 lra_assert (INSN_P (insn));
3649 if ((set = single_set (insn)) == NULL_RTX || ! REG_P (SET_DEST (set)))
3650 return false;
3651 dest = SET_DEST (set);
3652 if (! REG_P (dest))
3653 return false;
3654 lra_assert (inher_cl != NO_REGS);
3655 cl = get_reg_class (REGNO (dest));
3656 return (cl != NO_REGS && cl != ALL_REGS
3657 && SECONDARY_MEMORY_NEEDED (inher_cl, cl, GET_MODE (dest)));
3658 #endif
3661 /* Registers involved in inheritance/split in the current EBB
3662 (inheritance/split pseudos and original registers). */
3663 static bitmap_head check_only_regs;
3665 /* Do inheritance transformations for insn INSN, which defines (if
3666 DEF_P) or uses ORIGINAL_REGNO. NEXT_USAGE_INSNS specifies which
3667 instruction in the EBB next uses ORIGINAL_REGNO; it has the same
3668 form as the "insns" field of usage_insns. Return true if we
3669 succeed in such transformation.
3671 The transformations look like:
3673 p <- ... i <- ...
3674 ... p <- i (new insn)
3675 ... =>
3676 <- ... p ... <- ... i ...
3678 ... i <- p (new insn)
3679 <- ... p ... <- ... i ...
3680 ... =>
3681 <- ... p ... <- ... i ...
3682 where p is a spilled original pseudo and i is a new inheritance pseudo.
3685 The inheritance pseudo has the smallest class of two classes CL and
3686 class of ORIGINAL REGNO. */
3687 static bool
3688 inherit_reload_reg (bool def_p, int original_regno,
3689 enum reg_class cl, rtx insn, rtx next_usage_insns)
3691 enum reg_class rclass = lra_get_allocno_class (original_regno);
3692 rtx original_reg = regno_reg_rtx[original_regno];
3693 rtx new_reg, new_insns, usage_insn;
3695 lra_assert (! usage_insns[original_regno].after_p);
3696 if (lra_dump_file != NULL)
3697 fprintf (lra_dump_file,
3698 " <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<\n");
3699 if (! ira_reg_classes_intersect_p[cl][rclass])
3701 if (lra_dump_file != NULL)
3703 fprintf (lra_dump_file,
3704 " Rejecting inheritance for %d "
3705 "because of disjoint classes %s and %s\n",
3706 original_regno, reg_class_names[cl],
3707 reg_class_names[rclass]);
3708 fprintf (lra_dump_file,
3709 " >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>\n");
3711 return false;
3713 if ((ira_class_subset_p[cl][rclass] && cl != rclass)
3714 /* We don't use a subset of two classes because it can be
3715 NO_REGS. This transformation is still profitable in most
3716 cases even if the classes are not intersected as register
3717 move is probably cheaper than a memory load. */
3718 || ira_class_hard_regs_num[cl] < ira_class_hard_regs_num[rclass])
3720 if (lra_dump_file != NULL)
3721 fprintf (lra_dump_file, " Use smallest class of %s and %s\n",
3722 reg_class_names[cl], reg_class_names[rclass]);
3724 rclass = cl;
3726 if (check_secondary_memory_needed_p (cl, next_usage_insns))
3728 /* Reject inheritance resulting in secondary memory moves.
3729 Otherwise, there is a danger in LRA cycling. Also such
3730 transformation will be unprofitable. */
3731 if (lra_dump_file != NULL)
3733 rtx insn = skip_usage_debug_insns (next_usage_insns);
3734 rtx set = single_set (insn);
3736 lra_assert (set != NULL_RTX);
3738 rtx dest = SET_DEST (set);
3740 lra_assert (REG_P (dest));
3741 fprintf (lra_dump_file,
3742 " Rejecting inheritance for insn %d(%s)<-%d(%s) "
3743 "as secondary mem is needed\n",
3744 REGNO (dest), reg_class_names[get_reg_class (REGNO (dest))],
3745 original_regno, reg_class_names[cl]);
3746 fprintf (lra_dump_file,
3747 " >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>\n");
3749 return false;
3751 new_reg = lra_create_new_reg (GET_MODE (original_reg), original_reg,
3752 rclass, "inheritance");
3753 start_sequence ();
3754 if (def_p)
3755 emit_move_insn (original_reg, new_reg);
3756 else
3757 emit_move_insn (new_reg, original_reg);
3758 new_insns = get_insns ();
3759 end_sequence ();
3760 if (NEXT_INSN (new_insns) != NULL_RTX)
3762 if (lra_dump_file != NULL)
3764 fprintf (lra_dump_file,
3765 " Rejecting inheritance %d->%d "
3766 "as it results in 2 or more insns:\n",
3767 original_regno, REGNO (new_reg));
3768 debug_rtl_slim (lra_dump_file, new_insns, NULL_RTX, -1, 0);
3769 fprintf (lra_dump_file,
3770 " >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>\n");
3772 return false;
3774 substitute_pseudo (&insn, original_regno, new_reg);
3775 lra_update_insn_regno_info (insn);
3776 if (! def_p)
3777 /* We now have a new usage insn for original regno. */
3778 setup_next_usage_insn (original_regno, new_insns, reloads_num, false);
3779 if (lra_dump_file != NULL)
3780 fprintf (lra_dump_file, " Original reg change %d->%d (bb%d):\n",
3781 original_regno, REGNO (new_reg), BLOCK_FOR_INSN (insn)->index);
3782 lra_reg_info[REGNO (new_reg)].restore_regno = original_regno;
3783 bitmap_set_bit (&check_only_regs, REGNO (new_reg));
3784 bitmap_set_bit (&check_only_regs, original_regno);
3785 bitmap_set_bit (&lra_inheritance_pseudos, REGNO (new_reg));
3786 if (def_p)
3787 lra_process_new_insns (insn, NULL_RTX, new_insns,
3788 "Add original<-inheritance");
3789 else
3790 lra_process_new_insns (insn, new_insns, NULL_RTX,
3791 "Add inheritance<-original");
3792 while (next_usage_insns != NULL_RTX)
3794 if (GET_CODE (next_usage_insns) != INSN_LIST)
3796 usage_insn = next_usage_insns;
3797 lra_assert (NONDEBUG_INSN_P (usage_insn));
3798 next_usage_insns = NULL;
3800 else
3802 usage_insn = XEXP (next_usage_insns, 0);
3803 lra_assert (DEBUG_INSN_P (usage_insn));
3804 next_usage_insns = XEXP (next_usage_insns, 1);
3806 substitute_pseudo (&usage_insn, original_regno, new_reg);
3807 lra_update_insn_regno_info (usage_insn);
3808 if (lra_dump_file != NULL)
3810 fprintf (lra_dump_file,
3811 " Inheritance reuse change %d->%d (bb%d):\n",
3812 original_regno, REGNO (new_reg),
3813 BLOCK_FOR_INSN (usage_insn)->index);
3814 debug_rtl_slim (lra_dump_file, usage_insn, usage_insn,
3815 -1, 0);
3818 if (lra_dump_file != NULL)
3819 fprintf (lra_dump_file,
3820 " >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>\n");
3821 return true;
3824 /* Return true if we need a caller save/restore for pseudo REGNO which
3825 was assigned to a hard register. */
3826 static inline bool
3827 need_for_call_save_p (int regno)
3829 lra_assert (regno >= FIRST_PSEUDO_REGISTER && reg_renumber[regno] >= 0);
3830 return (usage_insns[regno].calls_num < calls_num
3831 && (overlaps_hard_reg_set_p
3832 (call_used_reg_set,
3833 PSEUDO_REGNO_MODE (regno), reg_renumber[regno])));
3836 /* Global registers occuring in the current EBB. */
3837 static bitmap_head ebb_global_regs;
3839 /* Return true if we need a split for hard register REGNO or pseudo
3840 REGNO which was assigned to a hard register.
3841 POTENTIAL_RELOAD_HARD_REGS contains hard registers which might be
3842 used for reloads since the EBB end. It is an approximation of the
3843 used hard registers in the split range. The exact value would
3844 require expensive calculations. If we were aggressive with
3845 splitting because of the approximation, the split pseudo will save
3846 the same hard register assignment and will be removed in the undo
3847 pass. We still need the approximation because too aggressive
3848 splitting would result in too inaccurate cost calculation in the
3849 assignment pass because of too many generated moves which will be
3850 probably removed in the undo pass. */
3851 static inline bool
3852 need_for_split_p (HARD_REG_SET potential_reload_hard_regs, int regno)
3854 int hard_regno = regno < FIRST_PSEUDO_REGISTER ? regno : reg_renumber[regno];
3856 lra_assert (hard_regno >= 0);
3857 return ((TEST_HARD_REG_BIT (potential_reload_hard_regs, hard_regno)
3858 /* Don't split eliminable hard registers, otherwise we can
3859 split hard registers like hard frame pointer, which
3860 lives on BB start/end according to DF-infrastructure,
3861 when there is a pseudo assigned to the register and
3862 living in the same BB. */
3863 && (regno >= FIRST_PSEUDO_REGISTER
3864 || ! TEST_HARD_REG_BIT (eliminable_regset, hard_regno))
3865 && ! TEST_HARD_REG_BIT (lra_no_alloc_regs, hard_regno)
3866 /* We need at least 2 reloads to make pseudo splitting
3867 profitable. We should provide hard regno splitting in
3868 any case to solve 1st insn scheduling problem when
3869 moving hard register definition up might result in
3870 impossibility to find hard register for reload pseudo of
3871 small register class. */
3872 && (usage_insns[regno].reloads_num
3873 + (regno < FIRST_PSEUDO_REGISTER ? 0 : 2) < reloads_num)
3874 && (regno < FIRST_PSEUDO_REGISTER
3875 /* For short living pseudos, spilling + inheritance can
3876 be considered a substitution for splitting.
3877 Therefore we do not splitting for local pseudos. It
3878 decreases also aggressiveness of splitting. The
3879 minimal number of references is chosen taking into
3880 account that for 2 references splitting has no sense
3881 as we can just spill the pseudo. */
3882 || (regno >= FIRST_PSEUDO_REGISTER
3883 && lra_reg_info[regno].nrefs > 3
3884 && bitmap_bit_p (&ebb_global_regs, regno))))
3885 || (regno >= FIRST_PSEUDO_REGISTER && need_for_call_save_p (regno)));
3888 /* Return class for the split pseudo created from original pseudo with
3889 ALLOCNO_CLASS and MODE which got a hard register HARD_REGNO. We
3890 choose subclass of ALLOCNO_CLASS which contains HARD_REGNO and
3891 results in no secondary memory movements. */
3892 static enum reg_class
3893 choose_split_class (enum reg_class allocno_class,
3894 int hard_regno ATTRIBUTE_UNUSED,
3895 enum machine_mode mode ATTRIBUTE_UNUSED)
3897 #ifndef SECONDARY_MEMORY_NEEDED
3898 return allocno_class;
3899 #else
3900 int i;
3901 enum reg_class cl, best_cl = NO_REGS;
3902 enum reg_class hard_reg_class ATTRIBUTE_UNUSED
3903 = REGNO_REG_CLASS (hard_regno);
3905 if (! SECONDARY_MEMORY_NEEDED (allocno_class, allocno_class, mode)
3906 && TEST_HARD_REG_BIT (reg_class_contents[allocno_class], hard_regno))
3907 return allocno_class;
3908 for (i = 0;
3909 (cl = reg_class_subclasses[allocno_class][i]) != LIM_REG_CLASSES;
3910 i++)
3911 if (! SECONDARY_MEMORY_NEEDED (cl, hard_reg_class, mode)
3912 && ! SECONDARY_MEMORY_NEEDED (hard_reg_class, cl, mode)
3913 && TEST_HARD_REG_BIT (reg_class_contents[cl], hard_regno)
3914 && (best_cl == NO_REGS
3915 || ira_class_hard_regs_num[best_cl] < ira_class_hard_regs_num[cl]))
3916 best_cl = cl;
3917 return best_cl;
3918 #endif
3921 /* Do split transformations for insn INSN, which defines or uses
3922 ORIGINAL_REGNO. NEXT_USAGE_INSNS specifies which instruction in
3923 the EBB next uses ORIGINAL_REGNO; it has the same form as the
3924 "insns" field of usage_insns.
3926 The transformations look like:
3928 p <- ... p <- ...
3929 ... s <- p (new insn -- save)
3930 ... =>
3931 ... p <- s (new insn -- restore)
3932 <- ... p ... <- ... p ...
3934 <- ... p ... <- ... p ...
3935 ... s <- p (new insn -- save)
3936 ... =>
3937 ... p <- s (new insn -- restore)
3938 <- ... p ... <- ... p ...
3940 where p is an original pseudo got a hard register or a hard
3941 register and s is a new split pseudo. The save is put before INSN
3942 if BEFORE_P is true. Return true if we succeed in such
3943 transformation. */
3944 static bool
3945 split_reg (bool before_p, int original_regno, rtx insn, rtx next_usage_insns)
3947 enum reg_class rclass;
3948 rtx original_reg;
3949 int hard_regno;
3950 rtx new_reg, save, restore, usage_insn;
3951 bool after_p;
3952 bool call_save_p;
3954 if (original_regno < FIRST_PSEUDO_REGISTER)
3956 rclass = ira_allocno_class_translate[REGNO_REG_CLASS (original_regno)];
3957 hard_regno = original_regno;
3958 call_save_p = false;
3960 else
3962 hard_regno = reg_renumber[original_regno];
3963 rclass = lra_get_allocno_class (original_regno);
3964 original_reg = regno_reg_rtx[original_regno];
3965 call_save_p = need_for_call_save_p (original_regno);
3967 original_reg = regno_reg_rtx[original_regno];
3968 lra_assert (hard_regno >= 0);
3969 if (lra_dump_file != NULL)
3970 fprintf (lra_dump_file,
3971 " ((((((((((((((((((((((((((((((((((((((((((((((((\n");
3972 if (call_save_p)
3974 enum machine_mode sec_mode;
3976 #ifdef SECONDARY_MEMORY_NEEDED_MODE
3977 sec_mode = SECONDARY_MEMORY_NEEDED_MODE (GET_MODE (original_reg));
3978 #else
3979 sec_mode = GET_MODE (original_reg);
3980 #endif
3981 new_reg = lra_create_new_reg (sec_mode, NULL_RTX,
3982 NO_REGS, "save");
3984 else
3986 rclass = choose_split_class (rclass, hard_regno,
3987 GET_MODE (original_reg));
3988 if (rclass == NO_REGS)
3990 if (lra_dump_file != NULL)
3992 fprintf (lra_dump_file,
3993 " Rejecting split of %d(%s): "
3994 "no good reg class for %d(%s)\n",
3995 original_regno,
3996 reg_class_names[lra_get_allocno_class (original_regno)],
3997 hard_regno,
3998 reg_class_names[REGNO_REG_CLASS (hard_regno)]);
3999 fprintf
4000 (lra_dump_file,
4001 " ))))))))))))))))))))))))))))))))))))))))))))))))\n");
4003 return false;
4005 new_reg = lra_create_new_reg (GET_MODE (original_reg), original_reg,
4006 rclass, "split");
4007 reg_renumber[REGNO (new_reg)] = hard_regno;
4009 save = emit_spill_move (true, new_reg, original_reg);
4010 if (NEXT_INSN (save) != NULL_RTX)
4012 lra_assert (! call_save_p);
4013 if (lra_dump_file != NULL)
4015 fprintf
4016 (lra_dump_file,
4017 " Rejecting split %d->%d resulting in > 2 %s save insns:\n",
4018 original_regno, REGNO (new_reg), call_save_p ? "call" : "");
4019 debug_rtl_slim (lra_dump_file, save, NULL_RTX, -1, 0);
4020 fprintf (lra_dump_file,
4021 " ))))))))))))))))))))))))))))))))))))))))))))))))\n");
4023 return false;
4025 restore = emit_spill_move (false, new_reg, original_reg);
4026 if (NEXT_INSN (restore) != NULL_RTX)
4028 lra_assert (! call_save_p);
4029 if (lra_dump_file != NULL)
4031 fprintf (lra_dump_file,
4032 " Rejecting split %d->%d "
4033 "resulting in > 2 %s restore insns:\n",
4034 original_regno, REGNO (new_reg), call_save_p ? "call" : "");
4035 debug_rtl_slim (lra_dump_file, restore, NULL_RTX, -1, 0);
4036 fprintf (lra_dump_file,
4037 " ))))))))))))))))))))))))))))))))))))))))))))))))\n");
4039 return false;
4041 after_p = usage_insns[original_regno].after_p;
4042 lra_reg_info[REGNO (new_reg)].restore_regno = original_regno;
4043 bitmap_set_bit (&check_only_regs, REGNO (new_reg));
4044 bitmap_set_bit (&check_only_regs, original_regno);
4045 bitmap_set_bit (&lra_split_regs, REGNO (new_reg));
4046 for (;;)
4048 if (GET_CODE (next_usage_insns) != INSN_LIST)
4050 usage_insn = next_usage_insns;
4051 break;
4053 usage_insn = XEXP (next_usage_insns, 0);
4054 lra_assert (DEBUG_INSN_P (usage_insn));
4055 next_usage_insns = XEXP (next_usage_insns, 1);
4056 substitute_pseudo (&usage_insn, original_regno, new_reg);
4057 lra_update_insn_regno_info (usage_insn);
4058 if (lra_dump_file != NULL)
4060 fprintf (lra_dump_file, " Split reuse change %d->%d:\n",
4061 original_regno, REGNO (new_reg));
4062 debug_rtl_slim (lra_dump_file, usage_insn, usage_insn,
4063 -1, 0);
4066 lra_assert (NOTE_P (usage_insn) || NONDEBUG_INSN_P (usage_insn));
4067 lra_assert (usage_insn != insn || (after_p && before_p));
4068 lra_process_new_insns (usage_insn, after_p ? NULL_RTX : restore,
4069 after_p ? restore : NULL_RTX,
4070 call_save_p
4071 ? "Add reg<-save" : "Add reg<-split");
4072 lra_process_new_insns (insn, before_p ? save : NULL_RTX,
4073 before_p ? NULL_RTX : save,
4074 call_save_p
4075 ? "Add save<-reg" : "Add split<-reg");
4076 if (lra_dump_file != NULL)
4077 fprintf (lra_dump_file,
4078 " ))))))))))))))))))))))))))))))))))))))))))))))))\n");
4079 return true;
4082 /* Recognize that we need a split transformation for insn INSN, which
4083 defines or uses REGNO in its insn biggest MODE (we use it only if
4084 REGNO is a hard register). POTENTIAL_RELOAD_HARD_REGS contains
4085 hard registers which might be used for reloads since the EBB end.
4086 Put the save before INSN if BEFORE_P is true. MAX_UID is maximla
4087 uid before starting INSN processing. Return true if we succeed in
4088 such transformation. */
4089 static bool
4090 split_if_necessary (int regno, enum machine_mode mode,
4091 HARD_REG_SET potential_reload_hard_regs,
4092 bool before_p, rtx insn, int max_uid)
4094 bool res = false;
4095 int i, nregs = 1;
4096 rtx next_usage_insns;
4098 if (regno < FIRST_PSEUDO_REGISTER)
4099 nregs = hard_regno_nregs[regno][mode];
4100 for (i = 0; i < nregs; i++)
4101 if (usage_insns[regno + i].check == curr_usage_insns_check
4102 && (next_usage_insns = usage_insns[regno + i].insns) != NULL_RTX
4103 /* To avoid processing the register twice or more. */
4104 && ((GET_CODE (next_usage_insns) != INSN_LIST
4105 && INSN_UID (next_usage_insns) < max_uid)
4106 || (GET_CODE (next_usage_insns) == INSN_LIST
4107 && (INSN_UID (XEXP (next_usage_insns, 0)) < max_uid)))
4108 && need_for_split_p (potential_reload_hard_regs, regno + i)
4109 && split_reg (before_p, regno + i, insn, next_usage_insns))
4110 res = true;
4111 return res;
4114 /* Check only registers living at the current program point in the
4115 current EBB. */
4116 static bitmap_head live_regs;
4118 /* Update live info in EBB given by its HEAD and TAIL insns after
4119 inheritance/split transformation. The function removes dead moves
4120 too. */
4121 static void
4122 update_ebb_live_info (rtx head, rtx tail)
4124 unsigned int j;
4125 int regno;
4126 bool live_p;
4127 rtx prev_insn, set;
4128 bool remove_p;
4129 basic_block last_bb, prev_bb, curr_bb;
4130 bitmap_iterator bi;
4131 struct lra_insn_reg *reg;
4132 edge e;
4133 edge_iterator ei;
4135 last_bb = BLOCK_FOR_INSN (tail);
4136 prev_bb = NULL;
4137 for (curr_insn = tail;
4138 curr_insn != PREV_INSN (head);
4139 curr_insn = prev_insn)
4141 prev_insn = PREV_INSN (curr_insn);
4142 /* We need to process empty blocks too. They contain
4143 NOTE_INSN_BASIC_BLOCK referring for the basic block. */
4144 if (NOTE_P (curr_insn) && NOTE_KIND (curr_insn) != NOTE_INSN_BASIC_BLOCK)
4145 continue;
4146 curr_bb = BLOCK_FOR_INSN (curr_insn);
4147 if (curr_bb != prev_bb)
4149 if (prev_bb != NULL)
4151 /* Update df_get_live_in (prev_bb): */
4152 EXECUTE_IF_SET_IN_BITMAP (&check_only_regs, 0, j, bi)
4153 if (bitmap_bit_p (&live_regs, j))
4154 bitmap_set_bit (df_get_live_in (prev_bb), j);
4155 else
4156 bitmap_clear_bit (df_get_live_in (prev_bb), j);
4158 if (curr_bb != last_bb)
4160 /* Update df_get_live_out (curr_bb): */
4161 EXECUTE_IF_SET_IN_BITMAP (&check_only_regs, 0, j, bi)
4163 live_p = bitmap_bit_p (&live_regs, j);
4164 if (! live_p)
4165 FOR_EACH_EDGE (e, ei, curr_bb->succs)
4166 if (bitmap_bit_p (df_get_live_in (e->dest), j))
4168 live_p = true;
4169 break;
4171 if (live_p)
4172 bitmap_set_bit (df_get_live_out (curr_bb), j);
4173 else
4174 bitmap_clear_bit (df_get_live_out (curr_bb), j);
4177 prev_bb = curr_bb;
4178 bitmap_and (&live_regs, &check_only_regs, df_get_live_out (curr_bb));
4180 if (! NONDEBUG_INSN_P (curr_insn))
4181 continue;
4182 curr_id = lra_get_insn_recog_data (curr_insn);
4183 remove_p = false;
4184 if ((set = single_set (curr_insn)) != NULL_RTX && REG_P (SET_DEST (set))
4185 && (regno = REGNO (SET_DEST (set))) >= FIRST_PSEUDO_REGISTER
4186 && bitmap_bit_p (&check_only_regs, regno)
4187 && ! bitmap_bit_p (&live_regs, regno))
4188 remove_p = true;
4189 /* See which defined values die here. */
4190 for (reg = curr_id->regs; reg != NULL; reg = reg->next)
4191 if (reg->type == OP_OUT && ! reg->subreg_p)
4192 bitmap_clear_bit (&live_regs, reg->regno);
4193 /* Mark each used value as live. */
4194 for (reg = curr_id->regs; reg != NULL; reg = reg->next)
4195 if (reg->type == OP_IN
4196 && bitmap_bit_p (&check_only_regs, reg->regno))
4197 bitmap_set_bit (&live_regs, reg->regno);
4198 /* It is quite important to remove dead move insns because it
4199 means removing dead store. We don't need to process them for
4200 constraints. */
4201 if (remove_p)
4203 if (lra_dump_file != NULL)
4205 fprintf (lra_dump_file, " Removing dead insn:\n ");
4206 debug_rtl_slim (lra_dump_file, curr_insn, curr_insn, -1, 0);
4208 lra_set_insn_deleted (curr_insn);
4213 /* The structure describes info to do an inheritance for the current
4214 insn. We need to collect such info first before doing the
4215 transformations because the transformations change the insn
4216 internal representation. */
4217 struct to_inherit
4219 /* Original regno. */
4220 int regno;
4221 /* Subsequent insns which can inherit original reg value. */
4222 rtx insns;
4225 /* Array containing all info for doing inheritance from the current
4226 insn. */
4227 static struct to_inherit to_inherit[LRA_MAX_INSN_RELOADS];
4229 /* Number elements in the previous array. */
4230 static int to_inherit_num;
4232 /* Add inheritance info REGNO and INSNS. Their meaning is described in
4233 structure to_inherit. */
4234 static void
4235 add_to_inherit (int regno, rtx insns)
4237 int i;
4239 for (i = 0; i < to_inherit_num; i++)
4240 if (to_inherit[i].regno == regno)
4241 return;
4242 lra_assert (to_inherit_num < LRA_MAX_INSN_RELOADS);
4243 to_inherit[to_inherit_num].regno = regno;
4244 to_inherit[to_inherit_num++].insns = insns;
4247 /* Return the last non-debug insn in basic block BB, or the block begin
4248 note if none. */
4249 static rtx
4250 get_last_insertion_point (basic_block bb)
4252 rtx insn;
4254 FOR_BB_INSNS_REVERSE (bb, insn)
4255 if (NONDEBUG_INSN_P (insn) || NOTE_INSN_BASIC_BLOCK_P (insn))
4256 return insn;
4257 gcc_unreachable ();
4260 /* Set up RES by registers living on edges FROM except the edge (FROM,
4261 TO) or by registers set up in a jump insn in BB FROM. */
4262 static void
4263 get_live_on_other_edges (basic_block from, basic_block to, bitmap res)
4265 rtx last;
4266 struct lra_insn_reg *reg;
4267 edge e;
4268 edge_iterator ei;
4270 lra_assert (to != NULL);
4271 bitmap_clear (res);
4272 FOR_EACH_EDGE (e, ei, from->succs)
4273 if (e->dest != to)
4274 bitmap_ior_into (res, df_get_live_in (e->dest));
4275 last = get_last_insertion_point (from);
4276 if (! JUMP_P (last))
4277 return;
4278 curr_id = lra_get_insn_recog_data (last);
4279 for (reg = curr_id->regs; reg != NULL; reg = reg->next)
4280 if (reg->type != OP_IN)
4281 bitmap_set_bit (res, reg->regno);
4284 /* Used as a temporary results of some bitmap calculations. */
4285 static bitmap_head temp_bitmap;
4287 /* Do inheritance/split transformations in EBB starting with HEAD and
4288 finishing on TAIL. We process EBB insns in the reverse order.
4289 Return true if we did any inheritance/split transformation in the
4290 EBB.
4292 We should avoid excessive splitting which results in worse code
4293 because of inaccurate cost calculations for spilling new split
4294 pseudos in such case. To achieve this we do splitting only if
4295 register pressure is high in given basic block and there are reload
4296 pseudos requiring hard registers. We could do more register
4297 pressure calculations at any given program point to avoid necessary
4298 splitting even more but it is to expensive and the current approach
4299 works well enough. */
4300 static bool
4301 inherit_in_ebb (rtx head, rtx tail)
4303 int i, src_regno, dst_regno, nregs;
4304 bool change_p, succ_p;
4305 rtx prev_insn, next_usage_insns, set, last_insn;
4306 enum reg_class cl;
4307 struct lra_insn_reg *reg;
4308 basic_block last_processed_bb, curr_bb = NULL;
4309 HARD_REG_SET potential_reload_hard_regs, live_hard_regs;
4310 bitmap to_process;
4311 unsigned int j;
4312 bitmap_iterator bi;
4313 bool head_p, after_p;
4315 change_p = false;
4316 curr_usage_insns_check++;
4317 reloads_num = calls_num = 0;
4318 bitmap_clear (&check_only_regs);
4319 last_processed_bb = NULL;
4320 CLEAR_HARD_REG_SET (potential_reload_hard_regs);
4321 CLEAR_HARD_REG_SET (live_hard_regs);
4322 /* We don't process new insns generated in the loop. */
4323 for (curr_insn = tail; curr_insn != PREV_INSN (head); curr_insn = prev_insn)
4325 prev_insn = PREV_INSN (curr_insn);
4326 if (BLOCK_FOR_INSN (curr_insn) != NULL)
4327 curr_bb = BLOCK_FOR_INSN (curr_insn);
4328 if (last_processed_bb != curr_bb)
4330 /* We are at the end of BB. Add qualified living
4331 pseudos for potential splitting. */
4332 to_process = df_get_live_out (curr_bb);
4333 if (last_processed_bb != NULL)
4335 /* We are somewhere in the middle of EBB. */
4336 get_live_on_other_edges (curr_bb, last_processed_bb,
4337 &temp_bitmap);
4338 to_process = &temp_bitmap;
4340 last_processed_bb = curr_bb;
4341 last_insn = get_last_insertion_point (curr_bb);
4342 after_p = (! JUMP_P (last_insn)
4343 && (! CALL_P (last_insn)
4344 || (find_reg_note (last_insn,
4345 REG_NORETURN, NULL_RTX) == NULL_RTX
4346 && ! SIBLING_CALL_P (last_insn))));
4347 REG_SET_TO_HARD_REG_SET (live_hard_regs, df_get_live_out (curr_bb));
4348 IOR_HARD_REG_SET (live_hard_regs, eliminable_regset);
4349 IOR_HARD_REG_SET (live_hard_regs, lra_no_alloc_regs);
4350 CLEAR_HARD_REG_SET (potential_reload_hard_regs);
4351 EXECUTE_IF_SET_IN_BITMAP (to_process, 0, j, bi)
4353 if ((int) j >= lra_constraint_new_regno_start)
4354 break;
4355 if (j < FIRST_PSEUDO_REGISTER || reg_renumber[j] >= 0)
4357 if (j < FIRST_PSEUDO_REGISTER)
4358 SET_HARD_REG_BIT (live_hard_regs, j);
4359 else
4360 add_to_hard_reg_set (&live_hard_regs,
4361 PSEUDO_REGNO_MODE (j),
4362 reg_renumber[j]);
4363 setup_next_usage_insn (j, last_insn, reloads_num, after_p);
4367 src_regno = dst_regno = -1;
4368 if (NONDEBUG_INSN_P (curr_insn)
4369 && (set = single_set (curr_insn)) != NULL_RTX
4370 && REG_P (SET_DEST (set)) && REG_P (SET_SRC (set)))
4372 src_regno = REGNO (SET_SRC (set));
4373 dst_regno = REGNO (SET_DEST (set));
4375 if (src_regno < lra_constraint_new_regno_start
4376 && src_regno >= FIRST_PSEUDO_REGISTER
4377 && reg_renumber[src_regno] < 0
4378 && dst_regno >= lra_constraint_new_regno_start
4379 && (cl = lra_get_allocno_class (dst_regno)) != NO_REGS)
4381 /* 'reload_pseudo <- original_pseudo'. */
4382 reloads_num++;
4383 succ_p = false;
4384 if (usage_insns[src_regno].check == curr_usage_insns_check
4385 && (next_usage_insns = usage_insns[src_regno].insns) != NULL_RTX)
4386 succ_p = inherit_reload_reg (false, src_regno, cl,
4387 curr_insn, next_usage_insns);
4388 if (succ_p)
4389 change_p = true;
4390 else
4391 setup_next_usage_insn (src_regno, curr_insn, reloads_num, false);
4392 if (hard_reg_set_subset_p (reg_class_contents[cl], live_hard_regs))
4393 IOR_HARD_REG_SET (potential_reload_hard_regs,
4394 reg_class_contents[cl]);
4396 else if (src_regno >= lra_constraint_new_regno_start
4397 && dst_regno < lra_constraint_new_regno_start
4398 && dst_regno >= FIRST_PSEUDO_REGISTER
4399 && reg_renumber[dst_regno] < 0
4400 && (cl = lra_get_allocno_class (src_regno)) != NO_REGS
4401 && usage_insns[dst_regno].check == curr_usage_insns_check
4402 && (next_usage_insns
4403 = usage_insns[dst_regno].insns) != NULL_RTX)
4405 reloads_num++;
4406 /* 'original_pseudo <- reload_pseudo'. */
4407 if (! JUMP_P (curr_insn)
4408 && inherit_reload_reg (true, dst_regno, cl,
4409 curr_insn, next_usage_insns))
4410 change_p = true;
4411 /* Invalidate. */
4412 usage_insns[dst_regno].check = 0;
4413 if (hard_reg_set_subset_p (reg_class_contents[cl], live_hard_regs))
4414 IOR_HARD_REG_SET (potential_reload_hard_regs,
4415 reg_class_contents[cl]);
4417 else if (INSN_P (curr_insn))
4419 int max_uid = get_max_uid ();
4421 curr_id = lra_get_insn_recog_data (curr_insn);
4422 to_inherit_num = 0;
4423 /* Process insn definitions. */
4424 for (reg = curr_id->regs; reg != NULL; reg = reg->next)
4425 if (reg->type != OP_IN
4426 && (dst_regno = reg->regno) < lra_constraint_new_regno_start)
4428 if (dst_regno >= FIRST_PSEUDO_REGISTER && reg->type == OP_OUT
4429 && reg_renumber[dst_regno] < 0 && ! reg->subreg_p
4430 && usage_insns[dst_regno].check == curr_usage_insns_check
4431 && (next_usage_insns
4432 = usage_insns[dst_regno].insns) != NULL_RTX)
4434 struct lra_insn_reg *r;
4436 for (r = curr_id->regs; r != NULL; r = r->next)
4437 if (r->type != OP_OUT && r->regno == dst_regno)
4438 break;
4439 /* Don't do inheritance if the pseudo is also
4440 used in the insn. */
4441 if (r == NULL)
4442 /* We can not do inheritance right now
4443 because the current insn reg info (chain
4444 regs) can change after that. */
4445 add_to_inherit (dst_regno, next_usage_insns);
4447 /* We can not process one reg twice here because of
4448 usage_insns invalidation. */
4449 if ((dst_regno < FIRST_PSEUDO_REGISTER
4450 || reg_renumber[dst_regno] >= 0)
4451 && ! reg->subreg_p && reg->type == OP_OUT)
4453 HARD_REG_SET s;
4455 if (split_if_necessary (dst_regno, reg->biggest_mode,
4456 potential_reload_hard_regs,
4457 false, curr_insn, max_uid))
4458 change_p = true;
4459 CLEAR_HARD_REG_SET (s);
4460 if (dst_regno < FIRST_PSEUDO_REGISTER)
4461 add_to_hard_reg_set (&s, reg->biggest_mode, dst_regno);
4462 else
4463 add_to_hard_reg_set (&s, PSEUDO_REGNO_MODE (dst_regno),
4464 reg_renumber[dst_regno]);
4465 AND_COMPL_HARD_REG_SET (live_hard_regs, s);
4467 /* We should invalidate potential inheritance or
4468 splitting for the current insn usages to the next
4469 usage insns (see code below) as the output pseudo
4470 prevents this. */
4471 if ((dst_regno >= FIRST_PSEUDO_REGISTER
4472 && reg_renumber[dst_regno] < 0)
4473 || (reg->type == OP_OUT && ! reg->subreg_p
4474 && (dst_regno < FIRST_PSEUDO_REGISTER
4475 || reg_renumber[dst_regno] >= 0)))
4477 /* Invalidate. */
4478 if (dst_regno >= FIRST_PSEUDO_REGISTER)
4479 usage_insns[dst_regno].check = 0;
4480 else
4482 nregs = hard_regno_nregs[dst_regno][reg->biggest_mode];
4483 for (i = 0; i < nregs; i++)
4484 usage_insns[dst_regno + i].check = 0;
4488 if (! JUMP_P (curr_insn))
4489 for (i = 0; i < to_inherit_num; i++)
4490 if (inherit_reload_reg (true, to_inherit[i].regno,
4491 ALL_REGS, curr_insn,
4492 to_inherit[i].insns))
4493 change_p = true;
4494 if (CALL_P (curr_insn))
4496 rtx cheap, pat, dest, restore;
4497 int regno, hard_regno;
4499 calls_num++;
4500 if ((cheap = find_reg_note (curr_insn,
4501 REG_RETURNED, NULL_RTX)) != NULL_RTX
4502 && ((cheap = XEXP (cheap, 0)), true)
4503 && (regno = REGNO (cheap)) >= FIRST_PSEUDO_REGISTER
4504 && (hard_regno = reg_renumber[regno]) >= 0
4505 /* If there are pending saves/restores, the
4506 optimization is not worth. */
4507 && usage_insns[regno].calls_num == calls_num - 1
4508 && TEST_HARD_REG_BIT (call_used_reg_set, hard_regno))
4510 /* Restore the pseudo from the call result as
4511 REG_RETURNED note says that the pseudo value is
4512 in the call result and the pseudo is an argument
4513 of the call. */
4514 pat = PATTERN (curr_insn);
4515 if (GET_CODE (pat) == PARALLEL)
4516 pat = XVECEXP (pat, 0, 0);
4517 dest = SET_DEST (pat);
4518 start_sequence ();
4519 emit_move_insn (cheap, copy_rtx (dest));
4520 restore = get_insns ();
4521 end_sequence ();
4522 lra_process_new_insns (curr_insn, NULL, restore,
4523 "Inserting call parameter restore");
4524 /* We don't need to save/restore of the pseudo from
4525 this call. */
4526 usage_insns[regno].calls_num = calls_num;
4527 bitmap_set_bit (&check_only_regs, regno);
4530 to_inherit_num = 0;
4531 /* Process insn usages. */
4532 for (reg = curr_id->regs; reg != NULL; reg = reg->next)
4533 if ((reg->type != OP_OUT
4534 || (reg->type == OP_OUT && reg->subreg_p))
4535 && (src_regno = reg->regno) < lra_constraint_new_regno_start)
4537 if (src_regno >= FIRST_PSEUDO_REGISTER
4538 && reg_renumber[src_regno] < 0 && reg->type == OP_IN)
4540 if (usage_insns[src_regno].check == curr_usage_insns_check
4541 && (next_usage_insns
4542 = usage_insns[src_regno].insns) != NULL_RTX
4543 && NONDEBUG_INSN_P (curr_insn))
4544 add_to_inherit (src_regno, next_usage_insns);
4545 else
4546 /* Add usages. */
4547 add_next_usage_insn (src_regno, curr_insn, reloads_num);
4549 else if (src_regno < FIRST_PSEUDO_REGISTER
4550 || reg_renumber[src_regno] >= 0)
4552 bool before_p;
4553 rtx use_insn = curr_insn;
4555 before_p = (JUMP_P (curr_insn)
4556 || (CALL_P (curr_insn) && reg->type == OP_IN));
4557 if (NONDEBUG_INSN_P (curr_insn)
4558 && split_if_necessary (src_regno, reg->biggest_mode,
4559 potential_reload_hard_regs,
4560 before_p, curr_insn, max_uid))
4562 if (reg->subreg_p)
4563 lra_risky_transformations_p = true;
4564 change_p = true;
4565 /* Invalidate. */
4566 usage_insns[src_regno].check = 0;
4567 if (before_p)
4568 use_insn = PREV_INSN (curr_insn);
4570 if (NONDEBUG_INSN_P (curr_insn))
4572 if (src_regno < FIRST_PSEUDO_REGISTER)
4573 add_to_hard_reg_set (&live_hard_regs,
4574 reg->biggest_mode, src_regno);
4575 else
4576 add_to_hard_reg_set (&live_hard_regs,
4577 PSEUDO_REGNO_MODE (src_regno),
4578 reg_renumber[src_regno]);
4580 add_next_usage_insn (src_regno, use_insn, reloads_num);
4583 for (i = 0; i < to_inherit_num; i++)
4585 src_regno = to_inherit[i].regno;
4586 if (inherit_reload_reg (false, src_regno, ALL_REGS,
4587 curr_insn, to_inherit[i].insns))
4588 change_p = true;
4589 else
4590 setup_next_usage_insn (src_regno, curr_insn, reloads_num, false);
4593 /* We reached the start of the current basic block. */
4594 if (prev_insn == NULL_RTX || prev_insn == PREV_INSN (head)
4595 || BLOCK_FOR_INSN (prev_insn) != curr_bb)
4597 /* We reached the beginning of the current block -- do
4598 rest of spliting in the current BB. */
4599 to_process = df_get_live_in (curr_bb);
4600 if (BLOCK_FOR_INSN (head) != curr_bb)
4602 /* We are somewhere in the middle of EBB. */
4603 get_live_on_other_edges (EDGE_PRED (curr_bb, 0)->src,
4604 curr_bb, &temp_bitmap);
4605 to_process = &temp_bitmap;
4607 head_p = true;
4608 EXECUTE_IF_SET_IN_BITMAP (to_process, 0, j, bi)
4610 if ((int) j >= lra_constraint_new_regno_start)
4611 break;
4612 if (((int) j < FIRST_PSEUDO_REGISTER || reg_renumber[j] >= 0)
4613 && usage_insns[j].check == curr_usage_insns_check
4614 && (next_usage_insns = usage_insns[j].insns) != NULL_RTX)
4616 if (need_for_split_p (potential_reload_hard_regs, j))
4618 if (lra_dump_file != NULL && head_p)
4620 fprintf (lra_dump_file,
4621 " ----------------------------------\n");
4622 head_p = false;
4624 if (split_reg (false, j, bb_note (curr_bb),
4625 next_usage_insns))
4626 change_p = true;
4628 usage_insns[j].check = 0;
4633 return change_p;
4636 /* The maximal number of inheritance/split passes in LRA. It should
4637 be more 1 in order to perform caller saves transformations and much
4638 less MAX_CONSTRAINT_ITERATION_NUMBER to prevent LRA to do as many
4639 as permitted constraint passes in some complicated cases. The
4640 first inheritance/split pass has a biggest impact on generated code
4641 quality. Each subsequent affects generated code in less degree.
4642 For example, the 3rd pass does not change generated SPEC2000 code
4643 at all on x86-64. */
4644 #define MAX_INHERITANCE_PASSES 2
4646 #if MAX_INHERITANCE_PASSES <= 0 \
4647 || MAX_INHERITANCE_PASSES >= MAX_CONSTRAINT_ITERATION_NUMBER - 8
4648 #error wrong MAX_INHERITANCE_PASSES value
4649 #endif
4651 /* This value affects EBB forming. If probability of edge from EBB to
4652 a BB is not greater than the following value, we don't add the BB
4653 to EBB. */
4654 #define EBB_PROBABILITY_CUTOFF (REG_BR_PROB_BASE / 2)
4656 /* Current number of inheritance/split iteration. */
4657 int lra_inheritance_iter;
4659 /* Entry function for inheritance/split pass. */
4660 void
4661 lra_inheritance (void)
4663 int i;
4664 basic_block bb, start_bb;
4665 edge e;
4667 lra_inheritance_iter++;
4668 if (lra_inheritance_iter > MAX_INHERITANCE_PASSES)
4669 return;
4670 timevar_push (TV_LRA_INHERITANCE);
4671 if (lra_dump_file != NULL)
4672 fprintf (lra_dump_file, "\n********** Inheritance #%d: **********\n\n",
4673 lra_inheritance_iter);
4674 curr_usage_insns_check = 0;
4675 usage_insns = XNEWVEC (struct usage_insns, lra_constraint_new_regno_start);
4676 for (i = 0; i < lra_constraint_new_regno_start; i++)
4677 usage_insns[i].check = 0;
4678 bitmap_initialize (&check_only_regs, &reg_obstack);
4679 bitmap_initialize (&live_regs, &reg_obstack);
4680 bitmap_initialize (&temp_bitmap, &reg_obstack);
4681 bitmap_initialize (&ebb_global_regs, &reg_obstack);
4682 FOR_EACH_BB (bb)
4684 start_bb = bb;
4685 if (lra_dump_file != NULL)
4686 fprintf (lra_dump_file, "EBB");
4687 /* Form a EBB starting with BB. */
4688 bitmap_clear (&ebb_global_regs);
4689 bitmap_ior_into (&ebb_global_regs, df_get_live_in (bb));
4690 for (;;)
4692 if (lra_dump_file != NULL)
4693 fprintf (lra_dump_file, " %d", bb->index);
4694 if (bb->next_bb == EXIT_BLOCK_PTR || LABEL_P (BB_HEAD (bb->next_bb)))
4695 break;
4696 e = find_fallthru_edge (bb->succs);
4697 if (! e)
4698 break;
4699 if (e->probability <= EBB_PROBABILITY_CUTOFF)
4700 break;
4701 bb = bb->next_bb;
4703 bitmap_ior_into (&ebb_global_regs, df_get_live_out (bb));
4704 if (lra_dump_file != NULL)
4705 fprintf (lra_dump_file, "\n");
4706 if (inherit_in_ebb (BB_HEAD (start_bb), BB_END (bb)))
4707 /* Remember that the EBB head and tail can change in
4708 inherit_in_ebb. */
4709 update_ebb_live_info (BB_HEAD (start_bb), BB_END (bb));
4711 bitmap_clear (&ebb_global_regs);
4712 bitmap_clear (&temp_bitmap);
4713 bitmap_clear (&live_regs);
4714 bitmap_clear (&check_only_regs);
4715 free (usage_insns);
4717 timevar_pop (TV_LRA_INHERITANCE);
4722 /* This page contains code to undo failed inheritance/split
4723 transformations. */
4725 /* Current number of iteration undoing inheritance/split. */
4726 int lra_undo_inheritance_iter;
4728 /* Fix BB live info LIVE after removing pseudos created on pass doing
4729 inheritance/split which are REMOVED_PSEUDOS. */
4730 static void
4731 fix_bb_live_info (bitmap live, bitmap removed_pseudos)
4733 unsigned int regno;
4734 bitmap_iterator bi;
4736 EXECUTE_IF_SET_IN_BITMAP (removed_pseudos, 0, regno, bi)
4737 if (bitmap_clear_bit (live, regno))
4738 bitmap_set_bit (live, lra_reg_info[regno].restore_regno);
4741 /* Return regno of the (subreg of) REG. Otherwise, return a negative
4742 number. */
4743 static int
4744 get_regno (rtx reg)
4746 if (GET_CODE (reg) == SUBREG)
4747 reg = SUBREG_REG (reg);
4748 if (REG_P (reg))
4749 return REGNO (reg);
4750 return -1;
4753 /* Remove inheritance/split pseudos which are in REMOVE_PSEUDOS and
4754 return true if we did any change. The undo transformations for
4755 inheritance looks like
4756 i <- i2
4757 p <- i => p <- i2
4758 or removing
4759 p <- i, i <- p, and i <- i3
4760 where p is original pseudo from which inheritance pseudo i was
4761 created, i and i3 are removed inheritance pseudos, i2 is another
4762 not removed inheritance pseudo. All split pseudos or other
4763 occurrences of removed inheritance pseudos are changed on the
4764 corresponding original pseudos.
4766 The function also schedules insns changed and created during
4767 inheritance/split pass for processing by the subsequent constraint
4768 pass. */
4769 static bool
4770 remove_inheritance_pseudos (bitmap remove_pseudos)
4772 basic_block bb;
4773 int regno, sregno, prev_sregno, dregno, restore_regno;
4774 rtx set, prev_set, prev_insn;
4775 bool change_p, done_p;
4777 change_p = ! bitmap_empty_p (remove_pseudos);
4778 /* We can not finish the function right away if CHANGE_P is true
4779 because we need to marks insns affected by previous
4780 inheritance/split pass for processing by the subsequent
4781 constraint pass. */
4782 FOR_EACH_BB (bb)
4784 fix_bb_live_info (df_get_live_in (bb), remove_pseudos);
4785 fix_bb_live_info (df_get_live_out (bb), remove_pseudos);
4786 FOR_BB_INSNS_REVERSE (bb, curr_insn)
4788 if (! INSN_P (curr_insn))
4789 continue;
4790 done_p = false;
4791 sregno = dregno = -1;
4792 if (change_p && NONDEBUG_INSN_P (curr_insn)
4793 && (set = single_set (curr_insn)) != NULL_RTX)
4795 dregno = get_regno (SET_DEST (set));
4796 sregno = get_regno (SET_SRC (set));
4799 if (sregno >= 0 && dregno >= 0)
4801 if ((bitmap_bit_p (remove_pseudos, sregno)
4802 && (lra_reg_info[sregno].restore_regno == dregno
4803 || (bitmap_bit_p (remove_pseudos, dregno)
4804 && (lra_reg_info[sregno].restore_regno
4805 == lra_reg_info[dregno].restore_regno))))
4806 || (bitmap_bit_p (remove_pseudos, dregno)
4807 && lra_reg_info[dregno].restore_regno == sregno))
4808 /* One of the following cases:
4809 original <- removed inheritance pseudo
4810 removed inherit pseudo <- another removed inherit pseudo
4811 removed inherit pseudo <- original pseudo
4813 removed_split_pseudo <- original_reg
4814 original_reg <- removed_split_pseudo */
4816 if (lra_dump_file != NULL)
4818 fprintf (lra_dump_file, " Removing %s:\n",
4819 bitmap_bit_p (&lra_split_regs, sregno)
4820 || bitmap_bit_p (&lra_split_regs, dregno)
4821 ? "split" : "inheritance");
4822 debug_rtl_slim (lra_dump_file,
4823 curr_insn, curr_insn, -1, 0);
4825 lra_set_insn_deleted (curr_insn);
4826 done_p = true;
4828 else if (bitmap_bit_p (remove_pseudos, sregno)
4829 && bitmap_bit_p (&lra_inheritance_pseudos, sregno))
4831 /* Search the following pattern:
4832 inherit_or_split_pseudo1 <- inherit_or_split_pseudo2
4833 original_pseudo <- inherit_or_split_pseudo1
4834 where the 2nd insn is the current insn and
4835 inherit_or_split_pseudo2 is not removed. If it is found,
4836 change the current insn onto:
4837 original_pseudo <- inherit_or_split_pseudo2. */
4838 for (prev_insn = PREV_INSN (curr_insn);
4839 prev_insn != NULL_RTX && ! NONDEBUG_INSN_P (prev_insn);
4840 prev_insn = PREV_INSN (prev_insn))
4842 if (prev_insn != NULL_RTX && BLOCK_FOR_INSN (prev_insn) == bb
4843 && (prev_set = single_set (prev_insn)) != NULL_RTX
4844 /* There should be no subregs in insn we are
4845 searching because only the original reg might
4846 be in subreg when we changed the mode of
4847 load/store for splitting. */
4848 && REG_P (SET_DEST (prev_set))
4849 && REG_P (SET_SRC (prev_set))
4850 && (int) REGNO (SET_DEST (prev_set)) == sregno
4851 && ((prev_sregno = REGNO (SET_SRC (prev_set)))
4852 >= FIRST_PSEUDO_REGISTER)
4853 /* As we consider chain of inheritance or
4854 splitting described in above comment we should
4855 check that sregno and prev_sregno were
4856 inheritance/split pseudos created from the
4857 same original regno. */
4858 && (lra_reg_info[sregno].restore_regno
4859 == lra_reg_info[prev_sregno].restore_regno)
4860 && ! bitmap_bit_p (remove_pseudos, prev_sregno))
4862 lra_assert (GET_MODE (SET_SRC (prev_set))
4863 == GET_MODE (regno_reg_rtx[sregno]));
4864 if (GET_CODE (SET_SRC (set)) == SUBREG)
4865 SUBREG_REG (SET_SRC (set)) = SET_SRC (prev_set);
4866 else
4867 SET_SRC (set) = SET_SRC (prev_set);
4868 lra_push_insn_and_update_insn_regno_info (curr_insn);
4869 lra_set_used_insn_alternative_by_uid
4870 (INSN_UID (curr_insn), -1);
4871 done_p = true;
4872 if (lra_dump_file != NULL)
4874 fprintf (lra_dump_file, " Change reload insn:\n");
4875 debug_rtl_slim (lra_dump_file,
4876 curr_insn, curr_insn, -1, 0);
4881 if (! done_p)
4883 struct lra_insn_reg *reg;
4884 bool restored_regs_p = false;
4885 bool kept_regs_p = false;
4887 curr_id = lra_get_insn_recog_data (curr_insn);
4888 for (reg = curr_id->regs; reg != NULL; reg = reg->next)
4890 regno = reg->regno;
4891 restore_regno = lra_reg_info[regno].restore_regno;
4892 if (restore_regno >= 0)
4894 if (change_p && bitmap_bit_p (remove_pseudos, regno))
4896 substitute_pseudo (&curr_insn, regno,
4897 regno_reg_rtx[restore_regno]);
4898 restored_regs_p = true;
4900 else
4901 kept_regs_p = true;
4904 if (NONDEBUG_INSN_P (curr_insn) && kept_regs_p)
4906 /* The instruction has changed since the previous
4907 constraints pass. */
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);
4912 else if (restored_regs_p)
4913 /* The instruction has been restored to the form that
4914 it had during the previous constraints pass. */
4915 lra_update_insn_regno_info (curr_insn);
4916 if (restored_regs_p && lra_dump_file != NULL)
4918 fprintf (lra_dump_file, " Insn after restoring regs:\n");
4919 debug_rtl_slim (lra_dump_file, curr_insn, curr_insn, -1, 0);
4924 return change_p;
4927 /* Entry function for undoing inheritance/split transformation. Return true
4928 if we did any RTL change in this pass. */
4929 bool
4930 lra_undo_inheritance (void)
4932 unsigned int regno;
4933 int restore_regno, hard_regno;
4934 int n_all_inherit, n_inherit, n_all_split, n_split;
4935 bitmap_head remove_pseudos;
4936 bitmap_iterator bi;
4937 bool change_p;
4939 lra_undo_inheritance_iter++;
4940 if (lra_undo_inheritance_iter > MAX_INHERITANCE_PASSES)
4941 return false;
4942 if (lra_dump_file != NULL)
4943 fprintf (lra_dump_file,
4944 "\n********** Undoing inheritance #%d: **********\n\n",
4945 lra_undo_inheritance_iter);
4946 bitmap_initialize (&remove_pseudos, &reg_obstack);
4947 n_inherit = n_all_inherit = 0;
4948 EXECUTE_IF_SET_IN_BITMAP (&lra_inheritance_pseudos, 0, regno, bi)
4949 if (lra_reg_info[regno].restore_regno >= 0)
4951 n_all_inherit++;
4952 if (reg_renumber[regno] < 0)
4953 bitmap_set_bit (&remove_pseudos, regno);
4954 else
4955 n_inherit++;
4957 if (lra_dump_file != NULL && n_all_inherit != 0)
4958 fprintf (lra_dump_file, "Inherit %d out of %d (%.2f%%)\n",
4959 n_inherit, n_all_inherit,
4960 (double) n_inherit / n_all_inherit * 100);
4961 n_split = n_all_split = 0;
4962 EXECUTE_IF_SET_IN_BITMAP (&lra_split_regs, 0, regno, bi)
4963 if ((restore_regno = lra_reg_info[regno].restore_regno) >= 0)
4965 n_all_split++;
4966 hard_regno = (restore_regno >= FIRST_PSEUDO_REGISTER
4967 ? reg_renumber[restore_regno] : restore_regno);
4968 if (hard_regno < 0 || reg_renumber[regno] == hard_regno)
4969 bitmap_set_bit (&remove_pseudos, regno);
4970 else
4972 n_split++;
4973 if (lra_dump_file != NULL)
4974 fprintf (lra_dump_file, " Keep split r%d (orig=r%d)\n",
4975 regno, restore_regno);
4978 if (lra_dump_file != NULL && n_all_split != 0)
4979 fprintf (lra_dump_file, "Split %d out of %d (%.2f%%)\n",
4980 n_split, n_all_split,
4981 (double) n_split / n_all_split * 100);
4982 change_p = remove_inheritance_pseudos (&remove_pseudos);
4983 bitmap_clear (&remove_pseudos);
4984 /* Clear restore_regnos. */
4985 EXECUTE_IF_SET_IN_BITMAP (&lra_inheritance_pseudos, 0, regno, bi)
4986 lra_reg_info[regno].restore_regno = -1;
4987 EXECUTE_IF_SET_IN_BITMAP (&lra_split_regs, 0, regno, bi)
4988 lra_reg_info[regno].restore_regno = -1;
4989 return change_p;