Update Copyright years for files modified in 2011 and/or 2012.
[platform/upstream/gcc.git] / gcc / ira-lives.c
1 /* IRA processing allocno lives to build allocno live ranges.
2    Copyright (C) 2006, 2007, 2008, 2009, 2010, 2011, 2012
3    Free Software Foundation, Inc.
4    Contributed by Vladimir Makarov <vmakarov@redhat.com>.
5
6 This file is part of GCC.
7
8 GCC is free software; you can redistribute it and/or modify it under
9 the terms of the GNU General Public License as published by the Free
10 Software Foundation; either version 3, or (at your option) any later
11 version.
12
13 GCC is distributed in the hope that it will be useful, but WITHOUT ANY
14 WARRANTY; without even the implied warranty of MERCHANTABILITY or
15 FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
16 for more details.
17
18 You should have received a copy of the GNU General Public License
19 along with GCC; see the file COPYING3.  If not see
20 <http://www.gnu.org/licenses/>.  */
21
22 #include "config.h"
23 #include "system.h"
24 #include "coretypes.h"
25 #include "tm.h"
26 #include "regs.h"
27 #include "rtl.h"
28 #include "tm_p.h"
29 #include "target.h"
30 #include "flags.h"
31 #include "except.h"
32 #include "hard-reg-set.h"
33 #include "basic-block.h"
34 #include "insn-config.h"
35 #include "recog.h"
36 #include "diagnostic-core.h"
37 #include "params.h"
38 #include "df.h"
39 #include "sbitmap.h"
40 #include "sparseset.h"
41 #include "ira-int.h"
42
43 /* The code in this file is similar to one in global but the code
44    works on the allocno basis and creates live ranges instead of
45    pseudo-register conflicts.  */
46
47 /* Program points are enumerated by numbers from range
48    0..IRA_MAX_POINT-1.  There are approximately two times more program
49    points than insns.  Program points are places in the program where
50    liveness info can be changed.  In most general case (there are more
51    complicated cases too) some program points correspond to places
52    where input operand dies and other ones correspond to places where
53    output operands are born.  */
54 int ira_max_point;
55
56 /* Arrays of size IRA_MAX_POINT mapping a program point to the allocno
57    live ranges with given start/finish point.  */
58 live_range_t *ira_start_point_ranges, *ira_finish_point_ranges;
59
60 /* Number of the current program point.  */
61 static int curr_point;
62
63 /* Point where register pressure excess started or -1 if there is no
64    register pressure excess.  Excess pressure for a register class at
65    some point means that there are more allocnos of given register
66    class living at the point than number of hard-registers of the
67    class available for the allocation.  It is defined only for
68    pressure classes.  */
69 static int high_pressure_start_point[N_REG_CLASSES];
70
71 /* Objects live at current point in the scan.  */
72 static sparseset objects_live;
73
74 /* A temporary bitmap used in functions that wish to avoid visiting an allocno
75    multiple times.  */
76 static sparseset allocnos_processed;
77
78 /* Set of hard regs (except eliminable ones) currently live.  */
79 static HARD_REG_SET hard_regs_live;
80
81 /* The loop tree node corresponding to the current basic block.  */
82 static ira_loop_tree_node_t curr_bb_node;
83
84 /* The number of the last processed call.  */
85 static int last_call_num;
86 /* The number of last call at which given allocno was saved.  */
87 static int *allocno_saved_at_call;
88
89 /* Record the birth of hard register REGNO, updating hard_regs_live and
90    hard reg conflict information for living allocnos.  */
91 static void
92 make_hard_regno_born (int regno)
93 {
94   unsigned int i;
95
96   SET_HARD_REG_BIT (hard_regs_live, regno);
97   EXECUTE_IF_SET_IN_SPARSESET (objects_live, i)
98     {
99       ira_object_t obj = ira_object_id_map[i];
100
101       SET_HARD_REG_BIT (OBJECT_CONFLICT_HARD_REGS (obj), regno);
102       SET_HARD_REG_BIT (OBJECT_TOTAL_CONFLICT_HARD_REGS (obj), regno);
103     }
104 }
105
106 /* Process the death of hard register REGNO.  This updates
107    hard_regs_live.  */
108 static void
109 make_hard_regno_dead (int regno)
110 {
111   CLEAR_HARD_REG_BIT (hard_regs_live, regno);
112 }
113
114 /* Record the birth of object OBJ.  Set a bit for it in objects_live,
115    start a new live range for it if necessary and update hard register
116    conflicts.  */
117 static void
118 make_object_born (ira_object_t obj)
119 {
120   live_range_t lr = OBJECT_LIVE_RANGES (obj);
121
122   sparseset_set_bit (objects_live, OBJECT_CONFLICT_ID (obj));
123   IOR_HARD_REG_SET (OBJECT_CONFLICT_HARD_REGS (obj), hard_regs_live);
124   IOR_HARD_REG_SET (OBJECT_TOTAL_CONFLICT_HARD_REGS (obj), hard_regs_live);
125
126   if (lr == NULL
127       || (lr->finish != curr_point && lr->finish + 1 != curr_point))
128     ira_add_live_range_to_object (obj, curr_point, -1);
129 }
130
131 /* Update ALLOCNO_EXCESS_PRESSURE_POINTS_NUM for the allocno
132    associated with object OBJ.  */
133 static void
134 update_allocno_pressure_excess_length (ira_object_t obj)
135 {
136   ira_allocno_t a = OBJECT_ALLOCNO (obj);
137   int start, i;
138   enum reg_class aclass, pclass, cl;
139   live_range_t p;
140
141   aclass = ALLOCNO_CLASS (a);
142   pclass = ira_pressure_class_translate[aclass];
143   for (i = 0;
144        (cl = ira_reg_class_super_classes[pclass][i]) != LIM_REG_CLASSES;
145        i++)
146     {
147       if (! ira_reg_pressure_class_p[cl])
148         continue;
149       if (high_pressure_start_point[cl] < 0)
150         continue;
151       p = OBJECT_LIVE_RANGES (obj);
152       ira_assert (p != NULL);
153       start = (high_pressure_start_point[cl] > p->start
154                ? high_pressure_start_point[cl] : p->start);
155       ALLOCNO_EXCESS_PRESSURE_POINTS_NUM (a) += curr_point - start + 1;
156     }
157 }
158
159 /* Process the death of object OBJ, which is associated with allocno
160    A.  This finishes the current live range for it.  */
161 static void
162 make_object_dead (ira_object_t obj)
163 {
164   live_range_t lr;
165
166   sparseset_clear_bit (objects_live, OBJECT_CONFLICT_ID (obj));
167   lr = OBJECT_LIVE_RANGES (obj);
168   ira_assert (lr != NULL);
169   lr->finish = curr_point;
170   update_allocno_pressure_excess_length (obj);
171 }
172
173 /* The current register pressures for each pressure class for the current
174    basic block.  */
175 static int curr_reg_pressure[N_REG_CLASSES];
176
177 /* Record that register pressure for PCLASS increased by N registers.
178    Update the current register pressure, maximal register pressure for
179    the current BB and the start point of the register pressure
180    excess.  */
181 static void
182 inc_register_pressure (enum reg_class pclass, int n)
183 {
184   int i;
185   enum reg_class cl;
186
187   for (i = 0;
188        (cl = ira_reg_class_super_classes[pclass][i]) != LIM_REG_CLASSES;
189        i++)
190     {
191       if (! ira_reg_pressure_class_p[cl])
192         continue;
193       curr_reg_pressure[cl] += n;
194       if (high_pressure_start_point[cl] < 0
195           && (curr_reg_pressure[cl] > ira_class_hard_regs_num[cl]))
196         high_pressure_start_point[cl] = curr_point;
197       if (curr_bb_node->reg_pressure[cl] < curr_reg_pressure[cl])
198         curr_bb_node->reg_pressure[cl] = curr_reg_pressure[cl];
199     }
200 }
201
202 /* Record that register pressure for PCLASS has decreased by NREGS
203    registers; update current register pressure, start point of the
204    register pressure excess, and register pressure excess length for
205    living allocnos.  */
206
207 static void
208 dec_register_pressure (enum reg_class pclass, int nregs)
209 {
210   int i;
211   unsigned int j;
212   enum reg_class cl;
213   bool set_p = false;
214
215   for (i = 0;
216        (cl = ira_reg_class_super_classes[pclass][i]) != LIM_REG_CLASSES;
217        i++)
218     {
219       if (! ira_reg_pressure_class_p[cl])
220         continue;
221       curr_reg_pressure[cl] -= nregs;
222       ira_assert (curr_reg_pressure[cl] >= 0);
223       if (high_pressure_start_point[cl] >= 0
224           && curr_reg_pressure[cl] <= ira_class_hard_regs_num[cl])
225         set_p = true;
226     }
227   if (set_p)
228     {
229       EXECUTE_IF_SET_IN_SPARSESET (objects_live, j)
230         update_allocno_pressure_excess_length (ira_object_id_map[j]);
231       for (i = 0;
232            (cl = ira_reg_class_super_classes[pclass][i]) != LIM_REG_CLASSES;
233            i++)
234         {
235           if (! ira_reg_pressure_class_p[cl])
236             continue;
237           if (high_pressure_start_point[cl] >= 0
238               && curr_reg_pressure[cl] <= ira_class_hard_regs_num[cl])
239             high_pressure_start_point[cl] = -1;
240         }
241     }
242 }
243
244 /* Determine from the objects_live bitmap whether REGNO is currently live,
245    and occupies only one object.  Return false if we have no information.  */
246 static bool
247 pseudo_regno_single_word_and_live_p (int regno)
248 {
249   ira_allocno_t a = ira_curr_regno_allocno_map[regno];
250   ira_object_t obj;
251
252   if (a == NULL)
253     return false;
254   if (ALLOCNO_NUM_OBJECTS (a) > 1)
255     return false;
256
257   obj = ALLOCNO_OBJECT (a, 0);
258
259   return sparseset_bit_p (objects_live, OBJECT_CONFLICT_ID (obj));
260 }
261
262 /* Mark the pseudo register REGNO as live.  Update all information about
263    live ranges and register pressure.  */
264 static void
265 mark_pseudo_regno_live (int regno)
266 {
267   ira_allocno_t a = ira_curr_regno_allocno_map[regno];
268   enum reg_class pclass;
269   int i, n, nregs;
270
271   if (a == NULL)
272     return;
273
274   /* Invalidate because it is referenced.  */
275   allocno_saved_at_call[ALLOCNO_NUM (a)] = 0;
276
277   n = ALLOCNO_NUM_OBJECTS (a);
278   pclass = ira_pressure_class_translate[ALLOCNO_CLASS (a)];
279   nregs = ira_reg_class_max_nregs[ALLOCNO_CLASS (a)][ALLOCNO_MODE (a)];
280   if (n > 1)
281     {
282       /* We track every subobject separately.  */
283       gcc_assert (nregs == n);
284       nregs = 1;
285     }
286
287   for (i = 0; i < n; i++)
288     {
289       ira_object_t obj = ALLOCNO_OBJECT (a, i);
290
291       if (sparseset_bit_p (objects_live, OBJECT_CONFLICT_ID (obj)))
292         continue;
293
294       inc_register_pressure (pclass, nregs);
295       make_object_born (obj);
296     }
297 }
298
299 /* Like mark_pseudo_regno_live, but try to only mark one subword of
300    the pseudo as live.  SUBWORD indicates which; a value of 0
301    indicates the low part.  */
302 static void
303 mark_pseudo_regno_subword_live (int regno, int subword)
304 {
305   ira_allocno_t a = ira_curr_regno_allocno_map[regno];
306   int n;
307   enum reg_class pclass;
308   ira_object_t obj;
309
310   if (a == NULL)
311     return;
312
313   /* Invalidate because it is referenced.  */
314   allocno_saved_at_call[ALLOCNO_NUM (a)] = 0;
315
316   n = ALLOCNO_NUM_OBJECTS (a);
317   if (n == 1)
318     {
319       mark_pseudo_regno_live (regno);
320       return;
321     }
322
323   pclass = ira_pressure_class_translate[ALLOCNO_CLASS (a)];
324   gcc_assert
325     (n == ira_reg_class_max_nregs[ALLOCNO_CLASS (a)][ALLOCNO_MODE (a)]);
326   obj = ALLOCNO_OBJECT (a, subword);
327
328   if (sparseset_bit_p (objects_live, OBJECT_CONFLICT_ID (obj)))
329     return;
330
331   inc_register_pressure (pclass, 1);
332   make_object_born (obj);
333 }
334
335 /* Mark the register REG as live.  Store a 1 in hard_regs_live for
336    this register, record how many consecutive hardware registers it
337    actually needs.  */
338 static void
339 mark_hard_reg_live (rtx reg)
340 {
341   int regno = REGNO (reg);
342
343   if (! TEST_HARD_REG_BIT (ira_no_alloc_regs, regno))
344     {
345       int last = regno + hard_regno_nregs[regno][GET_MODE (reg)];
346       enum reg_class aclass, pclass;
347
348       while (regno < last)
349         {
350           if (! TEST_HARD_REG_BIT (hard_regs_live, regno)
351               && ! TEST_HARD_REG_BIT (eliminable_regset, regno))
352             {
353               aclass = ira_hard_regno_allocno_class[regno];
354               pclass = ira_pressure_class_translate[aclass];
355               inc_register_pressure (pclass, 1);
356               make_hard_regno_born (regno);
357             }
358           regno++;
359         }
360     }
361 }
362
363 /* Mark a pseudo, or one of its subwords, as live.  REGNO is the pseudo's
364    register number; ORIG_REG is the access in the insn, which may be a
365    subreg.  */
366 static void
367 mark_pseudo_reg_live (rtx orig_reg, unsigned regno)
368 {
369   if (df_read_modify_subreg_p (orig_reg))
370     {
371       mark_pseudo_regno_subword_live (regno,
372                                       subreg_lowpart_p (orig_reg) ? 0 : 1);
373     }
374   else
375     mark_pseudo_regno_live (regno);
376 }
377
378 /* Mark the register referenced by use or def REF as live.  */
379 static void
380 mark_ref_live (df_ref ref)
381 {
382   rtx reg = DF_REF_REG (ref);
383   rtx orig_reg = reg;
384
385   if (GET_CODE (reg) == SUBREG)
386     reg = SUBREG_REG (reg);
387
388   if (REGNO (reg) >= FIRST_PSEUDO_REGISTER)
389     mark_pseudo_reg_live (orig_reg, REGNO (reg));
390   else
391     mark_hard_reg_live (reg);
392 }
393
394 /* Mark the pseudo register REGNO as dead.  Update all information about
395    live ranges and register pressure.  */
396 static void
397 mark_pseudo_regno_dead (int regno)
398 {
399   ira_allocno_t a = ira_curr_regno_allocno_map[regno];
400   int n, i, nregs;
401   enum reg_class cl;
402
403   if (a == NULL)
404     return;
405
406   /* Invalidate because it is referenced.  */
407   allocno_saved_at_call[ALLOCNO_NUM (a)] = 0;
408
409   n = ALLOCNO_NUM_OBJECTS (a);
410   cl = ira_pressure_class_translate[ALLOCNO_CLASS (a)];
411   nregs = ira_reg_class_max_nregs[ALLOCNO_CLASS (a)][ALLOCNO_MODE (a)];
412   if (n > 1)
413     {
414       /* We track every subobject separately.  */
415       gcc_assert (nregs == n);
416       nregs = 1;
417     }
418   for (i = 0; i < n; i++)
419     {
420       ira_object_t obj = ALLOCNO_OBJECT (a, i);
421       if (!sparseset_bit_p (objects_live, OBJECT_CONFLICT_ID (obj)))
422         continue;
423
424       dec_register_pressure (cl, nregs);
425       make_object_dead (obj);
426     }
427 }
428
429 /* Like mark_pseudo_regno_dead, but called when we know that only part of the
430    register dies.  SUBWORD indicates which; a value of 0 indicates the low part.  */
431 static void
432 mark_pseudo_regno_subword_dead (int regno, int subword)
433 {
434   ira_allocno_t a = ira_curr_regno_allocno_map[regno];
435   int n;
436   enum reg_class cl;
437   ira_object_t obj;
438
439   if (a == NULL)
440     return;
441
442   /* Invalidate because it is referenced.  */
443   allocno_saved_at_call[ALLOCNO_NUM (a)] = 0;
444
445   n = ALLOCNO_NUM_OBJECTS (a);
446   if (n == 1)
447     /* The allocno as a whole doesn't die in this case.  */
448     return;
449
450   cl = ira_pressure_class_translate[ALLOCNO_CLASS (a)];
451   gcc_assert
452     (n == ira_reg_class_max_nregs[ALLOCNO_CLASS (a)][ALLOCNO_MODE (a)]);
453
454   obj = ALLOCNO_OBJECT (a, subword);
455   if (!sparseset_bit_p (objects_live, OBJECT_CONFLICT_ID (obj)))
456     return;
457
458   dec_register_pressure (cl, 1);
459   make_object_dead (obj);
460 }
461
462 /* Mark the hard register REG as dead.  Store a 0 in hard_regs_live for the
463    register.  */
464 static void
465 mark_hard_reg_dead (rtx reg)
466 {
467   int regno = REGNO (reg);
468
469   if (! TEST_HARD_REG_BIT (ira_no_alloc_regs, regno))
470     {
471       int last = regno + hard_regno_nregs[regno][GET_MODE (reg)];
472       enum reg_class aclass, pclass;
473
474       while (regno < last)
475         {
476           if (TEST_HARD_REG_BIT (hard_regs_live, regno))
477             {
478               aclass = ira_hard_regno_allocno_class[regno];
479               pclass = ira_pressure_class_translate[aclass];
480               dec_register_pressure (pclass, 1);
481               make_hard_regno_dead (regno);
482             }
483           regno++;
484         }
485     }
486 }
487
488 /* Mark a pseudo, or one of its subwords, as dead.  REGNO is the pseudo's
489    register number; ORIG_REG is the access in the insn, which may be a
490    subreg.  */
491 static void
492 mark_pseudo_reg_dead (rtx orig_reg, unsigned regno)
493 {
494   if (df_read_modify_subreg_p (orig_reg))
495     {
496       mark_pseudo_regno_subword_dead (regno,
497                                       subreg_lowpart_p (orig_reg) ? 0 : 1);
498     }
499   else
500     mark_pseudo_regno_dead (regno);
501 }
502
503 /* Mark the register referenced by definition DEF as dead, if the
504    definition is a total one.  */
505 static void
506 mark_ref_dead (df_ref def)
507 {
508   rtx reg = DF_REF_REG (def);
509   rtx orig_reg = reg;
510
511   if (DF_REF_FLAGS_IS_SET (def, DF_REF_CONDITIONAL))
512     return;
513
514   if (GET_CODE (reg) == SUBREG)
515     reg = SUBREG_REG (reg);
516
517   if (DF_REF_FLAGS_IS_SET (def, DF_REF_PARTIAL)
518       && (GET_CODE (orig_reg) != SUBREG
519           || REGNO (reg) < FIRST_PSEUDO_REGISTER
520           || !df_read_modify_subreg_p (orig_reg)))
521     return;
522
523   if (REGNO (reg) >= FIRST_PSEUDO_REGISTER)
524     mark_pseudo_reg_dead (orig_reg, REGNO (reg));
525   else
526     mark_hard_reg_dead (reg);
527 }
528
529 /* If REG is a pseudo or a subreg of it, and the class of its allocno
530    intersects CL, make a conflict with pseudo DREG.  ORIG_DREG is the
531    rtx actually accessed, it may be identical to DREG or a subreg of it.
532    Advance the current program point before making the conflict if
533    ADVANCE_P.  Return TRUE if we will need to advance the current
534    program point.  */
535 static bool
536 make_pseudo_conflict (rtx reg, enum reg_class cl, rtx dreg, rtx orig_dreg,
537                       bool advance_p)
538 {
539   rtx orig_reg = reg;
540   ira_allocno_t a;
541
542   if (GET_CODE (reg) == SUBREG)
543     reg = SUBREG_REG (reg);
544
545   if (! REG_P (reg) || REGNO (reg) < FIRST_PSEUDO_REGISTER)
546     return advance_p;
547
548   a = ira_curr_regno_allocno_map[REGNO (reg)];
549   if (! reg_classes_intersect_p (cl, ALLOCNO_CLASS (a)))
550     return advance_p;
551
552   if (advance_p)
553     curr_point++;
554
555   mark_pseudo_reg_live (orig_reg, REGNO (reg));
556   mark_pseudo_reg_live (orig_dreg, REGNO (dreg));
557   mark_pseudo_reg_dead (orig_reg, REGNO (reg));
558   mark_pseudo_reg_dead (orig_dreg, REGNO (dreg));
559
560   return false;
561 }
562
563 /* Check and make if necessary conflicts for pseudo DREG of class
564    DEF_CL of the current insn with input operand USE of class USE_CL.
565    ORIG_DREG is the rtx actually accessed, it may be identical to
566    DREG or a subreg of it.  Advance the current program point before
567    making the conflict if ADVANCE_P.  Return TRUE if we will need to
568    advance the current program point.  */
569 static bool
570 check_and_make_def_use_conflict (rtx dreg, rtx orig_dreg,
571                                  enum reg_class def_cl, int use,
572                                  enum reg_class use_cl, bool advance_p)
573 {
574   if (! reg_classes_intersect_p (def_cl, use_cl))
575     return advance_p;
576
577   advance_p = make_pseudo_conflict (recog_data.operand[use],
578                                     use_cl, dreg, orig_dreg, advance_p);
579
580   /* Reload may end up swapping commutative operands, so you
581      have to take both orderings into account.  The
582      constraints for the two operands can be completely
583      different.  (Indeed, if the constraints for the two
584      operands are the same for all alternatives, there's no
585      point marking them as commutative.)  */
586   if (use < recog_data.n_operands - 1
587       && recog_data.constraints[use][0] == '%')
588     advance_p
589       = make_pseudo_conflict (recog_data.operand[use + 1],
590                               use_cl, dreg, orig_dreg, advance_p);
591   if (use >= 1
592       && recog_data.constraints[use - 1][0] == '%')
593     advance_p
594       = make_pseudo_conflict (recog_data.operand[use - 1],
595                               use_cl, dreg, orig_dreg, advance_p);
596   return advance_p;
597 }
598
599 /* Check and make if necessary conflicts for definition DEF of class
600    DEF_CL of the current insn with input operands.  Process only
601    constraints of alternative ALT.  */
602 static void
603 check_and_make_def_conflict (int alt, int def, enum reg_class def_cl)
604 {
605   int use, use_match;
606   ira_allocno_t a;
607   enum reg_class use_cl, acl;
608   bool advance_p;
609   rtx dreg = recog_data.operand[def];
610   rtx orig_dreg = dreg;
611
612   if (def_cl == NO_REGS)
613     return;
614
615   if (GET_CODE (dreg) == SUBREG)
616     dreg = SUBREG_REG (dreg);
617
618   if (! REG_P (dreg) || REGNO (dreg) < FIRST_PSEUDO_REGISTER)
619     return;
620
621   a = ira_curr_regno_allocno_map[REGNO (dreg)];
622   acl = ALLOCNO_CLASS (a);
623   if (! reg_classes_intersect_p (acl, def_cl))
624     return;
625
626   advance_p = true;
627
628   for (use = 0; use < recog_data.n_operands; use++)
629     {
630       int alt1;
631
632       if (use == def || recog_data.operand_type[use] == OP_OUT)
633         continue;
634
635       if (recog_op_alt[use][alt].anything_ok)
636         use_cl = ALL_REGS;
637       else
638         use_cl = recog_op_alt[use][alt].cl;
639
640       /* If there's any alternative that allows USE to match DEF, do not
641          record a conflict.  If that causes us to create an invalid
642          instruction due to the earlyclobber, reload must fix it up.  */
643       for (alt1 = 0; alt1 < recog_data.n_alternatives; alt1++)
644         if (recog_op_alt[use][alt1].matches == def
645             || (use < recog_data.n_operands - 1
646                 && recog_data.constraints[use][0] == '%'
647                 && recog_op_alt[use + 1][alt1].matches == def)
648             || (use >= 1
649                 && recog_data.constraints[use - 1][0] == '%'
650                 && recog_op_alt[use - 1][alt1].matches == def))
651           break;
652
653       if (alt1 < recog_data.n_alternatives)
654         continue;
655
656       advance_p = check_and_make_def_use_conflict (dreg, orig_dreg, def_cl,
657                                                    use, use_cl, advance_p);
658
659       if ((use_match = recog_op_alt[use][alt].matches) >= 0)
660         {
661           if (use_match == def)
662             continue;
663
664           if (recog_op_alt[use_match][alt].anything_ok)
665             use_cl = ALL_REGS;
666           else
667             use_cl = recog_op_alt[use_match][alt].cl;
668           advance_p = check_and_make_def_use_conflict (dreg, orig_dreg, def_cl,
669                                                        use, use_cl, advance_p);
670         }
671     }
672 }
673
674 /* Make conflicts of early clobber pseudo registers of the current
675    insn with its inputs.  Avoid introducing unnecessary conflicts by
676    checking classes of the constraints and pseudos because otherwise
677    significant code degradation is possible for some targets.  */
678 static void
679 make_early_clobber_and_input_conflicts (void)
680 {
681   int alt;
682   int def, def_match;
683   enum reg_class def_cl;
684
685   for (alt = 0; alt < recog_data.n_alternatives; alt++)
686     for (def = 0; def < recog_data.n_operands; def++)
687       {
688         def_cl = NO_REGS;
689         if (recog_op_alt[def][alt].earlyclobber)
690           {
691             if (recog_op_alt[def][alt].anything_ok)
692               def_cl = ALL_REGS;
693             else
694               def_cl = recog_op_alt[def][alt].cl;
695             check_and_make_def_conflict (alt, def, def_cl);
696           }
697         if ((def_match = recog_op_alt[def][alt].matches) >= 0
698             && (recog_op_alt[def_match][alt].earlyclobber
699                 || recog_op_alt[def][alt].earlyclobber))
700           {
701             if (recog_op_alt[def_match][alt].anything_ok)
702               def_cl = ALL_REGS;
703             else
704               def_cl = recog_op_alt[def_match][alt].cl;
705             check_and_make_def_conflict (alt, def, def_cl);
706           }
707       }
708 }
709
710 /* Mark early clobber hard registers of the current INSN as live (if
711    LIVE_P) or dead.  Return true if there are such registers.  */
712 static bool
713 mark_hard_reg_early_clobbers (rtx insn, bool live_p)
714 {
715   df_ref *def_rec;
716   bool set_p = false;
717
718   for (def_rec = DF_INSN_DEFS (insn); *def_rec; def_rec++)
719     if (DF_REF_FLAGS_IS_SET (*def_rec, DF_REF_MUST_CLOBBER))
720       {
721         rtx dreg = DF_REF_REG (*def_rec);
722
723         if (GET_CODE (dreg) == SUBREG)
724           dreg = SUBREG_REG (dreg);
725         if (! REG_P (dreg) || REGNO (dreg) >= FIRST_PSEUDO_REGISTER)
726           continue;
727
728         /* Hard register clobbers are believed to be early clobber
729            because there is no way to say that non-operand hard
730            register clobbers are not early ones.  */
731         if (live_p)
732           mark_ref_live (*def_rec);
733         else
734           mark_ref_dead (*def_rec);
735         set_p = true;
736       }
737
738   return set_p;
739 }
740
741 /* Checks that CONSTRAINTS permits to use only one hard register.  If
742    it is so, the function returns the class of the hard register.
743    Otherwise it returns NO_REGS.  */
744 static enum reg_class
745 single_reg_class (const char *constraints, rtx op, rtx equiv_const)
746 {
747   int curr_alt, c;
748   bool ignore_p;
749   enum reg_class cl, next_cl;
750
751   cl = NO_REGS;
752   for (ignore_p = false, curr_alt = 0;
753        (c = *constraints);
754        constraints += CONSTRAINT_LEN (c, constraints))
755     if (c == '#' || !recog_data.alternative_enabled_p[curr_alt])
756       ignore_p = true;
757     else if (c == ',')
758       {
759         curr_alt++;
760         ignore_p = false;
761       }
762     else if (! ignore_p)
763       switch (c)
764         {
765         case ' ':
766         case '\t':
767         case '=':
768         case '+':
769         case '*':
770         case '&':
771         case '%':
772         case '!':
773         case '?':
774           break;
775         case 'i':
776           if (CONSTANT_P (op)
777               || (equiv_const != NULL_RTX && CONSTANT_P (equiv_const)))
778             return NO_REGS;
779           break;
780
781         case 'n':
782           if (CONST_SCALAR_INT_P (op)
783               || (equiv_const != NULL_RTX && CONST_SCALAR_INT_P (equiv_const)))
784             return NO_REGS;
785           break;
786
787         case 's':
788           if ((CONSTANT_P (op) && !CONST_SCALAR_INT_P (op))
789               || (equiv_const != NULL_RTX
790                   && CONSTANT_P (equiv_const)
791                   && !CONST_SCALAR_INT_P (equiv_const)))
792             return NO_REGS;
793           break;
794
795         case 'I':
796         case 'J':
797         case 'K':
798         case 'L':
799         case 'M':
800         case 'N':
801         case 'O':
802         case 'P':
803           if ((CONST_INT_P (op)
804                && CONST_OK_FOR_CONSTRAINT_P (INTVAL (op), c, constraints))
805               || (equiv_const != NULL_RTX
806                   && CONST_INT_P (equiv_const)
807                   && CONST_OK_FOR_CONSTRAINT_P (INTVAL (equiv_const),
808                                                 c, constraints)))
809             return NO_REGS;
810           break;
811
812         case 'E':
813         case 'F':
814           if (CONST_DOUBLE_AS_FLOAT_P (op) 
815               || (GET_CODE (op) == CONST_VECTOR
816                   && GET_MODE_CLASS (GET_MODE (op)) == MODE_VECTOR_FLOAT)
817               || (equiv_const != NULL_RTX
818                   && (CONST_DOUBLE_AS_FLOAT_P (equiv_const)
819                       || (GET_CODE (equiv_const) == CONST_VECTOR
820                           && (GET_MODE_CLASS (GET_MODE (equiv_const))
821                               == MODE_VECTOR_FLOAT)))))
822             return NO_REGS;
823           break;
824
825         case 'G':
826         case 'H':
827           if ((CONST_DOUBLE_AS_FLOAT_P (op) 
828                && CONST_DOUBLE_OK_FOR_CONSTRAINT_P (op, c, constraints))
829               || (equiv_const != NULL_RTX
830                   && CONST_DOUBLE_AS_FLOAT_P (equiv_const) 
831                   && CONST_DOUBLE_OK_FOR_CONSTRAINT_P (equiv_const,
832                                                        c, constraints)))
833             return NO_REGS;
834           /* ??? what about memory */
835         case 'r':
836         case 'a': case 'b': case 'c': case 'd': case 'e': case 'f':
837         case 'h': case 'j': case 'k': case 'l':
838         case 'q': case 't': case 'u':
839         case 'v': case 'w': case 'x': case 'y': case 'z':
840         case 'A': case 'B': case 'C': case 'D':
841         case 'Q': case 'R': case 'S': case 'T': case 'U':
842         case 'W': case 'Y': case 'Z':
843           next_cl = (c == 'r'
844                      ? GENERAL_REGS
845                      : REG_CLASS_FROM_CONSTRAINT (c, constraints));
846           if (cl == NO_REGS
847               ? ira_class_singleton[next_cl][GET_MODE (op)] < 0
848               : (ira_class_singleton[cl][GET_MODE (op)]
849                  != ira_class_singleton[next_cl][GET_MODE (op)]))
850             return NO_REGS;
851           cl = next_cl;
852           break;
853
854         case '0': case '1': case '2': case '3': case '4':
855         case '5': case '6': case '7': case '8': case '9':
856           next_cl
857             = single_reg_class (recog_data.constraints[c - '0'],
858                                 recog_data.operand[c - '0'], NULL_RTX);
859           if (cl == NO_REGS
860               ? ira_class_singleton[next_cl][GET_MODE (op)] < 0
861               : (ira_class_singleton[cl][GET_MODE (op)]
862                  != ira_class_singleton[next_cl][GET_MODE (op)]))
863             return NO_REGS;
864           cl = next_cl;
865           break;
866
867         default:
868           return NO_REGS;
869         }
870   return cl;
871 }
872
873 /* The function checks that operand OP_NUM of the current insn can use
874    only one hard register.  If it is so, the function returns the
875    class of the hard register.  Otherwise it returns NO_REGS.  */
876 static enum reg_class
877 single_reg_operand_class (int op_num)
878 {
879   if (op_num < 0 || recog_data.n_alternatives == 0)
880     return NO_REGS;
881   return single_reg_class (recog_data.constraints[op_num],
882                            recog_data.operand[op_num], NULL_RTX);
883 }
884
885 /* The function sets up hard register set *SET to hard registers which
886    might be used by insn reloads because the constraints are too
887    strict.  */
888 void
889 ira_implicitly_set_insn_hard_regs (HARD_REG_SET *set)
890 {
891   int i, curr_alt, c, regno = 0;
892   bool ignore_p;
893   enum reg_class cl;
894   rtx op;
895   enum machine_mode mode;
896
897   CLEAR_HARD_REG_SET (*set);
898   for (i = 0; i < recog_data.n_operands; i++)
899     {
900       op = recog_data.operand[i];
901
902       if (GET_CODE (op) == SUBREG)
903         op = SUBREG_REG (op);
904
905       if (GET_CODE (op) == SCRATCH
906           || (REG_P (op) && (regno = REGNO (op)) >= FIRST_PSEUDO_REGISTER))
907         {
908           const char *p = recog_data.constraints[i];
909
910           mode = (GET_CODE (op) == SCRATCH
911                   ? GET_MODE (op) : PSEUDO_REGNO_MODE (regno));
912           cl = NO_REGS;
913           for (ignore_p = false, curr_alt = 0;
914                (c = *p);
915                p += CONSTRAINT_LEN (c, p))
916             if (c == '#' || !recog_data.alternative_enabled_p[curr_alt])
917               ignore_p = true;
918             else if (c == ',')
919               {
920                 curr_alt++;
921                 ignore_p = false;
922               }
923             else if (! ignore_p)
924               switch (c)
925                 {
926                 case 'r':
927                 case 'a': case 'b': case 'c': case 'd': case 'e': case 'f':
928                 case 'h': case 'j': case 'k': case 'l':
929                 case 'q': case 't': case 'u':
930                 case 'v': case 'w': case 'x': case 'y': case 'z':
931                 case 'A': case 'B': case 'C': case 'D':
932                 case 'Q': case 'R': case 'S': case 'T': case 'U':
933                 case 'W': case 'Y': case 'Z':
934                   cl = (c == 'r'
935                         ? GENERAL_REGS
936                         : REG_CLASS_FROM_CONSTRAINT (c, p));
937                   if (cl != NO_REGS)
938                     {
939                       /* There is no register pressure problem if all of the
940                          regs in this class are fixed.  */
941                       int regno = ira_class_singleton[cl][mode];
942                       if (regno >= 0)
943                         add_to_hard_reg_set (set, mode, regno);
944                     }
945                   break;
946                 }
947         }
948     }
949 }
950 /* Processes input operands, if IN_P, or output operands otherwise of
951    the current insn with FREQ to find allocno which can use only one
952    hard register and makes other currently living allocnos conflicting
953    with the hard register.  */
954 static void
955 process_single_reg_class_operands (bool in_p, int freq)
956 {
957   int i, regno;
958   unsigned int px;
959   enum reg_class cl;
960   rtx operand;
961   ira_allocno_t operand_a, a;
962
963   for (i = 0; i < recog_data.n_operands; i++)
964     {
965       operand = recog_data.operand[i];
966       if (in_p && recog_data.operand_type[i] != OP_IN
967           && recog_data.operand_type[i] != OP_INOUT)
968         continue;
969       if (! in_p && recog_data.operand_type[i] != OP_OUT
970           && recog_data.operand_type[i] != OP_INOUT)
971         continue;
972       cl = single_reg_operand_class (i);
973       if (cl == NO_REGS)
974         continue;
975
976       operand_a = NULL;
977
978       if (GET_CODE (operand) == SUBREG)
979         operand = SUBREG_REG (operand);
980
981       if (REG_P (operand)
982           && (regno = REGNO (operand)) >= FIRST_PSEUDO_REGISTER)
983         {
984           enum reg_class aclass;
985
986           operand_a = ira_curr_regno_allocno_map[regno];
987           aclass = ALLOCNO_CLASS (operand_a);
988           if (ira_class_subset_p[cl][aclass])
989             {
990               /* View the desired allocation of OPERAND as:
991
992                     (REG:YMODE YREGNO),
993
994                  a simplification of:
995
996                     (subreg:YMODE (reg:XMODE XREGNO) OFFSET).  */
997               enum machine_mode ymode, xmode;
998               int xregno, yregno;
999               HOST_WIDE_INT offset;
1000
1001               xmode = recog_data.operand_mode[i];
1002               xregno = ira_class_singleton[cl][xmode];
1003               gcc_assert (xregno >= 0);
1004               ymode = ALLOCNO_MODE (operand_a);
1005               offset = subreg_lowpart_offset (ymode, xmode);
1006               yregno = simplify_subreg_regno (xregno, xmode, offset, ymode);
1007               if (yregno >= 0
1008                   && ira_class_hard_reg_index[aclass][yregno] >= 0)
1009                 {
1010                   int cost;
1011
1012                   ira_allocate_and_set_costs
1013                     (&ALLOCNO_CONFLICT_HARD_REG_COSTS (operand_a),
1014                      aclass, 0);
1015                   ira_init_register_move_cost_if_necessary (xmode);
1016                   cost = freq * (in_p
1017                                  ? ira_register_move_cost[xmode][aclass][cl]
1018                                  : ira_register_move_cost[xmode][cl][aclass]);
1019                   ALLOCNO_CONFLICT_HARD_REG_COSTS (operand_a)
1020                     [ira_class_hard_reg_index[aclass][yregno]] -= cost;
1021                 }
1022             }
1023         }
1024
1025       EXECUTE_IF_SET_IN_SPARSESET (objects_live, px)
1026         {
1027           ira_object_t obj = ira_object_id_map[px];
1028           a = OBJECT_ALLOCNO (obj);
1029           if (a != operand_a)
1030             {
1031               /* We could increase costs of A instead of making it
1032                  conflicting with the hard register.  But it works worse
1033                  because it will be spilled in reload in anyway.  */
1034               IOR_HARD_REG_SET (OBJECT_CONFLICT_HARD_REGS (obj),
1035                                 reg_class_contents[cl]);
1036               IOR_HARD_REG_SET (OBJECT_TOTAL_CONFLICT_HARD_REGS (obj),
1037                                 reg_class_contents[cl]);
1038             }
1039         }
1040     }
1041 }
1042
1043 /* Return true when one of the predecessor edges of BB is marked with
1044    EDGE_ABNORMAL_CALL or EDGE_EH.  */
1045 static bool
1046 bb_has_abnormal_call_pred (basic_block bb)
1047 {
1048   edge e;
1049   edge_iterator ei;
1050
1051   FOR_EACH_EDGE (e, ei, bb->preds)
1052     {
1053       if (e->flags & (EDGE_ABNORMAL_CALL | EDGE_EH))
1054         return true;
1055     }
1056   return false;
1057 }
1058
1059 /* Look through the CALL_INSN_FUNCTION_USAGE of a call insn INSN, and see if
1060    we find a SET rtx that we can use to deduce that a register can be cheaply
1061    caller-saved.  Return such a register, or NULL_RTX if none is found.  */
1062 static rtx
1063 find_call_crossed_cheap_reg (rtx insn)
1064 {
1065   rtx cheap_reg = NULL_RTX;
1066   rtx exp = CALL_INSN_FUNCTION_USAGE (insn);
1067
1068   while (exp != NULL)
1069     {
1070       rtx x = XEXP (exp, 0);
1071       if (GET_CODE (x) == SET)
1072         {
1073           exp = x;
1074           break;
1075         }
1076       exp = XEXP (exp, 1);
1077     }
1078   if (exp != NULL)
1079     {
1080       basic_block bb = BLOCK_FOR_INSN (insn);
1081       rtx reg = SET_SRC (exp);
1082       rtx prev = PREV_INSN (insn);
1083       while (prev && !(INSN_P (prev)
1084                        && BLOCK_FOR_INSN (prev) != bb))
1085         {
1086           if (NONDEBUG_INSN_P (prev))
1087             {
1088               rtx set = single_set (prev);
1089
1090               if (set && rtx_equal_p (SET_DEST (set), reg))
1091                 {
1092                   rtx src = SET_SRC (set);
1093                   if (!REG_P (src) || HARD_REGISTER_P (src)
1094                       || !pseudo_regno_single_word_and_live_p (REGNO (src)))
1095                     break;
1096                   if (!modified_between_p (src, prev, insn))
1097                     cheap_reg = src;
1098                   break;
1099                 }
1100               if (set && rtx_equal_p (SET_SRC (set), reg))
1101                 {
1102                   rtx dest = SET_DEST (set);
1103                   if (!REG_P (dest) || HARD_REGISTER_P (dest)
1104                       || !pseudo_regno_single_word_and_live_p (REGNO (dest)))
1105                     break;
1106                   if (!modified_between_p (dest, prev, insn))
1107                     cheap_reg = dest;
1108                   break;
1109                 }
1110
1111               if (reg_overlap_mentioned_p (reg, PATTERN (prev)))
1112                 break;
1113             }
1114           prev = PREV_INSN (prev);
1115         }
1116     }
1117   return cheap_reg;
1118 }  
1119
1120 /* Process insns of the basic block given by its LOOP_TREE_NODE to
1121    update allocno live ranges, allocno hard register conflicts,
1122    intersected calls, and register pressure info for allocnos for the
1123    basic block for and regions containing the basic block.  */
1124 static void
1125 process_bb_node_lives (ira_loop_tree_node_t loop_tree_node)
1126 {
1127   int i, freq;
1128   unsigned int j;
1129   basic_block bb;
1130   rtx insn;
1131   bitmap_iterator bi;
1132   bitmap reg_live_out;
1133   unsigned int px;
1134   bool set_p;
1135
1136   bb = loop_tree_node->bb;
1137   if (bb != NULL)
1138     {
1139       for (i = 0; i < ira_pressure_classes_num; i++)
1140         {
1141           curr_reg_pressure[ira_pressure_classes[i]] = 0;
1142           high_pressure_start_point[ira_pressure_classes[i]] = -1;
1143         }
1144       curr_bb_node = loop_tree_node;
1145       reg_live_out = df_get_live_out (bb);
1146       sparseset_clear (objects_live);
1147       REG_SET_TO_HARD_REG_SET (hard_regs_live, reg_live_out);
1148       AND_COMPL_HARD_REG_SET (hard_regs_live, eliminable_regset);
1149       AND_COMPL_HARD_REG_SET (hard_regs_live, ira_no_alloc_regs);
1150       for (i = 0; i < FIRST_PSEUDO_REGISTER; i++)
1151         if (TEST_HARD_REG_BIT (hard_regs_live, i))
1152           {
1153             enum reg_class aclass, pclass, cl;
1154
1155             aclass = ira_allocno_class_translate[REGNO_REG_CLASS (i)];
1156             pclass = ira_pressure_class_translate[aclass];
1157             for (j = 0;
1158                  (cl = ira_reg_class_super_classes[pclass][j])
1159                    != LIM_REG_CLASSES;
1160                  j++)
1161               {
1162                 if (! ira_reg_pressure_class_p[cl])
1163                   continue;
1164                 curr_reg_pressure[cl]++;
1165                 if (curr_bb_node->reg_pressure[cl] < curr_reg_pressure[cl])
1166                   curr_bb_node->reg_pressure[cl] = curr_reg_pressure[cl];
1167                 ira_assert (curr_reg_pressure[cl]
1168                             <= ira_class_hard_regs_num[cl]);
1169               }
1170           }
1171       EXECUTE_IF_SET_IN_BITMAP (reg_live_out, FIRST_PSEUDO_REGISTER, j, bi)
1172         mark_pseudo_regno_live (j);
1173
1174       freq = REG_FREQ_FROM_BB (bb);
1175       if (freq == 0)
1176         freq = 1;
1177
1178       /* Invalidate all allocno_saved_at_call entries.  */
1179       last_call_num++;
1180
1181       /* Scan the code of this basic block, noting which allocnos and
1182          hard regs are born or die.
1183
1184          Note that this loop treats uninitialized values as live until
1185          the beginning of the block.  For example, if an instruction
1186          uses (reg:DI foo), and only (subreg:SI (reg:DI foo) 0) is ever
1187          set, FOO will remain live until the beginning of the block.
1188          Likewise if FOO is not set at all.  This is unnecessarily
1189          pessimistic, but it probably doesn't matter much in practice.  */
1190       FOR_BB_INSNS_REVERSE (bb, insn)
1191         {
1192           df_ref *def_rec, *use_rec;
1193           bool call_p;
1194
1195           if (!NONDEBUG_INSN_P (insn))
1196             continue;
1197
1198           if (internal_flag_ira_verbose > 2 && ira_dump_file != NULL)
1199             fprintf (ira_dump_file, "   Insn %u(l%d): point = %d\n",
1200                      INSN_UID (insn), loop_tree_node->parent->loop_num,
1201                      curr_point);
1202
1203           /* Mark each defined value as live.  We need to do this for
1204              unused values because they still conflict with quantities
1205              that are live at the time of the definition.
1206
1207              Ignore DF_REF_MAY_CLOBBERs on a call instruction.  Such
1208              references represent the effect of the called function
1209              on a call-clobbered register.  Marking the register as
1210              live would stop us from allocating it to a call-crossing
1211              allocno.  */
1212           call_p = CALL_P (insn);
1213           for (def_rec = DF_INSN_DEFS (insn); *def_rec; def_rec++)
1214             if (!call_p || !DF_REF_FLAGS_IS_SET (*def_rec, DF_REF_MAY_CLOBBER))
1215               mark_ref_live (*def_rec);
1216
1217           /* If INSN has multiple outputs, then any value used in one
1218              of the outputs conflicts with the other outputs.  Model this
1219              by making the used value live during the output phase.
1220
1221              It is unsafe to use !single_set here since it will ignore
1222              an unused output.  Just because an output is unused does
1223              not mean the compiler can assume the side effect will not
1224              occur.  Consider if ALLOCNO appears in the address of an
1225              output and we reload the output.  If we allocate ALLOCNO
1226              to the same hard register as an unused output we could
1227              set the hard register before the output reload insn.  */
1228           if (GET_CODE (PATTERN (insn)) == PARALLEL && multiple_sets (insn))
1229             for (use_rec = DF_INSN_USES (insn); *use_rec; use_rec++)
1230               {
1231                 int i;
1232                 rtx reg;
1233
1234                 reg = DF_REF_REG (*use_rec);
1235                 for (i = XVECLEN (PATTERN (insn), 0) - 1; i >= 0; i--)
1236                   {
1237                     rtx set;
1238
1239                     set = XVECEXP (PATTERN (insn), 0, i);
1240                     if (GET_CODE (set) == SET
1241                         && reg_overlap_mentioned_p (reg, SET_DEST (set)))
1242                       {
1243                         /* After the previous loop, this is a no-op if
1244                            REG is contained within SET_DEST (SET).  */
1245                         mark_ref_live (*use_rec);
1246                         break;
1247                       }
1248                   }
1249               }
1250
1251           extract_insn (insn);
1252           preprocess_constraints ();
1253           process_single_reg_class_operands (false, freq);
1254
1255           /* See which defined values die here.  */
1256           for (def_rec = DF_INSN_DEFS (insn); *def_rec; def_rec++)
1257             if (!call_p || !DF_REF_FLAGS_IS_SET (*def_rec, DF_REF_MAY_CLOBBER))
1258               mark_ref_dead (*def_rec);
1259
1260           if (call_p)
1261             {
1262               /* Try to find a SET in the CALL_INSN_FUNCTION_USAGE, and from
1263                  there, try to find a pseudo that is live across the call but
1264                  can be cheaply reconstructed from the return value.  */
1265               rtx cheap_reg = find_call_crossed_cheap_reg (insn);
1266               if (cheap_reg != NULL_RTX)
1267                 add_reg_note (insn, REG_RETURNED, cheap_reg);
1268
1269               last_call_num++;
1270               sparseset_clear (allocnos_processed);
1271               /* The current set of live allocnos are live across the call.  */
1272               EXECUTE_IF_SET_IN_SPARSESET (objects_live, i)
1273                 {
1274                   ira_object_t obj = ira_object_id_map[i];
1275                   ira_allocno_t a = OBJECT_ALLOCNO (obj);
1276                   int num = ALLOCNO_NUM (a);
1277
1278                   /* Don't allocate allocnos that cross setjmps or any
1279                      call, if this function receives a nonlocal
1280                      goto.  */
1281                   if (cfun->has_nonlocal_label
1282                       || find_reg_note (insn, REG_SETJMP,
1283                                         NULL_RTX) != NULL_RTX)
1284                     {
1285                       SET_HARD_REG_SET (OBJECT_CONFLICT_HARD_REGS (obj));
1286                       SET_HARD_REG_SET (OBJECT_TOTAL_CONFLICT_HARD_REGS (obj));
1287                     }
1288                   if (can_throw_internal (insn))
1289                     {
1290                       IOR_HARD_REG_SET (OBJECT_CONFLICT_HARD_REGS (obj),
1291                                         call_used_reg_set);
1292                       IOR_HARD_REG_SET (OBJECT_TOTAL_CONFLICT_HARD_REGS (obj),
1293                                         call_used_reg_set);
1294                     }
1295
1296                   if (sparseset_bit_p (allocnos_processed, num))
1297                     continue;
1298                   sparseset_set_bit (allocnos_processed, num);
1299
1300                   if (allocno_saved_at_call[num] != last_call_num)
1301                     /* Here we are mimicking caller-save.c behaviour
1302                        which does not save hard register at a call if
1303                        it was saved on previous call in the same basic
1304                        block and the hard register was not mentioned
1305                        between the two calls.  */
1306                     ALLOCNO_CALL_FREQ (a) += freq;
1307                   /* Mark it as saved at the next call.  */
1308                   allocno_saved_at_call[num] = last_call_num + 1;
1309                   ALLOCNO_CALLS_CROSSED_NUM (a)++;
1310                   if (cheap_reg != NULL_RTX
1311                       && ALLOCNO_REGNO (a) == (int) REGNO (cheap_reg))
1312                     ALLOCNO_CHEAP_CALLS_CROSSED_NUM (a)++;
1313                 }
1314             }
1315
1316           make_early_clobber_and_input_conflicts ();
1317
1318           curr_point++;
1319
1320           /* Mark each used value as live.  */
1321           for (use_rec = DF_INSN_USES (insn); *use_rec; use_rec++)
1322             mark_ref_live (*use_rec);
1323
1324           process_single_reg_class_operands (true, freq);
1325
1326           set_p = mark_hard_reg_early_clobbers (insn, true);
1327
1328           if (set_p)
1329             {
1330               mark_hard_reg_early_clobbers (insn, false);
1331
1332               /* Mark each hard reg as live again.  For example, a
1333                  hard register can be in clobber and in an insn
1334                  input.  */
1335               for (use_rec = DF_INSN_USES (insn); *use_rec; use_rec++)
1336                 {
1337                   rtx ureg = DF_REF_REG (*use_rec);
1338
1339                   if (GET_CODE (ureg) == SUBREG)
1340                     ureg = SUBREG_REG (ureg);
1341                   if (! REG_P (ureg) || REGNO (ureg) >= FIRST_PSEUDO_REGISTER)
1342                     continue;
1343
1344                   mark_ref_live (*use_rec);
1345                 }
1346             }
1347
1348           curr_point++;
1349         }
1350
1351 #ifdef EH_RETURN_DATA_REGNO
1352       if (bb_has_eh_pred (bb))
1353         for (j = 0; ; ++j)
1354           {
1355             unsigned int regno = EH_RETURN_DATA_REGNO (j);
1356             if (regno == INVALID_REGNUM)
1357               break;
1358             make_hard_regno_born (regno);
1359           }
1360 #endif
1361
1362       /* Allocnos can't go in stack regs at the start of a basic block
1363          that is reached by an abnormal edge. Likewise for call
1364          clobbered regs, because caller-save, fixup_abnormal_edges and
1365          possibly the table driven EH machinery are not quite ready to
1366          handle such allocnos live across such edges.  */
1367       if (bb_has_abnormal_pred (bb))
1368         {
1369 #ifdef STACK_REGS
1370           EXECUTE_IF_SET_IN_SPARSESET (objects_live, px)
1371             {
1372               ira_allocno_t a = OBJECT_ALLOCNO (ira_object_id_map[px]);
1373
1374               ALLOCNO_NO_STACK_REG_P (a) = true;
1375               ALLOCNO_TOTAL_NO_STACK_REG_P (a) = true;
1376             }
1377           for (px = FIRST_STACK_REG; px <= LAST_STACK_REG; px++)
1378             make_hard_regno_born (px);
1379 #endif
1380           /* No need to record conflicts for call clobbered regs if we
1381              have nonlocal labels around, as we don't ever try to
1382              allocate such regs in this case.  */
1383           if (!cfun->has_nonlocal_label && bb_has_abnormal_call_pred (bb))
1384             for (px = 0; px < FIRST_PSEUDO_REGISTER; px++)
1385               if (call_used_regs[px])
1386                 make_hard_regno_born (px);
1387         }
1388
1389       EXECUTE_IF_SET_IN_SPARSESET (objects_live, i)
1390         make_object_dead (ira_object_id_map[i]);
1391
1392       curr_point++;
1393
1394     }
1395   /* Propagate register pressure to upper loop tree nodes: */
1396   if (loop_tree_node != ira_loop_tree_root)
1397     for (i = 0; i < ira_pressure_classes_num; i++)
1398       {
1399         enum reg_class pclass;
1400
1401         pclass = ira_pressure_classes[i];
1402         if (loop_tree_node->reg_pressure[pclass]
1403             > loop_tree_node->parent->reg_pressure[pclass])
1404           loop_tree_node->parent->reg_pressure[pclass]
1405             = loop_tree_node->reg_pressure[pclass];
1406       }
1407 }
1408
1409 /* Create and set up IRA_START_POINT_RANGES and
1410    IRA_FINISH_POINT_RANGES.  */
1411 static void
1412 create_start_finish_chains (void)
1413 {
1414   ira_object_t obj;
1415   ira_object_iterator oi;
1416   live_range_t r;
1417
1418   ira_start_point_ranges
1419     = (live_range_t *) ira_allocate (ira_max_point * sizeof (live_range_t));
1420   memset (ira_start_point_ranges, 0, ira_max_point * sizeof (live_range_t));
1421   ira_finish_point_ranges
1422     = (live_range_t *) ira_allocate (ira_max_point * sizeof (live_range_t));
1423   memset (ira_finish_point_ranges, 0, ira_max_point * sizeof (live_range_t));
1424   FOR_EACH_OBJECT (obj, oi)
1425     for (r = OBJECT_LIVE_RANGES (obj); r != NULL; r = r->next)
1426       {
1427         r->start_next = ira_start_point_ranges[r->start];
1428         ira_start_point_ranges[r->start] = r;
1429         r->finish_next = ira_finish_point_ranges[r->finish];
1430           ira_finish_point_ranges[r->finish] = r;
1431       }
1432 }
1433
1434 /* Rebuild IRA_START_POINT_RANGES and IRA_FINISH_POINT_RANGES after
1435    new live ranges and program points were added as a result if new
1436    insn generation.  */
1437 void
1438 ira_rebuild_start_finish_chains (void)
1439 {
1440   ira_free (ira_finish_point_ranges);
1441   ira_free (ira_start_point_ranges);
1442   create_start_finish_chains ();
1443 }
1444
1445 /* Compress allocno live ranges by removing program points where
1446    nothing happens.  */
1447 static void
1448 remove_some_program_points_and_update_live_ranges (void)
1449 {
1450   unsigned i;
1451   int n;
1452   int *map;
1453   ira_object_t obj;
1454   ira_object_iterator oi;
1455   live_range_t r, prev_r, next_r;
1456   sbitmap born_or_dead, born, dead;
1457   sbitmap_iterator sbi;
1458   bool born_p, dead_p, prev_born_p, prev_dead_p;
1459   
1460   born = sbitmap_alloc (ira_max_point);
1461   dead = sbitmap_alloc (ira_max_point);
1462   bitmap_clear (born);
1463   bitmap_clear (dead);
1464   FOR_EACH_OBJECT (obj, oi)
1465     for (r = OBJECT_LIVE_RANGES (obj); r != NULL; r = r->next)
1466       {
1467         ira_assert (r->start <= r->finish);
1468         bitmap_set_bit (born, r->start);
1469         bitmap_set_bit (dead, r->finish);
1470       }
1471
1472   born_or_dead = sbitmap_alloc (ira_max_point);
1473   bitmap_ior (born_or_dead, born, dead);
1474   map = (int *) ira_allocate (sizeof (int) * ira_max_point);
1475   n = -1;
1476   prev_born_p = prev_dead_p = false;
1477   EXECUTE_IF_SET_IN_BITMAP (born_or_dead, 0, i, sbi)
1478     {
1479       born_p = bitmap_bit_p (born, i);
1480       dead_p = bitmap_bit_p (dead, i);
1481       if ((prev_born_p && ! prev_dead_p && born_p && ! dead_p)
1482           || (prev_dead_p && ! prev_born_p && dead_p && ! born_p))
1483         map[i] = n;
1484       else
1485         map[i] = ++n;
1486       prev_born_p = born_p;
1487       prev_dead_p = dead_p;
1488     }
1489   sbitmap_free (born_or_dead);
1490   sbitmap_free (born);
1491   sbitmap_free (dead);
1492   n++;
1493   if (internal_flag_ira_verbose > 1 && ira_dump_file != NULL)
1494     fprintf (ira_dump_file, "Compressing live ranges: from %d to %d - %d%%\n",
1495              ira_max_point, n, 100 * n / ira_max_point);
1496   ira_max_point = n;
1497
1498   FOR_EACH_OBJECT (obj, oi)
1499     for (r = OBJECT_LIVE_RANGES (obj), prev_r = NULL; r != NULL; r = next_r)
1500       {
1501         next_r = r->next;
1502         r->start = map[r->start];
1503         r->finish = map[r->finish];
1504         if (prev_r == NULL || prev_r->start > r->finish + 1)
1505           {
1506             prev_r = r;
1507             continue;
1508           }
1509         prev_r->start = r->start;
1510         prev_r->next = next_r;
1511         ira_finish_live_range (r);
1512       }
1513
1514   ira_free (map);
1515 }
1516
1517 /* Print live ranges R to file F.  */
1518 void
1519 ira_print_live_range_list (FILE *f, live_range_t r)
1520 {
1521   for (; r != NULL; r = r->next)
1522     fprintf (f, " [%d..%d]", r->start, r->finish);
1523   fprintf (f, "\n");
1524 }
1525
1526 /* Print live ranges R to stderr.  */
1527 void
1528 ira_debug_live_range_list (live_range_t r)
1529 {
1530   ira_print_live_range_list (stderr, r);
1531 }
1532
1533 /* Print live ranges of object OBJ to file F.  */
1534 static void
1535 print_object_live_ranges (FILE *f, ira_object_t obj)
1536 {
1537   ira_print_live_range_list (f, OBJECT_LIVE_RANGES (obj));
1538 }
1539
1540 /* Print live ranges of allocno A to file F.  */
1541 static void
1542 print_allocno_live_ranges (FILE *f, ira_allocno_t a)
1543 {
1544   int n = ALLOCNO_NUM_OBJECTS (a);
1545   int i;
1546
1547   for (i = 0; i < n; i++)
1548     {
1549       fprintf (f, " a%d(r%d", ALLOCNO_NUM (a), ALLOCNO_REGNO (a));
1550       if (n > 1)
1551         fprintf (f, " [%d]", i);
1552       fprintf (f, "):");
1553       print_object_live_ranges (f, ALLOCNO_OBJECT (a, i));
1554     }
1555 }
1556
1557 /* Print live ranges of allocno A to stderr.  */
1558 void
1559 ira_debug_allocno_live_ranges (ira_allocno_t a)
1560 {
1561   print_allocno_live_ranges (stderr, a);
1562 }
1563
1564 /* Print live ranges of all allocnos to file F.  */
1565 static void
1566 print_live_ranges (FILE *f)
1567 {
1568   ira_allocno_t a;
1569   ira_allocno_iterator ai;
1570
1571   FOR_EACH_ALLOCNO (a, ai)
1572     print_allocno_live_ranges (f, a);
1573 }
1574
1575 /* Print live ranges of all allocnos to stderr.  */
1576 void
1577 ira_debug_live_ranges (void)
1578 {
1579   print_live_ranges (stderr);
1580 }
1581
1582 /* The main entry function creates live ranges, set up
1583    CONFLICT_HARD_REGS and TOTAL_CONFLICT_HARD_REGS for objects, and
1584    calculate register pressure info.  */
1585 void
1586 ira_create_allocno_live_ranges (void)
1587 {
1588   objects_live = sparseset_alloc (ira_objects_num);
1589   allocnos_processed = sparseset_alloc (ira_allocnos_num);
1590   curr_point = 0;
1591   last_call_num = 0;
1592   allocno_saved_at_call
1593     = (int *) ira_allocate (ira_allocnos_num * sizeof (int));
1594   memset (allocno_saved_at_call, 0, ira_allocnos_num * sizeof (int));
1595   ira_traverse_loop_tree (true, ira_loop_tree_root, NULL,
1596                           process_bb_node_lives);
1597   ira_max_point = curr_point;
1598   create_start_finish_chains ();
1599   if (internal_flag_ira_verbose > 2 && ira_dump_file != NULL)
1600     print_live_ranges (ira_dump_file);
1601   /* Clean up.  */
1602   ira_free (allocno_saved_at_call);
1603   sparseset_free (objects_live);
1604   sparseset_free (allocnos_processed);
1605 }
1606
1607 /* Compress allocno live ranges.  */
1608 void
1609 ira_compress_allocno_live_ranges (void)
1610 {
1611   remove_some_program_points_and_update_live_ranges ();
1612   ira_rebuild_start_finish_chains ();
1613   if (internal_flag_ira_verbose > 2 && ira_dump_file != NULL)
1614     {
1615       fprintf (ira_dump_file, "Ranges after the compression:\n");
1616       print_live_ranges (ira_dump_file);
1617     }
1618 }
1619
1620 /* Free arrays IRA_START_POINT_RANGES and IRA_FINISH_POINT_RANGES.  */
1621 void
1622 ira_finish_allocno_live_ranges (void)
1623 {
1624   ira_free (ira_finish_point_ranges);
1625   ira_free (ira_start_point_ranges);
1626 }