1 /* Build live ranges for 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
12 GCC is distributed in the hope that it will be useful, but WITHOUT ANY
13 WARRANTY; without even the implied warranty of MERCHANTABILITY or
14 FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
17 You should have received a copy of the GNU General Public License
18 along with GCC; see the file COPYING3. If not see
19 <http://www.gnu.org/licenses/>. */
22 /* This file contains code to build pseudo live-ranges (analogous
23 structures used in IRA, so read comments about the live-ranges
24 there) and other info necessary for other passes to assign
25 hard-registers to pseudos, coalesce the spilled pseudos, and assign
26 stack memory slots to spilled pseudos. */
30 #include "coretypes.h"
32 #include "hard-reg-set.h"
35 #include "insn-config.h"
41 #include "basic-block.h"
45 #include "sparseset.h"
48 /* Program points are enumerated by numbers from range
49 0..LRA_LIVE_MAX_POINT-1. There are approximately two times more
50 program points than insns. Program points are places in the
51 program where liveness info can be changed. In most general case
52 (there are more complicated cases too) some program points
53 correspond to places where input operand dies and other ones
54 correspond to places where output operands are born. */
55 int lra_live_max_point
;
57 /* Accumulated execution frequency of all references for each hard
59 int lra_hard_reg_usage
[FIRST_PSEUDO_REGISTER
];
61 /* A global flag whose true value says to build live ranges for all
62 pseudos, otherwise the live ranges only for pseudos got memory is
63 build. True value means also building copies and setting up hard
64 register preferences. The complete info is necessary only for the
65 assignment pass. The complete info is not needed for the
66 coalescing and spill passes. */
67 static bool complete_info_p
;
69 /* Pseudos live at current point in the RTL scan. */
70 static sparseset pseudos_live
;
72 /* Pseudos probably living through calls and setjumps. As setjump is
73 a call too, if a bit in PSEUDOS_LIVE_THROUGH_SETJUMPS is set up
74 then the corresponding bit in PSEUDOS_LIVE_THROUGH_CALLS is set up
75 too. These data are necessary for cases when only one subreg of a
76 multi-reg pseudo is set up after a call. So we decide it is
77 probably live when traversing bb backward. We are sure about
78 living when we see its usage or definition of the pseudo. */
79 static sparseset pseudos_live_through_calls
;
80 static sparseset pseudos_live_through_setjumps
;
82 /* Set of hard regs (except eliminable ones) currently live. */
83 static HARD_REG_SET hard_regs_live
;
85 /* Set of pseudos and hard registers start living/dying in the current
86 insn. These sets are used to update REG_DEAD and REG_UNUSED notes
88 static sparseset start_living
, start_dying
;
90 /* Set of pseudos and hard regs dead and unused in the current
92 static sparseset unused_set
, dead_set
;
94 /* Pool for pseudo live ranges. */
95 static alloc_pool live_range_pool
;
97 /* Free live range LR. */
99 free_live_range (lra_live_range_t lr
)
101 pool_free (live_range_pool
, lr
);
104 /* Free live range list LR. */
106 free_live_range_list (lra_live_range_t lr
)
108 lra_live_range_t next
;
113 free_live_range (lr
);
118 /* Create and return pseudo live range with given attributes. */
119 static lra_live_range_t
120 create_live_range (int regno
, int start
, int finish
, lra_live_range_t next
)
124 p
= (lra_live_range_t
) pool_alloc (live_range_pool
);
132 /* Copy live range R and return the result. */
133 static lra_live_range_t
134 copy_live_range (lra_live_range_t r
)
138 p
= (lra_live_range_t
) pool_alloc (live_range_pool
);
143 /* Copy live range list given by its head R and return the result. */
145 lra_copy_live_range_list (lra_live_range_t r
)
147 lra_live_range_t p
, first
, *chain
;
150 for (chain
= &first
; r
!= NULL
; r
= r
->next
)
152 p
= copy_live_range (r
);
159 /* Merge *non-intersected* ranges R1 and R2 and returns the result.
160 The function maintains the order of ranges and tries to minimize
161 size of the result range list. Ranges R1 and R2 may not be used
164 lra_merge_live_ranges (lra_live_range_t r1
, lra_live_range_t r2
)
166 lra_live_range_t first
, last
, temp
;
172 for (first
= last
= NULL
; r1
!= NULL
&& r2
!= NULL
;)
174 if (r1
->start
< r2
->start
)
180 if (r1
->start
== r2
->finish
+ 1)
182 /* Joint ranges: merge r1 and r2 into r1. */
183 r1
->start
= r2
->start
;
186 pool_free (live_range_pool
, temp
);
190 gcc_assert (r2
->finish
+ 1 < r1
->start
);
191 /* Add r1 to the result. */
211 lra_assert (r2
!= NULL
);
220 /* Return TRUE if live ranges R1 and R2 intersect. */
222 lra_intersected_live_ranges_p (lra_live_range_t r1
, lra_live_range_t r2
)
224 /* Remember the live ranges are always kept ordered. */
225 while (r1
!= NULL
&& r2
!= NULL
)
227 if (r1
->start
> r2
->finish
)
229 else if (r2
->start
> r1
->finish
)
237 /* The function processing birth of hard register REGNO. It updates
238 living hard regs, conflict hard regs for living pseudos, and
241 make_hard_regno_born (int regno
)
245 lra_assert (regno
< FIRST_PSEUDO_REGISTER
);
246 if (TEST_HARD_REG_BIT (lra_no_alloc_regs
, regno
)
247 || TEST_HARD_REG_BIT (hard_regs_live
, regno
))
249 SET_HARD_REG_BIT (hard_regs_live
, regno
);
250 sparseset_set_bit (start_living
, regno
);
251 EXECUTE_IF_SET_IN_SPARSESET (pseudos_live
, i
)
252 SET_HARD_REG_BIT (lra_reg_info
[i
].conflict_hard_regs
, regno
);
255 /* Process the death of hard register REGNO. This updates
256 hard_regs_live and START_DYING. */
258 make_hard_regno_dead (int regno
)
260 lra_assert (regno
< FIRST_PSEUDO_REGISTER
);
261 if (TEST_HARD_REG_BIT (lra_no_alloc_regs
, regno
)
262 || ! TEST_HARD_REG_BIT (hard_regs_live
, regno
))
264 sparseset_set_bit (start_dying
, regno
);
265 CLEAR_HARD_REG_BIT (hard_regs_live
, regno
);
268 /* Mark pseudo REGNO as living at program point POINT, update conflicting
269 hard registers of the pseudo and START_LIVING, and start a new live
270 range for the pseudo corresponding to REGNO if it is necessary. */
272 mark_pseudo_live (int regno
, int point
)
276 lra_assert (regno
>= FIRST_PSEUDO_REGISTER
);
277 lra_assert (! sparseset_bit_p (pseudos_live
, regno
));
278 sparseset_set_bit (pseudos_live
, regno
);
279 IOR_HARD_REG_SET (lra_reg_info
[regno
].conflict_hard_regs
, hard_regs_live
);
281 if ((complete_info_p
|| lra_get_regno_hard_regno (regno
) < 0)
282 && ((p
= lra_reg_info
[regno
].live_ranges
) == NULL
283 || (p
->finish
!= point
&& p
->finish
+ 1 != point
)))
284 lra_reg_info
[regno
].live_ranges
285 = create_live_range (regno
, point
, -1, p
);
286 sparseset_set_bit (start_living
, regno
);
289 /* Mark pseudo REGNO as not living at program point POINT and update
291 This finishes the current live range for the pseudo corresponding
294 mark_pseudo_dead (int regno
, int point
)
298 lra_assert (regno
>= FIRST_PSEUDO_REGISTER
);
299 lra_assert (sparseset_bit_p (pseudos_live
, regno
));
300 sparseset_clear_bit (pseudos_live
, regno
);
301 sparseset_set_bit (start_dying
, regno
);
302 if (complete_info_p
|| lra_get_regno_hard_regno (regno
) < 0)
304 p
= lra_reg_info
[regno
].live_ranges
;
305 lra_assert (p
!= NULL
);
310 /* Mark register REGNO (pseudo or hard register) in MODE as live
311 at program point POINT.
312 Return TRUE if the liveness tracking sets were modified,
313 or FALSE if nothing changed. */
315 mark_regno_live (int regno
, enum machine_mode mode
, int point
)
318 bool changed
= false;
320 if (regno
< FIRST_PSEUDO_REGISTER
)
322 for (last
= regno
+ hard_regno_nregs
[regno
][mode
];
325 make_hard_regno_born (regno
);
327 else if (! sparseset_bit_p (pseudos_live
, regno
))
329 mark_pseudo_live (regno
, point
);
336 /* Mark register REGNO in MODE as dead at program point POINT.
337 Return TRUE if the liveness tracking sets were modified,
338 or FALSE if nothing changed. */
340 mark_regno_dead (int regno
, enum machine_mode mode
, int point
)
343 bool changed
= false;
345 if (regno
< FIRST_PSEUDO_REGISTER
)
347 for (last
= regno
+ hard_regno_nregs
[regno
][mode
];
350 make_hard_regno_dead (regno
);
352 else if (sparseset_bit_p (pseudos_live
, regno
))
354 mark_pseudo_dead (regno
, point
);
360 /* Insn currently scanned. */
361 static rtx_insn
*curr_insn
;
363 static lra_insn_recog_data_t curr_id
;
364 /* The insn static data. */
365 static struct lra_static_insn_data
*curr_static_id
;
367 /* Return true when one of the predecessor edges of BB is marked with
368 EDGE_ABNORMAL_CALL or EDGE_EH. */
370 bb_has_abnormal_call_pred (basic_block bb
)
375 FOR_EACH_EDGE (e
, ei
, bb
->preds
)
377 if (e
->flags
& (EDGE_ABNORMAL_CALL
| EDGE_EH
))
383 /* Vec containing execution frequencies of program points. */
384 static vec
<int> point_freq_vec
;
386 /* The start of the above vector elements. */
389 /* Increment the current program point POINT to the next point which has
390 execution frequency FREQ. */
392 next_program_point (int &point
, int freq
)
394 point_freq_vec
.safe_push (freq
);
395 lra_point_freq
= point_freq_vec
.address ();
399 /* Update the preference of HARD_REGNO for pseudo REGNO by PROFIT. */
401 lra_setup_reload_pseudo_preferenced_hard_reg (int regno
,
402 int hard_regno
, int profit
)
404 lra_assert (regno
>= lra_constraint_new_regno_start
);
405 if (lra_reg_info
[regno
].preferred_hard_regno1
== hard_regno
)
406 lra_reg_info
[regno
].preferred_hard_regno_profit1
+= profit
;
407 else if (lra_reg_info
[regno
].preferred_hard_regno2
== hard_regno
)
408 lra_reg_info
[regno
].preferred_hard_regno_profit2
+= profit
;
409 else if (lra_reg_info
[regno
].preferred_hard_regno1
< 0)
411 lra_reg_info
[regno
].preferred_hard_regno1
= hard_regno
;
412 lra_reg_info
[regno
].preferred_hard_regno_profit1
= profit
;
414 else if (lra_reg_info
[regno
].preferred_hard_regno2
< 0
415 || profit
> lra_reg_info
[regno
].preferred_hard_regno_profit2
)
417 lra_reg_info
[regno
].preferred_hard_regno2
= hard_regno
;
418 lra_reg_info
[regno
].preferred_hard_regno_profit2
= profit
;
422 /* Keep the 1st hard regno as more profitable. */
423 if (lra_reg_info
[regno
].preferred_hard_regno1
>= 0
424 && lra_reg_info
[regno
].preferred_hard_regno2
>= 0
425 && (lra_reg_info
[regno
].preferred_hard_regno_profit2
426 > lra_reg_info
[regno
].preferred_hard_regno_profit1
))
430 temp
= lra_reg_info
[regno
].preferred_hard_regno1
;
431 lra_reg_info
[regno
].preferred_hard_regno1
432 = lra_reg_info
[regno
].preferred_hard_regno2
;
433 lra_reg_info
[regno
].preferred_hard_regno2
= temp
;
434 temp
= lra_reg_info
[regno
].preferred_hard_regno_profit1
;
435 lra_reg_info
[regno
].preferred_hard_regno_profit1
436 = lra_reg_info
[regno
].preferred_hard_regno_profit2
;
437 lra_reg_info
[regno
].preferred_hard_regno_profit2
= temp
;
439 if (lra_dump_file
!= NULL
)
441 if ((hard_regno
= lra_reg_info
[regno
].preferred_hard_regno1
) >= 0)
442 fprintf (lra_dump_file
,
443 " Hard reg %d is preferable by r%d with profit %d\n",
445 lra_reg_info
[regno
].preferred_hard_regno_profit1
);
446 if ((hard_regno
= lra_reg_info
[regno
].preferred_hard_regno2
) >= 0)
447 fprintf (lra_dump_file
,
448 " Hard reg %d is preferable by r%d with profit %d\n",
450 lra_reg_info
[regno
].preferred_hard_regno_profit2
);
454 /* Check that REGNO living through calls and setjumps, set up conflict
455 regs, and clear corresponding bits in PSEUDOS_LIVE_THROUGH_CALLS and
456 PSEUDOS_LIVE_THROUGH_SETJUMPS. */
458 check_pseudos_live_through_calls (int regno
)
462 if (! sparseset_bit_p (pseudos_live_through_calls
, regno
))
464 sparseset_clear_bit (pseudos_live_through_calls
, regno
);
465 IOR_HARD_REG_SET (lra_reg_info
[regno
].conflict_hard_regs
,
468 for (hr
= 0; hr
< FIRST_PSEUDO_REGISTER
; hr
++)
469 if (HARD_REGNO_CALL_PART_CLOBBERED (hr
, PSEUDO_REGNO_MODE (regno
)))
470 SET_HARD_REG_BIT (lra_reg_info
[regno
].conflict_hard_regs
, hr
);
471 #ifdef ENABLE_CHECKING
472 lra_reg_info
[regno
].call_p
= true;
474 if (! sparseset_bit_p (pseudos_live_through_setjumps
, regno
))
476 sparseset_clear_bit (pseudos_live_through_setjumps
, regno
);
477 /* Don't allocate pseudos that cross setjmps or any call, if this
478 function receives a nonlocal goto. */
479 SET_HARD_REG_SET (lra_reg_info
[regno
].conflict_hard_regs
);
482 /* Process insns of the basic block BB to update pseudo live ranges,
483 pseudo hard register conflicts, and insn notes. We do it on
484 backward scan of BB insns. CURR_POINT is the program point where
485 BB ends. The function updates this counter and returns in
486 CURR_POINT the program point where BB starts. */
488 process_bb_lives (basic_block bb
, int &curr_point
)
496 bool need_curr_point_incr
;
498 reg_live_out
= df_get_live_out (bb
);
499 sparseset_clear (pseudos_live
);
500 sparseset_clear (pseudos_live_through_calls
);
501 sparseset_clear (pseudos_live_through_setjumps
);
502 REG_SET_TO_HARD_REG_SET (hard_regs_live
, reg_live_out
);
503 AND_COMPL_HARD_REG_SET (hard_regs_live
, eliminable_regset
);
504 AND_COMPL_HARD_REG_SET (hard_regs_live
, lra_no_alloc_regs
);
505 EXECUTE_IF_SET_IN_BITMAP (reg_live_out
, FIRST_PSEUDO_REGISTER
, j
, bi
)
506 mark_pseudo_live (j
, curr_point
);
508 freq
= REG_FREQ_FROM_BB (bb
);
510 if (lra_dump_file
!= NULL
)
511 fprintf (lra_dump_file
, " BB %d\n", bb
->index
);
513 /* Scan the code of this basic block, noting which pseudos and hard
514 regs are born or die.
516 Note that this loop treats uninitialized values as live until the
517 beginning of the block. For example, if an instruction uses
518 (reg:DI foo), and only (subreg:SI (reg:DI foo) 0) is ever set,
519 FOO will remain live until the beginning of the block. Likewise
520 if FOO is not set at all. This is unnecessarily pessimistic, but
521 it probably doesn't matter much in practice. */
522 FOR_BB_INSNS_REVERSE (bb
, curr_insn
)
525 int dst_regno
, src_regno
;
527 struct lra_insn_reg
*reg
;
529 if (!NONDEBUG_INSN_P (curr_insn
))
532 curr_id
= lra_get_insn_recog_data (curr_insn
);
533 curr_static_id
= curr_id
->insn_static_data
;
534 if (lra_dump_file
!= NULL
)
535 fprintf (lra_dump_file
, " Insn %u: point = %d\n",
536 INSN_UID (curr_insn
), curr_point
);
538 /* Update max ref width and hard reg usage. */
539 for (reg
= curr_id
->regs
; reg
!= NULL
; reg
= reg
->next
)
540 if (reg
->regno
>= FIRST_PSEUDO_REGISTER
541 && (GET_MODE_SIZE (reg
->biggest_mode
)
542 > GET_MODE_SIZE (lra_reg_info
[reg
->regno
].biggest_mode
)))
543 lra_reg_info
[reg
->regno
].biggest_mode
= reg
->biggest_mode
;
544 else if (reg
->regno
< FIRST_PSEUDO_REGISTER
)
545 lra_hard_reg_usage
[reg
->regno
] += freq
;
547 call_p
= CALL_P (curr_insn
);
549 && (set
= single_set (curr_insn
)) != NULL_RTX
550 && REG_P (SET_DEST (set
)) && REG_P (SET_SRC (set
))
551 /* Check that source regno does not conflict with
552 destination regno to exclude most impossible
554 && ((((src_regno
= REGNO (SET_SRC (set
))) >= FIRST_PSEUDO_REGISTER
555 && ! sparseset_bit_p (pseudos_live
, src_regno
))
556 || (src_regno
< FIRST_PSEUDO_REGISTER
557 && ! TEST_HARD_REG_BIT (hard_regs_live
, src_regno
)))
558 /* It might be 'inheritance pseudo <- reload pseudo'. */
559 || (src_regno
>= lra_constraint_new_regno_start
560 && ((int) REGNO (SET_DEST (set
))
561 >= lra_constraint_new_regno_start
)
562 /* Remember to skip special cases where src/dest regnos are
563 the same, e.g. insn SET pattern has matching constraints
565 && src_regno
!= (int) REGNO (SET_DEST (set
)))))
567 int hard_regno
= -1, regno
= -1;
569 dst_regno
= REGNO (SET_DEST (set
));
570 if (dst_regno
>= lra_constraint_new_regno_start
571 && src_regno
>= lra_constraint_new_regno_start
)
572 lra_create_copy (dst_regno
, src_regno
, freq
);
573 else if (dst_regno
>= lra_constraint_new_regno_start
)
575 if ((hard_regno
= src_regno
) >= FIRST_PSEUDO_REGISTER
)
576 hard_regno
= reg_renumber
[src_regno
];
579 else if (src_regno
>= lra_constraint_new_regno_start
)
581 if ((hard_regno
= dst_regno
) >= FIRST_PSEUDO_REGISTER
)
582 hard_regno
= reg_renumber
[dst_regno
];
585 if (regno
>= 0 && hard_regno
>= 0)
586 lra_setup_reload_pseudo_preferenced_hard_reg
587 (regno
, hard_regno
, freq
);
590 sparseset_clear (start_living
);
592 /* Try to avoid unnecessary program point increments, this saves
593 a lot of time in remove_some_program_points_and_update_live_ranges.
594 We only need an increment if something becomes live or dies at this
596 need_curr_point_incr
= false;
598 /* Mark each defined value as live. We need to do this for
599 unused values because they still conflict with quantities
600 that are live at the time of the definition. */
601 for (reg
= curr_id
->regs
; reg
!= NULL
; reg
= reg
->next
)
602 if (reg
->type
!= OP_IN
)
604 need_curr_point_incr
|= mark_regno_live (reg
->regno
,
607 check_pseudos_live_through_calls (reg
->regno
);
610 for (reg
= curr_static_id
->hard_regs
; reg
!= NULL
; reg
= reg
->next
)
611 if (reg
->type
!= OP_IN
)
612 make_hard_regno_born (reg
->regno
);
614 sparseset_copy (unused_set
, start_living
);
616 sparseset_clear (start_dying
);
618 /* See which defined values die here. */
619 for (reg
= curr_id
->regs
; reg
!= NULL
; reg
= reg
->next
)
620 if (reg
->type
== OP_OUT
&& ! reg
->early_clobber
&& ! reg
->subreg_p
)
621 need_curr_point_incr
|= mark_regno_dead (reg
->regno
,
625 for (reg
= curr_static_id
->hard_regs
; reg
!= NULL
; reg
= reg
->next
)
626 if (reg
->type
== OP_OUT
&& ! reg
->early_clobber
&& ! reg
->subreg_p
)
627 make_hard_regno_dead (reg
->regno
);
631 if (flag_use_caller_save
)
633 HARD_REG_SET this_call_used_reg_set
;
634 get_call_reg_set_usage (curr_insn
, &this_call_used_reg_set
,
637 EXECUTE_IF_SET_IN_SPARSESET (pseudos_live
, j
)
638 IOR_HARD_REG_SET (lra_reg_info
[j
].actual_call_used_reg_set
,
639 this_call_used_reg_set
);
642 sparseset_ior (pseudos_live_through_calls
,
643 pseudos_live_through_calls
, pseudos_live
);
644 if (cfun
->has_nonlocal_label
645 || find_reg_note (curr_insn
, REG_SETJMP
,
646 NULL_RTX
) != NULL_RTX
)
647 sparseset_ior (pseudos_live_through_setjumps
,
648 pseudos_live_through_setjumps
, pseudos_live
);
651 /* Increment the current program point if we must. */
652 if (need_curr_point_incr
)
653 next_program_point (curr_point
, freq
);
655 sparseset_clear (start_living
);
657 need_curr_point_incr
= false;
659 /* Mark each used value as live. */
660 for (reg
= curr_id
->regs
; reg
!= NULL
; reg
= reg
->next
)
661 if (reg
->type
== OP_IN
)
663 need_curr_point_incr
|= mark_regno_live (reg
->regno
,
666 check_pseudos_live_through_calls (reg
->regno
);
669 for (reg
= curr_static_id
->hard_regs
; reg
!= NULL
; reg
= reg
->next
)
670 if (reg
->type
== OP_IN
)
671 make_hard_regno_born (reg
->regno
);
673 if (curr_id
->arg_hard_regs
!= NULL
)
674 /* Make argument hard registers live. */
675 for (i
= 0; (regno
= curr_id
->arg_hard_regs
[i
]) >= 0; i
++)
676 make_hard_regno_born (regno
);
678 sparseset_and_compl (dead_set
, start_living
, start_dying
);
680 /* Mark early clobber outputs dead. */
681 for (reg
= curr_id
->regs
; reg
!= NULL
; reg
= reg
->next
)
682 if (reg
->type
== OP_OUT
&& reg
->early_clobber
&& ! reg
->subreg_p
)
683 need_curr_point_incr
|= mark_regno_dead (reg
->regno
,
687 for (reg
= curr_static_id
->hard_regs
; reg
!= NULL
; reg
= reg
->next
)
688 if (reg
->type
== OP_OUT
&& reg
->early_clobber
&& ! reg
->subreg_p
)
689 make_hard_regno_dead (reg
->regno
);
691 if (need_curr_point_incr
)
692 next_program_point (curr_point
, freq
);
695 for (link_loc
= ®_NOTES (curr_insn
); (link
= *link_loc
) != NULL_RTX
;)
697 if (REG_NOTE_KIND (link
) != REG_DEAD
698 && REG_NOTE_KIND (link
) != REG_UNUSED
)
700 else if (REG_P (XEXP (link
, 0)))
702 regno
= REGNO (XEXP (link
, 0));
703 if ((REG_NOTE_KIND (link
) == REG_DEAD
704 && ! sparseset_bit_p (dead_set
, regno
))
705 || (REG_NOTE_KIND (link
) == REG_UNUSED
706 && ! sparseset_bit_p (unused_set
, regno
)))
708 *link_loc
= XEXP (link
, 1);
711 if (REG_NOTE_KIND (link
) == REG_DEAD
)
712 sparseset_clear_bit (dead_set
, regno
);
713 else if (REG_NOTE_KIND (link
) == REG_UNUSED
)
714 sparseset_clear_bit (unused_set
, regno
);
716 link_loc
= &XEXP (link
, 1);
718 EXECUTE_IF_SET_IN_SPARSESET (dead_set
, j
)
719 add_reg_note (curr_insn
, REG_DEAD
, regno_reg_rtx
[j
]);
720 EXECUTE_IF_SET_IN_SPARSESET (unused_set
, j
)
721 add_reg_note (curr_insn
, REG_UNUSED
, regno_reg_rtx
[j
]);
724 #ifdef EH_RETURN_DATA_REGNO
725 if (bb_has_eh_pred (bb
))
728 unsigned int regno
= EH_RETURN_DATA_REGNO (j
);
730 if (regno
== INVALID_REGNUM
)
732 make_hard_regno_born (regno
);
736 /* Pseudos can't go in stack regs at the start of a basic block that
737 is reached by an abnormal edge. Likewise for call clobbered regs,
738 because caller-save, fixup_abnormal_edges and possibly the table
739 driven EH machinery are not quite ready to handle such pseudos
740 live across such edges. */
741 if (bb_has_abnormal_pred (bb
))
744 EXECUTE_IF_SET_IN_SPARSESET (pseudos_live
, px
)
745 lra_reg_info
[px
].no_stack_p
= true;
746 for (px
= FIRST_STACK_REG
; px
<= LAST_STACK_REG
; px
++)
747 make_hard_regno_born (px
);
749 /* No need to record conflicts for call clobbered regs if we
750 have nonlocal labels around, as we don't ever try to
751 allocate such regs in this case. */
752 if (!cfun
->has_nonlocal_label
&& bb_has_abnormal_call_pred (bb
))
753 for (px
= 0; px
< FIRST_PSEUDO_REGISTER
; px
++)
754 if (call_used_regs
[px
])
755 make_hard_regno_born (px
);
758 /* See if we'll need an increment at the end of this basic block.
759 An increment is needed if the PSEUDOS_LIVE set is not empty,
760 to make sure the finish points are set up correctly. */
761 need_curr_point_incr
= (sparseset_cardinality (pseudos_live
) > 0);
763 EXECUTE_IF_SET_IN_SPARSESET (pseudos_live
, i
)
764 mark_pseudo_dead (i
, curr_point
);
766 EXECUTE_IF_SET_IN_BITMAP (df_get_live_in (bb
), FIRST_PSEUDO_REGISTER
, j
, bi
)
768 if (sparseset_cardinality (pseudos_live_through_calls
) == 0)
770 if (sparseset_bit_p (pseudos_live_through_calls
, j
))
771 check_pseudos_live_through_calls (j
);
774 if (need_curr_point_incr
)
775 next_program_point (curr_point
, freq
);
778 /* Compress pseudo live ranges by removing program points where
779 nothing happens. Complexity of many algorithms in LRA is linear
780 function of program points number. To speed up the code we try to
781 minimize the number of the program points here. */
783 remove_some_program_points_and_update_live_ranges (void)
788 lra_live_range_t r
, prev_r
, next_r
;
789 sbitmap born_or_dead
, born
, dead
;
790 sbitmap_iterator sbi
;
791 bool born_p
, dead_p
, prev_born_p
, prev_dead_p
;
793 born
= sbitmap_alloc (lra_live_max_point
);
794 dead
= sbitmap_alloc (lra_live_max_point
);
797 max_regno
= max_reg_num ();
798 for (i
= FIRST_PSEUDO_REGISTER
; i
< (unsigned) max_regno
; i
++)
800 for (r
= lra_reg_info
[i
].live_ranges
; r
!= NULL
; r
= r
->next
)
802 lra_assert (r
->start
<= r
->finish
);
803 bitmap_set_bit (born
, r
->start
);
804 bitmap_set_bit (dead
, r
->finish
);
807 born_or_dead
= sbitmap_alloc (lra_live_max_point
);
808 bitmap_ior (born_or_dead
, born
, dead
);
809 map
= XCNEWVEC (int, lra_live_max_point
);
811 prev_born_p
= prev_dead_p
= false;
812 EXECUTE_IF_SET_IN_BITMAP (born_or_dead
, 0, i
, sbi
)
814 born_p
= bitmap_bit_p (born
, i
);
815 dead_p
= bitmap_bit_p (dead
, i
);
816 if ((prev_born_p
&& ! prev_dead_p
&& born_p
&& ! dead_p
)
817 || (prev_dead_p
&& ! prev_born_p
&& dead_p
&& ! born_p
))
820 lra_point_freq
[n
] = MAX (lra_point_freq
[n
], lra_point_freq
[i
]);
825 lra_point_freq
[n
] = lra_point_freq
[i
];
827 prev_born_p
= born_p
;
828 prev_dead_p
= dead_p
;
830 sbitmap_free (born_or_dead
);
834 if (lra_dump_file
!= NULL
)
835 fprintf (lra_dump_file
, "Compressing live ranges: from %d to %d - %d%%\n",
836 lra_live_max_point
, n
, 100 * n
/ lra_live_max_point
);
837 if (n
< lra_live_max_point
)
839 lra_live_max_point
= n
;
840 for (i
= FIRST_PSEUDO_REGISTER
; i
< (unsigned) max_regno
; i
++)
842 for (prev_r
= NULL
, r
= lra_reg_info
[i
].live_ranges
;
847 r
->start
= map
[r
->start
];
848 r
->finish
= map
[r
->finish
];
849 if (prev_r
== NULL
|| prev_r
->start
> r
->finish
+ 1)
854 prev_r
->start
= r
->start
;
855 prev_r
->next
= next_r
;
863 /* Print live ranges R to file F. */
865 lra_print_live_range_list (FILE *f
, lra_live_range_t r
)
867 for (; r
!= NULL
; r
= r
->next
)
868 fprintf (f
, " [%d..%d]", r
->start
, r
->finish
);
873 debug (lra_live_range
&ref
)
875 lra_print_live_range_list (stderr
, &ref
);
879 debug (lra_live_range
*ptr
)
884 fprintf (stderr
, "<nil>\n");
887 /* Print live ranges R to stderr. */
889 lra_debug_live_range_list (lra_live_range_t r
)
891 lra_print_live_range_list (stderr
, r
);
894 /* Print live ranges of pseudo REGNO to file F. */
896 print_pseudo_live_ranges (FILE *f
, int regno
)
898 if (lra_reg_info
[regno
].live_ranges
== NULL
)
900 fprintf (f
, " r%d:", regno
);
901 lra_print_live_range_list (f
, lra_reg_info
[regno
].live_ranges
);
904 /* Print live ranges of pseudo REGNO to stderr. */
906 lra_debug_pseudo_live_ranges (int regno
)
908 print_pseudo_live_ranges (stderr
, regno
);
911 /* Print live ranges of all pseudos to file F. */
913 print_live_ranges (FILE *f
)
917 max_regno
= max_reg_num ();
918 for (i
= FIRST_PSEUDO_REGISTER
; i
< max_regno
; i
++)
919 print_pseudo_live_ranges (f
, i
);
922 /* Print live ranges of all pseudos to stderr. */
924 lra_debug_live_ranges (void)
926 print_live_ranges (stderr
);
929 /* Compress pseudo live ranges. */
931 compress_live_ranges (void)
933 remove_some_program_points_and_update_live_ranges ();
934 if (lra_dump_file
!= NULL
)
936 fprintf (lra_dump_file
, "Ranges after the compression:\n");
937 print_live_ranges (lra_dump_file
);
941 /* The number of the current live range pass. */
942 int lra_live_range_iter
;
944 /* The main entry function creates live ranges only for memory pseudos
945 (or for all ones if ALL_P), set up CONFLICT_HARD_REGS for
948 lra_create_live_ranges (bool all_p
)
951 int i
, hard_regno
, max_regno
= max_reg_num ();
953 bool have_referenced_pseudos
= false;
955 timevar_push (TV_LRA_CREATE_LIVE_RANGES
);
957 complete_info_p
= all_p
;
958 if (lra_dump_file
!= NULL
)
959 fprintf (lra_dump_file
,
960 "\n********** Pseudo live ranges #%d: **********\n\n",
961 ++lra_live_range_iter
);
962 memset (lra_hard_reg_usage
, 0, sizeof (lra_hard_reg_usage
));
963 for (i
= 0; i
< max_regno
; i
++)
965 lra_reg_info
[i
].live_ranges
= NULL
;
966 CLEAR_HARD_REG_SET (lra_reg_info
[i
].conflict_hard_regs
);
967 lra_reg_info
[i
].preferred_hard_regno1
= -1;
968 lra_reg_info
[i
].preferred_hard_regno2
= -1;
969 lra_reg_info
[i
].preferred_hard_regno_profit1
= 0;
970 lra_reg_info
[i
].preferred_hard_regno_profit2
= 0;
972 lra_reg_info
[i
].no_stack_p
= false;
974 /* The biggest mode is already set but its value might be to
975 conservative because of recent transformation. Here in this
976 file we recalculate it again as it costs practically
978 if (regno_reg_rtx
[i
] != NULL_RTX
)
979 lra_reg_info
[i
].biggest_mode
= GET_MODE (regno_reg_rtx
[i
]);
981 lra_reg_info
[i
].biggest_mode
= VOIDmode
;
982 #ifdef ENABLE_CHECKING
983 lra_reg_info
[i
].call_p
= false;
985 if (i
>= FIRST_PSEUDO_REGISTER
986 && lra_reg_info
[i
].nrefs
!= 0)
988 if ((hard_regno
= reg_renumber
[i
]) >= 0)
989 lra_hard_reg_usage
[hard_regno
] += lra_reg_info
[i
].freq
;
990 have_referenced_pseudos
= true;
995 /* Under some circumstances, we can have functions without pseudo
996 registers. For such functions, lra_live_max_point will be 0,
997 see e.g. PR55604, and there's nothing more to do for us here. */
998 if (! have_referenced_pseudos
)
1000 timevar_pop (TV_LRA_CREATE_LIVE_RANGES
);
1004 pseudos_live
= sparseset_alloc (max_regno
);
1005 pseudos_live_through_calls
= sparseset_alloc (max_regno
);
1006 pseudos_live_through_setjumps
= sparseset_alloc (max_regno
);
1007 start_living
= sparseset_alloc (max_regno
);
1008 start_dying
= sparseset_alloc (max_regno
);
1009 dead_set
= sparseset_alloc (max_regno
);
1010 unused_set
= sparseset_alloc (max_regno
);
1012 point_freq_vec
.create (get_max_uid () * 2);
1013 lra_point_freq
= point_freq_vec
.address ();
1014 int *post_order_rev_cfg
= XNEWVEC (int, last_basic_block_for_fn (cfun
));
1015 int n_blocks_inverted
= inverted_post_order_compute (post_order_rev_cfg
);
1016 lra_assert (n_blocks_inverted
== n_basic_blocks_for_fn (cfun
));
1017 for (i
= n_blocks_inverted
- 1; i
>= 0; --i
)
1019 bb
= BASIC_BLOCK_FOR_FN (cfun
, post_order_rev_cfg
[i
]);
1020 if (bb
== EXIT_BLOCK_PTR_FOR_FN (cfun
) || bb
1021 == ENTRY_BLOCK_PTR_FOR_FN (cfun
))
1023 process_bb_lives (bb
, curr_point
);
1025 free (post_order_rev_cfg
);
1026 lra_live_max_point
= curr_point
;
1027 gcc_checking_assert (lra_live_max_point
> 0);
1028 if (lra_dump_file
!= NULL
)
1029 print_live_ranges (lra_dump_file
);
1031 sparseset_free (unused_set
);
1032 sparseset_free (dead_set
);
1033 sparseset_free (start_dying
);
1034 sparseset_free (start_living
);
1035 sparseset_free (pseudos_live_through_calls
);
1036 sparseset_free (pseudos_live_through_setjumps
);
1037 sparseset_free (pseudos_live
);
1038 compress_live_ranges ();
1039 timevar_pop (TV_LRA_CREATE_LIVE_RANGES
);
1042 /* Finish all live ranges. */
1044 lra_clear_live_ranges (void)
1048 for (i
= 0; i
< max_reg_num (); i
++)
1049 free_live_range_list (lra_reg_info
[i
].live_ranges
);
1050 point_freq_vec
.release ();
1053 /* Initialize live ranges data once per function. */
1055 lra_live_ranges_init (void)
1057 live_range_pool
= create_alloc_pool ("live ranges",
1058 sizeof (struct lra_live_range
), 100);
1061 /* Finish live ranges data once per function. */
1063 lra_live_ranges_finish (void)
1065 free_alloc_pool (live_range_pool
);