1 /* Build live ranges for pseudos.
2 Copyright (C) 2010-2016 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"
38 #include "insn-config.h"
43 #include "sparseset.h"
46 /* Program points are enumerated by numbers from range
47 0..LRA_LIVE_MAX_POINT-1. There are approximately two times more
48 program points than insns. Program points are places in the
49 program where liveness info can be changed. In most general case
50 (there are more complicated cases too) some program points
51 correspond to places where input operand dies and other ones
52 correspond to places where output operands are born. */
53 int lra_live_max_point
;
55 /* Accumulated execution frequency of all references for each hard
57 int lra_hard_reg_usage
[FIRST_PSEUDO_REGISTER
];
59 /* A global flag whose true value says to build live ranges for all
60 pseudos, otherwise the live ranges only for pseudos got memory is
61 build. True value means also building copies and setting up hard
62 register preferences. The complete info is necessary only for the
63 assignment pass. The complete info is not needed for the
64 coalescing and spill passes. */
65 static bool complete_info_p
;
67 /* Pseudos live at current point in the RTL scan. */
68 static sparseset pseudos_live
;
70 /* Pseudos probably living through calls and setjumps. As setjump is
71 a call too, if a bit in PSEUDOS_LIVE_THROUGH_SETJUMPS is set up
72 then the corresponding bit in PSEUDOS_LIVE_THROUGH_CALLS is set up
73 too. These data are necessary for cases when only one subreg of a
74 multi-reg pseudo is set up after a call. So we decide it is
75 probably live when traversing bb backward. We are sure about
76 living when we see its usage or definition of the pseudo. */
77 static sparseset pseudos_live_through_calls
;
78 static sparseset pseudos_live_through_setjumps
;
80 /* Set of hard regs (except eliminable ones) currently live. */
81 static HARD_REG_SET hard_regs_live
;
83 /* Set of pseudos and hard registers start living/dying in the current
84 insn. These sets are used to update REG_DEAD and REG_UNUSED notes
86 static sparseset start_living
, start_dying
;
88 /* Set of pseudos and hard regs dead and unused in the current
90 static sparseset unused_set
, dead_set
;
92 /* Bitmap used for holding intermediate bitmap operation results. */
93 static bitmap_head temp_bitmap
;
95 /* Pool for pseudo live ranges. */
96 static object_allocator
<lra_live_range
> lra_live_range_pool ("live ranges");
98 /* Free live range list LR. */
100 free_live_range_list (lra_live_range_t lr
)
102 lra_live_range_t next
;
107 lra_live_range_pool
.remove (lr
);
112 /* Create and return pseudo live range with given attributes. */
113 static lra_live_range_t
114 create_live_range (int regno
, int start
, int finish
, lra_live_range_t next
)
116 lra_live_range_t p
= lra_live_range_pool
.allocate ();
124 /* Copy live range R and return the result. */
125 static lra_live_range_t
126 copy_live_range (lra_live_range_t r
)
128 return new (lra_live_range_pool
) lra_live_range (*r
);
131 /* Copy live range list given by its head R and return the result. */
133 lra_copy_live_range_list (lra_live_range_t r
)
135 lra_live_range_t p
, first
, *chain
;
138 for (chain
= &first
; r
!= NULL
; r
= r
->next
)
140 p
= copy_live_range (r
);
147 /* Merge *non-intersected* ranges R1 and R2 and returns the result.
148 The function maintains the order of ranges and tries to minimize
149 size of the result range list. Ranges R1 and R2 may not be used
152 lra_merge_live_ranges (lra_live_range_t r1
, lra_live_range_t r2
)
154 lra_live_range_t first
, last
;
160 for (first
= last
= NULL
; r1
!= NULL
&& r2
!= NULL
;)
162 if (r1
->start
< r2
->start
)
165 if (r1
->start
== r2
->finish
+ 1)
167 /* Joint ranges: merge r1 and r2 into r1. */
168 r1
->start
= r2
->start
;
169 lra_live_range_t temp
= r2
;
171 lra_live_range_pool
.remove (temp
);
175 gcc_assert (r2
->finish
+ 1 < r1
->start
);
176 /* Add r1 to the result. */
196 lra_assert (r2
!= NULL
);
205 /* Return TRUE if live ranges R1 and R2 intersect. */
207 lra_intersected_live_ranges_p (lra_live_range_t r1
, lra_live_range_t r2
)
209 /* Remember the live ranges are always kept ordered. */
210 while (r1
!= NULL
&& r2
!= NULL
)
212 if (r1
->start
> r2
->finish
)
214 else if (r2
->start
> r1
->finish
)
222 /* The function processing birth of hard register REGNO. It updates
223 living hard regs, START_LIVING, and conflict hard regs for living
224 pseudos. Conflict hard regs for the pic pseudo is not updated if
225 REGNO is REAL_PIC_OFFSET_TABLE_REGNUM and CHECK_PIC_PSEUDO_P is
228 make_hard_regno_born (int regno
, bool check_pic_pseudo_p ATTRIBUTE_UNUSED
)
232 lra_assert (regno
< FIRST_PSEUDO_REGISTER
);
233 if (TEST_HARD_REG_BIT (hard_regs_live
, regno
))
235 SET_HARD_REG_BIT (hard_regs_live
, regno
);
236 sparseset_set_bit (start_living
, regno
);
237 EXECUTE_IF_SET_IN_SPARSESET (pseudos_live
, i
)
238 #ifdef REAL_PIC_OFFSET_TABLE_REGNUM
239 if (! check_pic_pseudo_p
240 || regno
!= REAL_PIC_OFFSET_TABLE_REGNUM
241 || pic_offset_table_rtx
== NULL
242 || i
!= REGNO (pic_offset_table_rtx
))
244 SET_HARD_REG_BIT (lra_reg_info
[i
].conflict_hard_regs
, regno
);
247 /* Process the death of hard register REGNO. This updates
248 hard_regs_live and START_DYING. */
250 make_hard_regno_dead (int regno
)
252 lra_assert (regno
< FIRST_PSEUDO_REGISTER
);
253 if (! TEST_HARD_REG_BIT (hard_regs_live
, regno
))
255 sparseset_set_bit (start_dying
, regno
);
256 CLEAR_HARD_REG_BIT (hard_regs_live
, regno
);
259 /* Mark pseudo REGNO as living at program point POINT, update conflicting
260 hard registers of the pseudo and START_LIVING, and start a new live
261 range for the pseudo corresponding to REGNO if it is necessary. */
263 mark_pseudo_live (int regno
, int point
)
267 lra_assert (regno
>= FIRST_PSEUDO_REGISTER
);
268 lra_assert (! sparseset_bit_p (pseudos_live
, regno
));
269 sparseset_set_bit (pseudos_live
, regno
);
270 IOR_HARD_REG_SET (lra_reg_info
[regno
].conflict_hard_regs
, hard_regs_live
);
272 if ((complete_info_p
|| lra_get_regno_hard_regno (regno
) < 0)
273 && ((p
= lra_reg_info
[regno
].live_ranges
) == NULL
274 || (p
->finish
!= point
&& p
->finish
+ 1 != point
)))
275 lra_reg_info
[regno
].live_ranges
276 = create_live_range (regno
, point
, -1, p
);
277 sparseset_set_bit (start_living
, regno
);
280 /* Mark pseudo REGNO as not living at program point POINT and update
282 This finishes the current live range for the pseudo corresponding
285 mark_pseudo_dead (int regno
, int point
)
289 lra_assert (regno
>= FIRST_PSEUDO_REGISTER
);
290 lra_assert (sparseset_bit_p (pseudos_live
, regno
));
291 sparseset_clear_bit (pseudos_live
, regno
);
292 sparseset_set_bit (start_dying
, regno
);
293 if (complete_info_p
|| lra_get_regno_hard_regno (regno
) < 0)
295 p
= lra_reg_info
[regno
].live_ranges
;
296 lra_assert (p
!= NULL
);
301 /* The corresponding bitmaps of BB currently being processed. */
302 static bitmap bb_killed_pseudos
, bb_gen_pseudos
;
304 /* Mark register REGNO (pseudo or hard register) in MODE as live at
305 program point POINT. Update BB_GEN_PSEUDOS.
306 Return TRUE if the liveness tracking sets were modified, or FALSE
307 if nothing changed. */
309 mark_regno_live (int regno
, machine_mode mode
, int point
)
312 bool changed
= false;
314 if (regno
< FIRST_PSEUDO_REGISTER
)
316 for (last
= regno
+ hard_regno_nregs
[regno
][mode
];
319 make_hard_regno_born (regno
, false);
323 if (! sparseset_bit_p (pseudos_live
, regno
))
325 mark_pseudo_live (regno
, point
);
328 bitmap_set_bit (bb_gen_pseudos
, regno
);
334 /* Mark register REGNO in MODE as dead at program point POINT. Update
335 BB_GEN_PSEUDOS and BB_KILLED_PSEUDOS. Return TRUE if the liveness
336 tracking sets were modified, or FALSE if nothing changed. */
338 mark_regno_dead (int regno
, machine_mode mode
, int point
)
341 bool changed
= false;
343 if (regno
< FIRST_PSEUDO_REGISTER
)
345 for (last
= regno
+ hard_regno_nregs
[regno
][mode
];
348 make_hard_regno_dead (regno
);
352 if (sparseset_bit_p (pseudos_live
, regno
))
354 mark_pseudo_dead (regno
, point
);
357 bitmap_clear_bit (bb_gen_pseudos
, regno
);
358 bitmap_set_bit (bb_killed_pseudos
, regno
);
365 /* This page contains code for making global live analysis of pseudos.
366 The code works only when pseudo live info is changed on a BB
367 border. That might be a consequence of some global transformations
368 in LRA, e.g. PIC pseudo reuse or rematerialization. */
370 /* Structure describing local BB data used for pseudo
372 struct bb_data_pseudos
374 /* Basic block about which the below data are. */
376 bitmap_head killed_pseudos
; /* pseudos killed in the BB. */
377 bitmap_head gen_pseudos
; /* pseudos generated in the BB. */
380 /* Array for all BB data. Indexed by the corresponding BB index. */
381 typedef struct bb_data_pseudos
*bb_data_t
;
383 /* All basic block data are referred through the following array. */
384 static bb_data_t bb_data
;
386 /* Two small functions for access to the bb data. */
387 static inline bb_data_t
388 get_bb_data (basic_block bb
)
390 return &bb_data
[(bb
)->index
];
393 static inline bb_data_t
394 get_bb_data_by_index (int index
)
396 return &bb_data
[index
];
399 /* Bitmap with all hard regs. */
400 static bitmap_head all_hard_regs_bitmap
;
402 /* The transfer function used by the DF equation solver to propagate
403 live info through block with BB_INDEX according to the following
406 bb.livein = (bb.liveout - bb.kill) OR bb.gen
409 live_trans_fun (int bb_index
)
411 basic_block bb
= get_bb_data_by_index (bb_index
)->bb
;
412 bitmap bb_liveout
= df_get_live_out (bb
);
413 bitmap bb_livein
= df_get_live_in (bb
);
414 bb_data_t bb_info
= get_bb_data (bb
);
416 bitmap_and_compl (&temp_bitmap
, bb_liveout
, &all_hard_regs_bitmap
);
417 return bitmap_ior_and_compl (bb_livein
, &bb_info
->gen_pseudos
,
418 &temp_bitmap
, &bb_info
->killed_pseudos
);
421 /* The confluence function used by the DF equation solver to set up
422 live info for a block BB without predecessor. */
424 live_con_fun_0 (basic_block bb
)
426 bitmap_and_into (df_get_live_out (bb
), &all_hard_regs_bitmap
);
429 /* The confluence function used by the DF equation solver to propagate
430 live info from successor to predecessor on edge E according to the
433 bb.liveout = 0 for entry block | OR (livein of successors)
436 live_con_fun_n (edge e
)
438 basic_block bb
= e
->src
;
439 basic_block dest
= e
->dest
;
440 bitmap bb_liveout
= df_get_live_out (bb
);
441 bitmap dest_livein
= df_get_live_in (dest
);
443 return bitmap_ior_and_compl_into (bb_liveout
,
444 dest_livein
, &all_hard_regs_bitmap
);
447 /* Indexes of all function blocks. */
448 static bitmap_head all_blocks
;
450 /* Allocate and initialize data needed for global pseudo live
453 initiate_live_solver (void)
455 bitmap_initialize (&all_hard_regs_bitmap
, ®_obstack
);
456 bitmap_set_range (&all_hard_regs_bitmap
, 0, FIRST_PSEUDO_REGISTER
);
457 bb_data
= XNEWVEC (struct bb_data_pseudos
, last_basic_block_for_fn (cfun
));
458 bitmap_initialize (&all_blocks
, ®_obstack
);
461 FOR_ALL_BB_FN (bb
, cfun
)
463 bb_data_t bb_info
= get_bb_data (bb
);
465 bitmap_initialize (&bb_info
->killed_pseudos
, ®_obstack
);
466 bitmap_initialize (&bb_info
->gen_pseudos
, ®_obstack
);
467 bitmap_set_bit (&all_blocks
, bb
->index
);
471 /* Free all data needed for global pseudo live analysis. */
473 finish_live_solver (void)
477 bitmap_clear (&all_blocks
);
478 FOR_ALL_BB_FN (bb
, cfun
)
480 bb_data_t bb_info
= get_bb_data (bb
);
481 bitmap_clear (&bb_info
->killed_pseudos
);
482 bitmap_clear (&bb_info
->gen_pseudos
);
485 bitmap_clear (&all_hard_regs_bitmap
);
490 /* Insn currently scanned. */
491 static rtx_insn
*curr_insn
;
493 static lra_insn_recog_data_t curr_id
;
494 /* The insn static data. */
495 static struct lra_static_insn_data
*curr_static_id
;
497 /* Vec containing execution frequencies of program points. */
498 static vec
<int> point_freq_vec
;
500 /* The start of the above vector elements. */
503 /* Increment the current program point POINT to the next point which has
504 execution frequency FREQ. */
506 next_program_point (int &point
, int freq
)
508 point_freq_vec
.safe_push (freq
);
509 lra_point_freq
= point_freq_vec
.address ();
513 /* Update the preference of HARD_REGNO for pseudo REGNO by PROFIT. */
515 lra_setup_reload_pseudo_preferenced_hard_reg (int regno
,
516 int hard_regno
, int profit
)
518 lra_assert (regno
>= lra_constraint_new_regno_start
);
519 if (lra_reg_info
[regno
].preferred_hard_regno1
== hard_regno
)
520 lra_reg_info
[regno
].preferred_hard_regno_profit1
+= profit
;
521 else if (lra_reg_info
[regno
].preferred_hard_regno2
== hard_regno
)
522 lra_reg_info
[regno
].preferred_hard_regno_profit2
+= profit
;
523 else if (lra_reg_info
[regno
].preferred_hard_regno1
< 0)
525 lra_reg_info
[regno
].preferred_hard_regno1
= hard_regno
;
526 lra_reg_info
[regno
].preferred_hard_regno_profit1
= profit
;
528 else if (lra_reg_info
[regno
].preferred_hard_regno2
< 0
529 || profit
> lra_reg_info
[regno
].preferred_hard_regno_profit2
)
531 lra_reg_info
[regno
].preferred_hard_regno2
= hard_regno
;
532 lra_reg_info
[regno
].preferred_hard_regno_profit2
= profit
;
536 /* Keep the 1st hard regno as more profitable. */
537 if (lra_reg_info
[regno
].preferred_hard_regno1
>= 0
538 && lra_reg_info
[regno
].preferred_hard_regno2
>= 0
539 && (lra_reg_info
[regno
].preferred_hard_regno_profit2
540 > lra_reg_info
[regno
].preferred_hard_regno_profit1
))
542 std::swap (lra_reg_info
[regno
].preferred_hard_regno1
,
543 lra_reg_info
[regno
].preferred_hard_regno2
);
544 std::swap (lra_reg_info
[regno
].preferred_hard_regno_profit1
,
545 lra_reg_info
[regno
].preferred_hard_regno_profit2
);
547 if (lra_dump_file
!= NULL
)
549 if ((hard_regno
= lra_reg_info
[regno
].preferred_hard_regno1
) >= 0)
550 fprintf (lra_dump_file
,
551 " Hard reg %d is preferable by r%d with profit %d\n",
553 lra_reg_info
[regno
].preferred_hard_regno_profit1
);
554 if ((hard_regno
= lra_reg_info
[regno
].preferred_hard_regno2
) >= 0)
555 fprintf (lra_dump_file
,
556 " Hard reg %d is preferable by r%d with profit %d\n",
558 lra_reg_info
[regno
].preferred_hard_regno_profit2
);
562 /* Check that REGNO living through calls and setjumps, set up conflict
563 regs, and clear corresponding bits in PSEUDOS_LIVE_THROUGH_CALLS and
564 PSEUDOS_LIVE_THROUGH_SETJUMPS. */
566 check_pseudos_live_through_calls (int regno
)
570 if (! sparseset_bit_p (pseudos_live_through_calls
, regno
))
572 sparseset_clear_bit (pseudos_live_through_calls
, regno
);
573 IOR_HARD_REG_SET (lra_reg_info
[regno
].conflict_hard_regs
,
576 for (hr
= 0; hr
< FIRST_PSEUDO_REGISTER
; hr
++)
577 if (HARD_REGNO_CALL_PART_CLOBBERED (hr
, PSEUDO_REGNO_MODE (regno
)))
578 SET_HARD_REG_BIT (lra_reg_info
[regno
].conflict_hard_regs
, hr
);
579 lra_reg_info
[regno
].call_p
= true;
580 if (! sparseset_bit_p (pseudos_live_through_setjumps
, regno
))
582 sparseset_clear_bit (pseudos_live_through_setjumps
, regno
);
583 /* Don't allocate pseudos that cross setjmps or any call, if this
584 function receives a nonlocal goto. */
585 SET_HARD_REG_SET (lra_reg_info
[regno
].conflict_hard_regs
);
588 /* Process insns of the basic block BB to update pseudo live ranges,
589 pseudo hard register conflicts, and insn notes. We do it on
590 backward scan of BB insns. CURR_POINT is the program point where
591 BB ends. The function updates this counter and returns in
592 CURR_POINT the program point where BB starts. The function also
593 does local live info updates and can delete the dead insns if
594 DEAD_INSN_P. It returns true if pseudo live info was
595 changed at the BB start. */
597 process_bb_lives (basic_block bb
, int &curr_point
, bool dead_insn_p
)
606 bool need_curr_point_incr
;
608 reg_live_out
= df_get_live_out (bb
);
609 sparseset_clear (pseudos_live
);
610 sparseset_clear (pseudos_live_through_calls
);
611 sparseset_clear (pseudos_live_through_setjumps
);
612 REG_SET_TO_HARD_REG_SET (hard_regs_live
, reg_live_out
);
613 AND_COMPL_HARD_REG_SET (hard_regs_live
, eliminable_regset
);
614 EXECUTE_IF_SET_IN_BITMAP (reg_live_out
, FIRST_PSEUDO_REGISTER
, j
, bi
)
615 mark_pseudo_live (j
, curr_point
);
617 bb_gen_pseudos
= &get_bb_data (bb
)->gen_pseudos
;
618 bb_killed_pseudos
= &get_bb_data (bb
)->killed_pseudos
;
619 bitmap_clear (bb_gen_pseudos
);
620 bitmap_clear (bb_killed_pseudos
);
621 freq
= REG_FREQ_FROM_BB (bb
);
623 if (lra_dump_file
!= NULL
)
624 fprintf (lra_dump_file
, " BB %d\n", bb
->index
);
626 /* Scan the code of this basic block, noting which pseudos and hard
627 regs are born or die.
629 Note that this loop treats uninitialized values as live until the
630 beginning of the block. For example, if an instruction uses
631 (reg:DI foo), and only (subreg:SI (reg:DI foo) 0) is ever set,
632 FOO will remain live until the beginning of the block. Likewise
633 if FOO is not set at all. This is unnecessarily pessimistic, but
634 it probably doesn't matter much in practice. */
635 FOR_BB_INSNS_REVERSE_SAFE (bb
, curr_insn
, next
)
638 int dst_regno
, src_regno
;
640 struct lra_insn_reg
*reg
;
642 if (!NONDEBUG_INSN_P (curr_insn
))
645 curr_id
= lra_get_insn_recog_data (curr_insn
);
646 curr_static_id
= curr_id
->insn_static_data
;
647 if (lra_dump_file
!= NULL
)
648 fprintf (lra_dump_file
, " Insn %u: point = %d\n",
649 INSN_UID (curr_insn
), curr_point
);
651 set
= single_set (curr_insn
);
653 if (dead_insn_p
&& set
!= NULL_RTX
654 && REG_P (SET_DEST (set
)) && REGNO (SET_DEST (set
)) >= FIRST_PSEUDO_REGISTER
655 && find_reg_note (curr_insn
, REG_EH_REGION
, NULL_RTX
) == NULL_RTX
656 && ! may_trap_p (PATTERN (curr_insn
))
657 /* Don't do premature remove of pic offset pseudo as we can
658 start to use it after some reload generation. */
659 && (pic_offset_table_rtx
== NULL_RTX
660 || pic_offset_table_rtx
!= SET_DEST (set
)))
662 bool remove_p
= true;
664 for (reg
= curr_id
->regs
; reg
!= NULL
; reg
= reg
->next
)
665 if (reg
->type
!= OP_IN
&& sparseset_bit_p (pseudos_live
, reg
->regno
))
670 for (reg
= curr_static_id
->hard_regs
; reg
!= NULL
; reg
= reg
->next
)
671 if (reg
->type
!= OP_IN
)
676 if (remove_p
&& ! volatile_refs_p (PATTERN (curr_insn
)))
678 dst_regno
= REGNO (SET_DEST (set
));
679 if (lra_dump_file
!= NULL
)
680 fprintf (lra_dump_file
, " Deleting dead insn %u\n",
681 INSN_UID (curr_insn
));
682 lra_set_insn_deleted (curr_insn
);
683 if (lra_reg_info
[dst_regno
].nrefs
== 0)
685 /* There might be some debug insns with the pseudo. */
689 bitmap_copy (&temp_bitmap
, &lra_reg_info
[dst_regno
].insn_bitmap
);
690 EXECUTE_IF_SET_IN_BITMAP (&temp_bitmap
, 0, uid
, bi
)
692 insn
= lra_insn_recog_data
[uid
]->insn
;
693 lra_substitute_pseudo_within_insn (insn
, dst_regno
,
694 SET_SRC (set
), true);
695 lra_update_insn_regno_info (insn
);
702 /* Update max ref width and hard reg usage. */
703 for (reg
= curr_id
->regs
; reg
!= NULL
; reg
= reg
->next
)
705 int i
, regno
= reg
->regno
;
707 if (GET_MODE_SIZE (reg
->biggest_mode
)
708 > GET_MODE_SIZE (lra_reg_info
[regno
].biggest_mode
))
709 lra_reg_info
[regno
].biggest_mode
= reg
->biggest_mode
;
710 if (regno
< FIRST_PSEUDO_REGISTER
)
712 lra_hard_reg_usage
[regno
] += freq
;
713 /* A hard register explicitly can be used in small mode,
714 but implicitly it can be used in natural mode as a
715 part of multi-register group. Process this case
717 for (i
= 1; i
< hard_regno_nregs
[regno
][reg
->biggest_mode
]; i
++)
718 if (GET_MODE_SIZE (GET_MODE (regno_reg_rtx
[regno
+ i
]))
719 > GET_MODE_SIZE (lra_reg_info
[regno
+ i
].biggest_mode
))
720 lra_reg_info
[regno
+ i
].biggest_mode
721 = GET_MODE (regno_reg_rtx
[regno
+ i
]);
725 call_p
= CALL_P (curr_insn
);
726 src_regno
= (set
!= NULL_RTX
&& REG_P (SET_SRC (set
))
727 ? REGNO (SET_SRC (set
)) : -1);
728 dst_regno
= (set
!= NULL_RTX
&& REG_P (SET_DEST (set
))
729 ? REGNO (SET_DEST (set
)) : -1);
731 && src_regno
>= 0 && dst_regno
>= 0
732 /* Check that source regno does not conflict with
733 destination regno to exclude most impossible
735 && (((src_regno
>= FIRST_PSEUDO_REGISTER
736 && (! sparseset_bit_p (pseudos_live
, src_regno
)
737 || (dst_regno
>= FIRST_PSEUDO_REGISTER
738 && lra_reg_val_equal_p (src_regno
,
739 lra_reg_info
[dst_regno
].val
,
740 lra_reg_info
[dst_regno
].offset
))))
741 || (src_regno
< FIRST_PSEUDO_REGISTER
742 && ! TEST_HARD_REG_BIT (hard_regs_live
, src_regno
)))
743 /* It might be 'inheritance pseudo <- reload pseudo'. */
744 || (src_regno
>= lra_constraint_new_regno_start
745 && dst_regno
>= lra_constraint_new_regno_start
746 /* Remember to skip special cases where src/dest regnos are
747 the same, e.g. insn SET pattern has matching constraints
749 && src_regno
!= dst_regno
)))
751 int hard_regno
= -1, regno
= -1;
753 if (dst_regno
>= lra_constraint_new_regno_start
754 && src_regno
>= lra_constraint_new_regno_start
)
756 /* It might be still an original (non-reload) insn with
757 one unused output and a constraint requiring to use
758 the same reg for input/output operands. In this case
759 dst_regno and src_regno have the same value, we don't
760 need a misleading copy for this case. */
761 if (dst_regno
!= src_regno
)
762 lra_create_copy (dst_regno
, src_regno
, freq
);
764 else if (dst_regno
>= lra_constraint_new_regno_start
)
766 if ((hard_regno
= src_regno
) >= FIRST_PSEUDO_REGISTER
)
767 hard_regno
= reg_renumber
[src_regno
];
770 else if (src_regno
>= lra_constraint_new_regno_start
)
772 if ((hard_regno
= dst_regno
) >= FIRST_PSEUDO_REGISTER
)
773 hard_regno
= reg_renumber
[dst_regno
];
776 if (regno
>= 0 && hard_regno
>= 0)
777 lra_setup_reload_pseudo_preferenced_hard_reg
778 (regno
, hard_regno
, freq
);
781 sparseset_clear (start_living
);
783 /* Try to avoid unnecessary program point increments, this saves
784 a lot of time in remove_some_program_points_and_update_live_ranges.
785 We only need an increment if something becomes live or dies at this
787 need_curr_point_incr
= false;
789 /* Mark each defined value as live. We need to do this for
790 unused values because they still conflict with quantities
791 that are live at the time of the definition. */
792 for (reg
= curr_id
->regs
; reg
!= NULL
; reg
= reg
->next
)
793 if (reg
->type
!= OP_IN
)
796 |= mark_regno_live (reg
->regno
, reg
->biggest_mode
,
798 check_pseudos_live_through_calls (reg
->regno
);
801 for (reg
= curr_static_id
->hard_regs
; reg
!= NULL
; reg
= reg
->next
)
802 if (reg
->type
!= OP_IN
)
803 make_hard_regno_born (reg
->regno
, false);
805 if (curr_id
->arg_hard_regs
!= NULL
)
806 for (i
= 0; (regno
= curr_id
->arg_hard_regs
[i
]) >= 0; i
++)
807 if (regno
>= FIRST_PSEUDO_REGISTER
)
808 /* It is a clobber. */
809 make_hard_regno_born (regno
- FIRST_PSEUDO_REGISTER
, false);
811 sparseset_copy (unused_set
, start_living
);
813 sparseset_clear (start_dying
);
815 /* See which defined values die here. */
816 for (reg
= curr_id
->regs
; reg
!= NULL
; reg
= reg
->next
)
817 if (reg
->type
== OP_OUT
&& ! reg
->early_clobber
&& ! reg
->subreg_p
)
819 |= mark_regno_dead (reg
->regno
, reg
->biggest_mode
,
822 for (reg
= curr_static_id
->hard_regs
; reg
!= NULL
; reg
= reg
->next
)
823 if (reg
->type
== OP_OUT
&& ! reg
->early_clobber
&& ! reg
->subreg_p
)
824 make_hard_regno_dead (reg
->regno
);
826 if (curr_id
->arg_hard_regs
!= NULL
)
827 for (i
= 0; (regno
= curr_id
->arg_hard_regs
[i
]) >= 0; i
++)
828 if (regno
>= FIRST_PSEUDO_REGISTER
)
829 /* It is a clobber. */
830 make_hard_regno_dead (regno
- FIRST_PSEUDO_REGISTER
);
836 HARD_REG_SET this_call_used_reg_set
;
837 get_call_reg_set_usage (curr_insn
, &this_call_used_reg_set
,
840 EXECUTE_IF_SET_IN_SPARSESET (pseudos_live
, j
)
841 IOR_HARD_REG_SET (lra_reg_info
[j
].actual_call_used_reg_set
,
842 this_call_used_reg_set
);
845 sparseset_ior (pseudos_live_through_calls
,
846 pseudos_live_through_calls
, pseudos_live
);
847 if (cfun
->has_nonlocal_label
848 || find_reg_note (curr_insn
, REG_SETJMP
,
849 NULL_RTX
) != NULL_RTX
)
850 sparseset_ior (pseudos_live_through_setjumps
,
851 pseudos_live_through_setjumps
, pseudos_live
);
854 /* Increment the current program point if we must. */
855 if (need_curr_point_incr
)
856 next_program_point (curr_point
, freq
);
858 sparseset_clear (start_living
);
860 need_curr_point_incr
= false;
862 /* Mark each used value as live. */
863 for (reg
= curr_id
->regs
; reg
!= NULL
; reg
= reg
->next
)
864 if (reg
->type
== OP_IN
)
867 |= mark_regno_live (reg
->regno
, reg
->biggest_mode
,
869 check_pseudos_live_through_calls (reg
->regno
);
872 for (reg
= curr_static_id
->hard_regs
; reg
!= NULL
; reg
= reg
->next
)
873 if (reg
->type
== OP_IN
)
874 make_hard_regno_born (reg
->regno
, false);
876 if (curr_id
->arg_hard_regs
!= NULL
)
877 /* Make argument hard registers live. Don't create conflict
878 of used REAL_PIC_OFFSET_TABLE_REGNUM and the pic pseudo. */
879 for (i
= 0; (regno
= curr_id
->arg_hard_regs
[i
]) >= 0; i
++)
880 if (regno
< FIRST_PSEUDO_REGISTER
)
881 make_hard_regno_born (regno
, true);
883 sparseset_and_compl (dead_set
, start_living
, start_dying
);
885 /* Mark early clobber outputs dead. */
886 for (reg
= curr_id
->regs
; reg
!= NULL
; reg
= reg
->next
)
887 if (reg
->type
== OP_OUT
&& reg
->early_clobber
&& ! reg
->subreg_p
)
889 |= mark_regno_dead (reg
->regno
, reg
->biggest_mode
,
892 for (reg
= curr_static_id
->hard_regs
; reg
!= NULL
; reg
= reg
->next
)
893 if (reg
->type
== OP_OUT
&& reg
->early_clobber
&& ! reg
->subreg_p
)
894 make_hard_regno_dead (reg
->regno
);
896 if (need_curr_point_incr
)
897 next_program_point (curr_point
, freq
);
900 for (link_loc
= ®_NOTES (curr_insn
); (link
= *link_loc
) != NULL_RTX
;)
902 if (REG_NOTE_KIND (link
) != REG_DEAD
903 && REG_NOTE_KIND (link
) != REG_UNUSED
)
905 else if (REG_P (XEXP (link
, 0)))
907 regno
= REGNO (XEXP (link
, 0));
908 if ((REG_NOTE_KIND (link
) == REG_DEAD
909 && ! sparseset_bit_p (dead_set
, regno
))
910 || (REG_NOTE_KIND (link
) == REG_UNUSED
911 && ! sparseset_bit_p (unused_set
, regno
)))
913 *link_loc
= XEXP (link
, 1);
916 if (REG_NOTE_KIND (link
) == REG_DEAD
)
917 sparseset_clear_bit (dead_set
, regno
);
918 else if (REG_NOTE_KIND (link
) == REG_UNUSED
)
919 sparseset_clear_bit (unused_set
, regno
);
921 link_loc
= &XEXP (link
, 1);
923 EXECUTE_IF_SET_IN_SPARSESET (dead_set
, j
)
924 add_reg_note (curr_insn
, REG_DEAD
, regno_reg_rtx
[j
]);
925 EXECUTE_IF_SET_IN_SPARSESET (unused_set
, j
)
926 add_reg_note (curr_insn
, REG_UNUSED
, regno_reg_rtx
[j
]);
929 if (bb_has_eh_pred (bb
))
932 unsigned int regno
= EH_RETURN_DATA_REGNO (j
);
934 if (regno
== INVALID_REGNUM
)
936 make_hard_regno_born (regno
, false);
939 /* Pseudos can't go in stack regs at the start of a basic block that
940 is reached by an abnormal edge. Likewise for call clobbered regs,
941 because caller-save, fixup_abnormal_edges and possibly the table
942 driven EH machinery are not quite ready to handle such pseudos
943 live across such edges. */
944 if (bb_has_abnormal_pred (bb
))
947 EXECUTE_IF_SET_IN_SPARSESET (pseudos_live
, px
)
948 lra_reg_info
[px
].no_stack_p
= true;
949 for (px
= FIRST_STACK_REG
; px
<= LAST_STACK_REG
; px
++)
950 make_hard_regno_born (px
, false);
952 /* No need to record conflicts for call clobbered regs if we
953 have nonlocal labels around, as we don't ever try to
954 allocate such regs in this case. */
955 if (!cfun
->has_nonlocal_label
956 && has_abnormal_call_or_eh_pred_edge_p (bb
))
957 for (px
= 0; px
< FIRST_PSEUDO_REGISTER
; px
++)
958 if (call_used_regs
[px
]
959 #ifdef REAL_PIC_OFFSET_TABLE_REGNUM
960 /* We should create a conflict of PIC pseudo with PIC
961 hard reg as PIC hard reg can have a wrong value after
962 jump described by the abnormal edge. In this case we
963 can not allocate PIC hard reg to PIC pseudo as PIC
964 pseudo will also have a wrong value. */
965 || (px
== REAL_PIC_OFFSET_TABLE_REGNUM
966 && pic_offset_table_rtx
!= NULL_RTX
967 && REGNO (pic_offset_table_rtx
) >= FIRST_PSEUDO_REGISTER
)
970 make_hard_regno_born (px
, false);
973 bool live_change_p
= false;
974 /* Check if bb border live info was changed. */
975 unsigned int live_pseudos_num
= 0;
976 EXECUTE_IF_SET_IN_BITMAP (df_get_live_in (bb
),
977 FIRST_PSEUDO_REGISTER
, j
, bi
)
980 if (! sparseset_bit_p (pseudos_live
, j
))
982 live_change_p
= true;
983 if (lra_dump_file
!= NULL
)
984 fprintf (lra_dump_file
,
985 " r%d is removed as live at bb%d start\n", j
, bb
->index
);
990 && sparseset_cardinality (pseudos_live
) != live_pseudos_num
)
992 live_change_p
= true;
993 if (lra_dump_file
!= NULL
)
994 EXECUTE_IF_SET_IN_SPARSESET (pseudos_live
, j
)
995 if (! bitmap_bit_p (df_get_live_in (bb
), j
))
996 fprintf (lra_dump_file
,
997 " r%d is added to live at bb%d start\n", j
, bb
->index
);
999 /* See if we'll need an increment at the end of this basic block.
1000 An increment is needed if the PSEUDOS_LIVE set is not empty,
1001 to make sure the finish points are set up correctly. */
1002 need_curr_point_incr
= (sparseset_cardinality (pseudos_live
) > 0);
1004 EXECUTE_IF_SET_IN_SPARSESET (pseudos_live
, i
)
1005 mark_pseudo_dead (i
, curr_point
);
1007 EXECUTE_IF_SET_IN_BITMAP (df_get_live_in (bb
), FIRST_PSEUDO_REGISTER
, j
, bi
)
1009 if (sparseset_cardinality (pseudos_live_through_calls
) == 0)
1011 if (sparseset_bit_p (pseudos_live_through_calls
, j
))
1012 check_pseudos_live_through_calls (j
);
1015 if (need_curr_point_incr
)
1016 next_program_point (curr_point
, freq
);
1018 return live_change_p
;
1021 /* Compress pseudo live ranges by removing program points where
1022 nothing happens. Complexity of many algorithms in LRA is linear
1023 function of program points number. To speed up the code we try to
1024 minimize the number of the program points here. */
1026 remove_some_program_points_and_update_live_ranges (void)
1031 lra_live_range_t r
, prev_r
, next_r
;
1032 sbitmap_iterator sbi
;
1033 bool born_p
, dead_p
, prev_born_p
, prev_dead_p
;
1035 auto_sbitmap
born (lra_live_max_point
);
1036 auto_sbitmap
dead (lra_live_max_point
);
1037 bitmap_clear (born
);
1038 bitmap_clear (dead
);
1039 max_regno
= max_reg_num ();
1040 for (i
= FIRST_PSEUDO_REGISTER
; i
< (unsigned) max_regno
; i
++)
1042 for (r
= lra_reg_info
[i
].live_ranges
; r
!= NULL
; r
= r
->next
)
1044 lra_assert (r
->start
<= r
->finish
);
1045 bitmap_set_bit (born
, r
->start
);
1046 bitmap_set_bit (dead
, r
->finish
);
1049 auto_sbitmap
born_or_dead (lra_live_max_point
);
1050 bitmap_ior (born_or_dead
, born
, dead
);
1051 map
= XCNEWVEC (int, lra_live_max_point
);
1053 prev_born_p
= prev_dead_p
= false;
1054 EXECUTE_IF_SET_IN_BITMAP (born_or_dead
, 0, i
, sbi
)
1056 born_p
= bitmap_bit_p (born
, i
);
1057 dead_p
= bitmap_bit_p (dead
, i
);
1058 if ((prev_born_p
&& ! prev_dead_p
&& born_p
&& ! dead_p
)
1059 || (prev_dead_p
&& ! prev_born_p
&& dead_p
&& ! born_p
))
1062 lra_point_freq
[n
] = MAX (lra_point_freq
[n
], lra_point_freq
[i
]);
1067 lra_point_freq
[n
] = lra_point_freq
[i
];
1069 prev_born_p
= born_p
;
1070 prev_dead_p
= dead_p
;
1073 if (lra_dump_file
!= NULL
)
1074 fprintf (lra_dump_file
, "Compressing live ranges: from %d to %d - %d%%\n",
1075 lra_live_max_point
, n
, 100 * n
/ lra_live_max_point
);
1076 if (n
< lra_live_max_point
)
1078 lra_live_max_point
= n
;
1079 for (i
= FIRST_PSEUDO_REGISTER
; i
< (unsigned) max_regno
; i
++)
1081 for (prev_r
= NULL
, r
= lra_reg_info
[i
].live_ranges
;
1086 r
->start
= map
[r
->start
];
1087 r
->finish
= map
[r
->finish
];
1088 if (prev_r
== NULL
|| prev_r
->start
> r
->finish
+ 1)
1093 prev_r
->start
= r
->start
;
1094 prev_r
->next
= next_r
;
1095 lra_live_range_pool
.remove (r
);
1102 /* Print live ranges R to file F. */
1104 lra_print_live_range_list (FILE *f
, lra_live_range_t r
)
1106 for (; r
!= NULL
; r
= r
->next
)
1107 fprintf (f
, " [%d..%d]", r
->start
, r
->finish
);
1112 debug (lra_live_range
&ref
)
1114 lra_print_live_range_list (stderr
, &ref
);
1118 debug (lra_live_range
*ptr
)
1123 fprintf (stderr
, "<nil>\n");
1126 /* Print live ranges R to stderr. */
1128 lra_debug_live_range_list (lra_live_range_t r
)
1130 lra_print_live_range_list (stderr
, r
);
1133 /* Print live ranges of pseudo REGNO to file F. */
1135 print_pseudo_live_ranges (FILE *f
, int regno
)
1137 if (lra_reg_info
[regno
].live_ranges
== NULL
)
1139 fprintf (f
, " r%d:", regno
);
1140 lra_print_live_range_list (f
, lra_reg_info
[regno
].live_ranges
);
1143 /* Print live ranges of pseudo REGNO to stderr. */
1145 lra_debug_pseudo_live_ranges (int regno
)
1147 print_pseudo_live_ranges (stderr
, regno
);
1150 /* Print live ranges of all pseudos to file F. */
1152 print_live_ranges (FILE *f
)
1156 max_regno
= max_reg_num ();
1157 for (i
= FIRST_PSEUDO_REGISTER
; i
< max_regno
; i
++)
1158 print_pseudo_live_ranges (f
, i
);
1161 /* Print live ranges of all pseudos to stderr. */
1163 lra_debug_live_ranges (void)
1165 print_live_ranges (stderr
);
1168 /* Compress pseudo live ranges. */
1170 compress_live_ranges (void)
1172 remove_some_program_points_and_update_live_ranges ();
1173 if (lra_dump_file
!= NULL
)
1175 fprintf (lra_dump_file
, "Ranges after the compression:\n");
1176 print_live_ranges (lra_dump_file
);
1182 /* The number of the current live range pass. */
1183 int lra_live_range_iter
;
1185 /* The function creates live ranges only for memory pseudos (or for
1186 all ones if ALL_P), set up CONFLICT_HARD_REGS for the pseudos. It
1187 also does dead insn elimination if DEAD_INSN_P and global live
1188 analysis only for pseudos and only if the pseudo live info was
1189 changed on a BB border. Return TRUE if the live info was
1192 lra_create_live_ranges_1 (bool all_p
, bool dead_insn_p
)
1195 int i
, hard_regno
, max_regno
= max_reg_num ();
1197 bool bb_live_change_p
, have_referenced_pseudos
= false;
1199 timevar_push (TV_LRA_CREATE_LIVE_RANGES
);
1201 complete_info_p
= all_p
;
1202 if (lra_dump_file
!= NULL
)
1203 fprintf (lra_dump_file
,
1204 "\n********** Pseudo live ranges #%d: **********\n\n",
1205 ++lra_live_range_iter
);
1206 memset (lra_hard_reg_usage
, 0, sizeof (lra_hard_reg_usage
));
1207 for (i
= 0; i
< max_regno
; i
++)
1209 lra_reg_info
[i
].live_ranges
= NULL
;
1210 CLEAR_HARD_REG_SET (lra_reg_info
[i
].conflict_hard_regs
);
1211 lra_reg_info
[i
].preferred_hard_regno1
= -1;
1212 lra_reg_info
[i
].preferred_hard_regno2
= -1;
1213 lra_reg_info
[i
].preferred_hard_regno_profit1
= 0;
1214 lra_reg_info
[i
].preferred_hard_regno_profit2
= 0;
1216 lra_reg_info
[i
].no_stack_p
= false;
1218 /* The biggest mode is already set but its value might be to
1219 conservative because of recent transformation. Here in this
1220 file we recalculate it again as it costs practically
1222 if (i
>= FIRST_PSEUDO_REGISTER
&& regno_reg_rtx
[i
] != NULL_RTX
)
1223 lra_reg_info
[i
].biggest_mode
= GET_MODE (regno_reg_rtx
[i
]);
1225 lra_reg_info
[i
].biggest_mode
= VOIDmode
;
1226 lra_reg_info
[i
].call_p
= false;
1227 if (i
>= FIRST_PSEUDO_REGISTER
1228 && lra_reg_info
[i
].nrefs
!= 0)
1230 if ((hard_regno
= reg_renumber
[i
]) >= 0)
1231 lra_hard_reg_usage
[hard_regno
] += lra_reg_info
[i
].freq
;
1232 have_referenced_pseudos
= true;
1237 /* Under some circumstances, we can have functions without pseudo
1238 registers. For such functions, lra_live_max_point will be 0,
1239 see e.g. PR55604, and there's nothing more to do for us here. */
1240 if (! have_referenced_pseudos
)
1242 timevar_pop (TV_LRA_CREATE_LIVE_RANGES
);
1246 pseudos_live
= sparseset_alloc (max_regno
);
1247 pseudos_live_through_calls
= sparseset_alloc (max_regno
);
1248 pseudos_live_through_setjumps
= sparseset_alloc (max_regno
);
1249 start_living
= sparseset_alloc (max_regno
);
1250 start_dying
= sparseset_alloc (max_regno
);
1251 dead_set
= sparseset_alloc (max_regno
);
1252 unused_set
= sparseset_alloc (max_regno
);
1254 unsigned new_length
= get_max_uid () * 2;
1255 point_freq_vec
.truncate (0);
1256 point_freq_vec
.reserve_exact (new_length
);
1257 lra_point_freq
= point_freq_vec
.address ();
1258 int *post_order_rev_cfg
= XNEWVEC (int, last_basic_block_for_fn (cfun
));
1259 int n_blocks_inverted
= inverted_post_order_compute (post_order_rev_cfg
);
1260 lra_assert (n_blocks_inverted
== n_basic_blocks_for_fn (cfun
));
1261 bb_live_change_p
= false;
1262 for (i
= n_blocks_inverted
- 1; i
>= 0; --i
)
1264 bb
= BASIC_BLOCK_FOR_FN (cfun
, post_order_rev_cfg
[i
]);
1265 if (bb
== EXIT_BLOCK_PTR_FOR_FN (cfun
) || bb
1266 == ENTRY_BLOCK_PTR_FOR_FN (cfun
))
1268 if (process_bb_lives (bb
, curr_point
, dead_insn_p
))
1269 bb_live_change_p
= true;
1271 if (bb_live_change_p
)
1273 /* We need to clear pseudo live info as some pseudos can
1274 disappear, e.g. pseudos with used equivalences. */
1275 FOR_EACH_BB_FN (bb
, cfun
)
1277 bitmap_clear_range (df_get_live_in (bb
), FIRST_PSEUDO_REGISTER
,
1278 max_regno
- FIRST_PSEUDO_REGISTER
);
1279 bitmap_clear_range (df_get_live_out (bb
), FIRST_PSEUDO_REGISTER
,
1280 max_regno
- FIRST_PSEUDO_REGISTER
);
1282 /* As we did not change CFG since LRA start we can use
1283 DF-infrastructure solver to solve live data flow problem. */
1285 (DF_BACKWARD
, NULL
, live_con_fun_0
, live_con_fun_n
,
1286 live_trans_fun
, &all_blocks
,
1287 df_get_postorder (DF_BACKWARD
), df_get_n_blocks (DF_BACKWARD
));
1288 if (lra_dump_file
!= NULL
)
1290 fprintf (lra_dump_file
,
1291 "Global pseudo live data have been updated:\n");
1293 FOR_EACH_BB_FN (bb
, cfun
)
1295 bb_data_t bb_info
= get_bb_data (bb
);
1296 bitmap bb_livein
= df_get_live_in (bb
);
1297 bitmap bb_liveout
= df_get_live_out (bb
);
1299 fprintf (lra_dump_file
, "\nBB %d:\n", bb
->index
);
1300 lra_dump_bitmap_with_title (" gen:",
1301 &bb_info
->gen_pseudos
, bb
->index
);
1302 lra_dump_bitmap_with_title (" killed:",
1303 &bb_info
->killed_pseudos
, bb
->index
);
1304 lra_dump_bitmap_with_title (" livein:", bb_livein
, bb
->index
);
1305 lra_dump_bitmap_with_title (" liveout:", bb_liveout
, bb
->index
);
1309 free (post_order_rev_cfg
);
1310 lra_live_max_point
= curr_point
;
1311 if (lra_dump_file
!= NULL
)
1312 print_live_ranges (lra_dump_file
);
1314 sparseset_free (unused_set
);
1315 sparseset_free (dead_set
);
1316 sparseset_free (start_dying
);
1317 sparseset_free (start_living
);
1318 sparseset_free (pseudos_live_through_calls
);
1319 sparseset_free (pseudos_live_through_setjumps
);
1320 sparseset_free (pseudos_live
);
1321 compress_live_ranges ();
1322 timevar_pop (TV_LRA_CREATE_LIVE_RANGES
);
1323 return bb_live_change_p
;
1326 /* The main entry function creates live-ranges and other live info
1327 necessary for the assignment sub-pass. It uses
1328 lra_creates_live_ranges_1 -- so read comments for the
1331 lra_create_live_ranges (bool all_p
, bool dead_insn_p
)
1333 if (! lra_create_live_ranges_1 (all_p
, dead_insn_p
))
1335 if (lra_dump_file
!= NULL
)
1336 fprintf (lra_dump_file
, "Live info was changed -- recalculate it\n");
1337 /* Live info was changed on a bb border. It means that some info,
1338 e.g. about conflict regs, calls crossed, and live ranges may be
1339 wrong. We need this info for allocation. So recalculate it
1340 again but without removing dead insns which can change live info
1341 again. Repetitive live range calculations are expensive therefore
1342 we stop here as we already have correct info although some
1343 improvement in rare cases could be possible on this sub-pass if
1344 we do dead insn elimination again (still the improvement may
1346 lra_clear_live_ranges ();
1347 bool res
= lra_create_live_ranges_1 (all_p
, false);
1351 /* Finish all live ranges. */
1353 lra_clear_live_ranges (void)
1357 for (i
= 0; i
< max_reg_num (); i
++)
1358 free_live_range_list (lra_reg_info
[i
].live_ranges
);
1359 point_freq_vec
.release ();
1362 /* Initialize live ranges data once per function. */
1364 lra_live_ranges_init (void)
1366 bitmap_initialize (&temp_bitmap
, ®_obstack
);
1367 initiate_live_solver ();
1370 /* Finish live ranges data once per function. */
1372 lra_live_ranges_finish (void)
1374 finish_live_solver ();
1375 bitmap_clear (&temp_bitmap
);
1376 lra_live_range_pool
.release ();