PR tree-optimization/66718
[official-gcc.git] / gcc / lra-lives.c
blobedf4a91028e3a1250cd49c11a0f860a504b885a9
1 /* Build live ranges for pseudos.
2 Copyright (C) 2010-2015 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 "tree.h"
33 #include "rtl.h"
34 #include "df.h"
35 #include "tm_p.h"
36 #include "insn-config.h"
37 #include "recog.h"
38 #include "output.h"
39 #include "regs.h"
40 #include "flags.h"
41 #include "alias.h"
42 #include "expmed.h"
43 #include "dojump.h"
44 #include "explow.h"
45 #include "calls.h"
46 #include "emit-rtl.h"
47 #include "varasm.h"
48 #include "stmt.h"
49 #include "expr.h"
50 #include "cfganal.h"
51 #include "except.h"
52 #include "ira.h"
53 #include "sparseset.h"
54 #include "lra.h"
55 #include "insn-attr.h"
56 #include "insn-codes.h"
57 #include "lra-int.h"
59 /* Program points are enumerated by numbers from range
60 0..LRA_LIVE_MAX_POINT-1. There are approximately two times more
61 program points than insns. Program points are places in the
62 program where liveness info can be changed. In most general case
63 (there are more complicated cases too) some program points
64 correspond to places where input operand dies and other ones
65 correspond to places where output operands are born. */
66 int lra_live_max_point;
68 /* Accumulated execution frequency of all references for each hard
69 register. */
70 int lra_hard_reg_usage[FIRST_PSEUDO_REGISTER];
72 /* A global flag whose true value says to build live ranges for all
73 pseudos, otherwise the live ranges only for pseudos got memory is
74 build. True value means also building copies and setting up hard
75 register preferences. The complete info is necessary only for the
76 assignment pass. The complete info is not needed for the
77 coalescing and spill passes. */
78 static bool complete_info_p;
80 /* Pseudos live at current point in the RTL scan. */
81 static sparseset pseudos_live;
83 /* Pseudos probably living through calls and setjumps. As setjump is
84 a call too, if a bit in PSEUDOS_LIVE_THROUGH_SETJUMPS is set up
85 then the corresponding bit in PSEUDOS_LIVE_THROUGH_CALLS is set up
86 too. These data are necessary for cases when only one subreg of a
87 multi-reg pseudo is set up after a call. So we decide it is
88 probably live when traversing bb backward. We are sure about
89 living when we see its usage or definition of the pseudo. */
90 static sparseset pseudos_live_through_calls;
91 static sparseset pseudos_live_through_setjumps;
93 /* Set of hard regs (except eliminable ones) currently live. */
94 static HARD_REG_SET hard_regs_live;
96 /* Set of pseudos and hard registers start living/dying in the current
97 insn. These sets are used to update REG_DEAD and REG_UNUSED notes
98 in the insn. */
99 static sparseset start_living, start_dying;
101 /* Set of pseudos and hard regs dead and unused in the current
102 insn. */
103 static sparseset unused_set, dead_set;
105 /* Bitmap used for holding intermediate bitmap operation results. */
106 static bitmap_head temp_bitmap;
108 /* Pool for pseudo live ranges. */
109 pool_allocator <lra_live_range> lra_live_range::pool ("live ranges", 100);
111 /* Free live range list LR. */
112 static void
113 free_live_range_list (lra_live_range_t lr)
115 lra_live_range_t next;
117 while (lr != NULL)
119 next = lr->next;
120 delete lr;
121 lr = next;
125 /* Create and return pseudo live range with given attributes. */
126 static lra_live_range_t
127 create_live_range (int regno, int start, int finish, lra_live_range_t next)
129 lra_live_range_t p = new lra_live_range;
130 p->regno = regno;
131 p->start = start;
132 p->finish = finish;
133 p->next = next;
134 return p;
137 /* Copy live range R and return the result. */
138 static lra_live_range_t
139 copy_live_range (lra_live_range_t r)
141 return new lra_live_range (*r);
144 /* Copy live range list given by its head R and return the result. */
145 lra_live_range_t
146 lra_copy_live_range_list (lra_live_range_t r)
148 lra_live_range_t p, first, *chain;
150 first = NULL;
151 for (chain = &first; r != NULL; r = r->next)
153 p = copy_live_range (r);
154 *chain = p;
155 chain = &p->next;
157 return first;
160 /* Merge *non-intersected* ranges R1 and R2 and returns the result.
161 The function maintains the order of ranges and tries to minimize
162 size of the result range list. Ranges R1 and R2 may not be used
163 after the call. */
164 lra_live_range_t
165 lra_merge_live_ranges (lra_live_range_t r1, lra_live_range_t r2)
167 lra_live_range_t first, last;
169 if (r1 == NULL)
170 return r2;
171 if (r2 == NULL)
172 return r1;
173 for (first = last = NULL; r1 != NULL && r2 != NULL;)
175 if (r1->start < r2->start)
176 std::swap (r1, r2);
178 if (r1->start == r2->finish + 1)
180 /* Joint ranges: merge r1 and r2 into r1. */
181 r1->start = r2->start;
182 lra_live_range_t temp = r2;
183 r2 = r2->next;
184 delete temp;
186 else
188 gcc_assert (r2->finish + 1 < r1->start);
189 /* Add r1 to the result. */
190 if (first == NULL)
191 first = last = r1;
192 else
194 last->next = r1;
195 last = r1;
197 r1 = r1->next;
200 if (r1 != NULL)
202 if (first == NULL)
203 first = r1;
204 else
205 last->next = r1;
207 else
209 lra_assert (r2 != NULL);
210 if (first == NULL)
211 first = r2;
212 else
213 last->next = r2;
215 return first;
218 /* Return TRUE if live ranges R1 and R2 intersect. */
219 bool
220 lra_intersected_live_ranges_p (lra_live_range_t r1, lra_live_range_t r2)
222 /* Remember the live ranges are always kept ordered. */
223 while (r1 != NULL && r2 != NULL)
225 if (r1->start > r2->finish)
226 r1 = r1->next;
227 else if (r2->start > r1->finish)
228 r2 = r2->next;
229 else
230 return true;
232 return false;
235 /* The function processing birth of hard register REGNO. It updates
236 living hard regs, START_LIVING, and conflict hard regs for living
237 pseudos. Conflict hard regs for the pic pseudo is not updated if
238 REGNO is REAL_PIC_OFFSET_TABLE_REGNUM and CHECK_PIC_PSEUDO_P is
239 true. */
240 static void
241 make_hard_regno_born (int regno, bool check_pic_pseudo_p ATTRIBUTE_UNUSED)
243 unsigned int i;
245 lra_assert (regno < FIRST_PSEUDO_REGISTER);
246 if (TEST_HARD_REG_BIT (hard_regs_live, regno))
247 return;
248 SET_HARD_REG_BIT (hard_regs_live, regno);
249 sparseset_set_bit (start_living, regno);
250 EXECUTE_IF_SET_IN_SPARSESET (pseudos_live, i)
251 #ifdef REAL_PIC_OFFSET_TABLE_REGNUM
252 if (! check_pic_pseudo_p
253 || regno != REAL_PIC_OFFSET_TABLE_REGNUM
254 || pic_offset_table_rtx == NULL
255 || i != REGNO (pic_offset_table_rtx))
256 #endif
257 SET_HARD_REG_BIT (lra_reg_info[i].conflict_hard_regs, regno);
260 /* Process the death of hard register REGNO. This updates
261 hard_regs_live and START_DYING. */
262 static void
263 make_hard_regno_dead (int regno)
265 lra_assert (regno < FIRST_PSEUDO_REGISTER);
266 if (! TEST_HARD_REG_BIT (hard_regs_live, regno))
267 return;
268 sparseset_set_bit (start_dying, regno);
269 CLEAR_HARD_REG_BIT (hard_regs_live, regno);
272 /* Mark pseudo REGNO as living at program point POINT, update conflicting
273 hard registers of the pseudo and START_LIVING, and start a new live
274 range for the pseudo corresponding to REGNO if it is necessary. */
275 static void
276 mark_pseudo_live (int regno, int point)
278 lra_live_range_t p;
280 lra_assert (regno >= FIRST_PSEUDO_REGISTER);
281 lra_assert (! sparseset_bit_p (pseudos_live, regno));
282 sparseset_set_bit (pseudos_live, regno);
283 IOR_HARD_REG_SET (lra_reg_info[regno].conflict_hard_regs, hard_regs_live);
285 if ((complete_info_p || lra_get_regno_hard_regno (regno) < 0)
286 && ((p = lra_reg_info[regno].live_ranges) == NULL
287 || (p->finish != point && p->finish + 1 != point)))
288 lra_reg_info[regno].live_ranges
289 = create_live_range (regno, point, -1, p);
290 sparseset_set_bit (start_living, regno);
293 /* Mark pseudo REGNO as not living at program point POINT and update
294 START_DYING.
295 This finishes the current live range for the pseudo corresponding
296 to REGNO. */
297 static void
298 mark_pseudo_dead (int regno, int point)
300 lra_live_range_t p;
302 lra_assert (regno >= FIRST_PSEUDO_REGISTER);
303 lra_assert (sparseset_bit_p (pseudos_live, regno));
304 sparseset_clear_bit (pseudos_live, regno);
305 sparseset_set_bit (start_dying, regno);
306 if (complete_info_p || lra_get_regno_hard_regno (regno) < 0)
308 p = lra_reg_info[regno].live_ranges;
309 lra_assert (p != NULL);
310 p->finish = point;
314 /* The corresponding bitmaps of BB currently being processed. */
315 static bitmap bb_killed_pseudos, bb_gen_pseudos;
317 /* Mark register REGNO (pseudo or hard register) in MODE as live at
318 program point POINT. Update BB_GEN_PSEUDOS.
319 Return TRUE if the liveness tracking sets were modified, or FALSE
320 if nothing changed. */
321 static bool
322 mark_regno_live (int regno, machine_mode mode, int point)
324 int last;
325 bool changed = false;
327 if (regno < FIRST_PSEUDO_REGISTER)
329 for (last = regno + hard_regno_nregs[regno][mode];
330 regno < last;
331 regno++)
332 make_hard_regno_born (regno, false);
334 else
336 if (! sparseset_bit_p (pseudos_live, regno))
338 mark_pseudo_live (regno, point);
339 changed = true;
341 bitmap_set_bit (bb_gen_pseudos, regno);
343 return changed;
347 /* Mark register REGNO in MODE as dead at program point POINT. Update
348 BB_GEN_PSEUDOS and BB_KILLED_PSEUDOS. Return TRUE if the liveness
349 tracking sets were modified, or FALSE if nothing changed. */
350 static bool
351 mark_regno_dead (int regno, machine_mode mode, int point)
353 int last;
354 bool changed = false;
356 if (regno < FIRST_PSEUDO_REGISTER)
358 for (last = regno + hard_regno_nregs[regno][mode];
359 regno < last;
360 regno++)
361 make_hard_regno_dead (regno);
363 else
365 if (sparseset_bit_p (pseudos_live, regno))
367 mark_pseudo_dead (regno, point);
368 changed = true;
370 bitmap_clear_bit (bb_gen_pseudos, regno);
371 bitmap_set_bit (bb_killed_pseudos, regno);
373 return changed;
378 /* This page contains code for making global live analysis of pseudos.
379 The code works only when pseudo live info is changed on a BB
380 border. That might be a consequence of some global transformations
381 in LRA, e.g. PIC pseudo reuse or rematerialization. */
383 /* Structure describing local BB data used for pseudo
384 live-analysis. */
385 struct bb_data_pseudos
387 /* Basic block about which the below data are. */
388 basic_block bb;
389 bitmap_head killed_pseudos; /* pseudos killed in the BB. */
390 bitmap_head gen_pseudos; /* pseudos generated in the BB. */
393 /* Array for all BB data. Indexed by the corresponding BB index. */
394 typedef struct bb_data_pseudos *bb_data_t;
396 /* All basic block data are referred through the following array. */
397 static bb_data_t bb_data;
399 /* Two small functions for access to the bb data. */
400 static inline bb_data_t
401 get_bb_data (basic_block bb)
403 return &bb_data[(bb)->index];
406 static inline bb_data_t
407 get_bb_data_by_index (int index)
409 return &bb_data[index];
412 /* Bitmap with all hard regs. */
413 static bitmap_head all_hard_regs_bitmap;
415 /* The transfer function used by the DF equation solver to propagate
416 live info through block with BB_INDEX according to the following
417 equation:
419 bb.livein = (bb.liveout - bb.kill) OR bb.gen
421 static bool
422 live_trans_fun (int bb_index)
424 basic_block bb = get_bb_data_by_index (bb_index)->bb;
425 bitmap bb_liveout = df_get_live_out (bb);
426 bitmap bb_livein = df_get_live_in (bb);
427 bb_data_t bb_info = get_bb_data (bb);
429 bitmap_and_compl (&temp_bitmap, bb_liveout, &all_hard_regs_bitmap);
430 return bitmap_ior_and_compl (bb_livein, &bb_info->gen_pseudos,
431 &temp_bitmap, &bb_info->killed_pseudos);
434 /* The confluence function used by the DF equation solver to set up
435 live info for a block BB without predecessor. */
436 static void
437 live_con_fun_0 (basic_block bb)
439 bitmap_and_into (df_get_live_out (bb), &all_hard_regs_bitmap);
442 /* The confluence function used by the DF equation solver to propagate
443 live info from successor to predecessor on edge E according to the
444 following equation:
446 bb.liveout = 0 for entry block | OR (livein of successors)
448 static bool
449 live_con_fun_n (edge e)
451 basic_block bb = e->src;
452 basic_block dest = e->dest;
453 bitmap bb_liveout = df_get_live_out (bb);
454 bitmap dest_livein = df_get_live_in (dest);
456 return bitmap_ior_and_compl_into (bb_liveout,
457 dest_livein, &all_hard_regs_bitmap);
460 /* Indexes of all function blocks. */
461 static bitmap_head all_blocks;
463 /* Allocate and initialize data needed for global pseudo live
464 analysis. */
465 static void
466 initiate_live_solver (void)
468 bitmap_initialize (&all_hard_regs_bitmap, &reg_obstack);
469 bitmap_set_range (&all_hard_regs_bitmap, 0, FIRST_PSEUDO_REGISTER);
470 bb_data = XNEWVEC (struct bb_data_pseudos, last_basic_block_for_fn (cfun));
471 bitmap_initialize (&all_blocks, &reg_obstack);
473 basic_block bb;
474 FOR_ALL_BB_FN (bb, cfun)
476 bb_data_t bb_info = get_bb_data (bb);
477 bb_info->bb = bb;
478 bitmap_initialize (&bb_info->killed_pseudos, &reg_obstack);
479 bitmap_initialize (&bb_info->gen_pseudos, &reg_obstack);
480 bitmap_set_bit (&all_blocks, bb->index);
484 /* Free all data needed for global pseudo live analysis. */
485 static void
486 finish_live_solver (void)
488 basic_block bb;
490 bitmap_clear (&all_blocks);
491 FOR_ALL_BB_FN (bb, cfun)
493 bb_data_t bb_info = get_bb_data (bb);
494 bitmap_clear (&bb_info->killed_pseudos);
495 bitmap_clear (&bb_info->gen_pseudos);
497 free (bb_data);
498 bitmap_clear (&all_hard_regs_bitmap);
503 /* Insn currently scanned. */
504 static rtx_insn *curr_insn;
505 /* The insn data. */
506 static lra_insn_recog_data_t curr_id;
507 /* The insn static data. */
508 static struct lra_static_insn_data *curr_static_id;
510 /* Return true when one of the predecessor edges of BB is marked with
511 EDGE_ABNORMAL_CALL or EDGE_EH. */
512 static bool
513 bb_has_abnormal_call_pred (basic_block bb)
515 edge e;
516 edge_iterator ei;
518 FOR_EACH_EDGE (e, ei, bb->preds)
520 if (e->flags & (EDGE_ABNORMAL_CALL | EDGE_EH))
521 return true;
523 return false;
526 /* Vec containing execution frequencies of program points. */
527 static vec<int> point_freq_vec;
529 /* The start of the above vector elements. */
530 int *lra_point_freq;
532 /* Increment the current program point POINT to the next point which has
533 execution frequency FREQ. */
534 static void
535 next_program_point (int &point, int freq)
537 point_freq_vec.safe_push (freq);
538 lra_point_freq = point_freq_vec.address ();
539 point++;
542 /* Update the preference of HARD_REGNO for pseudo REGNO by PROFIT. */
543 void
544 lra_setup_reload_pseudo_preferenced_hard_reg (int regno,
545 int hard_regno, int profit)
547 lra_assert (regno >= lra_constraint_new_regno_start);
548 if (lra_reg_info[regno].preferred_hard_regno1 == hard_regno)
549 lra_reg_info[regno].preferred_hard_regno_profit1 += profit;
550 else if (lra_reg_info[regno].preferred_hard_regno2 == hard_regno)
551 lra_reg_info[regno].preferred_hard_regno_profit2 += profit;
552 else if (lra_reg_info[regno].preferred_hard_regno1 < 0)
554 lra_reg_info[regno].preferred_hard_regno1 = hard_regno;
555 lra_reg_info[regno].preferred_hard_regno_profit1 = profit;
557 else if (lra_reg_info[regno].preferred_hard_regno2 < 0
558 || profit > lra_reg_info[regno].preferred_hard_regno_profit2)
560 lra_reg_info[regno].preferred_hard_regno2 = hard_regno;
561 lra_reg_info[regno].preferred_hard_regno_profit2 = profit;
563 else
564 return;
565 /* Keep the 1st hard regno as more profitable. */
566 if (lra_reg_info[regno].preferred_hard_regno1 >= 0
567 && lra_reg_info[regno].preferred_hard_regno2 >= 0
568 && (lra_reg_info[regno].preferred_hard_regno_profit2
569 > lra_reg_info[regno].preferred_hard_regno_profit1))
571 std::swap (lra_reg_info[regno].preferred_hard_regno1,
572 lra_reg_info[regno].preferred_hard_regno2);
573 std::swap (lra_reg_info[regno].preferred_hard_regno_profit1,
574 lra_reg_info[regno].preferred_hard_regno_profit2);
576 if (lra_dump_file != NULL)
578 if ((hard_regno = lra_reg_info[regno].preferred_hard_regno1) >= 0)
579 fprintf (lra_dump_file,
580 " Hard reg %d is preferable by r%d with profit %d\n",
581 hard_regno, regno,
582 lra_reg_info[regno].preferred_hard_regno_profit1);
583 if ((hard_regno = lra_reg_info[regno].preferred_hard_regno2) >= 0)
584 fprintf (lra_dump_file,
585 " Hard reg %d is preferable by r%d with profit %d\n",
586 hard_regno, regno,
587 lra_reg_info[regno].preferred_hard_regno_profit2);
591 /* Check that REGNO living through calls and setjumps, set up conflict
592 regs, and clear corresponding bits in PSEUDOS_LIVE_THROUGH_CALLS and
593 PSEUDOS_LIVE_THROUGH_SETJUMPS. */
594 static inline void
595 check_pseudos_live_through_calls (int regno)
597 int hr;
599 if (! sparseset_bit_p (pseudos_live_through_calls, regno))
600 return;
601 sparseset_clear_bit (pseudos_live_through_calls, regno);
602 IOR_HARD_REG_SET (lra_reg_info[regno].conflict_hard_regs,
603 call_used_reg_set);
605 for (hr = 0; hr < FIRST_PSEUDO_REGISTER; hr++)
606 if (HARD_REGNO_CALL_PART_CLOBBERED (hr, PSEUDO_REGNO_MODE (regno)))
607 SET_HARD_REG_BIT (lra_reg_info[regno].conflict_hard_regs, hr);
608 #ifdef ENABLE_CHECKING
609 lra_reg_info[regno].call_p = true;
610 #endif
611 if (! sparseset_bit_p (pseudos_live_through_setjumps, regno))
612 return;
613 sparseset_clear_bit (pseudos_live_through_setjumps, regno);
614 /* Don't allocate pseudos that cross setjmps or any call, if this
615 function receives a nonlocal goto. */
616 SET_HARD_REG_SET (lra_reg_info[regno].conflict_hard_regs);
619 /* Process insns of the basic block BB to update pseudo live ranges,
620 pseudo hard register conflicts, and insn notes. We do it on
621 backward scan of BB insns. CURR_POINT is the program point where
622 BB ends. The function updates this counter and returns in
623 CURR_POINT the program point where BB starts. The function also
624 does local live info updates and can delete the dead insns if
625 DEAD_INSN_P. It returns true if pseudo live info was
626 changed at the BB start. */
627 static bool
628 process_bb_lives (basic_block bb, int &curr_point, bool dead_insn_p)
630 int i, regno, freq;
631 unsigned int j;
632 bitmap_iterator bi;
633 bitmap reg_live_out;
634 unsigned int px;
635 rtx_insn *next;
636 rtx link, *link_loc;
637 bool need_curr_point_incr;
639 reg_live_out = df_get_live_out (bb);
640 sparseset_clear (pseudos_live);
641 sparseset_clear (pseudos_live_through_calls);
642 sparseset_clear (pseudos_live_through_setjumps);
643 REG_SET_TO_HARD_REG_SET (hard_regs_live, reg_live_out);
644 AND_COMPL_HARD_REG_SET (hard_regs_live, eliminable_regset);
645 EXECUTE_IF_SET_IN_BITMAP (reg_live_out, FIRST_PSEUDO_REGISTER, j, bi)
646 mark_pseudo_live (j, curr_point);
648 bb_gen_pseudos = &get_bb_data (bb)->gen_pseudos;
649 bb_killed_pseudos = &get_bb_data (bb)->killed_pseudos;
650 bitmap_clear (bb_gen_pseudos);
651 bitmap_clear (bb_killed_pseudos);
652 freq = REG_FREQ_FROM_BB (bb);
654 if (lra_dump_file != NULL)
655 fprintf (lra_dump_file, " BB %d\n", bb->index);
657 /* Scan the code of this basic block, noting which pseudos and hard
658 regs are born or die.
660 Note that this loop treats uninitialized values as live until the
661 beginning of the block. For example, if an instruction uses
662 (reg:DI foo), and only (subreg:SI (reg:DI foo) 0) is ever set,
663 FOO will remain live until the beginning of the block. Likewise
664 if FOO is not set at all. This is unnecessarily pessimistic, but
665 it probably doesn't matter much in practice. */
666 FOR_BB_INSNS_REVERSE_SAFE (bb, curr_insn, next)
668 bool call_p;
669 int dst_regno, src_regno;
670 rtx set;
671 struct lra_insn_reg *reg;
673 if (!NONDEBUG_INSN_P (curr_insn))
674 continue;
676 curr_id = lra_get_insn_recog_data (curr_insn);
677 curr_static_id = curr_id->insn_static_data;
678 if (lra_dump_file != NULL)
679 fprintf (lra_dump_file, " Insn %u: point = %d\n",
680 INSN_UID (curr_insn), curr_point);
682 set = single_set (curr_insn);
684 if (dead_insn_p && set != NULL_RTX
685 && REG_P (SET_DEST (set)) && REGNO (SET_DEST (set)) >= FIRST_PSEUDO_REGISTER
686 && find_reg_note (curr_insn, REG_EH_REGION, NULL_RTX) == NULL_RTX
687 && ! may_trap_p (PATTERN (curr_insn))
688 /* Don't do premature remove of pic offset pseudo as we can
689 start to use it after some reload generation. */
690 && (pic_offset_table_rtx == NULL_RTX
691 || pic_offset_table_rtx != SET_DEST (set)))
693 bool remove_p = true;
695 for (reg = curr_id->regs; reg != NULL; reg = reg->next)
696 if (reg->type != OP_IN && sparseset_bit_p (pseudos_live, reg->regno))
698 remove_p = false;
699 break;
701 for (reg = curr_static_id->hard_regs; reg != NULL; reg = reg->next)
702 if (reg->type != OP_IN)
704 remove_p = false;
705 break;
707 if (remove_p && ! volatile_refs_p (PATTERN (curr_insn)))
709 dst_regno = REGNO (SET_DEST (set));
710 if (lra_dump_file != NULL)
711 fprintf (lra_dump_file, " Deleting dead insn %u\n",
712 INSN_UID (curr_insn));
713 lra_set_insn_deleted (curr_insn);
714 if (lra_reg_info[dst_regno].nrefs == 0)
716 /* There might be some debug insns with the pseudo. */
717 unsigned int uid;
718 rtx_insn *insn;
720 bitmap_copy (&temp_bitmap, &lra_reg_info[dst_regno].insn_bitmap);
721 EXECUTE_IF_SET_IN_BITMAP (&temp_bitmap, 0, uid, bi)
723 insn = lra_insn_recog_data[uid]->insn;
724 lra_substitute_pseudo_within_insn (insn, dst_regno,
725 SET_SRC (set), true);
726 lra_update_insn_regno_info (insn);
729 continue;
733 /* Update max ref width and hard reg usage. */
734 for (reg = curr_id->regs; reg != NULL; reg = reg->next)
735 if (reg->regno >= FIRST_PSEUDO_REGISTER
736 && (GET_MODE_SIZE (reg->biggest_mode)
737 > GET_MODE_SIZE (lra_reg_info[reg->regno].biggest_mode)))
738 lra_reg_info[reg->regno].biggest_mode = reg->biggest_mode;
739 else if (reg->regno < FIRST_PSEUDO_REGISTER)
740 lra_hard_reg_usage[reg->regno] += freq;
742 call_p = CALL_P (curr_insn);
743 if (complete_info_p
744 && set != NULL_RTX
745 && REG_P (SET_DEST (set)) && REG_P (SET_SRC (set))
746 /* Check that source regno does not conflict with
747 destination regno to exclude most impossible
748 preferences. */
749 && ((((src_regno = REGNO (SET_SRC (set))) >= FIRST_PSEUDO_REGISTER
750 && ! sparseset_bit_p (pseudos_live, src_regno))
751 || (src_regno < FIRST_PSEUDO_REGISTER
752 && ! TEST_HARD_REG_BIT (hard_regs_live, src_regno)))
753 /* It might be 'inheritance pseudo <- reload pseudo'. */
754 || (src_regno >= lra_constraint_new_regno_start
755 && ((int) REGNO (SET_DEST (set))
756 >= lra_constraint_new_regno_start)
757 /* Remember to skip special cases where src/dest regnos are
758 the same, e.g. insn SET pattern has matching constraints
759 like =r,0. */
760 && src_regno != (int) REGNO (SET_DEST (set)))))
762 int hard_regno = -1, regno = -1;
764 dst_regno = REGNO (SET_DEST (set));
765 if (dst_regno >= lra_constraint_new_regno_start
766 && src_regno >= lra_constraint_new_regno_start)
768 /* It might be still an original (non-reload) insn with
769 one unused output and a constraint requiring to use
770 the same reg for input/output operands. In this case
771 dst_regno and src_regno have the same value, we don't
772 need a misleading copy for this case. */
773 if (dst_regno != src_regno)
774 lra_create_copy (dst_regno, src_regno, freq);
776 else if (dst_regno >= lra_constraint_new_regno_start)
778 if ((hard_regno = src_regno) >= FIRST_PSEUDO_REGISTER)
779 hard_regno = reg_renumber[src_regno];
780 regno = dst_regno;
782 else if (src_regno >= lra_constraint_new_regno_start)
784 if ((hard_regno = dst_regno) >= FIRST_PSEUDO_REGISTER)
785 hard_regno = reg_renumber[dst_regno];
786 regno = src_regno;
788 if (regno >= 0 && hard_regno >= 0)
789 lra_setup_reload_pseudo_preferenced_hard_reg
790 (regno, hard_regno, freq);
793 sparseset_clear (start_living);
795 /* Try to avoid unnecessary program point increments, this saves
796 a lot of time in remove_some_program_points_and_update_live_ranges.
797 We only need an increment if something becomes live or dies at this
798 program point. */
799 need_curr_point_incr = false;
801 /* Mark each defined value as live. We need to do this for
802 unused values because they still conflict with quantities
803 that are live at the time of the definition. */
804 for (reg = curr_id->regs; reg != NULL; reg = reg->next)
805 if (reg->type != OP_IN)
807 need_curr_point_incr
808 |= mark_regno_live (reg->regno, reg->biggest_mode,
809 curr_point);
810 check_pseudos_live_through_calls (reg->regno);
813 for (reg = curr_static_id->hard_regs; reg != NULL; reg = reg->next)
814 if (reg->type != OP_IN)
815 make_hard_regno_born (reg->regno, false);
817 sparseset_copy (unused_set, start_living);
819 sparseset_clear (start_dying);
821 /* See which defined values die here. */
822 for (reg = curr_id->regs; reg != NULL; reg = reg->next)
823 if (reg->type == OP_OUT && ! reg->early_clobber && ! reg->subreg_p)
824 need_curr_point_incr
825 |= mark_regno_dead (reg->regno, reg->biggest_mode,
826 curr_point);
828 for (reg = curr_static_id->hard_regs; reg != NULL; reg = reg->next)
829 if (reg->type == OP_OUT && ! reg->early_clobber && ! reg->subreg_p)
830 make_hard_regno_dead (reg->regno);
832 if (call_p)
834 if (flag_ipa_ra)
836 HARD_REG_SET this_call_used_reg_set;
837 get_call_reg_set_usage (curr_insn, &this_call_used_reg_set,
838 call_used_reg_set);
840 EXECUTE_IF_SET_IN_SPARSESET (pseudos_live, j)
841 IOR_HARD_REG_SET (lra_reg_info[j].actual_call_used_reg_set,
842 this_call_used_reg_set);
845 sparseset_ior (pseudos_live_through_calls,
846 pseudos_live_through_calls, pseudos_live);
847 if (cfun->has_nonlocal_label
848 || find_reg_note (curr_insn, REG_SETJMP,
849 NULL_RTX) != NULL_RTX)
850 sparseset_ior (pseudos_live_through_setjumps,
851 pseudos_live_through_setjumps, pseudos_live);
854 /* Increment the current program point if we must. */
855 if (need_curr_point_incr)
856 next_program_point (curr_point, freq);
858 sparseset_clear (start_living);
860 need_curr_point_incr = false;
862 /* Mark each used value as live. */
863 for (reg = curr_id->regs; reg != NULL; reg = reg->next)
864 if (reg->type == OP_IN)
866 need_curr_point_incr
867 |= mark_regno_live (reg->regno, reg->biggest_mode,
868 curr_point);
869 check_pseudos_live_through_calls (reg->regno);
872 for (reg = curr_static_id->hard_regs; reg != NULL; reg = reg->next)
873 if (reg->type == OP_IN)
874 make_hard_regno_born (reg->regno, false);
876 if (curr_id->arg_hard_regs != NULL)
877 /* Make argument hard registers live. Don't create conflict
878 of used REAL_PIC_OFFSET_TABLE_REGNUM and the pic pseudo. */
879 for (i = 0; (regno = curr_id->arg_hard_regs[i]) >= 0; i++)
880 make_hard_regno_born (regno, true);
882 sparseset_and_compl (dead_set, start_living, start_dying);
884 /* Mark early clobber outputs dead. */
885 for (reg = curr_id->regs; reg != NULL; reg = reg->next)
886 if (reg->type == OP_OUT && reg->early_clobber && ! reg->subreg_p)
887 need_curr_point_incr
888 |= mark_regno_dead (reg->regno, reg->biggest_mode,
889 curr_point);
891 for (reg = curr_static_id->hard_regs; reg != NULL; reg = reg->next)
892 if (reg->type == OP_OUT && reg->early_clobber && ! reg->subreg_p)
893 make_hard_regno_dead (reg->regno);
895 if (need_curr_point_incr)
896 next_program_point (curr_point, freq);
898 /* Update notes. */
899 for (link_loc = &REG_NOTES (curr_insn); (link = *link_loc) != NULL_RTX;)
901 if (REG_NOTE_KIND (link) != REG_DEAD
902 && REG_NOTE_KIND (link) != REG_UNUSED)
904 else if (REG_P (XEXP (link, 0)))
906 regno = REGNO (XEXP (link, 0));
907 if ((REG_NOTE_KIND (link) == REG_DEAD
908 && ! sparseset_bit_p (dead_set, regno))
909 || (REG_NOTE_KIND (link) == REG_UNUSED
910 && ! sparseset_bit_p (unused_set, regno)))
912 *link_loc = XEXP (link, 1);
913 continue;
915 if (REG_NOTE_KIND (link) == REG_DEAD)
916 sparseset_clear_bit (dead_set, regno);
917 else if (REG_NOTE_KIND (link) == REG_UNUSED)
918 sparseset_clear_bit (unused_set, regno);
920 link_loc = &XEXP (link, 1);
922 EXECUTE_IF_SET_IN_SPARSESET (dead_set, j)
923 add_reg_note (curr_insn, REG_DEAD, regno_reg_rtx[j]);
924 EXECUTE_IF_SET_IN_SPARSESET (unused_set, j)
925 add_reg_note (curr_insn, REG_UNUSED, regno_reg_rtx[j]);
928 if (bb_has_eh_pred (bb))
929 for (j = 0; ; ++j)
931 unsigned int regno = EH_RETURN_DATA_REGNO (j);
933 if (regno == INVALID_REGNUM)
934 break;
935 make_hard_regno_born (regno, false);
938 /* Pseudos can't go in stack regs at the start of a basic block that
939 is reached by an abnormal edge. Likewise for call clobbered regs,
940 because caller-save, fixup_abnormal_edges and possibly the table
941 driven EH machinery are not quite ready to handle such pseudos
942 live across such edges. */
943 if (bb_has_abnormal_pred (bb))
945 #ifdef STACK_REGS
946 EXECUTE_IF_SET_IN_SPARSESET (pseudos_live, px)
947 lra_reg_info[px].no_stack_p = true;
948 for (px = FIRST_STACK_REG; px <= LAST_STACK_REG; px++)
949 make_hard_regno_born (px, false);
950 #endif
951 /* No need to record conflicts for call clobbered regs if we
952 have nonlocal labels around, as we don't ever try to
953 allocate such regs in this case. */
954 if (!cfun->has_nonlocal_label && bb_has_abnormal_call_pred (bb))
955 for (px = 0; px < FIRST_PSEUDO_REGISTER; px++)
956 if (call_used_regs[px]
957 #ifdef REAL_PIC_OFFSET_TABLE_REGNUM
958 /* We should create a conflict of PIC pseudo with PIC
959 hard reg as PIC hard reg can have a wrong value after
960 jump described by the abnormal edge. In this case we
961 can not allocate PIC hard reg to PIC pseudo as PIC
962 pseudo will also have a wrong value. */
963 || (px == REAL_PIC_OFFSET_TABLE_REGNUM
964 && pic_offset_table_rtx != NULL_RTX
965 && REGNO (pic_offset_table_rtx) >= FIRST_PSEUDO_REGISTER)
966 #endif
968 make_hard_regno_born (px, false);
971 bool live_change_p = false;
972 /* Check if bb border live info was changed. */
973 unsigned int live_pseudos_num = 0;
974 EXECUTE_IF_SET_IN_BITMAP (df_get_live_in (bb),
975 FIRST_PSEUDO_REGISTER, j, bi)
977 live_pseudos_num++;
978 if (! sparseset_bit_p (pseudos_live, j))
980 live_change_p = true;
981 if (lra_dump_file != NULL)
982 fprintf (lra_dump_file,
983 " r%d is removed as live at bb%d start\n", j, bb->index);
984 break;
987 if (! live_change_p
988 && sparseset_cardinality (pseudos_live) != live_pseudos_num)
990 live_change_p = true;
991 if (lra_dump_file != NULL)
992 EXECUTE_IF_SET_IN_SPARSESET (pseudos_live, j)
993 if (! bitmap_bit_p (df_get_live_in (bb), j))
994 fprintf (lra_dump_file,
995 " r%d is added to live at bb%d start\n", j, bb->index);
997 /* See if we'll need an increment at the end of this basic block.
998 An increment is needed if the PSEUDOS_LIVE set is not empty,
999 to make sure the finish points are set up correctly. */
1000 need_curr_point_incr = (sparseset_cardinality (pseudos_live) > 0);
1002 EXECUTE_IF_SET_IN_SPARSESET (pseudos_live, i)
1003 mark_pseudo_dead (i, curr_point);
1005 EXECUTE_IF_SET_IN_BITMAP (df_get_live_in (bb), FIRST_PSEUDO_REGISTER, j, bi)
1007 if (sparseset_cardinality (pseudos_live_through_calls) == 0)
1008 break;
1009 if (sparseset_bit_p (pseudos_live_through_calls, j))
1010 check_pseudos_live_through_calls (j);
1013 if (need_curr_point_incr)
1014 next_program_point (curr_point, freq);
1016 return live_change_p;
1019 /* Compress pseudo live ranges by removing program points where
1020 nothing happens. Complexity of many algorithms in LRA is linear
1021 function of program points number. To speed up the code we try to
1022 minimize the number of the program points here. */
1023 static void
1024 remove_some_program_points_and_update_live_ranges (void)
1026 unsigned i;
1027 int n, max_regno;
1028 int *map;
1029 lra_live_range_t r, prev_r, next_r;
1030 sbitmap born_or_dead, born, dead;
1031 sbitmap_iterator sbi;
1032 bool born_p, dead_p, prev_born_p, prev_dead_p;
1034 born = sbitmap_alloc (lra_live_max_point);
1035 dead = sbitmap_alloc (lra_live_max_point);
1036 bitmap_clear (born);
1037 bitmap_clear (dead);
1038 max_regno = max_reg_num ();
1039 for (i = FIRST_PSEUDO_REGISTER; i < (unsigned) max_regno; i++)
1041 for (r = lra_reg_info[i].live_ranges; r != NULL; r = r->next)
1043 lra_assert (r->start <= r->finish);
1044 bitmap_set_bit (born, r->start);
1045 bitmap_set_bit (dead, r->finish);
1048 born_or_dead = sbitmap_alloc (lra_live_max_point);
1049 bitmap_ior (born_or_dead, born, dead);
1050 map = XCNEWVEC (int, lra_live_max_point);
1051 n = -1;
1052 prev_born_p = prev_dead_p = false;
1053 EXECUTE_IF_SET_IN_BITMAP (born_or_dead, 0, i, sbi)
1055 born_p = bitmap_bit_p (born, i);
1056 dead_p = bitmap_bit_p (dead, i);
1057 if ((prev_born_p && ! prev_dead_p && born_p && ! dead_p)
1058 || (prev_dead_p && ! prev_born_p && dead_p && ! born_p))
1060 map[i] = n;
1061 lra_point_freq[n] = MAX (lra_point_freq[n], lra_point_freq[i]);
1063 else
1065 map[i] = ++n;
1066 lra_point_freq[n] = lra_point_freq[i];
1068 prev_born_p = born_p;
1069 prev_dead_p = dead_p;
1071 sbitmap_free (born_or_dead);
1072 sbitmap_free (born);
1073 sbitmap_free (dead);
1074 n++;
1075 if (lra_dump_file != NULL)
1076 fprintf (lra_dump_file, "Compressing live ranges: from %d to %d - %d%%\n",
1077 lra_live_max_point, n, 100 * n / lra_live_max_point);
1078 if (n < lra_live_max_point)
1080 lra_live_max_point = n;
1081 for (i = FIRST_PSEUDO_REGISTER; i < (unsigned) max_regno; i++)
1083 for (prev_r = NULL, r = lra_reg_info[i].live_ranges;
1084 r != NULL;
1085 r = next_r)
1087 next_r = r->next;
1088 r->start = map[r->start];
1089 r->finish = map[r->finish];
1090 if (prev_r == NULL || prev_r->start > r->finish + 1)
1092 prev_r = r;
1093 continue;
1095 prev_r->start = r->start;
1096 prev_r->next = next_r;
1097 delete r;
1101 free (map);
1104 /* Print live ranges R to file F. */
1105 void
1106 lra_print_live_range_list (FILE *f, lra_live_range_t r)
1108 for (; r != NULL; r = r->next)
1109 fprintf (f, " [%d..%d]", r->start, r->finish);
1110 fprintf (f, "\n");
1113 DEBUG_FUNCTION void
1114 debug (lra_live_range &ref)
1116 lra_print_live_range_list (stderr, &ref);
1119 DEBUG_FUNCTION void
1120 debug (lra_live_range *ptr)
1122 if (ptr)
1123 debug (*ptr);
1124 else
1125 fprintf (stderr, "<nil>\n");
1128 /* Print live ranges R to stderr. */
1129 void
1130 lra_debug_live_range_list (lra_live_range_t r)
1132 lra_print_live_range_list (stderr, r);
1135 /* Print live ranges of pseudo REGNO to file F. */
1136 static void
1137 print_pseudo_live_ranges (FILE *f, int regno)
1139 if (lra_reg_info[regno].live_ranges == NULL)
1140 return;
1141 fprintf (f, " r%d:", regno);
1142 lra_print_live_range_list (f, lra_reg_info[regno].live_ranges);
1145 /* Print live ranges of pseudo REGNO to stderr. */
1146 void
1147 lra_debug_pseudo_live_ranges (int regno)
1149 print_pseudo_live_ranges (stderr, regno);
1152 /* Print live ranges of all pseudos to file F. */
1153 static void
1154 print_live_ranges (FILE *f)
1156 int i, max_regno;
1158 max_regno = max_reg_num ();
1159 for (i = FIRST_PSEUDO_REGISTER; i < max_regno; i++)
1160 print_pseudo_live_ranges (f, i);
1163 /* Print live ranges of all pseudos to stderr. */
1164 void
1165 lra_debug_live_ranges (void)
1167 print_live_ranges (stderr);
1170 /* Compress pseudo live ranges. */
1171 static void
1172 compress_live_ranges (void)
1174 remove_some_program_points_and_update_live_ranges ();
1175 if (lra_dump_file != NULL)
1177 fprintf (lra_dump_file, "Ranges after the compression:\n");
1178 print_live_ranges (lra_dump_file);
1184 /* The number of the current live range pass. */
1185 int lra_live_range_iter;
1187 /* The function creates live ranges only for memory pseudos (or for
1188 all ones if ALL_P), set up CONFLICT_HARD_REGS for the pseudos. It
1189 also does dead insn elimination if DEAD_INSN_P and global live
1190 analysis only for pseudos and only if the pseudo live info was
1191 changed on a BB border. Return TRUE if the live info was
1192 changed. */
1193 static bool
1194 lra_create_live_ranges_1 (bool all_p, bool dead_insn_p)
1196 basic_block bb;
1197 int i, hard_regno, max_regno = max_reg_num ();
1198 int curr_point;
1199 bool bb_live_change_p, have_referenced_pseudos = false;
1201 timevar_push (TV_LRA_CREATE_LIVE_RANGES);
1203 complete_info_p = all_p;
1204 if (lra_dump_file != NULL)
1205 fprintf (lra_dump_file,
1206 "\n********** Pseudo live ranges #%d: **********\n\n",
1207 ++lra_live_range_iter);
1208 memset (lra_hard_reg_usage, 0, sizeof (lra_hard_reg_usage));
1209 for (i = 0; i < max_regno; i++)
1211 lra_reg_info[i].live_ranges = NULL;
1212 CLEAR_HARD_REG_SET (lra_reg_info[i].conflict_hard_regs);
1213 lra_reg_info[i].preferred_hard_regno1 = -1;
1214 lra_reg_info[i].preferred_hard_regno2 = -1;
1215 lra_reg_info[i].preferred_hard_regno_profit1 = 0;
1216 lra_reg_info[i].preferred_hard_regno_profit2 = 0;
1217 #ifdef STACK_REGS
1218 lra_reg_info[i].no_stack_p = false;
1219 #endif
1220 /* The biggest mode is already set but its value might be to
1221 conservative because of recent transformation. Here in this
1222 file we recalculate it again as it costs practically
1223 nothing. */
1224 if (regno_reg_rtx[i] != NULL_RTX)
1225 lra_reg_info[i].biggest_mode = GET_MODE (regno_reg_rtx[i]);
1226 else
1227 lra_reg_info[i].biggest_mode = VOIDmode;
1228 #ifdef ENABLE_CHECKING
1229 lra_reg_info[i].call_p = false;
1230 #endif
1231 if (i >= FIRST_PSEUDO_REGISTER
1232 && lra_reg_info[i].nrefs != 0)
1234 if ((hard_regno = reg_renumber[i]) >= 0)
1235 lra_hard_reg_usage[hard_regno] += lra_reg_info[i].freq;
1236 have_referenced_pseudos = true;
1239 lra_free_copies ();
1241 /* Under some circumstances, we can have functions without pseudo
1242 registers. For such functions, lra_live_max_point will be 0,
1243 see e.g. PR55604, and there's nothing more to do for us here. */
1244 if (! have_referenced_pseudos)
1246 timevar_pop (TV_LRA_CREATE_LIVE_RANGES);
1247 return false;
1250 pseudos_live = sparseset_alloc (max_regno);
1251 pseudos_live_through_calls = sparseset_alloc (max_regno);
1252 pseudos_live_through_setjumps = sparseset_alloc (max_regno);
1253 start_living = sparseset_alloc (max_regno);
1254 start_dying = sparseset_alloc (max_regno);
1255 dead_set = sparseset_alloc (max_regno);
1256 unused_set = sparseset_alloc (max_regno);
1257 curr_point = 0;
1258 point_freq_vec.create (get_max_uid () * 2);
1259 lra_point_freq = point_freq_vec.address ();
1260 int *post_order_rev_cfg = XNEWVEC (int, last_basic_block_for_fn (cfun));
1261 int n_blocks_inverted = inverted_post_order_compute (post_order_rev_cfg);
1262 lra_assert (n_blocks_inverted == n_basic_blocks_for_fn (cfun));
1263 bb_live_change_p = false;
1264 for (i = n_blocks_inverted - 1; i >= 0; --i)
1266 bb = BASIC_BLOCK_FOR_FN (cfun, post_order_rev_cfg[i]);
1267 if (bb == EXIT_BLOCK_PTR_FOR_FN (cfun) || bb
1268 == ENTRY_BLOCK_PTR_FOR_FN (cfun))
1269 continue;
1270 if (process_bb_lives (bb, curr_point, dead_insn_p))
1271 bb_live_change_p = true;
1273 if (bb_live_change_p)
1275 /* We need to clear pseudo live info as some pseudos can
1276 disappear, e.g. pseudos with used equivalences. */
1277 FOR_EACH_BB_FN (bb, cfun)
1279 bitmap_clear_range (df_get_live_in (bb), FIRST_PSEUDO_REGISTER,
1280 max_regno - FIRST_PSEUDO_REGISTER);
1281 bitmap_clear_range (df_get_live_out (bb), FIRST_PSEUDO_REGISTER,
1282 max_regno - FIRST_PSEUDO_REGISTER);
1284 /* As we did not change CFG since LRA start we can use
1285 DF-infrastructure solver to solve live data flow problem. */
1286 df_simple_dataflow
1287 (DF_BACKWARD, NULL, live_con_fun_0, live_con_fun_n,
1288 live_trans_fun, &all_blocks,
1289 df_get_postorder (DF_BACKWARD), df_get_n_blocks (DF_BACKWARD));
1290 if (lra_dump_file != NULL)
1292 fprintf (lra_dump_file,
1293 "Global pseudo live data have been updated:\n");
1294 basic_block bb;
1295 FOR_EACH_BB_FN (bb, cfun)
1297 bb_data_t bb_info = get_bb_data (bb);
1298 bitmap bb_livein = df_get_live_in (bb);
1299 bitmap bb_liveout = df_get_live_out (bb);
1301 fprintf (lra_dump_file, "\nBB %d:\n", bb->index);
1302 lra_dump_bitmap_with_title (" gen:",
1303 &bb_info->gen_pseudos, bb->index);
1304 lra_dump_bitmap_with_title (" killed:",
1305 &bb_info->killed_pseudos, bb->index);
1306 lra_dump_bitmap_with_title (" livein:", bb_livein, bb->index);
1307 lra_dump_bitmap_with_title (" liveout:", bb_liveout, bb->index);
1311 free (post_order_rev_cfg);
1312 lra_live_max_point = curr_point;
1313 if (lra_dump_file != NULL)
1314 print_live_ranges (lra_dump_file);
1315 /* Clean up. */
1316 sparseset_free (unused_set);
1317 sparseset_free (dead_set);
1318 sparseset_free (start_dying);
1319 sparseset_free (start_living);
1320 sparseset_free (pseudos_live_through_calls);
1321 sparseset_free (pseudos_live_through_setjumps);
1322 sparseset_free (pseudos_live);
1323 compress_live_ranges ();
1324 timevar_pop (TV_LRA_CREATE_LIVE_RANGES);
1325 return bb_live_change_p;
1328 /* The main entry function creates live-ranges and other live info
1329 necessary for the assignment sub-pass. It uses
1330 lra_creates_live_ranges_1 -- so read comments for the
1331 function. */
1332 void
1333 lra_create_live_ranges (bool all_p, bool dead_insn_p)
1335 if (! lra_create_live_ranges_1 (all_p, dead_insn_p))
1336 return;
1337 if (lra_dump_file != NULL)
1338 fprintf (lra_dump_file, "Live info was changed -- recalculate it\n");
1339 /* Live info was changed on a bb border. It means that some info,
1340 e.g. about conflict regs, calls crossed, and live ranges may be
1341 wrong. We need this info for allocation. So recalculate it
1342 again but without removing dead insns which can change live info
1343 again. Repetitive live range calculations are expensive therefore
1344 we stop here as we already have correct info although some
1345 improvement in rare cases could be possible on this sub-pass if
1346 we do dead insn elimination again (still the improvement may
1347 happen later). */
1348 lra_clear_live_ranges ();
1349 bool res = lra_create_live_ranges_1 (all_p, false);
1350 lra_assert (! res);
1353 /* Finish all live ranges. */
1354 void
1355 lra_clear_live_ranges (void)
1357 int i;
1359 for (i = 0; i < max_reg_num (); i++)
1360 free_live_range_list (lra_reg_info[i].live_ranges);
1361 point_freq_vec.release ();
1364 /* Initialize live ranges data once per function. */
1365 void
1366 lra_live_ranges_init (void)
1368 bitmap_initialize (&temp_bitmap, &reg_obstack);
1369 initiate_live_solver ();
1372 /* Finish live ranges data once per function. */
1373 void
1374 lra_live_ranges_finish (void)
1376 finish_live_solver ();
1377 bitmap_clear (&temp_bitmap);
1378 lra_live_range::pool.release ();