OpenMP: Update documentation of metadirective implementation status.
[gcc.git] / gcc / lra-lives.cc
blobffce162907e935e7e61af0219d002d6b1a79366c
1 /* Build live ranges for pseudos.
2 Copyright (C) 2010-2025 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 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. */
28 #include "config.h"
29 #include "system.h"
30 #include "coretypes.h"
31 #include "backend.h"
32 #include "rtl.h"
33 #include "tree.h"
34 #include "predict.h"
35 #include "df.h"
36 #include "memmodel.h"
37 #include "tm_p.h"
38 #include "insn-config.h"
39 #include "regs.h"
40 #include "ira.h"
41 #include "ira-int.h"
42 #include "recog.h"
43 #include "cfganal.h"
44 #include "sparseset.h"
45 #include "lra-int.h"
46 #include "target.h"
47 #include "function-abi.h"
49 /* Program points are enumerated by numbers from range
50 0..LRA_LIVE_MAX_POINT-1. There are approximately two times more
51 program points than insns. Program points are places in the
52 program where liveness info can be changed. In most general case
53 (there are more complicated cases too) some program points
54 correspond to places where input operand dies and other ones
55 correspond to places where output operands are born. */
56 int lra_live_max_point;
58 /* Accumulated execution frequency of all references for each hard
59 register. */
60 int lra_hard_reg_usage[FIRST_PSEUDO_REGISTER];
62 /* A global flag whose true value says to build live ranges for all
63 pseudos, otherwise the live ranges only for pseudos got memory is
64 build. True value means also building copies and setting up hard
65 register preferences. The complete info is necessary for
66 assignment, rematerialization and spill to register passes. The
67 complete info is not needed for the coalescing and spill to memory
68 passes. */
69 static bool complete_info_p;
71 /* Pseudos live at current point in the RTL scan. */
72 static sparseset pseudos_live;
74 /* Pseudos probably living through calls and setjumps. As setjump is
75 a call too, if a bit in PSEUDOS_LIVE_THROUGH_SETJUMPS is set up
76 then the corresponding bit in PSEUDOS_LIVE_THROUGH_CALLS is set up
77 too. These data are necessary for cases when only one subreg of a
78 multi-reg pseudo is set up after a call. So we decide it is
79 probably live when traversing bb backward. We are sure about
80 living when we see its usage or definition of the pseudo. */
81 static sparseset pseudos_live_through_calls;
82 static sparseset pseudos_live_through_setjumps;
84 /* Set of hard regs (except eliminable ones) currently live. */
85 static HARD_REG_SET hard_regs_live;
87 /* Set of pseudos and hard registers start living/dying in the current
88 insn. These sets are used to update REG_DEAD and REG_UNUSED notes
89 in the insn. */
90 static sparseset start_living, start_dying;
92 /* Set of pseudos and hard regs dead and unused in the current
93 insn. */
94 static sparseset unused_set, dead_set;
96 /* Bitmap used for holding intermediate bitmap operation results. */
97 static bitmap_head temp_bitmap;
99 /* Pool for pseudo live ranges. */
100 static object_allocator<lra_live_range> lra_live_range_pool ("live ranges");
102 /* Free live range list LR. */
103 static void
104 free_live_range_list (lra_live_range_t lr)
106 lra_live_range_t next;
108 while (lr != NULL)
110 next = lr->next;
111 lra_live_range_pool.remove (lr);
112 lr = next;
116 /* Create and return pseudo live range with given attributes. */
117 static lra_live_range_t
118 create_live_range (int regno, int start, int finish, lra_live_range_t next)
120 lra_live_range_t p = lra_live_range_pool.allocate ();
121 p->regno = regno;
122 p->start = start;
123 p->finish = finish;
124 p->next = next;
125 return p;
128 /* Copy live range R and return the result. */
129 static lra_live_range_t
130 copy_live_range (lra_live_range_t r)
132 return new (lra_live_range_pool) lra_live_range (*r);
135 /* Copy live range list given by its head R and return the result. */
136 lra_live_range_t
137 lra_copy_live_range_list (lra_live_range_t r)
139 lra_live_range_t p, first, *chain;
141 first = NULL;
142 for (chain = &first; r != NULL; r = r->next)
144 p = copy_live_range (r);
145 *chain = p;
146 chain = &p->next;
148 return first;
151 /* Merge *non-intersected* ranges R1 and R2 and returns the result.
152 The function maintains the order of ranges and tries to minimize
153 size of the result range list. Ranges R1 and R2 may not be used
154 after the call. */
155 lra_live_range_t
156 lra_merge_live_ranges (lra_live_range_t r1, lra_live_range_t r2)
158 lra_live_range_t first, last;
160 if (r1 == NULL)
161 return r2;
162 if (r2 == NULL)
163 return r1;
164 for (first = last = NULL; r1 != NULL && r2 != NULL;)
166 if (r1->start < r2->start)
167 std::swap (r1, r2);
169 if (r1->start == r2->finish + 1)
171 /* Joint ranges: merge r1 and r2 into r1. */
172 r1->start = r2->start;
173 lra_live_range_t temp = r2;
174 r2 = r2->next;
175 lra_live_range_pool.remove (temp);
177 else
179 gcc_assert (r2->finish + 1 < r1->start);
180 /* Add r1 to the result. */
181 if (first == NULL)
182 first = last = r1;
183 else
185 last->next = r1;
186 last = r1;
188 r1 = r1->next;
191 if (r1 != NULL)
193 if (first == NULL)
194 first = r1;
195 else
196 last->next = r1;
198 else
200 lra_assert (r2 != NULL);
201 if (first == NULL)
202 first = r2;
203 else
204 last->next = r2;
206 return first;
209 /* Return TRUE if live ranges R1 and R2 intersect. */
210 bool
211 lra_intersected_live_ranges_p (lra_live_range_t r1, lra_live_range_t r2)
213 /* Remember the live ranges are always kept ordered. */
214 while (r1 != NULL && r2 != NULL)
216 if (r1->start > r2->finish)
217 r1 = r1->next;
218 else if (r2->start > r1->finish)
219 r2 = r2->next;
220 else
221 return true;
223 return false;
226 enum point_type {
227 DEF_POINT,
228 USE_POINT
231 /* Return TRUE if set A contains a pseudo register, otherwise, return FALSE. */
232 static bool
233 sparseset_contains_pseudos_p (sparseset a)
235 int regno;
236 EXECUTE_IF_SET_IN_SPARSESET (a, regno)
237 if (!HARD_REGISTER_NUM_P (regno))
238 return true;
239 return false;
242 /* Mark pseudo REGNO as living or dying at program point POINT, depending on
243 whether TYPE is a definition or a use. If this is the first reference to
244 REGNO that we've encountered, then create a new live range for it. */
246 static void
247 update_pseudo_point (int regno, int point, enum point_type type)
249 lra_live_range_t p;
251 /* Don't compute points for hard registers. */
252 if (HARD_REGISTER_NUM_P (regno))
253 return;
255 if (complete_info_p || lra_get_regno_hard_regno (regno) < 0)
257 if (type == DEF_POINT)
259 if (sparseset_bit_p (pseudos_live, regno))
261 p = lra_reg_info[regno].live_ranges;
262 lra_assert (p != NULL);
263 p->finish = point;
266 else /* USE_POINT */
268 if (!sparseset_bit_p (pseudos_live, regno)
269 && ((p = lra_reg_info[regno].live_ranges) == NULL
270 || (p->finish != point && p->finish + 1 != point)))
271 lra_reg_info[regno].live_ranges
272 = create_live_range (regno, point, -1, p);
277 /* The corresponding bitmaps of BB currently being processed. */
278 static bitmap bb_killed_pseudos, bb_gen_pseudos;
280 /* Record hard register REGNO as now being live. It updates
281 living hard regs and START_LIVING. */
282 static void
283 make_hard_regno_live (int regno)
285 lra_assert (HARD_REGISTER_NUM_P (regno));
286 if (TEST_HARD_REG_BIT (hard_regs_live, regno)
287 || TEST_HARD_REG_BIT (eliminable_regset, regno))
288 return;
289 SET_HARD_REG_BIT (hard_regs_live, regno);
290 sparseset_set_bit (start_living, regno);
291 if (fixed_regs[regno] || TEST_HARD_REG_BIT (hard_regs_spilled_into, regno))
292 bitmap_set_bit (bb_gen_pseudos, regno);
295 /* Process the definition of hard register REGNO. This updates
296 hard_regs_live, START_DYING and conflict hard regs for living
297 pseudos. */
298 static void
299 make_hard_regno_dead (int regno)
301 if (TEST_HARD_REG_BIT (eliminable_regset, regno))
302 return;
304 lra_assert (HARD_REGISTER_NUM_P (regno));
305 unsigned int i;
306 EXECUTE_IF_SET_IN_SPARSESET (pseudos_live, i)
307 SET_HARD_REG_BIT (lra_reg_info[i].conflict_hard_regs, regno);
309 if (! TEST_HARD_REG_BIT (hard_regs_live, regno))
310 return;
311 CLEAR_HARD_REG_BIT (hard_regs_live, regno);
312 sparseset_set_bit (start_dying, regno);
313 if (fixed_regs[regno] || TEST_HARD_REG_BIT (hard_regs_spilled_into, regno))
315 bitmap_clear_bit (bb_gen_pseudos, regno);
316 bitmap_set_bit (bb_killed_pseudos, regno);
320 /* Mark pseudo REGNO as now being live and update START_LIVING. */
321 static void
322 mark_pseudo_live (int regno)
324 lra_assert (!HARD_REGISTER_NUM_P (regno));
325 if (sparseset_bit_p (pseudos_live, regno))
326 return;
328 sparseset_set_bit (pseudos_live, regno);
329 sparseset_set_bit (start_living, regno);
332 /* Mark pseudo REGNO as now being dead and update START_DYING. */
333 static void
334 mark_pseudo_dead (int regno)
336 lra_assert (!HARD_REGISTER_NUM_P (regno));
337 lra_reg_info[regno].conflict_hard_regs |= hard_regs_live;
338 if (!sparseset_bit_p (pseudos_live, regno))
339 return;
341 sparseset_clear_bit (pseudos_live, regno);
342 sparseset_set_bit (start_dying, regno);
345 /* Mark register REGNO (pseudo or hard register) in MODE as being live
346 and update BB_GEN_PSEUDOS. */
347 static void
348 mark_regno_live (int regno, machine_mode mode)
350 int last;
352 if (HARD_REGISTER_NUM_P (regno))
354 for (last = end_hard_regno (mode, regno); regno < last; regno++)
355 make_hard_regno_live (regno);
357 else
359 mark_pseudo_live (regno);
360 bitmap_set_bit (bb_gen_pseudos, regno);
365 /* Mark register REGNO (pseudo or hard register) in MODE as being dead
366 and update BB_GEN_PSEUDOS and BB_KILLED_PSEUDOS. */
367 static void
368 mark_regno_dead (int regno, machine_mode mode)
370 int last;
372 if (HARD_REGISTER_NUM_P (regno))
374 for (last = end_hard_regno (mode, regno); regno < last; regno++)
375 make_hard_regno_dead (regno);
377 else
379 mark_pseudo_dead (regno);
380 bitmap_clear_bit (bb_gen_pseudos, regno);
381 bitmap_set_bit (bb_killed_pseudos, regno);
387 /* This page contains code for making global live analysis of pseudos.
388 The code works only when pseudo live info is changed on a BB
389 border. That might be a consequence of some global transformations
390 in LRA, e.g. PIC pseudo reuse or rematerialization. */
392 /* Structure describing local BB data used for pseudo
393 live-analysis. */
394 class bb_data_pseudos
396 public:
397 /* Basic block about which the below data are. */
398 basic_block bb;
399 bitmap_head killed_pseudos; /* pseudos killed in the BB. */
400 bitmap_head gen_pseudos; /* pseudos generated in the BB. */
403 /* Array for all BB data. Indexed by the corresponding BB index. */
404 typedef class bb_data_pseudos *bb_data_t;
406 /* All basic block data are referred through the following array. */
407 static bb_data_t bb_data;
409 /* Two small functions for access to the bb data. */
410 static inline bb_data_t
411 get_bb_data (basic_block bb)
413 return &bb_data[(bb)->index];
416 static inline bb_data_t
417 get_bb_data_by_index (int index)
419 return &bb_data[index];
422 /* Bitmap with all hard regs. */
423 static bitmap_head all_hard_regs_bitmap;
425 /* The transfer function used by the DF equation solver to propagate
426 live info through block with BB_INDEX according to the following
427 equation:
429 bb.livein = (bb.liveout - bb.kill) OR bb.gen
431 static bool
432 live_trans_fun (int bb_index)
434 basic_block bb = get_bb_data_by_index (bb_index)->bb;
435 bitmap bb_liveout = df_get_live_out (bb);
436 bitmap bb_livein = df_get_live_in (bb);
437 bb_data_t bb_info = get_bb_data (bb);
439 bitmap_and_compl (&temp_bitmap, bb_liveout, &all_hard_regs_bitmap);
440 return bitmap_ior_and_compl (bb_livein, &bb_info->gen_pseudos,
441 &temp_bitmap, &bb_info->killed_pseudos);
444 /* The confluence function used by the DF equation solver to set up
445 live info for a block BB without predecessor. */
446 static void
447 live_con_fun_0 (basic_block bb)
449 bitmap_and_into (df_get_live_out (bb), &all_hard_regs_bitmap);
452 /* The confluence function used by the DF equation solver to propagate
453 live info from successor to predecessor on edge E according to the
454 following equation:
456 bb.liveout = 0 for entry block | OR (livein of successors)
458 static bool
459 live_con_fun_n (edge e)
461 basic_block bb = e->src;
462 basic_block dest = e->dest;
463 bitmap bb_liveout = df_get_live_out (bb);
464 bitmap dest_livein = df_get_live_in (dest);
466 return bitmap_ior_and_compl_into (bb_liveout,
467 dest_livein, &all_hard_regs_bitmap);
470 /* Indexes of all function blocks. */
471 static bitmap_head all_blocks;
473 /* Allocate and initialize data needed for global pseudo live
474 analysis. */
475 static void
476 initiate_live_solver (void)
478 bitmap_initialize (&all_hard_regs_bitmap, &reg_obstack);
479 bitmap_set_range (&all_hard_regs_bitmap, 0, FIRST_PSEUDO_REGISTER);
480 bb_data = XNEWVEC (class bb_data_pseudos, last_basic_block_for_fn (cfun));
481 bitmap_initialize (&all_blocks, &reg_obstack);
483 basic_block bb;
484 FOR_ALL_BB_FN (bb, cfun)
486 bb_data_t bb_info = get_bb_data (bb);
487 bb_info->bb = bb;
488 bitmap_initialize (&bb_info->killed_pseudos, &reg_obstack);
489 bitmap_initialize (&bb_info->gen_pseudos, &reg_obstack);
490 bitmap_set_bit (&all_blocks, bb->index);
494 /* Free all data needed for global pseudo live analysis. */
495 static void
496 finish_live_solver (void)
498 basic_block bb;
500 bitmap_clear (&all_blocks);
501 FOR_ALL_BB_FN (bb, cfun)
503 bb_data_t bb_info = get_bb_data (bb);
504 bitmap_clear (&bb_info->killed_pseudos);
505 bitmap_clear (&bb_info->gen_pseudos);
507 free (bb_data);
508 bitmap_clear (&all_hard_regs_bitmap);
513 /* Insn currently scanned. */
514 static rtx_insn *curr_insn;
515 /* The insn data. */
516 static lra_insn_recog_data_t curr_id;
517 /* The insn static data. */
518 static struct lra_static_insn_data *curr_static_id;
520 /* Vec containing execution frequencies of program points. */
521 static vec<int> point_freq_vec;
523 /* The start of the above vector elements. */
524 int *lra_point_freq;
526 /* Increment the current program point POINT to the next point which has
527 execution frequency FREQ. */
528 static void
529 next_program_point (int &point, int freq)
531 point_freq_vec.safe_push (freq);
532 lra_point_freq = point_freq_vec.address ();
533 point++;
536 /* Update the preference of HARD_REGNO for pseudo REGNO by PROFIT. */
537 void
538 lra_setup_reload_pseudo_preferenced_hard_reg (int regno,
539 int hard_regno, int profit)
541 lra_assert (regno >= lra_constraint_new_regno_start);
542 if (lra_reg_info[regno].preferred_hard_regno1 == hard_regno)
543 lra_reg_info[regno].preferred_hard_regno_profit1 += profit;
544 else if (lra_reg_info[regno].preferred_hard_regno2 == hard_regno)
545 lra_reg_info[regno].preferred_hard_regno_profit2 += profit;
546 else if (lra_reg_info[regno].preferred_hard_regno1 < 0)
548 lra_reg_info[regno].preferred_hard_regno1 = hard_regno;
549 lra_reg_info[regno].preferred_hard_regno_profit1 = profit;
551 else if (lra_reg_info[regno].preferred_hard_regno2 < 0
552 || profit > lra_reg_info[regno].preferred_hard_regno_profit2)
554 lra_reg_info[regno].preferred_hard_regno2 = hard_regno;
555 lra_reg_info[regno].preferred_hard_regno_profit2 = profit;
557 else
558 return;
559 /* Keep the 1st hard regno as more profitable. */
560 if (lra_reg_info[regno].preferred_hard_regno1 >= 0
561 && lra_reg_info[regno].preferred_hard_regno2 >= 0
562 && (lra_reg_info[regno].preferred_hard_regno_profit2
563 > lra_reg_info[regno].preferred_hard_regno_profit1))
565 std::swap (lra_reg_info[regno].preferred_hard_regno1,
566 lra_reg_info[regno].preferred_hard_regno2);
567 std::swap (lra_reg_info[regno].preferred_hard_regno_profit1,
568 lra_reg_info[regno].preferred_hard_regno_profit2);
570 if (lra_dump_file != NULL)
572 if ((hard_regno = lra_reg_info[regno].preferred_hard_regno1) >= 0)
573 fprintf (lra_dump_file,
574 " Hard reg %d is preferable by r%d with profit %d\n",
575 hard_regno, regno,
576 lra_reg_info[regno].preferred_hard_regno_profit1);
577 if ((hard_regno = lra_reg_info[regno].preferred_hard_regno2) >= 0)
578 fprintf (lra_dump_file,
579 " Hard reg %d is preferable by r%d with profit %d\n",
580 hard_regno, regno,
581 lra_reg_info[regno].preferred_hard_regno_profit2);
585 /* Check whether REGNO lives through calls and setjmps and clear
586 the corresponding bits in PSEUDOS_LIVE_THROUGH_CALLS and
587 PSEUDOS_LIVE_THROUGH_SETJUMPS. All calls in the region described
588 by PSEUDOS_LIVE_THROUGH_CALLS have the given ABI. */
590 static inline void
591 check_pseudos_live_through_calls (int regno, const function_abi &abi)
593 if (! sparseset_bit_p (pseudos_live_through_calls, regno))
594 return;
596 machine_mode mode = PSEUDO_REGNO_MODE (regno);
598 sparseset_clear_bit (pseudos_live_through_calls, regno);
599 lra_reg_info[regno].conflict_hard_regs |= abi.mode_clobbers (mode);
600 if (! sparseset_bit_p (pseudos_live_through_setjumps, regno))
601 return;
602 sparseset_clear_bit (pseudos_live_through_setjumps, regno);
603 /* Don't allocate pseudos that cross setjmps or any call, if this
604 function receives a nonlocal goto. */
605 SET_HARD_REG_SET (lra_reg_info[regno].conflict_hard_regs);
608 /* Return true if insn REG is an early clobber operand in alternative
609 NALT. Negative NALT means that we don't know the current insn
610 alternative. So assume the worst. */
611 static inline bool
612 reg_early_clobber_p (const struct lra_insn_reg *reg, int n_alt)
614 return (n_alt == LRA_UNKNOWN_ALT
615 ? reg->early_clobber_alts != 0
616 : (n_alt != LRA_NON_CLOBBERED_ALT
617 && TEST_BIT (reg->early_clobber_alts, n_alt)));
620 /* Clear pseudo REGNO in SET or all hard registers of REGNO in MODE in SET. */
621 static void
622 clear_sparseset_regnos (sparseset set, int regno, enum machine_mode mode)
624 if (regno >= FIRST_PSEUDO_REGISTER)
626 sparseset_clear_bit (dead_set, regno);
627 return;
629 for (int last = end_hard_regno (mode, regno); regno < last; regno++)
630 sparseset_clear_bit (set, regno);
633 /* Return true if pseudo REGNO is in SET or all hard registers of REGNO in MODE
634 are in SET. */
635 static bool
636 regnos_in_sparseset_p (sparseset set, int regno, enum machine_mode mode)
638 if (regno >= FIRST_PSEUDO_REGISTER)
639 return sparseset_bit_p (dead_set, regno);
640 for (int last = end_hard_regno (mode, regno); regno < last; regno++)
641 if (!sparseset_bit_p (set, regno))
642 return false;
643 return true;
646 /* Process insns of the basic block BB to update pseudo live ranges,
647 pseudo hard register conflicts, and insn notes. We do it on
648 backward scan of BB insns. CURR_POINT is the program point where
649 BB ends. The function updates this counter and returns in
650 CURR_POINT the program point where BB starts. The function also
651 does local live info updates and can delete the dead insns if
652 DEAD_INSN_P. It returns true if pseudo live info was
653 changed at the BB start. */
654 static bool
655 process_bb_lives (basic_block bb, int &curr_point, bool dead_insn_p)
657 int i, regno, freq;
658 unsigned int j;
659 bitmap_iterator bi;
660 bitmap reg_live_out;
661 unsigned int px;
662 rtx_insn *next;
663 rtx link, *link_loc;
664 bool need_curr_point_incr;
665 /* Only has a meaningful value once we've seen a call. */
666 function_abi last_call_abi = default_function_abi;
668 reg_live_out = df_get_live_out (bb);
669 sparseset_clear (pseudos_live);
670 sparseset_clear (pseudos_live_through_calls);
671 sparseset_clear (pseudos_live_through_setjumps);
672 REG_SET_TO_HARD_REG_SET (hard_regs_live, reg_live_out);
673 hard_regs_live &= ~eliminable_regset;
674 EXECUTE_IF_SET_IN_BITMAP (reg_live_out, FIRST_PSEUDO_REGISTER, j, bi)
676 update_pseudo_point (j, curr_point, USE_POINT);
677 mark_pseudo_live (j);
680 bb_gen_pseudos = &get_bb_data (bb)->gen_pseudos;
681 bb_killed_pseudos = &get_bb_data (bb)->killed_pseudos;
682 bitmap_clear (bb_gen_pseudos);
683 bitmap_clear (bb_killed_pseudos);
684 freq = REG_FREQ_FROM_BB (bb);
686 if (lra_dump_file != NULL)
687 fprintf (lra_dump_file, " BB %d\n", bb->index);
689 /* Scan the code of this basic block, noting which pseudos and hard
690 regs are born or die.
692 Note that this loop treats uninitialized values as live until the
693 beginning of the block. For example, if an instruction uses
694 (reg:DI foo), and only (subreg:SI (reg:DI foo) 0) is ever set,
695 FOO will remain live until the beginning of the block. Likewise
696 if FOO is not set at all. This is unnecessarily pessimistic, but
697 it probably doesn't matter much in practice. */
698 FOR_BB_INSNS_REVERSE_SAFE (bb, curr_insn, next)
700 bool call_p;
701 int n_alt, dst_regno, src_regno;
702 rtx set;
703 struct lra_insn_reg *reg;
705 if (!NONDEBUG_INSN_P (curr_insn))
706 continue;
708 curr_id = lra_get_insn_recog_data (curr_insn);
709 curr_static_id = curr_id->insn_static_data;
710 n_alt = curr_id->used_insn_alternative;
711 if (lra_dump_file != NULL)
712 fprintf (lra_dump_file, " Insn %u: point = %d, n_alt = %d\n",
713 INSN_UID (curr_insn), curr_point, n_alt);
715 set = single_set (curr_insn);
717 if (dead_insn_p && set != NULL_RTX
718 && REG_P (SET_DEST (set)) && !HARD_REGISTER_P (SET_DEST (set))
719 && find_reg_note (curr_insn, REG_EH_REGION, NULL_RTX) == NULL_RTX
720 && ! may_trap_p (PATTERN (curr_insn))
721 /* Don't do premature remove of pic offset pseudo as we can
722 start to use it after some reload generation. */
723 && (pic_offset_table_rtx == NULL_RTX
724 || pic_offset_table_rtx != SET_DEST (set)))
726 bool remove_p = true;
728 for (reg = curr_id->regs; reg != NULL; reg = reg->next)
729 if (reg->type != OP_IN
730 && (reg->regno < FIRST_PSEUDO_REGISTER
731 ? TEST_HARD_REG_BIT (hard_regs_live, reg->regno)
732 : sparseset_bit_p (pseudos_live, reg->regno)))
734 remove_p = false;
735 break;
737 for (reg = curr_static_id->hard_regs; reg != NULL; reg = reg->next)
738 if (reg->type != OP_IN)
740 remove_p = false;
741 break;
744 if (remove_p && ! volatile_refs_p (PATTERN (curr_insn)))
746 dst_regno = REGNO (SET_DEST (set));
747 if (lra_dump_file != NULL)
748 fprintf (lra_dump_file, " Deleting dead insn %u\n",
749 INSN_UID (curr_insn));
750 lra_set_insn_deleted (curr_insn);
751 if (lra_reg_info[dst_regno].nrefs == 0)
753 /* There might be some debug insns with the pseudo. */
754 unsigned int uid;
755 rtx_insn *insn;
757 bitmap_copy (&temp_bitmap, &lra_reg_info[dst_regno].insn_bitmap);
758 EXECUTE_IF_SET_IN_BITMAP (&temp_bitmap, 0, uid, bi)
760 insn = lra_insn_recog_data[uid]->insn;
761 lra_substitute_pseudo_within_insn (insn, dst_regno,
762 SET_SRC (set), true);
763 lra_update_insn_regno_info (insn);
766 continue;
770 /* Update max ref width and hard reg usage. */
771 for (reg = curr_id->regs; reg != NULL; reg = reg->next)
773 int regno = reg->regno;
775 lra_update_biggest_mode (regno, reg->biggest_mode);
776 if (HARD_REGISTER_NUM_P (regno))
777 lra_hard_reg_usage[regno] += freq;
780 call_p = CALL_P (curr_insn);
782 /* If we have a simple register copy and the source reg is live after
783 this instruction, then remove the source reg from the live set so
784 that it will not conflict with the destination reg. */
785 rtx ignore_reg = non_conflicting_reg_copy_p (curr_insn);
786 if (ignore_reg != NULL_RTX)
788 int ignore_regno = REGNO (ignore_reg);
789 if (HARD_REGISTER_NUM_P (ignore_regno)
790 && TEST_HARD_REG_BIT (hard_regs_live, ignore_regno))
791 CLEAR_HARD_REG_BIT (hard_regs_live, ignore_regno);
792 else if (!HARD_REGISTER_NUM_P (ignore_regno)
793 && sparseset_bit_p (pseudos_live, ignore_regno))
794 sparseset_clear_bit (pseudos_live, ignore_regno);
795 else
796 /* We don't need any special handling of the source reg if
797 it is dead after this instruction. */
798 ignore_reg = NULL_RTX;
801 src_regno = (set != NULL_RTX && REG_P (SET_SRC (set))
802 ? REGNO (SET_SRC (set)) : -1);
803 dst_regno = (set != NULL_RTX && REG_P (SET_DEST (set))
804 ? REGNO (SET_DEST (set)) : -1);
805 if (complete_info_p
806 && src_regno >= 0 && dst_regno >= 0
807 /* Check that source regno does not conflict with
808 destination regno to exclude most impossible
809 preferences. */
810 && (((!HARD_REGISTER_NUM_P (src_regno)
811 && (! sparseset_bit_p (pseudos_live, src_regno)
812 || (!HARD_REGISTER_NUM_P (dst_regno)
813 && lra_reg_val_equal_p (src_regno,
814 lra_reg_info[dst_regno].val,
815 lra_reg_info[dst_regno].offset))))
816 || (HARD_REGISTER_NUM_P (src_regno)
817 && ! TEST_HARD_REG_BIT (hard_regs_live, src_regno)))
818 /* It might be 'inheritance pseudo <- reload pseudo'. */
819 || (src_regno >= lra_constraint_new_regno_start
820 && dst_regno >= lra_constraint_new_regno_start
821 /* Remember to skip special cases where src/dest regnos are
822 the same, e.g. insn SET pattern has matching constraints
823 like =r,0. */
824 && src_regno != dst_regno)))
826 int hard_regno = -1, regno = -1;
828 if (dst_regno >= lra_constraint_new_regno_start
829 && src_regno >= lra_constraint_new_regno_start)
831 /* It might be still an original (non-reload) insn with
832 one unused output and a constraint requiring to use
833 the same reg for input/output operands. In this case
834 dst_regno and src_regno have the same value, we don't
835 need a misleading copy for this case. */
836 if (dst_regno != src_regno)
837 lra_create_copy (dst_regno, src_regno, freq);
839 else if (dst_regno >= lra_constraint_new_regno_start)
841 if (!HARD_REGISTER_NUM_P (hard_regno = src_regno))
842 hard_regno = reg_renumber[src_regno];
843 regno = dst_regno;
845 else if (src_regno >= lra_constraint_new_regno_start)
847 if (!HARD_REGISTER_NUM_P (hard_regno = dst_regno))
848 hard_regno = reg_renumber[dst_regno];
849 regno = src_regno;
851 if (regno >= 0 && hard_regno >= 0)
852 lra_setup_reload_pseudo_preferenced_hard_reg
853 (regno, hard_regno, freq);
856 sparseset_clear (start_living);
858 /* Mark each defined value as live. We need to do this for
859 unused values because they still conflict with quantities
860 that are live at the time of the definition. */
861 for (reg = curr_id->regs; reg != NULL; reg = reg->next)
862 if (reg->type != OP_IN)
864 update_pseudo_point (reg->regno, curr_point, USE_POINT);
865 mark_regno_live (reg->regno, reg->biggest_mode);
866 /* ??? Should be a no-op for unused registers. */
867 check_pseudos_live_through_calls (reg->regno, last_call_abi);
870 for (reg = curr_static_id->hard_regs; reg != NULL; reg = reg->next)
871 if (reg->type != OP_IN)
872 make_hard_regno_live (reg->regno);
874 if (curr_id->arg_hard_regs != NULL)
875 for (i = 0; (regno = curr_id->arg_hard_regs[i]) >= 0; i++)
876 if (!HARD_REGISTER_NUM_P (regno))
877 /* It is a clobber. */
878 make_hard_regno_live (regno - FIRST_PSEUDO_REGISTER);
880 sparseset_copy (unused_set, start_living);
882 sparseset_clear (start_dying);
884 /* See which defined values die here. */
885 for (reg = curr_id->regs; reg != NULL; reg = reg->next)
886 if (reg->type != OP_IN
887 && ! reg_early_clobber_p (reg, n_alt) && ! reg->subreg_p)
889 if (reg->type == OP_OUT)
890 update_pseudo_point (reg->regno, curr_point, DEF_POINT);
891 mark_regno_dead (reg->regno, reg->biggest_mode);
894 for (reg = curr_static_id->hard_regs; reg != NULL; reg = reg->next)
895 if (reg->type != OP_IN
896 && ! reg_early_clobber_p (reg, n_alt) && ! reg->subreg_p)
897 make_hard_regno_dead (reg->regno);
899 if (curr_id->arg_hard_regs != NULL)
900 for (i = 0; (regno = curr_id->arg_hard_regs[i]) >= 0; i++)
901 if (!HARD_REGISTER_NUM_P (regno))
902 /* It is a clobber. */
903 make_hard_regno_dead (regno - FIRST_PSEUDO_REGISTER);
905 if (call_p)
907 function_abi call_abi = insn_callee_abi (curr_insn);
909 if (last_call_abi != call_abi)
910 EXECUTE_IF_SET_IN_SPARSESET (pseudos_live, j)
911 check_pseudos_live_through_calls (j, last_call_abi);
913 last_call_abi = call_abi;
915 sparseset_ior (pseudos_live_through_calls,
916 pseudos_live_through_calls, pseudos_live);
917 if (cfun->has_nonlocal_label
918 || (!targetm.setjmp_preserves_nonvolatile_regs_p ()
919 && (find_reg_note (curr_insn, REG_SETJMP, NULL_RTX)
920 != NULL_RTX)))
921 sparseset_ior (pseudos_live_through_setjumps,
922 pseudos_live_through_setjumps, pseudos_live);
925 /* Increment the current program point if we must. */
926 if (sparseset_contains_pseudos_p (unused_set)
927 || sparseset_contains_pseudos_p (start_dying))
928 next_program_point (curr_point, freq);
930 /* If we removed the source reg from a simple register copy from the
931 live set above, then add it back now so we don't accidentally add
932 it to the start_living set below. */
933 if (ignore_reg != NULL_RTX)
935 int ignore_regno = REGNO (ignore_reg);
936 if (HARD_REGISTER_NUM_P (ignore_regno))
937 SET_HARD_REG_BIT (hard_regs_live, ignore_regno);
938 else
939 sparseset_set_bit (pseudos_live, ignore_regno);
942 sparseset_clear (start_living);
944 /* Mark each used value as live. */
945 for (reg = curr_id->regs; reg != NULL; reg = reg->next)
946 if (reg->type != OP_OUT)
948 if (reg->type == OP_IN)
949 update_pseudo_point (reg->regno, curr_point, USE_POINT);
950 mark_regno_live (reg->regno, reg->biggest_mode);
951 check_pseudos_live_through_calls (reg->regno, last_call_abi);
954 for (reg = curr_static_id->hard_regs; reg != NULL; reg = reg->next)
955 if (reg->type != OP_OUT)
956 make_hard_regno_live (reg->regno);
958 if (curr_id->arg_hard_regs != NULL)
959 /* Make argument hard registers live. */
960 for (i = 0; (regno = curr_id->arg_hard_regs[i]) >= 0; i++)
961 if (HARD_REGISTER_NUM_P (regno))
962 make_hard_regno_live (regno);
964 sparseset_and_compl (dead_set, start_living, start_dying);
966 sparseset_clear (start_dying);
968 /* Mark early clobber outputs dead. */
969 for (reg = curr_id->regs; reg != NULL; reg = reg->next)
970 if (reg->type != OP_IN
971 && reg_early_clobber_p (reg, n_alt) && ! reg->subreg_p)
973 if (reg->type == OP_OUT)
974 update_pseudo_point (reg->regno, curr_point, DEF_POINT);
975 mark_regno_dead (reg->regno, reg->biggest_mode);
977 /* We're done processing inputs, so make sure early clobber
978 operands that are both inputs and outputs are still live. */
979 if (reg->type == OP_INOUT)
980 mark_regno_live (reg->regno, reg->biggest_mode);
983 for (reg = curr_static_id->hard_regs; reg != NULL; reg = reg->next)
984 if (reg->type != OP_IN
985 && reg_early_clobber_p (reg, n_alt) && ! reg->subreg_p)
987 struct lra_insn_reg *reg2;
989 /* We can have early clobbered non-operand hard reg and
990 the same hard reg as an insn input. Don't make hard
991 reg dead before the insns. */
992 for (reg2 = curr_static_id->hard_regs; reg2 != NULL; reg2 = reg2->next)
993 if (reg2->type != OP_OUT && reg2->regno == reg->regno)
994 break;
995 if (reg2 != NULL)
996 continue;
998 HARD_REG_SET clobbered_regset;
999 CLEAR_HARD_REG_SET (clobbered_regset);
1000 SET_HARD_REG_BIT (clobbered_regset, reg->regno);
1002 for (reg2 = curr_id->regs; reg2 != NULL; reg2 = reg2->next)
1003 if (reg2->type != OP_OUT && reg2->regno < FIRST_PSEUDO_REGISTER
1004 && ira_hard_reg_set_intersection_p (reg2->regno,
1005 reg2->biggest_mode,
1006 clobbered_regset))
1007 break;
1008 if (reg2 == NULL)
1010 make_hard_regno_dead (reg->regno);
1012 else
1014 EXECUTE_IF_SET_IN_SPARSESET (pseudos_live, j)
1015 SET_HARD_REG_BIT (lra_reg_info[j].conflict_hard_regs,
1016 reg->regno);
1020 /* Increment the current program point if we must. */
1021 if (sparseset_contains_pseudos_p (dead_set)
1022 || sparseset_contains_pseudos_p (start_dying))
1023 next_program_point (curr_point, freq);
1025 /* Update notes. */
1026 for (link_loc = &REG_NOTES (curr_insn); (link = *link_loc) != NULL_RTX;)
1028 if (REG_NOTE_KIND (link) != REG_DEAD
1029 && REG_NOTE_KIND (link) != REG_UNUSED)
1031 else if (REG_P (XEXP (link, 0)))
1033 rtx note_reg = XEXP (link, 0);
1034 int note_regno = REGNO (note_reg);
1036 if ((REG_NOTE_KIND (link) == REG_DEAD
1037 && ! regnos_in_sparseset_p (dead_set, note_regno,
1038 GET_MODE (note_reg)))
1039 || (REG_NOTE_KIND (link) == REG_UNUSED
1040 && ! regnos_in_sparseset_p (unused_set, note_regno,
1041 GET_MODE (note_reg))))
1043 *link_loc = XEXP (link, 1);
1044 continue;
1046 if (REG_NOTE_KIND (link) == REG_DEAD)
1047 clear_sparseset_regnos (dead_set, note_regno,
1048 GET_MODE (note_reg));
1049 else if (REG_NOTE_KIND (link) == REG_UNUSED)
1050 clear_sparseset_regnos (unused_set, note_regno,
1051 GET_MODE (note_reg));
1053 link_loc = &XEXP (link, 1);
1055 EXECUTE_IF_SET_IN_SPARSESET (dead_set, j)
1056 add_reg_note (curr_insn, REG_DEAD, regno_reg_rtx[j]);
1057 EXECUTE_IF_SET_IN_SPARSESET (unused_set, j)
1058 add_reg_note (curr_insn, REG_UNUSED, regno_reg_rtx[j]);
1061 if (bb_has_eh_pred (bb))
1062 /* Any pseudos that are currently live conflict with the eh_return
1063 data registers. For liveness purposes, these registers are set
1064 by artificial definitions at the start of the BB, so are not
1065 actually live on entry. */
1066 for (j = 0; ; ++j)
1068 unsigned int regno = EH_RETURN_DATA_REGNO (j);
1070 if (regno == INVALID_REGNUM)
1071 break;
1073 make_hard_regno_live (regno);
1074 make_hard_regno_dead (regno);
1077 /* Pseudos can't go in stack regs at the start of a basic block that
1078 is reached by an abnormal edge. Likewise for registers that are at
1079 least partly call clobbered, because caller-save, fixup_abnormal_edges
1080 and possibly the table driven EH machinery are not quite ready to
1081 handle such pseudos live across such edges. */
1082 if (bb_has_abnormal_pred (bb))
1084 HARD_REG_SET clobbers;
1086 CLEAR_HARD_REG_SET (clobbers);
1087 #ifdef STACK_REGS
1088 EXECUTE_IF_SET_IN_SPARSESET (pseudos_live, px)
1089 lra_reg_info[px].no_stack_p = true;
1090 for (px = FIRST_STACK_REG; px <= LAST_STACK_REG; px++)
1091 SET_HARD_REG_BIT (clobbers, px);
1092 #endif
1093 /* No need to record conflicts for call clobbered regs if we
1094 have nonlocal labels around, as we don't ever try to
1095 allocate such regs in this case. */
1096 if (!cfun->has_nonlocal_label
1097 && has_abnormal_call_or_eh_pred_edge_p (bb))
1098 for (px = 0; HARD_REGISTER_NUM_P (px); px++)
1099 if (eh_edge_abi.clobbers_at_least_part_of_reg_p (px)
1100 #ifdef REAL_PIC_OFFSET_TABLE_REGNUM
1101 /* We should create a conflict of PIC pseudo with PIC
1102 hard reg as PIC hard reg can have a wrong value after
1103 jump described by the abnormal edge. In this case we
1104 cannot allocate PIC hard reg to PIC pseudo as PIC
1105 pseudo will also have a wrong value. */
1106 || (px == REAL_PIC_OFFSET_TABLE_REGNUM
1107 && pic_offset_table_rtx != NULL_RTX
1108 && !HARD_REGISTER_P (pic_offset_table_rtx))
1109 #endif
1111 SET_HARD_REG_BIT (clobbers, px);
1113 clobbers &= ~hard_regs_live;
1114 for (px = 0; HARD_REGISTER_NUM_P (px); px++)
1115 if (TEST_HARD_REG_BIT (clobbers, px))
1117 make_hard_regno_live (px);
1118 make_hard_regno_dead (px);
1122 bool live_change_p = false;
1123 /* Check if bb border live info was changed. */
1124 unsigned int live_pseudos_num = 0;
1125 EXECUTE_IF_SET_IN_BITMAP (df_get_live_in (bb),
1126 FIRST_PSEUDO_REGISTER, j, bi)
1128 live_pseudos_num++;
1129 if (! sparseset_bit_p (pseudos_live, j))
1131 live_change_p = true;
1132 if (lra_dump_file != NULL)
1133 fprintf (lra_dump_file,
1134 " r%d is removed as live at bb%d start\n", j, bb->index);
1135 break;
1138 if (! live_change_p
1139 && sparseset_cardinality (pseudos_live) != live_pseudos_num)
1141 live_change_p = true;
1142 if (lra_dump_file != NULL)
1143 EXECUTE_IF_SET_IN_SPARSESET (pseudos_live, j)
1144 if (! bitmap_bit_p (df_get_live_in (bb), j))
1145 fprintf (lra_dump_file,
1146 " r%d is added to live at bb%d start\n", j, bb->index);
1148 /* See if we'll need an increment at the end of this basic block.
1149 An increment is needed if the PSEUDOS_LIVE set is not empty,
1150 to make sure the finish points are set up correctly. */
1151 need_curr_point_incr = (sparseset_cardinality (pseudos_live) > 0);
1153 EXECUTE_IF_SET_IN_SPARSESET (pseudos_live, i)
1155 update_pseudo_point (i, curr_point, DEF_POINT);
1156 mark_pseudo_dead (i);
1159 EXECUTE_IF_SET_IN_BITMAP (df_get_live_in (bb), FIRST_PSEUDO_REGISTER, j, bi)
1161 if (sparseset_cardinality (pseudos_live_through_calls) == 0)
1162 break;
1163 if (sparseset_bit_p (pseudos_live_through_calls, j))
1164 check_pseudos_live_through_calls (j, last_call_abi);
1167 for (i = 0; HARD_REGISTER_NUM_P (i); ++i)
1169 if (!TEST_HARD_REG_BIT (hard_regs_live, i))
1170 continue;
1172 if (!TEST_HARD_REG_BIT (hard_regs_spilled_into, i))
1173 continue;
1175 if (bitmap_bit_p (df_get_live_in (bb), i))
1176 continue;
1178 live_change_p = true;
1179 if (lra_dump_file)
1180 fprintf (lra_dump_file,
1181 " hard reg r%d is added to live at bb%d start\n", i,
1182 bb->index);
1183 bitmap_set_bit (df_get_live_in (bb), i);
1186 if (need_curr_point_incr)
1187 next_program_point (curr_point, freq);
1189 return live_change_p;
1192 /* Compress pseudo live ranges by removing program points where
1193 nothing happens. Complexity of many algorithms in LRA is linear
1194 function of program points number. To speed up the code we try to
1195 minimize the number of the program points here. */
1196 static void
1197 remove_some_program_points_and_update_live_ranges (void)
1199 unsigned i;
1200 int n, max_regno;
1201 int *map;
1202 lra_live_range_t r, prev_r, next_r;
1203 sbitmap_iterator sbi;
1204 bool born_p, dead_p, prev_born_p, prev_dead_p;
1206 auto_sbitmap born (lra_live_max_point);
1207 auto_sbitmap dead (lra_live_max_point);
1208 bitmap_clear (born);
1209 bitmap_clear (dead);
1210 max_regno = max_reg_num ();
1211 for (i = FIRST_PSEUDO_REGISTER; i < (unsigned) max_regno; i++)
1213 for (r = lra_reg_info[i].live_ranges; r != NULL; r = r->next)
1215 lra_assert (r->start <= r->finish);
1216 bitmap_set_bit (born, r->start);
1217 bitmap_set_bit (dead, r->finish);
1220 auto_sbitmap born_or_dead (lra_live_max_point);
1221 bitmap_ior (born_or_dead, born, dead);
1222 map = XCNEWVEC (int, lra_live_max_point);
1223 n = -1;
1224 prev_born_p = prev_dead_p = false;
1225 EXECUTE_IF_SET_IN_BITMAP (born_or_dead, 0, i, sbi)
1227 born_p = bitmap_bit_p (born, i);
1228 dead_p = bitmap_bit_p (dead, i);
1229 if ((prev_born_p && ! prev_dead_p && born_p && ! dead_p)
1230 || (prev_dead_p && ! prev_born_p && dead_p && ! born_p))
1232 map[i] = n;
1233 lra_point_freq[n] = MAX (lra_point_freq[n], lra_point_freq[i]);
1235 else
1237 map[i] = ++n;
1238 lra_point_freq[n] = lra_point_freq[i];
1240 prev_born_p = born_p;
1241 prev_dead_p = dead_p;
1243 n++;
1244 if (lra_dump_file != NULL)
1245 fprintf (lra_dump_file, "Compressing live ranges: from %d to %d - %d%%\n",
1246 lra_live_max_point, n,
1247 lra_live_max_point ? 100 * n / lra_live_max_point : 100);
1248 if (n < lra_live_max_point)
1250 lra_live_max_point = n;
1251 for (i = FIRST_PSEUDO_REGISTER; i < (unsigned) max_regno; i++)
1253 for (prev_r = NULL, r = lra_reg_info[i].live_ranges;
1254 r != NULL;
1255 r = next_r)
1257 next_r = r->next;
1258 r->start = map[r->start];
1259 r->finish = map[r->finish];
1260 if (prev_r == NULL || prev_r->start > r->finish + 1)
1262 prev_r = r;
1263 continue;
1265 prev_r->start = r->start;
1266 prev_r->next = next_r;
1267 lra_live_range_pool.remove (r);
1271 free (map);
1274 /* Print live ranges R to file F. */
1275 void
1276 lra_print_live_range_list (FILE *f, lra_live_range_t r)
1278 for (; r != NULL; r = r->next)
1279 fprintf (f, " [%d..%d]", r->start, r->finish);
1280 fprintf (f, "\n");
1283 DEBUG_FUNCTION void
1284 debug (lra_live_range &ref)
1286 lra_print_live_range_list (stderr, &ref);
1289 DEBUG_FUNCTION void
1290 debug (lra_live_range *ptr)
1292 if (ptr)
1293 debug (*ptr);
1294 else
1295 fprintf (stderr, "<nil>\n");
1298 /* Print live ranges R to stderr. */
1299 void
1300 lra_debug_live_range_list (lra_live_range_t r)
1302 lra_print_live_range_list (stderr, r);
1305 /* Print live ranges of pseudo REGNO to file F. */
1306 static void
1307 print_pseudo_live_ranges (FILE *f, int regno)
1309 if (lra_reg_info[regno].live_ranges == NULL)
1310 return;
1311 fprintf (f, " r%d:", regno);
1312 lra_print_live_range_list (f, lra_reg_info[regno].live_ranges);
1315 /* Print live ranges of pseudo REGNO to stderr. */
1316 void
1317 lra_debug_pseudo_live_ranges (int regno)
1319 print_pseudo_live_ranges (stderr, regno);
1322 /* Print live ranges of all pseudos to file F. */
1323 static void
1324 print_live_ranges (FILE *f)
1326 int i, max_regno;
1328 max_regno = max_reg_num ();
1329 for (i = FIRST_PSEUDO_REGISTER; i < max_regno; i++)
1330 print_pseudo_live_ranges (f, i);
1333 /* Print live ranges of all pseudos to stderr. */
1334 void
1335 lra_debug_live_ranges (void)
1337 print_live_ranges (stderr);
1340 /* Compress pseudo live ranges. */
1341 static void
1342 compress_live_ranges (void)
1344 remove_some_program_points_and_update_live_ranges ();
1345 if (lra_dump_file != NULL)
1347 fprintf (lra_dump_file, "Ranges after the compression:\n");
1348 print_live_ranges (lra_dump_file);
1354 /* The number of the current live range pass. */
1355 int lra_live_range_iter;
1357 /* The function creates live ranges only for memory pseudos (or for
1358 all ones if ALL_P), set up CONFLICT_HARD_REGS for the pseudos. It
1359 also does dead insn elimination if DEAD_INSN_P and global live
1360 analysis only for pseudos and only if the pseudo live info was
1361 changed on a BB border. Return TRUE if the live info was
1362 changed. */
1363 static bool
1364 lra_create_live_ranges_1 (bool all_p, bool dead_insn_p)
1366 basic_block bb;
1367 int i, hard_regno, max_regno = max_reg_num ();
1368 int curr_point;
1369 bool bb_live_change_p, have_referenced_pseudos = false;
1371 timevar_push (TV_LRA_CREATE_LIVE_RANGES);
1373 complete_info_p = all_p;
1374 if (lra_dump_file != NULL)
1375 fprintf (lra_dump_file,
1376 "\n********** Pseudo live ranges #%d: **********\n\n",
1377 ++lra_live_range_iter);
1378 memset (lra_hard_reg_usage, 0, sizeof (lra_hard_reg_usage));
1379 for (i = 0; i < max_regno; i++)
1381 lra_reg_info[i].live_ranges = NULL;
1382 CLEAR_HARD_REG_SET (lra_reg_info[i].conflict_hard_regs);
1383 lra_reg_info[i].preferred_hard_regno1 = -1;
1384 lra_reg_info[i].preferred_hard_regno2 = -1;
1385 lra_reg_info[i].preferred_hard_regno_profit1 = 0;
1386 lra_reg_info[i].preferred_hard_regno_profit2 = 0;
1387 #ifdef STACK_REGS
1388 lra_reg_info[i].no_stack_p = false;
1389 #endif
1390 /* The biggest mode is already set but its value might be to
1391 conservative because of recent transformation. Here in this
1392 file we recalculate it again as it costs practically
1393 nothing. */
1394 if (!HARD_REGISTER_NUM_P (i) && regno_reg_rtx[i] != NULL_RTX)
1395 lra_reg_info[i].biggest_mode = GET_MODE (regno_reg_rtx[i]);
1396 else
1397 lra_reg_info[i].biggest_mode = VOIDmode;
1398 if (!HARD_REGISTER_NUM_P (i)
1399 && lra_reg_info[i].nrefs != 0)
1401 if ((hard_regno = reg_renumber[i]) >= 0)
1402 lra_hard_reg_usage[hard_regno] += lra_reg_info[i].freq;
1403 have_referenced_pseudos = true;
1406 lra_free_copies ();
1408 /* Under some circumstances, we can have functions without pseudo
1409 registers. For such functions, lra_live_max_point will be 0,
1410 see e.g. PR55604, and there's nothing more to do for us here. */
1411 if (! have_referenced_pseudos)
1413 timevar_pop (TV_LRA_CREATE_LIVE_RANGES);
1414 return false;
1417 pseudos_live = sparseset_alloc (max_regno);
1418 pseudos_live_through_calls = sparseset_alloc (max_regno);
1419 pseudos_live_through_setjumps = sparseset_alloc (max_regno);
1420 start_living = sparseset_alloc (max_regno);
1421 start_dying = sparseset_alloc (max_regno);
1422 dead_set = sparseset_alloc (max_regno);
1423 unused_set = sparseset_alloc (max_regno);
1424 curr_point = 0;
1425 unsigned new_length = get_max_uid () * 2;
1426 point_freq_vec.truncate (0);
1427 point_freq_vec.reserve_exact (new_length);
1428 lra_point_freq = point_freq_vec.address ();
1429 int *rpo = XNEWVEC (int, n_basic_blocks_for_fn (cfun));
1430 int n = inverted_rev_post_order_compute (cfun, rpo);
1431 lra_assert (n == n_basic_blocks_for_fn (cfun));
1432 bb_live_change_p = false;
1433 for (i = 0; i < n; ++i)
1435 bb = BASIC_BLOCK_FOR_FN (cfun, rpo[i]);
1436 if (bb == EXIT_BLOCK_PTR_FOR_FN (cfun) || bb
1437 == ENTRY_BLOCK_PTR_FOR_FN (cfun))
1438 continue;
1439 if (process_bb_lives (bb, curr_point, dead_insn_p))
1440 bb_live_change_p = true;
1442 free (rpo);
1443 if (bb_live_change_p)
1445 /* We need to clear pseudo live info as some pseudos can
1446 disappear, e.g. pseudos with used equivalences. */
1447 FOR_EACH_BB_FN (bb, cfun)
1449 bitmap_clear_range (df_get_live_in (bb), FIRST_PSEUDO_REGISTER,
1450 max_regno - FIRST_PSEUDO_REGISTER);
1451 bitmap_clear_range (df_get_live_out (bb), FIRST_PSEUDO_REGISTER,
1452 max_regno - FIRST_PSEUDO_REGISTER);
1454 /* As we did not change CFG since LRA start we can use
1455 DF-infrastructure solver to solve live data flow problem. */
1456 for (int i = 0; HARD_REGISTER_NUM_P (i); ++i)
1458 if (TEST_HARD_REG_BIT (hard_regs_spilled_into, i))
1459 bitmap_clear_bit (&all_hard_regs_bitmap, i);
1461 df_simple_dataflow
1462 (DF_BACKWARD, NULL, live_con_fun_0, live_con_fun_n,
1463 live_trans_fun, &all_blocks,
1464 df_get_postorder (DF_BACKWARD), df_get_n_blocks (DF_BACKWARD));
1465 if (lra_dump_file != NULL)
1467 fprintf (lra_dump_file,
1468 "Global pseudo live data have been updated:\n");
1469 basic_block bb;
1470 FOR_EACH_BB_FN (bb, cfun)
1472 bb_data_t bb_info = get_bb_data (bb);
1473 bitmap bb_livein = df_get_live_in (bb);
1474 bitmap bb_liveout = df_get_live_out (bb);
1476 fprintf (lra_dump_file, "\nBB %d:\n", bb->index);
1477 lra_dump_bitmap_with_title (" gen:",
1478 &bb_info->gen_pseudos, bb->index);
1479 lra_dump_bitmap_with_title (" killed:",
1480 &bb_info->killed_pseudos, bb->index);
1481 lra_dump_bitmap_with_title (" livein:", bb_livein, bb->index);
1482 lra_dump_bitmap_with_title (" liveout:", bb_liveout, bb->index);
1486 lra_live_max_point = curr_point;
1487 if (lra_dump_file != NULL)
1488 print_live_ranges (lra_dump_file);
1489 /* Clean up. */
1490 sparseset_free (unused_set);
1491 sparseset_free (dead_set);
1492 sparseset_free (start_dying);
1493 sparseset_free (start_living);
1494 sparseset_free (pseudos_live_through_calls);
1495 sparseset_free (pseudos_live_through_setjumps);
1496 sparseset_free (pseudos_live);
1497 compress_live_ranges ();
1498 timevar_pop (TV_LRA_CREATE_LIVE_RANGES);
1499 return bb_live_change_p;
1502 /* The main entry function creates live-ranges and other live info
1503 necessary for the assignment sub-pass. It uses
1504 lra_creates_live_ranges_1 -- so read comments for the
1505 function. */
1506 void
1507 lra_create_live_ranges (bool all_p, bool dead_insn_p)
1509 if (! lra_create_live_ranges_1 (all_p, dead_insn_p))
1510 return;
1511 if (lra_dump_file != NULL)
1512 fprintf (lra_dump_file, "Live info was changed -- recalculate it\n");
1513 /* Live info was changed on a bb border. It means that some info,
1514 e.g. about conflict regs, calls crossed, and live ranges may be
1515 wrong. We need this info for allocation. So recalculate it
1516 again but without removing dead insns which can change live info
1517 again. Repetitive live range calculations are expensive therefore
1518 we stop here as we already have correct info although some
1519 improvement in rare cases could be possible on this sub-pass if
1520 we do dead insn elimination again (still the improvement may
1521 happen later). */
1522 lra_clear_live_ranges ();
1523 bool res = lra_create_live_ranges_1 (all_p, false);
1524 lra_assert (! res);
1527 /* Finish all live ranges. */
1528 void
1529 lra_clear_live_ranges (void)
1531 int i;
1533 for (i = 0; i < max_reg_num (); i++)
1534 free_live_range_list (lra_reg_info[i].live_ranges);
1535 point_freq_vec.release ();
1538 /* Initialize live ranges data once per function. */
1539 void
1540 lra_live_ranges_init (void)
1542 bitmap_initialize (&temp_bitmap, &reg_obstack);
1543 initiate_live_solver ();
1546 /* Finish live ranges data once per function. */
1547 void
1548 lra_live_ranges_finish (void)
1550 finish_live_solver ();
1551 bitmap_clear (&temp_bitmap);
1552 lra_live_range_pool.release ();