match_asm_constraints: Use copy_rtx where needed (PR88001)
[official-gcc.git] / gcc / lra-lives.c
blobda47692c9041601c03eedbcd93a1881b7e51b0af
1 /* Build live ranges for pseudos.
2 Copyright (C) 2010-2018 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"
45 #include "target.h"
47 /* Program points are enumerated by numbers from range
48 0..LRA_LIVE_MAX_POINT-1. There are approximately two times more
49 program points than insns. Program points are places in the
50 program where liveness info can be changed. In most general case
51 (there are more complicated cases too) some program points
52 correspond to places where input operand dies and other ones
53 correspond to places where output operands are born. */
54 int lra_live_max_point;
56 /* Accumulated execution frequency of all references for each hard
57 register. */
58 int lra_hard_reg_usage[FIRST_PSEUDO_REGISTER];
60 /* A global flag whose true value says to build live ranges for all
61 pseudos, otherwise the live ranges only for pseudos got memory is
62 build. True value means also building copies and setting up hard
63 register preferences. The complete info is necessary only for the
64 assignment pass. The complete info is not needed for the
65 coalescing and spill passes. */
66 static bool complete_info_p;
68 /* Pseudos live at current point in the RTL scan. */
69 static sparseset pseudos_live;
71 /* Pseudos probably living through calls and setjumps. As setjump is
72 a call too, if a bit in PSEUDOS_LIVE_THROUGH_SETJUMPS is set up
73 then the corresponding bit in PSEUDOS_LIVE_THROUGH_CALLS is set up
74 too. These data are necessary for cases when only one subreg of a
75 multi-reg pseudo is set up after a call. So we decide it is
76 probably live when traversing bb backward. We are sure about
77 living when we see its usage or definition of the pseudo. */
78 static sparseset pseudos_live_through_calls;
79 static sparseset pseudos_live_through_setjumps;
81 /* Set of hard regs (except eliminable ones) currently live. */
82 static HARD_REG_SET hard_regs_live;
84 /* Set of pseudos and hard registers start living/dying in the current
85 insn. These sets are used to update REG_DEAD and REG_UNUSED notes
86 in the insn. */
87 static sparseset start_living, start_dying;
89 /* Set of pseudos and hard regs dead and unused in the current
90 insn. */
91 static sparseset unused_set, dead_set;
93 /* Bitmap used for holding intermediate bitmap operation results. */
94 static bitmap_head temp_bitmap;
96 /* Pool for pseudo live ranges. */
97 static object_allocator<lra_live_range> lra_live_range_pool ("live ranges");
99 /* Free live range list LR. */
100 static void
101 free_live_range_list (lra_live_range_t lr)
103 lra_live_range_t next;
105 while (lr != NULL)
107 next = lr->next;
108 lra_live_range_pool.remove (lr);
109 lr = next;
113 /* Create and return pseudo live range with given attributes. */
114 static lra_live_range_t
115 create_live_range (int regno, int start, int finish, lra_live_range_t next)
117 lra_live_range_t p = lra_live_range_pool.allocate ();
118 p->regno = regno;
119 p->start = start;
120 p->finish = finish;
121 p->next = next;
122 return p;
125 /* Copy live range R and return the result. */
126 static lra_live_range_t
127 copy_live_range (lra_live_range_t r)
129 return new (lra_live_range_pool) lra_live_range (*r);
132 /* Copy live range list given by its head R and return the result. */
133 lra_live_range_t
134 lra_copy_live_range_list (lra_live_range_t r)
136 lra_live_range_t p, first, *chain;
138 first = NULL;
139 for (chain = &first; r != NULL; r = r->next)
141 p = copy_live_range (r);
142 *chain = p;
143 chain = &p->next;
145 return first;
148 /* Merge *non-intersected* ranges R1 and R2 and returns the result.
149 The function maintains the order of ranges and tries to minimize
150 size of the result range list. Ranges R1 and R2 may not be used
151 after the call. */
152 lra_live_range_t
153 lra_merge_live_ranges (lra_live_range_t r1, lra_live_range_t r2)
155 lra_live_range_t first, last;
157 if (r1 == NULL)
158 return r2;
159 if (r2 == NULL)
160 return r1;
161 for (first = last = NULL; r1 != NULL && r2 != NULL;)
163 if (r1->start < r2->start)
164 std::swap (r1, r2);
166 if (r1->start == r2->finish + 1)
168 /* Joint ranges: merge r1 and r2 into r1. */
169 r1->start = r2->start;
170 lra_live_range_t temp = r2;
171 r2 = r2->next;
172 lra_live_range_pool.remove (temp);
174 else
176 gcc_assert (r2->finish + 1 < r1->start);
177 /* Add r1 to the result. */
178 if (first == NULL)
179 first = last = r1;
180 else
182 last->next = r1;
183 last = r1;
185 r1 = r1->next;
188 if (r1 != NULL)
190 if (first == NULL)
191 first = r1;
192 else
193 last->next = r1;
195 else
197 lra_assert (r2 != NULL);
198 if (first == NULL)
199 first = r2;
200 else
201 last->next = r2;
203 return first;
206 /* Return TRUE if live ranges R1 and R2 intersect. */
207 bool
208 lra_intersected_live_ranges_p (lra_live_range_t r1, lra_live_range_t r2)
210 /* Remember the live ranges are always kept ordered. */
211 while (r1 != NULL && r2 != NULL)
213 if (r1->start > r2->finish)
214 r1 = r1->next;
215 else if (r2->start > r1->finish)
216 r2 = r2->next;
217 else
218 return true;
220 return false;
223 enum point_type {
224 DEF_POINT,
225 USE_POINT
228 /* Return TRUE if set A contains a pseudo register, otherwise, return FALSE. */
229 static bool
230 sparseset_contains_pseudos_p (sparseset a)
232 int regno;
233 EXECUTE_IF_SET_IN_SPARSESET (a, regno)
234 if (!HARD_REGISTER_NUM_P (regno))
235 return true;
236 return false;
239 /* Mark pseudo REGNO as living or dying at program point POINT, depending on
240 whether TYPE is a definition or a use. If this is the first reference to
241 REGNO that we've encountered, then create a new live range for it. */
243 static void
244 update_pseudo_point (int regno, int point, enum point_type type)
246 lra_live_range_t p;
248 /* Don't compute points for hard registers. */
249 if (HARD_REGISTER_NUM_P (regno))
250 return;
252 if (complete_info_p || lra_get_regno_hard_regno (regno) < 0)
254 if (type == DEF_POINT)
256 if (sparseset_bit_p (pseudos_live, regno))
258 p = lra_reg_info[regno].live_ranges;
259 lra_assert (p != NULL);
260 p->finish = point;
263 else /* USE_POINT */
265 if (!sparseset_bit_p (pseudos_live, regno)
266 && ((p = lra_reg_info[regno].live_ranges) == NULL
267 || (p->finish != point && p->finish + 1 != point)))
268 lra_reg_info[regno].live_ranges
269 = create_live_range (regno, point, -1, p);
274 /* The corresponding bitmaps of BB currently being processed. */
275 static bitmap bb_killed_pseudos, bb_gen_pseudos;
277 /* Record hard register REGNO as now being live. It updates
278 living hard regs and START_LIVING. */
279 static void
280 make_hard_regno_live (int regno)
282 lra_assert (HARD_REGISTER_NUM_P (regno));
283 if (TEST_HARD_REG_BIT (hard_regs_live, regno))
284 return;
285 SET_HARD_REG_BIT (hard_regs_live, regno);
286 sparseset_set_bit (start_living, regno);
287 if (fixed_regs[regno] || TEST_HARD_REG_BIT (hard_regs_spilled_into, regno))
288 bitmap_set_bit (bb_gen_pseudos, regno);
291 /* Process the definition of hard register REGNO. This updates
292 hard_regs_live, START_DYING and conflict hard regs for living
293 pseudos. */
294 static void
295 make_hard_regno_dead (int regno)
297 lra_assert (HARD_REGISTER_NUM_P (regno));
298 unsigned int i;
299 EXECUTE_IF_SET_IN_SPARSESET (pseudos_live, i)
300 SET_HARD_REG_BIT (lra_reg_info[i].conflict_hard_regs, regno);
302 if (! TEST_HARD_REG_BIT (hard_regs_live, regno))
303 return;
304 CLEAR_HARD_REG_BIT (hard_regs_live, regno);
305 sparseset_set_bit (start_dying, regno);
306 if (fixed_regs[regno] || TEST_HARD_REG_BIT (hard_regs_spilled_into, regno))
308 bitmap_clear_bit (bb_gen_pseudos, regno);
309 bitmap_set_bit (bb_killed_pseudos, regno);
313 /* Mark pseudo REGNO as now being live and update START_LIVING. */
314 static void
315 mark_pseudo_live (int regno)
317 lra_assert (!HARD_REGISTER_NUM_P (regno));
318 if (sparseset_bit_p (pseudos_live, regno))
319 return;
321 sparseset_set_bit (pseudos_live, regno);
322 sparseset_set_bit (start_living, regno);
325 /* Mark pseudo REGNO as now being dead and update START_DYING. */
326 static void
327 mark_pseudo_dead (int regno)
329 lra_assert (!HARD_REGISTER_NUM_P (regno));
330 IOR_HARD_REG_SET (lra_reg_info[regno].conflict_hard_regs, hard_regs_live);
331 if (!sparseset_bit_p (pseudos_live, regno))
332 return;
334 sparseset_clear_bit (pseudos_live, regno);
335 sparseset_set_bit (start_dying, regno);
338 /* Mark register REGNO (pseudo or hard register) in MODE as being live
339 and update BB_GEN_PSEUDOS. */
340 static void
341 mark_regno_live (int regno, machine_mode mode)
343 int last;
345 if (HARD_REGISTER_NUM_P (regno))
347 for (last = end_hard_regno (mode, regno); regno < last; regno++)
348 make_hard_regno_live (regno);
350 else
352 mark_pseudo_live (regno);
353 bitmap_set_bit (bb_gen_pseudos, regno);
358 /* Mark register REGNO (pseudo or hard register) in MODE as being dead
359 and update BB_GEN_PSEUDOS and BB_KILLED_PSEUDOS. */
360 static void
361 mark_regno_dead (int regno, machine_mode mode)
363 int last;
365 if (HARD_REGISTER_NUM_P (regno))
367 for (last = end_hard_regno (mode, regno); regno < last; regno++)
368 make_hard_regno_dead (regno);
370 else
372 mark_pseudo_dead (regno);
373 bitmap_clear_bit (bb_gen_pseudos, regno);
374 bitmap_set_bit (bb_killed_pseudos, regno);
380 /* This page contains code for making global live analysis of pseudos.
381 The code works only when pseudo live info is changed on a BB
382 border. That might be a consequence of some global transformations
383 in LRA, e.g. PIC pseudo reuse or rematerialization. */
385 /* Structure describing local BB data used for pseudo
386 live-analysis. */
387 struct bb_data_pseudos
389 /* Basic block about which the below data are. */
390 basic_block bb;
391 bitmap_head killed_pseudos; /* pseudos killed in the BB. */
392 bitmap_head gen_pseudos; /* pseudos generated in the BB. */
395 /* Array for all BB data. Indexed by the corresponding BB index. */
396 typedef struct bb_data_pseudos *bb_data_t;
398 /* All basic block data are referred through the following array. */
399 static bb_data_t bb_data;
401 /* Two small functions for access to the bb data. */
402 static inline bb_data_t
403 get_bb_data (basic_block bb)
405 return &bb_data[(bb)->index];
408 static inline bb_data_t
409 get_bb_data_by_index (int index)
411 return &bb_data[index];
414 /* Bitmap with all hard regs. */
415 static bitmap_head all_hard_regs_bitmap;
417 /* The transfer function used by the DF equation solver to propagate
418 live info through block with BB_INDEX according to the following
419 equation:
421 bb.livein = (bb.liveout - bb.kill) OR bb.gen
423 static bool
424 live_trans_fun (int bb_index)
426 basic_block bb = get_bb_data_by_index (bb_index)->bb;
427 bitmap bb_liveout = df_get_live_out (bb);
428 bitmap bb_livein = df_get_live_in (bb);
429 bb_data_t bb_info = get_bb_data (bb);
431 bitmap_and_compl (&temp_bitmap, bb_liveout, &all_hard_regs_bitmap);
432 return bitmap_ior_and_compl (bb_livein, &bb_info->gen_pseudos,
433 &temp_bitmap, &bb_info->killed_pseudos);
436 /* The confluence function used by the DF equation solver to set up
437 live info for a block BB without predecessor. */
438 static void
439 live_con_fun_0 (basic_block bb)
441 bitmap_and_into (df_get_live_out (bb), &all_hard_regs_bitmap);
444 /* The confluence function used by the DF equation solver to propagate
445 live info from successor to predecessor on edge E according to the
446 following equation:
448 bb.liveout = 0 for entry block | OR (livein of successors)
450 static bool
451 live_con_fun_n (edge e)
453 basic_block bb = e->src;
454 basic_block dest = e->dest;
455 bitmap bb_liveout = df_get_live_out (bb);
456 bitmap dest_livein = df_get_live_in (dest);
458 return bitmap_ior_and_compl_into (bb_liveout,
459 dest_livein, &all_hard_regs_bitmap);
462 /* Indexes of all function blocks. */
463 static bitmap_head all_blocks;
465 /* Allocate and initialize data needed for global pseudo live
466 analysis. */
467 static void
468 initiate_live_solver (void)
470 bitmap_initialize (&all_hard_regs_bitmap, &reg_obstack);
471 bitmap_set_range (&all_hard_regs_bitmap, 0, FIRST_PSEUDO_REGISTER);
472 bb_data = XNEWVEC (struct bb_data_pseudos, last_basic_block_for_fn (cfun));
473 bitmap_initialize (&all_blocks, &reg_obstack);
475 basic_block bb;
476 FOR_ALL_BB_FN (bb, cfun)
478 bb_data_t bb_info = get_bb_data (bb);
479 bb_info->bb = bb;
480 bitmap_initialize (&bb_info->killed_pseudos, &reg_obstack);
481 bitmap_initialize (&bb_info->gen_pseudos, &reg_obstack);
482 bitmap_set_bit (&all_blocks, bb->index);
486 /* Free all data needed for global pseudo live analysis. */
487 static void
488 finish_live_solver (void)
490 basic_block bb;
492 bitmap_clear (&all_blocks);
493 FOR_ALL_BB_FN (bb, cfun)
495 bb_data_t bb_info = get_bb_data (bb);
496 bitmap_clear (&bb_info->killed_pseudos);
497 bitmap_clear (&bb_info->gen_pseudos);
499 free (bb_data);
500 bitmap_clear (&all_hard_regs_bitmap);
505 /* Insn currently scanned. */
506 static rtx_insn *curr_insn;
507 /* The insn data. */
508 static lra_insn_recog_data_t curr_id;
509 /* The insn static data. */
510 static struct lra_static_insn_data *curr_static_id;
512 /* Vec containing execution frequencies of program points. */
513 static vec<int> point_freq_vec;
515 /* The start of the above vector elements. */
516 int *lra_point_freq;
518 /* Increment the current program point POINT to the next point which has
519 execution frequency FREQ. */
520 static void
521 next_program_point (int &point, int freq)
523 point_freq_vec.safe_push (freq);
524 lra_point_freq = point_freq_vec.address ();
525 point++;
528 /* Update the preference of HARD_REGNO for pseudo REGNO by PROFIT. */
529 void
530 lra_setup_reload_pseudo_preferenced_hard_reg (int regno,
531 int hard_regno, int profit)
533 lra_assert (regno >= lra_constraint_new_regno_start);
534 if (lra_reg_info[regno].preferred_hard_regno1 == hard_regno)
535 lra_reg_info[regno].preferred_hard_regno_profit1 += profit;
536 else if (lra_reg_info[regno].preferred_hard_regno2 == hard_regno)
537 lra_reg_info[regno].preferred_hard_regno_profit2 += profit;
538 else if (lra_reg_info[regno].preferred_hard_regno1 < 0)
540 lra_reg_info[regno].preferred_hard_regno1 = hard_regno;
541 lra_reg_info[regno].preferred_hard_regno_profit1 = profit;
543 else if (lra_reg_info[regno].preferred_hard_regno2 < 0
544 || profit > lra_reg_info[regno].preferred_hard_regno_profit2)
546 lra_reg_info[regno].preferred_hard_regno2 = hard_regno;
547 lra_reg_info[regno].preferred_hard_regno_profit2 = profit;
549 else
550 return;
551 /* Keep the 1st hard regno as more profitable. */
552 if (lra_reg_info[regno].preferred_hard_regno1 >= 0
553 && lra_reg_info[regno].preferred_hard_regno2 >= 0
554 && (lra_reg_info[regno].preferred_hard_regno_profit2
555 > lra_reg_info[regno].preferred_hard_regno_profit1))
557 std::swap (lra_reg_info[regno].preferred_hard_regno1,
558 lra_reg_info[regno].preferred_hard_regno2);
559 std::swap (lra_reg_info[regno].preferred_hard_regno_profit1,
560 lra_reg_info[regno].preferred_hard_regno_profit2);
562 if (lra_dump_file != NULL)
564 if ((hard_regno = lra_reg_info[regno].preferred_hard_regno1) >= 0)
565 fprintf (lra_dump_file,
566 " Hard reg %d is preferable by r%d with profit %d\n",
567 hard_regno, regno,
568 lra_reg_info[regno].preferred_hard_regno_profit1);
569 if ((hard_regno = lra_reg_info[regno].preferred_hard_regno2) >= 0)
570 fprintf (lra_dump_file,
571 " Hard reg %d is preferable by r%d with profit %d\n",
572 hard_regno, regno,
573 lra_reg_info[regno].preferred_hard_regno_profit2);
577 /* Check that REGNO living through calls and setjumps, set up conflict
578 regs using LAST_CALL_USED_REG_SET, and clear corresponding bits in
579 PSEUDOS_LIVE_THROUGH_CALLS and PSEUDOS_LIVE_THROUGH_SETJUMPS. */
580 static inline void
581 check_pseudos_live_through_calls (int regno,
582 HARD_REG_SET last_call_used_reg_set)
584 int hr;
586 if (! sparseset_bit_p (pseudos_live_through_calls, regno))
587 return;
588 sparseset_clear_bit (pseudos_live_through_calls, regno);
589 IOR_HARD_REG_SET (lra_reg_info[regno].conflict_hard_regs,
590 last_call_used_reg_set);
592 for (hr = 0; HARD_REGISTER_NUM_P (hr); hr++)
593 if (targetm.hard_regno_call_part_clobbered (hr,
594 PSEUDO_REGNO_MODE (regno)))
595 add_to_hard_reg_set (&lra_reg_info[regno].conflict_hard_regs,
596 PSEUDO_REGNO_MODE (regno), hr);
597 lra_reg_info[regno].call_p = true;
598 if (! sparseset_bit_p (pseudos_live_through_setjumps, regno))
599 return;
600 sparseset_clear_bit (pseudos_live_through_setjumps, regno);
601 /* Don't allocate pseudos that cross setjmps or any call, if this
602 function receives a nonlocal goto. */
603 SET_HARD_REG_SET (lra_reg_info[regno].conflict_hard_regs);
606 /* Return true if insn REG is an early clobber operand in alternative
607 NALT. Negative NALT means that we don't know the current insn
608 alternative. So assume the worst. */
609 static inline bool
610 reg_early_clobber_p (const struct lra_insn_reg *reg, int n_alt)
612 return (reg->early_clobber
613 && (n_alt == LRA_UNKNOWN_ALT
614 || (n_alt != LRA_NON_CLOBBERED_ALT
615 && TEST_BIT (reg->early_clobber_alts, n_alt))));
618 /* Process insns of the basic block BB to update pseudo live ranges,
619 pseudo hard register conflicts, and insn notes. We do it on
620 backward scan of BB insns. CURR_POINT is the program point where
621 BB ends. The function updates this counter and returns in
622 CURR_POINT the program point where BB starts. The function also
623 does local live info updates and can delete the dead insns if
624 DEAD_INSN_P. It returns true if pseudo live info was
625 changed at the BB start. */
626 static bool
627 process_bb_lives (basic_block bb, int &curr_point, bool dead_insn_p)
629 int i, regno, freq;
630 unsigned int j;
631 bitmap_iterator bi;
632 bitmap reg_live_out;
633 unsigned int px;
634 rtx_insn *next;
635 rtx link, *link_loc;
636 bool need_curr_point_incr;
637 HARD_REG_SET last_call_used_reg_set;
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 CLEAR_HARD_REG_SET (last_call_used_reg_set);
644 REG_SET_TO_HARD_REG_SET (hard_regs_live, reg_live_out);
645 AND_COMPL_HARD_REG_SET (hard_regs_live, eliminable_regset);
646 EXECUTE_IF_SET_IN_BITMAP (reg_live_out, FIRST_PSEUDO_REGISTER, j, bi)
648 update_pseudo_point (j, curr_point, USE_POINT);
649 mark_pseudo_live (j);
652 bb_gen_pseudos = &get_bb_data (bb)->gen_pseudos;
653 bb_killed_pseudos = &get_bb_data (bb)->killed_pseudos;
654 bitmap_clear (bb_gen_pseudos);
655 bitmap_clear (bb_killed_pseudos);
656 freq = REG_FREQ_FROM_BB (bb);
658 if (lra_dump_file != NULL)
659 fprintf (lra_dump_file, " BB %d\n", bb->index);
661 /* Scan the code of this basic block, noting which pseudos and hard
662 regs are born or die.
664 Note that this loop treats uninitialized values as live until the
665 beginning of the block. For example, if an instruction uses
666 (reg:DI foo), and only (subreg:SI (reg:DI foo) 0) is ever set,
667 FOO will remain live until the beginning of the block. Likewise
668 if FOO is not set at all. This is unnecessarily pessimistic, but
669 it probably doesn't matter much in practice. */
670 FOR_BB_INSNS_REVERSE_SAFE (bb, curr_insn, next)
672 bool call_p;
673 int n_alt, dst_regno, src_regno;
674 rtx set;
675 struct lra_insn_reg *reg, *hr;
677 if (!NONDEBUG_INSN_P (curr_insn))
678 continue;
680 curr_id = lra_get_insn_recog_data (curr_insn);
681 curr_static_id = curr_id->insn_static_data;
682 n_alt = curr_id->used_insn_alternative;
683 if (lra_dump_file != NULL)
684 fprintf (lra_dump_file, " Insn %u: point = %d, n_alt = %d\n",
685 INSN_UID (curr_insn), curr_point, n_alt);
687 set = single_set (curr_insn);
689 if (dead_insn_p && set != NULL_RTX
690 && REG_P (SET_DEST (set)) && !HARD_REGISTER_P (SET_DEST (set))
691 && find_reg_note (curr_insn, REG_EH_REGION, NULL_RTX) == NULL_RTX
692 && ! may_trap_p (PATTERN (curr_insn))
693 /* Don't do premature remove of pic offset pseudo as we can
694 start to use it after some reload generation. */
695 && (pic_offset_table_rtx == NULL_RTX
696 || pic_offset_table_rtx != SET_DEST (set)))
698 bool remove_p = true;
700 for (reg = curr_id->regs; reg != NULL; reg = reg->next)
701 if (reg->type != OP_IN && sparseset_bit_p (pseudos_live, reg->regno))
703 remove_p = false;
704 break;
706 for (reg = curr_static_id->hard_regs; reg != NULL; reg = reg->next)
707 if (reg->type != OP_IN && !reg->clobber_high)
709 remove_p = false;
710 break;
713 if (remove_p && ! volatile_refs_p (PATTERN (curr_insn)))
715 dst_regno = REGNO (SET_DEST (set));
716 if (lra_dump_file != NULL)
717 fprintf (lra_dump_file, " Deleting dead insn %u\n",
718 INSN_UID (curr_insn));
719 lra_set_insn_deleted (curr_insn);
720 if (lra_reg_info[dst_regno].nrefs == 0)
722 /* There might be some debug insns with the pseudo. */
723 unsigned int uid;
724 rtx_insn *insn;
726 bitmap_copy (&temp_bitmap, &lra_reg_info[dst_regno].insn_bitmap);
727 EXECUTE_IF_SET_IN_BITMAP (&temp_bitmap, 0, uid, bi)
729 insn = lra_insn_recog_data[uid]->insn;
730 lra_substitute_pseudo_within_insn (insn, dst_regno,
731 SET_SRC (set), true);
732 lra_update_insn_regno_info (insn);
735 continue;
739 /* Update max ref width and hard reg usage. */
740 for (reg = curr_id->regs; reg != NULL; reg = reg->next)
742 int i, regno = reg->regno;
744 if (partial_subreg_p (lra_reg_info[regno].biggest_mode,
745 reg->biggest_mode))
746 lra_reg_info[regno].biggest_mode = reg->biggest_mode;
747 if (HARD_REGISTER_NUM_P (regno))
749 lra_hard_reg_usage[regno] += freq;
750 /* A hard register explicitly can be used in small mode,
751 but implicitly it can be used in natural mode as a
752 part of multi-register group. Process this case
753 here. */
754 for (i = 1; i < hard_regno_nregs (regno, reg->biggest_mode); i++)
755 if (partial_subreg_p (lra_reg_info[regno + i].biggest_mode,
756 GET_MODE (regno_reg_rtx[regno + i])))
757 lra_reg_info[regno + i].biggest_mode
758 = GET_MODE (regno_reg_rtx[regno + i]);
762 call_p = CALL_P (curr_insn);
764 /* If we have a simple register copy and the source reg is live after
765 this instruction, then remove the source reg from the live set so
766 that it will not conflict with the destination reg. */
767 rtx ignore_reg = non_conflicting_reg_copy_p (curr_insn);
768 if (ignore_reg != NULL_RTX)
770 int ignore_regno = REGNO (ignore_reg);
771 if (HARD_REGISTER_NUM_P (ignore_regno)
772 && TEST_HARD_REG_BIT (hard_regs_live, ignore_regno))
773 CLEAR_HARD_REG_BIT (hard_regs_live, ignore_regno);
774 else if (!HARD_REGISTER_NUM_P (ignore_regno)
775 && sparseset_bit_p (pseudos_live, ignore_regno))
776 sparseset_clear_bit (pseudos_live, ignore_regno);
777 else
778 /* We don't need any special handling of the source reg if
779 it is dead after this instruction. */
780 ignore_reg = NULL_RTX;
783 src_regno = (set != NULL_RTX && REG_P (SET_SRC (set))
784 ? REGNO (SET_SRC (set)) : -1);
785 dst_regno = (set != NULL_RTX && REG_P (SET_DEST (set))
786 ? REGNO (SET_DEST (set)) : -1);
787 if (complete_info_p
788 && src_regno >= 0 && dst_regno >= 0
789 /* Check that source regno does not conflict with
790 destination regno to exclude most impossible
791 preferences. */
792 && (((!HARD_REGISTER_NUM_P (src_regno)
793 && (! sparseset_bit_p (pseudos_live, src_regno)
794 || (!HARD_REGISTER_NUM_P (dst_regno)
795 && lra_reg_val_equal_p (src_regno,
796 lra_reg_info[dst_regno].val,
797 lra_reg_info[dst_regno].offset))))
798 || (HARD_REGISTER_NUM_P (src_regno)
799 && ! TEST_HARD_REG_BIT (hard_regs_live, src_regno)))
800 /* It might be 'inheritance pseudo <- reload pseudo'. */
801 || (src_regno >= lra_constraint_new_regno_start
802 && dst_regno >= lra_constraint_new_regno_start
803 /* Remember to skip special cases where src/dest regnos are
804 the same, e.g. insn SET pattern has matching constraints
805 like =r,0. */
806 && src_regno != dst_regno)))
808 int hard_regno = -1, regno = -1;
810 if (dst_regno >= lra_constraint_new_regno_start
811 && src_regno >= lra_constraint_new_regno_start)
813 /* It might be still an original (non-reload) insn with
814 one unused output and a constraint requiring to use
815 the same reg for input/output operands. In this case
816 dst_regno and src_regno have the same value, we don't
817 need a misleading copy for this case. */
818 if (dst_regno != src_regno)
819 lra_create_copy (dst_regno, src_regno, freq);
821 else if (dst_regno >= lra_constraint_new_regno_start)
823 if (!HARD_REGISTER_NUM_P (hard_regno = src_regno))
824 hard_regno = reg_renumber[src_regno];
825 regno = dst_regno;
827 else if (src_regno >= lra_constraint_new_regno_start)
829 if (!HARD_REGISTER_NUM_P (hard_regno = dst_regno))
830 hard_regno = reg_renumber[dst_regno];
831 regno = src_regno;
833 if (regno >= 0 && hard_regno >= 0)
834 lra_setup_reload_pseudo_preferenced_hard_reg
835 (regno, hard_regno, freq);
838 sparseset_clear (start_living);
840 /* Mark each defined value as live. We need to do this for
841 unused values because they still conflict with quantities
842 that are live at the time of the definition. */
843 for (reg = curr_id->regs; reg != NULL; reg = reg->next)
845 if (reg->type != OP_IN)
847 update_pseudo_point (reg->regno, curr_point, USE_POINT);
848 mark_regno_live (reg->regno, reg->biggest_mode);
849 check_pseudos_live_through_calls (reg->regno,
850 last_call_used_reg_set);
853 if (!HARD_REGISTER_NUM_P (reg->regno))
854 for (hr = curr_static_id->hard_regs; hr != NULL; hr = hr->next)
855 if (hr->clobber_high
856 && maybe_gt (GET_MODE_SIZE (PSEUDO_REGNO_MODE (reg->regno)),
857 GET_MODE_SIZE (hr->biggest_mode)))
858 SET_HARD_REG_BIT (lra_reg_info[reg->regno].conflict_hard_regs,
859 hr->regno);
862 for (reg = curr_static_id->hard_regs; reg != NULL; reg = reg->next)
863 if (reg->type != OP_IN)
864 make_hard_regno_live (reg->regno);
866 if (curr_id->arg_hard_regs != NULL)
867 for (i = 0; (regno = curr_id->arg_hard_regs[i]) >= 0; i++)
868 if (!HARD_REGISTER_NUM_P (regno))
869 /* It is a clobber. */
870 make_hard_regno_live (regno - FIRST_PSEUDO_REGISTER);
872 sparseset_copy (unused_set, start_living);
874 sparseset_clear (start_dying);
876 /* See which defined values die here. */
877 for (reg = curr_id->regs; reg != NULL; reg = reg->next)
878 if (reg->type != OP_IN
879 && ! reg_early_clobber_p (reg, n_alt) && ! reg->subreg_p)
881 if (reg->type == OP_OUT)
882 update_pseudo_point (reg->regno, curr_point, DEF_POINT);
883 mark_regno_dead (reg->regno, reg->biggest_mode);
886 for (reg = curr_static_id->hard_regs; reg != NULL; reg = reg->next)
887 if (reg->type != OP_IN
888 && ! reg_early_clobber_p (reg, n_alt) && ! reg->subreg_p)
889 make_hard_regno_dead (reg->regno);
891 if (curr_id->arg_hard_regs != NULL)
892 for (i = 0; (regno = curr_id->arg_hard_regs[i]) >= 0; i++)
893 if (!HARD_REGISTER_NUM_P (regno))
894 /* It is a clobber. */
895 make_hard_regno_dead (regno - FIRST_PSEUDO_REGISTER);
897 if (call_p)
899 if (! flag_ipa_ra)
900 COPY_HARD_REG_SET(last_call_used_reg_set, call_used_reg_set);
901 else
903 HARD_REG_SET this_call_used_reg_set;
904 get_call_reg_set_usage (curr_insn, &this_call_used_reg_set,
905 call_used_reg_set);
907 bool flush = (! hard_reg_set_empty_p (last_call_used_reg_set)
908 && ! hard_reg_set_equal_p (last_call_used_reg_set,
909 this_call_used_reg_set));
911 EXECUTE_IF_SET_IN_SPARSESET (pseudos_live, j)
913 IOR_HARD_REG_SET (lra_reg_info[j].actual_call_used_reg_set,
914 this_call_used_reg_set);
915 if (flush)
916 check_pseudos_live_through_calls
917 (j, last_call_used_reg_set);
919 COPY_HARD_REG_SET(last_call_used_reg_set, this_call_used_reg_set);
922 sparseset_ior (pseudos_live_through_calls,
923 pseudos_live_through_calls, pseudos_live);
924 if (cfun->has_nonlocal_label
925 || (!targetm.setjmp_preserves_nonvolatile_regs_p ()
926 && (find_reg_note (curr_insn, REG_SETJMP, NULL_RTX)
927 != NULL_RTX)))
928 sparseset_ior (pseudos_live_through_setjumps,
929 pseudos_live_through_setjumps, pseudos_live);
932 /* Increment the current program point if we must. */
933 if (sparseset_contains_pseudos_p (unused_set)
934 || sparseset_contains_pseudos_p (start_dying))
935 next_program_point (curr_point, freq);
937 /* If we removed the source reg from a simple register copy from the
938 live set above, then add it back now so we don't accidentally add
939 it to the start_living set below. */
940 if (ignore_reg != NULL_RTX)
942 int ignore_regno = REGNO (ignore_reg);
943 if (HARD_REGISTER_NUM_P (ignore_regno))
944 SET_HARD_REG_BIT (hard_regs_live, ignore_regno);
945 else
946 sparseset_set_bit (pseudos_live, ignore_regno);
949 sparseset_clear (start_living);
951 /* Mark each used value as live. */
952 for (reg = curr_id->regs; reg != NULL; reg = reg->next)
953 if (reg->type != OP_OUT)
955 if (reg->type == OP_IN)
956 update_pseudo_point (reg->regno, curr_point, USE_POINT);
957 mark_regno_live (reg->regno, reg->biggest_mode);
958 check_pseudos_live_through_calls (reg->regno,
959 last_call_used_reg_set);
962 for (reg = curr_static_id->hard_regs; reg != NULL; reg = reg->next)
963 if (reg->type != OP_OUT)
964 make_hard_regno_live (reg->regno);
966 if (curr_id->arg_hard_regs != NULL)
967 /* Make argument hard registers live. */
968 for (i = 0; (regno = curr_id->arg_hard_regs[i]) >= 0; i++)
969 if (HARD_REGISTER_NUM_P (regno))
970 make_hard_regno_live (regno);
972 sparseset_and_compl (dead_set, start_living, start_dying);
974 sparseset_clear (start_dying);
976 /* Mark early clobber outputs dead. */
977 for (reg = curr_id->regs; reg != NULL; reg = reg->next)
978 if (reg->type != OP_IN
979 && reg_early_clobber_p (reg, n_alt) && ! reg->subreg_p)
981 if (reg->type == OP_OUT)
982 update_pseudo_point (reg->regno, curr_point, DEF_POINT);
983 mark_regno_dead (reg->regno, reg->biggest_mode);
985 /* We're done processing inputs, so make sure early clobber
986 operands that are both inputs and outputs are still live. */
987 if (reg->type == OP_INOUT)
988 mark_regno_live (reg->regno, reg->biggest_mode);
991 for (reg = curr_static_id->hard_regs; reg != NULL; reg = reg->next)
992 if (reg->type != OP_IN
993 && reg_early_clobber_p (reg, n_alt) && ! reg->subreg_p)
995 struct lra_insn_reg *reg2;
997 /* We can have early clobbered non-operand hard reg and
998 the same hard reg as an insn input. Don't make hard
999 reg dead before the insns. */
1000 for (reg2 = curr_id->regs; reg2 != NULL; reg2 = reg2->next)
1001 if (reg2->type != OP_OUT && reg2->regno == reg->regno)
1002 break;
1003 if (reg2 == NULL)
1004 make_hard_regno_dead (reg->regno);
1007 /* Increment the current program point if we must. */
1008 if (sparseset_contains_pseudos_p (dead_set)
1009 || sparseset_contains_pseudos_p (start_dying))
1010 next_program_point (curr_point, freq);
1012 /* Update notes. */
1013 for (link_loc = &REG_NOTES (curr_insn); (link = *link_loc) != NULL_RTX;)
1015 if (REG_NOTE_KIND (link) != REG_DEAD
1016 && REG_NOTE_KIND (link) != REG_UNUSED)
1018 else if (REG_P (XEXP (link, 0)))
1020 regno = REGNO (XEXP (link, 0));
1021 if ((REG_NOTE_KIND (link) == REG_DEAD
1022 && ! sparseset_bit_p (dead_set, regno))
1023 || (REG_NOTE_KIND (link) == REG_UNUSED
1024 && ! sparseset_bit_p (unused_set, regno)))
1026 *link_loc = XEXP (link, 1);
1027 continue;
1029 if (REG_NOTE_KIND (link) == REG_DEAD)
1030 sparseset_clear_bit (dead_set, regno);
1031 else if (REG_NOTE_KIND (link) == REG_UNUSED)
1032 sparseset_clear_bit (unused_set, regno);
1034 link_loc = &XEXP (link, 1);
1036 EXECUTE_IF_SET_IN_SPARSESET (dead_set, j)
1037 add_reg_note (curr_insn, REG_DEAD, regno_reg_rtx[j]);
1038 EXECUTE_IF_SET_IN_SPARSESET (unused_set, j)
1039 add_reg_note (curr_insn, REG_UNUSED, regno_reg_rtx[j]);
1042 if (bb_has_eh_pred (bb))
1043 for (j = 0; ; ++j)
1045 unsigned int regno = EH_RETURN_DATA_REGNO (j);
1047 if (regno == INVALID_REGNUM)
1048 break;
1049 make_hard_regno_live (regno);
1052 /* Pseudos can't go in stack regs at the start of a basic block that
1053 is reached by an abnormal edge. Likewise for call clobbered regs,
1054 because caller-save, fixup_abnormal_edges and possibly the table
1055 driven EH machinery are not quite ready to handle such pseudos
1056 live across such edges. */
1057 if (bb_has_abnormal_pred (bb))
1059 #ifdef STACK_REGS
1060 EXECUTE_IF_SET_IN_SPARSESET (pseudos_live, px)
1061 lra_reg_info[px].no_stack_p = true;
1062 for (px = FIRST_STACK_REG; px <= LAST_STACK_REG; px++)
1063 make_hard_regno_live (px);
1064 #endif
1065 /* No need to record conflicts for call clobbered regs if we
1066 have nonlocal labels around, as we don't ever try to
1067 allocate such regs in this case. */
1068 if (!cfun->has_nonlocal_label
1069 && has_abnormal_call_or_eh_pred_edge_p (bb))
1070 for (px = 0; HARD_REGISTER_NUM_P (px); px++)
1071 if (call_used_regs[px]
1072 #ifdef REAL_PIC_OFFSET_TABLE_REGNUM
1073 /* We should create a conflict of PIC pseudo with PIC
1074 hard reg as PIC hard reg can have a wrong value after
1075 jump described by the abnormal edge. In this case we
1076 can not allocate PIC hard reg to PIC pseudo as PIC
1077 pseudo will also have a wrong value. */
1078 || (px == REAL_PIC_OFFSET_TABLE_REGNUM
1079 && pic_offset_table_rtx != NULL_RTX
1080 && !HARD_REGISTER_P (pic_offset_table_rtx))
1081 #endif
1083 make_hard_regno_live (px);
1086 bool live_change_p = false;
1087 /* Check if bb border live info was changed. */
1088 unsigned int live_pseudos_num = 0;
1089 EXECUTE_IF_SET_IN_BITMAP (df_get_live_in (bb),
1090 FIRST_PSEUDO_REGISTER, j, bi)
1092 live_pseudos_num++;
1093 if (! sparseset_bit_p (pseudos_live, j))
1095 live_change_p = true;
1096 if (lra_dump_file != NULL)
1097 fprintf (lra_dump_file,
1098 " r%d is removed as live at bb%d start\n", j, bb->index);
1099 break;
1102 if (! live_change_p
1103 && sparseset_cardinality (pseudos_live) != live_pseudos_num)
1105 live_change_p = true;
1106 if (lra_dump_file != NULL)
1107 EXECUTE_IF_SET_IN_SPARSESET (pseudos_live, j)
1108 if (! bitmap_bit_p (df_get_live_in (bb), j))
1109 fprintf (lra_dump_file,
1110 " r%d is added to live at bb%d start\n", j, bb->index);
1112 /* See if we'll need an increment at the end of this basic block.
1113 An increment is needed if the PSEUDOS_LIVE set is not empty,
1114 to make sure the finish points are set up correctly. */
1115 need_curr_point_incr = (sparseset_cardinality (pseudos_live) > 0);
1117 EXECUTE_IF_SET_IN_SPARSESET (pseudos_live, i)
1119 update_pseudo_point (i, curr_point, DEF_POINT);
1120 mark_pseudo_dead (i);
1123 EXECUTE_IF_SET_IN_BITMAP (df_get_live_in (bb), FIRST_PSEUDO_REGISTER, j, bi)
1125 if (sparseset_cardinality (pseudos_live_through_calls) == 0)
1126 break;
1127 if (sparseset_bit_p (pseudos_live_through_calls, j))
1128 check_pseudos_live_through_calls (j, last_call_used_reg_set);
1131 for (i = 0; HARD_REGISTER_NUM_P (i); ++i)
1133 if (!TEST_HARD_REG_BIT (hard_regs_live, i))
1134 continue;
1136 if (!TEST_HARD_REG_BIT (hard_regs_spilled_into, i))
1137 continue;
1139 if (bitmap_bit_p (df_get_live_in (bb), i))
1140 continue;
1142 live_change_p = true;
1143 if (lra_dump_file)
1144 fprintf (lra_dump_file,
1145 " hard reg r%d is added to live at bb%d start\n", i,
1146 bb->index);
1147 bitmap_set_bit (df_get_live_in (bb), i);
1150 if (need_curr_point_incr)
1151 next_program_point (curr_point, freq);
1153 return live_change_p;
1156 /* Compress pseudo live ranges by removing program points where
1157 nothing happens. Complexity of many algorithms in LRA is linear
1158 function of program points number. To speed up the code we try to
1159 minimize the number of the program points here. */
1160 static void
1161 remove_some_program_points_and_update_live_ranges (void)
1163 unsigned i;
1164 int n, max_regno;
1165 int *map;
1166 lra_live_range_t r, prev_r, next_r;
1167 sbitmap_iterator sbi;
1168 bool born_p, dead_p, prev_born_p, prev_dead_p;
1170 auto_sbitmap born (lra_live_max_point);
1171 auto_sbitmap dead (lra_live_max_point);
1172 bitmap_clear (born);
1173 bitmap_clear (dead);
1174 max_regno = max_reg_num ();
1175 for (i = FIRST_PSEUDO_REGISTER; i < (unsigned) max_regno; i++)
1177 for (r = lra_reg_info[i].live_ranges; r != NULL; r = r->next)
1179 lra_assert (r->start <= r->finish);
1180 bitmap_set_bit (born, r->start);
1181 bitmap_set_bit (dead, r->finish);
1184 auto_sbitmap born_or_dead (lra_live_max_point);
1185 bitmap_ior (born_or_dead, born, dead);
1186 map = XCNEWVEC (int, lra_live_max_point);
1187 n = -1;
1188 prev_born_p = prev_dead_p = false;
1189 EXECUTE_IF_SET_IN_BITMAP (born_or_dead, 0, i, sbi)
1191 born_p = bitmap_bit_p (born, i);
1192 dead_p = bitmap_bit_p (dead, i);
1193 if ((prev_born_p && ! prev_dead_p && born_p && ! dead_p)
1194 || (prev_dead_p && ! prev_born_p && dead_p && ! born_p))
1196 map[i] = n;
1197 lra_point_freq[n] = MAX (lra_point_freq[n], lra_point_freq[i]);
1199 else
1201 map[i] = ++n;
1202 lra_point_freq[n] = lra_point_freq[i];
1204 prev_born_p = born_p;
1205 prev_dead_p = dead_p;
1207 n++;
1208 if (lra_dump_file != NULL)
1209 fprintf (lra_dump_file, "Compressing live ranges: from %d to %d - %d%%\n",
1210 lra_live_max_point, n,
1211 lra_live_max_point ? 100 * n / lra_live_max_point : 100);
1212 if (n < lra_live_max_point)
1214 lra_live_max_point = n;
1215 for (i = FIRST_PSEUDO_REGISTER; i < (unsigned) max_regno; i++)
1217 for (prev_r = NULL, r = lra_reg_info[i].live_ranges;
1218 r != NULL;
1219 r = next_r)
1221 next_r = r->next;
1222 r->start = map[r->start];
1223 r->finish = map[r->finish];
1224 if (prev_r == NULL || prev_r->start > r->finish + 1)
1226 prev_r = r;
1227 continue;
1229 prev_r->start = r->start;
1230 prev_r->next = next_r;
1231 lra_live_range_pool.remove (r);
1235 free (map);
1238 /* Print live ranges R to file F. */
1239 void
1240 lra_print_live_range_list (FILE *f, lra_live_range_t r)
1242 for (; r != NULL; r = r->next)
1243 fprintf (f, " [%d..%d]", r->start, r->finish);
1244 fprintf (f, "\n");
1247 DEBUG_FUNCTION void
1248 debug (lra_live_range &ref)
1250 lra_print_live_range_list (stderr, &ref);
1253 DEBUG_FUNCTION void
1254 debug (lra_live_range *ptr)
1256 if (ptr)
1257 debug (*ptr);
1258 else
1259 fprintf (stderr, "<nil>\n");
1262 /* Print live ranges R to stderr. */
1263 void
1264 lra_debug_live_range_list (lra_live_range_t r)
1266 lra_print_live_range_list (stderr, r);
1269 /* Print live ranges of pseudo REGNO to file F. */
1270 static void
1271 print_pseudo_live_ranges (FILE *f, int regno)
1273 if (lra_reg_info[regno].live_ranges == NULL)
1274 return;
1275 fprintf (f, " r%d:", regno);
1276 lra_print_live_range_list (f, lra_reg_info[regno].live_ranges);
1279 /* Print live ranges of pseudo REGNO to stderr. */
1280 void
1281 lra_debug_pseudo_live_ranges (int regno)
1283 print_pseudo_live_ranges (stderr, regno);
1286 /* Print live ranges of all pseudos to file F. */
1287 static void
1288 print_live_ranges (FILE *f)
1290 int i, max_regno;
1292 max_regno = max_reg_num ();
1293 for (i = FIRST_PSEUDO_REGISTER; i < max_regno; i++)
1294 print_pseudo_live_ranges (f, i);
1297 /* Print live ranges of all pseudos to stderr. */
1298 void
1299 lra_debug_live_ranges (void)
1301 print_live_ranges (stderr);
1304 /* Compress pseudo live ranges. */
1305 static void
1306 compress_live_ranges (void)
1308 remove_some_program_points_and_update_live_ranges ();
1309 if (lra_dump_file != NULL)
1311 fprintf (lra_dump_file, "Ranges after the compression:\n");
1312 print_live_ranges (lra_dump_file);
1318 /* The number of the current live range pass. */
1319 int lra_live_range_iter;
1321 /* The function creates live ranges only for memory pseudos (or for
1322 all ones if ALL_P), set up CONFLICT_HARD_REGS for the pseudos. It
1323 also does dead insn elimination if DEAD_INSN_P and global live
1324 analysis only for pseudos and only if the pseudo live info was
1325 changed on a BB border. Return TRUE if the live info was
1326 changed. */
1327 static bool
1328 lra_create_live_ranges_1 (bool all_p, bool dead_insn_p)
1330 basic_block bb;
1331 int i, hard_regno, max_regno = max_reg_num ();
1332 int curr_point;
1333 bool bb_live_change_p, have_referenced_pseudos = false;
1335 timevar_push (TV_LRA_CREATE_LIVE_RANGES);
1337 complete_info_p = all_p;
1338 if (lra_dump_file != NULL)
1339 fprintf (lra_dump_file,
1340 "\n********** Pseudo live ranges #%d: **********\n\n",
1341 ++lra_live_range_iter);
1342 memset (lra_hard_reg_usage, 0, sizeof (lra_hard_reg_usage));
1343 for (i = 0; i < max_regno; i++)
1345 lra_reg_info[i].live_ranges = NULL;
1346 CLEAR_HARD_REG_SET (lra_reg_info[i].conflict_hard_regs);
1347 lra_reg_info[i].preferred_hard_regno1 = -1;
1348 lra_reg_info[i].preferred_hard_regno2 = -1;
1349 lra_reg_info[i].preferred_hard_regno_profit1 = 0;
1350 lra_reg_info[i].preferred_hard_regno_profit2 = 0;
1351 #ifdef STACK_REGS
1352 lra_reg_info[i].no_stack_p = false;
1353 #endif
1354 /* The biggest mode is already set but its value might be to
1355 conservative because of recent transformation. Here in this
1356 file we recalculate it again as it costs practically
1357 nothing. */
1358 if (!HARD_REGISTER_NUM_P (i) && regno_reg_rtx[i] != NULL_RTX)
1359 lra_reg_info[i].biggest_mode = GET_MODE (regno_reg_rtx[i]);
1360 else
1361 lra_reg_info[i].biggest_mode = VOIDmode;
1362 lra_reg_info[i].call_p = false;
1363 if (!HARD_REGISTER_NUM_P (i)
1364 && lra_reg_info[i].nrefs != 0)
1366 if ((hard_regno = reg_renumber[i]) >= 0)
1367 lra_hard_reg_usage[hard_regno] += lra_reg_info[i].freq;
1368 have_referenced_pseudos = true;
1371 lra_free_copies ();
1373 /* Under some circumstances, we can have functions without pseudo
1374 registers. For such functions, lra_live_max_point will be 0,
1375 see e.g. PR55604, and there's nothing more to do for us here. */
1376 if (! have_referenced_pseudos)
1378 timevar_pop (TV_LRA_CREATE_LIVE_RANGES);
1379 return false;
1382 pseudos_live = sparseset_alloc (max_regno);
1383 pseudos_live_through_calls = sparseset_alloc (max_regno);
1384 pseudos_live_through_setjumps = sparseset_alloc (max_regno);
1385 start_living = sparseset_alloc (max_regno);
1386 start_dying = sparseset_alloc (max_regno);
1387 dead_set = sparseset_alloc (max_regno);
1388 unused_set = sparseset_alloc (max_regno);
1389 curr_point = 0;
1390 unsigned new_length = get_max_uid () * 2;
1391 point_freq_vec.truncate (0);
1392 point_freq_vec.reserve_exact (new_length);
1393 lra_point_freq = point_freq_vec.address ();
1394 auto_vec<int, 20> post_order_rev_cfg;
1395 inverted_post_order_compute (&post_order_rev_cfg);
1396 lra_assert (post_order_rev_cfg.length () == (unsigned) n_basic_blocks_for_fn (cfun));
1397 bb_live_change_p = false;
1398 for (i = post_order_rev_cfg.length () - 1; i >= 0; --i)
1400 bb = BASIC_BLOCK_FOR_FN (cfun, post_order_rev_cfg[i]);
1401 if (bb == EXIT_BLOCK_PTR_FOR_FN (cfun) || bb
1402 == ENTRY_BLOCK_PTR_FOR_FN (cfun))
1403 continue;
1404 if (process_bb_lives (bb, curr_point, dead_insn_p))
1405 bb_live_change_p = true;
1407 if (bb_live_change_p)
1409 /* We need to clear pseudo live info as some pseudos can
1410 disappear, e.g. pseudos with used equivalences. */
1411 FOR_EACH_BB_FN (bb, cfun)
1413 bitmap_clear_range (df_get_live_in (bb), FIRST_PSEUDO_REGISTER,
1414 max_regno - FIRST_PSEUDO_REGISTER);
1415 bitmap_clear_range (df_get_live_out (bb), FIRST_PSEUDO_REGISTER,
1416 max_regno - FIRST_PSEUDO_REGISTER);
1418 /* As we did not change CFG since LRA start we can use
1419 DF-infrastructure solver to solve live data flow problem. */
1420 for (int i = 0; HARD_REGISTER_NUM_P (i); ++i)
1422 if (TEST_HARD_REG_BIT (hard_regs_spilled_into, i))
1423 bitmap_clear_bit (&all_hard_regs_bitmap, i);
1425 df_simple_dataflow
1426 (DF_BACKWARD, NULL, live_con_fun_0, live_con_fun_n,
1427 live_trans_fun, &all_blocks,
1428 df_get_postorder (DF_BACKWARD), df_get_n_blocks (DF_BACKWARD));
1429 if (lra_dump_file != NULL)
1431 fprintf (lra_dump_file,
1432 "Global pseudo live data have been updated:\n");
1433 basic_block bb;
1434 FOR_EACH_BB_FN (bb, cfun)
1436 bb_data_t bb_info = get_bb_data (bb);
1437 bitmap bb_livein = df_get_live_in (bb);
1438 bitmap bb_liveout = df_get_live_out (bb);
1440 fprintf (lra_dump_file, "\nBB %d:\n", bb->index);
1441 lra_dump_bitmap_with_title (" gen:",
1442 &bb_info->gen_pseudos, bb->index);
1443 lra_dump_bitmap_with_title (" killed:",
1444 &bb_info->killed_pseudos, bb->index);
1445 lra_dump_bitmap_with_title (" livein:", bb_livein, bb->index);
1446 lra_dump_bitmap_with_title (" liveout:", bb_liveout, bb->index);
1450 lra_live_max_point = curr_point;
1451 if (lra_dump_file != NULL)
1452 print_live_ranges (lra_dump_file);
1453 /* Clean up. */
1454 sparseset_free (unused_set);
1455 sparseset_free (dead_set);
1456 sparseset_free (start_dying);
1457 sparseset_free (start_living);
1458 sparseset_free (pseudos_live_through_calls);
1459 sparseset_free (pseudos_live_through_setjumps);
1460 sparseset_free (pseudos_live);
1461 compress_live_ranges ();
1462 timevar_pop (TV_LRA_CREATE_LIVE_RANGES);
1463 return bb_live_change_p;
1466 /* The main entry function creates live-ranges and other live info
1467 necessary for the assignment sub-pass. It uses
1468 lra_creates_live_ranges_1 -- so read comments for the
1469 function. */
1470 void
1471 lra_create_live_ranges (bool all_p, bool dead_insn_p)
1473 if (! lra_create_live_ranges_1 (all_p, dead_insn_p))
1474 return;
1475 if (lra_dump_file != NULL)
1476 fprintf (lra_dump_file, "Live info was changed -- recalculate it\n");
1477 /* Live info was changed on a bb border. It means that some info,
1478 e.g. about conflict regs, calls crossed, and live ranges may be
1479 wrong. We need this info for allocation. So recalculate it
1480 again but without removing dead insns which can change live info
1481 again. Repetitive live range calculations are expensive therefore
1482 we stop here as we already have correct info although some
1483 improvement in rare cases could be possible on this sub-pass if
1484 we do dead insn elimination again (still the improvement may
1485 happen later). */
1486 lra_clear_live_ranges ();
1487 bool res = lra_create_live_ranges_1 (all_p, false);
1488 lra_assert (! res);
1491 /* Finish all live ranges. */
1492 void
1493 lra_clear_live_ranges (void)
1495 int i;
1497 for (i = 0; i < max_reg_num (); i++)
1498 free_live_range_list (lra_reg_info[i].live_ranges);
1499 point_freq_vec.release ();
1502 /* Initialize live ranges data once per function. */
1503 void
1504 lra_live_ranges_init (void)
1506 bitmap_initialize (&temp_bitmap, &reg_obstack);
1507 initiate_live_solver ();
1510 /* Finish live ranges data once per function. */
1511 void
1512 lra_live_ranges_finish (void)
1514 finish_live_solver ();
1515 bitmap_clear (&temp_bitmap);
1516 lra_live_range_pool.release ();