Merge from vendor branch OPENSSH:
[dragonfly.git] / contrib / gcc-3.4 / gcc / global.c
1 /* Allocate registers for pseudo-registers that span basic blocks.
2    Copyright (C) 1987, 1988, 1991, 1994, 1996, 1997, 1998,
3    1999, 2000, 2002, 2003 Free Software Foundation, Inc.
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 2, 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 COPYING.  If not, write to the Free
19 Software Foundation, 59 Temple Place - Suite 330, Boston, MA
20 02111-1307, USA.  */
21
22
23 #include "config.h"
24 #include "system.h"
25 #include "coretypes.h"
26 #include "tm.h"
27
28 #include "machmode.h"
29 #include "hard-reg-set.h"
30 #include "rtl.h"
31 #include "tm_p.h"
32 #include "flags.h"
33 #include "basic-block.h"
34 #include "regs.h"
35 #include "function.h"
36 #include "insn-config.h"
37 #include "reload.h"
38 #include "output.h"
39 #include "toplev.h"
40
41 /* This pass of the compiler performs global register allocation.
42    It assigns hard register numbers to all the pseudo registers
43    that were not handled in local_alloc.  Assignments are recorded
44    in the vector reg_renumber, not by changing the rtl code.
45    (Such changes are made by final).  The entry point is
46    the function global_alloc.
47
48    After allocation is complete, the reload pass is run as a subroutine
49    of this pass, so that when a pseudo reg loses its hard reg due to
50    spilling it is possible to make a second attempt to find a hard
51    reg for it.  The reload pass is independent in other respects
52    and it is run even when stupid register allocation is in use.
53
54    1. Assign allocation-numbers (allocnos) to the pseudo-registers
55    still needing allocations and to the pseudo-registers currently
56    allocated by local-alloc which may be spilled by reload.
57    Set up tables reg_allocno and allocno_reg to map
58    reg numbers to allocnos and vice versa.
59    max_allocno gets the number of allocnos in use.
60
61    2. Allocate a max_allocno by max_allocno conflict bit matrix and clear it.
62    Allocate a max_allocno by FIRST_PSEUDO_REGISTER conflict matrix
63    for conflicts between allocnos and explicit hard register use
64    (which includes use of pseudo-registers allocated by local_alloc).
65
66    3. For each basic block
67     walk forward through the block, recording which
68     pseudo-registers and which hardware registers are live.
69     Build the conflict matrix between the pseudo-registers
70     and another of pseudo-registers versus hardware registers.
71     Also record the preferred hardware registers
72     for each pseudo-register.
73
74    4. Sort a table of the allocnos into order of
75    desirability of the variables.
76
77    5. Allocate the variables in that order; each if possible into
78    a preferred register, else into another register.  */
79 \f
80 /* Number of pseudo-registers which are candidates for allocation.  */
81
82 static int max_allocno;
83
84 /* Indexed by (pseudo) reg number, gives the allocno, or -1
85    for pseudo registers which are not to be allocated.  */
86
87 static int *reg_allocno;
88
89 struct allocno
90 {
91   int reg;
92   /* Gives the number of consecutive hard registers needed by that
93      pseudo reg.  */
94   int size;
95
96   /* Number of calls crossed by each allocno.  */
97   int calls_crossed;
98
99   /* Number of refs to each allocno.  */
100   int n_refs;
101
102   /* Frequency of uses of each allocno.  */
103   int freq;
104
105   /* Guess at live length of each allocno.
106      This is actually the max of the live lengths of the regs.  */
107   int live_length;
108
109   /* Set of hard regs conflicting with allocno N.  */
110
111   HARD_REG_SET hard_reg_conflicts;
112
113   /* Set of hard regs preferred by allocno N.
114      This is used to make allocnos go into regs that are copied to or from them,
115      when possible, to reduce register shuffling.  */
116
117   HARD_REG_SET hard_reg_preferences;
118
119   /* Similar, but just counts register preferences made in simple copy
120      operations, rather than arithmetic.  These are given priority because
121      we can always eliminate an insn by using these, but using a register
122      in the above list won't always eliminate an insn.  */
123
124   HARD_REG_SET hard_reg_copy_preferences;
125
126   /* Similar to hard_reg_preferences, but includes bits for subsequent
127      registers when an allocno is multi-word.  The above variable is used for
128      allocation while this is used to build reg_someone_prefers, below.  */
129
130   HARD_REG_SET hard_reg_full_preferences;
131
132   /* Set of hard registers that some later allocno has a preference for.  */
133
134   HARD_REG_SET regs_someone_prefers;
135
136 #ifdef STACK_REGS
137   /* Set to true if allocno can't be allocated in the stack register.  */
138   bool no_stack_reg;
139 #endif
140 };
141
142 static struct allocno *allocno;
143
144 /* A vector of the integers from 0 to max_allocno-1,
145    sorted in the order of first-to-be-allocated first.  */
146
147 static int *allocno_order;
148
149 /* Indexed by (pseudo) reg number, gives the number of another
150    lower-numbered pseudo reg which can share a hard reg with this pseudo
151    *even if the two pseudos would otherwise appear to conflict*.  */
152
153 static int *reg_may_share;
154
155 /* Define the number of bits in each element of `conflicts' and what
156    type that element has.  We use the largest integer format on the
157    host machine.  */
158
159 #define INT_BITS HOST_BITS_PER_WIDE_INT
160 #define INT_TYPE HOST_WIDE_INT
161
162 /* max_allocno by max_allocno array of bits,
163    recording whether two allocno's conflict (can't go in the same
164    hardware register).
165
166    `conflicts' is symmetric after the call to mirror_conflicts.  */
167
168 static INT_TYPE *conflicts;
169
170 /* Number of ints require to hold max_allocno bits.
171    This is the length of a row in `conflicts'.  */
172
173 static int allocno_row_words;
174
175 /* Two macros to test or store 1 in an element of `conflicts'.  */
176
177 #define CONFLICTP(I, J) \
178  (conflicts[(I) * allocno_row_words + (unsigned) (J) / INT_BITS]        \
179   & ((INT_TYPE) 1 << ((unsigned) (J) % INT_BITS)))
180
181 /* For any allocno set in ALLOCNO_SET, set ALLOCNO to that allocno,
182    and execute CODE.  */
183 #define EXECUTE_IF_SET_IN_ALLOCNO_SET(ALLOCNO_SET, ALLOCNO, CODE)       \
184 do {                                                                    \
185   int i_;                                                               \
186   int allocno_;                                                         \
187   INT_TYPE *p_ = (ALLOCNO_SET);                                         \
188                                                                         \
189   for (i_ = allocno_row_words - 1, allocno_ = 0; i_ >= 0;               \
190        i_--, allocno_ += INT_BITS)                                      \
191     {                                                                   \
192       unsigned INT_TYPE word_ = (unsigned INT_TYPE) *p_++;              \
193                                                                         \
194       for ((ALLOCNO) = allocno_; word_; word_ >>= 1, (ALLOCNO)++)       \
195         {                                                               \
196           if (word_ & 1)                                                \
197             {CODE;}                                                     \
198         }                                                               \
199     }                                                                   \
200 } while (0)
201
202 /* This doesn't work for non-GNU C due to the way CODE is macro expanded.  */
203 #if 0
204 /* For any allocno that conflicts with IN_ALLOCNO, set OUT_ALLOCNO to
205    the conflicting allocno, and execute CODE.  This macro assumes that
206    mirror_conflicts has been run.  */
207 #define EXECUTE_IF_CONFLICT(IN_ALLOCNO, OUT_ALLOCNO, CODE)\
208   EXECUTE_IF_SET_IN_ALLOCNO_SET (conflicts + (IN_ALLOCNO) * allocno_row_words,\
209                                  OUT_ALLOCNO, (CODE))
210 #endif
211
212 /* Set of hard regs currently live (during scan of all insns).  */
213
214 static HARD_REG_SET hard_regs_live;
215
216 /* Set of registers that global-alloc isn't supposed to use.  */
217
218 static HARD_REG_SET no_global_alloc_regs;
219
220 /* Set of registers used so far.  */
221
222 static HARD_REG_SET regs_used_so_far;
223
224 /* Number of refs to each hard reg, as used by local alloc.
225    It is zero for a reg that contains global pseudos or is explicitly used.  */
226
227 static int local_reg_n_refs[FIRST_PSEUDO_REGISTER];
228
229 /* Frequency of uses of given hard reg.  */
230 static int local_reg_freq[FIRST_PSEUDO_REGISTER];
231
232 /* Guess at live length of each hard reg, as used by local alloc.
233    This is actually the sum of the live lengths of the specific regs.  */
234
235 static int local_reg_live_length[FIRST_PSEUDO_REGISTER];
236
237 /* Set to 1 a bit in a vector TABLE of HARD_REG_SETs, for vector
238    element I, and hard register number J.  */
239
240 #define SET_REGBIT(TABLE, I, J)  SET_HARD_REG_BIT (allocno[I].TABLE, J)
241
242 /* Bit mask for allocnos live at current point in the scan.  */
243
244 static INT_TYPE *allocnos_live;
245
246 /* Test, set or clear bit number I in allocnos_live,
247    a bit vector indexed by allocno.  */
248
249 #define SET_ALLOCNO_LIVE(I)                             \
250   (allocnos_live[(unsigned) (I) / INT_BITS]             \
251      |= ((INT_TYPE) 1 << ((unsigned) (I) % INT_BITS)))
252
253 #define CLEAR_ALLOCNO_LIVE(I)                           \
254   (allocnos_live[(unsigned) (I) / INT_BITS]             \
255      &= ~((INT_TYPE) 1 << ((unsigned) (I) % INT_BITS)))
256
257 /* This is turned off because it doesn't work right for DImode.
258    (And it is only used for DImode, so the other cases are worthless.)
259    The problem is that it isn't true that there is NO possibility of conflict;
260    only that there is no conflict if the two pseudos get the exact same regs.
261    If they were allocated with a partial overlap, there would be a conflict.
262    We can't safely turn off the conflict unless we have another way to
263    prevent the partial overlap.
264
265    Idea: change hard_reg_conflicts so that instead of recording which
266    hard regs the allocno may not overlap, it records where the allocno
267    may not start.  Change both where it is used and where it is updated.
268    Then there is a way to record that (reg:DI 108) may start at 10
269    but not at 9 or 11.  There is still the question of how to record
270    this semi-conflict between two pseudos.  */
271 #if 0
272 /* Reg pairs for which conflict after the current insn
273    is inhibited by a REG_NO_CONFLICT note.
274    If the table gets full, we ignore any other notes--that is conservative.  */
275 #define NUM_NO_CONFLICT_PAIRS 4
276 /* Number of pairs in use in this insn.  */
277 int n_no_conflict_pairs;
278 static struct { int allocno1, allocno2;}
279   no_conflict_pairs[NUM_NO_CONFLICT_PAIRS];
280 #endif /* 0 */
281
282 /* Record all regs that are set in any one insn.
283    Communication from mark_reg_{store,clobber} and global_conflicts.  */
284
285 static rtx *regs_set;
286 static int n_regs_set;
287
288 /* All registers that can be eliminated.  */
289
290 static HARD_REG_SET eliminable_regset;
291
292 static int allocno_compare (const void *, const void *);
293 static void global_conflicts (void);
294 static void mirror_conflicts (void);
295 static void expand_preferences (void);
296 static void prune_preferences (void);
297 static void find_reg (int, HARD_REG_SET, int, int, int);
298 static void record_one_conflict (int);
299 static void record_conflicts (int *, int);
300 static void mark_reg_store (rtx, rtx, void *);
301 static void mark_reg_clobber (rtx, rtx, void *);
302 static void mark_reg_conflicts (rtx);
303 static void mark_reg_death (rtx);
304 static void mark_reg_live_nc (int, enum machine_mode);
305 static void set_preference (rtx, rtx);
306 static void dump_conflicts (FILE *);
307 static void reg_becomes_live (rtx, rtx, void *);
308 static void reg_dies (int, enum machine_mode, struct insn_chain *);
309 \f
310 /* Perform allocation of pseudo-registers not allocated by local_alloc.
311    FILE is a file to output debugging information on,
312    or zero if such output is not desired.
313
314    Return value is nonzero if reload failed
315    and we must not do any more for this function.  */
316
317 int
318 global_alloc (FILE *file)
319 {
320   int retval;
321 #ifdef ELIMINABLE_REGS
322   static const struct {const int from, to; } eliminables[] = ELIMINABLE_REGS;
323 #endif
324   int need_fp
325     = (! flag_omit_frame_pointer
326        || (current_function_calls_alloca && EXIT_IGNORE_STACK)
327        || FRAME_POINTER_REQUIRED);
328
329   size_t i;
330   rtx x;
331
332   max_allocno = 0;
333
334   /* A machine may have certain hard registers that
335      are safe to use only within a basic block.  */
336
337   CLEAR_HARD_REG_SET (no_global_alloc_regs);
338
339   /* Build the regset of all eliminable registers and show we can't use those
340      that we already know won't be eliminated.  */
341 #ifdef ELIMINABLE_REGS
342   for (i = 0; i < ARRAY_SIZE (eliminables); i++)
343     {
344       bool cannot_elim
345         = (! CAN_ELIMINATE (eliminables[i].from, eliminables[i].to)
346            || (eliminables[i].to == STACK_POINTER_REGNUM && need_fp));
347
348       if (!regs_asm_clobbered[eliminables[i].from])
349         {
350           SET_HARD_REG_BIT (eliminable_regset, eliminables[i].from);
351
352           if (cannot_elim)
353             SET_HARD_REG_BIT (no_global_alloc_regs, eliminables[i].from);
354         }
355       else if (cannot_elim)
356         error ("%s cannot be used in asm here",
357                reg_names[eliminables[i].from]);
358       else
359         regs_ever_live[eliminables[i].from] = 1;
360     }
361 #if FRAME_POINTER_REGNUM != HARD_FRAME_POINTER_REGNUM
362   if (!regs_asm_clobbered[HARD_FRAME_POINTER_REGNUM])
363     {
364       SET_HARD_REG_BIT (eliminable_regset, HARD_FRAME_POINTER_REGNUM);
365       if (need_fp)
366         SET_HARD_REG_BIT (no_global_alloc_regs, HARD_FRAME_POINTER_REGNUM);
367     }
368   else if (need_fp)
369     error ("%s cannot be used in asm here",
370            reg_names[HARD_FRAME_POINTER_REGNUM]);
371   else
372     regs_ever_live[HARD_FRAME_POINTER_REGNUM] = 1;
373 #endif
374
375 #else
376   if (!regs_asm_clobbered[FRAME_POINTER_REGNUM])
377     {
378       SET_HARD_REG_BIT (eliminable_regset, FRAME_POINTER_REGNUM);
379       if (need_fp)
380         SET_HARD_REG_BIT (no_global_alloc_regs, FRAME_POINTER_REGNUM);
381     }
382   else if (need_fp)
383     error ("%s cannot be used in asm here", reg_names[FRAME_POINTER_REGNUM]);
384   else
385     regs_ever_live[FRAME_POINTER_REGNUM] = 1;
386 #endif
387
388   /* Track which registers have already been used.  Start with registers
389      explicitly in the rtl, then registers allocated by local register
390      allocation.  */
391
392   CLEAR_HARD_REG_SET (regs_used_so_far);
393 #ifdef LEAF_REGISTERS
394   /* If we are doing the leaf function optimization, and this is a leaf
395      function, it means that the registers that take work to save are those
396      that need a register window.  So prefer the ones that can be used in
397      a leaf function.  */
398   {
399     const char *cheap_regs;
400     const char *const leaf_regs = LEAF_REGISTERS;
401
402     if (only_leaf_regs_used () && leaf_function_p ())
403       cheap_regs = leaf_regs;
404     else
405       cheap_regs = call_used_regs;
406     for (i = 0; i < FIRST_PSEUDO_REGISTER; i++)
407       if (regs_ever_live[i] || cheap_regs[i])
408         SET_HARD_REG_BIT (regs_used_so_far, i);
409   }
410 #else
411   /* We consider registers that do not have to be saved over calls as if
412      they were already used since there is no cost in using them.  */
413   for (i = 0; i < FIRST_PSEUDO_REGISTER; i++)
414     if (regs_ever_live[i] || call_used_regs[i])
415       SET_HARD_REG_BIT (regs_used_so_far, i);
416 #endif
417
418   for (i = FIRST_PSEUDO_REGISTER; i < (size_t) max_regno; i++)
419     if (reg_renumber[i] >= 0)
420       SET_HARD_REG_BIT (regs_used_so_far, reg_renumber[i]);
421
422   /* Establish mappings from register number to allocation number
423      and vice versa.  In the process, count the allocnos.  */
424
425   reg_allocno = xmalloc (max_regno * sizeof (int));
426
427   for (i = 0; i < FIRST_PSEUDO_REGISTER; i++)
428     reg_allocno[i] = -1;
429
430   /* Initialize the shared-hard-reg mapping
431      from the list of pairs that may share.  */
432   reg_may_share = xcalloc (max_regno, sizeof (int));
433   for (x = regs_may_share; x; x = XEXP (XEXP (x, 1), 1))
434     {
435       int r1 = REGNO (XEXP (x, 0));
436       int r2 = REGNO (XEXP (XEXP (x, 1), 0));
437       if (r1 > r2)
438         reg_may_share[r1] = r2;
439       else
440         reg_may_share[r2] = r1;
441     }
442
443   for (i = FIRST_PSEUDO_REGISTER; i < (size_t) max_regno; i++)
444     /* Note that reg_live_length[i] < 0 indicates a "constant" reg
445        that we are supposed to refrain from putting in a hard reg.
446        -2 means do make an allocno but don't allocate it.  */
447     if (REG_N_REFS (i) != 0 && REG_LIVE_LENGTH (i) != -1
448         /* Don't allocate pseudos that cross calls,
449            if this function receives a nonlocal goto.  */
450         && (! current_function_has_nonlocal_label
451             || REG_N_CALLS_CROSSED (i) == 0))
452       {
453         if (reg_renumber[i] < 0 && reg_may_share[i] && reg_allocno[reg_may_share[i]] >= 0)
454           reg_allocno[i] = reg_allocno[reg_may_share[i]];
455         else
456           reg_allocno[i] = max_allocno++;
457         if (REG_LIVE_LENGTH (i) == 0)
458           abort ();
459       }
460     else
461       reg_allocno[i] = -1;
462
463   allocno = xcalloc (max_allocno, sizeof (struct allocno));
464
465   for (i = FIRST_PSEUDO_REGISTER; i < (size_t) max_regno; i++)
466     if (reg_allocno[i] >= 0)
467       {
468         int num = reg_allocno[i];
469         allocno[num].reg = i;
470         allocno[num].size = PSEUDO_REGNO_SIZE (i);
471         allocno[num].calls_crossed += REG_N_CALLS_CROSSED (i);
472         allocno[num].n_refs += REG_N_REFS (i);
473         allocno[num].freq += REG_FREQ (i);
474         if (allocno[num].live_length < REG_LIVE_LENGTH (i))
475           allocno[num].live_length = REG_LIVE_LENGTH (i);
476       }
477
478   /* Calculate amount of usage of each hard reg by pseudos
479      allocated by local-alloc.  This is to see if we want to
480      override it.  */
481   memset (local_reg_live_length, 0, sizeof local_reg_live_length);
482   memset (local_reg_n_refs, 0, sizeof local_reg_n_refs);
483   memset (local_reg_freq, 0, sizeof local_reg_freq);
484   for (i = FIRST_PSEUDO_REGISTER; i < (size_t) max_regno; i++)
485     if (reg_renumber[i] >= 0)
486       {
487         int regno = reg_renumber[i];
488         int endregno = regno + HARD_REGNO_NREGS (regno, PSEUDO_REGNO_MODE (i));
489         int j;
490
491         for (j = regno; j < endregno; j++)
492           {
493             local_reg_n_refs[j] += REG_N_REFS (i);
494             local_reg_freq[j] += REG_FREQ (i);
495             local_reg_live_length[j] += REG_LIVE_LENGTH (i);
496           }
497       }
498
499   /* We can't override local-alloc for a reg used not just by local-alloc.  */
500   for (i = 0; i < FIRST_PSEUDO_REGISTER; i++)
501     if (regs_ever_live[i])
502       local_reg_n_refs[i] = 0, local_reg_freq[i] = 0;
503
504   allocno_row_words = (max_allocno + INT_BITS - 1) / INT_BITS;
505
506   /* We used to use alloca here, but the size of what it would try to
507      allocate would occasionally cause it to exceed the stack limit and
508      cause unpredictable core dumps.  Some examples were > 2Mb in size.  */
509   conflicts = xcalloc (max_allocno * allocno_row_words, sizeof (INT_TYPE));
510
511   allocnos_live = xmalloc (allocno_row_words * sizeof (INT_TYPE));
512
513   /* If there is work to be done (at least one reg to allocate),
514      perform global conflict analysis and allocate the regs.  */
515
516   if (max_allocno > 0)
517     {
518       /* Scan all the insns and compute the conflicts among allocnos
519          and between allocnos and hard regs.  */
520
521       global_conflicts ();
522
523       mirror_conflicts ();
524
525       /* Eliminate conflicts between pseudos and eliminable registers.  If
526          the register is not eliminated, the pseudo won't really be able to
527          live in the eliminable register, so the conflict doesn't matter.
528          If we do eliminate the register, the conflict will no longer exist.
529          So in either case, we can ignore the conflict.  Likewise for
530          preferences.  */
531
532       for (i = 0; i < (size_t) max_allocno; i++)
533         {
534           AND_COMPL_HARD_REG_SET (allocno[i].hard_reg_conflicts,
535                                   eliminable_regset);
536           AND_COMPL_HARD_REG_SET (allocno[i].hard_reg_copy_preferences,
537                                   eliminable_regset);
538           AND_COMPL_HARD_REG_SET (allocno[i].hard_reg_preferences,
539                                   eliminable_regset);
540         }
541
542       /* Try to expand the preferences by merging them between allocnos.  */
543
544       expand_preferences ();
545
546       /* Determine the order to allocate the remaining pseudo registers.  */
547
548       allocno_order = xmalloc (max_allocno * sizeof (int));
549       for (i = 0; i < (size_t) max_allocno; i++)
550         allocno_order[i] = i;
551
552       /* Default the size to 1, since allocno_compare uses it to divide by.
553          Also convert allocno_live_length of zero to -1.  A length of zero
554          can occur when all the registers for that allocno have reg_live_length
555          equal to -2.  In this case, we want to make an allocno, but not
556          allocate it.  So avoid the divide-by-zero and set it to a low
557          priority.  */
558
559       for (i = 0; i < (size_t) max_allocno; i++)
560         {
561           if (allocno[i].size == 0)
562             allocno[i].size = 1;
563           if (allocno[i].live_length == 0)
564             allocno[i].live_length = -1;
565         }
566
567       qsort (allocno_order, max_allocno, sizeof (int), allocno_compare);
568
569       prune_preferences ();
570
571       if (file)
572         dump_conflicts (file);
573
574       /* Try allocating them, one by one, in that order,
575          except for parameters marked with reg_live_length[regno] == -2.  */
576
577       for (i = 0; i < (size_t) max_allocno; i++)
578         if (reg_renumber[allocno[allocno_order[i]].reg] < 0
579             && REG_LIVE_LENGTH (allocno[allocno_order[i]].reg) >= 0)
580           {
581             /* If we have more than one register class,
582                first try allocating in the class that is cheapest
583                for this pseudo-reg.  If that fails, try any reg.  */
584             if (N_REG_CLASSES > 1)
585               {
586                 find_reg (allocno_order[i], 0, 0, 0, 0);
587                 if (reg_renumber[allocno[allocno_order[i]].reg] >= 0)
588                   continue;
589               }
590             if (reg_alternate_class (allocno[allocno_order[i]].reg) != NO_REGS)
591               find_reg (allocno_order[i], 0, 1, 0, 0);
592           }
593
594       free (allocno_order);
595     }
596
597   /* Do the reloads now while the allocno data still exist, so that we can
598      try to assign new hard regs to any pseudo regs that are spilled.  */
599
600 #if 0 /* We need to eliminate regs even if there is no rtl code,
601          for the sake of debugging information.  */
602   if (n_basic_blocks > 0)
603 #endif
604     {
605       build_insn_chain (get_insns ());
606       retval = reload (get_insns (), 1);
607     }
608
609   /* Clean up.  */
610   free (reg_allocno);
611   free (reg_may_share);
612   free (allocno);
613   free (conflicts);
614   free (allocnos_live);
615
616   return retval;
617 }
618
619 /* Sort predicate for ordering the allocnos.
620    Returns -1 (1) if *v1 should be allocated before (after) *v2.  */
621
622 static int
623 allocno_compare (const void *v1p, const void *v2p)
624 {
625   int v1 = *(const int *)v1p, v2 = *(const int *)v2p;
626   /* Note that the quotient will never be bigger than
627      the value of floor_log2 times the maximum number of
628      times a register can occur in one insn (surely less than 100)
629      weighted by the frequency (maximally REG_FREQ_MAX).
630      Multiplying this by 10000/REG_FREQ_MAX can't overflow.  */
631   int pri1
632     = (((double) (floor_log2 (allocno[v1].n_refs) * allocno[v1].freq)
633         / allocno[v1].live_length)
634        * (10000 / REG_FREQ_MAX) * allocno[v1].size);
635   int pri2
636     = (((double) (floor_log2 (allocno[v2].n_refs) * allocno[v2].freq)
637         / allocno[v2].live_length)
638        * (10000 / REG_FREQ_MAX) * allocno[v2].size);
639   if (pri2 - pri1)
640     return pri2 - pri1;
641
642   /* If regs are equally good, sort by allocno,
643      so that the results of qsort leave nothing to chance.  */
644   return v1 - v2;
645 }
646 \f
647 /* Scan the rtl code and record all conflicts and register preferences in the
648    conflict matrices and preference tables.  */
649
650 static void
651 global_conflicts (void)
652 {
653   int i;
654   basic_block b;
655   rtx insn;
656   int *block_start_allocnos;
657
658   /* Make a vector that mark_reg_{store,clobber} will store in.  */
659   regs_set = xmalloc (max_parallel * sizeof (rtx) * 2);
660
661   block_start_allocnos = xmalloc (max_allocno * sizeof (int));
662
663   FOR_EACH_BB (b)
664     {
665       memset (allocnos_live, 0, allocno_row_words * sizeof (INT_TYPE));
666
667       /* Initialize table of registers currently live
668          to the state at the beginning of this basic block.
669          This also marks the conflicts among hard registers
670          and any allocnos that are live.
671
672          For pseudo-regs, there is only one bit for each one
673          no matter how many hard regs it occupies.
674          This is ok; we know the size from PSEUDO_REGNO_SIZE.
675          For explicit hard regs, we cannot know the size that way
676          since one hard reg can be used with various sizes.
677          Therefore, we must require that all the hard regs
678          implicitly live as part of a multi-word hard reg
679          are explicitly marked in basic_block_live_at_start.  */
680
681       {
682         regset old = b->global_live_at_start;
683         int ax = 0;
684
685         REG_SET_TO_HARD_REG_SET (hard_regs_live, old);
686         EXECUTE_IF_SET_IN_REG_SET (old, FIRST_PSEUDO_REGISTER, i,
687                                    {
688                                      int a = reg_allocno[i];
689                                      if (a >= 0)
690                                        {
691                                          SET_ALLOCNO_LIVE (a);
692                                          block_start_allocnos[ax++] = a;
693                                        }
694                                      else if ((a = reg_renumber[i]) >= 0)
695                                        mark_reg_live_nc
696                                          (a, PSEUDO_REGNO_MODE (i));
697                                    });
698
699         /* Record that each allocno now live conflicts with each hard reg
700            now live.
701
702            It is not necessary to mark any conflicts between pseudos as
703            this point, even for pseudos which are live at the start of
704            the basic block.
705
706              Given two pseudos X and Y and any point in the CFG P.
707
708              On any path to point P where X and Y are live one of the
709              following conditions must be true:
710
711                 1. X is live at some instruction on the path that
712                    evaluates Y.
713
714                 2. Y is live at some instruction on the path that
715                    evaluates X.
716
717                 3. Either X or Y is not evaluated on the path to P
718                    (ie it is used uninitialized) and thus the
719                    conflict can be ignored.
720
721             In cases #1 and #2 the conflict will be recorded when we
722             scan the instruction that makes either X or Y become live.  */
723         record_conflicts (block_start_allocnos, ax);
724
725         /* Pseudos can't go in stack regs at the start of a basic block that
726            is reached by an abnormal edge. Likewise for call clobbered regs,
727            because because caller-save, fixup_abnormal_edges, and possibly
728            the table driven EH machinery are not quite ready to handle such
729            regs live across such edges.  */
730         {
731           edge e;
732
733           for (e = b->pred; e ; e = e->pred_next)
734             if (e->flags & EDGE_ABNORMAL)
735               break;
736
737           if (e != NULL)
738             {
739 #ifdef STACK_REGS
740               EXECUTE_IF_SET_IN_ALLOCNO_SET (allocnos_live, ax,
741                                              {
742                                                allocno[ax].no_stack_reg = 1;
743                                              });
744               for (ax = FIRST_STACK_REG; ax <= LAST_STACK_REG; ax++)
745                 record_one_conflict (ax);
746 #endif
747
748               /* No need to record conflicts for call clobbered regs if we have
749                  nonlocal labels around, as we don't ever try to allocate such
750                  regs in this case.  */
751               if (! current_function_has_nonlocal_label)
752                 for (ax = 0; ax < FIRST_PSEUDO_REGISTER; ax++)
753                   if (call_used_regs [ax])
754                     record_one_conflict (ax);
755             }
756         }
757       }
758
759       insn = BB_HEAD (b);
760
761       /* Scan the code of this basic block, noting which allocnos
762          and hard regs are born or die.  When one is born,
763          record a conflict with all others currently live.  */
764
765       while (1)
766         {
767           RTX_CODE code = GET_CODE (insn);
768           rtx link;
769
770           /* Make regs_set an empty set.  */
771
772           n_regs_set = 0;
773
774           if (code == INSN || code == CALL_INSN || code == JUMP_INSN)
775             {
776
777 #if 0
778               int i = 0;
779               for (link = REG_NOTES (insn);
780                    link && i < NUM_NO_CONFLICT_PAIRS;
781                    link = XEXP (link, 1))
782                 if (REG_NOTE_KIND (link) == REG_NO_CONFLICT)
783                   {
784                     no_conflict_pairs[i].allocno1
785                       = reg_allocno[REGNO (SET_DEST (PATTERN (insn)))];
786                     no_conflict_pairs[i].allocno2
787                       = reg_allocno[REGNO (XEXP (link, 0))];
788                     i++;
789                   }
790 #endif /* 0 */
791
792               /* Mark any registers clobbered by INSN as live,
793                  so they conflict with the inputs.  */
794
795               note_stores (PATTERN (insn), mark_reg_clobber, NULL);
796
797               /* Mark any registers dead after INSN as dead now.  */
798
799               for (link = REG_NOTES (insn); link; link = XEXP (link, 1))
800                 if (REG_NOTE_KIND (link) == REG_DEAD)
801                   mark_reg_death (XEXP (link, 0));
802
803               /* Mark any registers set in INSN as live,
804                  and mark them as conflicting with all other live regs.
805                  Clobbers are processed again, so they conflict with
806                  the registers that are set.  */
807
808               note_stores (PATTERN (insn), mark_reg_store, NULL);
809
810 #ifdef AUTO_INC_DEC
811               for (link = REG_NOTES (insn); link; link = XEXP (link, 1))
812                 if (REG_NOTE_KIND (link) == REG_INC)
813                   mark_reg_store (XEXP (link, 0), NULL_RTX, NULL);
814 #endif
815
816               /* If INSN has multiple outputs, then any reg that dies here
817                  and is used inside of an output
818                  must conflict with the other outputs.
819
820                  It is unsafe to use !single_set here since it will ignore an
821                  unused output.  Just because an output is unused does not mean
822                  the compiler can assume the side effect will not occur.
823                  Consider if REG appears in the address of an output and we
824                  reload the output.  If we allocate REG to the same hard
825                  register as an unused output we could set the hard register
826                  before the output reload insn.  */
827               if (GET_CODE (PATTERN (insn)) == PARALLEL && multiple_sets (insn))
828                 for (link = REG_NOTES (insn); link; link = XEXP (link, 1))
829                   if (REG_NOTE_KIND (link) == REG_DEAD)
830                     {
831                       int used_in_output = 0;
832                       int i;
833                       rtx reg = XEXP (link, 0);
834
835                       for (i = XVECLEN (PATTERN (insn), 0) - 1; i >= 0; i--)
836                         {
837                           rtx set = XVECEXP (PATTERN (insn), 0, i);
838                           if (GET_CODE (set) == SET
839                               && GET_CODE (SET_DEST (set)) != REG
840                               && !rtx_equal_p (reg, SET_DEST (set))
841                               && reg_overlap_mentioned_p (reg, SET_DEST (set)))
842                             used_in_output = 1;
843                         }
844                       if (used_in_output)
845                         mark_reg_conflicts (reg);
846                     }
847
848               /* Mark any registers set in INSN and then never used.  */
849
850               while (n_regs_set-- > 0)
851                 {
852                   rtx note = find_regno_note (insn, REG_UNUSED,
853                                               REGNO (regs_set[n_regs_set]));
854                   if (note)
855                     mark_reg_death (XEXP (note, 0));
856                 }
857             }
858
859           if (insn == BB_END (b))
860             break;
861           insn = NEXT_INSN (insn);
862         }
863     }
864
865   /* Clean up.  */
866   free (block_start_allocnos);
867   free (regs_set);
868 }
869 /* Expand the preference information by looking for cases where one allocno
870    dies in an insn that sets an allocno.  If those two allocnos don't conflict,
871    merge any preferences between those allocnos.  */
872
873 static void
874 expand_preferences (void)
875 {
876   rtx insn;
877   rtx link;
878   rtx set;
879
880   /* We only try to handle the most common cases here.  Most of the cases
881      where this wins are reg-reg copies.  */
882
883   for (insn = get_insns (); insn; insn = NEXT_INSN (insn))
884     if (INSN_P (insn)
885         && (set = single_set (insn)) != 0
886         && GET_CODE (SET_DEST (set)) == REG
887         && reg_allocno[REGNO (SET_DEST (set))] >= 0)
888       for (link = REG_NOTES (insn); link; link = XEXP (link, 1))
889         if (REG_NOTE_KIND (link) == REG_DEAD
890             && GET_CODE (XEXP (link, 0)) == REG
891             && reg_allocno[REGNO (XEXP (link, 0))] >= 0
892             && ! CONFLICTP (reg_allocno[REGNO (SET_DEST (set))],
893                             reg_allocno[REGNO (XEXP (link, 0))]))
894           {
895             int a1 = reg_allocno[REGNO (SET_DEST (set))];
896             int a2 = reg_allocno[REGNO (XEXP (link, 0))];
897
898             if (XEXP (link, 0) == SET_SRC (set))
899               {
900                 IOR_HARD_REG_SET (allocno[a1].hard_reg_copy_preferences,
901                                   allocno[a2].hard_reg_copy_preferences);
902                 IOR_HARD_REG_SET (allocno[a2].hard_reg_copy_preferences,
903                                   allocno[a1].hard_reg_copy_preferences);
904               }
905
906             IOR_HARD_REG_SET (allocno[a1].hard_reg_preferences,
907                               allocno[a2].hard_reg_preferences);
908             IOR_HARD_REG_SET (allocno[a2].hard_reg_preferences,
909                               allocno[a1].hard_reg_preferences);
910             IOR_HARD_REG_SET (allocno[a1].hard_reg_full_preferences,
911                               allocno[a2].hard_reg_full_preferences);
912             IOR_HARD_REG_SET (allocno[a2].hard_reg_full_preferences,
913                               allocno[a1].hard_reg_full_preferences);
914           }
915 }
916 \f
917 /* Prune the preferences for global registers to exclude registers that cannot
918    be used.
919
920    Compute `regs_someone_prefers', which is a bitmask of the hard registers
921    that are preferred by conflicting registers of lower priority.  If possible,
922    we will avoid using these registers.  */
923
924 static void
925 prune_preferences (void)
926 {
927   int i;
928   int num;
929   int *allocno_to_order = xmalloc (max_allocno * sizeof (int));
930
931   /* Scan least most important to most important.
932      For each allocno, remove from preferences registers that cannot be used,
933      either because of conflicts or register type.  Then compute all registers
934      preferred by each lower-priority register that conflicts.  */
935
936   for (i = max_allocno - 1; i >= 0; i--)
937     {
938       HARD_REG_SET temp;
939
940       num = allocno_order[i];
941       allocno_to_order[num] = i;
942       COPY_HARD_REG_SET (temp, allocno[num].hard_reg_conflicts);
943
944       if (allocno[num].calls_crossed == 0)
945         IOR_HARD_REG_SET (temp, fixed_reg_set);
946       else
947         IOR_HARD_REG_SET (temp, call_used_reg_set);
948
949       IOR_COMPL_HARD_REG_SET
950         (temp,
951          reg_class_contents[(int) reg_preferred_class (allocno[num].reg)]);
952
953       AND_COMPL_HARD_REG_SET (allocno[num].hard_reg_preferences, temp);
954       AND_COMPL_HARD_REG_SET (allocno[num].hard_reg_copy_preferences, temp);
955       AND_COMPL_HARD_REG_SET (allocno[num].hard_reg_full_preferences, temp);
956     }
957
958   for (i = max_allocno - 1; i >= 0; i--)
959     {
960       /* Merge in the preferences of lower-priority registers (they have
961          already been pruned).  If we also prefer some of those registers,
962          don't exclude them unless we are of a smaller size (in which case
963          we want to give the lower-priority allocno the first chance for
964          these registers).  */
965       HARD_REG_SET temp, temp2;
966       int allocno2;
967
968       num = allocno_order[i];
969
970       CLEAR_HARD_REG_SET (temp);
971       CLEAR_HARD_REG_SET (temp2);
972
973       EXECUTE_IF_SET_IN_ALLOCNO_SET (conflicts + num * allocno_row_words,
974                                      allocno2,
975         {
976           if (allocno_to_order[allocno2] > i)
977             {
978               if (allocno[allocno2].size <= allocno[num].size)
979                 IOR_HARD_REG_SET (temp,
980                                   allocno[allocno2].hard_reg_full_preferences);
981               else
982                 IOR_HARD_REG_SET (temp2,
983                                   allocno[allocno2].hard_reg_full_preferences);
984             }
985         });
986
987       AND_COMPL_HARD_REG_SET (temp, allocno[num].hard_reg_full_preferences);
988       IOR_HARD_REG_SET (temp, temp2);
989       COPY_HARD_REG_SET (allocno[num].regs_someone_prefers, temp);
990     }
991   free (allocno_to_order);
992 }
993 \f
994 /* Assign a hard register to allocno NUM; look for one that is the beginning
995    of a long enough stretch of hard regs none of which conflicts with ALLOCNO.
996    The registers marked in PREFREGS are tried first.
997
998    LOSERS, if nonzero, is a HARD_REG_SET indicating registers that cannot
999    be used for this allocation.
1000
1001    If ALT_REGS_P is zero, consider only the preferred class of ALLOCNO's reg.
1002    Otherwise ignore that preferred class and use the alternate class.
1003
1004    If ACCEPT_CALL_CLOBBERED is nonzero, accept a call-clobbered hard reg that
1005    will have to be saved and restored at calls.
1006
1007    RETRYING is nonzero if this is called from retry_global_alloc.
1008
1009    If we find one, record it in reg_renumber.
1010    If not, do nothing.  */
1011
1012 static void
1013 find_reg (int num, HARD_REG_SET losers, int alt_regs_p, int accept_call_clobbered, int retrying)
1014 {
1015   int i, best_reg, pass;
1016   HARD_REG_SET used, used1, used2;
1017
1018   enum reg_class class = (alt_regs_p
1019                           ? reg_alternate_class (allocno[num].reg)
1020                           : reg_preferred_class (allocno[num].reg));
1021   enum machine_mode mode = PSEUDO_REGNO_MODE (allocno[num].reg);
1022
1023   if (accept_call_clobbered)
1024     COPY_HARD_REG_SET (used1, call_fixed_reg_set);
1025   else if (allocno[num].calls_crossed == 0)
1026     COPY_HARD_REG_SET (used1, fixed_reg_set);
1027   else
1028     COPY_HARD_REG_SET (used1, call_used_reg_set);
1029
1030   /* Some registers should not be allocated in global-alloc.  */
1031   IOR_HARD_REG_SET (used1, no_global_alloc_regs);
1032   if (losers)
1033     IOR_HARD_REG_SET (used1, losers);
1034
1035   IOR_COMPL_HARD_REG_SET (used1, reg_class_contents[(int) class]);
1036   COPY_HARD_REG_SET (used2, used1);
1037
1038   IOR_HARD_REG_SET (used1, allocno[num].hard_reg_conflicts);
1039
1040 #ifdef CANNOT_CHANGE_MODE_CLASS
1041   cannot_change_mode_set_regs (&used1, mode, allocno[num].reg);
1042 #endif
1043
1044   /* Try each hard reg to see if it fits.  Do this in two passes.
1045      In the first pass, skip registers that are preferred by some other pseudo
1046      to give it a better chance of getting one of those registers.  Only if
1047      we can't get a register when excluding those do we take one of them.
1048      However, we never allocate a register for the first time in pass 0.  */
1049
1050   COPY_HARD_REG_SET (used, used1);
1051   IOR_COMPL_HARD_REG_SET (used, regs_used_so_far);
1052   IOR_HARD_REG_SET (used, allocno[num].regs_someone_prefers);
1053
1054   best_reg = -1;
1055   for (i = FIRST_PSEUDO_REGISTER, pass = 0;
1056        pass <= 1 && i >= FIRST_PSEUDO_REGISTER;
1057        pass++)
1058     {
1059       if (pass == 1)
1060         COPY_HARD_REG_SET (used, used1);
1061       for (i = 0; i < FIRST_PSEUDO_REGISTER; i++)
1062         {
1063 #ifdef REG_ALLOC_ORDER
1064           int regno = reg_alloc_order[i];
1065 #else
1066           int regno = i;
1067 #endif
1068           if (! TEST_HARD_REG_BIT (used, regno)
1069               && HARD_REGNO_MODE_OK (regno, mode)
1070               && (allocno[num].calls_crossed == 0
1071                   || accept_call_clobbered
1072                   || ! HARD_REGNO_CALL_PART_CLOBBERED (regno, mode)))
1073             {
1074               int j;
1075               int lim = regno + HARD_REGNO_NREGS (regno, mode);
1076               for (j = regno + 1;
1077                    (j < lim
1078                     && ! TEST_HARD_REG_BIT (used, j));
1079                    j++);
1080               if (j == lim)
1081                 {
1082                   best_reg = regno;
1083                   break;
1084                 }
1085 #ifndef REG_ALLOC_ORDER
1086               i = j;                    /* Skip starting points we know will lose */
1087 #endif
1088             }
1089           }
1090       }
1091
1092   /* See if there is a preferred register with the same class as the register
1093      we allocated above.  Making this restriction prevents register
1094      preferencing from creating worse register allocation.
1095
1096      Remove from the preferred registers and conflicting registers.  Note that
1097      additional conflicts may have been added after `prune_preferences' was
1098      called.
1099
1100      First do this for those register with copy preferences, then all
1101      preferred registers.  */
1102
1103   AND_COMPL_HARD_REG_SET (allocno[num].hard_reg_copy_preferences, used);
1104   GO_IF_HARD_REG_SUBSET (allocno[num].hard_reg_copy_preferences,
1105                          reg_class_contents[(int) NO_REGS], no_copy_prefs);
1106
1107   if (best_reg >= 0)
1108     {
1109       for (i = 0; i < FIRST_PSEUDO_REGISTER; i++)
1110         if (TEST_HARD_REG_BIT (allocno[num].hard_reg_copy_preferences, i)
1111             && HARD_REGNO_MODE_OK (i, mode)
1112             && (allocno[num].calls_crossed == 0
1113                 || accept_call_clobbered
1114                 || ! HARD_REGNO_CALL_PART_CLOBBERED (i, mode))
1115             && (REGNO_REG_CLASS (i) == REGNO_REG_CLASS (best_reg)
1116                 || reg_class_subset_p (REGNO_REG_CLASS (i),
1117                                        REGNO_REG_CLASS (best_reg))
1118                 || reg_class_subset_p (REGNO_REG_CLASS (best_reg),
1119                                        REGNO_REG_CLASS (i))))
1120             {
1121               int j;
1122               int lim = i + HARD_REGNO_NREGS (i, mode);
1123               for (j = i + 1;
1124                    (j < lim
1125                     && ! TEST_HARD_REG_BIT (used, j)
1126                     && (REGNO_REG_CLASS (j)
1127                         == REGNO_REG_CLASS (best_reg + (j - i))
1128                         || reg_class_subset_p (REGNO_REG_CLASS (j),
1129                                                REGNO_REG_CLASS (best_reg + (j - i)))
1130                         || reg_class_subset_p (REGNO_REG_CLASS (best_reg + (j - i)),
1131                                                REGNO_REG_CLASS (j))));
1132                    j++);
1133               if (j == lim)
1134                 {
1135                   best_reg = i;
1136                   goto no_prefs;
1137                 }
1138             }
1139     }
1140  no_copy_prefs:
1141
1142   AND_COMPL_HARD_REG_SET (allocno[num].hard_reg_preferences, used);
1143   GO_IF_HARD_REG_SUBSET (allocno[num].hard_reg_preferences,
1144                          reg_class_contents[(int) NO_REGS], no_prefs);
1145
1146   if (best_reg >= 0)
1147     {
1148       for (i = 0; i < FIRST_PSEUDO_REGISTER; i++)
1149         if (TEST_HARD_REG_BIT (allocno[num].hard_reg_preferences, i)
1150             && HARD_REGNO_MODE_OK (i, mode)
1151             && (allocno[num].calls_crossed == 0
1152                 || accept_call_clobbered
1153                 || ! HARD_REGNO_CALL_PART_CLOBBERED (i, mode))
1154             && (REGNO_REG_CLASS (i) == REGNO_REG_CLASS (best_reg)
1155                 || reg_class_subset_p (REGNO_REG_CLASS (i),
1156                                        REGNO_REG_CLASS (best_reg))
1157                 || reg_class_subset_p (REGNO_REG_CLASS (best_reg),
1158                                        REGNO_REG_CLASS (i))))
1159             {
1160               int j;
1161               int lim = i + HARD_REGNO_NREGS (i, mode);
1162               for (j = i + 1;
1163                    (j < lim
1164                     && ! TEST_HARD_REG_BIT (used, j)
1165                     && (REGNO_REG_CLASS (j)
1166                         == REGNO_REG_CLASS (best_reg + (j - i))
1167                         || reg_class_subset_p (REGNO_REG_CLASS (j),
1168                                                REGNO_REG_CLASS (best_reg + (j - i)))
1169                         || reg_class_subset_p (REGNO_REG_CLASS (best_reg + (j - i)),
1170                                                REGNO_REG_CLASS (j))));
1171                    j++);
1172               if (j == lim)
1173                 {
1174                   best_reg = i;
1175                   break;
1176                 }
1177             }
1178     }
1179  no_prefs:
1180
1181   /* If we haven't succeeded yet, try with caller-saves.
1182      We need not check to see if the current function has nonlocal
1183      labels because we don't put any pseudos that are live over calls in
1184      registers in that case.  */
1185
1186   if (flag_caller_saves && best_reg < 0)
1187     {
1188       /* Did not find a register.  If it would be profitable to
1189          allocate a call-clobbered register and save and restore it
1190          around calls, do that.  */
1191       if (! accept_call_clobbered
1192           && allocno[num].calls_crossed != 0
1193           && CALLER_SAVE_PROFITABLE (allocno[num].n_refs,
1194                                      allocno[num].calls_crossed))
1195         {
1196           HARD_REG_SET new_losers;
1197           if (! losers)
1198             CLEAR_HARD_REG_SET (new_losers);
1199           else
1200             COPY_HARD_REG_SET (new_losers, losers);
1201
1202           IOR_HARD_REG_SET(new_losers, losing_caller_save_reg_set);
1203           find_reg (num, new_losers, alt_regs_p, 1, retrying);
1204           if (reg_renumber[allocno[num].reg] >= 0)
1205             {
1206               caller_save_needed = 1;
1207               return;
1208             }
1209         }
1210     }
1211
1212   /* If we haven't succeeded yet,
1213      see if some hard reg that conflicts with us
1214      was utilized poorly by local-alloc.
1215      If so, kick out the regs that were put there by local-alloc
1216      so we can use it instead.  */
1217   if (best_reg < 0 && !retrying
1218       /* Let's not bother with multi-reg allocnos.  */
1219       && allocno[num].size == 1)
1220     {
1221       /* Count from the end, to find the least-used ones first.  */
1222       for (i = FIRST_PSEUDO_REGISTER - 1; i >= 0; i--)
1223         {
1224 #ifdef REG_ALLOC_ORDER
1225           int regno = reg_alloc_order[i];
1226 #else
1227           int regno = i;
1228 #endif
1229
1230           if (local_reg_n_refs[regno] != 0
1231               /* Don't use a reg no good for this pseudo.  */
1232               && ! TEST_HARD_REG_BIT (used2, regno)
1233               && HARD_REGNO_MODE_OK (regno, mode)
1234               /* The code below assumes that we need only a single
1235                  register, but the check of allocno[num].size above
1236                  was not enough.  Sometimes we need more than one
1237                  register for a single-word value.  */
1238               && HARD_REGNO_NREGS (regno, mode) == 1
1239               && (allocno[num].calls_crossed == 0
1240                   || accept_call_clobbered
1241                   || ! HARD_REGNO_CALL_PART_CLOBBERED (regno, mode))
1242 #ifdef CANNOT_CHANGE_MODE_CLASS
1243               && ! invalid_mode_change_p (regno, REGNO_REG_CLASS (regno),
1244                                           mode)
1245 #endif
1246 #ifdef STACK_REGS
1247              && (!allocno[num].no_stack_reg
1248                  || regno < FIRST_STACK_REG || regno > LAST_STACK_REG)
1249 #endif
1250               )
1251             {
1252               /* We explicitly evaluate the divide results into temporary
1253                  variables so as to avoid excess precision problems that occur
1254                  on an i386-unknown-sysv4.2 (unixware) host.  */
1255
1256               double tmp1 = ((double) local_reg_freq[regno]
1257                             / local_reg_live_length[regno]);
1258               double tmp2 = ((double) allocno[num].freq
1259                              / allocno[num].live_length);
1260
1261               if (tmp1 < tmp2)
1262                 {
1263                   /* Hard reg REGNO was used less in total by local regs
1264                      than it would be used by this one allocno!  */
1265                   int k;
1266                   for (k = 0; k < max_regno; k++)
1267                     if (reg_renumber[k] >= 0)
1268                       {
1269                         int r = reg_renumber[k];
1270                         int endregno
1271                           = r + HARD_REGNO_NREGS (r, PSEUDO_REGNO_MODE (k));
1272
1273                         if (regno >= r && regno < endregno)
1274                           reg_renumber[k] = -1;
1275                       }
1276
1277                   best_reg = regno;
1278                   break;
1279                 }
1280             }
1281         }
1282     }
1283
1284   /* Did we find a register?  */
1285
1286   if (best_reg >= 0)
1287     {
1288       int lim, j;
1289       HARD_REG_SET this_reg;
1290
1291       /* Yes.  Record it as the hard register of this pseudo-reg.  */
1292       reg_renumber[allocno[num].reg] = best_reg;
1293       /* Also of any pseudo-regs that share with it.  */
1294       if (reg_may_share[allocno[num].reg])
1295         for (j = FIRST_PSEUDO_REGISTER; j < max_regno; j++)
1296           if (reg_allocno[j] == num)
1297             reg_renumber[j] = best_reg;
1298
1299       /* Make a set of the hard regs being allocated.  */
1300       CLEAR_HARD_REG_SET (this_reg);
1301       lim = best_reg + HARD_REGNO_NREGS (best_reg, mode);
1302       for (j = best_reg; j < lim; j++)
1303         {
1304           SET_HARD_REG_BIT (this_reg, j);
1305           SET_HARD_REG_BIT (regs_used_so_far, j);
1306           /* This is no longer a reg used just by local regs.  */
1307           local_reg_n_refs[j] = 0;
1308           local_reg_freq[j] = 0;
1309         }
1310       /* For each other pseudo-reg conflicting with this one,
1311          mark it as conflicting with the hard regs this one occupies.  */
1312       lim = num;
1313       EXECUTE_IF_SET_IN_ALLOCNO_SET (conflicts + lim * allocno_row_words, j,
1314         {
1315           IOR_HARD_REG_SET (allocno[j].hard_reg_conflicts, this_reg);
1316         });
1317     }
1318 }
1319 \f
1320 /* Called from `reload' to look for a hard reg to put pseudo reg REGNO in.
1321    Perhaps it had previously seemed not worth a hard reg,
1322    or perhaps its old hard reg has been commandeered for reloads.
1323    FORBIDDEN_REGS indicates certain hard regs that may not be used, even if
1324    they do not appear to be allocated.
1325    If FORBIDDEN_REGS is zero, no regs are forbidden.  */
1326
1327 void
1328 retry_global_alloc (int regno, HARD_REG_SET forbidden_regs)
1329 {
1330   int alloc_no = reg_allocno[regno];
1331   if (alloc_no >= 0)
1332     {
1333       /* If we have more than one register class,
1334          first try allocating in the class that is cheapest
1335          for this pseudo-reg.  If that fails, try any reg.  */
1336       if (N_REG_CLASSES > 1)
1337         find_reg (alloc_no, forbidden_regs, 0, 0, 1);
1338       if (reg_renumber[regno] < 0
1339           && reg_alternate_class (regno) != NO_REGS)
1340         find_reg (alloc_no, forbidden_regs, 1, 0, 1);
1341
1342       /* If we found a register, modify the RTL for the register to
1343          show the hard register, and mark that register live.  */
1344       if (reg_renumber[regno] >= 0)
1345         {
1346           REGNO (regno_reg_rtx[regno]) = reg_renumber[regno];
1347           mark_home_live (regno);
1348         }
1349     }
1350 }
1351 \f
1352 /* Record a conflict between register REGNO
1353    and everything currently live.
1354    REGNO must not be a pseudo reg that was allocated
1355    by local_alloc; such numbers must be translated through
1356    reg_renumber before calling here.  */
1357
1358 static void
1359 record_one_conflict (int regno)
1360 {
1361   int j;
1362
1363   if (regno < FIRST_PSEUDO_REGISTER)
1364     /* When a hard register becomes live,
1365        record conflicts with live pseudo regs.  */
1366     EXECUTE_IF_SET_IN_ALLOCNO_SET (allocnos_live, j,
1367       {
1368         SET_HARD_REG_BIT (allocno[j].hard_reg_conflicts, regno);
1369       });
1370   else
1371     /* When a pseudo-register becomes live,
1372        record conflicts first with hard regs,
1373        then with other pseudo regs.  */
1374     {
1375       int ialloc = reg_allocno[regno];
1376       int ialloc_prod = ialloc * allocno_row_words;
1377
1378       IOR_HARD_REG_SET (allocno[ialloc].hard_reg_conflicts, hard_regs_live);
1379       for (j = allocno_row_words - 1; j >= 0; j--)
1380         {
1381 #if 0
1382           int k;
1383           for (k = 0; k < n_no_conflict_pairs; k++)
1384             if (! ((j == no_conflict_pairs[k].allocno1
1385                     && ialloc == no_conflict_pairs[k].allocno2)
1386                    ||
1387                    (j == no_conflict_pairs[k].allocno2
1388                     && ialloc == no_conflict_pairs[k].allocno1)))
1389 #endif /* 0 */
1390               conflicts[ialloc_prod + j] |= allocnos_live[j];
1391         }
1392     }
1393 }
1394
1395 /* Record all allocnos currently live as conflicting
1396    with all hard regs currently live.
1397
1398    ALLOCNO_VEC is a vector of LEN allocnos, all allocnos that
1399    are currently live.  Their bits are also flagged in allocnos_live.  */
1400
1401 static void
1402 record_conflicts (int *allocno_vec, int len)
1403 {
1404   while (--len >= 0)
1405     IOR_HARD_REG_SET (allocno[allocno_vec[len]].hard_reg_conflicts,
1406                       hard_regs_live);
1407 }
1408
1409 /* If CONFLICTP (i, j) is true, make sure CONFLICTP (j, i) is also true.  */
1410 static void
1411 mirror_conflicts (void)
1412 {
1413   int i, j;
1414   int rw = allocno_row_words;
1415   int rwb = rw * INT_BITS;
1416   INT_TYPE *p = conflicts;
1417   INT_TYPE *q0 = conflicts, *q1, *q2;
1418   unsigned INT_TYPE mask;
1419
1420   for (i = max_allocno - 1, mask = 1; i >= 0; i--, mask <<= 1)
1421     {
1422       if (! mask)
1423         {
1424           mask = 1;
1425           q0++;
1426         }
1427       for (j = allocno_row_words - 1, q1 = q0; j >= 0; j--, q1 += rwb)
1428         {
1429           unsigned INT_TYPE word;
1430
1431           for (word = (unsigned INT_TYPE) *p++, q2 = q1; word;
1432                word >>= 1, q2 += rw)
1433             {
1434               if (word & 1)
1435                 *q2 |= mask;
1436             }
1437         }
1438     }
1439 }
1440 \f
1441 /* Handle the case where REG is set by the insn being scanned,
1442    during the forward scan to accumulate conflicts.
1443    Store a 1 in regs_live or allocnos_live for this register, record how many
1444    consecutive hardware registers it actually needs,
1445    and record a conflict with all other registers already live.
1446
1447    Note that even if REG does not remain alive after this insn,
1448    we must mark it here as live, to ensure a conflict between
1449    REG and any other regs set in this insn that really do live.
1450    This is because those other regs could be considered after this.
1451
1452    REG might actually be something other than a register;
1453    if so, we do nothing.
1454
1455    SETTER is 0 if this register was modified by an auto-increment (i.e.,
1456    a REG_INC note was found for it).  */
1457
1458 static void
1459 mark_reg_store (rtx reg, rtx setter, void *data ATTRIBUTE_UNUSED)
1460 {
1461   int regno;
1462
1463   if (GET_CODE (reg) == SUBREG)
1464     reg = SUBREG_REG (reg);
1465
1466   if (GET_CODE (reg) != REG)
1467     return;
1468
1469   regs_set[n_regs_set++] = reg;
1470
1471   if (setter && GET_CODE (setter) != CLOBBER)
1472     set_preference (reg, SET_SRC (setter));
1473
1474   regno = REGNO (reg);
1475
1476   /* Either this is one of the max_allocno pseudo regs not allocated,
1477      or it is or has a hardware reg.  First handle the pseudo-regs.  */
1478   if (regno >= FIRST_PSEUDO_REGISTER)
1479     {
1480       if (reg_allocno[regno] >= 0)
1481         {
1482           SET_ALLOCNO_LIVE (reg_allocno[regno]);
1483           record_one_conflict (regno);
1484         }
1485     }
1486
1487   if (reg_renumber[regno] >= 0)
1488     regno = reg_renumber[regno];
1489
1490   /* Handle hardware regs (and pseudos allocated to hard regs).  */
1491   if (regno < FIRST_PSEUDO_REGISTER && ! fixed_regs[regno])
1492     {
1493       int last = regno + HARD_REGNO_NREGS (regno, GET_MODE (reg));
1494       while (regno < last)
1495         {
1496           record_one_conflict (regno);
1497           SET_HARD_REG_BIT (hard_regs_live, regno);
1498           regno++;
1499         }
1500     }
1501 }
1502 \f
1503 /* Like mark_reg_set except notice just CLOBBERs; ignore SETs.  */
1504
1505 static void
1506 mark_reg_clobber (rtx reg, rtx setter, void *data ATTRIBUTE_UNUSED)
1507 {
1508   if (GET_CODE (setter) == CLOBBER)
1509     mark_reg_store (reg, setter, data);
1510 }
1511
1512 /* Record that REG has conflicts with all the regs currently live.
1513    Do not mark REG itself as live.  */
1514
1515 static void
1516 mark_reg_conflicts (rtx reg)
1517 {
1518   int regno;
1519
1520   if (GET_CODE (reg) == SUBREG)
1521     reg = SUBREG_REG (reg);
1522
1523   if (GET_CODE (reg) != REG)
1524     return;
1525
1526   regno = REGNO (reg);
1527
1528   /* Either this is one of the max_allocno pseudo regs not allocated,
1529      or it is or has a hardware reg.  First handle the pseudo-regs.  */
1530   if (regno >= FIRST_PSEUDO_REGISTER)
1531     {
1532       if (reg_allocno[regno] >= 0)
1533         record_one_conflict (regno);
1534     }
1535
1536   if (reg_renumber[regno] >= 0)
1537     regno = reg_renumber[regno];
1538
1539   /* Handle hardware regs (and pseudos allocated to hard regs).  */
1540   if (regno < FIRST_PSEUDO_REGISTER && ! fixed_regs[regno])
1541     {
1542       int last = regno + HARD_REGNO_NREGS (regno, GET_MODE (reg));
1543       while (regno < last)
1544         {
1545           record_one_conflict (regno);
1546           regno++;
1547         }
1548     }
1549 }
1550 \f
1551 /* Mark REG as being dead (following the insn being scanned now).
1552    Store a 0 in regs_live or allocnos_live for this register.  */
1553
1554 static void
1555 mark_reg_death (rtx reg)
1556 {
1557   int regno = REGNO (reg);
1558
1559   /* Either this is one of the max_allocno pseudo regs not allocated,
1560      or it is a hardware reg.  First handle the pseudo-regs.  */
1561   if (regno >= FIRST_PSEUDO_REGISTER)
1562     {
1563       if (reg_allocno[regno] >= 0)
1564         CLEAR_ALLOCNO_LIVE (reg_allocno[regno]);
1565     }
1566
1567   /* For pseudo reg, see if it has been assigned a hardware reg.  */
1568   if (reg_renumber[regno] >= 0)
1569     regno = reg_renumber[regno];
1570
1571   /* Handle hardware regs (and pseudos allocated to hard regs).  */
1572   if (regno < FIRST_PSEUDO_REGISTER && ! fixed_regs[regno])
1573     {
1574       /* Pseudo regs already assigned hardware regs are treated
1575          almost the same as explicit hardware regs.  */
1576       int last = regno + HARD_REGNO_NREGS (regno, GET_MODE (reg));
1577       while (regno < last)
1578         {
1579           CLEAR_HARD_REG_BIT (hard_regs_live, regno);
1580           regno++;
1581         }
1582     }
1583 }
1584
1585 /* Mark hard reg REGNO as currently live, assuming machine mode MODE
1586    for the value stored in it.  MODE determines how many consecutive
1587    registers are actually in use.  Do not record conflicts;
1588    it is assumed that the caller will do that.  */
1589
1590 static void
1591 mark_reg_live_nc (int regno, enum machine_mode mode)
1592 {
1593   int last = regno + HARD_REGNO_NREGS (regno, mode);
1594   while (regno < last)
1595     {
1596       SET_HARD_REG_BIT (hard_regs_live, regno);
1597       regno++;
1598     }
1599 }
1600 \f
1601 /* Try to set a preference for an allocno to a hard register.
1602    We are passed DEST and SRC which are the operands of a SET.  It is known
1603    that SRC is a register.  If SRC or the first operand of SRC is a register,
1604    try to set a preference.  If one of the two is a hard register and the other
1605    is a pseudo-register, mark the preference.
1606
1607    Note that we are not as aggressive as local-alloc in trying to tie a
1608    pseudo-register to a hard register.  */
1609
1610 static void
1611 set_preference (rtx dest, rtx src)
1612 {
1613   unsigned int src_regno, dest_regno;
1614   /* Amount to add to the hard regno for SRC, or subtract from that for DEST,
1615      to compensate for subregs in SRC or DEST.  */
1616   int offset = 0;
1617   unsigned int i;
1618   int copy = 1;
1619
1620   if (GET_RTX_FORMAT (GET_CODE (src))[0] == 'e')
1621     src = XEXP (src, 0), copy = 0;
1622
1623   /* Get the reg number for both SRC and DEST.
1624      If neither is a reg, give up.  */
1625
1626   if (GET_CODE (src) == REG)
1627     src_regno = REGNO (src);
1628   else if (GET_CODE (src) == SUBREG && GET_CODE (SUBREG_REG (src)) == REG)
1629     {
1630       src_regno = REGNO (SUBREG_REG (src));
1631
1632       if (REGNO (SUBREG_REG (src)) < FIRST_PSEUDO_REGISTER)
1633         offset += subreg_regno_offset (REGNO (SUBREG_REG (src)),
1634                                        GET_MODE (SUBREG_REG (src)),
1635                                        SUBREG_BYTE (src),
1636                                        GET_MODE (src));
1637       else
1638         offset += (SUBREG_BYTE (src)
1639                    / REGMODE_NATURAL_SIZE (GET_MODE (src)));
1640     }
1641   else
1642     return;
1643
1644   if (GET_CODE (dest) == REG)
1645     dest_regno = REGNO (dest);
1646   else if (GET_CODE (dest) == SUBREG && GET_CODE (SUBREG_REG (dest)) == REG)
1647     {
1648       dest_regno = REGNO (SUBREG_REG (dest));
1649
1650       if (REGNO (SUBREG_REG (dest)) < FIRST_PSEUDO_REGISTER)
1651         offset -= subreg_regno_offset (REGNO (SUBREG_REG (dest)),
1652                                        GET_MODE (SUBREG_REG (dest)),
1653                                        SUBREG_BYTE (dest),
1654                                        GET_MODE (dest));
1655       else
1656         offset -= (SUBREG_BYTE (dest)
1657                    / REGMODE_NATURAL_SIZE (GET_MODE (dest)));
1658     }
1659   else
1660     return;
1661
1662   /* Convert either or both to hard reg numbers.  */
1663
1664   if (reg_renumber[src_regno] >= 0)
1665     src_regno = reg_renumber[src_regno];
1666
1667   if (reg_renumber[dest_regno] >= 0)
1668     dest_regno = reg_renumber[dest_regno];
1669
1670   /* Now if one is a hard reg and the other is a global pseudo
1671      then give the other a preference.  */
1672
1673   if (dest_regno < FIRST_PSEUDO_REGISTER && src_regno >= FIRST_PSEUDO_REGISTER
1674       && reg_allocno[src_regno] >= 0)
1675     {
1676       dest_regno -= offset;
1677       if (dest_regno < FIRST_PSEUDO_REGISTER)
1678         {
1679           if (copy)
1680             SET_REGBIT (hard_reg_copy_preferences,
1681                         reg_allocno[src_regno], dest_regno);
1682
1683           SET_REGBIT (hard_reg_preferences,
1684                       reg_allocno[src_regno], dest_regno);
1685           for (i = dest_regno;
1686                i < dest_regno + HARD_REGNO_NREGS (dest_regno, GET_MODE (dest));
1687                i++)
1688             SET_REGBIT (hard_reg_full_preferences, reg_allocno[src_regno], i);
1689         }
1690     }
1691
1692   if (src_regno < FIRST_PSEUDO_REGISTER && dest_regno >= FIRST_PSEUDO_REGISTER
1693       && reg_allocno[dest_regno] >= 0)
1694     {
1695       src_regno += offset;
1696       if (src_regno < FIRST_PSEUDO_REGISTER)
1697         {
1698           if (copy)
1699             SET_REGBIT (hard_reg_copy_preferences,
1700                         reg_allocno[dest_regno], src_regno);
1701
1702           SET_REGBIT (hard_reg_preferences,
1703                       reg_allocno[dest_regno], src_regno);
1704           for (i = src_regno;
1705                i < src_regno + HARD_REGNO_NREGS (src_regno, GET_MODE (src));
1706                i++)
1707             SET_REGBIT (hard_reg_full_preferences, reg_allocno[dest_regno], i);
1708         }
1709     }
1710 }
1711 \f
1712 /* Indicate that hard register number FROM was eliminated and replaced with
1713    an offset from hard register number TO.  The status of hard registers live
1714    at the start of a basic block is updated by replacing a use of FROM with
1715    a use of TO.  */
1716
1717 void
1718 mark_elimination (int from, int to)
1719 {
1720   basic_block bb;
1721
1722   FOR_EACH_BB (bb)
1723     {
1724       regset r = bb->global_live_at_start;
1725       if (REGNO_REG_SET_P (r, from))
1726         {
1727           CLEAR_REGNO_REG_SET (r, from);
1728           SET_REGNO_REG_SET (r, to);
1729         }
1730     }
1731 }
1732 \f
1733 /* Used for communication between the following functions.  Holds the
1734    current life information.  */
1735 static regset live_relevant_regs;
1736
1737 /* Record in live_relevant_regs and REGS_SET that register REG became live.
1738    This is called via note_stores.  */
1739 static void
1740 reg_becomes_live (rtx reg, rtx setter ATTRIBUTE_UNUSED, void *regs_set)
1741 {
1742   int regno;
1743
1744   if (GET_CODE (reg) == SUBREG)
1745     reg = SUBREG_REG (reg);
1746
1747   if (GET_CODE (reg) != REG)
1748     return;
1749
1750   regno = REGNO (reg);
1751   if (regno < FIRST_PSEUDO_REGISTER)
1752     {
1753       int nregs = HARD_REGNO_NREGS (regno, GET_MODE (reg));
1754       while (nregs-- > 0)
1755         {
1756           SET_REGNO_REG_SET (live_relevant_regs, regno);
1757           if (! fixed_regs[regno])
1758             SET_REGNO_REG_SET ((regset) regs_set, regno);
1759           regno++;
1760         }
1761     }
1762   else if (reg_renumber[regno] >= 0)
1763     {
1764       SET_REGNO_REG_SET (live_relevant_regs, regno);
1765       SET_REGNO_REG_SET ((regset) regs_set, regno);
1766     }
1767 }
1768
1769 /* Record in live_relevant_regs that register REGNO died.  */
1770 static void
1771 reg_dies (int regno, enum machine_mode mode, struct insn_chain *chain)
1772 {
1773   if (regno < FIRST_PSEUDO_REGISTER)
1774     {
1775       int nregs = HARD_REGNO_NREGS (regno, mode);
1776       while (nregs-- > 0)
1777         {
1778           CLEAR_REGNO_REG_SET (live_relevant_regs, regno);
1779           if (! fixed_regs[regno])
1780             SET_REGNO_REG_SET (&chain->dead_or_set, regno);
1781           regno++;
1782         }
1783     }
1784   else
1785     {
1786       CLEAR_REGNO_REG_SET (live_relevant_regs, regno);
1787       if (reg_renumber[regno] >= 0)
1788         SET_REGNO_REG_SET (&chain->dead_or_set, regno);
1789     }
1790 }
1791
1792 /* Walk the insns of the current function and build reload_insn_chain,
1793    and record register life information.  */
1794 void
1795 build_insn_chain (rtx first)
1796 {
1797   struct insn_chain **p = &reload_insn_chain;
1798   struct insn_chain *prev = 0;
1799   basic_block b = ENTRY_BLOCK_PTR->next_bb;
1800   regset_head live_relevant_regs_head;
1801
1802   live_relevant_regs = INITIALIZE_REG_SET (live_relevant_regs_head);
1803
1804   for (; first; first = NEXT_INSN (first))
1805     {
1806       struct insn_chain *c;
1807
1808       if (first == BB_HEAD (b))
1809         {
1810           int i;
1811
1812           CLEAR_REG_SET (live_relevant_regs);
1813
1814           EXECUTE_IF_SET_IN_BITMAP
1815             (b->global_live_at_start, 0, i,
1816              {
1817                if (i < FIRST_PSEUDO_REGISTER
1818                    ? ! TEST_HARD_REG_BIT (eliminable_regset, i)
1819                    : reg_renumber[i] >= 0)
1820                  SET_REGNO_REG_SET (live_relevant_regs, i);
1821              });
1822         }
1823
1824       if (GET_CODE (first) != NOTE && GET_CODE (first) != BARRIER)
1825         {
1826           c = new_insn_chain ();
1827           c->prev = prev;
1828           prev = c;
1829           *p = c;
1830           p = &c->next;
1831           c->insn = first;
1832           c->block = b->index;
1833
1834           if (INSN_P (first))
1835             {
1836               rtx link;
1837
1838               /* Mark the death of everything that dies in this instruction.  */
1839
1840               for (link = REG_NOTES (first); link; link = XEXP (link, 1))
1841                 if (REG_NOTE_KIND (link) == REG_DEAD
1842                     && GET_CODE (XEXP (link, 0)) == REG)
1843                   reg_dies (REGNO (XEXP (link, 0)), GET_MODE (XEXP (link, 0)),
1844                             c);
1845
1846               COPY_REG_SET (&c->live_throughout, live_relevant_regs);
1847
1848               /* Mark everything born in this instruction as live.  */
1849
1850               note_stores (PATTERN (first), reg_becomes_live,
1851                            &c->dead_or_set);
1852             }
1853           else
1854             COPY_REG_SET (&c->live_throughout, live_relevant_regs);
1855
1856           if (INSN_P (first))
1857             {
1858               rtx link;
1859
1860               /* Mark anything that is set in this insn and then unused as dying.  */
1861
1862               for (link = REG_NOTES (first); link; link = XEXP (link, 1))
1863                 if (REG_NOTE_KIND (link) == REG_UNUSED
1864                     && GET_CODE (XEXP (link, 0)) == REG)
1865                   reg_dies (REGNO (XEXP (link, 0)), GET_MODE (XEXP (link, 0)),
1866                             c);
1867             }
1868         }
1869
1870       if (first == BB_END (b))
1871         b = b->next_bb;
1872
1873       /* Stop after we pass the end of the last basic block.  Verify that
1874          no real insns are after the end of the last basic block.
1875
1876          We may want to reorganize the loop somewhat since this test should
1877          always be the right exit test.  Allow an ADDR_VEC or ADDR_DIF_VEC if
1878          the previous real insn is a JUMP_INSN.  */
1879       if (b == EXIT_BLOCK_PTR)
1880         {
1881           for (first = NEXT_INSN (first) ; first; first = NEXT_INSN (first))
1882             if (INSN_P (first)
1883                 && GET_CODE (PATTERN (first)) != USE
1884                 && ! ((GET_CODE (PATTERN (first)) == ADDR_VEC
1885                        || GET_CODE (PATTERN (first)) == ADDR_DIFF_VEC)
1886                       && prev_real_insn (first) != 0
1887                       && GET_CODE (prev_real_insn (first)) == JUMP_INSN))
1888               abort ();
1889           break;
1890         }
1891     }
1892   FREE_REG_SET (live_relevant_regs);
1893   *p = 0;
1894 }
1895 \f
1896 /* Print debugging trace information if -dg switch is given,
1897    showing the information on which the allocation decisions are based.  */
1898
1899 static void
1900 dump_conflicts (FILE *file)
1901 {
1902   int i;
1903   int has_preferences;
1904   int nregs;
1905   nregs = 0;
1906   for (i = 0; i < max_allocno; i++)
1907     {
1908       if (reg_renumber[allocno[allocno_order[i]].reg] >= 0)
1909         continue;
1910       nregs++;
1911     }
1912   fprintf (file, ";; %d regs to allocate:", nregs);
1913   for (i = 0; i < max_allocno; i++)
1914     {
1915       int j;
1916       if (reg_renumber[allocno[allocno_order[i]].reg] >= 0)
1917         continue;
1918       fprintf (file, " %d", allocno[allocno_order[i]].reg);
1919       for (j = 0; j < max_regno; j++)
1920         if (reg_allocno[j] == allocno_order[i]
1921             && j != allocno[allocno_order[i]].reg)
1922           fprintf (file, "+%d", j);
1923       if (allocno[allocno_order[i]].size != 1)
1924         fprintf (file, " (%d)", allocno[allocno_order[i]].size);
1925     }
1926   fprintf (file, "\n");
1927
1928   for (i = 0; i < max_allocno; i++)
1929     {
1930       int j;
1931       fprintf (file, ";; %d conflicts:", allocno[i].reg);
1932       for (j = 0; j < max_allocno; j++)
1933         if (CONFLICTP (j, i))
1934           fprintf (file, " %d", allocno[j].reg);
1935       for (j = 0; j < FIRST_PSEUDO_REGISTER; j++)
1936         if (TEST_HARD_REG_BIT (allocno[i].hard_reg_conflicts, j))
1937           fprintf (file, " %d", j);
1938       fprintf (file, "\n");
1939
1940       has_preferences = 0;
1941       for (j = 0; j < FIRST_PSEUDO_REGISTER; j++)
1942         if (TEST_HARD_REG_BIT (allocno[i].hard_reg_preferences, j))
1943           has_preferences = 1;
1944
1945       if (! has_preferences)
1946         continue;
1947       fprintf (file, ";; %d preferences:", allocno[i].reg);
1948       for (j = 0; j < FIRST_PSEUDO_REGISTER; j++)
1949         if (TEST_HARD_REG_BIT (allocno[i].hard_reg_preferences, j))
1950           fprintf (file, " %d", j);
1951       fprintf (file, "\n");
1952     }
1953   fprintf (file, "\n");
1954 }
1955
1956 void
1957 dump_global_regs (FILE *file)
1958 {
1959   int i, j;
1960
1961   fprintf (file, ";; Register dispositions:\n");
1962   for (i = FIRST_PSEUDO_REGISTER, j = 0; i < max_regno; i++)
1963     if (reg_renumber[i] >= 0)
1964       {
1965         fprintf (file, "%d in %d  ", i, reg_renumber[i]);
1966         if (++j % 6 == 0)
1967           fprintf (file, "\n");
1968       }
1969
1970   fprintf (file, "\n\n;; Hard regs used: ");
1971   for (i = 0; i < FIRST_PSEUDO_REGISTER; i++)
1972     if (regs_ever_live[i])
1973       fprintf (file, " %d", i);
1974   fprintf (file, "\n\n");
1975 }