1 /* Build live ranges for pseudos.
2    Copyright (C) 2010-2022 Free Software Foundation, Inc.
3    Contributed by Vladimir Makarov <vmakarov@redhat.com>.
4 
5 This file is part of GCC.
6 
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.
11 
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.
16 
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/>.          */
20 
21 
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.  */
27 
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"
46 #include "function-abi.h"
47 
48 /* Program points are enumerated by numbers from range
49    0..LRA_LIVE_MAX_POINT-1.  There are approximately two times more
50    program points than insns.  Program points are places in the
51    program where liveness info can be changed.    In most general case
52    (there are more complicated cases too) some program points
53    correspond to places where input operand dies and other ones
54    correspond to places where output operands are born.      */
55 int lra_live_max_point;
56 
57 /* Accumulated execution frequency of all references for each hard
58    register.  */
59 int lra_hard_reg_usage[FIRST_PSEUDO_REGISTER];
60 
61 /* A global flag whose true value says to build live ranges for all
62    pseudos, otherwise the live ranges only for pseudos got memory is
63    build.  True value means also building copies and setting up hard
64    register preferences.  The complete info is necessary only for the
65    assignment pass.  The complete info is not needed for the
66    coalescing and spill passes.          */
67 static bool complete_info_p;
68 
69 /* Pseudos live at current point in the RTL scan.  */
70 static sparseset pseudos_live;
71 
72 /* Pseudos probably living through calls and setjumps.      As setjump is
73    a call too, if a bit in PSEUDOS_LIVE_THROUGH_SETJUMPS is set up
74    then the corresponding bit in PSEUDOS_LIVE_THROUGH_CALLS is set up
75    too.    These data are necessary for cases when only one subreg of a
76    multi-reg pseudo is set up after a call.  So we decide it is
77    probably live when traversing bb backward.  We are sure about
78    living when we see its usage or definition of the pseudo.  */
79 static sparseset pseudos_live_through_calls;
80 static sparseset pseudos_live_through_setjumps;
81 
82 /* Set of hard regs (except eliminable ones) currently live.  */
83 static HARD_REG_SET hard_regs_live;
84 
85 /* Set of pseudos and hard registers start living/dying in the current
86    insn.  These sets are used to update REG_DEAD and REG_UNUSED notes
87    in the insn.  */
88 static sparseset start_living, start_dying;
89 
90 /* Set of pseudos and hard regs dead and unused in the current
91    insn.  */
92 static sparseset unused_set, dead_set;
93 
94 /* Bitmap used for holding intermediate bitmap operation results.  */
95 static bitmap_head temp_bitmap;
96 
97 /* Pool for pseudo live ranges.          */
98 static object_allocator<lra_live_range> lra_live_range_pool ("live ranges");
99 
100 /* Free live range list LR.  */
101 static void
free_live_range_list(lra_live_range_t lr)102 free_live_range_list (lra_live_range_t lr)
103 {
104   lra_live_range_t next;
105 
106   while (lr != NULL)
107     {
108       next = lr->next;
109       lra_live_range_pool.remove (lr);
110       lr = next;
111     }
112 }
113 
114 /* Create and return pseudo live range with given attributes.  */
115 static lra_live_range_t
create_live_range(int regno,int start,int finish,lra_live_range_t next)116 create_live_range (int regno, int start, int finish, lra_live_range_t next)
117 {
118   lra_live_range_t p = lra_live_range_pool.allocate ();
119   p->regno = regno;
120   p->start = start;
121   p->finish = finish;
122   p->next = next;
123   return p;
124 }
125 
126 /* Copy live range R and return the result.  */
127 static lra_live_range_t
copy_live_range(lra_live_range_t r)128 copy_live_range (lra_live_range_t r)
129 {
130   return new (lra_live_range_pool) lra_live_range (*r);
131 }
132 
133 /* Copy live range list given by its head R and return the result.  */
134 lra_live_range_t
lra_copy_live_range_list(lra_live_range_t r)135 lra_copy_live_range_list (lra_live_range_t r)
136 {
137   lra_live_range_t p, first, *chain;
138 
139   first = NULL;
140   for (chain = &first; r != NULL; r = r->next)
141     {
142       p = copy_live_range (r);
143       *chain = p;
144       chain = &p->next;
145     }
146   return first;
147 }
148 
149 /* Merge *non-intersected* ranges R1 and R2 and returns the result.
150    The function maintains the order of ranges and tries to minimize
151    size of the result range list.  Ranges R1 and R2 may not be used
152    after the call.  */
153 lra_live_range_t
lra_merge_live_ranges(lra_live_range_t r1,lra_live_range_t r2)154 lra_merge_live_ranges (lra_live_range_t r1, lra_live_range_t r2)
155 {
156   lra_live_range_t first, last;
157 
158   if (r1 == NULL)
159     return r2;
160   if (r2 == NULL)
161     return r1;
162   for (first = last = NULL; r1 != NULL && r2 != NULL;)
163     {
164       if (r1->start < r2->start)
165           std::swap (r1, r2);
166 
167       if (r1->start == r2->finish + 1)
168           {
169             /* Joint ranges: merge r1 and r2 into r1.  */
170             r1->start = r2->start;
171             lra_live_range_t temp = r2;
172             r2 = r2->next;
173             lra_live_range_pool.remove (temp);
174           }
175       else
176           {
177             gcc_assert (r2->finish + 1 < r1->start);
178             /* Add r1 to the result.  */
179             if (first == NULL)
180               first = last = r1;
181             else
182               {
183                 last->next = r1;
184                 last = r1;
185               }
186             r1 = r1->next;
187           }
188     }
189   if (r1 != NULL)
190     {
191       if (first == NULL)
192           first = r1;
193       else
194           last->next = r1;
195     }
196   else
197     {
198       lra_assert (r2 != NULL);
199       if (first == NULL)
200           first = r2;
201       else
202           last->next = r2;
203     }
204   return first;
205 }
206 
207 /* Return TRUE if live ranges R1 and R2 intersect.  */
208 bool
lra_intersected_live_ranges_p(lra_live_range_t r1,lra_live_range_t r2)209 lra_intersected_live_ranges_p (lra_live_range_t r1, lra_live_range_t r2)
210 {
211   /* Remember the live ranges are always kept ordered.      */
212   while (r1 != NULL && r2 != NULL)
213     {
214       if (r1->start > r2->finish)
215           r1 = r1->next;
216       else if (r2->start > r1->finish)
217           r2 = r2->next;
218       else
219           return true;
220     }
221   return false;
222 }
223 
224 enum point_type {
225   DEF_POINT,
226   USE_POINT
227 };
228 
229 /* Return TRUE if set A contains a pseudo register, otherwise, return FALSE.  */
230 static bool
sparseset_contains_pseudos_p(sparseset a)231 sparseset_contains_pseudos_p (sparseset a)
232 {
233   int regno;
234   EXECUTE_IF_SET_IN_SPARSESET (a, regno)
235     if (!HARD_REGISTER_NUM_P (regno))
236       return true;
237   return false;
238 }
239 
240 /* Mark pseudo REGNO as living or dying at program point POINT, depending on
241    whether TYPE is a definition or a use.  If this is the first reference to
242    REGNO that we've encountered, then create a new live range for it.  */
243 
244 static void
update_pseudo_point(int regno,int point,enum point_type type)245 update_pseudo_point (int regno, int point, enum point_type type)
246 {
247   lra_live_range_t p;
248 
249   /* Don't compute points for hard registers.  */
250   if (HARD_REGISTER_NUM_P (regno))
251     return;
252 
253   if (complete_info_p || lra_get_regno_hard_regno (regno) < 0)
254     {
255       if (type == DEF_POINT)
256           {
257             if (sparseset_bit_p (pseudos_live, regno))
258               {
259                 p = lra_reg_info[regno].live_ranges;
260                 lra_assert (p != NULL);
261                 p->finish = point;
262               }
263           }
264       else /* USE_POINT */
265           {
266             if (!sparseset_bit_p (pseudos_live, regno)
267                 && ((p = lra_reg_info[regno].live_ranges) == NULL
268                       || (p->finish != point && p->finish + 1 != point)))
269               lra_reg_info[regno].live_ranges
270                 = create_live_range (regno, point, -1, p);
271           }
272     }
273 }
274 
275 /* The corresponding bitmaps of BB currently being processed.  */
276 static bitmap bb_killed_pseudos, bb_gen_pseudos;
277 
278 /* Record hard register REGNO as now being live.  It updates
279    living hard regs and START_LIVING.  */
280 static void
make_hard_regno_live(int regno)281 make_hard_regno_live (int regno)
282 {
283   lra_assert (HARD_REGISTER_NUM_P (regno));
284   if (TEST_HARD_REG_BIT (hard_regs_live, regno)
285       || TEST_HARD_REG_BIT (eliminable_regset, regno))
286     return;
287   SET_HARD_REG_BIT (hard_regs_live, regno);
288   sparseset_set_bit (start_living, regno);
289   if (fixed_regs[regno] || TEST_HARD_REG_BIT (hard_regs_spilled_into, regno))
290     bitmap_set_bit (bb_gen_pseudos, regno);
291 }
292 
293 /* Process the definition of hard register REGNO.  This updates
294    hard_regs_live, START_DYING and conflict hard regs for living
295    pseudos.  */
296 static void
make_hard_regno_dead(int regno)297 make_hard_regno_dead (int regno)
298 {
299   if (TEST_HARD_REG_BIT (eliminable_regset, regno))
300     return;
301 
302   lra_assert (HARD_REGISTER_NUM_P (regno));
303   unsigned int i;
304   EXECUTE_IF_SET_IN_SPARSESET (pseudos_live, i)
305     SET_HARD_REG_BIT (lra_reg_info[i].conflict_hard_regs, regno);
306 
307   if (! TEST_HARD_REG_BIT (hard_regs_live, regno))
308     return;
309   CLEAR_HARD_REG_BIT (hard_regs_live, regno);
310   sparseset_set_bit (start_dying, regno);
311   if (fixed_regs[regno] || TEST_HARD_REG_BIT (hard_regs_spilled_into, regno))
312     {
313       bitmap_clear_bit (bb_gen_pseudos, regno);
314       bitmap_set_bit (bb_killed_pseudos, regno);
315     }
316 }
317 
318 /* Mark pseudo REGNO as now being live and update START_LIVING.  */
319 static void
mark_pseudo_live(int regno)320 mark_pseudo_live (int regno)
321 {
322   lra_assert (!HARD_REGISTER_NUM_P (regno));
323   if (sparseset_bit_p (pseudos_live, regno))
324     return;
325 
326   sparseset_set_bit (pseudos_live, regno);
327   sparseset_set_bit (start_living, regno);
328 }
329 
330 /* Mark pseudo REGNO as now being dead and update START_DYING.  */
331 static void
mark_pseudo_dead(int regno)332 mark_pseudo_dead (int regno)
333 {
334   lra_assert (!HARD_REGISTER_NUM_P (regno));
335   lra_reg_info[regno].conflict_hard_regs |= hard_regs_live;
336   if (!sparseset_bit_p (pseudos_live, regno))
337     return;
338 
339   sparseset_clear_bit (pseudos_live, regno);
340   sparseset_set_bit (start_dying, regno);
341 }
342 
343 /* Mark register REGNO (pseudo or hard register) in MODE as being live
344    and update BB_GEN_PSEUDOS.  */
345 static void
mark_regno_live(int regno,machine_mode mode)346 mark_regno_live (int regno, machine_mode mode)
347 {
348   int last;
349 
350   if (HARD_REGISTER_NUM_P (regno))
351     {
352       for (last = end_hard_regno (mode, regno); regno < last; regno++)
353           make_hard_regno_live (regno);
354     }
355   else
356     {
357       mark_pseudo_live (regno);
358       bitmap_set_bit (bb_gen_pseudos, regno);
359     }
360 }
361 
362 
363 /* Mark register REGNO (pseudo or hard register) in MODE as being dead
364    and update BB_GEN_PSEUDOS and BB_KILLED_PSEUDOS.  */
365 static void
mark_regno_dead(int regno,machine_mode mode)366 mark_regno_dead (int regno, machine_mode mode)
367 {
368   int last;
369 
370   if (HARD_REGISTER_NUM_P (regno))
371     {
372       for (last = end_hard_regno (mode, regno); regno < last; regno++)
373           make_hard_regno_dead (regno);
374     }
375   else
376     {
377       mark_pseudo_dead (regno);
378       bitmap_clear_bit (bb_gen_pseudos, regno);
379       bitmap_set_bit (bb_killed_pseudos, regno);
380     }
381 }
382 
383 
384 
385 /* This page contains code for making global live analysis of pseudos.
386    The code works only when pseudo live info is changed on a BB
387    border.  That might be a consequence of some global transformations
388    in LRA, e.g. PIC pseudo reuse or rematerialization.  */
389 
390 /* Structure describing local BB data used for pseudo
391    live-analysis.  */
392 class bb_data_pseudos
393 {
394 public:
395   /* Basic block about which the below data are.  */
396   basic_block bb;
397   bitmap_head killed_pseudos; /* pseudos killed in the BB.  */
398   bitmap_head gen_pseudos; /* pseudos generated in the BB.  */
399 };
400 
401 /* Array for all BB data.  Indexed by the corresponding BB index.  */
402 typedef class bb_data_pseudos *bb_data_t;
403 
404 /* All basic block data are referred through the following array.  */
405 static bb_data_t bb_data;
406 
407 /* Two small functions for access to the bb data.  */
408 static inline bb_data_t
get_bb_data(basic_block bb)409 get_bb_data (basic_block bb)
410 {
411   return &bb_data[(bb)->index];
412 }
413 
414 static inline bb_data_t
get_bb_data_by_index(int index)415 get_bb_data_by_index (int index)
416 {
417   return &bb_data[index];
418 }
419 
420 /* Bitmap with all hard regs.  */
421 static bitmap_head all_hard_regs_bitmap;
422 
423 /* The transfer function used by the DF equation solver to propagate
424    live info through block with BB_INDEX according to the following
425    equation:
426 
427      bb.livein = (bb.liveout - bb.kill) OR bb.gen
428 */
429 static bool
live_trans_fun(int bb_index)430 live_trans_fun (int bb_index)
431 {
432   basic_block bb = get_bb_data_by_index (bb_index)->bb;
433   bitmap bb_liveout = df_get_live_out (bb);
434   bitmap bb_livein = df_get_live_in (bb);
435   bb_data_t bb_info = get_bb_data (bb);
436 
437   bitmap_and_compl (&temp_bitmap, bb_liveout, &all_hard_regs_bitmap);
438   return bitmap_ior_and_compl (bb_livein, &bb_info->gen_pseudos,
439                                      &temp_bitmap, &bb_info->killed_pseudos);
440 }
441 
442 /* The confluence function used by the DF equation solver to set up
443    live info for a block BB without predecessor.  */
444 static void
live_con_fun_0(basic_block bb)445 live_con_fun_0 (basic_block bb)
446 {
447   bitmap_and_into (df_get_live_out (bb), &all_hard_regs_bitmap);
448 }
449 
450 /* The confluence function used by the DF equation solver to propagate
451    live info from successor to predecessor on edge E according to the
452    following equation:
453 
454       bb.liveout = 0 for entry block | OR (livein of successors)
455  */
456 static bool
live_con_fun_n(edge e)457 live_con_fun_n (edge e)
458 {
459   basic_block bb = e->src;
460   basic_block dest = e->dest;
461   bitmap bb_liveout = df_get_live_out (bb);
462   bitmap dest_livein = df_get_live_in (dest);
463 
464   return bitmap_ior_and_compl_into (bb_liveout,
465                                             dest_livein, &all_hard_regs_bitmap);
466 }
467 
468 /* Indexes of all function blocks.  */
469 static bitmap_head all_blocks;
470 
471 /* Allocate and initialize data needed for global pseudo live
472    analysis.  */
473 static void
initiate_live_solver(void)474 initiate_live_solver (void)
475 {
476   bitmap_initialize (&all_hard_regs_bitmap, &reg_obstack);
477   bitmap_set_range (&all_hard_regs_bitmap, 0, FIRST_PSEUDO_REGISTER);
478   bb_data = XNEWVEC (class bb_data_pseudos, last_basic_block_for_fn (cfun));
479   bitmap_initialize (&all_blocks, &reg_obstack);
480 
481   basic_block bb;
482   FOR_ALL_BB_FN (bb, cfun)
483     {
484       bb_data_t bb_info = get_bb_data (bb);
485       bb_info->bb = bb;
486       bitmap_initialize (&bb_info->killed_pseudos, &reg_obstack);
487       bitmap_initialize (&bb_info->gen_pseudos, &reg_obstack);
488       bitmap_set_bit (&all_blocks, bb->index);
489     }
490 }
491 
492 /* Free all data needed for global pseudo live analysis.  */
493 static void
finish_live_solver(void)494 finish_live_solver (void)
495 {
496   basic_block bb;
497 
498   bitmap_clear (&all_blocks);
499   FOR_ALL_BB_FN (bb, cfun)
500     {
501       bb_data_t bb_info = get_bb_data (bb);
502       bitmap_clear (&bb_info->killed_pseudos);
503       bitmap_clear (&bb_info->gen_pseudos);
504     }
505   free (bb_data);
506   bitmap_clear (&all_hard_regs_bitmap);
507 }
508 
509 
510 
511 /* Insn currently scanned.  */
512 static rtx_insn *curr_insn;
513 /* The insn data.  */
514 static lra_insn_recog_data_t curr_id;
515 /* The insn static data.  */
516 static struct lra_static_insn_data *curr_static_id;
517 
518 /* Vec containing execution frequencies of program points.  */
519 static vec<int> point_freq_vec;
520 
521 /* The start of the above vector elements.  */
522 int *lra_point_freq;
523 
524 /* Increment the current program point POINT to the next point which has
525    execution frequency FREQ.  */
526 static void
next_program_point(int & point,int freq)527 next_program_point (int &point, int freq)
528 {
529   point_freq_vec.safe_push (freq);
530   lra_point_freq = point_freq_vec.address ();
531   point++;
532 }
533 
534 /* Update the preference of HARD_REGNO for pseudo REGNO by PROFIT.  */
535 void
lra_setup_reload_pseudo_preferenced_hard_reg(int regno,int hard_regno,int profit)536 lra_setup_reload_pseudo_preferenced_hard_reg (int regno,
537                                                         int hard_regno, int profit)
538 {
539   lra_assert (regno >= lra_constraint_new_regno_start);
540   if (lra_reg_info[regno].preferred_hard_regno1 == hard_regno)
541     lra_reg_info[regno].preferred_hard_regno_profit1 += profit;
542   else if (lra_reg_info[regno].preferred_hard_regno2 == hard_regno)
543     lra_reg_info[regno].preferred_hard_regno_profit2 += profit;
544   else if (lra_reg_info[regno].preferred_hard_regno1 < 0)
545     {
546       lra_reg_info[regno].preferred_hard_regno1 = hard_regno;
547       lra_reg_info[regno].preferred_hard_regno_profit1 = profit;
548     }
549   else if (lra_reg_info[regno].preferred_hard_regno2 < 0
550              || profit > lra_reg_info[regno].preferred_hard_regno_profit2)
551     {
552       lra_reg_info[regno].preferred_hard_regno2 = hard_regno;
553       lra_reg_info[regno].preferred_hard_regno_profit2 = profit;
554     }
555   else
556     return;
557   /* Keep the 1st hard regno as more profitable.  */
558   if (lra_reg_info[regno].preferred_hard_regno1 >= 0
559       && lra_reg_info[regno].preferred_hard_regno2 >= 0
560       && (lra_reg_info[regno].preferred_hard_regno_profit2
561             > lra_reg_info[regno].preferred_hard_regno_profit1))
562     {
563       std::swap (lra_reg_info[regno].preferred_hard_regno1,
564                      lra_reg_info[regno].preferred_hard_regno2);
565       std::swap (lra_reg_info[regno].preferred_hard_regno_profit1,
566                      lra_reg_info[regno].preferred_hard_regno_profit2);
567     }
568   if (lra_dump_file != NULL)
569     {
570       if ((hard_regno = lra_reg_info[regno].preferred_hard_regno1) >= 0)
571           fprintf (lra_dump_file,
572                      "        Hard reg %d is preferable by r%d with profit %d\n",
573                      hard_regno, regno,
574                      lra_reg_info[regno].preferred_hard_regno_profit1);
575       if ((hard_regno = lra_reg_info[regno].preferred_hard_regno2) >= 0)
576           fprintf (lra_dump_file,
577                      "        Hard reg %d is preferable by r%d with profit %d\n",
578                      hard_regno, regno,
579                      lra_reg_info[regno].preferred_hard_regno_profit2);
580     }
581 }
582 
583 /* Check whether REGNO lives through calls and setjmps and clear
584    the corresponding bits in PSEUDOS_LIVE_THROUGH_CALLS and
585    PSEUDOS_LIVE_THROUGH_SETJUMPS.  All calls in the region described
586    by PSEUDOS_LIVE_THROUGH_CALLS have the given ABI.  */
587 
588 static inline void
check_pseudos_live_through_calls(int regno,const function_abi & abi)589 check_pseudos_live_through_calls (int regno, const function_abi &abi)
590 {
591   if (! sparseset_bit_p (pseudos_live_through_calls, regno))
592     return;
593 
594   machine_mode mode = PSEUDO_REGNO_MODE (regno);
595 
596   sparseset_clear_bit (pseudos_live_through_calls, regno);
597   lra_reg_info[regno].conflict_hard_regs |= abi.mode_clobbers (mode);
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);
604 }
605 
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
reg_early_clobber_p(const struct lra_insn_reg * reg,int n_alt)610 reg_early_clobber_p (const struct lra_insn_reg *reg, int n_alt)
611 {
612   return (n_alt == LRA_UNKNOWN_ALT
613             ? reg->early_clobber_alts != 0
614             : (n_alt != LRA_NON_CLOBBERED_ALT
615                && TEST_BIT (reg->early_clobber_alts, n_alt)));
616 }
617 
618 /* Clear pseudo REGNO in SET or all hard registers of REGNO in MODE in SET.  */
619 static void
clear_sparseset_regnos(sparseset set,int regno,enum machine_mode mode)620 clear_sparseset_regnos (sparseset set, int regno, enum machine_mode mode)
621 {
622   if (regno >= FIRST_PSEUDO_REGISTER)
623     {
624       sparseset_clear_bit (dead_set, regno);
625       return;
626     }
627   for (int last = end_hard_regno (mode, regno); regno < last; regno++)
628     sparseset_clear_bit (set, regno);
629 }
630 
631 /* Return true if pseudo REGNO is in SET or all hard registers of REGNO in MODE
632    are in SET.  */
633 static bool
regnos_in_sparseset_p(sparseset set,int regno,enum machine_mode mode)634 regnos_in_sparseset_p (sparseset set, int regno, enum machine_mode mode)
635 {
636   if (regno >= FIRST_PSEUDO_REGISTER)
637     return sparseset_bit_p (dead_set, regno);
638   for (int last = end_hard_regno (mode, regno); regno < last; regno++)
639     if (!sparseset_bit_p (set, regno))
640       return false;
641   return true;
642 }
643 
644 /* Process insns of the basic block BB to update pseudo live ranges,
645    pseudo hard register conflicts, and insn notes.  We do it on
646    backward scan of BB insns.  CURR_POINT is the program point where
647    BB ends.  The function updates this counter and returns in
648    CURR_POINT the program point where BB starts.  The function also
649    does local live info updates and can delete the dead insns if
650    DEAD_INSN_P.  It returns true if pseudo live info was
651    changed at the BB start.  */
652 static bool
process_bb_lives(basic_block bb,int & curr_point,bool dead_insn_p)653 process_bb_lives (basic_block bb, int &curr_point, bool dead_insn_p)
654 {
655   int i, regno, freq;
656   unsigned int j;
657   bitmap_iterator bi;
658   bitmap reg_live_out;
659   unsigned int px;
660   rtx_insn *next;
661   rtx link, *link_loc;
662   bool need_curr_point_incr;
663   /* Only has a meaningful value once we've seen a call.  */
664   function_abi last_call_abi = default_function_abi;
665 
666   reg_live_out = df_get_live_out (bb);
667   sparseset_clear (pseudos_live);
668   sparseset_clear (pseudos_live_through_calls);
669   sparseset_clear (pseudos_live_through_setjumps);
670   REG_SET_TO_HARD_REG_SET (hard_regs_live, reg_live_out);
671   hard_regs_live &= ~eliminable_regset;
672   EXECUTE_IF_SET_IN_BITMAP (reg_live_out, FIRST_PSEUDO_REGISTER, j, bi)
673     {
674       update_pseudo_point (j, curr_point, USE_POINT);
675       mark_pseudo_live (j);
676     }
677 
678   bb_gen_pseudos = &get_bb_data (bb)->gen_pseudos;
679   bb_killed_pseudos = &get_bb_data (bb)->killed_pseudos;
680   bitmap_clear (bb_gen_pseudos);
681   bitmap_clear (bb_killed_pseudos);
682   freq = REG_FREQ_FROM_BB (bb);
683 
684   if (lra_dump_file != NULL)
685     fprintf (lra_dump_file, "  BB %d\n", bb->index);
686 
687   /* Scan the code of this basic block, noting which pseudos and hard
688      regs are born or die.
689 
690      Note that this loop treats uninitialized values as live until the
691      beginning of the block.  For example, if an instruction uses
692      (reg:DI foo), and only (subreg:SI (reg:DI foo) 0) is ever set,
693      FOO will remain live until the beginning of the block.  Likewise
694      if FOO is not set at all.          This is unnecessarily pessimistic, but
695      it probably doesn't matter much in practice.  */
696   FOR_BB_INSNS_REVERSE_SAFE (bb, curr_insn, next)
697     {
698       bool call_p;
699       int n_alt, dst_regno, src_regno;
700       rtx set;
701       struct lra_insn_reg *reg;
702 
703       if (!NONDEBUG_INSN_P (curr_insn))
704           continue;
705 
706       curr_id = lra_get_insn_recog_data (curr_insn);
707       curr_static_id = curr_id->insn_static_data;
708       n_alt = curr_id->used_insn_alternative;
709       if (lra_dump_file != NULL)
710           fprintf (lra_dump_file, "   Insn %u: point = %d, n_alt = %d\n",
711                      INSN_UID (curr_insn), curr_point, n_alt);
712 
713       set = single_set (curr_insn);
714 
715       if (dead_insn_p && set != NULL_RTX
716             && REG_P (SET_DEST (set)) && !HARD_REGISTER_P (SET_DEST (set))
717             && find_reg_note (curr_insn, REG_EH_REGION, NULL_RTX) == NULL_RTX
718             && ! may_trap_p (PATTERN (curr_insn))
719             /* Don't do premature remove of pic offset pseudo as we can
720                start to use it after some reload generation.  */
721             && (pic_offset_table_rtx == NULL_RTX
722                 || pic_offset_table_rtx != SET_DEST (set)))
723           {
724             bool remove_p = true;
725 
726             for (reg = curr_id->regs; reg != NULL; reg = reg->next)
727               if (reg->type != OP_IN
728                     && (reg->regno < FIRST_PSEUDO_REGISTER
729                         ? TEST_HARD_REG_BIT (hard_regs_live, reg->regno)
730                         : sparseset_bit_p (pseudos_live, reg->regno)))
731                 {
732                     remove_p = false;
733                     break;
734                 }
735             for (reg = curr_static_id->hard_regs; reg != NULL; reg = reg->next)
736               if (reg->type != OP_IN)
737                 {
738                     remove_p = false;
739                     break;
740                 }
741 
742             if (remove_p && ! volatile_refs_p (PATTERN (curr_insn)))
743               {
744                 dst_regno = REGNO (SET_DEST (set));
745                 if (lra_dump_file != NULL)
746                     fprintf (lra_dump_file, "   Deleting dead insn %u\n",
747                                INSN_UID (curr_insn));
748                 lra_set_insn_deleted (curr_insn);
749                 if (lra_reg_info[dst_regno].nrefs == 0)
750                     {
751                       /* There might be some debug insns with the pseudo.  */
752                       unsigned int uid;
753                       rtx_insn *insn;
754 
755                       bitmap_copy (&temp_bitmap, &lra_reg_info[dst_regno].insn_bitmap);
756                       EXECUTE_IF_SET_IN_BITMAP (&temp_bitmap, 0, uid, bi)
757                         {
758                           insn = lra_insn_recog_data[uid]->insn;
759                           lra_substitute_pseudo_within_insn (insn, dst_regno,
760                                                                        SET_SRC (set), true);
761                           lra_update_insn_regno_info (insn);
762                         }
763                     }
764                 continue;
765               }
766           }
767 
768       /* Update max ref width and hard reg usage.  */
769       for (reg = curr_id->regs; reg != NULL; reg = reg->next)
770           {
771             int regno = reg->regno;
772 
773             if (partial_subreg_p (lra_reg_info[regno].biggest_mode,
774                                         reg->biggest_mode))
775               lra_reg_info[regno].biggest_mode = reg->biggest_mode;
776             if (HARD_REGISTER_NUM_P (regno))
777               lra_hard_reg_usage[regno] += freq;
778           }
779 
780       call_p = CALL_P (curr_insn);
781 
782       /* If we have a simple register copy and the source reg is live after
783            this instruction, then remove the source reg from the live set so
784            that it will not conflict with the destination reg.  */
785       rtx ignore_reg = non_conflicting_reg_copy_p (curr_insn);
786       if (ignore_reg != NULL_RTX)
787           {
788             int ignore_regno = REGNO (ignore_reg);
789             if (HARD_REGISTER_NUM_P (ignore_regno)
790                 && TEST_HARD_REG_BIT (hard_regs_live, ignore_regno))
791               CLEAR_HARD_REG_BIT (hard_regs_live, ignore_regno);
792             else if (!HARD_REGISTER_NUM_P (ignore_regno)
793                        && sparseset_bit_p (pseudos_live, ignore_regno))
794               sparseset_clear_bit (pseudos_live, ignore_regno);
795             else
796               /* We don't need any special handling of the source reg if
797                  it is dead after this instruction.  */
798               ignore_reg = NULL_RTX;
799           }
800 
801       src_regno = (set != NULL_RTX && REG_P (SET_SRC (set))
802                        ? REGNO (SET_SRC (set)) : -1);
803       dst_regno = (set != NULL_RTX && REG_P (SET_DEST (set))
804                        ? REGNO (SET_DEST (set)) : -1);
805       if (complete_info_p
806             && src_regno >= 0 && dst_regno >= 0
807             /* Check that source regno does not conflict with
808                destination regno to exclude most impossible
809                preferences.  */
810             && (((!HARD_REGISTER_NUM_P (src_regno)
811                     && (! sparseset_bit_p (pseudos_live, src_regno)
812                         || (!HARD_REGISTER_NUM_P (dst_regno)
813                               && lra_reg_val_equal_p (src_regno,
814                                                             lra_reg_info[dst_regno].val,
815                                                             lra_reg_info[dst_regno].offset))))
816                  || (HARD_REGISTER_NUM_P (src_regno)
817                        && ! TEST_HARD_REG_BIT (hard_regs_live, src_regno)))
818                 /* It might be 'inheritance pseudo <- reload pseudo'.  */
819                 || (src_regno >= lra_constraint_new_regno_start
820                       && dst_regno >= lra_constraint_new_regno_start
821                       /* Remember to skip special cases where src/dest regnos are
822                          the same, e.g. insn SET pattern has matching constraints
823                          like =r,0.  */
824                       && src_regno != dst_regno)))
825           {
826             int hard_regno = -1, regno = -1;
827 
828             if (dst_regno >= lra_constraint_new_regno_start
829                 && src_regno >= lra_constraint_new_regno_start)
830               {
831                 /* It might be still an original (non-reload) insn with
832                      one unused output and a constraint requiring to use
833                      the same reg for input/output operands. In this case
834                      dst_regno and src_regno have the same value, we don't
835                      need a misleading copy for this case.  */
836                 if (dst_regno != src_regno)
837                     lra_create_copy (dst_regno, src_regno, freq);
838               }
839             else if (dst_regno >= lra_constraint_new_regno_start)
840               {
841                 if (!HARD_REGISTER_NUM_P (hard_regno = src_regno))
842                     hard_regno = reg_renumber[src_regno];
843                 regno = dst_regno;
844               }
845             else if (src_regno >= lra_constraint_new_regno_start)
846               {
847                 if (!HARD_REGISTER_NUM_P (hard_regno = dst_regno))
848                     hard_regno = reg_renumber[dst_regno];
849                 regno = src_regno;
850               }
851             if (regno >= 0 && hard_regno >= 0)
852               lra_setup_reload_pseudo_preferenced_hard_reg
853                 (regno, hard_regno, freq);
854           }
855 
856       sparseset_clear (start_living);
857 
858       /* Mark each defined value as live.  We need to do this for
859            unused values because they still conflict with quantities
860            that are live at the time of the definition.  */
861       for (reg = curr_id->regs; reg != NULL; reg = reg->next)
862           if (reg->type != OP_IN)
863             {
864               update_pseudo_point (reg->regno, curr_point, USE_POINT);
865               mark_regno_live (reg->regno, reg->biggest_mode);
866               /* ??? Should be a no-op for unused registers.  */
867               check_pseudos_live_through_calls (reg->regno, last_call_abi);
868             }
869 
870       for (reg = curr_static_id->hard_regs; reg != NULL; reg = reg->next)
871           if (reg->type != OP_IN)
872             make_hard_regno_live (reg->regno);
873 
874       if (curr_id->arg_hard_regs != NULL)
875           for (i = 0; (regno = curr_id->arg_hard_regs[i]) >= 0; i++)
876             if (!HARD_REGISTER_NUM_P (regno))
877               /* It is a clobber.  */
878               make_hard_regno_live (regno - FIRST_PSEUDO_REGISTER);
879 
880       sparseset_copy (unused_set, start_living);
881 
882       sparseset_clear (start_dying);
883 
884       /* See which defined values die here.  */
885       for (reg = curr_id->regs; reg != NULL; reg = reg->next)
886           if (reg->type != OP_IN
887               && ! reg_early_clobber_p (reg, n_alt) && ! reg->subreg_p)
888             {
889               if (reg->type == OP_OUT)
890                 update_pseudo_point (reg->regno, curr_point, DEF_POINT);
891               mark_regno_dead (reg->regno, reg->biggest_mode);
892             }
893 
894       for (reg = curr_static_id->hard_regs; reg != NULL; reg = reg->next)
895           if (reg->type != OP_IN
896               && ! reg_early_clobber_p (reg, n_alt) && ! reg->subreg_p)
897             make_hard_regno_dead (reg->regno);
898 
899       if (curr_id->arg_hard_regs != NULL)
900           for (i = 0; (regno = curr_id->arg_hard_regs[i]) >= 0; i++)
901             if (!HARD_REGISTER_NUM_P (regno))
902               /* It is a clobber.  */
903               make_hard_regno_dead (regno - FIRST_PSEUDO_REGISTER);
904 
905       if (call_p)
906           {
907             function_abi call_abi = insn_callee_abi (curr_insn);
908 
909             if (last_call_abi != call_abi)
910               EXECUTE_IF_SET_IN_SPARSESET (pseudos_live, j)
911                 check_pseudos_live_through_calls (j, last_call_abi);
912 
913             last_call_abi = call_abi;
914 
915             sparseset_ior (pseudos_live_through_calls,
916                                pseudos_live_through_calls, pseudos_live);
917             if (cfun->has_nonlocal_label
918                 || (!targetm.setjmp_preserves_nonvolatile_regs_p ()
919                       && (find_reg_note (curr_insn, REG_SETJMP, NULL_RTX)
920                           != NULL_RTX)))
921               sparseset_ior (pseudos_live_through_setjumps,
922                                  pseudos_live_through_setjumps, pseudos_live);
923           }
924 
925       /* Increment the current program point if we must.  */
926       if (sparseset_contains_pseudos_p (unused_set)
927             || sparseset_contains_pseudos_p (start_dying))
928           next_program_point (curr_point, freq);
929 
930       /* If we removed the source reg from a simple register copy from the
931            live set above, then add it back now so we don't accidentally add
932            it to the start_living set below.  */
933       if (ignore_reg != NULL_RTX)
934           {
935             int ignore_regno = REGNO (ignore_reg);
936             if (HARD_REGISTER_NUM_P (ignore_regno))
937               SET_HARD_REG_BIT (hard_regs_live, ignore_regno);
938             else
939               sparseset_set_bit (pseudos_live, ignore_regno);
940           }
941 
942       sparseset_clear (start_living);
943 
944       /* Mark each used value as live.  */
945       for (reg = curr_id->regs; reg != NULL; reg = reg->next)
946           if (reg->type != OP_OUT)
947             {
948               if (reg->type == OP_IN)
949                 update_pseudo_point (reg->regno, curr_point, USE_POINT);
950               mark_regno_live (reg->regno, reg->biggest_mode);
951               check_pseudos_live_through_calls (reg->regno, last_call_abi);
952             }
953 
954       for (reg = curr_static_id->hard_regs; reg != NULL; reg = reg->next)
955           if (reg->type != OP_OUT)
956             make_hard_regno_live (reg->regno);
957 
958       if (curr_id->arg_hard_regs != NULL)
959           /* Make argument hard registers live.  */
960           for (i = 0; (regno = curr_id->arg_hard_regs[i]) >= 0; i++)
961             if (HARD_REGISTER_NUM_P (regno))
962               make_hard_regno_live (regno);
963 
964       sparseset_and_compl (dead_set, start_living, start_dying);
965 
966       sparseset_clear (start_dying);
967 
968       /* Mark early clobber outputs dead.  */
969       for (reg = curr_id->regs; reg != NULL; reg = reg->next)
970           if (reg->type != OP_IN
971               && reg_early_clobber_p (reg, n_alt) && ! reg->subreg_p)
972             {
973               if (reg->type == OP_OUT)
974                 update_pseudo_point (reg->regno, curr_point, DEF_POINT);
975               mark_regno_dead (reg->regno, reg->biggest_mode);
976 
977               /* We're done processing inputs, so make sure early clobber
978                  operands that are both inputs and outputs are still live.  */
979               if (reg->type == OP_INOUT)
980                 mark_regno_live (reg->regno, reg->biggest_mode);
981             }
982 
983       for (reg = curr_static_id->hard_regs; reg != NULL; reg = reg->next)
984           if (reg->type != OP_IN
985               && reg_early_clobber_p (reg, n_alt) && ! reg->subreg_p)
986             {
987               struct lra_insn_reg *reg2;
988 
989               /* We can have early clobbered non-operand hard reg and
990                  the same hard reg as an insn input.  Don't make hard
991                  reg dead before the insns.  */
992               for (reg2 = curr_id->regs; reg2 != NULL; reg2 = reg2->next)
993                 if (reg2->type != OP_OUT && reg2->regno == reg->regno)
994                     break;
995               if (reg2 == NULL)
996                 make_hard_regno_dead (reg->regno);
997             }
998 
999       /* Increment the current program point if we must.  */
1000       if (sparseset_contains_pseudos_p (dead_set)
1001             || sparseset_contains_pseudos_p (start_dying))
1002           next_program_point (curr_point, freq);
1003 
1004       /* Update notes.        */
1005       for (link_loc = &REG_NOTES (curr_insn); (link = *link_loc) != NULL_RTX;)
1006           {
1007             if (REG_NOTE_KIND (link) != REG_DEAD
1008                 && REG_NOTE_KIND (link) != REG_UNUSED)
1009               ;
1010             else if (REG_P (XEXP (link, 0)))
1011               {
1012                 rtx note_reg = XEXP (link, 0);
1013                 int note_regno = REGNO (note_reg);
1014 
1015                 if ((REG_NOTE_KIND (link) == REG_DEAD
1016                        && ! regnos_in_sparseset_p (dead_set, note_regno,
1017                                                          GET_MODE (note_reg)))
1018                       || (REG_NOTE_KIND (link) == REG_UNUSED
1019                           && ! regnos_in_sparseset_p (unused_set, note_regno,
1020                                                               GET_MODE (note_reg))))
1021                     {
1022                       *link_loc = XEXP (link, 1);
1023                       continue;
1024                     }
1025                 if (REG_NOTE_KIND (link) == REG_DEAD)
1026                     clear_sparseset_regnos (dead_set, note_regno,
1027                                                   GET_MODE (note_reg));
1028                 else if (REG_NOTE_KIND (link) == REG_UNUSED)
1029                     clear_sparseset_regnos (unused_set, note_regno,
1030                                                   GET_MODE (note_reg));
1031               }
1032             link_loc = &XEXP (link, 1);
1033           }
1034       EXECUTE_IF_SET_IN_SPARSESET (dead_set, j)
1035           add_reg_note (curr_insn, REG_DEAD, regno_reg_rtx[j]);
1036       EXECUTE_IF_SET_IN_SPARSESET (unused_set, j)
1037           add_reg_note (curr_insn, REG_UNUSED, regno_reg_rtx[j]);
1038     }
1039 
1040   if (bb_has_eh_pred (bb))
1041     /* Any pseudos that are currently live conflict with the eh_return
1042        data registers.  For liveness purposes, these registers are set
1043        by artificial definitions at the start of the BB, so are not
1044        actually live on entry.  */
1045     for (j = 0; ; ++j)
1046       {
1047           unsigned int regno = EH_RETURN_DATA_REGNO (j);
1048 
1049           if (regno == INVALID_REGNUM)
1050             break;
1051 
1052           make_hard_regno_live (regno);
1053           make_hard_regno_dead (regno);
1054       }
1055 
1056   /* Pseudos can't go in stack regs at the start of a basic block that
1057      is reached by an abnormal edge.  Likewise for registers that are at
1058      least partly call clobbered, because caller-save, fixup_abnormal_edges
1059      and possibly the table driven EH machinery are not quite ready to
1060      handle such pseudos live across such edges.  */
1061   if (bb_has_abnormal_pred (bb))
1062     {
1063       HARD_REG_SET clobbers;
1064 
1065       CLEAR_HARD_REG_SET (clobbers);
1066 #ifdef STACK_REGS
1067       EXECUTE_IF_SET_IN_SPARSESET (pseudos_live, px)
1068           lra_reg_info[px].no_stack_p = true;
1069       for (px = FIRST_STACK_REG; px <= LAST_STACK_REG; px++)
1070           SET_HARD_REG_BIT (clobbers, px);
1071 #endif
1072       /* No need to record conflicts for call clobbered regs if we
1073            have nonlocal labels around, as we don't ever try to
1074            allocate such regs in this case.  */
1075       if (!cfun->has_nonlocal_label
1076             && has_abnormal_call_or_eh_pred_edge_p (bb))
1077           for (px = 0; HARD_REGISTER_NUM_P (px); px++)
1078             if (eh_edge_abi.clobbers_at_least_part_of_reg_p (px)
1079 #ifdef REAL_PIC_OFFSET_TABLE_REGNUM
1080                 /* We should create a conflict of PIC pseudo with PIC
1081                      hard reg as PIC hard reg can have a wrong value after
1082                      jump described by the abnormal edge.  In this case we
1083                      cannot allocate PIC hard reg to PIC pseudo as PIC
1084                      pseudo will also have a wrong value.  */
1085                 || (px == REAL_PIC_OFFSET_TABLE_REGNUM
1086                       && pic_offset_table_rtx != NULL_RTX
1087                       && !HARD_REGISTER_P (pic_offset_table_rtx))
1088 #endif
1089                 )
1090               SET_HARD_REG_BIT (clobbers, px);
1091 
1092       clobbers &= ~hard_regs_live;
1093       for (px = 0; HARD_REGISTER_NUM_P (px); px++)
1094           if (TEST_HARD_REG_BIT (clobbers, px))
1095             {
1096               make_hard_regno_live (px);
1097               make_hard_regno_dead (px);
1098             }
1099     }
1100 
1101   bool live_change_p = false;
1102   /* Check if bb border live info was changed.  */
1103   unsigned int live_pseudos_num = 0;
1104   EXECUTE_IF_SET_IN_BITMAP (df_get_live_in (bb),
1105                                   FIRST_PSEUDO_REGISTER, j, bi)
1106     {
1107       live_pseudos_num++;
1108       if (! sparseset_bit_p (pseudos_live, j))
1109           {
1110             live_change_p = true;
1111             if (lra_dump_file != NULL)
1112               fprintf (lra_dump_file,
1113                          "  r%d is removed as live at bb%d start\n", j, bb->index);
1114             break;
1115           }
1116     }
1117   if (! live_change_p
1118       && sparseset_cardinality (pseudos_live) != live_pseudos_num)
1119     {
1120       live_change_p = true;
1121       if (lra_dump_file != NULL)
1122           EXECUTE_IF_SET_IN_SPARSESET (pseudos_live, j)
1123             if (! bitmap_bit_p (df_get_live_in (bb), j))
1124               fprintf (lra_dump_file,
1125                          "  r%d is added to live at bb%d start\n", j, bb->index);
1126     }
1127   /* See if we'll need an increment at the end of this basic block.
1128      An increment is needed if the PSEUDOS_LIVE set is not empty,
1129      to make sure the finish points are set up correctly.  */
1130   need_curr_point_incr = (sparseset_cardinality (pseudos_live) > 0);
1131 
1132   EXECUTE_IF_SET_IN_SPARSESET (pseudos_live, i)
1133     {
1134       update_pseudo_point (i, curr_point, DEF_POINT);
1135       mark_pseudo_dead (i);
1136     }
1137 
1138   EXECUTE_IF_SET_IN_BITMAP (df_get_live_in (bb), FIRST_PSEUDO_REGISTER, j, bi)
1139     {
1140       if (sparseset_cardinality (pseudos_live_through_calls) == 0)
1141           break;
1142       if (sparseset_bit_p (pseudos_live_through_calls, j))
1143           check_pseudos_live_through_calls (j, last_call_abi);
1144     }
1145 
1146   for (i = 0; HARD_REGISTER_NUM_P (i); ++i)
1147     {
1148       if (!TEST_HARD_REG_BIT (hard_regs_live, i))
1149           continue;
1150 
1151       if (!TEST_HARD_REG_BIT (hard_regs_spilled_into, i))
1152           continue;
1153 
1154       if (bitmap_bit_p (df_get_live_in (bb), i))
1155           continue;
1156 
1157       live_change_p = true;
1158       if (lra_dump_file)
1159           fprintf (lra_dump_file,
1160                      "  hard reg r%d is added to live at bb%d start\n", i,
1161                      bb->index);
1162       bitmap_set_bit (df_get_live_in (bb), i);
1163     }
1164 
1165   if (need_curr_point_incr)
1166     next_program_point (curr_point, freq);
1167 
1168   return live_change_p;
1169 }
1170 
1171 /* Compress pseudo live ranges by removing program points where
1172    nothing happens.  Complexity of many algorithms in LRA is linear
1173    function of program points number.  To speed up the code we try to
1174    minimize the number of the program points here.  */
1175 static void
remove_some_program_points_and_update_live_ranges(void)1176 remove_some_program_points_and_update_live_ranges (void)
1177 {
1178   unsigned i;
1179   int n, max_regno;
1180   int *map;
1181   lra_live_range_t r, prev_r, next_r;
1182   sbitmap_iterator sbi;
1183   bool born_p, dead_p, prev_born_p, prev_dead_p;
1184 
1185   auto_sbitmap born (lra_live_max_point);
1186   auto_sbitmap dead (lra_live_max_point);
1187   bitmap_clear (born);
1188   bitmap_clear (dead);
1189   max_regno = max_reg_num ();
1190   for (i = FIRST_PSEUDO_REGISTER; i < (unsigned) max_regno; i++)
1191     {
1192       for (r = lra_reg_info[i].live_ranges; r != NULL; r = r->next)
1193           {
1194             lra_assert (r->start <= r->finish);
1195             bitmap_set_bit (born, r->start);
1196             bitmap_set_bit (dead, r->finish);
1197           }
1198     }
1199   auto_sbitmap born_or_dead (lra_live_max_point);
1200   bitmap_ior (born_or_dead, born, dead);
1201   map = XCNEWVEC (int, lra_live_max_point);
1202   n = -1;
1203   prev_born_p = prev_dead_p = false;
1204   EXECUTE_IF_SET_IN_BITMAP (born_or_dead, 0, i, sbi)
1205     {
1206       born_p = bitmap_bit_p (born, i);
1207       dead_p = bitmap_bit_p (dead, i);
1208       if ((prev_born_p && ! prev_dead_p && born_p && ! dead_p)
1209             || (prev_dead_p && ! prev_born_p && dead_p && ! born_p))
1210           {
1211             map[i] = n;
1212             lra_point_freq[n] = MAX (lra_point_freq[n], lra_point_freq[i]);
1213           }
1214       else
1215           {
1216             map[i] = ++n;
1217             lra_point_freq[n] = lra_point_freq[i];
1218           }
1219       prev_born_p = born_p;
1220       prev_dead_p = dead_p;
1221     }
1222   n++;
1223   if (lra_dump_file != NULL)
1224     fprintf (lra_dump_file, "Compressing live ranges: from %d to %d - %d%%\n",
1225                lra_live_max_point, n,
1226                lra_live_max_point ? 100 * n / lra_live_max_point : 100);
1227   if (n < lra_live_max_point)
1228     {
1229       lra_live_max_point = n;
1230       for (i = FIRST_PSEUDO_REGISTER; i < (unsigned) max_regno; i++)
1231           {
1232             for (prev_r = NULL, r = lra_reg_info[i].live_ranges;
1233                  r != NULL;
1234                  r = next_r)
1235               {
1236                 next_r = r->next;
1237                 r->start = map[r->start];
1238                 r->finish = map[r->finish];
1239                 if (prev_r == NULL || prev_r->start > r->finish + 1)
1240                     {
1241                       prev_r = r;
1242                       continue;
1243                     }
1244                 prev_r->start = r->start;
1245                 prev_r->next = next_r;
1246                 lra_live_range_pool.remove (r);
1247               }
1248           }
1249     }
1250   free (map);
1251 }
1252 
1253 /* Print live ranges R to file F.  */
1254 void
lra_print_live_range_list(FILE * f,lra_live_range_t r)1255 lra_print_live_range_list (FILE *f, lra_live_range_t r)
1256 {
1257   for (; r != NULL; r = r->next)
1258     fprintf (f, " [%d..%d]", r->start, r->finish);
1259   fprintf (f, "\n");
1260 }
1261 
1262 DEBUG_FUNCTION void
debug(lra_live_range & ref)1263 debug (lra_live_range &ref)
1264 {
1265   lra_print_live_range_list (stderr, &ref);
1266 }
1267 
1268 DEBUG_FUNCTION void
debug(lra_live_range * ptr)1269 debug (lra_live_range *ptr)
1270 {
1271   if (ptr)
1272     debug (*ptr);
1273   else
1274     fprintf (stderr, "<nil>\n");
1275 }
1276 
1277 /* Print live ranges R to stderr.  */
1278 void
lra_debug_live_range_list(lra_live_range_t r)1279 lra_debug_live_range_list (lra_live_range_t r)
1280 {
1281   lra_print_live_range_list (stderr, r);
1282 }
1283 
1284 /* Print live ranges of pseudo REGNO to file F.    */
1285 static void
print_pseudo_live_ranges(FILE * f,int regno)1286 print_pseudo_live_ranges (FILE *f, int regno)
1287 {
1288   if (lra_reg_info[regno].live_ranges == NULL)
1289     return;
1290   fprintf (f, " r%d:", regno);
1291   lra_print_live_range_list (f, lra_reg_info[regno].live_ranges);
1292 }
1293 
1294 /* Print live ranges of pseudo REGNO to stderr.    */
1295 void
lra_debug_pseudo_live_ranges(int regno)1296 lra_debug_pseudo_live_ranges (int regno)
1297 {
1298   print_pseudo_live_ranges (stderr, regno);
1299 }
1300 
1301 /* Print live ranges of all pseudos to file F.    */
1302 static void
print_live_ranges(FILE * f)1303 print_live_ranges (FILE *f)
1304 {
1305   int i, max_regno;
1306 
1307   max_regno = max_reg_num ();
1308   for (i = FIRST_PSEUDO_REGISTER; i < max_regno; i++)
1309     print_pseudo_live_ranges (f, i);
1310 }
1311 
1312 /* Print live ranges of all pseudos to stderr.    */
1313 void
lra_debug_live_ranges(void)1314 lra_debug_live_ranges (void)
1315 {
1316   print_live_ranges (stderr);
1317 }
1318 
1319 /* Compress pseudo live ranges.          */
1320 static void
compress_live_ranges(void)1321 compress_live_ranges (void)
1322 {
1323   remove_some_program_points_and_update_live_ranges ();
1324   if (lra_dump_file != NULL)
1325     {
1326       fprintf (lra_dump_file, "Ranges after the compression:\n");
1327       print_live_ranges (lra_dump_file);
1328     }
1329 }
1330 
1331 
1332 
1333 /* The number of the current live range pass.  */
1334 int lra_live_range_iter;
1335 
1336 /* The function creates live ranges only for memory pseudos (or for
1337    all ones if ALL_P), set up CONFLICT_HARD_REGS for the pseudos.  It
1338    also does dead insn elimination if DEAD_INSN_P and global live
1339    analysis only for pseudos and only if the pseudo live info was
1340    changed on a BB border.  Return TRUE if the live info was
1341    changed.  */
1342 static bool
lra_create_live_ranges_1(bool all_p,bool dead_insn_p)1343 lra_create_live_ranges_1 (bool all_p, bool dead_insn_p)
1344 {
1345   basic_block bb;
1346   int i, hard_regno, max_regno = max_reg_num ();
1347   int curr_point;
1348   bool bb_live_change_p, have_referenced_pseudos = false;
1349 
1350   timevar_push (TV_LRA_CREATE_LIVE_RANGES);
1351 
1352   complete_info_p = all_p;
1353   if (lra_dump_file != NULL)
1354     fprintf (lra_dump_file,
1355                "\n********** Pseudo live ranges #%d: **********\n\n",
1356                ++lra_live_range_iter);
1357   memset (lra_hard_reg_usage, 0, sizeof (lra_hard_reg_usage));
1358   for (i = 0; i < max_regno; i++)
1359     {
1360       lra_reg_info[i].live_ranges = NULL;
1361       CLEAR_HARD_REG_SET (lra_reg_info[i].conflict_hard_regs);
1362       lra_reg_info[i].preferred_hard_regno1 = -1;
1363       lra_reg_info[i].preferred_hard_regno2 = -1;
1364       lra_reg_info[i].preferred_hard_regno_profit1 = 0;
1365       lra_reg_info[i].preferred_hard_regno_profit2 = 0;
1366 #ifdef STACK_REGS
1367       lra_reg_info[i].no_stack_p = false;
1368 #endif
1369       /* The biggest mode is already set but its value might be to
1370            conservative because of recent transformation.  Here in this
1371            file we recalculate it again as it costs practically
1372            nothing.  */
1373       if (!HARD_REGISTER_NUM_P (i) && regno_reg_rtx[i] != NULL_RTX)
1374           lra_reg_info[i].biggest_mode = GET_MODE (regno_reg_rtx[i]);
1375       else
1376           lra_reg_info[i].biggest_mode = VOIDmode;
1377       if (!HARD_REGISTER_NUM_P (i)
1378             && lra_reg_info[i].nrefs != 0)
1379           {
1380             if ((hard_regno = reg_renumber[i]) >= 0)
1381               lra_hard_reg_usage[hard_regno] += lra_reg_info[i].freq;
1382             have_referenced_pseudos = true;
1383           }
1384     }
1385   lra_free_copies ();
1386 
1387   /* Under some circumstances, we can have functions without pseudo
1388      registers.  For such functions, lra_live_max_point will be 0,
1389      see e.g. PR55604, and there's nothing more to do for us here.  */
1390   if (! have_referenced_pseudos)
1391     {
1392       timevar_pop (TV_LRA_CREATE_LIVE_RANGES);
1393       return false;
1394     }
1395 
1396   pseudos_live = sparseset_alloc (max_regno);
1397   pseudos_live_through_calls = sparseset_alloc (max_regno);
1398   pseudos_live_through_setjumps = sparseset_alloc (max_regno);
1399   start_living = sparseset_alloc (max_regno);
1400   start_dying = sparseset_alloc (max_regno);
1401   dead_set = sparseset_alloc (max_regno);
1402   unused_set = sparseset_alloc (max_regno);
1403   curr_point = 0;
1404   unsigned new_length = get_max_uid () * 2;
1405   point_freq_vec.truncate (0);
1406   point_freq_vec.reserve_exact (new_length);
1407   lra_point_freq = point_freq_vec.address ();
1408   auto_vec<int, 20> post_order_rev_cfg;
1409   inverted_post_order_compute (&post_order_rev_cfg);
1410   lra_assert (post_order_rev_cfg.length () == (unsigned) n_basic_blocks_for_fn (cfun));
1411   bb_live_change_p = false;
1412   for (i = post_order_rev_cfg.length () - 1; i >= 0; --i)
1413     {
1414       bb = BASIC_BLOCK_FOR_FN (cfun, post_order_rev_cfg[i]);
1415       if (bb == EXIT_BLOCK_PTR_FOR_FN (cfun) || bb
1416             == ENTRY_BLOCK_PTR_FOR_FN (cfun))
1417           continue;
1418       if (process_bb_lives (bb, curr_point, dead_insn_p))
1419           bb_live_change_p = true;
1420     }
1421   if (bb_live_change_p)
1422     {
1423       /* We need to clear pseudo live info as some pseudos can
1424            disappear, e.g. pseudos with used equivalences.  */
1425       FOR_EACH_BB_FN (bb, cfun)
1426           {
1427             bitmap_clear_range (df_get_live_in (bb), FIRST_PSEUDO_REGISTER,
1428                                     max_regno - FIRST_PSEUDO_REGISTER);
1429             bitmap_clear_range (df_get_live_out (bb), FIRST_PSEUDO_REGISTER,
1430                                     max_regno - FIRST_PSEUDO_REGISTER);
1431           }
1432       /* As we did not change CFG since LRA start we can use
1433            DF-infrastructure solver to solve live data flow problem.  */
1434       for (int i = 0; HARD_REGISTER_NUM_P (i); ++i)
1435           {
1436             if (TEST_HARD_REG_BIT (hard_regs_spilled_into, i))
1437               bitmap_clear_bit (&all_hard_regs_bitmap, i);
1438           }
1439       df_simple_dataflow
1440           (DF_BACKWARD, NULL, live_con_fun_0, live_con_fun_n,
1441            live_trans_fun, &all_blocks,
1442            df_get_postorder (DF_BACKWARD), df_get_n_blocks (DF_BACKWARD));
1443       if (lra_dump_file != NULL)
1444           {
1445             fprintf (lra_dump_file,
1446                        "Global pseudo live data have been updated:\n");
1447             basic_block bb;
1448             FOR_EACH_BB_FN (bb, cfun)
1449               {
1450                 bb_data_t bb_info = get_bb_data (bb);
1451                 bitmap bb_livein = df_get_live_in (bb);
1452                 bitmap bb_liveout = df_get_live_out (bb);
1453 
1454                 fprintf (lra_dump_file, "\nBB %d:\n", bb->index);
1455                 lra_dump_bitmap_with_title ("  gen:",
1456                                                     &bb_info->gen_pseudos, bb->index);
1457                 lra_dump_bitmap_with_title ("  killed:",
1458                                                     &bb_info->killed_pseudos, bb->index);
1459                 lra_dump_bitmap_with_title ("  livein:", bb_livein, bb->index);
1460                 lra_dump_bitmap_with_title ("  liveout:", bb_liveout, bb->index);
1461               }
1462           }
1463     }
1464   lra_live_max_point = curr_point;
1465   if (lra_dump_file != NULL)
1466     print_live_ranges (lra_dump_file);
1467   /* Clean up.      */
1468   sparseset_free (unused_set);
1469   sparseset_free (dead_set);
1470   sparseset_free (start_dying);
1471   sparseset_free (start_living);
1472   sparseset_free (pseudos_live_through_calls);
1473   sparseset_free (pseudos_live_through_setjumps);
1474   sparseset_free (pseudos_live);
1475   compress_live_ranges ();
1476   timevar_pop (TV_LRA_CREATE_LIVE_RANGES);
1477   return bb_live_change_p;
1478 }
1479 
1480 /* The main entry function creates live-ranges and other live info
1481    necessary for the assignment sub-pass.  It uses
1482    lra_creates_live_ranges_1 -- so read comments for the
1483    function.  */
1484 void
lra_create_live_ranges(bool all_p,bool dead_insn_p)1485 lra_create_live_ranges (bool all_p, bool dead_insn_p)
1486 {
1487   if (! lra_create_live_ranges_1 (all_p, dead_insn_p))
1488     return;
1489   if (lra_dump_file != NULL)
1490     fprintf (lra_dump_file, "Live info was changed -- recalculate it\n");
1491   /* Live info was changed on a bb border.  It means that some info,
1492      e.g. about conflict regs, calls crossed, and live ranges may be
1493      wrong.  We need this info for allocation.  So recalculate it
1494      again but without removing dead insns which can change live info
1495      again.  Repetitive live range calculations are expensive therefore
1496      we stop here as we already have correct info although some
1497      improvement in rare cases could be possible on this sub-pass if
1498      we do dead insn elimination again (still the improvement may
1499      happen later).  */
1500   lra_clear_live_ranges ();
1501   bool res = lra_create_live_ranges_1 (all_p, false);
1502   lra_assert (! res);
1503 }
1504 
1505 /* Finish all live ranges.  */
1506 void
lra_clear_live_ranges(void)1507 lra_clear_live_ranges (void)
1508 {
1509   int i;
1510 
1511   for (i = 0; i < max_reg_num (); i++)
1512     free_live_range_list (lra_reg_info[i].live_ranges);
1513   point_freq_vec.release ();
1514 }
1515 
1516 /* Initialize live ranges data once per function.  */
1517 void
lra_live_ranges_init(void)1518 lra_live_ranges_init (void)
1519 {
1520   bitmap_initialize (&temp_bitmap, &reg_obstack);
1521   initiate_live_solver ();
1522 }
1523 
1524 /* Finish live ranges data once per function.  */
1525 void
lra_live_ranges_finish(void)1526 lra_live_ranges_finish (void)
1527 {
1528   finish_live_solver ();
1529   bitmap_clear (&temp_bitmap);
1530   lra_live_range_pool.release ();
1531 }
1532