2008-01-10 Vladimir Makarov <vmakarov@redhat.com>
[official-gcc.git] / gcc / global.c
blobe1521c327fe7df859394b00406d2c86d4f278c27
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.
6 This file is part of GCC.
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.
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.
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/>. */
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"
45 /* This pass of the compiler performs global register allocation.
46 It assigns hard register numbers to all the pseudo registers
47 that were not handled in local_alloc. Assignments are recorded
48 in the vector reg_renumber, not by changing the rtl code.
49 (Such changes are made by final). The entry point is
50 the function global_alloc.
52 After allocation is complete, the reload pass is run as a subroutine
53 of this pass, so that when a pseudo reg loses its hard reg due to
54 spilling it is possible to make a second attempt to find a hard
55 reg for it. The reload pass is independent in other respects
56 and it is run even when stupid register allocation is in use.
58 1. Assign allocation-numbers (allocnos) to the pseudo-registers
59 still needing allocations and to the pseudo-registers currently
60 allocated by local-alloc which may be spilled by reload.
61 Set up tables reg_allocno and allocno_reg to map
62 reg numbers to allocnos and vice versa.
63 max_allocno gets the number of allocnos in use.
65 2. Allocate a max_allocno by max_allocno conflict bit matrix and clear it.
66 Allocate a max_allocno by FIRST_PSEUDO_REGISTER conflict matrix
67 for conflicts between allocnos and explicit hard register use
68 (which includes use of pseudo-registers allocated by local_alloc).
70 3. For each basic block
71 walk forward through the block, recording which
72 pseudo-registers and which hardware registers are live.
73 Build the conflict matrix between the pseudo-registers
74 and another of pseudo-registers versus hardware registers.
75 Also record the preferred hardware registers
76 for each pseudo-register.
78 4. Sort a table of the allocnos into order of
79 desirability of the variables.
81 5. Allocate the variables in that order; each if possible into
82 a preferred register, else into another register. */
84 /* Number of pseudo-registers which are candidates for allocation. */
86 static int max_allocno;
88 /* Indexed by (pseudo) reg number, gives the allocno, or -1
89 for pseudo registers which are not to be allocated. */
91 static int *reg_allocno;
93 struct allocno
95 int reg;
96 /* Gives the number of consecutive hard registers needed by that
97 pseudo reg. */
98 int size;
100 /* Number of calls crossed by each allocno. */
101 int calls_crossed;
103 /* Number of calls that might throw crossed by each allocno. */
104 int throwing_calls_crossed;
106 /* Number of refs to each allocno. */
107 int n_refs;
109 /* Frequency of uses of each allocno. */
110 int freq;
112 /* Guess at live length of each allocno.
113 This is actually the max of the live lengths of the regs. */
114 int live_length;
116 /* Set of hard regs conflicting with allocno N. */
118 HARD_REG_SET hard_reg_conflicts;
120 /* Set of hard regs preferred by allocno N.
121 This is used to make allocnos go into regs that are copied to or from them,
122 when possible, to reduce register shuffling. */
124 HARD_REG_SET hard_reg_preferences;
126 /* Similar, but just counts register preferences made in simple copy
127 operations, rather than arithmetic. These are given priority because
128 we can always eliminate an insn by using these, but using a register
129 in the above list won't always eliminate an insn. */
131 HARD_REG_SET hard_reg_copy_preferences;
133 /* Similar to hard_reg_preferences, but includes bits for subsequent
134 registers when an allocno is multi-word. The above variable is used for
135 allocation while this is used to build reg_someone_prefers, below. */
137 HARD_REG_SET hard_reg_full_preferences;
139 /* Set of hard registers that some later allocno has a preference for. */
141 HARD_REG_SET regs_someone_prefers;
143 #ifdef STACK_REGS
144 /* Set to true if allocno can't be allocated in the stack register. */
145 bool no_stack_reg;
146 #endif
149 static struct allocno *allocno;
151 /* A vector of the integers from 0 to max_allocno-1,
152 sorted in the order of first-to-be-allocated first. */
154 static int *allocno_order;
156 /* Define the number of bits in each element of `conflicts' and what
157 type that element has. We use the largest integer format on the
158 host machine. */
160 #define INT_BITS HOST_BITS_PER_WIDE_INT
161 #define INT_TYPE HOST_WIDE_INT
163 /* max_allocno by max_allocno array of bits,
164 recording whether two allocno's conflict (can't go in the same
165 hardware register).
167 `conflicts' is symmetric after the call to mirror_conflicts. */
169 static INT_TYPE *conflicts;
171 /* Number of ints required to hold max_allocno bits.
172 This is the length of a row in `conflicts'. */
174 static int allocno_row_words;
176 /* Two macros to test or store 1 in an element of `conflicts'. */
178 #define CONFLICTP(I, J) \
179 (conflicts[(I) * allocno_row_words + (unsigned) (J) / INT_BITS] \
180 & ((INT_TYPE) 1 << ((unsigned) (J) % INT_BITS)))
182 /* For any allocno set in ALLOCNO_SET, set ALLOCNO to that allocno,
183 and execute CODE. */
184 #define EXECUTE_IF_SET_IN_ALLOCNO_SET(ALLOCNO_SET, ALLOCNO, CODE) \
185 do { \
186 int i_; \
187 int allocno_; \
188 INT_TYPE *p_ = (ALLOCNO_SET); \
190 for (i_ = allocno_row_words - 1, allocno_ = 0; i_ >= 0; \
191 i_--, allocno_ += INT_BITS) \
193 unsigned INT_TYPE word_ = (unsigned INT_TYPE) *p_++; \
195 for ((ALLOCNO) = allocno_; word_; word_ >>= 1, (ALLOCNO)++) \
197 if (word_ & 1) \
198 {CODE;} \
201 } while (0)
203 /* Set of hard regs currently live (during scan of all insns). */
205 static HARD_REG_SET hard_regs_live;
207 /* Set of registers that global-alloc isn't supposed to use. */
209 static HARD_REG_SET no_global_alloc_regs;
211 /* Set of registers used so far. */
213 static HARD_REG_SET regs_used_so_far;
215 /* Number of refs to each hard reg, as used by local alloc.
216 It is zero for a reg that contains global pseudos or is explicitly used. */
218 static int local_reg_n_refs[FIRST_PSEUDO_REGISTER];
220 /* Frequency of uses of given hard reg. */
221 static int local_reg_freq[FIRST_PSEUDO_REGISTER];
223 /* Guess at live length of each hard reg, as used by local alloc.
224 This is actually the sum of the live lengths of the specific regs. */
226 static int local_reg_live_length[FIRST_PSEUDO_REGISTER];
228 /* Set to 1 a bit in a vector TABLE of HARD_REG_SETs, for vector
229 element I, and hard register number J. */
231 #define SET_REGBIT(TABLE, I, J) SET_HARD_REG_BIT (allocno[I].TABLE, J)
233 /* Bit mask for allocnos live at current point in the scan. */
235 static INT_TYPE *allocnos_live;
237 /* Test, set or clear bit number I in allocnos_live,
238 a bit vector indexed by allocno. */
240 #define SET_ALLOCNO_LIVE(I) \
241 (allocnos_live[(unsigned) (I) / INT_BITS] \
242 |= ((INT_TYPE) 1 << ((unsigned) (I) % INT_BITS)))
244 #define CLEAR_ALLOCNO_LIVE(I) \
245 (allocnos_live[(unsigned) (I) / INT_BITS] \
246 &= ~((INT_TYPE) 1 << ((unsigned) (I) % INT_BITS)))
248 /* This is turned off because it doesn't work right for DImode.
249 (And it is only used for DImode, so the other cases are worthless.)
250 The problem is that it isn't true that there is NO possibility of conflict;
251 only that there is no conflict if the two pseudos get the exact same regs.
252 If they were allocated with a partial overlap, there would be a conflict.
253 We can't safely turn off the conflict unless we have another way to
254 prevent the partial overlap.
256 Idea: change hard_reg_conflicts so that instead of recording which
257 hard regs the allocno may not overlap, it records where the allocno
258 may not start. Change both where it is used and where it is updated.
259 Then there is a way to record that (reg:DI 108) may start at 10
260 but not at 9 or 11. There is still the question of how to record
261 this semi-conflict between two pseudos. */
262 #if 0
263 /* Reg pairs for which conflict after the current insn
264 is inhibited by a REG_NO_CONFLICT note.
265 If the table gets full, we ignore any other notes--that is conservative. */
266 #define NUM_NO_CONFLICT_PAIRS 4
267 /* Number of pairs in use in this insn. */
268 int n_no_conflict_pairs;
269 static struct { int allocno1, allocno2;}
270 no_conflict_pairs[NUM_NO_CONFLICT_PAIRS];
271 #endif /* 0 */
273 /* Record all regs that are set in any one insn.
274 Communication from mark_reg_{store,clobber} and global_conflicts. */
276 static VEC(rtx, heap) *regs_set;
279 /* Return true if *LOC contains an asm. */
281 static int
282 insn_contains_asm_1 (rtx *loc, void *data ATTRIBUTE_UNUSED)
284 if ( !*loc)
285 return 0;
286 if (GET_CODE (*loc) == ASM_OPERANDS)
287 return 1;
288 return 0;
292 /* Return true if INSN contains an ASM. */
294 static int
295 insn_contains_asm (rtx insn)
297 return for_each_rtx (&insn, insn_contains_asm_1, NULL);
301 static void
302 compute_regs_asm_clobbered (char *regs_asm_clobbered)
304 basic_block bb;
306 memset (regs_asm_clobbered, 0, sizeof (char) * FIRST_PSEUDO_REGISTER);
308 FOR_EACH_BB (bb)
310 rtx insn;
311 FOR_BB_INSNS_REVERSE (bb, insn)
313 struct df_ref **def_rec;
314 if (insn_contains_asm (insn))
315 for (def_rec = DF_INSN_DEFS (insn); *def_rec; def_rec++)
317 struct df_ref *def = *def_rec;
318 unsigned int dregno = DF_REF_REGNO (def);
319 if (dregno < FIRST_PSEUDO_REGISTER)
321 unsigned int i;
322 enum machine_mode mode = GET_MODE (DF_REF_REAL_REG (def));
323 unsigned int end = dregno
324 + hard_regno_nregs[dregno][mode] - 1;
325 for (i = dregno; i <= end; ++i)
326 regs_asm_clobbered[i] = 1;
334 /* All registers that can be eliminated. */
336 HARD_REG_SET eliminable_regset;
338 static int allocno_compare (const void *, const void *);
339 static void global_conflicts (void);
340 static void mirror_conflicts (void);
341 static void expand_preferences (void);
342 static void prune_preferences (void);
343 static void find_reg (int, HARD_REG_SET, int, int, int);
344 static void record_one_conflict (int);
345 static void record_conflicts (int *, int);
346 static void mark_reg_store (rtx, const_rtx, void *);
347 static void mark_reg_clobber (rtx, const_rtx, void *);
348 static void mark_reg_conflicts (rtx);
349 static void mark_reg_death (rtx);
350 static void set_preference (rtx, rtx);
351 static void dump_conflicts (FILE *);
352 static void reg_becomes_live (rtx, const_rtx, void *);
353 static void reg_dies (int, enum machine_mode, struct insn_chain *);
358 /* Look through the list of eliminable registers. Set ELIM_SET to the
359 set of registers which may be eliminated. Set NO_GLOBAL_SET to the
360 set of registers which may not be used across blocks.
362 This will normally be called with ELIM_SET as the file static
363 variable eliminable_regset, and NO_GLOBAL_SET as the file static
364 variable NO_GLOBAL_ALLOC_REGS. */
366 static void
367 compute_regsets (HARD_REG_SET *elim_set,
368 HARD_REG_SET *no_global_set)
371 /* Like regs_ever_live, but 1 if a reg is set or clobbered from an asm.
372 Unlike regs_ever_live, elements of this array corresponding to
373 eliminable regs like the frame pointer are set if an asm sets them. */
374 char *regs_asm_clobbered = alloca (FIRST_PSEUDO_REGISTER * sizeof (char));
376 #ifdef ELIMINABLE_REGS
377 static const struct {const int from, to; } eliminables[] = ELIMINABLE_REGS;
378 size_t i;
379 #endif
380 int need_fp
381 = (! flag_omit_frame_pointer
382 || (current_function_calls_alloca && EXIT_IGNORE_STACK)
383 || FRAME_POINTER_REQUIRED);
385 max_regno = max_reg_num ();
386 compact_blocks ();
388 max_allocno = 0;
390 /* A machine may have certain hard registers that
391 are safe to use only within a basic block. */
393 CLEAR_HARD_REG_SET (*no_global_set);
394 CLEAR_HARD_REG_SET (*elim_set);
396 compute_regs_asm_clobbered (regs_asm_clobbered);
397 /* Build the regset of all eliminable registers and show we can't use those
398 that we already know won't be eliminated. */
399 #ifdef ELIMINABLE_REGS
400 for (i = 0; i < ARRAY_SIZE (eliminables); i++)
402 bool cannot_elim
403 = (! CAN_ELIMINATE (eliminables[i].from, eliminables[i].to)
404 || (eliminables[i].to == STACK_POINTER_REGNUM && need_fp));
406 if (!regs_asm_clobbered[eliminables[i].from])
408 SET_HARD_REG_BIT (*elim_set, eliminables[i].from);
410 if (cannot_elim)
411 SET_HARD_REG_BIT (*no_global_set, eliminables[i].from);
413 else if (cannot_elim)
414 error ("%s cannot be used in asm here",
415 reg_names[eliminables[i].from]);
416 else
417 df_set_regs_ever_live (eliminables[i].from, true);
419 #if FRAME_POINTER_REGNUM != HARD_FRAME_POINTER_REGNUM
420 if (!regs_asm_clobbered[HARD_FRAME_POINTER_REGNUM])
422 SET_HARD_REG_BIT (*elim_set, HARD_FRAME_POINTER_REGNUM);
423 if (need_fp)
424 SET_HARD_REG_BIT (*no_global_set, HARD_FRAME_POINTER_REGNUM);
426 else if (need_fp)
427 error ("%s cannot be used in asm here",
428 reg_names[HARD_FRAME_POINTER_REGNUM]);
429 else
430 df_set_regs_ever_live (HARD_FRAME_POINTER_REGNUM, true);
431 #endif
433 #else
434 if (!regs_asm_clobbered[FRAME_POINTER_REGNUM])
436 SET_HARD_REG_BIT (*elim_set, FRAME_POINTER_REGNUM);
437 if (need_fp)
438 SET_HARD_REG_BIT (*no_global_set, FRAME_POINTER_REGNUM);
440 else if (need_fp)
441 error ("%s cannot be used in asm here", reg_names[FRAME_POINTER_REGNUM]);
442 else
443 df_set_regs_ever_live (FRAME_POINTER_REGNUM, true);
444 #endif
447 /* Perform allocation of pseudo-registers not allocated by local_alloc.
449 Return value is nonzero if reload failed
450 and we must not do any more for this function. */
452 static int
453 global_alloc (void)
455 int retval;
456 size_t i;
458 compute_regsets (&eliminable_regset, &no_global_alloc_regs);
460 /* Track which registers have already been used. Start with registers
461 explicitly in the rtl, then registers allocated by local register
462 allocation. */
464 CLEAR_HARD_REG_SET (regs_used_so_far);
465 #ifdef LEAF_REGISTERS
466 /* If we are doing the leaf function optimization, and this is a leaf
467 function, it means that the registers that take work to save are those
468 that need a register window. So prefer the ones that can be used in
469 a leaf function. */
471 const char *cheap_regs;
472 const char *const leaf_regs = LEAF_REGISTERS;
474 if (only_leaf_regs_used () && leaf_function_p ())
475 cheap_regs = leaf_regs;
476 else
477 cheap_regs = call_used_regs;
478 for (i = 0; i < FIRST_PSEUDO_REGISTER; i++)
479 if (df_regs_ever_live_p (i) || cheap_regs[i])
480 SET_HARD_REG_BIT (regs_used_so_far, i);
482 #else
483 /* We consider registers that do not have to be saved over calls as if
484 they were already used since there is no cost in using them. */
485 for (i = 0; i < FIRST_PSEUDO_REGISTER; i++)
486 if (df_regs_ever_live_p (i) || call_used_regs[i])
487 SET_HARD_REG_BIT (regs_used_so_far, i);
488 #endif
490 for (i = FIRST_PSEUDO_REGISTER; i < (size_t) max_regno; i++)
491 if (reg_renumber[i] >= 0)
492 SET_HARD_REG_BIT (regs_used_so_far, reg_renumber[i]);
494 /* Establish mappings from register number to allocation number
495 and vice versa. In the process, count the allocnos. */
497 reg_allocno = XNEWVEC (int, max_regno);
499 for (i = 0; i < FIRST_PSEUDO_REGISTER; i++)
500 reg_allocno[i] = -1;
502 max_allocno = 0;
503 for (i = FIRST_PSEUDO_REGISTER; i < (size_t) max_regno; i++)
504 /* Note that reg_live_length[i] < 0 indicates a "constant" reg
505 that we are supposed to refrain from putting in a hard reg.
506 -2 means do make an allocno but don't allocate it. */
507 if (REG_N_REFS (i) != 0 && REG_LIVE_LENGTH (i) != -1
508 /* Don't allocate pseudos that cross calls,
509 if this function receives a nonlocal goto. */
510 && (! current_function_has_nonlocal_label
511 || REG_N_CALLS_CROSSED (i) == 0))
513 reg_allocno[i] = max_allocno++;
514 gcc_assert (REG_LIVE_LENGTH (i));
516 else
517 reg_allocno[i] = -1;
519 allocno = XCNEWVEC (struct allocno, max_allocno);
521 for (i = FIRST_PSEUDO_REGISTER; i < (size_t) max_regno; i++)
522 if (reg_allocno[i] >= 0)
524 int num = reg_allocno[i];
525 allocno[num].reg = i;
526 allocno[num].size = PSEUDO_REGNO_SIZE (i);
527 allocno[num].calls_crossed += REG_N_CALLS_CROSSED (i);
528 allocno[num].throwing_calls_crossed
529 += REG_N_THROWING_CALLS_CROSSED (i);
530 allocno[num].n_refs += REG_N_REFS (i);
531 allocno[num].freq += REG_FREQ (i);
532 if (allocno[num].live_length < REG_LIVE_LENGTH (i))
533 allocno[num].live_length = REG_LIVE_LENGTH (i);
536 /* Calculate amount of usage of each hard reg by pseudos
537 allocated by local-alloc. This is to see if we want to
538 override it. */
539 memset (local_reg_live_length, 0, sizeof local_reg_live_length);
540 memset (local_reg_n_refs, 0, sizeof local_reg_n_refs);
541 memset (local_reg_freq, 0, sizeof local_reg_freq);
542 for (i = FIRST_PSEUDO_REGISTER; i < (size_t) max_regno; i++)
543 if (reg_renumber[i] >= 0)
545 int regno = reg_renumber[i];
546 int endregno = end_hard_regno (PSEUDO_REGNO_MODE (i), regno);
547 int j;
549 for (j = regno; j < endregno; j++)
551 local_reg_n_refs[j] += REG_N_REFS (i);
552 local_reg_freq[j] += REG_FREQ (i);
553 local_reg_live_length[j] += REG_LIVE_LENGTH (i);
557 /* We can't override local-alloc for a reg used not just by local-alloc. */
558 for (i = 0; i < FIRST_PSEUDO_REGISTER; i++)
559 if (df_regs_ever_live_p (i))
560 local_reg_n_refs[i] = 0, local_reg_freq[i] = 0;
562 if (dump_file)
564 for (i = FIRST_PSEUDO_REGISTER; i < (size_t) max_regno; i++)
566 fprintf (dump_file, "%d REG_N_REFS=%d, REG_FREQ=%d, REG_LIVE_LENGTH=%d\n",
567 (int)i, REG_N_REFS (i), REG_FREQ (i), REG_LIVE_LENGTH (i));
569 fprintf (dump_file, "regs_ever_live =");
570 for (i = 0; i < FIRST_PSEUDO_REGISTER; i++)
571 if (df_regs_ever_live_p (i))
572 fprintf (dump_file, " %d", (int)i);
573 fprintf (dump_file, "\n");
575 allocno_row_words = (max_allocno + INT_BITS - 1) / INT_BITS;
577 /* We used to use alloca here, but the size of what it would try to
578 allocate would occasionally cause it to exceed the stack limit and
579 cause unpredictable core dumps. Some examples were > 2Mb in size. */
580 conflicts = XCNEWVEC (INT_TYPE, max_allocno * allocno_row_words);
582 allocnos_live = XNEWVEC (INT_TYPE, allocno_row_words);
584 /* If there is work to be done (at least one reg to allocate),
585 perform global conflict analysis and allocate the regs. */
587 if (max_allocno > 0)
589 /* Make a vector that mark_reg_{store,clobber} will store in. */
590 if (!regs_set)
591 regs_set = VEC_alloc (rtx, heap, 10);
593 /* Scan all the insns and compute the conflicts among allocnos
594 and between allocnos and hard regs. */
596 global_conflicts ();
598 mirror_conflicts ();
600 /* Eliminate conflicts between pseudos and eliminable registers. If
601 the register is not eliminated, the pseudo won't really be able to
602 live in the eliminable register, so the conflict doesn't matter.
603 If we do eliminate the register, the conflict will no longer exist.
604 So in either case, we can ignore the conflict. Likewise for
605 preferences. */
607 for (i = 0; i < (size_t) max_allocno; i++)
609 AND_COMPL_HARD_REG_SET (allocno[i].hard_reg_conflicts,
610 eliminable_regset);
611 AND_COMPL_HARD_REG_SET (allocno[i].hard_reg_copy_preferences,
612 eliminable_regset);
613 AND_COMPL_HARD_REG_SET (allocno[i].hard_reg_preferences,
614 eliminable_regset);
617 /* Try to expand the preferences by merging them between allocnos. */
619 expand_preferences ();
621 /* Determine the order to allocate the remaining pseudo registers. */
623 allocno_order = XNEWVEC (int, max_allocno);
624 for (i = 0; i < (size_t) max_allocno; i++)
625 allocno_order[i] = i;
627 /* Default the size to 1, since allocno_compare uses it to divide by.
628 Also convert allocno_live_length of zero to -1. A length of zero
629 can occur when all the registers for that allocno have reg_live_length
630 equal to -2. In this case, we want to make an allocno, but not
631 allocate it. So avoid the divide-by-zero and set it to a low
632 priority. */
634 for (i = 0; i < (size_t) max_allocno; i++)
636 if (allocno[i].size == 0)
637 allocno[i].size = 1;
638 if (allocno[i].live_length == 0)
639 allocno[i].live_length = -1;
642 qsort (allocno_order, max_allocno, sizeof (int), allocno_compare);
644 prune_preferences ();
646 if (dump_file)
647 dump_conflicts (dump_file);
649 /* Try allocating them, one by one, in that order,
650 except for parameters marked with reg_live_length[regno] == -2. */
652 for (i = 0; i < (size_t) max_allocno; i++)
653 if (reg_renumber[allocno[allocno_order[i]].reg] < 0
654 && REG_LIVE_LENGTH (allocno[allocno_order[i]].reg) >= 0)
656 if (!dbg_cnt (global_alloc_at_reg))
657 break;
658 /* If we have more than one register class,
659 first try allocating in the class that is cheapest
660 for this pseudo-reg. If that fails, try any reg. */
661 if (N_REG_CLASSES > 1)
663 find_reg (allocno_order[i], 0, 0, 0, 0);
664 if (reg_renumber[allocno[allocno_order[i]].reg] >= 0)
666 if (dump_file)
667 fprintf (dump_file, "Assign %d to %d\n",
668 reg_renumber[allocno[allocno_order[i]].reg],
669 allocno[allocno_order[i]].reg);
670 continue;
673 if (reg_alternate_class (allocno[allocno_order[i]].reg) != NO_REGS)
675 find_reg (allocno_order[i], 0, 1, 0, 0);
676 if (dump_file)
677 fprintf (dump_file, "Assign %d to %d\n",
678 reg_renumber[allocno[allocno_order[i]].reg],
679 allocno[allocno_order[i]].reg);
683 free (allocno_order);
686 /* Do the reloads now while the allocno data still exists, so that we can
687 try to assign new hard regs to any pseudo regs that are spilled. */
689 #if 0 /* We need to eliminate regs even if there is no rtl code,
690 for the sake of debugging information. */
691 if (n_basic_blocks > NUM_FIXED_BLOCKS)
692 #endif
694 build_insn_chain (get_insns ());
695 retval = reload (get_insns (), 1);
698 /* Clean up. */
699 free (reg_allocno);
700 free (allocno);
701 free (conflicts);
702 free (allocnos_live);
704 return retval;
707 /* Sort predicate for ordering the allocnos.
708 Returns -1 (1) if *v1 should be allocated before (after) *v2. */
710 static int
711 allocno_compare (const void *v1p, const void *v2p)
713 int v1 = *(const int *)v1p, v2 = *(const int *)v2p;
714 /* Note that the quotient will never be bigger than
715 the value of floor_log2 times the maximum number of
716 times a register can occur in one insn (surely less than 100)
717 weighted by the frequency (maximally REG_FREQ_MAX).
718 Multiplying this by 10000/REG_FREQ_MAX can't overflow. */
719 int pri1
720 = (((double) (floor_log2 (allocno[v1].n_refs) * allocno[v1].freq)
721 / allocno[v1].live_length)
722 * (10000 / REG_FREQ_MAX) * allocno[v1].size);
723 int pri2
724 = (((double) (floor_log2 (allocno[v2].n_refs) * allocno[v2].freq)
725 / allocno[v2].live_length)
726 * (10000 / REG_FREQ_MAX) * allocno[v2].size);
727 if (pri2 - pri1)
728 return pri2 - pri1;
730 /* If regs are equally good, sort by allocno,
731 so that the results of qsort leave nothing to chance. */
732 return v1 - v2;
735 /* Scan the rtl code and record all conflicts and register preferences in the
736 conflict matrices and preference tables. */
738 static void
739 global_conflicts (void)
741 unsigned i;
742 basic_block b;
743 rtx insn;
744 int *block_start_allocnos;
746 block_start_allocnos = XNEWVEC (int, max_allocno);
748 FOR_EACH_BB (b)
750 memset (allocnos_live, 0, allocno_row_words * sizeof (INT_TYPE));
752 /* Initialize table of registers currently live
753 to the state at the beginning of this basic block.
754 This also marks the conflicts among hard registers
755 and any allocnos that are live.
757 For pseudo-regs, there is only one bit for each one
758 no matter how many hard regs it occupies.
759 This is ok; we know the size from PSEUDO_REGNO_SIZE.
760 For explicit hard regs, we cannot know the size that way
761 since one hard reg can be used with various sizes.
762 Therefore, we must require that all the hard regs
763 implicitly live as part of a multi-word hard reg
764 be explicitly marked in basic_block_live_at_start. */
767 int ax = 0;
768 reg_set_iterator rsi;
770 REG_SET_TO_HARD_REG_SET (hard_regs_live, DF_RA_LIVE_TOP (b));
771 EXECUTE_IF_SET_IN_REG_SET (DF_RA_LIVE_TOP (b), FIRST_PSEUDO_REGISTER, i, rsi)
773 int a = reg_allocno[i];
774 if (a >= 0)
776 SET_ALLOCNO_LIVE (a);
777 block_start_allocnos[ax++] = a;
779 else if ((a = reg_renumber[i]) >= 0)
780 add_to_hard_reg_set (&hard_regs_live, PSEUDO_REGNO_MODE (i), a);
783 /* Record that each allocno now live conflicts with each hard reg
784 now live.
786 It is not necessary to mark any conflicts between pseudos at
787 this point, even for pseudos which are live at the start of
788 the basic block.
790 Given two pseudos X and Y and any point in the CFG P.
792 On any path to point P where X and Y are live one of the
793 following conditions must be true:
795 1. X is live at some instruction on the path that
796 evaluates Y.
798 2. Y is live at some instruction on the path that
799 evaluates X.
801 3. Either X or Y is not evaluated on the path to P
802 (i.e. it is used uninitialized) and thus the
803 conflict can be ignored.
805 In cases #1 and #2 the conflict will be recorded when we
806 scan the instruction that makes either X or Y become live. */
807 record_conflicts (block_start_allocnos, ax);
809 #ifdef EH_RETURN_DATA_REGNO
810 if (bb_has_eh_pred (b))
812 unsigned int i;
814 for (i = 0; ; ++i)
816 unsigned int regno = EH_RETURN_DATA_REGNO (i);
817 if (regno == INVALID_REGNUM)
818 break;
819 record_one_conflict (regno);
822 #endif
824 /* Pseudos can't go in stack regs at the start of a basic block that
825 is reached by an abnormal edge. Likewise for call clobbered regs,
826 because caller-save, fixup_abnormal_edges and possibly the table
827 driven EH machinery are not quite ready to handle such regs live
828 across such edges. */
830 edge e;
831 edge_iterator ei;
833 FOR_EACH_EDGE (e, ei, b->preds)
834 if (e->flags & EDGE_ABNORMAL)
835 break;
837 if (e != NULL)
839 #ifdef STACK_REGS
840 EXECUTE_IF_SET_IN_ALLOCNO_SET (allocnos_live, ax,
842 allocno[ax].no_stack_reg = 1;
844 for (ax = FIRST_STACK_REG; ax <= LAST_STACK_REG; ax++)
845 record_one_conflict (ax);
846 #endif
848 /* No need to record conflicts for call clobbered regs if we have
849 nonlocal labels around, as we don't ever try to allocate such
850 regs in this case. */
851 if (! current_function_has_nonlocal_label)
852 for (ax = 0; ax < FIRST_PSEUDO_REGISTER; ax++)
853 if (call_used_regs [ax])
854 record_one_conflict (ax);
859 insn = BB_HEAD (b);
861 /* Scan the code of this basic block, noting which allocnos
862 and hard regs are born or die. When one is born,
863 record a conflict with all others currently live. */
865 while (1)
867 RTX_CODE code = GET_CODE (insn);
868 rtx link;
870 gcc_assert (VEC_empty (rtx, regs_set));
871 if (code == INSN || code == CALL_INSN || code == JUMP_INSN)
873 #if 0
874 int i = 0;
875 for (link = REG_NOTES (insn);
876 link && i < NUM_NO_CONFLICT_PAIRS;
877 link = XEXP (link, 1))
878 if (REG_NOTE_KIND (link) == REG_NO_CONFLICT)
880 no_conflict_pairs[i].allocno1
881 = reg_allocno[REGNO (SET_DEST (PATTERN (insn)))];
882 no_conflict_pairs[i].allocno2
883 = reg_allocno[REGNO (XEXP (link, 0))];
884 i++;
886 #endif /* 0 */
888 /* Mark any registers clobbered by INSN as live,
889 so they conflict with the inputs. */
891 note_stores (PATTERN (insn), mark_reg_clobber, NULL);
893 #ifdef AUTO_INC_DEC
894 /* Auto-increment instructions clobber the base
895 register. */
896 for (link = REG_NOTES (insn); link; link = XEXP (link, 1))
897 if (REG_NOTE_KIND (link) == REG_INC)
898 mark_reg_store (XEXP (link, 0), NULL_RTX, NULL);
899 #endif
900 /* Mark any registers dead after INSN as dead now. */
902 for (link = REG_NOTES (insn); link; link = XEXP (link, 1))
903 if (REG_NOTE_KIND (link) == REG_DEAD)
904 mark_reg_death (XEXP (link, 0));
906 /* Mark any registers set in INSN as live,
907 and mark them as conflicting with all other live regs.
908 Clobbers are processed again, so they conflict with
909 the registers that are set. */
911 note_stores (PATTERN (insn), mark_reg_store, NULL);
913 /* If INSN has multiple outputs, then any reg that dies here
914 and is used inside of an output
915 must conflict with the other outputs.
917 It is unsafe to use !single_set here since it will ignore an
918 unused output. Just because an output is unused does not mean
919 the compiler can assume the side effect will not occur.
920 Consider if REG appears in the address of an output and we
921 reload the output. If we allocate REG to the same hard
922 register as an unused output we could set the hard register
923 before the output reload insn. */
924 if (GET_CODE (PATTERN (insn)) == PARALLEL && multiple_sets (insn))
925 for (link = REG_NOTES (insn); link; link = XEXP (link, 1))
926 if (REG_NOTE_KIND (link) == REG_DEAD)
928 int used_in_output = 0;
929 int i;
930 rtx reg = XEXP (link, 0);
932 for (i = XVECLEN (PATTERN (insn), 0) - 1; i >= 0; i--)
934 rtx set = XVECEXP (PATTERN (insn), 0, i);
935 if (GET_CODE (set) == SET
936 && !REG_P (SET_DEST (set))
937 && !rtx_equal_p (reg, SET_DEST (set))
938 && reg_overlap_mentioned_p (reg, SET_DEST (set)))
939 used_in_output = 1;
941 if (used_in_output)
942 mark_reg_conflicts (reg);
945 /* Mark any registers set in INSN and then never used. */
947 while (!VEC_empty (rtx, regs_set))
949 rtx reg = VEC_pop (rtx, regs_set);
950 rtx note = find_regno_note (insn, REG_UNUSED,
951 REGNO (reg));
952 if (note)
953 mark_reg_death (XEXP (note, 0));
957 if (insn == BB_END (b))
958 break;
959 insn = NEXT_INSN (insn);
963 /* Clean up. */
964 free (block_start_allocnos);
967 /* Expand the preference information by looking for cases where one allocno
968 dies in an insn that sets an allocno. If those two allocnos don't conflict,
969 merge any preferences between those allocnos. */
971 static void
972 expand_preferences (void)
974 rtx insn;
975 rtx link;
976 rtx set;
978 /* We only try to handle the most common cases here. Most of the cases
979 where this wins are reg-reg copies. */
981 for (insn = get_insns (); insn; insn = NEXT_INSN (insn))
982 if (INSN_P (insn)
983 && (set = single_set (insn)) != 0
984 && REG_P (SET_DEST (set))
985 && reg_allocno[REGNO (SET_DEST (set))] >= 0)
986 for (link = REG_NOTES (insn); link; link = XEXP (link, 1))
987 if (REG_NOTE_KIND (link) == REG_DEAD
988 && REG_P (XEXP (link, 0))
989 && reg_allocno[REGNO (XEXP (link, 0))] >= 0
990 && ! CONFLICTP (reg_allocno[REGNO (SET_DEST (set))],
991 reg_allocno[REGNO (XEXP (link, 0))]))
993 int a1 = reg_allocno[REGNO (SET_DEST (set))];
994 int a2 = reg_allocno[REGNO (XEXP (link, 0))];
996 if (XEXP (link, 0) == SET_SRC (set))
998 IOR_HARD_REG_SET (allocno[a1].hard_reg_copy_preferences,
999 allocno[a2].hard_reg_copy_preferences);
1000 IOR_HARD_REG_SET (allocno[a2].hard_reg_copy_preferences,
1001 allocno[a1].hard_reg_copy_preferences);
1004 IOR_HARD_REG_SET (allocno[a1].hard_reg_preferences,
1005 allocno[a2].hard_reg_preferences);
1006 IOR_HARD_REG_SET (allocno[a2].hard_reg_preferences,
1007 allocno[a1].hard_reg_preferences);
1008 IOR_HARD_REG_SET (allocno[a1].hard_reg_full_preferences,
1009 allocno[a2].hard_reg_full_preferences);
1010 IOR_HARD_REG_SET (allocno[a2].hard_reg_full_preferences,
1011 allocno[a1].hard_reg_full_preferences);
1015 /* Prune the preferences for global registers to exclude registers that cannot
1016 be used.
1018 Compute `regs_someone_prefers', which is a bitmask of the hard registers
1019 that are preferred by conflicting registers of lower priority. If possible,
1020 we will avoid using these registers. */
1022 static void
1023 prune_preferences (void)
1025 int i;
1026 int num;
1027 int *allocno_to_order = XNEWVEC (int, max_allocno);
1029 /* Scan least most important to most important.
1030 For each allocno, remove from preferences registers that cannot be used,
1031 either because of conflicts or register type. Then compute all registers
1032 preferred by each lower-priority register that conflicts. */
1034 for (i = max_allocno - 1; i >= 0; i--)
1036 HARD_REG_SET temp;
1038 num = allocno_order[i];
1039 allocno_to_order[num] = i;
1040 COPY_HARD_REG_SET (temp, allocno[num].hard_reg_conflicts);
1042 if (allocno[num].calls_crossed == 0)
1043 IOR_HARD_REG_SET (temp, fixed_reg_set);
1044 else
1045 IOR_HARD_REG_SET (temp, call_used_reg_set);
1047 IOR_COMPL_HARD_REG_SET
1048 (temp,
1049 reg_class_contents[(int) reg_preferred_class (allocno[num].reg)]);
1051 AND_COMPL_HARD_REG_SET (allocno[num].hard_reg_preferences, temp);
1052 AND_COMPL_HARD_REG_SET (allocno[num].hard_reg_copy_preferences, temp);
1053 AND_COMPL_HARD_REG_SET (allocno[num].hard_reg_full_preferences, temp);
1056 for (i = max_allocno - 1; i >= 0; i--)
1058 /* Merge in the preferences of lower-priority registers (they have
1059 already been pruned). If we also prefer some of those registers,
1060 don't exclude them unless we are of a smaller size (in which case
1061 we want to give the lower-priority allocno the first chance for
1062 these registers). */
1063 HARD_REG_SET temp, temp2;
1064 int allocno2;
1066 num = allocno_order[i];
1068 CLEAR_HARD_REG_SET (temp);
1069 CLEAR_HARD_REG_SET (temp2);
1071 EXECUTE_IF_SET_IN_ALLOCNO_SET (conflicts + num * allocno_row_words,
1072 allocno2,
1074 if (allocno_to_order[allocno2] > i)
1076 if (allocno[allocno2].size <= allocno[num].size)
1077 IOR_HARD_REG_SET (temp,
1078 allocno[allocno2].hard_reg_full_preferences);
1079 else
1080 IOR_HARD_REG_SET (temp2,
1081 allocno[allocno2].hard_reg_full_preferences);
1085 AND_COMPL_HARD_REG_SET (temp, allocno[num].hard_reg_full_preferences);
1086 IOR_HARD_REG_SET (temp, temp2);
1087 COPY_HARD_REG_SET (allocno[num].regs_someone_prefers, temp);
1089 free (allocno_to_order);
1092 /* Assign a hard register to allocno NUM; look for one that is the beginning
1093 of a long enough stretch of hard regs none of which conflicts with ALLOCNO.
1094 The registers marked in PREFREGS are tried first.
1096 LOSERS, if nonzero, is a HARD_REG_SET indicating registers that cannot
1097 be used for this allocation.
1099 If ALT_REGS_P is zero, consider only the preferred class of ALLOCNO's reg.
1100 Otherwise ignore that preferred class and use the alternate class.
1102 If ACCEPT_CALL_CLOBBERED is nonzero, accept a call-clobbered hard reg that
1103 will have to be saved and restored at calls.
1105 RETRYING is nonzero if this is called from retry_global_alloc.
1107 If we find one, record it in reg_renumber.
1108 If not, do nothing. */
1110 static void
1111 find_reg (int num, HARD_REG_SET losers, int alt_regs_p, int accept_call_clobbered, int retrying)
1113 int i, best_reg, pass;
1114 HARD_REG_SET used, used1, used2;
1116 enum reg_class class = (alt_regs_p
1117 ? reg_alternate_class (allocno[num].reg)
1118 : reg_preferred_class (allocno[num].reg));
1119 enum machine_mode mode = PSEUDO_REGNO_MODE (allocno[num].reg);
1121 if (accept_call_clobbered)
1122 COPY_HARD_REG_SET (used1, call_fixed_reg_set);
1123 else if (allocno[num].calls_crossed == 0)
1124 COPY_HARD_REG_SET (used1, fixed_reg_set);
1125 else
1126 COPY_HARD_REG_SET (used1, call_used_reg_set);
1128 /* Some registers should not be allocated in global-alloc. */
1129 IOR_HARD_REG_SET (used1, no_global_alloc_regs);
1130 if (losers)
1131 IOR_HARD_REG_SET (used1, losers);
1133 IOR_COMPL_HARD_REG_SET (used1, reg_class_contents[(int) class]);
1134 COPY_HARD_REG_SET (used2, used1);
1136 IOR_HARD_REG_SET (used1, allocno[num].hard_reg_conflicts);
1138 #ifdef CANNOT_CHANGE_MODE_CLASS
1139 cannot_change_mode_set_regs (&used1, mode, allocno[num].reg);
1140 #endif
1142 /* Try each hard reg to see if it fits. Do this in two passes.
1143 In the first pass, skip registers that are preferred by some other pseudo
1144 to give it a better chance of getting one of those registers. Only if
1145 we can't get a register when excluding those do we take one of them.
1146 However, we never allocate a register for the first time in pass 0. */
1148 COPY_HARD_REG_SET (used, used1);
1149 IOR_COMPL_HARD_REG_SET (used, regs_used_so_far);
1150 IOR_HARD_REG_SET (used, allocno[num].regs_someone_prefers);
1152 best_reg = -1;
1153 for (i = FIRST_PSEUDO_REGISTER, pass = 0;
1154 pass <= 1 && i >= FIRST_PSEUDO_REGISTER;
1155 pass++)
1157 if (pass == 1)
1158 COPY_HARD_REG_SET (used, used1);
1159 for (i = 0; i < FIRST_PSEUDO_REGISTER; i++)
1161 #ifdef REG_ALLOC_ORDER
1162 int regno = reg_alloc_order[i];
1163 #else
1164 int regno = i;
1165 #endif
1166 if (! TEST_HARD_REG_BIT (used, regno)
1167 && HARD_REGNO_MODE_OK (regno, mode)
1168 && (allocno[num].calls_crossed == 0
1169 || accept_call_clobbered
1170 || ! HARD_REGNO_CALL_PART_CLOBBERED (regno, mode)))
1172 int j;
1173 int lim = end_hard_regno (mode, regno);
1174 for (j = regno + 1;
1175 (j < lim
1176 && ! TEST_HARD_REG_BIT (used, j));
1177 j++);
1178 if (j == lim)
1180 best_reg = regno;
1181 break;
1183 #ifndef REG_ALLOC_ORDER
1184 i = j; /* Skip starting points we know will lose */
1185 #endif
1190 /* See if there is a preferred register with the same class as the register
1191 we allocated above. Making this restriction prevents register
1192 preferencing from creating worse register allocation.
1194 Remove from the preferred registers and conflicting registers. Note that
1195 additional conflicts may have been added after `prune_preferences' was
1196 called.
1198 First do this for those register with copy preferences, then all
1199 preferred registers. */
1201 AND_COMPL_HARD_REG_SET (allocno[num].hard_reg_copy_preferences, used);
1202 if (!hard_reg_set_empty_p (allocno[num].hard_reg_copy_preferences)
1203 && best_reg >= 0)
1205 for (i = 0; i < FIRST_PSEUDO_REGISTER; i++)
1206 if (TEST_HARD_REG_BIT (allocno[num].hard_reg_copy_preferences, i)
1207 && HARD_REGNO_MODE_OK (i, mode)
1208 && (allocno[num].calls_crossed == 0
1209 || accept_call_clobbered
1210 || ! HARD_REGNO_CALL_PART_CLOBBERED (i, mode))
1211 && (REGNO_REG_CLASS (i) == REGNO_REG_CLASS (best_reg)
1212 || reg_class_subset_p (REGNO_REG_CLASS (i),
1213 REGNO_REG_CLASS (best_reg))
1214 || reg_class_subset_p (REGNO_REG_CLASS (best_reg),
1215 REGNO_REG_CLASS (i))))
1217 int j;
1218 int lim = end_hard_regno (mode, i);
1219 for (j = i + 1;
1220 (j < lim
1221 && ! TEST_HARD_REG_BIT (used, j)
1222 && (REGNO_REG_CLASS (j)
1223 == REGNO_REG_CLASS (best_reg + (j - i))
1224 || reg_class_subset_p (REGNO_REG_CLASS (j),
1225 REGNO_REG_CLASS (best_reg + (j - i)))
1226 || reg_class_subset_p (REGNO_REG_CLASS (best_reg + (j - i)),
1227 REGNO_REG_CLASS (j))));
1228 j++);
1229 if (j == lim)
1231 best_reg = i;
1232 goto no_prefs;
1237 AND_COMPL_HARD_REG_SET (allocno[num].hard_reg_preferences, used);
1238 if (!hard_reg_set_empty_p (allocno[num].hard_reg_preferences)
1239 && best_reg >= 0)
1241 for (i = 0; i < FIRST_PSEUDO_REGISTER; i++)
1242 if (TEST_HARD_REG_BIT (allocno[num].hard_reg_preferences, i)
1243 && HARD_REGNO_MODE_OK (i, mode)
1244 && (allocno[num].calls_crossed == 0
1245 || accept_call_clobbered
1246 || ! HARD_REGNO_CALL_PART_CLOBBERED (i, mode))
1247 && (REGNO_REG_CLASS (i) == REGNO_REG_CLASS (best_reg)
1248 || reg_class_subset_p (REGNO_REG_CLASS (i),
1249 REGNO_REG_CLASS (best_reg))
1250 || reg_class_subset_p (REGNO_REG_CLASS (best_reg),
1251 REGNO_REG_CLASS (i))))
1253 int j;
1254 int lim = end_hard_regno (mode, i);
1255 for (j = i + 1;
1256 (j < lim
1257 && ! TEST_HARD_REG_BIT (used, j)
1258 && (REGNO_REG_CLASS (j)
1259 == REGNO_REG_CLASS (best_reg + (j - i))
1260 || reg_class_subset_p (REGNO_REG_CLASS (j),
1261 REGNO_REG_CLASS (best_reg + (j - i)))
1262 || reg_class_subset_p (REGNO_REG_CLASS (best_reg + (j - i)),
1263 REGNO_REG_CLASS (j))));
1264 j++);
1265 if (j == lim)
1267 best_reg = i;
1268 break;
1272 no_prefs:
1274 /* If we haven't succeeded yet, try with caller-saves.
1275 We need not check to see if the current function has nonlocal
1276 labels because we don't put any pseudos that are live over calls in
1277 registers in that case. */
1279 if (flag_caller_saves && best_reg < 0)
1281 /* Did not find a register. If it would be profitable to
1282 allocate a call-clobbered register and save and restore it
1283 around calls, do that. Don't do this if it crosses any calls
1284 that might throw. */
1285 if (! accept_call_clobbered
1286 && allocno[num].calls_crossed != 0
1287 && allocno[num].throwing_calls_crossed == 0
1288 && CALLER_SAVE_PROFITABLE (allocno[num].n_refs,
1289 allocno[num].calls_crossed))
1291 HARD_REG_SET new_losers;
1292 if (! losers)
1293 CLEAR_HARD_REG_SET (new_losers);
1294 else
1295 COPY_HARD_REG_SET (new_losers, losers);
1297 IOR_HARD_REG_SET(new_losers, losing_caller_save_reg_set);
1298 find_reg (num, new_losers, alt_regs_p, 1, retrying);
1299 if (reg_renumber[allocno[num].reg] >= 0)
1301 caller_save_needed = 1;
1302 return;
1307 /* If we haven't succeeded yet,
1308 see if some hard reg that conflicts with us
1309 was utilized poorly by local-alloc.
1310 If so, kick out the regs that were put there by local-alloc
1311 so we can use it instead. */
1312 if (best_reg < 0 && !retrying
1313 /* Let's not bother with multi-reg allocnos. */
1314 && allocno[num].size == 1
1315 && REG_BASIC_BLOCK (allocno[num].reg) == REG_BLOCK_GLOBAL)
1317 /* Count from the end, to find the least-used ones first. */
1318 for (i = FIRST_PSEUDO_REGISTER - 1; i >= 0; i--)
1320 #ifdef REG_ALLOC_ORDER
1321 int regno = reg_alloc_order[i];
1322 #else
1323 int regno = i;
1324 #endif
1326 if (local_reg_n_refs[regno] != 0
1327 /* Don't use a reg no good for this pseudo. */
1328 && ! TEST_HARD_REG_BIT (used2, regno)
1329 && HARD_REGNO_MODE_OK (regno, mode)
1330 /* The code below assumes that we need only a single
1331 register, but the check of allocno[num].size above
1332 was not enough. Sometimes we need more than one
1333 register for a single-word value. */
1334 && hard_regno_nregs[regno][mode] == 1
1335 && (allocno[num].calls_crossed == 0
1336 || accept_call_clobbered
1337 || ! HARD_REGNO_CALL_PART_CLOBBERED (regno, mode))
1338 #ifdef CANNOT_CHANGE_MODE_CLASS
1339 && ! invalid_mode_change_p (regno, REGNO_REG_CLASS (regno),
1340 mode)
1341 #endif
1342 #ifdef STACK_REGS
1343 && (!allocno[num].no_stack_reg
1344 || regno < FIRST_STACK_REG || regno > LAST_STACK_REG)
1345 #endif
1348 /* We explicitly evaluate the divide results into temporary
1349 variables so as to avoid excess precision problems that occur
1350 on an i386-unknown-sysv4.2 (unixware) host. */
1352 double tmp1 = ((double) local_reg_freq[regno] * local_reg_n_refs[regno]
1353 / local_reg_live_length[regno]);
1354 double tmp2 = ((double) allocno[num].freq * allocno[num].n_refs
1355 / allocno[num].live_length);
1357 if (tmp1 < tmp2)
1359 /* Hard reg REGNO was used less in total by local regs
1360 than it would be used by this one allocno! */
1361 int k;
1362 if (dump_file)
1364 fprintf (dump_file, "Regno %d better for global %d, ",
1365 regno, allocno[num].reg);
1366 fprintf (dump_file, "fr:%d, ll:%d, nr:%d ",
1367 allocno[num].freq, allocno[num].live_length,
1368 allocno[num].n_refs);
1369 fprintf (dump_file, "(was: fr:%d, ll:%d, nr:%d)\n",
1370 local_reg_freq[regno],
1371 local_reg_live_length[regno],
1372 local_reg_n_refs[regno]);
1375 for (k = 0; k < max_regno; k++)
1376 if (reg_renumber[k] >= 0)
1378 int r = reg_renumber[k];
1379 int endregno
1380 = end_hard_regno (PSEUDO_REGNO_MODE (k), r);
1382 if (regno >= r && regno < endregno)
1384 if (dump_file)
1385 fprintf (dump_file,
1386 "Local Reg %d now on stack\n", k);
1387 reg_renumber[k] = -1;
1391 best_reg = regno;
1392 break;
1398 /* Did we find a register? */
1400 if (best_reg >= 0)
1402 int lim, j;
1403 HARD_REG_SET this_reg;
1405 /* Yes. Record it as the hard register of this pseudo-reg. */
1406 reg_renumber[allocno[num].reg] = best_reg;
1408 /* Make a set of the hard regs being allocated. */
1409 CLEAR_HARD_REG_SET (this_reg);
1410 lim = end_hard_regno (mode, best_reg);
1411 for (j = best_reg; j < lim; j++)
1413 SET_HARD_REG_BIT (this_reg, j);
1414 SET_HARD_REG_BIT (regs_used_so_far, j);
1415 /* This is no longer a reg used just by local regs. */
1416 local_reg_n_refs[j] = 0;
1417 local_reg_freq[j] = 0;
1419 /* For each other pseudo-reg conflicting with this one,
1420 mark it as conflicting with the hard regs this one occupies. */
1421 lim = num;
1422 EXECUTE_IF_SET_IN_ALLOCNO_SET (conflicts + lim * allocno_row_words, j,
1424 IOR_HARD_REG_SET (allocno[j].hard_reg_conflicts, this_reg);
1429 /* Called from `reload' to look for a hard reg to put pseudo reg REGNO in.
1430 Perhaps it had previously seemed not worth a hard reg,
1431 or perhaps its old hard reg has been commandeered for reloads.
1432 FORBIDDEN_REGS indicates certain hard regs that may not be used, even if
1433 they do not appear to be allocated.
1434 If FORBIDDEN_REGS is zero, no regs are forbidden. */
1436 void
1437 retry_global_alloc (int regno, HARD_REG_SET forbidden_regs)
1439 int alloc_no = reg_allocno[regno];
1440 if (alloc_no >= 0)
1442 /* If we have more than one register class,
1443 first try allocating in the class that is cheapest
1444 for this pseudo-reg. If that fails, try any reg. */
1445 if (N_REG_CLASSES > 1)
1446 find_reg (alloc_no, forbidden_regs, 0, 0, 1);
1447 if (reg_renumber[regno] < 0
1448 && reg_alternate_class (regno) != NO_REGS)
1449 find_reg (alloc_no, forbidden_regs, 1, 0, 1);
1451 /* If we found a register, modify the RTL for the register to
1452 show the hard register, and mark that register live. */
1453 if (reg_renumber[regno] >= 0)
1455 SET_REGNO (regno_reg_rtx[regno], reg_renumber[regno]);
1456 mark_home_live (regno);
1461 /* Record a conflict between register REGNO
1462 and everything currently live.
1463 REGNO must not be a pseudo reg that was allocated
1464 by local_alloc; such numbers must be translated through
1465 reg_renumber before calling here. */
1467 static void
1468 record_one_conflict (int regno)
1470 int j;
1472 if (regno < FIRST_PSEUDO_REGISTER)
1473 /* When a hard register becomes live,
1474 record conflicts with live pseudo regs. */
1475 EXECUTE_IF_SET_IN_ALLOCNO_SET (allocnos_live, j,
1477 SET_HARD_REG_BIT (allocno[j].hard_reg_conflicts, regno);
1479 else
1480 /* When a pseudo-register becomes live,
1481 record conflicts first with hard regs,
1482 then with other pseudo regs. */
1484 int ialloc = reg_allocno[regno];
1485 int ialloc_prod = ialloc * allocno_row_words;
1487 IOR_HARD_REG_SET (allocno[ialloc].hard_reg_conflicts, hard_regs_live);
1488 for (j = allocno_row_words - 1; j >= 0; j--)
1489 conflicts[ialloc_prod + j] |= allocnos_live[j];
1493 /* Record all allocnos currently live as conflicting
1494 with all hard regs currently live.
1496 ALLOCNO_VEC is a vector of LEN allocnos, all allocnos that
1497 are currently live. Their bits are also flagged in allocnos_live. */
1499 static void
1500 record_conflicts (int *allocno_vec, int len)
1502 while (--len >= 0)
1503 IOR_HARD_REG_SET (allocno[allocno_vec[len]].hard_reg_conflicts,
1504 hard_regs_live);
1507 /* If CONFLICTP (i, j) is true, make sure CONFLICTP (j, i) is also true. */
1508 static void
1509 mirror_conflicts (void)
1511 int i, j;
1512 int rw = allocno_row_words;
1513 int rwb = rw * INT_BITS;
1514 INT_TYPE *p = conflicts;
1515 INT_TYPE *q0 = conflicts, *q1, *q2;
1516 unsigned INT_TYPE mask;
1518 for (i = max_allocno - 1, mask = 1; i >= 0; i--, mask <<= 1)
1520 if (! mask)
1522 mask = 1;
1523 q0++;
1525 for (j = allocno_row_words - 1, q1 = q0; j >= 0; j--, q1 += rwb)
1527 unsigned INT_TYPE word;
1529 for (word = (unsigned INT_TYPE) *p++, q2 = q1; word;
1530 word >>= 1, q2 += rw)
1532 if (word & 1)
1533 *q2 |= mask;
1539 /* Handle the case where REG is set by the insn being scanned,
1540 during the forward scan to accumulate conflicts.
1541 Store a 1 in regs_live or allocnos_live for this register, record how many
1542 consecutive hardware registers it actually needs,
1543 and record a conflict with all other registers already live.
1545 Note that even if REG does not remain alive after this insn,
1546 we must mark it here as live, to ensure a conflict between
1547 REG and any other regs set in this insn that really do live.
1548 This is because those other regs could be considered after this.
1550 REG might actually be something other than a register;
1551 if so, we do nothing.
1553 SETTER is 0 if this register was modified by an auto-increment (i.e.,
1554 a REG_INC note was found for it). */
1556 static void
1557 mark_reg_store (rtx reg, const_rtx setter, void *data ATTRIBUTE_UNUSED)
1559 int regno;
1561 if (GET_CODE (reg) == SUBREG)
1562 reg = SUBREG_REG (reg);
1564 if (!REG_P (reg))
1565 return;
1567 VEC_safe_push (rtx, heap, regs_set, reg);
1569 if (setter && GET_CODE (setter) != CLOBBER)
1570 set_preference (reg, SET_SRC (setter));
1572 regno = REGNO (reg);
1574 /* Either this is one of the max_allocno pseudo regs not allocated,
1575 or it is or has a hardware reg. First handle the pseudo-regs. */
1576 if (regno >= FIRST_PSEUDO_REGISTER)
1578 if (reg_allocno[regno] >= 0)
1580 SET_ALLOCNO_LIVE (reg_allocno[regno]);
1581 record_one_conflict (regno);
1585 if (reg_renumber[regno] >= 0)
1586 regno = reg_renumber[regno];
1588 /* Handle hardware regs (and pseudos allocated to hard regs). */
1589 if (regno < FIRST_PSEUDO_REGISTER && ! fixed_regs[regno])
1591 int last = end_hard_regno (GET_MODE (reg), regno);
1592 while (regno < last)
1594 record_one_conflict (regno);
1595 SET_HARD_REG_BIT (hard_regs_live, regno);
1596 regno++;
1601 /* Like mark_reg_store except notice just CLOBBERs; ignore SETs. */
1603 static void
1604 mark_reg_clobber (rtx reg, const_rtx setter, void *data)
1606 if (GET_CODE (setter) == CLOBBER)
1607 mark_reg_store (reg, setter, data);
1610 /* Record that REG has conflicts with all the regs currently live.
1611 Do not mark REG itself as live. */
1613 static void
1614 mark_reg_conflicts (rtx reg)
1616 int regno;
1618 if (GET_CODE (reg) == SUBREG)
1619 reg = SUBREG_REG (reg);
1621 if (!REG_P (reg))
1622 return;
1624 regno = REGNO (reg);
1626 /* Either this is one of the max_allocno pseudo regs not allocated,
1627 or it is or has a hardware reg. First handle the pseudo-regs. */
1628 if (regno >= FIRST_PSEUDO_REGISTER)
1630 if (reg_allocno[regno] >= 0)
1631 record_one_conflict (regno);
1634 if (reg_renumber[regno] >= 0)
1635 regno = reg_renumber[regno];
1637 /* Handle hardware regs (and pseudos allocated to hard regs). */
1638 if (regno < FIRST_PSEUDO_REGISTER && ! fixed_regs[regno])
1640 int last = end_hard_regno (GET_MODE (reg), regno);
1641 while (regno < last)
1643 record_one_conflict (regno);
1644 regno++;
1649 /* Mark REG as being dead (following the insn being scanned now).
1650 Store a 0 in regs_live or allocnos_live for this register. */
1652 static void
1653 mark_reg_death (rtx reg)
1655 int regno = REGNO (reg);
1657 /* Either this is one of the max_allocno pseudo regs not allocated,
1658 or it is a hardware reg. First handle the pseudo-regs. */
1659 if (regno >= FIRST_PSEUDO_REGISTER)
1661 if (reg_allocno[regno] >= 0)
1662 CLEAR_ALLOCNO_LIVE (reg_allocno[regno]);
1665 /* For pseudo reg, see if it has been assigned a hardware reg. */
1666 if (reg_renumber[regno] >= 0)
1667 regno = reg_renumber[regno];
1669 /* Handle hardware regs (and pseudos allocated to hard regs). */
1670 if (regno < FIRST_PSEUDO_REGISTER && ! fixed_regs[regno])
1671 /* Pseudo regs already assigned hardware regs are treated
1672 almost the same as explicit hardware regs. */
1673 remove_from_hard_reg_set (&hard_regs_live, GET_MODE (reg), regno);
1676 /* Try to set a preference for an allocno to a hard register.
1677 We are passed DEST and SRC which are the operands of a SET. It is known
1678 that SRC is a register. If SRC or the first operand of SRC is a register,
1679 try to set a preference. If one of the two is a hard register and the other
1680 is a pseudo-register, mark the preference.
1682 Note that we are not as aggressive as local-alloc in trying to tie a
1683 pseudo-register to a hard register. */
1685 static void
1686 set_preference (rtx dest, rtx src)
1688 unsigned int src_regno, dest_regno, end_regno;
1689 /* Amount to add to the hard regno for SRC, or subtract from that for DEST,
1690 to compensate for subregs in SRC or DEST. */
1691 int offset = 0;
1692 unsigned int i;
1693 int copy = 1;
1695 if (GET_RTX_FORMAT (GET_CODE (src))[0] == 'e')
1696 src = XEXP (src, 0), copy = 0;
1698 /* Get the reg number for both SRC and DEST.
1699 If neither is a reg, give up. */
1701 if (REG_P (src))
1702 src_regno = REGNO (src);
1703 else if (GET_CODE (src) == SUBREG && REG_P (SUBREG_REG (src)))
1705 src_regno = REGNO (SUBREG_REG (src));
1707 if (REGNO (SUBREG_REG (src)) < FIRST_PSEUDO_REGISTER)
1708 offset += subreg_regno_offset (REGNO (SUBREG_REG (src)),
1709 GET_MODE (SUBREG_REG (src)),
1710 SUBREG_BYTE (src),
1711 GET_MODE (src));
1712 else
1713 offset += (SUBREG_BYTE (src)
1714 / REGMODE_NATURAL_SIZE (GET_MODE (src)));
1716 else
1717 return;
1719 if (REG_P (dest))
1720 dest_regno = REGNO (dest);
1721 else if (GET_CODE (dest) == SUBREG && REG_P (SUBREG_REG (dest)))
1723 dest_regno = REGNO (SUBREG_REG (dest));
1725 if (REGNO (SUBREG_REG (dest)) < FIRST_PSEUDO_REGISTER)
1726 offset -= subreg_regno_offset (REGNO (SUBREG_REG (dest)),
1727 GET_MODE (SUBREG_REG (dest)),
1728 SUBREG_BYTE (dest),
1729 GET_MODE (dest));
1730 else
1731 offset -= (SUBREG_BYTE (dest)
1732 / REGMODE_NATURAL_SIZE (GET_MODE (dest)));
1734 else
1735 return;
1737 /* Convert either or both to hard reg numbers. */
1739 if (reg_renumber[src_regno] >= 0)
1740 src_regno = reg_renumber[src_regno];
1742 if (reg_renumber[dest_regno] >= 0)
1743 dest_regno = reg_renumber[dest_regno];
1745 /* Now if one is a hard reg and the other is a global pseudo
1746 then give the other a preference. */
1748 if (dest_regno < FIRST_PSEUDO_REGISTER && src_regno >= FIRST_PSEUDO_REGISTER
1749 && reg_allocno[src_regno] >= 0)
1751 dest_regno -= offset;
1752 if (dest_regno < FIRST_PSEUDO_REGISTER)
1754 if (copy)
1755 SET_REGBIT (hard_reg_copy_preferences,
1756 reg_allocno[src_regno], dest_regno);
1758 SET_REGBIT (hard_reg_preferences,
1759 reg_allocno[src_regno], dest_regno);
1760 end_regno = end_hard_regno (GET_MODE (dest), dest_regno);
1761 for (i = dest_regno; i < end_regno; i++)
1762 SET_REGBIT (hard_reg_full_preferences, reg_allocno[src_regno], i);
1766 if (src_regno < FIRST_PSEUDO_REGISTER && dest_regno >= FIRST_PSEUDO_REGISTER
1767 && reg_allocno[dest_regno] >= 0)
1769 src_regno += offset;
1770 if (src_regno < FIRST_PSEUDO_REGISTER)
1772 if (copy)
1773 SET_REGBIT (hard_reg_copy_preferences,
1774 reg_allocno[dest_regno], src_regno);
1776 SET_REGBIT (hard_reg_preferences,
1777 reg_allocno[dest_regno], src_regno);
1778 end_regno = end_hard_regno (GET_MODE (src), src_regno);
1779 for (i = src_regno; i < end_regno; i++)
1780 SET_REGBIT (hard_reg_full_preferences, reg_allocno[dest_regno], i);
1785 /* Indicate that hard register number FROM was eliminated and replaced with
1786 an offset from hard register number TO. The status of hard registers live
1787 at the start of a basic block is updated by replacing a use of FROM with
1788 a use of TO. */
1790 void
1791 mark_elimination (int from, int to)
1793 basic_block bb;
1795 FOR_EACH_BB (bb)
1797 regset r = (flag_ira ? DF_LR_IN (bb) : DF_RA_LIVE_IN (bb));
1798 if (REGNO_REG_SET_P (r, from))
1800 CLEAR_REGNO_REG_SET (r, from);
1801 SET_REGNO_REG_SET (r, to);
1806 /* Used for communication between the following functions. Holds the
1807 current life information. */
1808 static regset live_relevant_regs;
1810 /* Record in live_relevant_regs and REGS_SET that register REG became live.
1811 This is called via note_stores. */
1812 static void
1813 reg_becomes_live (rtx reg, const_rtx setter ATTRIBUTE_UNUSED, void *regs_set)
1815 int regno;
1817 if (GET_CODE (reg) == SUBREG)
1818 reg = SUBREG_REG (reg);
1820 if (!REG_P (reg))
1821 return;
1823 regno = REGNO (reg);
1824 if (regno < FIRST_PSEUDO_REGISTER)
1826 int nregs = hard_regno_nregs[regno][GET_MODE (reg)];
1827 while (nregs-- > 0)
1829 if (GET_CODE (setter) == CLOBBER)
1830 CLEAR_REGNO_REG_SET (live_relevant_regs, regno);
1831 else
1832 SET_REGNO_REG_SET (live_relevant_regs, regno);
1834 if (!fixed_regs[regno])
1835 SET_REGNO_REG_SET ((regset) regs_set, regno);
1836 regno++;
1839 else if (reg_renumber[regno] >= 0 || flag_ira)
1841 if (GET_CODE (setter) == CLOBBER)
1842 CLEAR_REGNO_REG_SET (live_relevant_regs, regno);
1843 else
1844 SET_REGNO_REG_SET (live_relevant_regs, regno);
1845 SET_REGNO_REG_SET ((regset) regs_set, regno);
1849 /* Record in live_relevant_regs that register REGNO died. */
1850 static void
1851 reg_dies (int regno, enum machine_mode mode, struct insn_chain *chain)
1853 if (regno < FIRST_PSEUDO_REGISTER)
1855 int nregs = hard_regno_nregs[regno][mode];
1856 while (nregs-- > 0)
1858 CLEAR_REGNO_REG_SET (live_relevant_regs, regno);
1859 if (! fixed_regs[regno])
1860 SET_REGNO_REG_SET (&chain->dead_or_set, regno);
1861 regno++;
1864 else
1866 CLEAR_REGNO_REG_SET (live_relevant_regs, regno);
1867 if (reg_renumber[regno] >= 0 || flag_ira)
1868 SET_REGNO_REG_SET (&chain->dead_or_set, regno);
1872 /* Walk the insns of the current function and build reload_insn_chain,
1873 and record register life information. */
1874 void
1875 build_insn_chain (rtx first)
1877 struct insn_chain **p = &reload_insn_chain;
1878 struct insn_chain *prev = 0;
1879 basic_block b = ENTRY_BLOCK_PTR->next_bb;
1881 live_relevant_regs = ALLOC_REG_SET (&reg_obstack);
1882 for (; first; first = NEXT_INSN (first))
1884 struct insn_chain *c;
1886 if (first == BB_HEAD (b))
1888 unsigned i;
1889 bitmap_iterator bi;
1891 CLEAR_REG_SET (live_relevant_regs);
1893 EXECUTE_IF_SET_IN_BITMAP (df_get_live_top (b), 0, i, bi)
1895 if (i < FIRST_PSEUDO_REGISTER
1896 ? ! TEST_HARD_REG_BIT (eliminable_regset, i)
1897 : reg_renumber[i] >= 0 || flag_ira)
1898 SET_REGNO_REG_SET (live_relevant_regs, i);
1902 if (!NOTE_P (first) && !BARRIER_P (first))
1904 c = new_insn_chain ();
1905 c->prev = prev;
1906 prev = c;
1907 *p = c;
1908 p = &c->next;
1909 c->insn = first;
1910 c->block = b->index;
1912 if (INSN_P (first))
1914 rtx link;
1916 /* Mark the death of everything that dies in this instruction. */
1918 for (link = REG_NOTES (first); link; link = XEXP (link, 1))
1919 if (REG_NOTE_KIND (link) == REG_DEAD
1920 && REG_P (XEXP (link, 0)))
1921 reg_dies (REGNO (XEXP (link, 0)), GET_MODE (XEXP (link, 0)),
1924 COPY_REG_SET (&c->live_throughout, live_relevant_regs);
1926 /* Mark everything born in this instruction as live. */
1928 note_stores (PATTERN (first), reg_becomes_live,
1929 &c->dead_or_set);
1931 else
1932 COPY_REG_SET (&c->live_throughout, live_relevant_regs);
1934 if (INSN_P (first))
1936 rtx link;
1938 /* Mark anything that is set in this insn and then unused as dying. */
1940 for (link = REG_NOTES (first); link; link = XEXP (link, 1))
1941 if (REG_NOTE_KIND (link) == REG_UNUSED
1942 && REG_P (XEXP (link, 0)))
1943 reg_dies (REGNO (XEXP (link, 0)), GET_MODE (XEXP (link, 0)),
1948 if (first == BB_END (b))
1949 b = b->next_bb;
1951 /* Stop after we pass the end of the last basic block. Verify that
1952 no real insns are after the end of the last basic block.
1954 We may want to reorganize the loop somewhat since this test should
1955 always be the right exit test. Allow an ADDR_VEC or ADDR_DIF_VEC if
1956 the previous real insn is a JUMP_INSN. */
1957 if (b == EXIT_BLOCK_PTR)
1959 #ifdef ENABLE_CHECKING
1960 for (first = NEXT_INSN (first); first; first = NEXT_INSN (first))
1961 gcc_assert (!INSN_P (first)
1962 || GET_CODE (PATTERN (first)) == USE
1963 || ((GET_CODE (PATTERN (first)) == ADDR_VEC
1964 || GET_CODE (PATTERN (first)) == ADDR_DIFF_VEC)
1965 && prev_real_insn (first) != 0
1966 && JUMP_P (prev_real_insn (first))));
1967 #endif
1968 break;
1971 FREE_REG_SET (live_relevant_regs);
1972 *p = 0;
1975 /* Print debugging trace information if -dg switch is given,
1976 showing the information on which the allocation decisions are based. */
1978 static void
1979 dump_conflicts (FILE *file)
1981 int i;
1982 int has_preferences;
1983 int nregs;
1984 nregs = 0;
1985 for (i = 0; i < max_allocno; i++)
1987 if (reg_renumber[allocno[allocno_order[i]].reg] >= 0)
1988 continue;
1989 nregs++;
1991 fprintf (file, ";; %d regs to allocate:", nregs);
1992 for (i = 0; i < max_allocno; i++)
1994 int j;
1995 if (reg_renumber[allocno[allocno_order[i]].reg] >= 0)
1996 continue;
1997 fprintf (file, " %d", allocno[allocno_order[i]].reg);
1998 for (j = 0; j < max_regno; j++)
1999 if (reg_allocno[j] == allocno_order[i]
2000 && j != allocno[allocno_order[i]].reg)
2001 fprintf (file, "+%d", j);
2002 if (allocno[allocno_order[i]].size != 1)
2003 fprintf (file, " (%d)", allocno[allocno_order[i]].size);
2005 fprintf (file, "\n");
2007 for (i = 0; i < max_allocno; i++)
2009 int j;
2010 fprintf (file, ";; %d conflicts:", allocno[i].reg);
2011 for (j = 0; j < max_allocno; j++)
2012 if (CONFLICTP (j, i))
2013 fprintf (file, " %d", allocno[j].reg);
2014 for (j = 0; j < FIRST_PSEUDO_REGISTER; j++)
2015 if (TEST_HARD_REG_BIT (allocno[i].hard_reg_conflicts, j))
2016 fprintf (file, " %d", j);
2017 fprintf (file, "\n");
2019 has_preferences = 0;
2020 for (j = 0; j < FIRST_PSEUDO_REGISTER; j++)
2021 if (TEST_HARD_REG_BIT (allocno[i].hard_reg_preferences, j))
2022 has_preferences = 1;
2024 if (! has_preferences)
2025 continue;
2026 fprintf (file, ";; %d preferences:", allocno[i].reg);
2027 for (j = 0; j < FIRST_PSEUDO_REGISTER; j++)
2028 if (TEST_HARD_REG_BIT (allocno[i].hard_reg_preferences, j))
2029 fprintf (file, " %d", j);
2030 fprintf (file, "\n");
2032 fprintf (file, "\n");
2035 void
2036 dump_global_regs (FILE *file)
2038 int i, j;
2040 fprintf (file, ";; Register dispositions:\n");
2041 for (i = FIRST_PSEUDO_REGISTER, j = 0; i < max_regno; i++)
2042 if (reg_renumber[i] >= 0)
2044 fprintf (file, "%d in %d ", i, reg_renumber[i]);
2045 if (++j % 6 == 0)
2046 fprintf (file, "\n");
2049 fprintf (file, "\n\n;; Hard regs used: ");
2050 for (i = 0; i < FIRST_PSEUDO_REGISTER; i++)
2051 if (df_regs_ever_live_p (i))
2052 fprintf (file, " %d", i);
2053 fprintf (file, "\n\n");
2057 static bool
2058 gate_handle_global_alloc (void)
2060 return ! flag_ira;
2063 /* Run old register allocator. Return TRUE if we must exit
2064 rest_of_compilation upon return. */
2065 static unsigned int
2066 rest_of_handle_global_alloc (void)
2068 bool failure;
2070 /* If optimizing, allocate remaining pseudo-regs. Do the reload
2071 pass fixing up any insns that are invalid. */
2072 if (optimize && dbg_cnt (global_alloc_at_func))
2073 failure = global_alloc ();
2074 else
2076 compute_regsets (&eliminable_regset, &no_global_alloc_regs);
2077 build_insn_chain (get_insns ());
2078 df_set_flags (DF_NO_INSN_RESCAN);
2079 failure = reload (get_insns (), 0);
2082 if (dump_enabled_p (pass_global_alloc.static_pass_number))
2084 timevar_push (TV_DUMP);
2085 dump_global_regs (dump_file);
2086 timevar_pop (TV_DUMP);
2089 /* FIXME: This appears on the surface to be wrong thing to be doing.
2090 So much of the compiler is designed to check reload_completed to
2091 see if it is running after reload that seems doomed to failure.
2092 We should be returning a value that says that we have found
2093 errors so that nothing but the cleanup passes are run
2094 afterwards. */
2095 gcc_assert (reload_completed || failure);
2096 reload_completed = !failure;
2098 /* The world has changed so much that at this point we might as well
2099 just rescan everything. Not that df_rescan_all_insns is not
2100 going to help here because it does not touch the artificial uses
2101 and defs. */
2102 df_finish_pass (true);
2103 if (optimize > 1)
2104 df_live_add_problem ();
2105 df_scan_alloc (NULL);
2106 df_scan_blocks ();
2108 if (optimize)
2109 df_analyze ();
2111 regstat_free_n_sets_and_refs ();
2112 regstat_free_ri ();
2113 return 0;
2116 struct tree_opt_pass pass_global_alloc =
2118 "greg", /* name */
2119 gate_handle_global_alloc, /* gate */
2120 rest_of_handle_global_alloc, /* execute */
2121 NULL, /* sub */
2122 NULL, /* next */
2123 0, /* static_pass_number */
2124 TV_GLOBAL_ALLOC, /* tv_id */
2125 0, /* properties_required */
2126 0, /* properties_provided */
2127 0, /* properties_destroyed */
2128 0, /* todo_flags_start */
2129 TODO_dump_func |
2130 TODO_ggc_collect, /* todo_flags_finish */
2131 'g' /* letter */