2014-10-24 Richard Biener <rguenther@suse.de>
[official-gcc.git] / gcc / lra-assigns.c
blob1047acfcce914b087b64ecb7790a0eb6475117fb
1 /* Assign reload pseudos.
2 Copyright (C) 2010-2014 Free Software Foundation, Inc.
3 Contributed by Vladimir Makarov <vmakarov@redhat.com>.
5 This file is part of GCC.
7 GCC is free software; you can redistribute it and/or modify it under
8 the terms of the GNU General Public License as published by the Free
9 Software Foundation; either version 3, or (at your option) any later
10 version.
12 GCC is distributed in the hope that it will be useful, but WITHOUT ANY
13 WARRANTY; without even the implied warranty of MERCHANTABILITY or
14 FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
15 for more details.
17 You should have received a copy of the GNU General Public License
18 along with GCC; see the file COPYING3. If not see
19 <http://www.gnu.org/licenses/>. */
22 /* This file's main objective is to assign hard registers to reload
23 pseudos. It also tries to allocate hard registers to other
24 pseudos, but at a lower priority than the reload pseudos. The pass
25 does not transform the RTL.
27 We must allocate a hard register to every reload pseudo. We try to
28 increase the chances of finding a viable allocation by assigning
29 the pseudos in order of fewest available hard registers first. If
30 we still fail to find a hard register, we spill other (non-reload)
31 pseudos in order to make room.
33 find_hard_regno_for finds hard registers for allocation without
34 spilling. spill_for does the same with spilling. Both functions
35 use a cost model to determine the most profitable choice of hard
36 and spill registers.
38 Once we have finished allocating reload pseudos, we also try to
39 assign registers to other (non-reload) pseudos. This is useful if
40 hard registers were freed up by the spilling just described.
42 We try to assign hard registers by collecting pseudos into threads.
43 These threads contain reload and inheritance pseudos that are
44 connected by copies (move insns). Doing this improves the chances
45 of pseudos in the thread getting the same hard register and, as a
46 result, of allowing some move insns to be deleted.
48 When we assign a hard register to a pseudo, we decrease the cost of
49 using the same hard register for pseudos that are connected by
50 copies.
52 If two hard registers have the same frequency-derived cost, we
53 prefer hard registers with higher priorities. The mapping of
54 registers to priorities is controlled by the register_priority
55 target hook. For example, x86-64 has a few register priorities:
56 hard registers with and without REX prefixes have different
57 priorities. This permits us to generate smaller code as insns
58 without REX prefixes are shorter.
60 If a few hard registers are still equally good for the assignment,
61 we choose the least used hard register. It is called leveling and
62 may be profitable for some targets.
64 Only insns with changed allocation pseudos are processed on the
65 next constraint pass.
67 The pseudo live-ranges are used to find conflicting pseudos.
69 For understanding the code, it is important to keep in mind that
70 inheritance, split, and reload pseudos created since last
71 constraint pass have regno >= lra_constraint_new_regno_start.
72 Inheritance and split pseudos created on any pass are in the
73 corresponding bitmaps. Inheritance and split pseudos since the
74 last constraint pass have also the corresponding non-negative
75 restore_regno. */
77 #include "config.h"
78 #include "system.h"
79 #include "coretypes.h"
80 #include "tm.h"
81 #include "hard-reg-set.h"
82 #include "rtl.h"
83 #include "rtl-error.h"
84 #include "tm_p.h"
85 #include "target.h"
86 #include "insn-config.h"
87 #include "recog.h"
88 #include "output.h"
89 #include "regs.h"
90 #include "hashtab.h"
91 #include "hash-set.h"
92 #include "vec.h"
93 #include "machmode.h"
94 #include "input.h"
95 #include "function.h"
96 #include "expr.h"
97 #include "basic-block.h"
98 #include "except.h"
99 #include "df.h"
100 #include "ira.h"
101 #include "sparseset.h"
102 #include "params.h"
103 #include "lra-int.h"
105 /* Current iteration number of the pass and current iteration number
106 of the pass after the latest spill pass when any former reload
107 pseudo was spilled. */
108 int lra_assignment_iter;
109 int lra_assignment_iter_after_spill;
111 /* Flag of spilling former reload pseudos on this pass. */
112 static bool former_reload_pseudo_spill_p;
114 /* Array containing corresponding values of function
115 lra_get_allocno_class. It is used to speed up the code. */
116 static enum reg_class *regno_allocno_class_array;
118 /* Information about the thread to which a pseudo belongs. Threads are
119 a set of connected reload and inheritance pseudos with the same set of
120 available hard registers. Lone registers belong to their own threads. */
121 struct regno_assign_info
123 /* First/next pseudo of the same thread. */
124 int first, next;
125 /* Frequency of the thread (execution frequency of only reload
126 pseudos in the thread when the thread contains a reload pseudo).
127 Defined only for the first thread pseudo. */
128 int freq;
131 /* Map regno to the corresponding regno assignment info. */
132 static struct regno_assign_info *regno_assign_info;
134 /* All inherited, subreg or optional pseudos created before last spill
135 sub-pass. Such pseudos are permitted to get memory instead of hard
136 regs. */
137 static bitmap_head non_reload_pseudos;
139 /* Process a pseudo copy with execution frequency COPY_FREQ connecting
140 REGNO1 and REGNO2 to form threads. */
141 static void
142 process_copy_to_form_thread (int regno1, int regno2, int copy_freq)
144 int last, regno1_first, regno2_first;
146 lra_assert (regno1 >= lra_constraint_new_regno_start
147 && regno2 >= lra_constraint_new_regno_start);
148 regno1_first = regno_assign_info[regno1].first;
149 regno2_first = regno_assign_info[regno2].first;
150 if (regno1_first != regno2_first)
152 for (last = regno2_first;
153 regno_assign_info[last].next >= 0;
154 last = regno_assign_info[last].next)
155 regno_assign_info[last].first = regno1_first;
156 regno_assign_info[last].first = regno1_first;
157 regno_assign_info[last].next = regno_assign_info[regno1_first].next;
158 regno_assign_info[regno1_first].next = regno2_first;
159 regno_assign_info[regno1_first].freq
160 += regno_assign_info[regno2_first].freq;
162 regno_assign_info[regno1_first].freq -= 2 * copy_freq;
163 lra_assert (regno_assign_info[regno1_first].freq >= 0);
166 /* Initialize REGNO_ASSIGN_INFO and form threads. */
167 static void
168 init_regno_assign_info (void)
170 int i, regno1, regno2, max_regno = max_reg_num ();
171 lra_copy_t cp;
173 regno_assign_info = XNEWVEC (struct regno_assign_info, max_regno);
174 for (i = FIRST_PSEUDO_REGISTER; i < max_regno; i++)
176 regno_assign_info[i].first = i;
177 regno_assign_info[i].next = -1;
178 regno_assign_info[i].freq = lra_reg_info[i].freq;
180 /* Form the threads. */
181 for (i = 0; (cp = lra_get_copy (i)) != NULL; i++)
182 if ((regno1 = cp->regno1) >= lra_constraint_new_regno_start
183 && (regno2 = cp->regno2) >= lra_constraint_new_regno_start
184 && reg_renumber[regno1] < 0 && lra_reg_info[regno1].nrefs != 0
185 && reg_renumber[regno2] < 0 && lra_reg_info[regno2].nrefs != 0
186 && (ira_class_hard_regs_num[regno_allocno_class_array[regno1]]
187 == ira_class_hard_regs_num[regno_allocno_class_array[regno2]]))
188 process_copy_to_form_thread (regno1, regno2, cp->freq);
191 /* Free REGNO_ASSIGN_INFO. */
192 static void
193 finish_regno_assign_info (void)
195 free (regno_assign_info);
198 /* The function is used to sort *reload* and *inheritance* pseudos to
199 try to assign them hard registers. We put pseudos from the same
200 thread always nearby. */
201 static int
202 reload_pseudo_compare_func (const void *v1p, const void *v2p)
204 int r1 = *(const int *) v1p, r2 = *(const int *) v2p;
205 enum reg_class cl1 = regno_allocno_class_array[r1];
206 enum reg_class cl2 = regno_allocno_class_array[r2];
207 int diff;
209 lra_assert (r1 >= lra_constraint_new_regno_start
210 && r2 >= lra_constraint_new_regno_start);
212 /* Prefer to assign reload registers with smaller classes first to
213 guarantee assignment to all reload registers. */
214 if ((diff = (ira_class_hard_regs_num[cl1]
215 - ira_class_hard_regs_num[cl2])) != 0)
216 return diff;
217 if ((diff
218 = (ira_reg_class_max_nregs[cl2][lra_reg_info[r2].biggest_mode]
219 - ira_reg_class_max_nregs[cl1][lra_reg_info[r1].biggest_mode])) != 0
220 /* The code below executes rarely as nregs == 1 in most cases.
221 So we should not worry about using faster data structures to
222 check reload pseudos. */
223 && ! bitmap_bit_p (&non_reload_pseudos, r1)
224 && ! bitmap_bit_p (&non_reload_pseudos, r2))
225 return diff;
226 if ((diff = (regno_assign_info[regno_assign_info[r2].first].freq
227 - regno_assign_info[regno_assign_info[r1].first].freq)) != 0)
228 return diff;
229 /* Allocate bigger pseudos first to avoid register file
230 fragmentation. */
231 if ((diff
232 = (ira_reg_class_max_nregs[cl2][lra_reg_info[r2].biggest_mode]
233 - ira_reg_class_max_nregs[cl1][lra_reg_info[r1].biggest_mode])) != 0)
234 return diff;
235 /* Put pseudos from the thread nearby. */
236 if ((diff = regno_assign_info[r1].first - regno_assign_info[r2].first) != 0)
237 return diff;
238 /* If regs are equally good, sort by their numbers, so that the
239 results of qsort leave nothing to chance. */
240 return r1 - r2;
243 /* The function is used to sort *non-reload* pseudos to try to assign
244 them hard registers. The order calculation is simpler than in the
245 previous function and based on the pseudo frequency usage. */
246 static int
247 pseudo_compare_func (const void *v1p, const void *v2p)
249 int r1 = *(const int *) v1p, r2 = *(const int *) v2p;
250 int diff;
252 /* Prefer to assign more frequently used registers first. */
253 if ((diff = lra_reg_info[r2].freq - lra_reg_info[r1].freq) != 0)
254 return diff;
256 /* If regs are equally good, sort by their numbers, so that the
257 results of qsort leave nothing to chance. */
258 return r1 - r2;
261 /* Arrays of size LRA_LIVE_MAX_POINT mapping a program point to the
262 pseudo live ranges with given start point. We insert only live
263 ranges of pseudos interesting for assignment purposes. They are
264 reload pseudos and pseudos assigned to hard registers. */
265 static lra_live_range_t *start_point_ranges;
267 /* Used as a flag that a live range is not inserted in the start point
268 chain. */
269 static struct lra_live_range not_in_chain_mark;
271 /* Create and set up START_POINT_RANGES. */
272 static void
273 create_live_range_start_chains (void)
275 int i, max_regno;
276 lra_live_range_t r;
278 start_point_ranges = XCNEWVEC (lra_live_range_t, lra_live_max_point);
279 max_regno = max_reg_num ();
280 for (i = FIRST_PSEUDO_REGISTER; i < max_regno; i++)
281 if (i >= lra_constraint_new_regno_start || reg_renumber[i] >= 0)
283 for (r = lra_reg_info[i].live_ranges; r != NULL; r = r->next)
285 r->start_next = start_point_ranges[r->start];
286 start_point_ranges[r->start] = r;
289 else
291 for (r = lra_reg_info[i].live_ranges; r != NULL; r = r->next)
292 r->start_next = &not_in_chain_mark;
296 /* Insert live ranges of pseudo REGNO into start chains if they are
297 not there yet. */
298 static void
299 insert_in_live_range_start_chain (int regno)
301 lra_live_range_t r = lra_reg_info[regno].live_ranges;
303 if (r->start_next != &not_in_chain_mark)
304 return;
305 for (; r != NULL; r = r->next)
307 r->start_next = start_point_ranges[r->start];
308 start_point_ranges[r->start] = r;
312 /* Free START_POINT_RANGES. */
313 static void
314 finish_live_range_start_chains (void)
316 gcc_assert (start_point_ranges != NULL);
317 free (start_point_ranges);
318 start_point_ranges = NULL;
321 /* Map: program point -> bitmap of all pseudos living at the point and
322 assigned to hard registers. */
323 static bitmap_head *live_hard_reg_pseudos;
324 static bitmap_obstack live_hard_reg_pseudos_bitmap_obstack;
326 /* reg_renumber corresponding to pseudos marked in
327 live_hard_reg_pseudos. reg_renumber might be not matched to
328 live_hard_reg_pseudos but live_pseudos_reg_renumber always reflects
329 live_hard_reg_pseudos. */
330 static int *live_pseudos_reg_renumber;
332 /* Sparseset used to calculate living hard reg pseudos for some program
333 point range. */
334 static sparseset live_range_hard_reg_pseudos;
336 /* Sparseset used to calculate living reload/inheritance pseudos for
337 some program point range. */
338 static sparseset live_range_reload_inheritance_pseudos;
340 /* Allocate and initialize the data about living pseudos at program
341 points. */
342 static void
343 init_lives (void)
345 int i, max_regno = max_reg_num ();
347 live_range_hard_reg_pseudos = sparseset_alloc (max_regno);
348 live_range_reload_inheritance_pseudos = sparseset_alloc (max_regno);
349 live_hard_reg_pseudos = XNEWVEC (bitmap_head, lra_live_max_point);
350 bitmap_obstack_initialize (&live_hard_reg_pseudos_bitmap_obstack);
351 for (i = 0; i < lra_live_max_point; i++)
352 bitmap_initialize (&live_hard_reg_pseudos[i],
353 &live_hard_reg_pseudos_bitmap_obstack);
354 live_pseudos_reg_renumber = XNEWVEC (int, max_regno);
355 for (i = 0; i < max_regno; i++)
356 live_pseudos_reg_renumber[i] = -1;
359 /* Free the data about living pseudos at program points. */
360 static void
361 finish_lives (void)
363 sparseset_free (live_range_hard_reg_pseudos);
364 sparseset_free (live_range_reload_inheritance_pseudos);
365 free (live_hard_reg_pseudos);
366 bitmap_obstack_release (&live_hard_reg_pseudos_bitmap_obstack);
367 free (live_pseudos_reg_renumber);
370 /* Update the LIVE_HARD_REG_PSEUDOS and LIVE_PSEUDOS_REG_RENUMBER
371 entries for pseudo REGNO. Assume that the register has been
372 spilled if FREE_P, otherwise assume that it has been assigned
373 reg_renumber[REGNO] (if >= 0). We also insert the pseudo live
374 ranges in the start chains when it is assumed to be assigned to a
375 hard register because we use the chains of pseudos assigned to hard
376 registers during allocation. */
377 static void
378 update_lives (int regno, bool free_p)
380 int p;
381 lra_live_range_t r;
383 if (reg_renumber[regno] < 0)
384 return;
385 live_pseudos_reg_renumber[regno] = free_p ? -1 : reg_renumber[regno];
386 for (r = lra_reg_info[regno].live_ranges; r != NULL; r = r->next)
388 for (p = r->start; p <= r->finish; p++)
389 if (free_p)
390 bitmap_clear_bit (&live_hard_reg_pseudos[p], regno);
391 else
393 bitmap_set_bit (&live_hard_reg_pseudos[p], regno);
394 insert_in_live_range_start_chain (regno);
399 /* Sparseset used to calculate reload pseudos conflicting with a given
400 pseudo when we are trying to find a hard register for the given
401 pseudo. */
402 static sparseset conflict_reload_and_inheritance_pseudos;
404 /* Map: program point -> bitmap of all reload and inheritance pseudos
405 living at the point. */
406 static bitmap_head *live_reload_and_inheritance_pseudos;
407 static bitmap_obstack live_reload_and_inheritance_pseudos_bitmap_obstack;
409 /* Allocate and initialize data about living reload pseudos at any
410 given program point. */
411 static void
412 init_live_reload_and_inheritance_pseudos (void)
414 int i, p, max_regno = max_reg_num ();
415 lra_live_range_t r;
417 conflict_reload_and_inheritance_pseudos = sparseset_alloc (max_regno);
418 live_reload_and_inheritance_pseudos = XNEWVEC (bitmap_head, lra_live_max_point);
419 bitmap_obstack_initialize (&live_reload_and_inheritance_pseudos_bitmap_obstack);
420 for (p = 0; p < lra_live_max_point; p++)
421 bitmap_initialize (&live_reload_and_inheritance_pseudos[p],
422 &live_reload_and_inheritance_pseudos_bitmap_obstack);
423 for (i = lra_constraint_new_regno_start; i < max_regno; i++)
425 for (r = lra_reg_info[i].live_ranges; r != NULL; r = r->next)
426 for (p = r->start; p <= r->finish; p++)
427 bitmap_set_bit (&live_reload_and_inheritance_pseudos[p], i);
431 /* Finalize data about living reload pseudos at any given program
432 point. */
433 static void
434 finish_live_reload_and_inheritance_pseudos (void)
436 sparseset_free (conflict_reload_and_inheritance_pseudos);
437 free (live_reload_and_inheritance_pseudos);
438 bitmap_obstack_release (&live_reload_and_inheritance_pseudos_bitmap_obstack);
441 /* The value used to check that cost of given hard reg is really
442 defined currently. */
443 static int curr_hard_regno_costs_check = 0;
444 /* Array used to check that cost of the corresponding hard reg (the
445 array element index) is really defined currently. */
446 static int hard_regno_costs_check[FIRST_PSEUDO_REGISTER];
447 /* The current costs of allocation of hard regs. Defined only if the
448 value of the corresponding element of the previous array is equal to
449 CURR_HARD_REGNO_COSTS_CHECK. */
450 static int hard_regno_costs[FIRST_PSEUDO_REGISTER];
452 /* Adjust cost of HARD_REGNO by INCR. Reset the cost first if it is
453 not defined yet. */
454 static inline void
455 adjust_hard_regno_cost (int hard_regno, int incr)
457 if (hard_regno_costs_check[hard_regno] != curr_hard_regno_costs_check)
458 hard_regno_costs[hard_regno] = 0;
459 hard_regno_costs_check[hard_regno] = curr_hard_regno_costs_check;
460 hard_regno_costs[hard_regno] += incr;
463 /* Try to find a free hard register for pseudo REGNO. Return the
464 hard register on success and set *COST to the cost of using
465 that register. (If several registers have equal cost, the one with
466 the highest priority wins.) Return -1 on failure.
468 If FIRST_P, return the first available hard reg ignoring other
469 criteria, e.g. allocation cost. This approach results in less hard
470 reg pool fragmentation and permit to allocate hard regs to reload
471 pseudos in complicated situations where pseudo sizes are different.
473 If TRY_ONLY_HARD_REGNO >= 0, consider only that hard register,
474 otherwise consider all hard registers in REGNO's class. */
475 static int
476 find_hard_regno_for (int regno, int *cost, int try_only_hard_regno,
477 bool first_p)
479 HARD_REG_SET conflict_set;
480 int best_cost = INT_MAX, best_priority = INT_MIN, best_usage = INT_MAX;
481 lra_live_range_t r;
482 int p, i, j, rclass_size, best_hard_regno, priority, hard_regno;
483 int hr, conflict_hr, nregs;
484 enum machine_mode biggest_mode;
485 unsigned int k, conflict_regno;
486 int offset, val, biggest_nregs, nregs_diff;
487 enum reg_class rclass;
488 bitmap_iterator bi;
489 bool *rclass_intersect_p;
490 HARD_REG_SET impossible_start_hard_regs, available_regs;
492 COPY_HARD_REG_SET (conflict_set, lra_no_alloc_regs);
493 rclass = regno_allocno_class_array[regno];
494 rclass_intersect_p = ira_reg_classes_intersect_p[rclass];
495 curr_hard_regno_costs_check++;
496 sparseset_clear (conflict_reload_and_inheritance_pseudos);
497 sparseset_clear (live_range_hard_reg_pseudos);
498 IOR_HARD_REG_SET (conflict_set, lra_reg_info[regno].conflict_hard_regs);
499 biggest_mode = lra_reg_info[regno].biggest_mode;
500 for (r = lra_reg_info[regno].live_ranges; r != NULL; r = r->next)
502 EXECUTE_IF_SET_IN_BITMAP (&live_hard_reg_pseudos[r->start], 0, k, bi)
503 if (rclass_intersect_p[regno_allocno_class_array[k]])
504 sparseset_set_bit (live_range_hard_reg_pseudos, k);
505 EXECUTE_IF_SET_IN_BITMAP (&live_reload_and_inheritance_pseudos[r->start],
506 0, k, bi)
507 if (lra_reg_info[k].preferred_hard_regno1 >= 0
508 && live_pseudos_reg_renumber[k] < 0
509 && rclass_intersect_p[regno_allocno_class_array[k]])
510 sparseset_set_bit (conflict_reload_and_inheritance_pseudos, k);
511 for (p = r->start + 1; p <= r->finish; p++)
513 lra_live_range_t r2;
515 for (r2 = start_point_ranges[p];
516 r2 != NULL;
517 r2 = r2->start_next)
519 if (r2->regno >= lra_constraint_new_regno_start
520 && lra_reg_info[r2->regno].preferred_hard_regno1 >= 0
521 && live_pseudos_reg_renumber[r2->regno] < 0
522 && rclass_intersect_p[regno_allocno_class_array[r2->regno]])
523 sparseset_set_bit (conflict_reload_and_inheritance_pseudos,
524 r2->regno);
525 if (live_pseudos_reg_renumber[r2->regno] >= 0
526 && rclass_intersect_p[regno_allocno_class_array[r2->regno]])
527 sparseset_set_bit (live_range_hard_reg_pseudos, r2->regno);
531 if ((hard_regno = lra_reg_info[regno].preferred_hard_regno1) >= 0)
533 adjust_hard_regno_cost
534 (hard_regno, -lra_reg_info[regno].preferred_hard_regno_profit1);
535 if ((hard_regno = lra_reg_info[regno].preferred_hard_regno2) >= 0)
536 adjust_hard_regno_cost
537 (hard_regno, -lra_reg_info[regno].preferred_hard_regno_profit2);
539 #ifdef STACK_REGS
540 if (lra_reg_info[regno].no_stack_p)
541 for (i = FIRST_STACK_REG; i <= LAST_STACK_REG; i++)
542 SET_HARD_REG_BIT (conflict_set, i);
543 #endif
544 sparseset_clear_bit (conflict_reload_and_inheritance_pseudos, regno);
545 val = lra_reg_info[regno].val;
546 offset = lra_reg_info[regno].offset;
547 CLEAR_HARD_REG_SET (impossible_start_hard_regs);
548 EXECUTE_IF_SET_IN_SPARSESET (live_range_hard_reg_pseudos, conflict_regno)
549 if (lra_reg_val_equal_p (conflict_regno, val, offset))
551 conflict_hr = live_pseudos_reg_renumber[conflict_regno];
552 nregs = (hard_regno_nregs[conflict_hr]
553 [lra_reg_info[conflict_regno].biggest_mode]);
554 /* Remember about multi-register pseudos. For example, 2 hard
555 register pseudos can start on the same hard register but can
556 not start on HR and HR+1/HR-1. */
557 for (hr = conflict_hr + 1;
558 hr < FIRST_PSEUDO_REGISTER && hr < conflict_hr + nregs;
559 hr++)
560 SET_HARD_REG_BIT (impossible_start_hard_regs, hr);
561 for (hr = conflict_hr - 1;
562 hr >= 0 && hr + hard_regno_nregs[hr][biggest_mode] > conflict_hr;
563 hr--)
564 SET_HARD_REG_BIT (impossible_start_hard_regs, hr);
566 else
568 add_to_hard_reg_set (&conflict_set,
569 lra_reg_info[conflict_regno].biggest_mode,
570 live_pseudos_reg_renumber[conflict_regno]);
571 if (hard_reg_set_subset_p (reg_class_contents[rclass],
572 conflict_set))
573 return -1;
575 EXECUTE_IF_SET_IN_SPARSESET (conflict_reload_and_inheritance_pseudos,
576 conflict_regno)
577 if (!lra_reg_val_equal_p (conflict_regno, val, offset))
579 lra_assert (live_pseudos_reg_renumber[conflict_regno] < 0);
580 if ((hard_regno
581 = lra_reg_info[conflict_regno].preferred_hard_regno1) >= 0)
583 adjust_hard_regno_cost
584 (hard_regno,
585 lra_reg_info[conflict_regno].preferred_hard_regno_profit1);
586 if ((hard_regno
587 = lra_reg_info[conflict_regno].preferred_hard_regno2) >= 0)
588 adjust_hard_regno_cost
589 (hard_regno,
590 lra_reg_info[conflict_regno].preferred_hard_regno_profit2);
593 /* Make sure that all registers in a multi-word pseudo belong to the
594 required class. */
595 IOR_COMPL_HARD_REG_SET (conflict_set, reg_class_contents[rclass]);
596 lra_assert (rclass != NO_REGS);
597 rclass_size = ira_class_hard_regs_num[rclass];
598 best_hard_regno = -1;
599 hard_regno = ira_class_hard_regs[rclass][0];
600 biggest_nregs = hard_regno_nregs[hard_regno][biggest_mode];
601 nregs_diff = (biggest_nregs
602 - hard_regno_nregs[hard_regno][PSEUDO_REGNO_MODE (regno)]);
603 COPY_HARD_REG_SET (available_regs, reg_class_contents[rclass]);
604 AND_COMPL_HARD_REG_SET (available_regs, lra_no_alloc_regs);
605 for (i = 0; i < rclass_size; i++)
607 if (try_only_hard_regno >= 0)
608 hard_regno = try_only_hard_regno;
609 else
610 hard_regno = ira_class_hard_regs[rclass][i];
611 if (! overlaps_hard_reg_set_p (conflict_set,
612 PSEUDO_REGNO_MODE (regno), hard_regno)
613 /* We can not use prohibited_class_mode_regs because it is
614 not defined for all classes. */
615 && HARD_REGNO_MODE_OK (hard_regno, PSEUDO_REGNO_MODE (regno))
616 && ! TEST_HARD_REG_BIT (impossible_start_hard_regs, hard_regno)
617 && (nregs_diff == 0
618 || (WORDS_BIG_ENDIAN
619 ? (hard_regno - nregs_diff >= 0
620 && TEST_HARD_REG_BIT (available_regs,
621 hard_regno - nregs_diff))
622 : TEST_HARD_REG_BIT (available_regs,
623 hard_regno + nregs_diff))))
625 if (hard_regno_costs_check[hard_regno]
626 != curr_hard_regno_costs_check)
628 hard_regno_costs_check[hard_regno] = curr_hard_regno_costs_check;
629 hard_regno_costs[hard_regno] = 0;
631 for (j = 0;
632 j < hard_regno_nregs[hard_regno][PSEUDO_REGNO_MODE (regno)];
633 j++)
634 if (! TEST_HARD_REG_BIT (call_used_reg_set, hard_regno + j)
635 && ! df_regs_ever_live_p (hard_regno + j))
636 /* It needs save restore. */
637 hard_regno_costs[hard_regno]
638 += (2
639 * REG_FREQ_FROM_BB (ENTRY_BLOCK_PTR_FOR_FN (cfun)->next_bb)
640 + 1);
641 priority = targetm.register_priority (hard_regno);
642 if (best_hard_regno < 0 || hard_regno_costs[hard_regno] < best_cost
643 || (hard_regno_costs[hard_regno] == best_cost
644 && (priority > best_priority
645 || (targetm.register_usage_leveling_p ()
646 && priority == best_priority
647 && best_usage > lra_hard_reg_usage[hard_regno]))))
649 best_hard_regno = hard_regno;
650 best_cost = hard_regno_costs[hard_regno];
651 best_priority = priority;
652 best_usage = lra_hard_reg_usage[hard_regno];
655 if (try_only_hard_regno >= 0 || (first_p && best_hard_regno >= 0))
656 break;
658 if (best_hard_regno >= 0)
659 *cost = best_cost - lra_reg_info[regno].freq;
660 return best_hard_regno;
663 /* Current value used for checking elements in
664 update_hard_regno_preference_check. */
665 static int curr_update_hard_regno_preference_check;
666 /* If an element value is equal to the above variable value, then the
667 corresponding regno has been processed for preference
668 propagation. */
669 static int *update_hard_regno_preference_check;
671 /* Update the preference for using HARD_REGNO for pseudos that are
672 connected directly or indirectly with REGNO. Apply divisor DIV
673 to any preference adjustments.
675 The more indirectly a pseudo is connected, the smaller its effect
676 should be. We therefore increase DIV on each "hop". */
677 static void
678 update_hard_regno_preference (int regno, int hard_regno, int div)
680 int another_regno, cost;
681 lra_copy_t cp, next_cp;
683 /* Search depth 5 seems to be enough. */
684 if (div > (1 << 5))
685 return;
686 for (cp = lra_reg_info[regno].copies; cp != NULL; cp = next_cp)
688 if (cp->regno1 == regno)
690 next_cp = cp->regno1_next;
691 another_regno = cp->regno2;
693 else if (cp->regno2 == regno)
695 next_cp = cp->regno2_next;
696 another_regno = cp->regno1;
698 else
699 gcc_unreachable ();
700 if (reg_renumber[another_regno] < 0
701 && (update_hard_regno_preference_check[another_regno]
702 != curr_update_hard_regno_preference_check))
704 update_hard_regno_preference_check[another_regno]
705 = curr_update_hard_regno_preference_check;
706 cost = cp->freq < div ? 1 : cp->freq / div;
707 lra_setup_reload_pseudo_preferenced_hard_reg
708 (another_regno, hard_regno, cost);
709 update_hard_regno_preference (another_regno, hard_regno, div * 2);
714 /* Return prefix title for pseudo REGNO. */
715 static const char *
716 pseudo_prefix_title (int regno)
718 return
719 (regno < lra_constraint_new_regno_start ? ""
720 : bitmap_bit_p (&lra_inheritance_pseudos, regno) ? "inheritance "
721 : bitmap_bit_p (&lra_split_regs, regno) ? "split "
722 : bitmap_bit_p (&lra_optional_reload_pseudos, regno) ? "optional reload "
723 : bitmap_bit_p (&lra_subreg_reload_pseudos, regno) ? "subreg reload "
724 : "reload ");
727 /* Update REG_RENUMBER and other pseudo preferences by assignment of
728 HARD_REGNO to pseudo REGNO and print about it if PRINT_P. */
729 void
730 lra_setup_reg_renumber (int regno, int hard_regno, bool print_p)
732 int i, hr;
734 /* We can not just reassign hard register. */
735 lra_assert (hard_regno < 0 || reg_renumber[regno] < 0);
736 if ((hr = hard_regno) < 0)
737 hr = reg_renumber[regno];
738 reg_renumber[regno] = hard_regno;
739 lra_assert (hr >= 0);
740 for (i = 0; i < hard_regno_nregs[hr][PSEUDO_REGNO_MODE (regno)]; i++)
741 if (hard_regno < 0)
742 lra_hard_reg_usage[hr + i] -= lra_reg_info[regno].freq;
743 else
744 lra_hard_reg_usage[hr + i] += lra_reg_info[regno].freq;
745 if (print_p && lra_dump_file != NULL)
746 fprintf (lra_dump_file, " Assign %d to %sr%d (freq=%d)\n",
747 reg_renumber[regno], pseudo_prefix_title (regno),
748 regno, lra_reg_info[regno].freq);
749 if (hard_regno >= 0)
751 curr_update_hard_regno_preference_check++;
752 update_hard_regno_preference (regno, hard_regno, 1);
756 /* Pseudos which occur in insns containing a particular pseudo. */
757 static bitmap_head insn_conflict_pseudos;
759 /* Bitmaps used to contain spill pseudos for given pseudo hard regno
760 and best spill pseudos for given pseudo (and best hard regno). */
761 static bitmap_head spill_pseudos_bitmap, best_spill_pseudos_bitmap;
763 /* Current pseudo check for validity of elements in
764 TRY_HARD_REG_PSEUDOS. */
765 static int curr_pseudo_check;
766 /* Array used for validity of elements in TRY_HARD_REG_PSEUDOS. */
767 static int try_hard_reg_pseudos_check[FIRST_PSEUDO_REGISTER];
768 /* Pseudos who hold given hard register at the considered points. */
769 static bitmap_head try_hard_reg_pseudos[FIRST_PSEUDO_REGISTER];
771 /* Set up try_hard_reg_pseudos for given program point P and class
772 RCLASS. Those are pseudos living at P and assigned to a hard
773 register of RCLASS. In other words, those are pseudos which can be
774 spilled to assign a hard register of RCLASS to a pseudo living at
775 P. */
776 static void
777 setup_try_hard_regno_pseudos (int p, enum reg_class rclass)
779 int i, hard_regno;
780 enum machine_mode mode;
781 unsigned int spill_regno;
782 bitmap_iterator bi;
784 /* Find what pseudos could be spilled. */
785 EXECUTE_IF_SET_IN_BITMAP (&live_hard_reg_pseudos[p], 0, spill_regno, bi)
787 mode = PSEUDO_REGNO_MODE (spill_regno);
788 hard_regno = live_pseudos_reg_renumber[spill_regno];
789 if (overlaps_hard_reg_set_p (reg_class_contents[rclass],
790 mode, hard_regno))
792 for (i = hard_regno_nregs[hard_regno][mode] - 1; i >= 0; i--)
794 if (try_hard_reg_pseudos_check[hard_regno + i]
795 != curr_pseudo_check)
797 try_hard_reg_pseudos_check[hard_regno + i]
798 = curr_pseudo_check;
799 bitmap_clear (&try_hard_reg_pseudos[hard_regno + i]);
801 bitmap_set_bit (&try_hard_reg_pseudos[hard_regno + i],
802 spill_regno);
808 /* Assign temporarily HARD_REGNO to pseudo REGNO. Temporary
809 assignment means that we might undo the data change. */
810 static void
811 assign_temporarily (int regno, int hard_regno)
813 int p;
814 lra_live_range_t r;
816 for (r = lra_reg_info[regno].live_ranges; r != NULL; r = r->next)
818 for (p = r->start; p <= r->finish; p++)
819 if (hard_regno < 0)
820 bitmap_clear_bit (&live_hard_reg_pseudos[p], regno);
821 else
823 bitmap_set_bit (&live_hard_reg_pseudos[p], regno);
824 insert_in_live_range_start_chain (regno);
827 live_pseudos_reg_renumber[regno] = hard_regno;
830 /* Array used for sorting reload pseudos for subsequent allocation
831 after spilling some pseudo. */
832 static int *sorted_reload_pseudos;
834 /* Spill some pseudos for a reload pseudo REGNO and return hard
835 register which should be used for pseudo after spilling. The
836 function adds spilled pseudos to SPILLED_PSEUDO_BITMAP. When we
837 choose hard register (and pseudos occupying the hard registers and
838 to be spilled), we take into account not only how REGNO will
839 benefit from the spills but also how other reload pseudos not yet
840 assigned to hard registers benefit from the spills too. In very
841 rare cases, the function can fail and return -1.
843 If FIRST_P, return the first available hard reg ignoring other
844 criteria, e.g. allocation cost and cost of spilling non-reload
845 pseudos. This approach results in less hard reg pool fragmentation
846 and permit to allocate hard regs to reload pseudos in complicated
847 situations where pseudo sizes are different. */
848 static int
849 spill_for (int regno, bitmap spilled_pseudo_bitmap, bool first_p)
851 int i, j, n, p, hard_regno, best_hard_regno, cost, best_cost, rclass_size;
852 int reload_hard_regno, reload_cost;
853 enum machine_mode mode;
854 enum reg_class rclass;
855 unsigned int spill_regno, reload_regno, uid;
856 int insn_pseudos_num, best_insn_pseudos_num;
857 lra_live_range_t r;
858 bitmap_iterator bi;
860 rclass = regno_allocno_class_array[regno];
861 lra_assert (reg_renumber[regno] < 0 && rclass != NO_REGS);
862 bitmap_clear (&insn_conflict_pseudos);
863 bitmap_clear (&best_spill_pseudos_bitmap);
864 EXECUTE_IF_SET_IN_BITMAP (&lra_reg_info[regno].insn_bitmap, 0, uid, bi)
866 struct lra_insn_reg *ir;
868 for (ir = lra_get_insn_regs (uid); ir != NULL; ir = ir->next)
869 if (ir->regno >= FIRST_PSEUDO_REGISTER)
870 bitmap_set_bit (&insn_conflict_pseudos, ir->regno);
872 best_hard_regno = -1;
873 best_cost = INT_MAX;
874 best_insn_pseudos_num = INT_MAX;
875 rclass_size = ira_class_hard_regs_num[rclass];
876 mode = PSEUDO_REGNO_MODE (regno);
877 /* Invalidate try_hard_reg_pseudos elements. */
878 curr_pseudo_check++;
879 for (r = lra_reg_info[regno].live_ranges; r != NULL; r = r->next)
880 for (p = r->start; p <= r->finish; p++)
881 setup_try_hard_regno_pseudos (p, rclass);
882 for (i = 0; i < rclass_size; i++)
884 hard_regno = ira_class_hard_regs[rclass][i];
885 bitmap_clear (&spill_pseudos_bitmap);
886 for (j = hard_regno_nregs[hard_regno][mode] - 1; j >= 0; j--)
888 if (try_hard_reg_pseudos_check[hard_regno + j] != curr_pseudo_check)
889 continue;
890 lra_assert (!bitmap_empty_p (&try_hard_reg_pseudos[hard_regno + j]));
891 bitmap_ior_into (&spill_pseudos_bitmap,
892 &try_hard_reg_pseudos[hard_regno + j]);
894 /* Spill pseudos. */
895 EXECUTE_IF_SET_IN_BITMAP (&spill_pseudos_bitmap, 0, spill_regno, bi)
896 if ((pic_offset_table_rtx != NULL
897 && spill_regno == REGNO (pic_offset_table_rtx))
898 || ((int) spill_regno >= lra_constraint_new_regno_start
899 && ! bitmap_bit_p (&lra_inheritance_pseudos, spill_regno)
900 && ! bitmap_bit_p (&lra_split_regs, spill_regno)
901 && ! bitmap_bit_p (&lra_subreg_reload_pseudos, spill_regno)
902 && ! bitmap_bit_p (&lra_optional_reload_pseudos, spill_regno)))
903 goto fail;
904 insn_pseudos_num = 0;
905 if (lra_dump_file != NULL)
906 fprintf (lra_dump_file, " Trying %d:", hard_regno);
907 sparseset_clear (live_range_reload_inheritance_pseudos);
908 EXECUTE_IF_SET_IN_BITMAP (&spill_pseudos_bitmap, 0, spill_regno, bi)
910 if (bitmap_bit_p (&insn_conflict_pseudos, spill_regno))
911 insn_pseudos_num++;
912 for (r = lra_reg_info[spill_regno].live_ranges;
913 r != NULL;
914 r = r->next)
916 for (p = r->start; p <= r->finish; p++)
918 lra_live_range_t r2;
920 for (r2 = start_point_ranges[p];
921 r2 != NULL;
922 r2 = r2->start_next)
923 if (r2->regno >= lra_constraint_new_regno_start)
924 sparseset_set_bit (live_range_reload_inheritance_pseudos,
925 r2->regno);
929 n = 0;
930 if (sparseset_cardinality (live_range_reload_inheritance_pseudos)
931 <= (unsigned)LRA_MAX_CONSIDERED_RELOAD_PSEUDOS)
932 EXECUTE_IF_SET_IN_SPARSESET (live_range_reload_inheritance_pseudos,
933 reload_regno)
934 if ((int) reload_regno != regno
935 && (ira_reg_classes_intersect_p
936 [rclass][regno_allocno_class_array[reload_regno]])
937 && live_pseudos_reg_renumber[reload_regno] < 0
938 && find_hard_regno_for (reload_regno, &cost, -1, first_p) < 0)
939 sorted_reload_pseudos[n++] = reload_regno;
940 EXECUTE_IF_SET_IN_BITMAP (&spill_pseudos_bitmap, 0, spill_regno, bi)
942 update_lives (spill_regno, true);
943 if (lra_dump_file != NULL)
944 fprintf (lra_dump_file, " spill %d(freq=%d)",
945 spill_regno, lra_reg_info[spill_regno].freq);
947 hard_regno = find_hard_regno_for (regno, &cost, -1, first_p);
948 if (hard_regno >= 0)
950 assign_temporarily (regno, hard_regno);
951 qsort (sorted_reload_pseudos, n, sizeof (int),
952 reload_pseudo_compare_func);
953 for (j = 0; j < n; j++)
955 reload_regno = sorted_reload_pseudos[j];
956 lra_assert (live_pseudos_reg_renumber[reload_regno] < 0);
957 if ((reload_hard_regno
958 = find_hard_regno_for (reload_regno,
959 &reload_cost, -1, first_p)) >= 0)
961 if (lra_dump_file != NULL)
962 fprintf (lra_dump_file, " assign %d(cost=%d)",
963 reload_regno, reload_cost);
964 assign_temporarily (reload_regno, reload_hard_regno);
965 cost += reload_cost;
968 EXECUTE_IF_SET_IN_BITMAP (&spill_pseudos_bitmap, 0, spill_regno, bi)
970 rtx_insn_list *x;
972 cost += lra_reg_info[spill_regno].freq;
973 if (ira_reg_equiv[spill_regno].memory != NULL
974 || ira_reg_equiv[spill_regno].constant != NULL)
975 for (x = ira_reg_equiv[spill_regno].init_insns;
976 x != NULL;
977 x = x->next ())
978 cost -= REG_FREQ_FROM_BB (BLOCK_FOR_INSN (x->insn ()));
980 if (best_insn_pseudos_num > insn_pseudos_num
981 || (best_insn_pseudos_num == insn_pseudos_num
982 && best_cost > cost))
984 best_insn_pseudos_num = insn_pseudos_num;
985 best_cost = cost;
986 best_hard_regno = hard_regno;
987 bitmap_copy (&best_spill_pseudos_bitmap, &spill_pseudos_bitmap);
988 if (lra_dump_file != NULL)
989 fprintf (lra_dump_file, " Now best %d(cost=%d)\n",
990 hard_regno, cost);
992 assign_temporarily (regno, -1);
993 for (j = 0; j < n; j++)
995 reload_regno = sorted_reload_pseudos[j];
996 if (live_pseudos_reg_renumber[reload_regno] >= 0)
997 assign_temporarily (reload_regno, -1);
1000 if (lra_dump_file != NULL)
1001 fprintf (lra_dump_file, "\n");
1002 /* Restore the live hard reg pseudo info for spilled pseudos. */
1003 EXECUTE_IF_SET_IN_BITMAP (&spill_pseudos_bitmap, 0, spill_regno, bi)
1004 update_lives (spill_regno, false);
1005 fail:
1008 /* Spill: */
1009 EXECUTE_IF_SET_IN_BITMAP (&best_spill_pseudos_bitmap, 0, spill_regno, bi)
1011 if ((int) spill_regno >= lra_constraint_new_regno_start)
1012 former_reload_pseudo_spill_p = true;
1013 if (lra_dump_file != NULL)
1014 fprintf (lra_dump_file, " Spill %sr%d(hr=%d, freq=%d) for r%d\n",
1015 pseudo_prefix_title (spill_regno),
1016 spill_regno, reg_renumber[spill_regno],
1017 lra_reg_info[spill_regno].freq, regno);
1018 update_lives (spill_regno, true);
1019 lra_setup_reg_renumber (spill_regno, -1, false);
1021 bitmap_ior_into (spilled_pseudo_bitmap, &best_spill_pseudos_bitmap);
1022 return best_hard_regno;
1025 /* Assign HARD_REGNO to REGNO. */
1026 static void
1027 assign_hard_regno (int hard_regno, int regno)
1029 int i;
1031 lra_assert (hard_regno >= 0);
1032 lra_setup_reg_renumber (regno, hard_regno, true);
1033 update_lives (regno, false);
1034 for (i = 0;
1035 i < hard_regno_nregs[hard_regno][lra_reg_info[regno].biggest_mode];
1036 i++)
1037 df_set_regs_ever_live (hard_regno + i, true);
1040 /* Array used for sorting different pseudos. */
1041 static int *sorted_pseudos;
1043 /* The constraints pass is allowed to create equivalences between
1044 pseudos that make the current allocation "incorrect" (in the sense
1045 that pseudos are assigned to hard registers from their own conflict
1046 sets). The global variable lra_risky_transformations_p says
1047 whether this might have happened.
1049 Process pseudos assigned to hard registers (less frequently used
1050 first), spill if a conflict is found, and mark the spilled pseudos
1051 in SPILLED_PSEUDO_BITMAP. Set up LIVE_HARD_REG_PSEUDOS from
1052 pseudos, assigned to hard registers. */
1053 static void
1054 setup_live_pseudos_and_spill_after_risky_transforms (bitmap
1055 spilled_pseudo_bitmap)
1057 int p, i, j, n, regno, hard_regno;
1058 unsigned int k, conflict_regno;
1059 int val, offset;
1060 HARD_REG_SET conflict_set;
1061 enum machine_mode mode;
1062 lra_live_range_t r;
1063 bitmap_iterator bi;
1064 int max_regno = max_reg_num ();
1066 if (! lra_risky_transformations_p)
1068 for (i = FIRST_PSEUDO_REGISTER; i < max_regno; i++)
1069 if (reg_renumber[i] >= 0 && lra_reg_info[i].nrefs > 0)
1070 update_lives (i, false);
1071 return;
1073 for (n = 0, i = FIRST_PSEUDO_REGISTER; i < max_regno; i++)
1074 if ((pic_offset_table_rtx == NULL_RTX
1075 || i != (int) REGNO (pic_offset_table_rtx))
1076 && reg_renumber[i] >= 0 && lra_reg_info[i].nrefs > 0)
1077 sorted_pseudos[n++] = i;
1078 qsort (sorted_pseudos, n, sizeof (int), pseudo_compare_func);
1079 if (pic_offset_table_rtx != NULL_RTX
1080 && (regno = REGNO (pic_offset_table_rtx)) >= FIRST_PSEUDO_REGISTER
1081 && reg_renumber[regno] >= 0 && lra_reg_info[regno].nrefs > 0)
1082 sorted_pseudos[n++] = regno;
1083 for (i = n - 1; i >= 0; i--)
1085 regno = sorted_pseudos[i];
1086 hard_regno = reg_renumber[regno];
1087 lra_assert (hard_regno >= 0);
1088 mode = lra_reg_info[regno].biggest_mode;
1089 sparseset_clear (live_range_hard_reg_pseudos);
1090 for (r = lra_reg_info[regno].live_ranges; r != NULL; r = r->next)
1092 EXECUTE_IF_SET_IN_BITMAP (&live_hard_reg_pseudos[r->start], 0, k, bi)
1093 sparseset_set_bit (live_range_hard_reg_pseudos, k);
1094 for (p = r->start + 1; p <= r->finish; p++)
1096 lra_live_range_t r2;
1098 for (r2 = start_point_ranges[p];
1099 r2 != NULL;
1100 r2 = r2->start_next)
1101 if (live_pseudos_reg_renumber[r2->regno] >= 0)
1102 sparseset_set_bit (live_range_hard_reg_pseudos, r2->regno);
1105 COPY_HARD_REG_SET (conflict_set, lra_no_alloc_regs);
1106 IOR_HARD_REG_SET (conflict_set, lra_reg_info[regno].conflict_hard_regs);
1107 val = lra_reg_info[regno].val;
1108 offset = lra_reg_info[regno].offset;
1109 EXECUTE_IF_SET_IN_SPARSESET (live_range_hard_reg_pseudos, conflict_regno)
1110 if (!lra_reg_val_equal_p (conflict_regno, val, offset)
1111 /* If it is multi-register pseudos they should start on
1112 the same hard register. */
1113 || hard_regno != reg_renumber[conflict_regno])
1114 add_to_hard_reg_set (&conflict_set,
1115 lra_reg_info[conflict_regno].biggest_mode,
1116 reg_renumber[conflict_regno]);
1117 if (! overlaps_hard_reg_set_p (conflict_set, mode, hard_regno))
1119 update_lives (regno, false);
1120 continue;
1122 bitmap_set_bit (spilled_pseudo_bitmap, regno);
1123 for (j = 0;
1124 j < hard_regno_nregs[hard_regno][PSEUDO_REGNO_MODE (regno)];
1125 j++)
1126 lra_hard_reg_usage[hard_regno + j] -= lra_reg_info[regno].freq;
1127 reg_renumber[regno] = -1;
1128 if (regno >= lra_constraint_new_regno_start)
1129 former_reload_pseudo_spill_p = true;
1130 if (lra_dump_file != NULL)
1131 fprintf (lra_dump_file, " Spill r%d after risky transformations\n",
1132 regno);
1136 /* Improve allocation by assigning the same hard regno of inheritance
1137 pseudos to the connected pseudos. We need this because inheritance
1138 pseudos are allocated after reload pseudos in the thread and when
1139 we assign a hard register to a reload pseudo we don't know yet that
1140 the connected inheritance pseudos can get the same hard register.
1141 Add pseudos with changed allocation to bitmap CHANGED_PSEUDOS. */
1142 static void
1143 improve_inheritance (bitmap changed_pseudos)
1145 unsigned int k;
1146 int regno, another_regno, hard_regno, another_hard_regno, cost, i, n;
1147 lra_copy_t cp, next_cp;
1148 bitmap_iterator bi;
1150 if (lra_inheritance_iter > LRA_MAX_INHERITANCE_PASSES)
1151 return;
1152 n = 0;
1153 EXECUTE_IF_SET_IN_BITMAP (&lra_inheritance_pseudos, 0, k, bi)
1154 if (reg_renumber[k] >= 0 && lra_reg_info[k].nrefs != 0)
1155 sorted_pseudos[n++] = k;
1156 qsort (sorted_pseudos, n, sizeof (int), pseudo_compare_func);
1157 for (i = 0; i < n; i++)
1159 regno = sorted_pseudos[i];
1160 hard_regno = reg_renumber[regno];
1161 lra_assert (hard_regno >= 0);
1162 for (cp = lra_reg_info[regno].copies; cp != NULL; cp = next_cp)
1164 if (cp->regno1 == regno)
1166 next_cp = cp->regno1_next;
1167 another_regno = cp->regno2;
1169 else if (cp->regno2 == regno)
1171 next_cp = cp->regno2_next;
1172 another_regno = cp->regno1;
1174 else
1175 gcc_unreachable ();
1176 /* Don't change reload pseudo allocation. It might have
1177 this allocation for a purpose and changing it can result
1178 in LRA cycling. */
1179 if ((another_regno < lra_constraint_new_regno_start
1180 || bitmap_bit_p (&lra_inheritance_pseudos, another_regno))
1181 && (another_hard_regno = reg_renumber[another_regno]) >= 0
1182 && another_hard_regno != hard_regno)
1184 if (lra_dump_file != NULL)
1185 fprintf
1186 (lra_dump_file,
1187 " Improving inheritance for %d(%d) and %d(%d)...\n",
1188 regno, hard_regno, another_regno, another_hard_regno);
1189 update_lives (another_regno, true);
1190 lra_setup_reg_renumber (another_regno, -1, false);
1191 if (hard_regno == find_hard_regno_for (another_regno, &cost,
1192 hard_regno, false))
1193 assign_hard_regno (hard_regno, another_regno);
1194 else
1195 assign_hard_regno (another_hard_regno, another_regno);
1196 bitmap_set_bit (changed_pseudos, another_regno);
1203 /* Bitmap finally containing all pseudos spilled on this assignment
1204 pass. */
1205 static bitmap_head all_spilled_pseudos;
1206 /* All pseudos whose allocation was changed. */
1207 static bitmap_head changed_pseudo_bitmap;
1210 /* Add to LIVE_RANGE_HARD_REG_PSEUDOS all pseudos conflicting with
1211 REGNO and whose hard regs can be assigned to REGNO. */
1212 static void
1213 find_all_spills_for (int regno)
1215 int p;
1216 lra_live_range_t r;
1217 unsigned int k;
1218 bitmap_iterator bi;
1219 enum reg_class rclass;
1220 bool *rclass_intersect_p;
1222 rclass = regno_allocno_class_array[regno];
1223 rclass_intersect_p = ira_reg_classes_intersect_p[rclass];
1224 for (r = lra_reg_info[regno].live_ranges; r != NULL; r = r->next)
1226 EXECUTE_IF_SET_IN_BITMAP (&live_hard_reg_pseudos[r->start], 0, k, bi)
1227 if (rclass_intersect_p[regno_allocno_class_array[k]])
1228 sparseset_set_bit (live_range_hard_reg_pseudos, k);
1229 for (p = r->start + 1; p <= r->finish; p++)
1231 lra_live_range_t r2;
1233 for (r2 = start_point_ranges[p];
1234 r2 != NULL;
1235 r2 = r2->start_next)
1237 if (live_pseudos_reg_renumber[r2->regno] >= 0
1238 && rclass_intersect_p[regno_allocno_class_array[r2->regno]])
1239 sparseset_set_bit (live_range_hard_reg_pseudos, r2->regno);
1245 /* Assign hard registers to reload pseudos and other pseudos. */
1246 static void
1247 assign_by_spills (void)
1249 int i, n, nfails, iter, regno, hard_regno, cost, restore_regno;
1250 rtx_insn *insn;
1251 bitmap_head changed_insns, do_not_assign_nonreload_pseudos;
1252 unsigned int u, conflict_regno;
1253 bitmap_iterator bi;
1254 bool reload_p;
1255 int max_regno = max_reg_num ();
1257 for (n = 0, i = lra_constraint_new_regno_start; i < max_regno; i++)
1258 if (reg_renumber[i] < 0 && lra_reg_info[i].nrefs != 0
1259 && regno_allocno_class_array[i] != NO_REGS)
1260 sorted_pseudos[n++] = i;
1261 bitmap_initialize (&insn_conflict_pseudos, &reg_obstack);
1262 bitmap_initialize (&spill_pseudos_bitmap, &reg_obstack);
1263 bitmap_initialize (&best_spill_pseudos_bitmap, &reg_obstack);
1264 update_hard_regno_preference_check = XCNEWVEC (int, max_regno);
1265 curr_update_hard_regno_preference_check = 0;
1266 memset (try_hard_reg_pseudos_check, 0, sizeof (try_hard_reg_pseudos_check));
1267 for (i = 0; i < FIRST_PSEUDO_REGISTER; i++)
1268 bitmap_initialize (&try_hard_reg_pseudos[i], &reg_obstack);
1269 curr_pseudo_check = 0;
1270 bitmap_initialize (&changed_insns, &reg_obstack);
1271 bitmap_initialize (&non_reload_pseudos, &reg_obstack);
1272 bitmap_ior (&non_reload_pseudos, &lra_inheritance_pseudos, &lra_split_regs);
1273 bitmap_ior_into (&non_reload_pseudos, &lra_subreg_reload_pseudos);
1274 bitmap_ior_into (&non_reload_pseudos, &lra_optional_reload_pseudos);
1275 for (iter = 0; iter <= 1; iter++)
1277 qsort (sorted_pseudos, n, sizeof (int), reload_pseudo_compare_func);
1278 nfails = 0;
1279 for (i = 0; i < n; i++)
1281 regno = sorted_pseudos[i];
1282 if (lra_dump_file != NULL)
1283 fprintf (lra_dump_file, " Assigning to %d "
1284 "(cl=%s, orig=%d, freq=%d, tfirst=%d, tfreq=%d)...\n",
1285 regno, reg_class_names[regno_allocno_class_array[regno]],
1286 ORIGINAL_REGNO (regno_reg_rtx[regno]),
1287 lra_reg_info[regno].freq, regno_assign_info[regno].first,
1288 regno_assign_info[regno_assign_info[regno].first].freq);
1289 hard_regno = find_hard_regno_for (regno, &cost, -1, iter == 1);
1290 reload_p = ! bitmap_bit_p (&non_reload_pseudos, regno);
1291 if (hard_regno < 0 && reload_p)
1292 hard_regno = spill_for (regno, &all_spilled_pseudos, iter == 1);
1293 if (hard_regno < 0)
1295 if (reload_p)
1296 sorted_pseudos[nfails++] = regno;
1298 else
1300 /* This register might have been spilled by the previous
1301 pass. Indicate that it is no longer spilled. */
1302 bitmap_clear_bit (&all_spilled_pseudos, regno);
1303 assign_hard_regno (hard_regno, regno);
1304 if (! reload_p)
1305 /* As non-reload pseudo assignment is changed we
1306 should reconsider insns referring for the
1307 pseudo. */
1308 bitmap_set_bit (&changed_pseudo_bitmap, regno);
1311 if (nfails == 0)
1312 break;
1313 if (iter > 0)
1315 /* We did not assign hard regs to reload pseudos after two iterations.
1316 Either it's an asm and something is wrong with the constraints, or
1317 we have run out of spill registers; error out in either case. */
1318 bool asm_p = false;
1319 bitmap_head failed_reload_insns;
1321 bitmap_initialize (&failed_reload_insns, &reg_obstack);
1322 for (i = 0; i < nfails; i++)
1324 regno = sorted_pseudos[i];
1325 bitmap_ior_into (&failed_reload_insns,
1326 &lra_reg_info[regno].insn_bitmap);
1327 /* Assign an arbitrary hard register of regno class to
1328 avoid further trouble with this insn. */
1329 bitmap_clear_bit (&all_spilled_pseudos, regno);
1330 assign_hard_regno
1331 (ira_class_hard_regs[regno_allocno_class_array[regno]][0],
1332 regno);
1334 EXECUTE_IF_SET_IN_BITMAP (&failed_reload_insns, 0, u, bi)
1336 insn = lra_insn_recog_data[u]->insn;
1337 if (asm_noperands (PATTERN (insn)) >= 0)
1339 asm_p = true;
1340 error_for_asm (insn,
1341 "%<asm%> operand has impossible constraints");
1342 /* Avoid further trouble with this insn.
1343 For asm goto, instead of fixing up all the edges
1344 just clear the template and clear input operands
1345 (asm goto doesn't have any output operands). */
1346 if (JUMP_P (insn))
1348 rtx asm_op = extract_asm_operands (PATTERN (insn));
1349 ASM_OPERANDS_TEMPLATE (asm_op) = ggc_strdup ("");
1350 ASM_OPERANDS_INPUT_VEC (asm_op) = rtvec_alloc (0);
1351 ASM_OPERANDS_INPUT_CONSTRAINT_VEC (asm_op) = rtvec_alloc (0);
1352 lra_update_insn_regno_info (insn);
1354 else
1356 PATTERN (insn) = gen_rtx_USE (VOIDmode, const0_rtx);
1357 lra_set_insn_deleted (insn);
1360 else if (!asm_p)
1362 error ("unable to find a register to spill");
1363 fatal_insn ("this is the insn:", insn);
1366 break;
1368 /* This is a very rare event. We can not assign a hard register
1369 to reload pseudo because the hard register was assigned to
1370 another reload pseudo on a previous assignment pass. For x86
1371 example, on the 1st pass we assigned CX (although another
1372 hard register could be used for this) to reload pseudo in an
1373 insn, on the 2nd pass we need CX (and only this) hard
1374 register for a new reload pseudo in the same insn. Another
1375 possible situation may occur in assigning to multi-regs
1376 reload pseudos when hard regs pool is too fragmented even
1377 after spilling non-reload pseudos.
1379 We should do something radical here to succeed. Here we
1380 spill *all* conflicting pseudos and reassign them. */
1381 if (lra_dump_file != NULL)
1382 fprintf (lra_dump_file, " 2nd iter for reload pseudo assignments:\n");
1383 sparseset_clear (live_range_hard_reg_pseudos);
1384 for (i = 0; i < nfails; i++)
1386 if (lra_dump_file != NULL)
1387 fprintf (lra_dump_file, " Reload r%d assignment failure\n",
1388 sorted_pseudos[i]);
1389 find_all_spills_for (sorted_pseudos[i]);
1391 EXECUTE_IF_SET_IN_SPARSESET (live_range_hard_reg_pseudos, conflict_regno)
1393 if ((int) conflict_regno >= lra_constraint_new_regno_start)
1395 sorted_pseudos[nfails++] = conflict_regno;
1396 former_reload_pseudo_spill_p = true;
1398 if (lra_dump_file != NULL)
1399 fprintf (lra_dump_file, " Spill %s r%d(hr=%d, freq=%d)\n",
1400 pseudo_prefix_title (conflict_regno), conflict_regno,
1401 reg_renumber[conflict_regno],
1402 lra_reg_info[conflict_regno].freq);
1403 update_lives (conflict_regno, true);
1404 lra_setup_reg_renumber (conflict_regno, -1, false);
1406 n = nfails;
1408 improve_inheritance (&changed_pseudo_bitmap);
1409 bitmap_clear (&non_reload_pseudos);
1410 bitmap_clear (&changed_insns);
1411 if (! lra_simple_p)
1413 /* We should not assign to original pseudos of inheritance
1414 pseudos or split pseudos if any its inheritance pseudo did
1415 not get hard register or any its split pseudo was not split
1416 because undo inheritance/split pass will extend live range of
1417 such inheritance or split pseudos. */
1418 bitmap_initialize (&do_not_assign_nonreload_pseudos, &reg_obstack);
1419 EXECUTE_IF_SET_IN_BITMAP (&lra_inheritance_pseudos, 0, u, bi)
1420 if ((restore_regno = lra_reg_info[u].restore_regno) >= 0
1421 && reg_renumber[u] < 0
1422 && bitmap_bit_p (&lra_inheritance_pseudos, u))
1423 bitmap_set_bit (&do_not_assign_nonreload_pseudos, restore_regno);
1424 EXECUTE_IF_SET_IN_BITMAP (&lra_split_regs, 0, u, bi)
1425 if ((restore_regno = lra_reg_info[u].restore_regno) >= 0
1426 && reg_renumber[u] >= 0)
1427 bitmap_set_bit (&do_not_assign_nonreload_pseudos, restore_regno);
1428 for (n = 0, i = FIRST_PSEUDO_REGISTER; i < max_regno; i++)
1429 if (((i < lra_constraint_new_regno_start
1430 && ! bitmap_bit_p (&do_not_assign_nonreload_pseudos, i))
1431 || (bitmap_bit_p (&lra_inheritance_pseudos, i)
1432 && lra_reg_info[i].restore_regno >= 0)
1433 || (bitmap_bit_p (&lra_split_regs, i)
1434 && lra_reg_info[i].restore_regno >= 0)
1435 || bitmap_bit_p (&lra_subreg_reload_pseudos, i)
1436 || bitmap_bit_p (&lra_optional_reload_pseudos, i))
1437 && reg_renumber[i] < 0 && lra_reg_info[i].nrefs != 0
1438 && regno_allocno_class_array[i] != NO_REGS)
1439 sorted_pseudos[n++] = i;
1440 bitmap_clear (&do_not_assign_nonreload_pseudos);
1441 if (n != 0 && lra_dump_file != NULL)
1442 fprintf (lra_dump_file, " Reassigning non-reload pseudos\n");
1443 qsort (sorted_pseudos, n, sizeof (int), pseudo_compare_func);
1444 for (i = 0; i < n; i++)
1446 regno = sorted_pseudos[i];
1447 hard_regno = find_hard_regno_for (regno, &cost, -1, false);
1448 if (hard_regno >= 0)
1450 assign_hard_regno (hard_regno, regno);
1451 /* We change allocation for non-reload pseudo on this
1452 iteration -- mark the pseudo for invalidation of used
1453 alternatives of insns containing the pseudo. */
1454 bitmap_set_bit (&changed_pseudo_bitmap, regno);
1456 else
1458 enum reg_class rclass = lra_get_allocno_class (regno);
1459 enum reg_class spill_class;
1461 if (targetm.spill_class == NULL
1462 || lra_reg_info[regno].restore_regno < 0
1463 || ! bitmap_bit_p (&lra_inheritance_pseudos, regno)
1464 || (spill_class
1465 = ((enum reg_class)
1466 targetm.spill_class
1467 ((reg_class_t) rclass,
1468 PSEUDO_REGNO_MODE (regno)))) == NO_REGS)
1469 continue;
1470 regno_allocno_class_array[regno] = spill_class;
1471 hard_regno = find_hard_regno_for (regno, &cost, -1, false);
1472 if (hard_regno < 0)
1473 regno_allocno_class_array[regno] = rclass;
1474 else
1476 setup_reg_classes
1477 (regno, spill_class, spill_class, spill_class);
1478 assign_hard_regno (hard_regno, regno);
1479 bitmap_set_bit (&changed_pseudo_bitmap, regno);
1484 free (update_hard_regno_preference_check);
1485 bitmap_clear (&best_spill_pseudos_bitmap);
1486 bitmap_clear (&spill_pseudos_bitmap);
1487 bitmap_clear (&insn_conflict_pseudos);
1491 /* Entry function to assign hard registers to new reload pseudos
1492 starting with LRA_CONSTRAINT_NEW_REGNO_START (by possible spilling
1493 of old pseudos) and possibly to the old pseudos. The function adds
1494 what insns to process for the next constraint pass. Those are all
1495 insns who contains non-reload and non-inheritance pseudos with
1496 changed allocation.
1498 Return true if we did not spill any non-reload and non-inheritance
1499 pseudos. */
1500 bool
1501 lra_assign (void)
1503 int i;
1504 unsigned int u;
1505 bitmap_iterator bi;
1506 bitmap_head insns_to_process;
1507 bool no_spills_p;
1508 int max_regno = max_reg_num ();
1510 timevar_push (TV_LRA_ASSIGN);
1511 lra_assignment_iter++;
1512 if (lra_dump_file != NULL)
1513 fprintf (lra_dump_file, "\n********** Assignment #%d: **********\n\n",
1514 lra_assignment_iter);
1515 init_lives ();
1516 sorted_pseudos = XNEWVEC (int, max_regno);
1517 sorted_reload_pseudos = XNEWVEC (int, max_regno);
1518 regno_allocno_class_array = XNEWVEC (enum reg_class, max_regno);
1519 for (i = FIRST_PSEUDO_REGISTER; i < max_regno; i++)
1520 regno_allocno_class_array[i] = lra_get_allocno_class (i);
1521 former_reload_pseudo_spill_p = false;
1522 init_regno_assign_info ();
1523 bitmap_initialize (&all_spilled_pseudos, &reg_obstack);
1524 create_live_range_start_chains ();
1525 setup_live_pseudos_and_spill_after_risky_transforms (&all_spilled_pseudos);
1526 #ifdef ENABLE_CHECKING
1527 if (!flag_use_caller_save)
1528 for (i = FIRST_PSEUDO_REGISTER; i < max_regno; i++)
1529 if (lra_reg_info[i].nrefs != 0 && reg_renumber[i] >= 0
1530 && lra_reg_info[i].call_p
1531 && overlaps_hard_reg_set_p (call_used_reg_set,
1532 PSEUDO_REGNO_MODE (i), reg_renumber[i]))
1533 gcc_unreachable ();
1534 #endif
1535 /* Setup insns to process on the next constraint pass. */
1536 bitmap_initialize (&changed_pseudo_bitmap, &reg_obstack);
1537 init_live_reload_and_inheritance_pseudos ();
1538 assign_by_spills ();
1539 finish_live_reload_and_inheritance_pseudos ();
1540 bitmap_ior_into (&changed_pseudo_bitmap, &all_spilled_pseudos);
1541 no_spills_p = true;
1542 EXECUTE_IF_SET_IN_BITMAP (&all_spilled_pseudos, 0, u, bi)
1543 /* We ignore spilled pseudos created on last inheritance pass
1544 because they will be removed. */
1545 if (lra_reg_info[u].restore_regno < 0)
1547 no_spills_p = false;
1548 break;
1550 finish_live_range_start_chains ();
1551 bitmap_clear (&all_spilled_pseudos);
1552 bitmap_initialize (&insns_to_process, &reg_obstack);
1553 EXECUTE_IF_SET_IN_BITMAP (&changed_pseudo_bitmap, 0, u, bi)
1554 bitmap_ior_into (&insns_to_process, &lra_reg_info[u].insn_bitmap);
1555 bitmap_clear (&changed_pseudo_bitmap);
1556 EXECUTE_IF_SET_IN_BITMAP (&insns_to_process, 0, u, bi)
1558 lra_push_insn_by_uid (u);
1559 /* Invalidate alternatives for insn should be processed. */
1560 lra_set_used_insn_alternative_by_uid (u, -1);
1562 bitmap_clear (&insns_to_process);
1563 finish_regno_assign_info ();
1564 free (regno_allocno_class_array);
1565 free (sorted_pseudos);
1566 free (sorted_reload_pseudos);
1567 finish_lives ();
1568 timevar_pop (TV_LRA_ASSIGN);
1569 if (former_reload_pseudo_spill_p)
1570 lra_assignment_iter_after_spill++;
1571 if (lra_assignment_iter_after_spill > LRA_MAX_ASSIGNMENT_ITERATION_NUMBER)
1572 internal_error
1573 ("Maximum number of LRA assignment passes is achieved (%d)\n",
1574 LRA_MAX_ASSIGNMENT_ITERATION_NUMBER);
1575 return no_spills_p;