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