OSDN Git Service

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