* tree-ssa-loop-ivopts.c (ivopts_estimate_reg_pressure): New
[official-gcc.git] / gcc / lra-lives.c
blobe728e348215fc9f58736ac34762a37428f200ebd
1 /* Build live ranges for pseudos.
2 Copyright (C) 2010-2017 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 "recog.h"
42 #include "cfganal.h"
43 #include "sparseset.h"
44 #include "lra-int.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
56 register. */
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
85 in the insn. */
86 static sparseset start_living, start_dying;
88 /* Set of pseudos and hard regs dead and unused in the current
89 insn. */
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. */
99 static void
100 free_live_range_list (lra_live_range_t lr)
102 lra_live_range_t next;
104 while (lr != NULL)
106 next = lr->next;
107 lra_live_range_pool.remove (lr);
108 lr = next;
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 ();
117 p->regno = regno;
118 p->start = start;
119 p->finish = finish;
120 p->next = next;
121 return p;
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. */
132 lra_live_range_t
133 lra_copy_live_range_list (lra_live_range_t r)
135 lra_live_range_t p, first, *chain;
137 first = NULL;
138 for (chain = &first; r != NULL; r = r->next)
140 p = copy_live_range (r);
141 *chain = p;
142 chain = &p->next;
144 return first;
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
150 after the call. */
151 lra_live_range_t
152 lra_merge_live_ranges (lra_live_range_t r1, lra_live_range_t r2)
154 lra_live_range_t first, last;
156 if (r1 == NULL)
157 return r2;
158 if (r2 == NULL)
159 return r1;
160 for (first = last = NULL; r1 != NULL && r2 != NULL;)
162 if (r1->start < r2->start)
163 std::swap (r1, r2);
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;
170 r2 = r2->next;
171 lra_live_range_pool.remove (temp);
173 else
175 gcc_assert (r2->finish + 1 < r1->start);
176 /* Add r1 to the result. */
177 if (first == NULL)
178 first = last = r1;
179 else
181 last->next = r1;
182 last = r1;
184 r1 = r1->next;
187 if (r1 != NULL)
189 if (first == NULL)
190 first = r1;
191 else
192 last->next = r1;
194 else
196 lra_assert (r2 != NULL);
197 if (first == NULL)
198 first = r2;
199 else
200 last->next = r2;
202 return first;
205 /* Return TRUE if live ranges R1 and R2 intersect. */
206 bool
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)
213 r1 = r1->next;
214 else if (r2->start > r1->finish)
215 r2 = r2->next;
216 else
217 return true;
219 return false;
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
226 true. */
227 static void
228 make_hard_regno_born (int regno, bool check_pic_pseudo_p ATTRIBUTE_UNUSED)
230 unsigned int i;
232 lra_assert (regno < FIRST_PSEUDO_REGISTER);
233 if (TEST_HARD_REG_BIT (hard_regs_live, regno))
234 return;
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))
243 #endif
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. */
249 static void
250 make_hard_regno_dead (int regno)
252 lra_assert (regno < FIRST_PSEUDO_REGISTER);
253 if (! TEST_HARD_REG_BIT (hard_regs_live, regno))
254 return;
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. */
262 static void
263 mark_pseudo_live (int regno, int point)
265 lra_live_range_t p;
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
281 START_DYING.
282 This finishes the current live range for the pseudo corresponding
283 to REGNO. */
284 static void
285 mark_pseudo_dead (int regno, int point)
287 lra_live_range_t p;
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);
297 p->finish = point;
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. */
308 static bool
309 mark_regno_live (int regno, machine_mode mode, int point)
311 int last;
312 bool changed = false;
314 if (regno < FIRST_PSEUDO_REGISTER)
316 for (last = regno + hard_regno_nregs[regno][mode];
317 regno < last;
318 regno++)
319 make_hard_regno_born (regno, false);
321 else
323 if (! sparseset_bit_p (pseudos_live, regno))
325 mark_pseudo_live (regno, point);
326 changed = true;
328 bitmap_set_bit (bb_gen_pseudos, regno);
330 return changed;
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. */
337 static bool
338 mark_regno_dead (int regno, machine_mode mode, int point)
340 int last;
341 bool changed = false;
343 if (regno < FIRST_PSEUDO_REGISTER)
345 for (last = regno + hard_regno_nregs[regno][mode];
346 regno < last;
347 regno++)
348 make_hard_regno_dead (regno);
350 else
352 if (sparseset_bit_p (pseudos_live, regno))
354 mark_pseudo_dead (regno, point);
355 changed = true;
357 bitmap_clear_bit (bb_gen_pseudos, regno);
358 bitmap_set_bit (bb_killed_pseudos, regno);
360 return changed;
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
371 live-analysis. */
372 struct bb_data_pseudos
374 /* Basic block about which the below data are. */
375 basic_block bb;
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
404 equation:
406 bb.livein = (bb.liveout - bb.kill) OR bb.gen
408 static bool
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. */
423 static void
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
431 following equation:
433 bb.liveout = 0 for entry block | OR (livein of successors)
435 static bool
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
451 analysis. */
452 static void
453 initiate_live_solver (void)
455 bitmap_initialize (&all_hard_regs_bitmap, &reg_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, &reg_obstack);
460 basic_block bb;
461 FOR_ALL_BB_FN (bb, cfun)
463 bb_data_t bb_info = get_bb_data (bb);
464 bb_info->bb = bb;
465 bitmap_initialize (&bb_info->killed_pseudos, &reg_obstack);
466 bitmap_initialize (&bb_info->gen_pseudos, &reg_obstack);
467 bitmap_set_bit (&all_blocks, bb->index);
471 /* Free all data needed for global pseudo live analysis. */
472 static void
473 finish_live_solver (void)
475 basic_block bb;
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);
484 free (bb_data);
485 bitmap_clear (&all_hard_regs_bitmap);
490 /* Insn currently scanned. */
491 static rtx_insn *curr_insn;
492 /* The insn data. */
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. */
501 int *lra_point_freq;
503 /* Increment the current program point POINT to the next point which has
504 execution frequency FREQ. */
505 static void
506 next_program_point (int &point, int freq)
508 point_freq_vec.safe_push (freq);
509 lra_point_freq = point_freq_vec.address ();
510 point++;
513 /* Update the preference of HARD_REGNO for pseudo REGNO by PROFIT. */
514 void
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;
534 else
535 return;
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",
552 hard_regno, regno,
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",
557 hard_regno, regno,
558 lra_reg_info[regno].preferred_hard_regno_profit2);
562 /* Check that REGNO living through calls and setjumps, set up conflict
563 regs using LAST_CALL_USED_REG_SET, and clear corresponding bits in
564 PSEUDOS_LIVE_THROUGH_CALLS and PSEUDOS_LIVE_THROUGH_SETJUMPS. */
565 static inline void
566 check_pseudos_live_through_calls (int regno,
567 HARD_REG_SET last_call_used_reg_set)
569 int hr;
571 if (! sparseset_bit_p (pseudos_live_through_calls, regno))
572 return;
573 sparseset_clear_bit (pseudos_live_through_calls, regno);
574 IOR_HARD_REG_SET (lra_reg_info[regno].conflict_hard_regs,
575 last_call_used_reg_set);
577 for (hr = 0; hr < FIRST_PSEUDO_REGISTER; hr++)
578 if (HARD_REGNO_CALL_PART_CLOBBERED (hr, PSEUDO_REGNO_MODE (regno)))
579 SET_HARD_REG_BIT (lra_reg_info[regno].conflict_hard_regs, hr);
580 lra_reg_info[regno].call_p = true;
581 if (! sparseset_bit_p (pseudos_live_through_setjumps, regno))
582 return;
583 sparseset_clear_bit (pseudos_live_through_setjumps, regno);
584 /* Don't allocate pseudos that cross setjmps or any call, if this
585 function receives a nonlocal goto. */
586 SET_HARD_REG_SET (lra_reg_info[regno].conflict_hard_regs);
589 /* Return true if insn REG is an early clobber operand in alternative
590 NALT. Negative NALT means that we don't know the current insn
591 alternative. So assume the worst. */
592 static inline bool
593 reg_early_clobber_p (const struct lra_insn_reg *reg, int n_alt)
595 return (reg->early_clobber
596 && (n_alt < 0 || TEST_BIT (reg->early_clobber_alts, n_alt)));
599 /* Process insns of the basic block BB to update pseudo live ranges,
600 pseudo hard register conflicts, and insn notes. We do it on
601 backward scan of BB insns. CURR_POINT is the program point where
602 BB ends. The function updates this counter and returns in
603 CURR_POINT the program point where BB starts. The function also
604 does local live info updates and can delete the dead insns if
605 DEAD_INSN_P. It returns true if pseudo live info was
606 changed at the BB start. */
607 static bool
608 process_bb_lives (basic_block bb, int &curr_point, bool dead_insn_p)
610 int i, regno, freq;
611 unsigned int j;
612 bitmap_iterator bi;
613 bitmap reg_live_out;
614 unsigned int px;
615 rtx_insn *next;
616 rtx link, *link_loc;
617 bool need_curr_point_incr;
618 HARD_REG_SET last_call_used_reg_set;
620 reg_live_out = df_get_live_out (bb);
621 sparseset_clear (pseudos_live);
622 sparseset_clear (pseudos_live_through_calls);
623 sparseset_clear (pseudos_live_through_setjumps);
624 CLEAR_HARD_REG_SET (last_call_used_reg_set);
625 REG_SET_TO_HARD_REG_SET (hard_regs_live, reg_live_out);
626 AND_COMPL_HARD_REG_SET (hard_regs_live, eliminable_regset);
627 EXECUTE_IF_SET_IN_BITMAP (reg_live_out, FIRST_PSEUDO_REGISTER, j, bi)
628 mark_pseudo_live (j, curr_point);
630 bb_gen_pseudos = &get_bb_data (bb)->gen_pseudos;
631 bb_killed_pseudos = &get_bb_data (bb)->killed_pseudos;
632 bitmap_clear (bb_gen_pseudos);
633 bitmap_clear (bb_killed_pseudos);
634 freq = REG_FREQ_FROM_BB (bb);
636 if (lra_dump_file != NULL)
637 fprintf (lra_dump_file, " BB %d\n", bb->index);
639 /* Scan the code of this basic block, noting which pseudos and hard
640 regs are born or die.
642 Note that this loop treats uninitialized values as live until the
643 beginning of the block. For example, if an instruction uses
644 (reg:DI foo), and only (subreg:SI (reg:DI foo) 0) is ever set,
645 FOO will remain live until the beginning of the block. Likewise
646 if FOO is not set at all. This is unnecessarily pessimistic, but
647 it probably doesn't matter much in practice. */
648 FOR_BB_INSNS_REVERSE_SAFE (bb, curr_insn, next)
650 bool call_p;
651 int n_alt, dst_regno, src_regno;
652 rtx set;
653 struct lra_insn_reg *reg;
655 if (!NONDEBUG_INSN_P (curr_insn))
656 continue;
658 curr_id = lra_get_insn_recog_data (curr_insn);
659 curr_static_id = curr_id->insn_static_data;
660 n_alt = curr_id->used_insn_alternative;
661 if (lra_dump_file != NULL)
662 fprintf (lra_dump_file, " Insn %u: point = %d, n_alt = %d\n",
663 INSN_UID (curr_insn), curr_point, n_alt);
665 set = single_set (curr_insn);
667 if (dead_insn_p && set != NULL_RTX
668 && REG_P (SET_DEST (set)) && REGNO (SET_DEST (set)) >= FIRST_PSEUDO_REGISTER
669 && find_reg_note (curr_insn, REG_EH_REGION, NULL_RTX) == NULL_RTX
670 && ! may_trap_p (PATTERN (curr_insn))
671 /* Don't do premature remove of pic offset pseudo as we can
672 start to use it after some reload generation. */
673 && (pic_offset_table_rtx == NULL_RTX
674 || pic_offset_table_rtx != SET_DEST (set)))
676 bool remove_p = true;
678 for (reg = curr_id->regs; reg != NULL; reg = reg->next)
679 if (reg->type != OP_IN && sparseset_bit_p (pseudos_live, reg->regno))
681 remove_p = false;
682 break;
684 for (reg = curr_static_id->hard_regs; reg != NULL; reg = reg->next)
685 if (reg->type != OP_IN)
687 remove_p = false;
688 break;
690 if (remove_p && ! volatile_refs_p (PATTERN (curr_insn)))
692 dst_regno = REGNO (SET_DEST (set));
693 if (lra_dump_file != NULL)
694 fprintf (lra_dump_file, " Deleting dead insn %u\n",
695 INSN_UID (curr_insn));
696 lra_set_insn_deleted (curr_insn);
697 if (lra_reg_info[dst_regno].nrefs == 0)
699 /* There might be some debug insns with the pseudo. */
700 unsigned int uid;
701 rtx_insn *insn;
703 bitmap_copy (&temp_bitmap, &lra_reg_info[dst_regno].insn_bitmap);
704 EXECUTE_IF_SET_IN_BITMAP (&temp_bitmap, 0, uid, bi)
706 insn = lra_insn_recog_data[uid]->insn;
707 lra_substitute_pseudo_within_insn (insn, dst_regno,
708 SET_SRC (set), true);
709 lra_update_insn_regno_info (insn);
712 continue;
716 /* Update max ref width and hard reg usage. */
717 for (reg = curr_id->regs; reg != NULL; reg = reg->next)
719 int i, regno = reg->regno;
721 if (GET_MODE_SIZE (reg->biggest_mode)
722 > GET_MODE_SIZE (lra_reg_info[regno].biggest_mode))
723 lra_reg_info[regno].biggest_mode = reg->biggest_mode;
724 if (regno < FIRST_PSEUDO_REGISTER)
726 lra_hard_reg_usage[regno] += freq;
727 /* A hard register explicitly can be used in small mode,
728 but implicitly it can be used in natural mode as a
729 part of multi-register group. Process this case
730 here. */
731 for (i = 1; i < hard_regno_nregs[regno][reg->biggest_mode]; i++)
732 if (GET_MODE_SIZE (GET_MODE (regno_reg_rtx[regno + i]))
733 > GET_MODE_SIZE (lra_reg_info[regno + i].biggest_mode))
734 lra_reg_info[regno + i].biggest_mode
735 = GET_MODE (regno_reg_rtx[regno + i]);
739 call_p = CALL_P (curr_insn);
740 src_regno = (set != NULL_RTX && REG_P (SET_SRC (set))
741 ? REGNO (SET_SRC (set)) : -1);
742 dst_regno = (set != NULL_RTX && REG_P (SET_DEST (set))
743 ? REGNO (SET_DEST (set)) : -1);
744 if (complete_info_p
745 && src_regno >= 0 && dst_regno >= 0
746 /* Check that source regno does not conflict with
747 destination regno to exclude most impossible
748 preferences. */
749 && (((src_regno >= FIRST_PSEUDO_REGISTER
750 && (! sparseset_bit_p (pseudos_live, src_regno)
751 || (dst_regno >= FIRST_PSEUDO_REGISTER
752 && lra_reg_val_equal_p (src_regno,
753 lra_reg_info[dst_regno].val,
754 lra_reg_info[dst_regno].offset))))
755 || (src_regno < FIRST_PSEUDO_REGISTER
756 && ! TEST_HARD_REG_BIT (hard_regs_live, src_regno)))
757 /* It might be 'inheritance pseudo <- reload pseudo'. */
758 || (src_regno >= lra_constraint_new_regno_start
759 && dst_regno >= lra_constraint_new_regno_start
760 /* Remember to skip special cases where src/dest regnos are
761 the same, e.g. insn SET pattern has matching constraints
762 like =r,0. */
763 && src_regno != dst_regno)))
765 int hard_regno = -1, regno = -1;
767 if (dst_regno >= lra_constraint_new_regno_start
768 && src_regno >= lra_constraint_new_regno_start)
770 /* It might be still an original (non-reload) insn with
771 one unused output and a constraint requiring to use
772 the same reg for input/output operands. In this case
773 dst_regno and src_regno have the same value, we don't
774 need a misleading copy for this case. */
775 if (dst_regno != src_regno)
776 lra_create_copy (dst_regno, src_regno, freq);
778 else if (dst_regno >= lra_constraint_new_regno_start)
780 if ((hard_regno = src_regno) >= FIRST_PSEUDO_REGISTER)
781 hard_regno = reg_renumber[src_regno];
782 regno = dst_regno;
784 else if (src_regno >= lra_constraint_new_regno_start)
786 if ((hard_regno = dst_regno) >= FIRST_PSEUDO_REGISTER)
787 hard_regno = reg_renumber[dst_regno];
788 regno = src_regno;
790 if (regno >= 0 && hard_regno >= 0)
791 lra_setup_reload_pseudo_preferenced_hard_reg
792 (regno, hard_regno, freq);
795 sparseset_clear (start_living);
797 /* Try to avoid unnecessary program point increments, this saves
798 a lot of time in remove_some_program_points_and_update_live_ranges.
799 We only need an increment if something becomes live or dies at this
800 program point. */
801 need_curr_point_incr = false;
803 /* Mark each defined value as live. We need to do this for
804 unused values because they still conflict with quantities
805 that are live at the time of the definition. */
806 for (reg = curr_id->regs; reg != NULL; reg = reg->next)
807 if (reg->type != OP_IN)
809 need_curr_point_incr
810 |= mark_regno_live (reg->regno, reg->biggest_mode,
811 curr_point);
812 check_pseudos_live_through_calls (reg->regno,
813 last_call_used_reg_set);
816 for (reg = curr_static_id->hard_regs; reg != NULL; reg = reg->next)
817 if (reg->type != OP_IN)
818 make_hard_regno_born (reg->regno, false);
820 if (curr_id->arg_hard_regs != NULL)
821 for (i = 0; (regno = curr_id->arg_hard_regs[i]) >= 0; i++)
822 if (regno >= FIRST_PSEUDO_REGISTER)
823 /* It is a clobber. */
824 make_hard_regno_born (regno - FIRST_PSEUDO_REGISTER, false);
826 sparseset_copy (unused_set, start_living);
828 sparseset_clear (start_dying);
830 /* See which defined values die here. */
831 for (reg = curr_id->regs; reg != NULL; reg = reg->next)
832 if (reg->type == OP_OUT
833 && ! reg_early_clobber_p (reg, n_alt) && ! reg->subreg_p)
834 need_curr_point_incr
835 |= mark_regno_dead (reg->regno, reg->biggest_mode,
836 curr_point);
838 for (reg = curr_static_id->hard_regs; reg != NULL; reg = reg->next)
839 if (reg->type == OP_OUT
840 && ! reg_early_clobber_p (reg, n_alt) && ! reg->subreg_p)
841 make_hard_regno_dead (reg->regno);
843 if (curr_id->arg_hard_regs != NULL)
844 for (i = 0; (regno = curr_id->arg_hard_regs[i]) >= 0; i++)
845 if (regno >= FIRST_PSEUDO_REGISTER)
846 /* It is a clobber. */
847 make_hard_regno_dead (regno - FIRST_PSEUDO_REGISTER);
849 if (call_p)
851 if (! flag_ipa_ra)
852 COPY_HARD_REG_SET(last_call_used_reg_set, call_used_reg_set);
853 else
855 HARD_REG_SET this_call_used_reg_set;
856 get_call_reg_set_usage (curr_insn, &this_call_used_reg_set,
857 call_used_reg_set);
859 bool flush = (! hard_reg_set_empty_p (last_call_used_reg_set)
860 && ! hard_reg_set_equal_p (last_call_used_reg_set,
861 this_call_used_reg_set));
863 EXECUTE_IF_SET_IN_SPARSESET (pseudos_live, j)
865 IOR_HARD_REG_SET (lra_reg_info[j].actual_call_used_reg_set,
866 this_call_used_reg_set);
867 if (flush)
868 check_pseudos_live_through_calls
869 (j, last_call_used_reg_set);
871 COPY_HARD_REG_SET(last_call_used_reg_set, this_call_used_reg_set);
874 sparseset_ior (pseudos_live_through_calls,
875 pseudos_live_through_calls, pseudos_live);
876 if (cfun->has_nonlocal_label
877 || find_reg_note (curr_insn, REG_SETJMP,
878 NULL_RTX) != NULL_RTX)
879 sparseset_ior (pseudos_live_through_setjumps,
880 pseudos_live_through_setjumps, pseudos_live);
883 /* Increment the current program point if we must. */
884 if (need_curr_point_incr)
885 next_program_point (curr_point, freq);
887 sparseset_clear (start_living);
889 need_curr_point_incr = false;
891 /* Mark each used value as live. */
892 for (reg = curr_id->regs; reg != NULL; reg = reg->next)
893 if (reg->type == OP_IN)
895 need_curr_point_incr
896 |= mark_regno_live (reg->regno, reg->biggest_mode,
897 curr_point);
898 check_pseudos_live_through_calls (reg->regno,
899 last_call_used_reg_set);
902 for (reg = curr_static_id->hard_regs; reg != NULL; reg = reg->next)
903 if (reg->type == OP_IN)
904 make_hard_regno_born (reg->regno, false);
906 if (curr_id->arg_hard_regs != NULL)
907 /* Make argument hard registers live. Don't create conflict
908 of used REAL_PIC_OFFSET_TABLE_REGNUM and the pic pseudo. */
909 for (i = 0; (regno = curr_id->arg_hard_regs[i]) >= 0; i++)
910 if (regno < FIRST_PSEUDO_REGISTER)
911 make_hard_regno_born (regno, true);
913 sparseset_and_compl (dead_set, start_living, start_dying);
915 /* Mark early clobber outputs dead. */
916 for (reg = curr_id->regs; reg != NULL; reg = reg->next)
917 if (reg->type == OP_OUT
918 && reg_early_clobber_p (reg, n_alt) && ! reg->subreg_p)
919 need_curr_point_incr
920 |= mark_regno_dead (reg->regno, reg->biggest_mode,
921 curr_point);
923 for (reg = curr_static_id->hard_regs; reg != NULL; reg = reg->next)
924 if (reg->type == OP_OUT
925 && reg_early_clobber_p (reg, n_alt) && ! reg->subreg_p)
926 make_hard_regno_dead (reg->regno);
928 if (need_curr_point_incr)
929 next_program_point (curr_point, freq);
931 /* Update notes. */
932 for (link_loc = &REG_NOTES (curr_insn); (link = *link_loc) != NULL_RTX;)
934 if (REG_NOTE_KIND (link) != REG_DEAD
935 && REG_NOTE_KIND (link) != REG_UNUSED)
937 else if (REG_P (XEXP (link, 0)))
939 regno = REGNO (XEXP (link, 0));
940 if ((REG_NOTE_KIND (link) == REG_DEAD
941 && ! sparseset_bit_p (dead_set, regno))
942 || (REG_NOTE_KIND (link) == REG_UNUSED
943 && ! sparseset_bit_p (unused_set, regno)))
945 *link_loc = XEXP (link, 1);
946 continue;
948 if (REG_NOTE_KIND (link) == REG_DEAD)
949 sparseset_clear_bit (dead_set, regno);
950 else if (REG_NOTE_KIND (link) == REG_UNUSED)
951 sparseset_clear_bit (unused_set, regno);
953 link_loc = &XEXP (link, 1);
955 EXECUTE_IF_SET_IN_SPARSESET (dead_set, j)
956 add_reg_note (curr_insn, REG_DEAD, regno_reg_rtx[j]);
957 EXECUTE_IF_SET_IN_SPARSESET (unused_set, j)
958 add_reg_note (curr_insn, REG_UNUSED, regno_reg_rtx[j]);
961 if (bb_has_eh_pred (bb))
962 for (j = 0; ; ++j)
964 unsigned int regno = EH_RETURN_DATA_REGNO (j);
966 if (regno == INVALID_REGNUM)
967 break;
968 make_hard_regno_born (regno, false);
971 /* Pseudos can't go in stack regs at the start of a basic block that
972 is reached by an abnormal edge. Likewise for call clobbered regs,
973 because caller-save, fixup_abnormal_edges and possibly the table
974 driven EH machinery are not quite ready to handle such pseudos
975 live across such edges. */
976 if (bb_has_abnormal_pred (bb))
978 #ifdef STACK_REGS
979 EXECUTE_IF_SET_IN_SPARSESET (pseudos_live, px)
980 lra_reg_info[px].no_stack_p = true;
981 for (px = FIRST_STACK_REG; px <= LAST_STACK_REG; px++)
982 make_hard_regno_born (px, false);
983 #endif
984 /* No need to record conflicts for call clobbered regs if we
985 have nonlocal labels around, as we don't ever try to
986 allocate such regs in this case. */
987 if (!cfun->has_nonlocal_label
988 && has_abnormal_call_or_eh_pred_edge_p (bb))
989 for (px = 0; px < FIRST_PSEUDO_REGISTER; px++)
990 if (call_used_regs[px]
991 #ifdef REAL_PIC_OFFSET_TABLE_REGNUM
992 /* We should create a conflict of PIC pseudo with PIC
993 hard reg as PIC hard reg can have a wrong value after
994 jump described by the abnormal edge. In this case we
995 can not allocate PIC hard reg to PIC pseudo as PIC
996 pseudo will also have a wrong value. */
997 || (px == REAL_PIC_OFFSET_TABLE_REGNUM
998 && pic_offset_table_rtx != NULL_RTX
999 && REGNO (pic_offset_table_rtx) >= FIRST_PSEUDO_REGISTER)
1000 #endif
1002 make_hard_regno_born (px, false);
1005 bool live_change_p = false;
1006 /* Check if bb border live info was changed. */
1007 unsigned int live_pseudos_num = 0;
1008 EXECUTE_IF_SET_IN_BITMAP (df_get_live_in (bb),
1009 FIRST_PSEUDO_REGISTER, j, bi)
1011 live_pseudos_num++;
1012 if (! sparseset_bit_p (pseudos_live, j))
1014 live_change_p = true;
1015 if (lra_dump_file != NULL)
1016 fprintf (lra_dump_file,
1017 " r%d is removed as live at bb%d start\n", j, bb->index);
1018 break;
1021 if (! live_change_p
1022 && sparseset_cardinality (pseudos_live) != live_pseudos_num)
1024 live_change_p = true;
1025 if (lra_dump_file != NULL)
1026 EXECUTE_IF_SET_IN_SPARSESET (pseudos_live, j)
1027 if (! bitmap_bit_p (df_get_live_in (bb), j))
1028 fprintf (lra_dump_file,
1029 " r%d is added to live at bb%d start\n", j, bb->index);
1031 /* See if we'll need an increment at the end of this basic block.
1032 An increment is needed if the PSEUDOS_LIVE set is not empty,
1033 to make sure the finish points are set up correctly. */
1034 need_curr_point_incr = (sparseset_cardinality (pseudos_live) > 0);
1036 EXECUTE_IF_SET_IN_SPARSESET (pseudos_live, i)
1037 mark_pseudo_dead (i, curr_point);
1039 EXECUTE_IF_SET_IN_BITMAP (df_get_live_in (bb), FIRST_PSEUDO_REGISTER, j, bi)
1041 if (sparseset_cardinality (pseudos_live_through_calls) == 0)
1042 break;
1043 if (sparseset_bit_p (pseudos_live_through_calls, j))
1044 check_pseudos_live_through_calls (j, last_call_used_reg_set);
1047 if (need_curr_point_incr)
1048 next_program_point (curr_point, freq);
1050 return live_change_p;
1053 /* Compress pseudo live ranges by removing program points where
1054 nothing happens. Complexity of many algorithms in LRA is linear
1055 function of program points number. To speed up the code we try to
1056 minimize the number of the program points here. */
1057 static void
1058 remove_some_program_points_and_update_live_ranges (void)
1060 unsigned i;
1061 int n, max_regno;
1062 int *map;
1063 lra_live_range_t r, prev_r, next_r;
1064 sbitmap_iterator sbi;
1065 bool born_p, dead_p, prev_born_p, prev_dead_p;
1067 auto_sbitmap born (lra_live_max_point);
1068 auto_sbitmap dead (lra_live_max_point);
1069 bitmap_clear (born);
1070 bitmap_clear (dead);
1071 max_regno = max_reg_num ();
1072 for (i = FIRST_PSEUDO_REGISTER; i < (unsigned) max_regno; i++)
1074 for (r = lra_reg_info[i].live_ranges; r != NULL; r = r->next)
1076 lra_assert (r->start <= r->finish);
1077 bitmap_set_bit (born, r->start);
1078 bitmap_set_bit (dead, r->finish);
1081 auto_sbitmap born_or_dead (lra_live_max_point);
1082 bitmap_ior (born_or_dead, born, dead);
1083 map = XCNEWVEC (int, lra_live_max_point);
1084 n = -1;
1085 prev_born_p = prev_dead_p = false;
1086 EXECUTE_IF_SET_IN_BITMAP (born_or_dead, 0, i, sbi)
1088 born_p = bitmap_bit_p (born, i);
1089 dead_p = bitmap_bit_p (dead, i);
1090 if ((prev_born_p && ! prev_dead_p && born_p && ! dead_p)
1091 || (prev_dead_p && ! prev_born_p && dead_p && ! born_p))
1093 map[i] = n;
1094 lra_point_freq[n] = MAX (lra_point_freq[n], lra_point_freq[i]);
1096 else
1098 map[i] = ++n;
1099 lra_point_freq[n] = lra_point_freq[i];
1101 prev_born_p = born_p;
1102 prev_dead_p = dead_p;
1104 n++;
1105 if (lra_dump_file != NULL)
1106 fprintf (lra_dump_file, "Compressing live ranges: from %d to %d - %d%%\n",
1107 lra_live_max_point, n, 100 * n / lra_live_max_point);
1108 if (n < lra_live_max_point)
1110 lra_live_max_point = n;
1111 for (i = FIRST_PSEUDO_REGISTER; i < (unsigned) max_regno; i++)
1113 for (prev_r = NULL, r = lra_reg_info[i].live_ranges;
1114 r != NULL;
1115 r = next_r)
1117 next_r = r->next;
1118 r->start = map[r->start];
1119 r->finish = map[r->finish];
1120 if (prev_r == NULL || prev_r->start > r->finish + 1)
1122 prev_r = r;
1123 continue;
1125 prev_r->start = r->start;
1126 prev_r->next = next_r;
1127 lra_live_range_pool.remove (r);
1131 free (map);
1134 /* Print live ranges R to file F. */
1135 void
1136 lra_print_live_range_list (FILE *f, lra_live_range_t r)
1138 for (; r != NULL; r = r->next)
1139 fprintf (f, " [%d..%d]", r->start, r->finish);
1140 fprintf (f, "\n");
1143 DEBUG_FUNCTION void
1144 debug (lra_live_range &ref)
1146 lra_print_live_range_list (stderr, &ref);
1149 DEBUG_FUNCTION void
1150 debug (lra_live_range *ptr)
1152 if (ptr)
1153 debug (*ptr);
1154 else
1155 fprintf (stderr, "<nil>\n");
1158 /* Print live ranges R to stderr. */
1159 void
1160 lra_debug_live_range_list (lra_live_range_t r)
1162 lra_print_live_range_list (stderr, r);
1165 /* Print live ranges of pseudo REGNO to file F. */
1166 static void
1167 print_pseudo_live_ranges (FILE *f, int regno)
1169 if (lra_reg_info[regno].live_ranges == NULL)
1170 return;
1171 fprintf (f, " r%d:", regno);
1172 lra_print_live_range_list (f, lra_reg_info[regno].live_ranges);
1175 /* Print live ranges of pseudo REGNO to stderr. */
1176 void
1177 lra_debug_pseudo_live_ranges (int regno)
1179 print_pseudo_live_ranges (stderr, regno);
1182 /* Print live ranges of all pseudos to file F. */
1183 static void
1184 print_live_ranges (FILE *f)
1186 int i, max_regno;
1188 max_regno = max_reg_num ();
1189 for (i = FIRST_PSEUDO_REGISTER; i < max_regno; i++)
1190 print_pseudo_live_ranges (f, i);
1193 /* Print live ranges of all pseudos to stderr. */
1194 void
1195 lra_debug_live_ranges (void)
1197 print_live_ranges (stderr);
1200 /* Compress pseudo live ranges. */
1201 static void
1202 compress_live_ranges (void)
1204 remove_some_program_points_and_update_live_ranges ();
1205 if (lra_dump_file != NULL)
1207 fprintf (lra_dump_file, "Ranges after the compression:\n");
1208 print_live_ranges (lra_dump_file);
1214 /* The number of the current live range pass. */
1215 int lra_live_range_iter;
1217 /* The function creates live ranges only for memory pseudos (or for
1218 all ones if ALL_P), set up CONFLICT_HARD_REGS for the pseudos. It
1219 also does dead insn elimination if DEAD_INSN_P and global live
1220 analysis only for pseudos and only if the pseudo live info was
1221 changed on a BB border. Return TRUE if the live info was
1222 changed. */
1223 static bool
1224 lra_create_live_ranges_1 (bool all_p, bool dead_insn_p)
1226 basic_block bb;
1227 int i, hard_regno, max_regno = max_reg_num ();
1228 int curr_point;
1229 bool bb_live_change_p, have_referenced_pseudos = false;
1231 timevar_push (TV_LRA_CREATE_LIVE_RANGES);
1233 complete_info_p = all_p;
1234 if (lra_dump_file != NULL)
1235 fprintf (lra_dump_file,
1236 "\n********** Pseudo live ranges #%d: **********\n\n",
1237 ++lra_live_range_iter);
1238 memset (lra_hard_reg_usage, 0, sizeof (lra_hard_reg_usage));
1239 for (i = 0; i < max_regno; i++)
1241 lra_reg_info[i].live_ranges = NULL;
1242 CLEAR_HARD_REG_SET (lra_reg_info[i].conflict_hard_regs);
1243 lra_reg_info[i].preferred_hard_regno1 = -1;
1244 lra_reg_info[i].preferred_hard_regno2 = -1;
1245 lra_reg_info[i].preferred_hard_regno_profit1 = 0;
1246 lra_reg_info[i].preferred_hard_regno_profit2 = 0;
1247 #ifdef STACK_REGS
1248 lra_reg_info[i].no_stack_p = false;
1249 #endif
1250 /* The biggest mode is already set but its value might be to
1251 conservative because of recent transformation. Here in this
1252 file we recalculate it again as it costs practically
1253 nothing. */
1254 if (i >= FIRST_PSEUDO_REGISTER && regno_reg_rtx[i] != NULL_RTX)
1255 lra_reg_info[i].biggest_mode = GET_MODE (regno_reg_rtx[i]);
1256 else
1257 lra_reg_info[i].biggest_mode = VOIDmode;
1258 lra_reg_info[i].call_p = false;
1259 if (i >= FIRST_PSEUDO_REGISTER
1260 && lra_reg_info[i].nrefs != 0)
1262 if ((hard_regno = reg_renumber[i]) >= 0)
1263 lra_hard_reg_usage[hard_regno] += lra_reg_info[i].freq;
1264 have_referenced_pseudos = true;
1267 lra_free_copies ();
1269 /* Under some circumstances, we can have functions without pseudo
1270 registers. For such functions, lra_live_max_point will be 0,
1271 see e.g. PR55604, and there's nothing more to do for us here. */
1272 if (! have_referenced_pseudos)
1274 timevar_pop (TV_LRA_CREATE_LIVE_RANGES);
1275 return false;
1278 pseudos_live = sparseset_alloc (max_regno);
1279 pseudos_live_through_calls = sparseset_alloc (max_regno);
1280 pseudos_live_through_setjumps = sparseset_alloc (max_regno);
1281 start_living = sparseset_alloc (max_regno);
1282 start_dying = sparseset_alloc (max_regno);
1283 dead_set = sparseset_alloc (max_regno);
1284 unused_set = sparseset_alloc (max_regno);
1285 curr_point = 0;
1286 unsigned new_length = get_max_uid () * 2;
1287 point_freq_vec.truncate (0);
1288 point_freq_vec.reserve_exact (new_length);
1289 lra_point_freq = point_freq_vec.address ();
1290 auto_vec<int, 20> post_order_rev_cfg;
1291 inverted_post_order_compute (&post_order_rev_cfg);
1292 lra_assert (post_order_rev_cfg.length () == (unsigned) n_basic_blocks_for_fn (cfun));
1293 bb_live_change_p = false;
1294 for (i = post_order_rev_cfg.length () - 1; i >= 0; --i)
1296 bb = BASIC_BLOCK_FOR_FN (cfun, post_order_rev_cfg[i]);
1297 if (bb == EXIT_BLOCK_PTR_FOR_FN (cfun) || bb
1298 == ENTRY_BLOCK_PTR_FOR_FN (cfun))
1299 continue;
1300 if (process_bb_lives (bb, curr_point, dead_insn_p))
1301 bb_live_change_p = true;
1303 if (bb_live_change_p)
1305 /* We need to clear pseudo live info as some pseudos can
1306 disappear, e.g. pseudos with used equivalences. */
1307 FOR_EACH_BB_FN (bb, cfun)
1309 bitmap_clear_range (df_get_live_in (bb), FIRST_PSEUDO_REGISTER,
1310 max_regno - FIRST_PSEUDO_REGISTER);
1311 bitmap_clear_range (df_get_live_out (bb), FIRST_PSEUDO_REGISTER,
1312 max_regno - FIRST_PSEUDO_REGISTER);
1314 /* As we did not change CFG since LRA start we can use
1315 DF-infrastructure solver to solve live data flow problem. */
1316 df_simple_dataflow
1317 (DF_BACKWARD, NULL, live_con_fun_0, live_con_fun_n,
1318 live_trans_fun, &all_blocks,
1319 df_get_postorder (DF_BACKWARD), df_get_n_blocks (DF_BACKWARD));
1320 if (lra_dump_file != NULL)
1322 fprintf (lra_dump_file,
1323 "Global pseudo live data have been updated:\n");
1324 basic_block bb;
1325 FOR_EACH_BB_FN (bb, cfun)
1327 bb_data_t bb_info = get_bb_data (bb);
1328 bitmap bb_livein = df_get_live_in (bb);
1329 bitmap bb_liveout = df_get_live_out (bb);
1331 fprintf (lra_dump_file, "\nBB %d:\n", bb->index);
1332 lra_dump_bitmap_with_title (" gen:",
1333 &bb_info->gen_pseudos, bb->index);
1334 lra_dump_bitmap_with_title (" killed:",
1335 &bb_info->killed_pseudos, bb->index);
1336 lra_dump_bitmap_with_title (" livein:", bb_livein, bb->index);
1337 lra_dump_bitmap_with_title (" liveout:", bb_liveout, bb->index);
1341 lra_live_max_point = curr_point;
1342 if (lra_dump_file != NULL)
1343 print_live_ranges (lra_dump_file);
1344 /* Clean up. */
1345 sparseset_free (unused_set);
1346 sparseset_free (dead_set);
1347 sparseset_free (start_dying);
1348 sparseset_free (start_living);
1349 sparseset_free (pseudos_live_through_calls);
1350 sparseset_free (pseudos_live_through_setjumps);
1351 sparseset_free (pseudos_live);
1352 compress_live_ranges ();
1353 timevar_pop (TV_LRA_CREATE_LIVE_RANGES);
1354 return bb_live_change_p;
1357 /* The main entry function creates live-ranges and other live info
1358 necessary for the assignment sub-pass. It uses
1359 lra_creates_live_ranges_1 -- so read comments for the
1360 function. */
1361 void
1362 lra_create_live_ranges (bool all_p, bool dead_insn_p)
1364 if (! lra_create_live_ranges_1 (all_p, dead_insn_p))
1365 return;
1366 if (lra_dump_file != NULL)
1367 fprintf (lra_dump_file, "Live info was changed -- recalculate it\n");
1368 /* Live info was changed on a bb border. It means that some info,
1369 e.g. about conflict regs, calls crossed, and live ranges may be
1370 wrong. We need this info for allocation. So recalculate it
1371 again but without removing dead insns which can change live info
1372 again. Repetitive live range calculations are expensive therefore
1373 we stop here as we already have correct info although some
1374 improvement in rare cases could be possible on this sub-pass if
1375 we do dead insn elimination again (still the improvement may
1376 happen later). */
1377 lra_clear_live_ranges ();
1378 bool res = lra_create_live_ranges_1 (all_p, false);
1379 lra_assert (! res);
1382 /* Finish all live ranges. */
1383 void
1384 lra_clear_live_ranges (void)
1386 int i;
1388 for (i = 0; i < max_reg_num (); i++)
1389 free_live_range_list (lra_reg_info[i].live_ranges);
1390 point_freq_vec.release ();
1393 /* Initialize live ranges data once per function. */
1394 void
1395 lra_live_ranges_init (void)
1397 bitmap_initialize (&temp_bitmap, &reg_obstack);
1398 initiate_live_solver ();
1401 /* Finish live ranges data once per function. */
1402 void
1403 lra_live_ranges_finish (void)
1405 finish_live_solver ();
1406 bitmap_clear (&temp_bitmap);
1407 lra_live_range_pool.release ();