OSDN Git Service

PR tree-optimization/36630
[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, 2003, 2004, 2005, 2006, 2007
4    Free Software Foundation, Inc.
5
6 This file is part of GCC.
7
8 GCC is free software; you can redistribute it and/or modify it under
9 the terms of the GNU General Public License as published by the Free
10 Software Foundation; either version 3, or (at your option) any later
11 version.
12
13 GCC is distributed in the hope that it will be useful, but WITHOUT ANY
14 WARRANTY; without even the implied warranty of MERCHANTABILITY or
15 FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
16 for more details.
17
18 You should have received a copy of the GNU General Public License
19 along with GCC; see the file COPYING3.  If not see
20 <http://www.gnu.org/licenses/>.  */
21
22
23 #include "config.h"
24 #include "system.h"
25 #include "coretypes.h"
26 #include "tm.h"
27 #include "machmode.h"
28 #include "hard-reg-set.h"
29 #include "rtl.h"
30 #include "tm_p.h"
31 #include "flags.h"
32 #include "regs.h"
33 #include "function.h"
34 #include "insn-config.h"
35 #include "recog.h"
36 #include "reload.h"
37 #include "output.h"
38 #include "toplev.h"
39 #include "tree-pass.h"
40 #include "timevar.h"
41 #include "df.h"
42 #include "vecprim.h"
43 #include "dbgcnt.h"
44 #include "ra.h"
45
46 /* This pass of the compiler performs global register allocation.
47    It assigns hard register numbers to all the pseudo registers
48    that were not handled in local_alloc.  Assignments are recorded
49    in the vector reg_renumber, not by changing the rtl code.
50    (Such changes are made by final).  The entry point is
51    the function global_alloc.
52
53    After allocation is complete, the reload pass is run as a subroutine
54    of this pass, so that when a pseudo reg loses its hard reg due to
55    spilling it is possible to make a second attempt to find a hard
56    reg for it.  The reload pass is independent in other respects
57    and it is run even when stupid register allocation is in use.
58
59    1. Assign allocation-numbers (allocnos) to the pseudo-registers
60    still needing allocations and to the pseudo-registers currently
61    allocated by local-alloc which may be spilled by reload.
62    Set up tables reg_allocno and allocno_reg to map
63    reg numbers to allocnos and vice versa.
64    max_allocno gets the number of allocnos in use.
65
66    2. Allocate a max_allocno by max_allocno compressed triangular conflict
67    bit matrix (a triangular bit matrix with portions removed for which we
68    can guarantee there are no conflicts, example: two local pseudos that
69    live in different basic blocks) and clear it.  This is called "conflict".
70    Note that for triangular bit matrices, there are two possible equations
71    for computing the bit number for two allocnos: LOW and HIGH (LOW < HIGH):
72
73      1) BITNUM = f(HIGH) + LOW, where
74        f(HIGH) = (HIGH * (HIGH - 1)) / 2
75
76      2) BITNUM = f(LOW) + HIGH, where
77        f(LOW) = LOW * (max_allocno - LOW) + (LOW * (LOW - 1)) / 2 - LOW - 1
78
79    We use the second (and less common) equation as this gives us better
80    cache locality for local allocnos that are live within the same basic
81    block.  Also note that f(HIGH) and f(LOW) can be precalculated for all
82    values of HIGH and LOW, so all that is necessary to compute the bit
83    number for two allocnos LOW and HIGH is a load followed by an addition.
84
85    Allocate a max_allocno by FIRST_PSEUDO_REGISTER conflict matrix for
86    conflicts between allocnos and explicit hard register use (which
87    includes use of pseudo-registers allocated by local_alloc).  This
88    is the hard_reg_conflicts inside each allocno.
89
90    3. For each basic block, walk backward through the block, recording
91    which pseudo-registers and which hardware registers are live.
92    Build the conflict matrix between the pseudo-registers and another of
93    pseudo-registers versus hardware registers.
94
95    4. For each basic block, walk backward through the block, recording
96    the preferred hardware registers for each pseudo-register.
97
98    5. Sort a table of the allocnos into order of desirability of the variables.
99
100    6. Allocate the variables in that order; each if possible into
101    a preferred register, else into another register.  */
102 \f
103 /* A vector of the integers from 0 to max_allocno-1,
104    sorted in the order of first-to-be-allocated first.  */
105
106 static int *allocno_order;
107
108 /* Set of registers that global-alloc isn't supposed to use.  */
109
110 static HARD_REG_SET no_global_alloc_regs;
111
112 /* Set of registers used so far.  */
113
114 static HARD_REG_SET regs_used_so_far;
115
116 /* Number of refs to each hard reg, as used by local alloc.
117    It is zero for a reg that contains global pseudos or is explicitly used.  */
118
119 static int local_reg_n_refs[FIRST_PSEUDO_REGISTER];
120
121 /* Frequency of uses of given hard reg.  */
122 static int local_reg_freq[FIRST_PSEUDO_REGISTER];
123
124 /* Guess at live length of each hard reg, as used by local alloc.
125    This is actually the sum of the live lengths of the specific regs.  */
126
127 static int local_reg_live_length[FIRST_PSEUDO_REGISTER];
128
129 /* Set to 1 a bit in a vector TABLE of HARD_REG_SETs, for vector
130    element I, and hard register number J.  */
131
132 #define SET_REGBIT(TABLE, I, J)  SET_HARD_REG_BIT (allocno[I].TABLE, J)
133
134 /* Return true if *LOC contains an asm.  */
135
136 static int
137 insn_contains_asm_1 (rtx *loc, void *data ATTRIBUTE_UNUSED)
138 {
139   if ( !*loc)
140     return 0;
141   if (GET_CODE (*loc) == ASM_OPERANDS)
142     return 1;
143   return 0;
144 }
145
146
147 /* Return true if INSN contains an ASM.  */
148
149 static int
150 insn_contains_asm (rtx insn)
151 {
152   return for_each_rtx (&insn, insn_contains_asm_1, NULL);
153 }
154
155
156 static void
157 compute_regs_asm_clobbered (char *regs_asm_clobbered)
158 {
159   basic_block bb;
160
161   memset (regs_asm_clobbered, 0, sizeof (char) * FIRST_PSEUDO_REGISTER);
162   
163   FOR_EACH_BB (bb)
164     {
165       rtx insn;
166       FOR_BB_INSNS_REVERSE (bb, insn)
167         {
168           struct df_ref **def_rec;
169           if (insn_contains_asm (insn))
170             for (def_rec = DF_INSN_DEFS (insn); *def_rec; def_rec++)
171               {
172                 struct df_ref *def = *def_rec;
173                 unsigned int dregno = DF_REF_REGNO (def);
174                 if (dregno < FIRST_PSEUDO_REGISTER)
175                   {
176                     unsigned int i;
177                     enum machine_mode mode = GET_MODE (DF_REF_REAL_REG (def));
178                     unsigned int end = dregno 
179                       + hard_regno_nregs[dregno][mode] - 1;
180                     for (i = dregno; i <= end; ++i)
181                       regs_asm_clobbered[i] = 1;
182                   }
183               }
184         }
185     }
186 }
187
188
189 /* All registers that can be eliminated.  */
190
191 HARD_REG_SET eliminable_regset;
192
193 static int regno_compare (const void *, const void *);
194 static int allocno_compare (const void *, const void *);
195 static void expand_preferences (void);
196 static void prune_preferences (void);
197 static void set_preferences (void);
198 static void find_reg (int, HARD_REG_SET, int, int, int);
199 static void dump_conflicts (FILE *);
200 \f
201
202 /* Look through the list of eliminable registers.  Set ELIM_SET to the
203    set of registers which may be eliminated.  Set NO_GLOBAL_SET to the
204    set of registers which may not be used across blocks.
205
206    This will normally be called with ELIM_SET as the file static
207    variable eliminable_regset, and NO_GLOBAL_SET as the file static
208    variable NO_GLOBAL_ALLOC_REGS.
209
210    It also initializes global flag frame_pointer_needed.  */
211
212 static void
213 compute_regsets (HARD_REG_SET *elim_set, 
214                  HARD_REG_SET *no_global_set)
215 {
216
217 /* Like regs_ever_live, but 1 if a reg is set or clobbered from an asm.
218    Unlike regs_ever_live, elements of this array corresponding to
219    eliminable regs like the frame pointer are set if an asm sets them.  */
220   char *regs_asm_clobbered = XALLOCAVEC (char, FIRST_PSEUDO_REGISTER);
221
222 #ifdef ELIMINABLE_REGS
223   static const struct {const int from, to; } eliminables[] = ELIMINABLE_REGS;
224   size_t i;
225 #endif
226
227   /* FIXME: If EXIT_IGNORE_STACK is set, we will not save and restore
228      sp for alloca.  So we can't eliminate the frame pointer in that
229      case.  At some point, we should improve this by emitting the
230      sp-adjusting insns for this case.  */
231   int need_fp
232     = (! flag_omit_frame_pointer
233        || (cfun->calls_alloca && EXIT_IGNORE_STACK)
234        || crtl->accesses_prior_frames
235        || crtl->stack_realign_needed
236        || FRAME_POINTER_REQUIRED);
237
238   frame_pointer_needed = need_fp;
239
240   max_regno = max_reg_num ();
241   compact_blocks ();
242
243   max_allocno = 0;
244
245   /* A machine may have certain hard registers that
246      are safe to use only within a basic block.  */
247
248   CLEAR_HARD_REG_SET (*no_global_set);
249   CLEAR_HARD_REG_SET (*elim_set);
250
251   compute_regs_asm_clobbered (regs_asm_clobbered);
252   /* Build the regset of all eliminable registers and show we can't use those
253      that we already know won't be eliminated.  */
254 #ifdef ELIMINABLE_REGS
255   for (i = 0; i < ARRAY_SIZE (eliminables); i++)
256     {
257       bool cannot_elim
258         = (! CAN_ELIMINATE (eliminables[i].from, eliminables[i].to)
259            || (eliminables[i].to == STACK_POINTER_REGNUM
260                && need_fp 
261                && (! SUPPORTS_STACK_ALIGNMENT
262                    || ! stack_realign_fp)));
263
264       if (!regs_asm_clobbered[eliminables[i].from])
265         {
266           SET_HARD_REG_BIT (*elim_set, eliminables[i].from);
267
268           if (cannot_elim)
269             SET_HARD_REG_BIT (*no_global_set, eliminables[i].from);
270         }
271       else if (cannot_elim)
272         error ("%s cannot be used in asm here",
273                reg_names[eliminables[i].from]);
274       else
275         df_set_regs_ever_live (eliminables[i].from, true);
276     }
277 #if FRAME_POINTER_REGNUM != HARD_FRAME_POINTER_REGNUM
278   if (!regs_asm_clobbered[HARD_FRAME_POINTER_REGNUM])
279     {
280       SET_HARD_REG_BIT (*elim_set, HARD_FRAME_POINTER_REGNUM);
281       if (need_fp)
282         SET_HARD_REG_BIT (*no_global_set, HARD_FRAME_POINTER_REGNUM);
283     }
284   else if (need_fp)
285     error ("%s cannot be used in asm here",
286            reg_names[HARD_FRAME_POINTER_REGNUM]);
287   else
288     df_set_regs_ever_live (HARD_FRAME_POINTER_REGNUM, true);
289 #endif
290
291 #else
292   if (!regs_asm_clobbered[FRAME_POINTER_REGNUM])
293     {
294       SET_HARD_REG_BIT (*elim_set, FRAME_POINTER_REGNUM);
295       if (need_fp)
296         SET_HARD_REG_BIT (*no_global_set, FRAME_POINTER_REGNUM);
297     }
298   else if (need_fp)
299     error ("%s cannot be used in asm here", reg_names[FRAME_POINTER_REGNUM]);
300   else
301     df_set_regs_ever_live (FRAME_POINTER_REGNUM, true);
302 #endif
303 }
304
305 /* Perform allocation of pseudo-registers not allocated by local_alloc.
306
307    Return value is nonzero if reload failed
308    and we must not do any more for this function.  */
309
310 static int
311 global_alloc (void)
312 {
313   int retval;
314   size_t i;
315   int max_blk;
316   int *num_allocnos_per_blk;
317
318   compute_regsets (&eliminable_regset, &no_global_alloc_regs);
319
320   /* Track which registers have already been used.  Start with registers
321      explicitly in the rtl, then registers allocated by local register
322      allocation.  */
323
324   CLEAR_HARD_REG_SET (regs_used_so_far);
325 #ifdef LEAF_REGISTERS
326   /* If we are doing the leaf function optimization, and this is a leaf
327      function, it means that the registers that take work to save are those
328      that need a register window.  So prefer the ones that can be used in
329      a leaf function.  */
330   {
331     const char *cheap_regs;
332     const char *const leaf_regs = LEAF_REGISTERS;
333
334     if (only_leaf_regs_used () && leaf_function_p ())
335       cheap_regs = leaf_regs;
336     else
337       cheap_regs = call_used_regs;
338     for (i = 0; i < FIRST_PSEUDO_REGISTER; i++)
339       if (df_regs_ever_live_p (i) || cheap_regs[i])
340         SET_HARD_REG_BIT (regs_used_so_far, i);
341   }
342 #else
343   /* We consider registers that do not have to be saved over calls as if
344      they were already used since there is no cost in using them.  */
345   for (i = 0; i < FIRST_PSEUDO_REGISTER; i++)
346     if (df_regs_ever_live_p (i) || call_used_regs[i])
347       SET_HARD_REG_BIT (regs_used_so_far, i);
348 #endif
349
350   for (i = FIRST_PSEUDO_REGISTER; i < (size_t) max_regno; i++)
351     if (reg_renumber[i] >= 0)
352       SET_HARD_REG_BIT (regs_used_so_far, reg_renumber[i]);
353
354   /* Establish mappings from register number to allocation number
355      and vice versa.  In the process, count the allocnos.  */
356
357   reg_allocno = XNEWVEC (int, max_regno);
358
359   /* Initially fill the reg_allocno array with regno's...  */
360   max_blk = 0;
361   max_allocno = 0;
362   for (i = FIRST_PSEUDO_REGISTER; i < (size_t) max_regno; i++)
363     /* Note that reg_live_length[i] < 0 indicates a "constant" reg
364        that we are supposed to refrain from putting in a hard reg.
365        -2 means do make an allocno but don't allocate it.  */
366     if (REG_N_REFS (i) != 0 && REG_LIVE_LENGTH (i) != -1
367         /* Don't allocate pseudos that cross calls,
368            if this function receives a nonlocal goto.  */
369         && (! cfun->has_nonlocal_label
370             || REG_N_CALLS_CROSSED (i) == 0))
371       {
372         int blk = regno_basic_block (i);
373         reg_allocno[max_allocno++] = i;
374         if (blk > max_blk)
375           max_blk = blk;
376         gcc_assert (REG_LIVE_LENGTH (i));
377       }
378
379   allocno = XCNEWVEC (struct allocno, max_allocno);
380   partial_bitnum = XNEWVEC (HOST_WIDE_INT, max_allocno);
381   num_allocnos_per_blk = XCNEWVEC (int, max_blk + 1);
382
383   /* ...so we can sort them in the order we want them to receive
384      their allocnos.  */
385   qsort (reg_allocno, max_allocno, sizeof (int), regno_compare);
386
387   for (i = 0; i < (size_t) max_allocno; i++)
388     {
389       int regno = reg_allocno[i];
390       int blk = regno_basic_block (regno);
391       num_allocnos_per_blk[blk]++;
392       allocno[i].reg = regno;
393       allocno[i].size = PSEUDO_REGNO_SIZE (regno);
394       allocno[i].calls_crossed += REG_N_CALLS_CROSSED (regno);
395       allocno[i].freq_calls_crossed += REG_FREQ_CALLS_CROSSED (regno);
396       allocno[i].throwing_calls_crossed
397         += REG_N_THROWING_CALLS_CROSSED (regno);
398       allocno[i].n_refs += REG_N_REFS (regno);
399       allocno[i].freq += REG_FREQ (regno);
400       if (allocno[i].live_length < REG_LIVE_LENGTH (regno))
401         allocno[i].live_length = REG_LIVE_LENGTH (regno);
402     }
403
404   /* The "global" block must contain all allocnos.  */
405   num_allocnos_per_blk[0] = max_allocno;
406
407   /* Now reinitialize the reg_allocno array in terms of the
408      optimized regno to allocno mapping we created above.  */
409   for (i = 0; i < (size_t) max_regno; i++)
410     reg_allocno[i] = -1;
411
412   max_bitnum = 0;
413   for (i = 0; i < (size_t) max_allocno; i++)
414     {
415       int regno = allocno[i].reg;
416       int blk = regno_basic_block (regno);
417       int row_size = --num_allocnos_per_blk[blk];
418       reg_allocno[regno] = (int) i;
419       partial_bitnum[i] = (row_size > 0) ? max_bitnum - ((int) i + 1) : -1;
420       max_bitnum += row_size;
421     }
422
423 #ifdef ENABLE_CHECKING
424   gcc_assert (max_bitnum <=
425               (((HOST_WIDE_INT) max_allocno *
426                 ((HOST_WIDE_INT) max_allocno - 1)) / 2));
427 #endif
428
429   if (dump_file)
430     {
431       HOST_WIDE_INT num_bits, num_bytes, actual_bytes;
432
433       fprintf (dump_file, "## max_blk:     %d\n", max_blk);
434       fprintf (dump_file, "## max_regno:   %d\n", max_regno);
435       fprintf (dump_file, "## max_allocno: %d\n", max_allocno);
436
437       num_bits = max_bitnum;
438       num_bytes = CEIL (num_bits, 8);
439       actual_bytes = num_bytes;
440       fprintf (dump_file, "## Compressed triangular bitmatrix size: ");
441       fprintf (dump_file, HOST_WIDE_INT_PRINT_DEC " bits, ", num_bits);
442       fprintf (dump_file, HOST_WIDE_INT_PRINT_DEC " bytes\n", num_bytes);
443
444       num_bits = ((HOST_WIDE_INT) max_allocno *
445                   ((HOST_WIDE_INT) max_allocno - 1)) / 2;
446       num_bytes = CEIL (num_bits, 8);
447       fprintf (dump_file, "## Standard triangular bitmatrix size:   ");
448       fprintf (dump_file, HOST_WIDE_INT_PRINT_DEC " bits, ", num_bits);
449       fprintf (dump_file, HOST_WIDE_INT_PRINT_DEC " bytes [%.2f%%]\n",
450                num_bytes, 100.0 * ((double) actual_bytes / (double) num_bytes));
451
452       num_bits = (HOST_WIDE_INT) max_allocno * (HOST_WIDE_INT) max_allocno;
453       num_bytes = CEIL (num_bits, 8);
454       fprintf (dump_file, "## Square bitmatrix size:                ");
455       fprintf (dump_file, HOST_WIDE_INT_PRINT_DEC " bits, ", num_bits);
456       fprintf (dump_file, HOST_WIDE_INT_PRINT_DEC " bytes [%.2f%%]\n",
457                num_bytes, 100.0 * ((double) actual_bytes / (double) num_bytes));
458     }
459
460   /* Calculate amount of usage of each hard reg by pseudos
461      allocated by local-alloc.  This is to see if we want to
462      override it.  */
463   memset (local_reg_live_length, 0, sizeof local_reg_live_length);
464   memset (local_reg_n_refs, 0, sizeof local_reg_n_refs);
465   memset (local_reg_freq, 0, sizeof local_reg_freq);
466   for (i = FIRST_PSEUDO_REGISTER; i < (size_t) max_regno; i++)
467     if (reg_renumber[i] >= 0)
468       {
469         int regno = reg_renumber[i];
470         int endregno = end_hard_regno (PSEUDO_REGNO_MODE (i), regno);
471         int j;
472
473         for (j = regno; j < endregno; j++)
474           {
475             local_reg_n_refs[j] += REG_N_REFS (i);
476             local_reg_freq[j] += REG_FREQ (i);
477             local_reg_live_length[j] += REG_LIVE_LENGTH (i);
478           }
479       }
480
481   /* We can't override local-alloc for a reg used not just by local-alloc.  */
482   for (i = 0; i < FIRST_PSEUDO_REGISTER; i++)
483     if (df_regs_ever_live_p (i))
484       local_reg_n_refs[i] = 0, local_reg_freq[i] = 0;
485
486   if (dump_file)
487     {
488       for (i = FIRST_PSEUDO_REGISTER; i < (size_t) max_regno; i++)
489         {
490           fprintf (dump_file, "%d REG_N_REFS=%d, REG_FREQ=%d, REG_LIVE_LENGTH=%d\n", 
491                    (int)i, REG_N_REFS (i), REG_FREQ (i), REG_LIVE_LENGTH (i));
492         }
493       fprintf (dump_file, "regs_ever_live =");
494       for (i = 0; i < FIRST_PSEUDO_REGISTER; i++)
495         if (df_regs_ever_live_p (i))
496           fprintf (dump_file, " %d", (int)i);
497       fprintf (dump_file, "\n");
498     }
499
500   conflicts = NULL;
501   adjacency = NULL;
502   adjacency_pool = NULL;
503
504   /* If there is work to be done (at least one reg to allocate),
505      perform global conflict analysis and allocate the regs.  */
506
507   if (max_allocno > 0)
508     {
509       /* We used to use alloca here, but the size of what it would try to
510          allocate would occasionally cause it to exceed the stack limit and
511          cause unpredictable core dumps.  Some examples were > 2Mb in size.  */
512       conflicts = XCNEWVEC (HOST_WIDEST_FAST_INT,
513                             CEIL(max_bitnum, HOST_BITS_PER_WIDEST_FAST_INT));
514
515       adjacency = XCNEWVEC (adjacency_t *, max_allocno);
516       adjacency_pool = create_alloc_pool ("global_alloc adjacency list pool",
517                                           sizeof (adjacency_t), 1024);
518
519       /* Scan all the insns and compute the conflicts among allocnos
520          and between allocnos and hard regs.  */
521
522       global_conflicts ();
523
524       /* There is just too much going on in the register allocators to
525          keep things up to date.  At the end we have to rescan anyway
526          because things change when the reload_completed flag is set.  
527          So we just turn off scanning and we will rescan by hand.  
528
529          However, we needed to do the rescanning before this point to
530          get the new insns scanned inserted by local_alloc scanned for
531          global_conflicts.  */
532       df_set_flags (DF_NO_INSN_RESCAN);
533
534       /* Eliminate conflicts between pseudos and eliminable registers.  If
535          the register is not eliminated, the pseudo won't really be able to
536          live in the eliminable register, so the conflict doesn't matter.
537          If we do eliminate the register, the conflict will no longer exist.
538          So in either case, we can ignore the conflict.  Likewise for
539          preferences.  */
540
541       set_preferences ();
542
543       for (i = 0; i < (size_t) max_allocno; i++)
544         {
545           AND_COMPL_HARD_REG_SET (allocno[i].hard_reg_conflicts,
546                                   eliminable_regset);
547           AND_COMPL_HARD_REG_SET (allocno[i].hard_reg_copy_preferences,
548                                   eliminable_regset);
549           AND_COMPL_HARD_REG_SET (allocno[i].hard_reg_preferences,
550                                   eliminable_regset);
551         }
552
553       /* Try to expand the preferences by merging them between allocnos.  */
554
555       expand_preferences ();
556
557       /* Determine the order to allocate the remaining pseudo registers.  */
558
559       allocno_order = XNEWVEC (int, max_allocno);
560       for (i = 0; i < (size_t) max_allocno; i++)
561         allocno_order[i] = i;
562
563       /* Default the size to 1, since allocno_compare uses it to divide by.
564          Also convert allocno_live_length of zero to -1.  A length of zero
565          can occur when all the registers for that allocno have reg_live_length
566          equal to -2.  In this case, we want to make an allocno, but not
567          allocate it.  So avoid the divide-by-zero and set it to a low
568          priority.  */
569
570       for (i = 0; i < (size_t) max_allocno; i++)
571         {
572           if (allocno[i].size == 0)
573             allocno[i].size = 1;
574           if (allocno[i].live_length == 0)
575             allocno[i].live_length = -1;
576         }
577
578       qsort (allocno_order, max_allocno, sizeof (int), allocno_compare);
579
580       prune_preferences ();
581
582       if (dump_file)
583         dump_conflicts (dump_file);
584
585       /* Try allocating them, one by one, in that order,
586          except for parameters marked with reg_live_length[regno] == -2.  */
587
588       for (i = 0; i < (size_t) max_allocno; i++)
589         if (reg_renumber[allocno[allocno_order[i]].reg] < 0
590             && REG_LIVE_LENGTH (allocno[allocno_order[i]].reg) >= 0)
591           {
592             if (!dbg_cnt (global_alloc_at_reg))
593               break;
594             /* If we have more than one register class,
595                first try allocating in the class that is cheapest
596                for this pseudo-reg.  If that fails, try any reg.  */
597             if (N_REG_CLASSES > 1)
598               {
599                 find_reg (allocno_order[i], 0, 0, 0, 0);
600                 if (reg_renumber[allocno[allocno_order[i]].reg] >= 0)
601                   continue;
602               }
603             if (reg_alternate_class (allocno[allocno_order[i]].reg) != NO_REGS)
604               find_reg (allocno_order[i], 0, 1, 0, 0);
605           }
606
607       free (allocno_order);
608       free (conflicts);
609     }
610
611   /* Do the reloads now while the allocno data still exists, so that we can
612      try to assign new hard regs to any pseudo regs that are spilled.  */
613
614 #if 0 /* We need to eliminate regs even if there is no rtl code,
615          for the sake of debugging information.  */
616   if (n_basic_blocks > NUM_FIXED_BLOCKS)
617 #endif
618     {
619       build_insn_chain ();
620       retval = reload (get_insns (), 1);
621     }
622
623   /* Clean up.  */
624   free (reg_allocno);
625   free (num_allocnos_per_blk);
626   free (partial_bitnum);
627   free (allocno);
628   if (adjacency != NULL)
629     {
630       free_alloc_pool (adjacency_pool);
631       free (adjacency);
632     }
633
634   return retval;
635 }
636
637 /* Sort predicate for ordering the regnos.  We want the regno to allocno
638    mapping to have the property that all "global" regnos (ie, regnos that
639    are referenced in more than one basic block) have smaller allocno values
640    than "local" regnos (ie, regnos referenced in only one basic block).
641    In addition, for two basic blocks "i" and "j" with i < j, all regnos
642    local to basic block i should have smaller allocno values than regnos
643    local to basic block j.
644    Returns -1 (1) if *v1p should be allocated before (after) *v2p.  */
645
646 static int
647 regno_compare (const void *v1p, const void *v2p)
648 {
649   int regno1 = *(const int *)v1p;
650   int regno2 = *(const int *)v2p;
651   int blk1 = REG_BASIC_BLOCK (regno1);
652   int blk2 = REG_BASIC_BLOCK (regno2);
653
654   /* Prefer lower numbered basic blocks.  Note that global and unknown
655      blocks have negative values, giving them high precedence.  */
656   if (blk1 - blk2)
657     return blk1 - blk2;
658
659   /* If both regs are referenced from the same block, sort by regno.  */
660   return regno1 - regno2;
661 }
662
663 /* Sort predicate for ordering the allocnos.
664    Returns -1 (1) if *v1 should be allocated before (after) *v2.  */
665
666 static int
667 allocno_compare (const void *v1p, const void *v2p)
668 {
669   int v1 = *(const int *)v1p, v2 = *(const int *)v2p;
670   /* Note that the quotient will never be bigger than
671      the value of floor_log2 times the maximum number of
672      times a register can occur in one insn (surely less than 100)
673      weighted by the frequency (maximally REG_FREQ_MAX).
674      Multiplying this by 10000/REG_FREQ_MAX can't overflow.  */
675   int pri1
676     = (((double) (floor_log2 (allocno[v1].n_refs) * allocno[v1].freq)
677         / allocno[v1].live_length)
678        * (10000 / REG_FREQ_MAX) * allocno[v1].size);
679   int pri2
680     = (((double) (floor_log2 (allocno[v2].n_refs) * allocno[v2].freq)
681         / allocno[v2].live_length)
682        * (10000 / REG_FREQ_MAX) * allocno[v2].size);
683   if (pri2 - pri1)
684     return pri2 - pri1;
685
686   /* If regs are equally good, sort by allocno,
687      so that the results of qsort leave nothing to chance.  */
688   return v1 - v2;
689 }
690 \f
691 /* Expand the preference information by looking for cases where one allocno
692    dies in an insn that sets an allocno.  If those two allocnos don't conflict,
693    merge any preferences between those allocnos.  */
694
695 static void
696 expand_preferences (void)
697 {
698   rtx insn;
699   rtx link;
700   rtx set;
701
702   /* We only try to handle the most common cases here.  Most of the cases
703      where this wins are reg-reg copies.  */
704
705   for (insn = get_insns (); insn; insn = NEXT_INSN (insn))
706     if (INSN_P (insn)
707         && (set = single_set (insn)) != 0
708         && REG_P (SET_DEST (set))
709         && reg_allocno[REGNO (SET_DEST (set))] >= 0)
710       for (link = REG_NOTES (insn); link; link = XEXP (link, 1))
711         if (REG_NOTE_KIND (link) == REG_DEAD
712             && REG_P (XEXP (link, 0))
713             && reg_allocno[REGNO (XEXP (link, 0))] >= 0
714             && ! conflict_p (reg_allocno[REGNO (SET_DEST (set))],
715                              reg_allocno[REGNO (XEXP (link, 0))]))
716           {
717             int a1 = reg_allocno[REGNO (SET_DEST (set))];
718             int a2 = reg_allocno[REGNO (XEXP (link, 0))];
719
720             if (XEXP (link, 0) == SET_SRC (set))
721               {
722                 IOR_HARD_REG_SET (allocno[a1].hard_reg_copy_preferences,
723                                   allocno[a2].hard_reg_copy_preferences);
724                 IOR_HARD_REG_SET (allocno[a2].hard_reg_copy_preferences,
725                                   allocno[a1].hard_reg_copy_preferences);
726               }
727
728             IOR_HARD_REG_SET (allocno[a1].hard_reg_preferences,
729                               allocno[a2].hard_reg_preferences);
730             IOR_HARD_REG_SET (allocno[a2].hard_reg_preferences,
731                               allocno[a1].hard_reg_preferences);
732             IOR_HARD_REG_SET (allocno[a1].hard_reg_full_preferences,
733                               allocno[a2].hard_reg_full_preferences);
734             IOR_HARD_REG_SET (allocno[a2].hard_reg_full_preferences,
735                               allocno[a1].hard_reg_full_preferences);
736           }
737 }
738
739
740 /* Try to set a preference for an allocno to a hard register.
741    We are passed DEST and SRC which are the operands of a SET.  It is known
742    that SRC is a register.  If SRC or the first operand of SRC is a register,
743    try to set a preference.  If one of the two is a hard register and the other
744    is a pseudo-register, mark the preference.
745
746    Note that we are not as aggressive as local-alloc in trying to tie a
747    pseudo-register to a hard register.  */
748
749 static void
750 set_preference (rtx dest, rtx src)
751 {
752   unsigned int src_regno, dest_regno, end_regno;
753   /* Amount to add to the hard regno for SRC, or subtract from that for DEST,
754      to compensate for subregs in SRC or DEST.  */
755   int offset = 0;
756   unsigned int i;
757   int copy = 1;
758
759   if (GET_RTX_FORMAT (GET_CODE (src))[0] == 'e')
760     src = XEXP (src, 0), copy = 0;
761
762   /* Get the reg number for both SRC and DEST.
763      If neither is a reg, give up.  */
764
765   if (REG_P (src))
766     src_regno = REGNO (src);
767   else if (GET_CODE (src) == SUBREG && REG_P (SUBREG_REG (src)))
768     {
769       src_regno = REGNO (SUBREG_REG (src));
770
771       if (REGNO (SUBREG_REG (src)) < FIRST_PSEUDO_REGISTER)
772         offset += subreg_regno_offset (REGNO (SUBREG_REG (src)),
773                                        GET_MODE (SUBREG_REG (src)),
774                                        SUBREG_BYTE (src),
775                                        GET_MODE (src));
776       else
777         offset += (SUBREG_BYTE (src)
778                    / REGMODE_NATURAL_SIZE (GET_MODE (src)));
779     }
780   else
781     return;
782
783   if (REG_P (dest))
784     dest_regno = REGNO (dest);
785   else if (GET_CODE (dest) == SUBREG && REG_P (SUBREG_REG (dest)))
786     {
787       dest_regno = REGNO (SUBREG_REG (dest));
788
789       if (REGNO (SUBREG_REG (dest)) < FIRST_PSEUDO_REGISTER)
790         offset -= subreg_regno_offset (REGNO (SUBREG_REG (dest)),
791                                        GET_MODE (SUBREG_REG (dest)),
792                                        SUBREG_BYTE (dest),
793                                        GET_MODE (dest));
794       else
795         offset -= (SUBREG_BYTE (dest)
796                    / REGMODE_NATURAL_SIZE (GET_MODE (dest)));
797     }
798   else
799     return;
800
801   /* Convert either or both to hard reg numbers.  */
802
803   if (reg_renumber[src_regno] >= 0)
804     src_regno = reg_renumber[src_regno];
805
806   if (reg_renumber[dest_regno] >= 0)
807     dest_regno = reg_renumber[dest_regno];
808
809   /* Now if one is a hard reg and the other is a global pseudo
810      then give the other a preference.  */
811
812   if (dest_regno < FIRST_PSEUDO_REGISTER && src_regno >= FIRST_PSEUDO_REGISTER
813       && reg_allocno[src_regno] >= 0)
814     {
815       dest_regno -= offset;
816       if (dest_regno < FIRST_PSEUDO_REGISTER)
817         {
818           if (copy)
819             SET_REGBIT (hard_reg_copy_preferences,
820                         reg_allocno[src_regno], dest_regno);
821
822           SET_REGBIT (hard_reg_preferences,
823                       reg_allocno[src_regno], dest_regno);
824           end_regno = end_hard_regno (GET_MODE (dest), dest_regno);
825           for (i = dest_regno; i < end_regno; i++)
826             SET_REGBIT (hard_reg_full_preferences, reg_allocno[src_regno], i);
827         }
828     }
829
830   if (src_regno < FIRST_PSEUDO_REGISTER && dest_regno >= FIRST_PSEUDO_REGISTER
831       && reg_allocno[dest_regno] >= 0)
832     {
833       src_regno += offset;
834       if (src_regno < FIRST_PSEUDO_REGISTER)
835         {
836           if (copy)
837             SET_REGBIT (hard_reg_copy_preferences,
838                         reg_allocno[dest_regno], src_regno);
839
840           SET_REGBIT (hard_reg_preferences,
841                       reg_allocno[dest_regno], src_regno);
842           end_regno = end_hard_regno (GET_MODE (src), src_regno);
843           for (i = src_regno; i < end_regno; i++)
844             SET_REGBIT (hard_reg_full_preferences, reg_allocno[dest_regno], i);
845         }
846     }
847 }
848 \f
849 /* Helper function for set_preferences.  */
850 static void
851 set_preferences_1 (rtx reg, const_rtx setter, void *data ATTRIBUTE_UNUSED)
852 {
853   if (GET_CODE (reg) == SUBREG)
854     reg = SUBREG_REG (reg);
855
856   if (!REG_P (reg))
857     return;
858
859   gcc_assert (setter);
860   if (GET_CODE (setter) != CLOBBER)
861     set_preference (reg, SET_SRC (setter));
862 }
863 \f
864 /* Scan all of the insns and initialize the preferences.  */
865
866 static void 
867 set_preferences (void)
868 {
869   basic_block bb;
870   rtx insn;
871   FOR_EACH_BB (bb)
872     FOR_BB_INSNS_REVERSE (bb, insn)
873       {
874         if (!INSN_P (insn))
875           continue;     
876
877         note_stores (PATTERN (insn), set_preferences_1, NULL);
878       }
879 }
880
881
882 \f
883 /* Prune the preferences for global registers to exclude registers that cannot
884    be used.
885
886    Compute `regs_someone_prefers', which is a bitmask of the hard registers
887    that are preferred by conflicting registers of lower priority.  If possible,
888    we will avoid using these registers.  */
889
890 static void
891 prune_preferences (void)
892 {
893   int i;
894   int num;
895   int *allocno_to_order = XNEWVEC (int, max_allocno);
896
897   /* Scan least most important to most important.
898      For each allocno, remove from preferences registers that cannot be used,
899      either because of conflicts or register type.  Then compute all registers
900      preferred by each lower-priority register that conflicts.  */
901
902   for (i = max_allocno - 1; i >= 0; i--)
903     {
904       HARD_REG_SET temp;
905
906       num = allocno_order[i];
907       allocno_to_order[num] = i;
908       COPY_HARD_REG_SET (temp, allocno[num].hard_reg_conflicts);
909
910       if (allocno[num].calls_crossed == 0)
911         IOR_HARD_REG_SET (temp, fixed_reg_set);
912       else
913         IOR_HARD_REG_SET (temp, call_used_reg_set);
914
915       IOR_COMPL_HARD_REG_SET
916         (temp,
917          reg_class_contents[(int) reg_preferred_class (allocno[num].reg)]);
918
919       AND_COMPL_HARD_REG_SET (allocno[num].hard_reg_preferences, temp);
920       AND_COMPL_HARD_REG_SET (allocno[num].hard_reg_copy_preferences, temp);
921       AND_COMPL_HARD_REG_SET (allocno[num].hard_reg_full_preferences, temp);
922     }
923
924   for (i = max_allocno - 1; i >= 0; i--)
925     {
926       /* Merge in the preferences of lower-priority registers (they have
927          already been pruned).  If we also prefer some of those registers,
928          don't exclude them unless we are of a smaller size (in which case
929          we want to give the lower-priority allocno the first chance for
930          these registers).  */
931       HARD_REG_SET temp, temp2;
932       int allocno2;
933       adjacency_iter ai;
934
935       num = allocno_order[i];
936
937       CLEAR_HARD_REG_SET (temp);
938       CLEAR_HARD_REG_SET (temp2);
939
940       FOR_EACH_CONFLICT (num, allocno2, ai)
941         {
942           if (allocno_to_order[allocno2] > i)
943             {
944               if (allocno[allocno2].size <= allocno[num].size)
945                 IOR_HARD_REG_SET (temp,
946                                   allocno[allocno2].hard_reg_full_preferences);
947               else
948                 IOR_HARD_REG_SET (temp2,
949                                   allocno[allocno2].hard_reg_full_preferences);
950             }
951         }
952
953       AND_COMPL_HARD_REG_SET (temp, allocno[num].hard_reg_full_preferences);
954       IOR_HARD_REG_SET (temp, temp2);
955       COPY_HARD_REG_SET (allocno[num].regs_someone_prefers, temp);
956     }
957   free (allocno_to_order);
958 }
959 \f
960 /* Assign a hard register to allocno NUM; look for one that is the beginning
961    of a long enough stretch of hard regs none of which conflicts with ALLOCNO.
962    The registers marked in PREFREGS are tried first.
963
964    LOSERS, if nonzero, is a HARD_REG_SET indicating registers that cannot
965    be used for this allocation.
966
967    If ALT_REGS_P is zero, consider only the preferred class of ALLOCNO's reg.
968    Otherwise ignore that preferred class and use the alternate class.
969
970    If ACCEPT_CALL_CLOBBERED is nonzero, accept a call-clobbered hard reg that
971    will have to be saved and restored at calls.
972
973    RETRYING is nonzero if this is called from retry_global_alloc.
974
975    If we find one, record it in reg_renumber.
976    If not, do nothing.  */
977
978 static void
979 find_reg (int num, HARD_REG_SET losers, int alt_regs_p, int accept_call_clobbered, int retrying)
980 {
981   int i, best_reg, pass;
982   HARD_REG_SET used, used1, used2;
983
984   enum reg_class rclass = (alt_regs_p
985                           ? reg_alternate_class (allocno[num].reg)
986                           : reg_preferred_class (allocno[num].reg));
987   enum machine_mode mode = PSEUDO_REGNO_MODE (allocno[num].reg);
988
989   if (accept_call_clobbered)
990     COPY_HARD_REG_SET (used1, call_fixed_reg_set);
991   else if (allocno[num].calls_crossed == 0)
992     COPY_HARD_REG_SET (used1, fixed_reg_set);
993   else
994     COPY_HARD_REG_SET (used1, call_used_reg_set);
995
996   /* Some registers should not be allocated in global-alloc.  */
997   IOR_HARD_REG_SET (used1, no_global_alloc_regs);
998   if (losers)
999     IOR_HARD_REG_SET (used1, losers);
1000
1001   IOR_COMPL_HARD_REG_SET (used1, reg_class_contents[(int) rclass]);
1002
1003 #ifdef EH_RETURN_DATA_REGNO
1004   if (allocno[num].no_eh_reg)
1005     {
1006       unsigned int j;
1007       for (j = 0; ; ++j)
1008         {
1009           unsigned int regno = EH_RETURN_DATA_REGNO (j);
1010           if (regno == INVALID_REGNUM)
1011             break;
1012           SET_HARD_REG_BIT (used1, regno);
1013         }
1014     }
1015 #endif
1016
1017   COPY_HARD_REG_SET (used2, used1);
1018
1019   IOR_HARD_REG_SET (used1, allocno[num].hard_reg_conflicts);
1020
1021 #ifdef CANNOT_CHANGE_MODE_CLASS
1022   cannot_change_mode_set_regs (&used1, mode, allocno[num].reg);
1023 #endif
1024
1025   /* Try each hard reg to see if it fits.  Do this in two passes.
1026      In the first pass, skip registers that are preferred by some other pseudo
1027      to give it a better chance of getting one of those registers.  Only if
1028      we can't get a register when excluding those do we take one of them.
1029      However, we never allocate a register for the first time in pass 0.  */
1030
1031   COPY_HARD_REG_SET (used, used1);
1032   IOR_COMPL_HARD_REG_SET (used, regs_used_so_far);
1033   IOR_HARD_REG_SET (used, allocno[num].regs_someone_prefers);
1034
1035   best_reg = -1;
1036   for (i = FIRST_PSEUDO_REGISTER, pass = 0;
1037        pass <= 1 && i >= FIRST_PSEUDO_REGISTER;
1038        pass++)
1039     {
1040       if (pass == 1)
1041         COPY_HARD_REG_SET (used, used1);
1042       for (i = 0; i < FIRST_PSEUDO_REGISTER; i++)
1043         {
1044 #ifdef REG_ALLOC_ORDER
1045           int regno = reg_alloc_order[i];
1046 #else
1047           int regno = i;
1048 #endif
1049           if (! TEST_HARD_REG_BIT (used, regno)
1050               && HARD_REGNO_MODE_OK (regno, mode)
1051               && (allocno[num].calls_crossed == 0
1052                   || accept_call_clobbered
1053                   || ! HARD_REGNO_CALL_PART_CLOBBERED (regno, mode)))
1054             {
1055               int j;
1056               int lim = end_hard_regno (mode, regno);
1057               for (j = regno + 1;
1058                    (j < lim
1059                     && ! TEST_HARD_REG_BIT (used, j));
1060                    j++);
1061               if (j == lim)
1062                 {
1063                   best_reg = regno;
1064                   break;
1065                 }
1066 #ifndef REG_ALLOC_ORDER
1067               i = j;                    /* Skip starting points we know will lose */
1068 #endif
1069             }
1070           }
1071       }
1072
1073   /* See if there is a preferred register with the same class as the register
1074      we allocated above.  Making this restriction prevents register
1075      preferencing from creating worse register allocation.
1076
1077      Remove from the preferred registers and conflicting registers.  Note that
1078      additional conflicts may have been added after `prune_preferences' was
1079      called.
1080
1081      First do this for those register with copy preferences, then all
1082      preferred registers.  */
1083
1084   AND_COMPL_HARD_REG_SET (allocno[num].hard_reg_copy_preferences, used);
1085   if (!hard_reg_set_empty_p (allocno[num].hard_reg_copy_preferences)
1086       && best_reg >= 0)
1087     {
1088       for (i = 0; i < FIRST_PSEUDO_REGISTER; i++)
1089         if (TEST_HARD_REG_BIT (allocno[num].hard_reg_copy_preferences, i)
1090             && HARD_REGNO_MODE_OK (i, mode)
1091             && (allocno[num].calls_crossed == 0
1092                 || accept_call_clobbered
1093                 || ! HARD_REGNO_CALL_PART_CLOBBERED (i, mode))
1094             && (REGNO_REG_CLASS (i) == REGNO_REG_CLASS (best_reg)
1095                 || reg_class_subset_p (REGNO_REG_CLASS (i),
1096                                        REGNO_REG_CLASS (best_reg))
1097                 || reg_class_subset_p (REGNO_REG_CLASS (best_reg),
1098                                        REGNO_REG_CLASS (i))))
1099             {
1100               int j;
1101               int lim = end_hard_regno (mode, i);
1102               for (j = i + 1;
1103                    (j < lim
1104                     && ! TEST_HARD_REG_BIT (used, j)
1105                     && (REGNO_REG_CLASS (j)
1106                         == REGNO_REG_CLASS (best_reg + (j - i))
1107                         || reg_class_subset_p (REGNO_REG_CLASS (j),
1108                                                REGNO_REG_CLASS (best_reg + (j - i)))
1109                         || reg_class_subset_p (REGNO_REG_CLASS (best_reg + (j - i)),
1110                                                REGNO_REG_CLASS (j))));
1111                    j++);
1112               if (j == lim)
1113                 {
1114                   best_reg = i;
1115                   goto no_prefs;
1116                 }
1117             }
1118     }
1119
1120   AND_COMPL_HARD_REG_SET (allocno[num].hard_reg_preferences, used);
1121   if (!hard_reg_set_empty_p (allocno[num].hard_reg_preferences)
1122       && best_reg >= 0)
1123     {
1124       for (i = 0; i < FIRST_PSEUDO_REGISTER; i++)
1125         if (TEST_HARD_REG_BIT (allocno[num].hard_reg_preferences, i)
1126             && HARD_REGNO_MODE_OK (i, mode)
1127             && (allocno[num].calls_crossed == 0
1128                 || accept_call_clobbered
1129                 || ! HARD_REGNO_CALL_PART_CLOBBERED (i, mode))
1130             && (REGNO_REG_CLASS (i) == REGNO_REG_CLASS (best_reg)
1131                 || reg_class_subset_p (REGNO_REG_CLASS (i),
1132                                        REGNO_REG_CLASS (best_reg))
1133                 || reg_class_subset_p (REGNO_REG_CLASS (best_reg),
1134                                        REGNO_REG_CLASS (i))))
1135             {
1136               int j;
1137               int lim = end_hard_regno (mode, i);
1138               for (j = i + 1;
1139                    (j < lim
1140                     && ! TEST_HARD_REG_BIT (used, j)
1141                     && (REGNO_REG_CLASS (j)
1142                         == REGNO_REG_CLASS (best_reg + (j - i))
1143                         || reg_class_subset_p (REGNO_REG_CLASS (j),
1144                                                REGNO_REG_CLASS (best_reg + (j - i)))
1145                         || reg_class_subset_p (REGNO_REG_CLASS (best_reg + (j - i)),
1146                                                REGNO_REG_CLASS (j))));
1147                    j++);
1148               if (j == lim)
1149                 {
1150                   best_reg = i;
1151                   break;
1152                 }
1153             }
1154     }
1155  no_prefs:
1156
1157   /* If we haven't succeeded yet, try with caller-saves.
1158      We need not check to see if the current function has nonlocal
1159      labels because we don't put any pseudos that are live over calls in
1160      registers in that case.  */
1161
1162   if (flag_caller_saves && best_reg < 0)
1163     {
1164       /* Did not find a register.  If it would be profitable to
1165          allocate a call-clobbered register and save and restore it
1166          around calls, do that.  Don't do this if it crosses any calls
1167          that might throw.  */
1168       if (! accept_call_clobbered
1169           && allocno[num].calls_crossed != 0
1170           && allocno[num].throwing_calls_crossed == 0
1171           && CALLER_SAVE_PROFITABLE (optimize_function_for_size_p (cfun) ? allocno[num].n_refs : allocno[num].freq,
1172                                      optimize_function_for_size_p (cfun) ? allocno[num].calls_crossed
1173                                      : allocno[num].freq_calls_crossed))
1174         {
1175           HARD_REG_SET new_losers;
1176           if (! losers)
1177             CLEAR_HARD_REG_SET (new_losers);
1178           else
1179             COPY_HARD_REG_SET (new_losers, losers);
1180
1181           IOR_HARD_REG_SET(new_losers, losing_caller_save_reg_set);
1182           find_reg (num, new_losers, alt_regs_p, 1, retrying);
1183           if (reg_renumber[allocno[num].reg] >= 0)
1184             {
1185               caller_save_needed = 1;
1186               return;
1187             }
1188         }
1189     }
1190
1191   /* If we haven't succeeded yet,
1192      see if some hard reg that conflicts with us
1193      was utilized poorly by local-alloc.
1194      If so, kick out the regs that were put there by local-alloc
1195      so we can use it instead.  */
1196   if (best_reg < 0 && !retrying
1197       /* Let's not bother with multi-reg allocnos.  */
1198       && allocno[num].size == 1
1199       && REG_BASIC_BLOCK (allocno[num].reg) == REG_BLOCK_GLOBAL)
1200     {
1201       /* Count from the end, to find the least-used ones first.  */
1202       for (i = FIRST_PSEUDO_REGISTER - 1; i >= 0; i--)
1203         {
1204 #ifdef REG_ALLOC_ORDER
1205           int regno = reg_alloc_order[i];
1206 #else
1207           int regno = i;
1208 #endif
1209
1210           if (local_reg_n_refs[regno] != 0
1211               /* Don't use a reg no good for this pseudo.  */
1212               && ! TEST_HARD_REG_BIT (used2, regno)
1213               && HARD_REGNO_MODE_OK (regno, mode)
1214               /* The code below assumes that we need only a single
1215                  register, but the check of allocno[num].size above
1216                  was not enough.  Sometimes we need more than one
1217                  register for a single-word value.  */
1218               && hard_regno_nregs[regno][mode] == 1
1219               && (allocno[num].calls_crossed == 0
1220                   || accept_call_clobbered
1221                   || ! HARD_REGNO_CALL_PART_CLOBBERED (regno, mode))
1222 #ifdef CANNOT_CHANGE_MODE_CLASS
1223               && ! invalid_mode_change_p (regno, REGNO_REG_CLASS (regno),
1224                                           mode)
1225 #endif
1226 #ifdef STACK_REGS
1227              && (!allocno[num].no_stack_reg
1228                  || regno < FIRST_STACK_REG || regno > LAST_STACK_REG)
1229 #endif
1230               )
1231             {
1232               /* We explicitly evaluate the divide results into temporary
1233                  variables so as to avoid excess precision problems that occur
1234                  on an i386-unknown-sysv4.2 (unixware) host.  */
1235
1236               double tmp1 = ((double) local_reg_freq[regno] * local_reg_n_refs[regno]
1237                             / local_reg_live_length[regno]);
1238               double tmp2 = ((double) allocno[num].freq * allocno[num].n_refs
1239                              / allocno[num].live_length);
1240
1241               if (tmp1 < tmp2)
1242                 {
1243                   /* Hard reg REGNO was used less in total by local regs
1244                      than it would be used by this one allocno!  */
1245                   int k;
1246                   if (dump_file)
1247                     {
1248                       fprintf (dump_file, "Regno %d better for global %d, ",
1249                                regno, allocno[num].reg);
1250                       fprintf (dump_file, "fr:%d, ll:%d, nr:%d ",
1251                                allocno[num].freq, allocno[num].live_length,
1252                                allocno[num].n_refs);
1253                       fprintf (dump_file, "(was: fr:%d, ll:%d, nr:%d)\n",
1254                                local_reg_freq[regno],
1255                                local_reg_live_length[regno],
1256                                local_reg_n_refs[regno]);
1257                     }
1258
1259                   for (k = 0; k < max_regno; k++)
1260                     if (reg_renumber[k] >= 0)
1261                       {
1262                         int r = reg_renumber[k];
1263                         int endregno
1264                           = end_hard_regno (PSEUDO_REGNO_MODE (k), r);
1265
1266                         if (regno >= r && regno < endregno)
1267                           {
1268                             if (dump_file)
1269                               fprintf (dump_file,
1270                                        "Local Reg %d now on stack\n", k);
1271                             reg_renumber[k] = -1;
1272                           }
1273                       }
1274
1275                   best_reg = regno;
1276                   break;
1277                 }
1278             }
1279         }
1280     }
1281
1282   /* Did we find a register?  */
1283
1284   if (best_reg >= 0)
1285     {
1286       int lim, j;
1287       HARD_REG_SET this_reg;
1288       adjacency_iter ai;
1289
1290       /* Yes.  Record it as the hard register of this pseudo-reg.  */
1291       reg_renumber[allocno[num].reg] = best_reg;
1292
1293       /* Make a set of the hard regs being allocated.  */
1294       CLEAR_HARD_REG_SET (this_reg);
1295       lim = end_hard_regno (mode, best_reg);
1296       for (j = best_reg; j < lim; j++)
1297         {
1298           SET_HARD_REG_BIT (this_reg, j);
1299           SET_HARD_REG_BIT (regs_used_so_far, j);
1300           /* This is no longer a reg used just by local regs.  */
1301           local_reg_n_refs[j] = 0;
1302           local_reg_freq[j] = 0;
1303         }
1304       /* For each other pseudo-reg conflicting with this one,
1305          mark it as conflicting with the hard regs this one occupies.  */
1306       FOR_EACH_CONFLICT (num, j, ai)
1307         {
1308           IOR_HARD_REG_SET (allocno[j].hard_reg_conflicts, this_reg);
1309         }
1310     }
1311 }
1312 \f
1313 /* Called from `reload' to look for a hard reg to put pseudo reg REGNO in.
1314    Perhaps it had previously seemed not worth a hard reg,
1315    or perhaps its old hard reg has been commandeered for reloads.
1316    FORBIDDEN_REGS indicates certain hard regs that may not be used, even if
1317    they do not appear to be allocated.
1318    If FORBIDDEN_REGS is zero, no regs are forbidden.  */
1319
1320 void
1321 retry_global_alloc (int regno, HARD_REG_SET forbidden_regs)
1322 {
1323   int alloc_no = reg_allocno[regno];
1324   if (alloc_no >= 0)
1325     {
1326       /* If we have more than one register class,
1327          first try allocating in the class that is cheapest
1328          for this pseudo-reg.  If that fails, try any reg.  */
1329       if (N_REG_CLASSES > 1)
1330         find_reg (alloc_no, forbidden_regs, 0, 0, 1);
1331       if (reg_renumber[regno] < 0
1332           && reg_alternate_class (regno) != NO_REGS)
1333         find_reg (alloc_no, forbidden_regs, 1, 0, 1);
1334
1335       /* If we found a register, modify the RTL for the register to
1336          show the hard register, and mark that register live.  */
1337       if (reg_renumber[regno] >= 0)
1338         {
1339           SET_REGNO (regno_reg_rtx[regno], reg_renumber[regno]);
1340           mark_home_live (regno);
1341         }
1342     }
1343 }
1344 \f
1345 /* Indicate that hard register number FROM was eliminated and replaced with
1346    an offset from hard register number TO.  The status of hard registers live
1347    at the start of a basic block is updated by replacing a use of FROM with
1348    a use of TO.  */
1349
1350 void
1351 mark_elimination (int from, int to)
1352 {
1353   basic_block bb;
1354
1355   FOR_EACH_BB (bb)
1356     {
1357       /* We don't use LIVE info in IRA.  */
1358       regset r = (flag_ira ? DF_LR_IN (bb) : DF_LIVE_IN (bb));
1359       if (REGNO_REG_SET_P (r, from))
1360         {
1361           CLEAR_REGNO_REG_SET (r, from);
1362           SET_REGNO_REG_SET (r, to);
1363         }
1364     }
1365 }
1366 \f
1367 /* Print chain C to FILE.  */
1368
1369 static void
1370 print_insn_chain (FILE *file, struct insn_chain *c)
1371 {
1372   fprintf (file, "insn=%d, ", INSN_UID(c->insn));
1373   bitmap_print (file, &c->live_throughout, "live_throughout: ", ", ");
1374   bitmap_print (file, &c->dead_or_set, "dead_or_set: ", "\n");
1375 }
1376
1377
1378 /* Print all reload_insn_chains to FILE.  */
1379
1380 static void
1381 print_insn_chains (FILE *file)
1382 {
1383   struct insn_chain *c;
1384   for (c = reload_insn_chain; c ; c = c->next)
1385     print_insn_chain (file, c);
1386 }
1387
1388 /* Return true if pseudo REGNO should be added to set live_throughout
1389    or dead_or_set of the insn chains for reload consideration.  */
1390
1391 static bool
1392 pseudo_for_reload_consideration_p (int regno)
1393 {
1394   /* Consider spilled pseudos too for IRA because they still have a
1395      chance to get hard-registers in the reload when IRA is used.  */
1396   return reg_renumber[regno] >= 0 || (flag_ira && optimize);
1397 }
1398
1399 /* Walk the insns of the current function and build reload_insn_chain,
1400    and record register life information.  */
1401
1402 void
1403 build_insn_chain (void)
1404 {
1405   unsigned int i;
1406   struct insn_chain **p = &reload_insn_chain;
1407   basic_block bb;
1408   struct insn_chain *c = NULL;
1409   struct insn_chain *next = NULL;
1410   bitmap live_relevant_regs = BITMAP_ALLOC (NULL);
1411   bitmap elim_regset = BITMAP_ALLOC (NULL);
1412   /* live_subregs is a vector used to keep accurate information about
1413      which hardregs are live in multiword pseudos.  live_subregs and
1414      live_subregs_used are indexed by pseudo number.  The live_subreg
1415      entry for a particular pseudo is only used if the corresponding
1416      element is non zero in live_subregs_used.  The value in
1417      live_subregs_used is number of bytes that the pseudo can
1418      occupy.  */
1419   sbitmap *live_subregs = XCNEWVEC (sbitmap, max_regno);
1420   int *live_subregs_used = XNEWVEC (int, max_regno);
1421
1422   for (i = 0; i < FIRST_PSEUDO_REGISTER; i++)
1423     if (TEST_HARD_REG_BIT (eliminable_regset, i))
1424       bitmap_set_bit (elim_regset, i);
1425   FOR_EACH_BB_REVERSE (bb)
1426     {
1427       bitmap_iterator bi;
1428       rtx insn;
1429       
1430       CLEAR_REG_SET (live_relevant_regs);
1431       memset (live_subregs_used, 0, max_regno * sizeof (int));
1432       
1433       EXECUTE_IF_SET_IN_BITMAP (df_get_live_out (bb), 0, i, bi)
1434         {
1435           if (i >= FIRST_PSEUDO_REGISTER)
1436             break;
1437           bitmap_set_bit (live_relevant_regs, i);
1438         }
1439
1440       EXECUTE_IF_SET_IN_BITMAP (df_get_live_out (bb), FIRST_PSEUDO_REGISTER, i, bi)
1441         {
1442           if (pseudo_for_reload_consideration_p (i))
1443             bitmap_set_bit (live_relevant_regs, i);
1444         }
1445
1446       FOR_BB_INSNS_REVERSE (bb, insn)
1447         {
1448           if (!NOTE_P (insn) && !BARRIER_P (insn))
1449             {
1450               unsigned int uid = INSN_UID (insn);
1451               struct df_ref **def_rec;
1452               struct df_ref **use_rec;
1453
1454               c = new_insn_chain ();
1455               c->next = next;
1456               next = c;
1457               *p = c;
1458               p = &c->prev;
1459               
1460               c->insn = insn;
1461               c->block = bb->index;
1462
1463               if (INSN_P (insn))
1464                 for (def_rec = DF_INSN_UID_DEFS (uid); *def_rec; def_rec++)
1465                   {
1466                     struct df_ref *def = *def_rec;
1467                     unsigned int regno = DF_REF_REGNO (def);
1468                     
1469                     /* Ignore may clobbers because these are generated
1470                        from calls. However, every other kind of def is
1471                        added to dead_or_set.  */
1472                     if (!DF_REF_FLAGS_IS_SET (def, DF_REF_MAY_CLOBBER))
1473                       {
1474                         if (regno < FIRST_PSEUDO_REGISTER)
1475                           {
1476                             if (!fixed_regs[regno])
1477                               bitmap_set_bit (&c->dead_or_set, regno);
1478                           }
1479                         else if (pseudo_for_reload_consideration_p (regno))
1480                           bitmap_set_bit (&c->dead_or_set, regno);
1481                       }
1482
1483                     if ((regno < FIRST_PSEUDO_REGISTER
1484                          || reg_renumber[regno] >= 0
1485                          || (flag_ira && optimize))
1486                         && (!DF_REF_FLAGS_IS_SET (def, DF_REF_CONDITIONAL)))
1487                       {
1488                         rtx reg = DF_REF_REG (def);
1489
1490                         /* We can model subregs, but not if they are
1491                            wrapped in ZERO_EXTRACTS.  */
1492                         if (GET_CODE (reg) == SUBREG
1493                             && !DF_REF_FLAGS_IS_SET (def, DF_REF_ZERO_EXTRACT))
1494                           {
1495                             unsigned int start = SUBREG_BYTE (reg);
1496                             unsigned int last = start 
1497                               + GET_MODE_SIZE (GET_MODE (reg));
1498
1499                             ra_init_live_subregs (bitmap_bit_p (live_relevant_regs, 
1500                                                                 regno), 
1501                                                   live_subregs, 
1502                                                   live_subregs_used,
1503                                                   regno, reg);
1504
1505                             if (!DF_REF_FLAGS_IS_SET
1506                                 (def, DF_REF_STRICT_LOW_PART))
1507                               {
1508                                 /* Expand the range to cover entire words.
1509                                    Bytes added here are "don't care".  */
1510                                 start = start / UNITS_PER_WORD * UNITS_PER_WORD;
1511                                 last = ((last + UNITS_PER_WORD - 1)
1512                                         / UNITS_PER_WORD * UNITS_PER_WORD);
1513                               }
1514
1515                             /* Ignore the paradoxical bits.  */
1516                             if ((int)last > live_subregs_used[regno])
1517                               last = live_subregs_used[regno];
1518
1519                             while (start < last)
1520                               {
1521                                 RESET_BIT (live_subregs[regno], start);
1522                                 start++;
1523                               }
1524                             
1525                             if (sbitmap_empty_p (live_subregs[regno]))
1526                               {
1527                                 live_subregs_used[regno] = 0;
1528                                 bitmap_clear_bit (live_relevant_regs, regno);
1529                               }
1530                             else
1531                               /* Set live_relevant_regs here because
1532                                  that bit has to be true to get us to
1533                                  look at the live_subregs fields.  */
1534                               bitmap_set_bit (live_relevant_regs, regno);
1535                           }
1536                         else
1537                           {
1538                             /* DF_REF_PARTIAL is generated for
1539                                subregs, STRICT_LOW_PART, and
1540                                ZERO_EXTRACT.  We handle the subreg
1541                                case above so here we have to keep from
1542                                modeling the def as a killing def.  */
1543                             if (!DF_REF_FLAGS_IS_SET (def, DF_REF_PARTIAL))
1544                               {
1545                                 bitmap_clear_bit (live_relevant_regs, regno);
1546                                 live_subregs_used[regno] = 0;
1547                               }
1548                           }
1549                       }
1550                   }
1551           
1552               bitmap_and_compl_into (live_relevant_regs, elim_regset);
1553               bitmap_copy (&c->live_throughout, live_relevant_regs);
1554
1555               if (INSN_P (insn))
1556                 for (use_rec = DF_INSN_UID_USES (uid); *use_rec; use_rec++)
1557                   {
1558                     struct df_ref *use = *use_rec;
1559                     unsigned int regno = DF_REF_REGNO (use);
1560                     rtx reg = DF_REF_REG (use);
1561                     
1562                     /* DF_REF_READ_WRITE on a use means that this use
1563                        is fabricated from a def that is a partial set
1564                        to a multiword reg.  Here, we only model the
1565                        subreg case that is not wrapped in ZERO_EXTRACT
1566                        precisely so we do not need to look at the
1567                        fabricated use. */
1568                     if (DF_REF_FLAGS_IS_SET (use, DF_REF_READ_WRITE) 
1569                         && !DF_REF_FLAGS_IS_SET (use, DF_REF_ZERO_EXTRACT) 
1570                         && DF_REF_FLAGS_IS_SET (use, DF_REF_SUBREG))
1571                       continue;
1572                     
1573                     /* Add the last use of each var to dead_or_set.  */
1574                     if (!bitmap_bit_p (live_relevant_regs, regno))
1575                       {
1576                         if (regno < FIRST_PSEUDO_REGISTER)
1577                           {
1578                             if (!fixed_regs[regno])
1579                               bitmap_set_bit (&c->dead_or_set, regno);
1580                           }
1581                         else if (pseudo_for_reload_consideration_p (regno))
1582                           bitmap_set_bit (&c->dead_or_set, regno);
1583                       }
1584                     
1585                     if (regno < FIRST_PSEUDO_REGISTER
1586                         || pseudo_for_reload_consideration_p (regno))
1587                       {
1588                         if (GET_CODE (reg) == SUBREG
1589                             && !DF_REF_FLAGS_IS_SET (use,
1590                                                      DF_REF_SIGN_EXTRACT | DF_REF_ZERO_EXTRACT)) 
1591                           {
1592                             unsigned int start = SUBREG_BYTE (reg);
1593                             unsigned int last = start 
1594                               + GET_MODE_SIZE (GET_MODE (reg));
1595                             
1596                             ra_init_live_subregs (bitmap_bit_p (live_relevant_regs, 
1597                                                                 regno), 
1598                                                   live_subregs, 
1599                                                   live_subregs_used,
1600                                                   regno, reg);
1601                             
1602                             /* Ignore the paradoxical bits.  */
1603                             if ((int)last > live_subregs_used[regno])
1604                               last = live_subregs_used[regno];
1605
1606                             while (start < last)
1607                               {
1608                                 SET_BIT (live_subregs[regno], start);
1609                                 start++;
1610                               }
1611                           }
1612                         else
1613                           /* Resetting the live_subregs_used is
1614                              effectively saying do not use the subregs
1615                              because we are reading the whole
1616                              pseudo.  */
1617                           live_subregs_used[regno] = 0;
1618                         bitmap_set_bit (live_relevant_regs, regno);
1619                       }
1620                   }
1621             }
1622         }
1623
1624       /* FIXME!! The following code is a disaster.  Reload needs to see the
1625          labels and jump tables that are just hanging out in between
1626          the basic blocks.  See pr33676.  */
1627       insn = BB_HEAD (bb);
1628       
1629       /* Skip over the barriers and cruft.  */
1630       while (insn && (BARRIER_P (insn) || NOTE_P (insn) 
1631                       || BLOCK_FOR_INSN (insn) == bb))
1632         insn = PREV_INSN (insn);
1633       
1634       /* While we add anything except barriers and notes, the focus is
1635          to get the labels and jump tables into the
1636          reload_insn_chain.  */
1637       while (insn)
1638         {
1639           if (!NOTE_P (insn) && !BARRIER_P (insn))
1640             {
1641               if (BLOCK_FOR_INSN (insn))
1642                 break;
1643               
1644               c = new_insn_chain ();
1645               c->next = next;
1646               next = c;
1647               *p = c;
1648               p = &c->prev;
1649               
1650               /* The block makes no sense here, but it is what the old
1651                  code did.  */
1652               c->block = bb->index;
1653               c->insn = insn;
1654               bitmap_copy (&c->live_throughout, live_relevant_regs);
1655             }     
1656           insn = PREV_INSN (insn);
1657         }
1658     }
1659
1660   for (i = 0; i < (unsigned int) max_regno; i++)
1661     if (live_subregs[i])
1662       free (live_subregs[i]);
1663
1664   reload_insn_chain = c;
1665   *p = NULL;
1666
1667   free (live_subregs);
1668   free (live_subregs_used);
1669   BITMAP_FREE (live_relevant_regs);
1670   BITMAP_FREE (elim_regset);
1671
1672   if (dump_file)
1673     print_insn_chains (dump_file);
1674 }
1675 \f
1676 /* Print debugging trace information if -dg switch is given,
1677    showing the information on which the allocation decisions are based.  */
1678
1679 static void
1680 dump_conflicts (FILE *file)
1681 {
1682   int i;
1683   int regno;
1684   int has_preferences;
1685   int nregs;
1686   nregs = 0;
1687   for (i = 0; i < max_allocno; i++)
1688     {
1689       if (reg_renumber[allocno[allocno_order[i]].reg] >= 0)
1690         continue;
1691       nregs++;
1692     }
1693   fprintf (file, ";; %d regs to allocate:", nregs);
1694   for (regno = 0; regno < max_regno; regno++)
1695     if ((i = reg_allocno[regno]) >= 0)
1696       {
1697         int j;
1698         if (reg_renumber[allocno[allocno_order[i]].reg] >= 0)
1699           continue;
1700         fprintf (file, " %d", allocno[allocno_order[i]].reg);
1701         for (j = 0; j < max_regno; j++)
1702           if (reg_allocno[j] == allocno_order[i]
1703               && j != allocno[allocno_order[i]].reg)
1704             fprintf (file, "+%d", j);
1705         if (allocno[allocno_order[i]].size != 1)
1706           fprintf (file, " (%d)", allocno[allocno_order[i]].size);
1707       }
1708   fprintf (file, "\n");
1709
1710   for (regno = 0; regno < max_regno; regno++)
1711     if ((i = reg_allocno[regno]) >= 0)
1712       {
1713         int j;
1714         adjacency_iter ai;
1715         fprintf (file, ";; %d conflicts:", allocno[i].reg);
1716         FOR_EACH_CONFLICT (i, j, ai)
1717           {
1718             fprintf (file, " %d", allocno[j].reg);
1719           }
1720         for (j = 0; j < FIRST_PSEUDO_REGISTER; j++)
1721           if (TEST_HARD_REG_BIT (allocno[i].hard_reg_conflicts, j)
1722               && !fixed_regs[j])
1723             fprintf (file, " %d", j);
1724         fprintf (file, "\n");
1725
1726         has_preferences = 0;
1727         for (j = 0; j < FIRST_PSEUDO_REGISTER; j++)
1728           if (TEST_HARD_REG_BIT (allocno[i].hard_reg_preferences, j))
1729             has_preferences = 1;
1730
1731         if (!has_preferences)
1732           continue;
1733         fprintf (file, ";; %d preferences:", allocno[i].reg);
1734         for (j = 0; j < FIRST_PSEUDO_REGISTER; j++)
1735           if (TEST_HARD_REG_BIT (allocno[i].hard_reg_preferences, j))
1736             fprintf (file, " %d", j);
1737         fprintf (file, "\n");
1738       }
1739   fprintf (file, "\n");
1740 }
1741
1742 void
1743 dump_global_regs (FILE *file)
1744 {
1745   int i, j;
1746
1747   fprintf (file, ";; Register dispositions:\n");
1748   for (i = FIRST_PSEUDO_REGISTER, j = 0; i < max_regno; i++)
1749     if (reg_renumber[i] >= 0)
1750       {
1751         fprintf (file, "%d in %d  ", i, reg_renumber[i]);
1752         if (++j % 6 == 0)
1753           fprintf (file, "\n");
1754       }
1755
1756   fprintf (file, "\n\n;; Hard regs used: ");
1757   for (i = 0; i < FIRST_PSEUDO_REGISTER; i++)
1758     if (df_regs_ever_live_p (i))
1759       fprintf (file, " %d", i);
1760   fprintf (file, "\n\n");
1761 }
1762
1763
1764 static bool
1765 gate_handle_global_alloc (void)
1766 {
1767   return ! flag_ira;
1768 }
1769
1770 /* Run old register allocator.  Return TRUE if we must exit
1771    rest_of_compilation upon return.  */
1772 static unsigned int
1773 rest_of_handle_global_alloc (void)
1774 {
1775   bool failure;
1776
1777   /* If optimizing, allocate remaining pseudo-regs.  Do the reload
1778      pass fixing up any insns that are invalid.  */
1779   if (optimize && dbg_cnt (global_alloc_at_func))
1780     failure = global_alloc ();
1781   else
1782     {
1783       /* There is just too much going on in the register allocators to
1784          keep things up to date.  At the end we have to rescan anyway
1785          because things change when the reload_completed flag is set.  
1786          So we just turn off scanning and we will rescan by hand.  */
1787       df_set_flags (DF_NO_INSN_RESCAN);
1788       compute_regsets (&eliminable_regset, &no_global_alloc_regs);
1789       build_insn_chain ();
1790       df_set_flags (DF_NO_INSN_RESCAN);
1791       failure = reload (get_insns (), 0);
1792     }
1793
1794   if (dump_enabled_p (pass_global_alloc.pass.static_pass_number))
1795     {
1796       timevar_push (TV_DUMP);
1797       dump_global_regs (dump_file);
1798       timevar_pop (TV_DUMP);
1799     }
1800
1801   /* FIXME: This appears on the surface to be wrong thing to be doing.
1802      So much of the compiler is designed to check reload_completed to
1803      see if it is running after reload that seems doomed to failure.
1804      We should be returning a value that says that we have found
1805      errors so that nothing but the cleanup passes are run
1806      afterwards.  */
1807   gcc_assert (reload_completed || failure);
1808   reload_completed = !failure;
1809
1810   /* The world has changed so much that at this point we might as well
1811      just rescan everything.  Note that df_rescan_all_insns is not
1812      going to help here because it does not touch the artificial uses
1813      and defs.  */
1814   df_finish_pass (true);
1815   if (optimize > 1)
1816     df_live_add_problem ();
1817   df_scan_alloc (NULL);
1818   df_scan_blocks ();
1819
1820   if (optimize)
1821     df_analyze ();
1822
1823   regstat_free_n_sets_and_refs ();
1824   regstat_free_ri ();
1825   return 0;
1826 }
1827
1828 struct rtl_opt_pass pass_global_alloc =
1829 {
1830  {
1831   RTL_PASS,
1832   "greg",                               /* name */
1833   gate_handle_global_alloc,             /* gate */
1834   rest_of_handle_global_alloc,          /* execute */
1835   NULL,                                 /* sub */
1836   NULL,                                 /* next */
1837   0,                                    /* static_pass_number */
1838   TV_GLOBAL_ALLOC,                      /* tv_id */
1839   0,                                    /* properties_required */
1840   0,                                    /* properties_provided */
1841   0,                                    /* properties_destroyed */
1842   0,                                    /* todo_flags_start */
1843   TODO_dump_func | TODO_verify_rtl_sharing
1844   | TODO_ggc_collect                    /* todo_flags_finish */
1845  }
1846 };
1847