OSDN Git Service

Merge from pch-branch up to tag pch-commit-20020603.
[pf3gnuchains/gcc-fork.git] / gcc / regclass.c
1 /* Compute register class preferences for pseudo-registers.
2    Copyright (C) 1987, 1988, 1991, 1992, 1993, 1994, 1995, 1996
3    1997, 1998, 1999, 2000, 2001, 2002 Free Software Foundation, Inc.
4
5 This file is part of GCC.
6
7 GCC is free software; you can redistribute it and/or modify it under
8 the terms of the GNU General Public License as published by the Free
9 Software Foundation; either version 2, or (at your option) any later
10 version.
11
12 GCC is distributed in the hope that it will be useful, but WITHOUT ANY
13 WARRANTY; without even the implied warranty of MERCHANTABILITY or
14 FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
15 for more details.
16
17 You should have received a copy of the GNU General Public License
18 along with GCC; see the file COPYING.  If not, write to the Free
19 Software Foundation, 59 Temple Place - Suite 330, Boston, MA
20 02111-1307, USA.  */
21
22
23 /* This file contains two passes of the compiler: reg_scan and reg_class.
24    It also defines some tables of information about the hardware registers
25    and a function init_reg_sets to initialize the tables.  */
26
27 #include "config.h"
28 #include "system.h"
29 #include "rtl.h"
30 #include "expr.h"
31 #include "tm_p.h"
32 #include "hard-reg-set.h"
33 #include "flags.h"
34 #include "basic-block.h"
35 #include "regs.h"
36 #include "function.h"
37 #include "insn-config.h"
38 #include "recog.h"
39 #include "reload.h"
40 #include "real.h"
41 #include "toplev.h"
42 #include "output.h"
43 #include "ggc.h"
44
45 #ifndef REGISTER_MOVE_COST
46 #define REGISTER_MOVE_COST(m, x, y) 2
47 #endif
48
49 static void init_reg_sets_1     PARAMS ((void));
50 static void init_reg_modes      PARAMS ((void));
51
52 /* If we have auto-increment or auto-decrement and we can have secondary
53    reloads, we are not allowed to use classes requiring secondary
54    reloads for pseudos auto-incremented since reload can't handle it.  */
55
56 #ifdef AUTO_INC_DEC
57 #if defined(SECONDARY_INPUT_RELOAD_CLASS) || defined(SECONDARY_OUTPUT_RELOAD_CLASS)
58 #define FORBIDDEN_INC_DEC_CLASSES
59 #endif
60 #endif
61 \f
62 /* Register tables used by many passes.  */
63
64 /* Indexed by hard register number, contains 1 for registers
65    that are fixed use (stack pointer, pc, frame pointer, etc.).
66    These are the registers that cannot be used to allocate
67    a pseudo reg for general use.  */
68
69 char fixed_regs[FIRST_PSEUDO_REGISTER];
70
71 /* Same info as a HARD_REG_SET.  */
72
73 HARD_REG_SET fixed_reg_set;
74
75 /* Data for initializing the above.  */
76
77 static const char initial_fixed_regs[] = FIXED_REGISTERS;
78
79 /* Indexed by hard register number, contains 1 for registers
80    that are fixed use or are clobbered by function calls.
81    These are the registers that cannot be used to allocate
82    a pseudo reg whose life crosses calls unless we are able
83    to save/restore them across the calls.  */
84
85 char call_used_regs[FIRST_PSEUDO_REGISTER];
86
87 /* Same info as a HARD_REG_SET.  */
88
89 HARD_REG_SET call_used_reg_set;
90
91 /* HARD_REG_SET of registers we want to avoid caller saving.  */
92 HARD_REG_SET losing_caller_save_reg_set;
93
94 /* Data for initializing the above.  */
95
96 static const char initial_call_used_regs[] = CALL_USED_REGISTERS;
97
98 /* This is much like call_used_regs, except it doesn't have to
99    be a superset of FIXED_REGISTERS. This vector indicates
100    what is really call clobbered, and is used when defining
101    regs_invalidated_by_call.  */
102
103 #ifdef CALL_REALLY_USED_REGISTERS
104 char call_really_used_regs[] = CALL_REALLY_USED_REGISTERS;
105 #endif
106
107 /* Indexed by hard register number, contains 1 for registers that are
108    fixed use or call used registers that cannot hold quantities across
109    calls even if we are willing to save and restore them.  call fixed
110    registers are a subset of call used registers.  */
111
112 char call_fixed_regs[FIRST_PSEUDO_REGISTER];
113
114 /* The same info as a HARD_REG_SET.  */
115
116 HARD_REG_SET call_fixed_reg_set;
117
118 /* Number of non-fixed registers.  */
119
120 int n_non_fixed_regs;
121
122 /* Indexed by hard register number, contains 1 for registers
123    that are being used for global register decls.
124    These must be exempt from ordinary flow analysis
125    and are also considered fixed.  */
126
127 char global_regs[FIRST_PSEUDO_REGISTER];
128
129 /* Contains 1 for registers that are set or clobbered by calls.  */
130 /* ??? Ideally, this would be just call_used_regs plus global_regs, but
131    for someone's bright idea to have call_used_regs strictly include
132    fixed_regs.  Which leaves us guessing as to the set of fixed_regs
133    that are actually preserved.  We know for sure that those associated
134    with the local stack frame are safe, but scant others.  */
135
136 HARD_REG_SET regs_invalidated_by_call;
137
138 /* Table of register numbers in the order in which to try to use them.  */
139 #ifdef REG_ALLOC_ORDER
140 int reg_alloc_order[FIRST_PSEUDO_REGISTER] = REG_ALLOC_ORDER;
141
142 /* The inverse of reg_alloc_order.  */
143 int inv_reg_alloc_order[FIRST_PSEUDO_REGISTER];
144 #endif
145
146 /* For each reg class, a HARD_REG_SET saying which registers are in it.  */
147
148 HARD_REG_SET reg_class_contents[N_REG_CLASSES];
149
150 /* The same information, but as an array of unsigned ints.  We copy from
151    these unsigned ints to the table above.  We do this so the tm.h files
152    do not have to be aware of the wordsize for machines with <= 64 regs.
153    Note that we hard-code 32 here, not HOST_BITS_PER_INT.  */
154
155 #define N_REG_INTS  \
156   ((FIRST_PSEUDO_REGISTER + (32 - 1)) / 32)
157
158 static const unsigned int_reg_class_contents[N_REG_CLASSES][N_REG_INTS]
159   = REG_CLASS_CONTENTS;
160
161 /* For each reg class, number of regs it contains.  */
162
163 unsigned int reg_class_size[N_REG_CLASSES];
164
165 /* For each reg class, table listing all the containing classes.  */
166
167 enum reg_class reg_class_superclasses[N_REG_CLASSES][N_REG_CLASSES];
168
169 /* For each reg class, table listing all the classes contained in it.  */
170
171 enum reg_class reg_class_subclasses[N_REG_CLASSES][N_REG_CLASSES];
172
173 /* For each pair of reg classes,
174    a largest reg class contained in their union.  */
175
176 enum reg_class reg_class_subunion[N_REG_CLASSES][N_REG_CLASSES];
177
178 /* For each pair of reg classes,
179    the smallest reg class containing their union.  */
180
181 enum reg_class reg_class_superunion[N_REG_CLASSES][N_REG_CLASSES];
182
183 /* Array containing all of the register names.  Unless
184    DEBUG_REGISTER_NAMES is defined, use the copy in print-rtl.c.  */
185
186 #ifdef DEBUG_REGISTER_NAMES
187 const char * reg_names[] = REGISTER_NAMES;
188 #endif
189
190 /* For each hard register, the widest mode object that it can contain.
191    This will be a MODE_INT mode if the register can hold integers.  Otherwise
192    it will be a MODE_FLOAT or a MODE_CC mode, whichever is valid for the
193    register.  */
194
195 enum machine_mode reg_raw_mode[FIRST_PSEUDO_REGISTER];
196
197 /* 1 if class does contain register of given mode.  */
198
199 static char contains_reg_of_mode [N_REG_CLASSES] [MAX_MACHINE_MODE];
200
201 /* Maximum cost of moving from a register in one class to a register in
202    another class.  Based on REGISTER_MOVE_COST.  */
203
204 static int move_cost[MAX_MACHINE_MODE][N_REG_CLASSES][N_REG_CLASSES];
205
206 /* Similar, but here we don't have to move if the first index is a subset
207    of the second so in that case the cost is zero.  */
208
209 static int may_move_in_cost[MAX_MACHINE_MODE][N_REG_CLASSES][N_REG_CLASSES];
210
211 /* Similar, but here we don't have to move if the first index is a superset
212    of the second so in that case the cost is zero.  */
213
214 static int may_move_out_cost[MAX_MACHINE_MODE][N_REG_CLASSES][N_REG_CLASSES];
215
216 #ifdef FORBIDDEN_INC_DEC_CLASSES
217
218 /* These are the classes that regs which are auto-incremented or decremented
219    cannot be put in.  */
220
221 static int forbidden_inc_dec_class[N_REG_CLASSES];
222
223 /* Indexed by n, is non-zero if (REG n) is used in an auto-inc or auto-dec
224    context.  */
225
226 static char *in_inc_dec;
227
228 #endif /* FORBIDDEN_INC_DEC_CLASSES */
229
230 #ifdef CLASS_CANNOT_CHANGE_MODE
231
232 /* These are the classes containing only registers that can be used in
233    a SUBREG expression that changes the mode of the register in some
234    way that is illegal.  */
235
236 static int class_can_change_mode[N_REG_CLASSES];
237
238 /* Registers, including pseudos, which change modes in some way that
239    is illegal.  */
240
241 static regset reg_changes_mode;
242
243 #endif /* CLASS_CANNOT_CHANGE_MODE */
244
245 /* Sample MEM values for use by memory_move_secondary_cost.  */
246
247 static GTY(()) rtx top_of_stack[MAX_MACHINE_MODE];
248
249 /* Linked list of reg_info structures allocated for reg_n_info array.
250    Grouping all of the allocated structures together in one lump
251    means only one call to bzero to clear them, rather than n smaller
252    calls.  */
253 struct reg_info_data {
254   struct reg_info_data *next;   /* next set of reg_info structures */
255   size_t min_index;             /* minimum index # */
256   size_t max_index;             /* maximum index # */
257   char used_p;                  /* non-zero if this has been used previously */
258   reg_info data[1];             /* beginning of the reg_info data */
259 };
260
261 static struct reg_info_data *reg_info_head;
262
263 /* No more global register variables may be declared; true once
264    regclass has been initialized.  */
265
266 static int no_global_reg_vars = 0;
267
268
269 /* Function called only once to initialize the above data on reg usage.
270    Once this is done, various switches may override.  */
271
272 void
273 init_reg_sets ()
274 {
275   int i, j;
276
277   /* First copy the register information from the initial int form into
278      the regsets.  */
279
280   for (i = 0; i < N_REG_CLASSES; i++)
281     {
282       CLEAR_HARD_REG_SET (reg_class_contents[i]);
283
284       /* Note that we hard-code 32 here, not HOST_BITS_PER_INT.  */
285       for (j = 0; j < FIRST_PSEUDO_REGISTER; j++)
286         if (int_reg_class_contents[i][j / 32]
287             & ((unsigned) 1 << (j % 32)))
288           SET_HARD_REG_BIT (reg_class_contents[i], j);
289     }
290
291   memcpy (fixed_regs, initial_fixed_regs, sizeof fixed_regs);
292   memcpy (call_used_regs, initial_call_used_regs, sizeof call_used_regs);
293   memset (global_regs, 0, sizeof global_regs);
294
295   /* Do any additional initialization regsets may need */
296   INIT_ONCE_REG_SET ();
297
298 #ifdef REG_ALLOC_ORDER
299   for (i = 0; i < FIRST_PSEUDO_REGISTER; i++)
300     inv_reg_alloc_order[reg_alloc_order[i]] = i;
301 #endif
302 }
303
304 /* After switches have been processed, which perhaps alter
305    `fixed_regs' and `call_used_regs', convert them to HARD_REG_SETs.  */
306
307 static void
308 init_reg_sets_1 ()
309 {
310   unsigned int i, j;
311   unsigned int /* enum machine_mode */ m;
312   char allocatable_regs_of_mode [MAX_MACHINE_MODE];
313
314   /* This macro allows the fixed or call-used registers
315      and the register classes to depend on target flags.  */
316
317 #ifdef CONDITIONAL_REGISTER_USAGE
318   CONDITIONAL_REGISTER_USAGE;
319 #endif
320
321   /* Compute number of hard regs in each class.  */
322
323   memset ((char *) reg_class_size, 0, sizeof reg_class_size);
324   for (i = 0; i < N_REG_CLASSES; i++)
325     for (j = 0; j < FIRST_PSEUDO_REGISTER; j++)
326       if (TEST_HARD_REG_BIT (reg_class_contents[i], j))
327         reg_class_size[i]++;
328
329   /* Initialize the table of subunions.
330      reg_class_subunion[I][J] gets the largest-numbered reg-class
331      that is contained in the union of classes I and J.  */
332
333   for (i = 0; i < N_REG_CLASSES; i++)
334     {
335       for (j = 0; j < N_REG_CLASSES; j++)
336         {
337 #ifdef HARD_REG_SET
338           register              /* Declare it register if it's a scalar.  */
339 #endif
340             HARD_REG_SET c;
341           int k;
342
343           COPY_HARD_REG_SET (c, reg_class_contents[i]);
344           IOR_HARD_REG_SET (c, reg_class_contents[j]);
345           for (k = 0; k < N_REG_CLASSES; k++)
346             {
347               GO_IF_HARD_REG_SUBSET (reg_class_contents[k], c,
348                                      subclass1);
349               continue;
350
351             subclass1:
352               /* keep the largest subclass */           /* SPEE 900308 */
353               GO_IF_HARD_REG_SUBSET (reg_class_contents[k],
354                                      reg_class_contents[(int) reg_class_subunion[i][j]],
355                                      subclass2);
356               reg_class_subunion[i][j] = (enum reg_class) k;
357             subclass2:
358               ;
359             }
360         }
361     }
362
363   /* Initialize the table of superunions.
364      reg_class_superunion[I][J] gets the smallest-numbered reg-class
365      containing the union of classes I and J.  */
366
367   for (i = 0; i < N_REG_CLASSES; i++)
368     {
369       for (j = 0; j < N_REG_CLASSES; j++)
370         {
371 #ifdef HARD_REG_SET
372           register              /* Declare it register if it's a scalar.  */
373 #endif
374             HARD_REG_SET c;
375           int k;
376
377           COPY_HARD_REG_SET (c, reg_class_contents[i]);
378           IOR_HARD_REG_SET (c, reg_class_contents[j]);
379           for (k = 0; k < N_REG_CLASSES; k++)
380             GO_IF_HARD_REG_SUBSET (c, reg_class_contents[k], superclass);
381
382         superclass:
383           reg_class_superunion[i][j] = (enum reg_class) k;
384         }
385     }
386
387   /* Initialize the tables of subclasses and superclasses of each reg class.
388      First clear the whole table, then add the elements as they are found.  */
389
390   for (i = 0; i < N_REG_CLASSES; i++)
391     {
392       for (j = 0; j < N_REG_CLASSES; j++)
393         {
394           reg_class_superclasses[i][j] = LIM_REG_CLASSES;
395           reg_class_subclasses[i][j] = LIM_REG_CLASSES;
396         }
397     }
398
399   for (i = 0; i < N_REG_CLASSES; i++)
400     {
401       if (i == (int) NO_REGS)
402         continue;
403
404       for (j = i + 1; j < N_REG_CLASSES; j++)
405         {
406           enum reg_class *p;
407
408           GO_IF_HARD_REG_SUBSET (reg_class_contents[i], reg_class_contents[j],
409                                  subclass);
410           continue;
411         subclass:
412           /* Reg class I is a subclass of J.
413              Add J to the table of superclasses of I.  */
414           p = &reg_class_superclasses[i][0];
415           while (*p != LIM_REG_CLASSES) p++;
416           *p = (enum reg_class) j;
417           /* Add I to the table of superclasses of J.  */
418           p = &reg_class_subclasses[j][0];
419           while (*p != LIM_REG_CLASSES) p++;
420           *p = (enum reg_class) i;
421         }
422     }
423
424   /* Initialize "constant" tables.  */
425
426   CLEAR_HARD_REG_SET (fixed_reg_set);
427   CLEAR_HARD_REG_SET (call_used_reg_set);
428   CLEAR_HARD_REG_SET (call_fixed_reg_set);
429   CLEAR_HARD_REG_SET (regs_invalidated_by_call);
430
431   memcpy (call_fixed_regs, fixed_regs, sizeof call_fixed_regs);
432
433   n_non_fixed_regs = 0;
434
435   for (i = 0; i < FIRST_PSEUDO_REGISTER; i++)
436     {
437       if (fixed_regs[i])
438         SET_HARD_REG_BIT (fixed_reg_set, i);
439       else
440         n_non_fixed_regs++;
441
442       if (call_used_regs[i])
443         SET_HARD_REG_BIT (call_used_reg_set, i);
444       if (call_fixed_regs[i])
445         SET_HARD_REG_BIT (call_fixed_reg_set, i);
446       if (CLASS_LIKELY_SPILLED_P (REGNO_REG_CLASS (i)))
447         SET_HARD_REG_BIT (losing_caller_save_reg_set, i);
448
449       /* There are a couple of fixed registers that we know are safe to
450          exclude from being clobbered by calls:
451
452          The frame pointer is always preserved across calls.  The arg pointer
453          is if it is fixed.  The stack pointer usually is, unless
454          RETURN_POPS_ARGS, in which case an explicit CLOBBER will be present.
455          If we are generating PIC code, the PIC offset table register is
456          preserved across calls, though the target can override that.  */
457
458       if (i == STACK_POINTER_REGNUM || i == FRAME_POINTER_REGNUM)
459         ;
460 #if HARD_FRAME_POINTER_REGNUM != FRAME_POINTER_REGNUM
461       else if (i == HARD_FRAME_POINTER_REGNUM)
462         ;
463 #endif
464 #if ARG_POINTER_REGNUM != FRAME_POINTER_REGNUM
465       else if (i == ARG_POINTER_REGNUM && fixed_regs[i])
466         ;
467 #endif
468 #ifndef PIC_OFFSET_TABLE_REG_CALL_CLOBBERED
469       else if (i == PIC_OFFSET_TABLE_REGNUM && fixed_regs[i])
470         ;
471 #endif
472       else if (0
473 #ifdef CALL_REALLY_USED_REGISTERS
474                || call_really_used_regs[i]
475 #else
476                || call_used_regs[i]
477 #endif
478                || global_regs[i])
479         SET_HARD_REG_BIT (regs_invalidated_by_call, i);
480     }
481
482   memset (contains_reg_of_mode, 0, sizeof (contains_reg_of_mode));
483   memset (allocatable_regs_of_mode, 0, sizeof (allocatable_regs_of_mode));
484   for (m = 0; m < (unsigned int) MAX_MACHINE_MODE; m++)
485     for (i = 0; i < N_REG_CLASSES; i++)
486       if (CLASS_MAX_NREGS (i, m) <= reg_class_size[i])
487         for (j = 0; j < FIRST_PSEUDO_REGISTER; j++)
488           if (!fixed_regs [j] && TEST_HARD_REG_BIT (reg_class_contents[i], j)
489               && HARD_REGNO_MODE_OK (j, m))
490              {
491                contains_reg_of_mode [i][m] = 1;
492                allocatable_regs_of_mode [m] = 1;
493                break;
494              }
495
496   /* Initialize the move cost table.  Find every subset of each class
497      and take the maximum cost of moving any subset to any other.  */
498
499   for (m = 0; m < (unsigned int) MAX_MACHINE_MODE; m++)
500     if (allocatable_regs_of_mode [m])
501       {
502         for (i = 0; i < N_REG_CLASSES; i++)
503           if (contains_reg_of_mode [i][m])
504             for (j = 0; j < N_REG_CLASSES; j++)
505               {
506                 int cost;
507                 enum reg_class *p1, *p2;
508
509                 if (!contains_reg_of_mode [j][m])
510                   {
511                     move_cost[m][i][j] = 65536;
512                     may_move_in_cost[m][i][j] = 65536;
513                     may_move_out_cost[m][i][j] = 65536;
514                   }
515                 else
516                   {
517                     cost = REGISTER_MOVE_COST (m, i, j);
518
519                     for (p2 = &reg_class_subclasses[j][0];
520                          *p2 != LIM_REG_CLASSES;
521                          p2++)
522                       if (*p2 != i && contains_reg_of_mode [*p2][m])
523                         cost = MAX (cost, move_cost [m][i][*p2]);
524
525                     for (p1 = &reg_class_subclasses[i][0];
526                          *p1 != LIM_REG_CLASSES;
527                          p1++)
528                       if (*p1 != j && contains_reg_of_mode [*p1][m])
529                         cost = MAX (cost, move_cost [m][*p1][j]);
530
531                     move_cost[m][i][j] = cost;
532
533                     if (reg_class_subset_p (i, j))
534                       may_move_in_cost[m][i][j] = 0;
535                     else
536                       may_move_in_cost[m][i][j] = cost;
537
538                     if (reg_class_subset_p (j, i))
539                       may_move_out_cost[m][i][j] = 0;
540                     else
541                       may_move_out_cost[m][i][j] = cost;
542                   }
543               }
544           else
545             for (j = 0; j < N_REG_CLASSES; j++)
546               {
547                 move_cost[m][i][j] = 65536;
548                 may_move_in_cost[m][i][j] = 65536;
549                 may_move_out_cost[m][i][j] = 65536;
550               }
551       }
552
553 #ifdef CLASS_CANNOT_CHANGE_MODE
554   {
555     HARD_REG_SET c;
556     COMPL_HARD_REG_SET (c, reg_class_contents[CLASS_CANNOT_CHANGE_MODE]);
557
558     for (i = 0; i < N_REG_CLASSES; i++)
559       {
560         GO_IF_HARD_REG_SUBSET (reg_class_contents[i], c, ok_class);
561         class_can_change_mode [i] = 0;
562         continue;
563       ok_class:
564         class_can_change_mode [i] = 1;
565       }
566     }
567 #endif /* CLASS_CANNOT_CHANGE_MODE */
568 }
569
570 /* Compute the table of register modes.
571    These values are used to record death information for individual registers
572    (as opposed to a multi-register mode).  */
573
574 static void
575 init_reg_modes ()
576 {
577   int i;
578
579   for (i = 0; i < FIRST_PSEUDO_REGISTER; i++)
580     {
581       reg_raw_mode[i] = choose_hard_reg_mode (i, 1);
582
583       /* If we couldn't find a valid mode, just use the previous mode.
584          ??? One situation in which we need to do this is on the mips where
585          HARD_REGNO_NREGS (fpreg, [SD]Fmode) returns 2.  Ideally we'd like
586          to use DF mode for the even registers and VOIDmode for the odd
587          (for the cpu models where the odd ones are inaccessible).  */
588       if (reg_raw_mode[i] == VOIDmode)
589         reg_raw_mode[i] = i == 0 ? word_mode : reg_raw_mode[i-1];
590     }
591 }
592
593 /* Finish initializing the register sets and
594    initialize the register modes.  */
595
596 void
597 init_regs ()
598 {
599   /* This finishes what was started by init_reg_sets, but couldn't be done
600      until after register usage was specified.  */
601   init_reg_sets_1 ();
602
603   init_reg_modes ();
604
605 #ifdef HAVE_SECONDARY_RELOADS
606   {
607     /* Make some fake stack-frame MEM references for use in
608        memory_move_secondary_cost.  */
609     int i;
610
611     for (i = 0; i < MAX_MACHINE_MODE; i++)
612       top_of_stack[i] = gen_rtx_MEM (i, stack_pointer_rtx);
613   }
614 #endif
615 }
616
617 #ifdef HAVE_SECONDARY_RELOADS
618
619 /* Compute extra cost of moving registers to/from memory due to reloads.
620    Only needed if secondary reloads are required for memory moves.  */
621
622 int
623 memory_move_secondary_cost (mode, class, in)
624      enum machine_mode mode;
625      enum reg_class class;
626      int in;
627 {
628   enum reg_class altclass;
629   int partial_cost = 0;
630   /* We need a memory reference to feed to SECONDARY... macros.  */
631   /* mem may be unused even if the SECONDARY_ macros are defined.  */
632   rtx mem ATTRIBUTE_UNUSED = top_of_stack[(int) mode];
633
634
635   if (in)
636     {
637 #ifdef SECONDARY_INPUT_RELOAD_CLASS
638       altclass = SECONDARY_INPUT_RELOAD_CLASS (class, mode, mem);
639 #else
640       altclass = NO_REGS;
641 #endif
642     }
643   else
644     {
645 #ifdef SECONDARY_OUTPUT_RELOAD_CLASS
646       altclass = SECONDARY_OUTPUT_RELOAD_CLASS (class, mode, mem);
647 #else
648       altclass = NO_REGS;
649 #endif
650     }
651
652   if (altclass == NO_REGS)
653     return 0;
654
655   if (in)
656     partial_cost = REGISTER_MOVE_COST (mode, altclass, class);
657   else
658     partial_cost = REGISTER_MOVE_COST (mode, class, altclass);
659
660   if (class == altclass)
661     /* This isn't simply a copy-to-temporary situation.  Can't guess
662        what it is, so MEMORY_MOVE_COST really ought not to be calling
663        here in that case.
664
665        I'm tempted to put in an abort here, but returning this will
666        probably only give poor estimates, which is what we would've
667        had before this code anyways.  */
668     return partial_cost;
669
670   /* Check if the secondary reload register will also need a
671      secondary reload.  */
672   return memory_move_secondary_cost (mode, altclass, in) + partial_cost;
673 }
674 #endif
675
676 /* Return a machine mode that is legitimate for hard reg REGNO and large
677    enough to save nregs.  If we can't find one, return VOIDmode.  */
678
679 enum machine_mode
680 choose_hard_reg_mode (regno, nregs)
681      unsigned int regno ATTRIBUTE_UNUSED;
682      unsigned int nregs;
683 {
684   unsigned int /* enum machine_mode */ m;
685   enum machine_mode found_mode = VOIDmode, mode;
686
687   /* We first look for the largest integer mode that can be validly
688      held in REGNO.  If none, we look for the largest floating-point mode.
689      If we still didn't find a valid mode, try CCmode.  */
690
691   for (mode = GET_CLASS_NARROWEST_MODE (MODE_INT);
692        mode != VOIDmode;
693        mode = GET_MODE_WIDER_MODE (mode))
694     if (HARD_REGNO_NREGS (regno, mode) == nregs
695         && HARD_REGNO_MODE_OK (regno, mode))
696       found_mode = mode;
697
698   if (found_mode != VOIDmode)
699     return found_mode;
700
701   for (mode = GET_CLASS_NARROWEST_MODE (MODE_FLOAT);
702        mode != VOIDmode;
703        mode = GET_MODE_WIDER_MODE (mode))
704     if (HARD_REGNO_NREGS (regno, mode) == nregs
705         && HARD_REGNO_MODE_OK (regno, mode))
706       found_mode = mode;
707
708   if (found_mode != VOIDmode)
709     return found_mode;
710
711   for (mode = GET_CLASS_NARROWEST_MODE (MODE_VECTOR_FLOAT);
712        mode != VOIDmode;
713        mode = GET_MODE_WIDER_MODE (mode))
714     if (HARD_REGNO_NREGS (regno, mode) == nregs
715         && HARD_REGNO_MODE_OK (regno, mode))
716       found_mode = mode;
717
718   if (found_mode != VOIDmode)
719     return found_mode;
720
721   for (mode = GET_CLASS_NARROWEST_MODE (MODE_VECTOR_INT);
722        mode != VOIDmode;
723        mode = GET_MODE_WIDER_MODE (mode))
724     if (HARD_REGNO_NREGS (regno, mode) == nregs
725         && HARD_REGNO_MODE_OK (regno, mode))
726       found_mode = mode;
727
728   if (found_mode != VOIDmode)
729     return found_mode;
730
731   /* Iterate over all of the CCmodes.  */
732   for (m = (unsigned int) CCmode; m < (unsigned int) NUM_MACHINE_MODES; ++m)
733     {
734       mode = (enum machine_mode) m;
735       if (HARD_REGNO_NREGS (regno, mode) == nregs
736           && HARD_REGNO_MODE_OK (regno, mode))
737         return mode;
738     }
739
740   /* We can't find a mode valid for this register.  */
741   return VOIDmode;
742 }
743
744 /* Specify the usage characteristics of the register named NAME.
745    It should be a fixed register if FIXED and a
746    call-used register if CALL_USED.  */
747
748 void
749 fix_register (name, fixed, call_used)
750      const char *name;
751      int fixed, call_used;
752 {
753   int i;
754
755   /* Decode the name and update the primary form of
756      the register info.  */
757
758   if ((i = decode_reg_name (name)) >= 0)
759     {
760       if ((i == STACK_POINTER_REGNUM
761 #ifdef HARD_FRAME_POINTER_REGNUM
762            || i == HARD_FRAME_POINTER_REGNUM
763 #else
764            || i == FRAME_POINTER_REGNUM
765 #endif
766            )
767           && (fixed == 0 || call_used == 0))
768         {
769           static const char * const what_option[2][2] = {
770             { "call-saved", "call-used" },
771             { "no-such-option", "fixed" }};
772
773           error ("can't use '%s' as a %s register", name,
774                  what_option[fixed][call_used]);
775         }
776       else
777         {
778           fixed_regs[i] = fixed;
779           call_used_regs[i] = call_used;
780 #ifdef CALL_REALLY_USED_REGISTERS
781           if (fixed == 0)
782             call_really_used_regs[i] = call_used;
783 #endif
784         }
785     }
786   else
787     {
788       warning ("unknown register name: %s", name);
789     }
790 }
791
792 /* Mark register number I as global.  */
793
794 void
795 globalize_reg (i)
796      int i;
797 {
798   if (fixed_regs[i] == 0 && no_global_reg_vars)
799     error ("global register variable follows a function definition");
800
801   if (global_regs[i])
802     {
803       warning ("register used for two global register variables");
804       return;
805     }
806
807   if (call_used_regs[i] && ! fixed_regs[i])
808     warning ("call-clobbered register used for global register variable");
809
810   global_regs[i] = 1;
811
812   /* If already fixed, nothing else to do.  */
813   if (fixed_regs[i])
814     return;
815
816   fixed_regs[i] = call_used_regs[i] = call_fixed_regs[i] = 1;
817   n_non_fixed_regs--;
818
819   SET_HARD_REG_BIT (fixed_reg_set, i);
820   SET_HARD_REG_BIT (call_used_reg_set, i);
821   SET_HARD_REG_BIT (call_fixed_reg_set, i);
822 }
823 \f
824 /* Now the data and code for the `regclass' pass, which happens
825    just before local-alloc.  */
826
827 /* The `costs' struct records the cost of using a hard register of each class
828    and of using memory for each pseudo.  We use this data to set up
829    register class preferences.  */
830
831 struct costs
832 {
833   int cost[N_REG_CLASSES];
834   int mem_cost;
835 };
836
837 /* Structure used to record preferrences of given pseudo.  */
838 struct reg_pref
839 {
840   /* (enum reg_class) prefclass is the preferred class.  */
841   char prefclass;
842
843   /* altclass is a register class that we should use for allocating
844      pseudo if no register in the preferred class is available.
845      If no register in this class is available, memory is preferred.
846
847      It might appear to be more general to have a bitmask of classes here,
848      but since it is recommended that there be a class corresponding to the
849      union of most major pair of classes, that generality is not required.  */
850   char altclass;
851 };
852
853 /* Record the cost of each class for each pseudo.  */
854
855 static struct costs *costs;
856
857 /* Initialized once, and used to initialize cost values for each insn.  */
858
859 static struct costs init_cost;
860
861 /* Record preferrences of each pseudo.
862    This is available after `regclass' is run.  */
863
864 static struct reg_pref *reg_pref;
865
866 /* Allocated buffers for reg_pref.  */
867
868 static struct reg_pref *reg_pref_buffer;
869
870 /* Frequency of executions of current insn.  */
871
872 static int frequency;
873
874 static rtx scan_one_insn        PARAMS ((rtx, int));
875 static void record_operand_costs PARAMS ((rtx, struct costs *, struct reg_pref *));
876 static void dump_regclass       PARAMS ((FILE *));
877 static void record_reg_classes  PARAMS ((int, int, rtx *, enum machine_mode *,
878                                        const char **, rtx,
879                                        struct costs *, struct reg_pref *));
880 static int copy_cost            PARAMS ((rtx, enum machine_mode,
881                                        enum reg_class, int));
882 static void record_address_regs PARAMS ((rtx, enum reg_class, int));
883 #ifdef FORBIDDEN_INC_DEC_CLASSES
884 static int auto_inc_dec_reg_p   PARAMS ((rtx, enum machine_mode));
885 #endif
886 static void reg_scan_mark_refs  PARAMS ((rtx, rtx, int, unsigned int));
887
888 /* Return the reg_class in which pseudo reg number REGNO is best allocated.
889    This function is sometimes called before the info has been computed.
890    When that happens, just return GENERAL_REGS, which is innocuous.  */
891
892 enum reg_class
893 reg_preferred_class (regno)
894      int regno;
895 {
896   if (reg_pref == 0)
897     return GENERAL_REGS;
898   return (enum reg_class) reg_pref[regno].prefclass;
899 }
900
901 enum reg_class
902 reg_alternate_class (regno)
903      int regno;
904 {
905   if (reg_pref == 0)
906     return ALL_REGS;
907
908   return (enum reg_class) reg_pref[regno].altclass;
909 }
910
911 /* Initialize some global data for this pass.  */
912
913 void
914 regclass_init ()
915 {
916   int i;
917
918   init_cost.mem_cost = 10000;
919   for (i = 0; i < N_REG_CLASSES; i++)
920     init_cost.cost[i] = 10000;
921
922   /* This prevents dump_flow_info from losing if called
923      before regclass is run.  */
924   reg_pref = NULL;
925
926   /* No more global register variables may be declared.  */
927   no_global_reg_vars = 1;
928 }
929 \f
930 /* Dump register costs.  */
931 static void
932 dump_regclass (dump)
933      FILE *dump;
934 {
935   static const char *const reg_class_names[] = REG_CLASS_NAMES;
936   int i;
937   for (i = FIRST_PSEUDO_REGISTER; i < max_regno; i++)
938     {
939       int /* enum reg_class */ class;
940       if (REG_N_REFS (i))
941         {
942           fprintf (dump, "  Register %i costs:", i);
943           for (class = 0; class < (int) N_REG_CLASSES; class++)
944             if (contains_reg_of_mode [(enum reg_class) class][PSEUDO_REGNO_MODE (i)]
945 #ifdef FORBIDDEN_INC_DEC_CLASSES
946                 && (!in_inc_dec[i]
947                     || !forbidden_inc_dec_class[(enum reg_class) class])
948 #endif
949 #ifdef CLASS_CANNOT_CHANGE_MODE
950                 && (!REGNO_REG_SET_P (reg_changes_mode, i)
951                      || class_can_change_mode [(enum reg_class) class])
952 #endif
953                 )
954             fprintf (dump, " %s:%i", reg_class_names[class],
955                      costs[i].cost[(enum reg_class) class]);
956           fprintf (dump, " MEM:%i\n", costs[i].mem_cost);
957         }
958     }
959 }
960 \f
961
962 /* Calculate the costs of insn operands.  */
963
964 static void
965 record_operand_costs (insn, op_costs, reg_pref)
966      rtx insn;
967      struct costs *op_costs;
968      struct reg_pref *reg_pref;
969 {
970   const char *constraints[MAX_RECOG_OPERANDS];
971   enum machine_mode modes[MAX_RECOG_OPERANDS];
972   int i;
973
974   for (i = 0; i < recog_data.n_operands; i++)
975     {
976       constraints[i] = recog_data.constraints[i];
977       modes[i] = recog_data.operand_mode[i];
978     }
979
980   /* If we get here, we are set up to record the costs of all the
981      operands for this insn.  Start by initializing the costs.
982      Then handle any address registers.  Finally record the desired
983      classes for any pseudos, doing it twice if some pair of
984      operands are commutative.  */
985
986   for (i = 0; i < recog_data.n_operands; i++)
987     {
988       op_costs[i] = init_cost;
989
990       if (GET_CODE (recog_data.operand[i]) == SUBREG)
991         {
992           rtx inner = SUBREG_REG (recog_data.operand[i]);
993 #ifdef CLASS_CANNOT_CHANGE_MODE
994           if (GET_CODE (inner) == REG
995               && CLASS_CANNOT_CHANGE_MODE_P (modes[i], GET_MODE (inner)))
996             SET_REGNO_REG_SET (reg_changes_mode, REGNO (inner));
997 #endif
998           recog_data.operand[i] = inner;
999         }
1000
1001       if (GET_CODE (recog_data.operand[i]) == MEM)
1002         record_address_regs (XEXP (recog_data.operand[i], 0),
1003                              MODE_BASE_REG_CLASS (modes[i]), frequency * 2);
1004       else if (constraints[i][0] == 'p')
1005         record_address_regs (recog_data.operand[i],
1006                              MODE_BASE_REG_CLASS (modes[i]), frequency * 2);
1007     }
1008
1009   /* Check for commutative in a separate loop so everything will
1010      have been initialized.  We must do this even if one operand
1011      is a constant--see addsi3 in m68k.md.  */
1012
1013   for (i = 0; i < (int) recog_data.n_operands - 1; i++)
1014     if (constraints[i][0] == '%')
1015       {
1016         const char *xconstraints[MAX_RECOG_OPERANDS];
1017         int j;
1018
1019         /* Handle commutative operands by swapping the constraints.
1020            We assume the modes are the same.  */
1021
1022         for (j = 0; j < recog_data.n_operands; j++)
1023           xconstraints[j] = constraints[j];
1024
1025         xconstraints[i] = constraints[i+1];
1026         xconstraints[i+1] = constraints[i];
1027         record_reg_classes (recog_data.n_alternatives, recog_data.n_operands,
1028                             recog_data.operand, modes,
1029                             xconstraints, insn, op_costs, reg_pref);
1030       }
1031
1032   record_reg_classes (recog_data.n_alternatives, recog_data.n_operands,
1033                       recog_data.operand, modes,
1034                       constraints, insn, op_costs, reg_pref);
1035 }
1036 \f
1037 /* Subroutine of regclass, processes one insn INSN.  Scan it and record each
1038    time it would save code to put a certain register in a certain class.
1039    PASS, when nonzero, inhibits some optimizations which need only be done
1040    once.
1041    Return the last insn processed, so that the scan can be continued from
1042    there.  */
1043
1044 static rtx
1045 scan_one_insn (insn, pass)
1046      rtx insn;
1047      int pass;
1048 {
1049   enum rtx_code code = GET_CODE (insn);
1050   enum rtx_code pat_code;
1051   rtx set, note;
1052   int i, j;
1053   struct costs op_costs[MAX_RECOG_OPERANDS];
1054
1055   if (GET_RTX_CLASS (code) != 'i')
1056     return insn;
1057
1058   pat_code = GET_CODE (PATTERN (insn));
1059   if (pat_code == USE
1060       || pat_code == CLOBBER
1061       || pat_code == ASM_INPUT
1062       || pat_code == ADDR_VEC
1063       || pat_code == ADDR_DIFF_VEC)
1064     return insn;
1065
1066   set = single_set (insn);
1067   extract_insn (insn);
1068
1069   /* If this insn loads a parameter from its stack slot, then
1070      it represents a savings, rather than a cost, if the
1071      parameter is stored in memory.  Record this fact.  */
1072
1073   if (set != 0 && GET_CODE (SET_DEST (set)) == REG
1074       && GET_CODE (SET_SRC (set)) == MEM
1075       && (note = find_reg_note (insn, REG_EQUIV,
1076                                 NULL_RTX)) != 0
1077       && GET_CODE (XEXP (note, 0)) == MEM)
1078     {
1079       costs[REGNO (SET_DEST (set))].mem_cost
1080         -= (MEMORY_MOVE_COST (GET_MODE (SET_DEST (set)),
1081                               GENERAL_REGS, 1)
1082             * frequency);
1083       record_address_regs (XEXP (SET_SRC (set), 0),
1084                            MODE_BASE_REG_CLASS (VOIDmode), frequency * 2);
1085       return insn;
1086     }
1087
1088   /* Improve handling of two-address insns such as
1089      (set X (ashift CONST Y)) where CONST must be made to
1090      match X. Change it into two insns: (set X CONST)
1091      (set X (ashift X Y)).  If we left this for reloading, it
1092      would probably get three insns because X and Y might go
1093      in the same place. This prevents X and Y from receiving
1094      the same hard reg.
1095
1096      We can only do this if the modes of operands 0 and 1
1097      (which might not be the same) are tieable and we only need
1098      do this during our first pass.  */
1099
1100   if (pass == 0 && optimize
1101       && recog_data.n_operands >= 3
1102       && recog_data.constraints[1][0] == '0'
1103       && recog_data.constraints[1][1] == 0
1104       && CONSTANT_P (recog_data.operand[1])
1105       && ! rtx_equal_p (recog_data.operand[0], recog_data.operand[1])
1106       && ! rtx_equal_p (recog_data.operand[0], recog_data.operand[2])
1107       && GET_CODE (recog_data.operand[0]) == REG
1108       && MODES_TIEABLE_P (GET_MODE (recog_data.operand[0]),
1109                           recog_data.operand_mode[1]))
1110     {
1111       rtx previnsn = prev_real_insn (insn);
1112       rtx dest
1113         = gen_lowpart (recog_data.operand_mode[1],
1114                        recog_data.operand[0]);
1115       rtx newinsn
1116         = emit_insn_before (gen_move_insn (dest, recog_data.operand[1]), insn);
1117
1118       /* If this insn was the start of a basic block,
1119          include the new insn in that block.
1120          We need not check for code_label here;
1121          while a basic block can start with a code_label,
1122          INSN could not be at the beginning of that block.  */
1123       if (previnsn == 0 || GET_CODE (previnsn) == JUMP_INSN)
1124         {
1125           basic_block b;
1126           FOR_EACH_BB (b)
1127             if (insn == b->head)
1128               b->head = newinsn;
1129         }
1130
1131       /* This makes one more setting of new insns's dest.  */
1132       REG_N_SETS (REGNO (recog_data.operand[0]))++;
1133       REG_N_REFS (REGNO (recog_data.operand[0]))++;
1134       REG_FREQ (REGNO (recog_data.operand[0])) += frequency;
1135
1136       *recog_data.operand_loc[1] = recog_data.operand[0];
1137       REG_N_REFS (REGNO (recog_data.operand[0]))++;
1138       REG_FREQ (REGNO (recog_data.operand[0])) += frequency;
1139       for (i = recog_data.n_dups - 1; i >= 0; i--)
1140         if (recog_data.dup_num[i] == 1)
1141           {
1142             *recog_data.dup_loc[i] = recog_data.operand[0];
1143             REG_N_REFS (REGNO (recog_data.operand[0]))++;
1144             REG_FREQ (REGNO (recog_data.operand[0])) += frequency;
1145           }
1146
1147       return PREV_INSN (newinsn);
1148     }
1149
1150   record_operand_costs (insn, op_costs, reg_pref);
1151
1152   /* Now add the cost for each operand to the total costs for
1153      its register.  */
1154
1155   for (i = 0; i < recog_data.n_operands; i++)
1156     if (GET_CODE (recog_data.operand[i]) == REG
1157         && REGNO (recog_data.operand[i]) >= FIRST_PSEUDO_REGISTER)
1158       {
1159         int regno = REGNO (recog_data.operand[i]);
1160         struct costs *p = &costs[regno], *q = &op_costs[i];
1161
1162         p->mem_cost += q->mem_cost * frequency;
1163         for (j = 0; j < N_REG_CLASSES; j++)
1164           p->cost[j] += q->cost[j] * frequency;
1165       }
1166
1167   return insn;
1168 }
1169
1170 /* This is a pass of the compiler that scans all instructions
1171    and calculates the preferred class for each pseudo-register.
1172    This information can be accessed later by calling `reg_preferred_class'.
1173    This pass comes just before local register allocation.  */
1174
1175 void
1176 regclass (f, nregs, dump)
1177      rtx f;
1178      int nregs;
1179      FILE *dump;
1180 {
1181   rtx insn;
1182   int i;
1183   int pass;
1184
1185   init_recog ();
1186
1187   costs = (struct costs *) xmalloc (nregs * sizeof (struct costs));
1188
1189 #ifdef CLASS_CANNOT_CHANGE_MODE
1190   reg_changes_mode = BITMAP_XMALLOC ();
1191 #endif
1192
1193 #ifdef FORBIDDEN_INC_DEC_CLASSES
1194
1195   in_inc_dec = (char *) xmalloc (nregs);
1196
1197   /* Initialize information about which register classes can be used for
1198      pseudos that are auto-incremented or auto-decremented.  It would
1199      seem better to put this in init_reg_sets, but we need to be able
1200      to allocate rtx, which we can't do that early.  */
1201
1202   for (i = 0; i < N_REG_CLASSES; i++)
1203     {
1204       rtx r = gen_rtx_REG (VOIDmode, 0);
1205       enum machine_mode m;
1206       int j;
1207
1208       for (j = 0; j < FIRST_PSEUDO_REGISTER; j++)
1209         if (TEST_HARD_REG_BIT (reg_class_contents[i], j))
1210           {
1211             REGNO (r) = j;
1212
1213             for (m = VOIDmode; (int) m < (int) MAX_MACHINE_MODE;
1214                  m = (enum machine_mode) ((int) m + 1))
1215               if (HARD_REGNO_MODE_OK (j, m))
1216                 {
1217                   PUT_MODE (r, m);
1218
1219                   /* If a register is not directly suitable for an
1220                      auto-increment or decrement addressing mode and
1221                      requires secondary reloads, disallow its class from
1222                      being used in such addresses.  */
1223
1224                   if ((0
1225 #ifdef SECONDARY_RELOAD_CLASS
1226                        || (SECONDARY_RELOAD_CLASS (MODE_BASE_REG_CLASS (VOIDmode), m, r)
1227                            != NO_REGS)
1228 #else
1229 #ifdef SECONDARY_INPUT_RELOAD_CLASS
1230                        || (SECONDARY_INPUT_RELOAD_CLASS (MODE_BASE_REG_CLASS (VOIDmode), m, r)
1231                            != NO_REGS)
1232 #endif
1233 #ifdef SECONDARY_OUTPUT_RELOAD_CLASS
1234                        || (SECONDARY_OUTPUT_RELOAD_CLASS (MODE_BASE_REG_CLASS (VOIDmode), m, r)
1235                            != NO_REGS)
1236 #endif
1237 #endif
1238                        )
1239                       && ! auto_inc_dec_reg_p (r, m))
1240                     forbidden_inc_dec_class[i] = 1;
1241                 }
1242           }
1243     }
1244 #endif /* FORBIDDEN_INC_DEC_CLASSES */
1245
1246   /* Normally we scan the insns once and determine the best class to use for
1247      each register.  However, if -fexpensive_optimizations are on, we do so
1248      twice, the second time using the tentative best classes to guide the
1249      selection.  */
1250
1251   for (pass = 0; pass <= flag_expensive_optimizations; pass++)
1252     {
1253       basic_block bb;
1254
1255       if (dump)
1256         fprintf (dump, "\n\nPass %i\n\n",pass);
1257       /* Zero out our accumulation of the cost of each class for each reg.  */
1258
1259       memset ((char *) costs, 0, nregs * sizeof (struct costs));
1260
1261 #ifdef FORBIDDEN_INC_DEC_CLASSES
1262       memset (in_inc_dec, 0, nregs);
1263 #endif
1264
1265       /* Scan the instructions and record each time it would
1266          save code to put a certain register in a certain class.  */
1267
1268       if (!optimize)
1269         {
1270           frequency = REG_FREQ_MAX;
1271           for (insn = f; insn; insn = NEXT_INSN (insn))
1272             insn = scan_one_insn (insn, pass);
1273         }
1274       else
1275         FOR_EACH_BB (bb)
1276           {
1277             /* Show that an insn inside a loop is likely to be executed three
1278                times more than insns outside a loop.  This is much more
1279                aggressive than the assumptions made elsewhere and is being
1280                tried as an experiment.  */
1281             frequency = REG_FREQ_FROM_BB (bb);
1282             for (insn = bb->head; ; insn = NEXT_INSN (insn))
1283               {
1284                 insn = scan_one_insn (insn, pass);
1285                 if (insn == bb->end)
1286                   break;
1287               }
1288           }
1289
1290       /* Now for each register look at how desirable each class is
1291          and find which class is preferred.  Store that in
1292          `prefclass'.  Record in `altclass' the largest register
1293          class any of whose registers is better than memory.  */
1294
1295       if (pass == 0)
1296         reg_pref = reg_pref_buffer;
1297
1298       if (dump)
1299         {
1300           dump_regclass (dump);
1301           fprintf (dump,"\n");
1302         }
1303       for (i = FIRST_PSEUDO_REGISTER; i < nregs; i++)
1304         {
1305           int best_cost = (1 << (HOST_BITS_PER_INT - 2)) - 1;
1306           enum reg_class best = ALL_REGS, alt = NO_REGS;
1307           /* This is an enum reg_class, but we call it an int
1308              to save lots of casts.  */
1309           int class;
1310           struct costs *p = &costs[i];
1311
1312           /* In non-optimizing compilation REG_N_REFS is not initialized
1313              yet.  */
1314           if (optimize && !REG_N_REFS (i))
1315             continue;
1316
1317           for (class = (int) ALL_REGS - 1; class > 0; class--)
1318             {
1319               /* Ignore classes that are too small for this operand or
1320                  invalid for an operand that was auto-incremented.  */
1321               if (!contains_reg_of_mode [class][PSEUDO_REGNO_MODE (i)]
1322 #ifdef FORBIDDEN_INC_DEC_CLASSES
1323                   || (in_inc_dec[i] && forbidden_inc_dec_class[class])
1324 #endif
1325 #ifdef CLASS_CANNOT_CHANGE_MODE
1326                   || (REGNO_REG_SET_P (reg_changes_mode, i)
1327                       && ! class_can_change_mode [class])
1328 #endif
1329                   )
1330                 ;
1331               else if (p->cost[class] < best_cost)
1332                 {
1333                   best_cost = p->cost[class];
1334                   best = (enum reg_class) class;
1335                 }
1336               else if (p->cost[class] == best_cost)
1337                 best = reg_class_subunion[(int) best][class];
1338             }
1339
1340           /* Record the alternate register class; i.e., a class for which
1341              every register in it is better than using memory.  If adding a
1342              class would make a smaller class (i.e., no union of just those
1343              classes exists), skip that class.  The major unions of classes
1344              should be provided as a register class.  Don't do this if we
1345              will be doing it again later.  */
1346
1347           if ((pass == 1  || dump) || ! flag_expensive_optimizations)
1348             for (class = 0; class < N_REG_CLASSES; class++)
1349               if (p->cost[class] < p->mem_cost
1350                   && (reg_class_size[(int) reg_class_subunion[(int) alt][class]]
1351                       > reg_class_size[(int) alt])
1352 #ifdef FORBIDDEN_INC_DEC_CLASSES
1353                   && ! (in_inc_dec[i] && forbidden_inc_dec_class[class])
1354 #endif
1355 #ifdef CLASS_CANNOT_CHANGE_MODE
1356                   && ! (REGNO_REG_SET_P (reg_changes_mode, i)
1357                         && ! class_can_change_mode [class])
1358 #endif
1359                   )
1360                 alt = reg_class_subunion[(int) alt][class];
1361
1362           /* If we don't add any classes, nothing to try.  */
1363           if (alt == best)
1364             alt = NO_REGS;
1365
1366           if (dump
1367               && (reg_pref[i].prefclass != (int) best
1368                   || reg_pref[i].altclass != (int) alt))
1369             {
1370               static const char *const reg_class_names[] = REG_CLASS_NAMES;
1371               fprintf (dump, "  Register %i", i);
1372               if (alt == ALL_REGS || best == ALL_REGS)
1373                 fprintf (dump, " pref %s\n", reg_class_names[(int) best]);
1374               else if (alt == NO_REGS)
1375                 fprintf (dump, " pref %s or none\n", reg_class_names[(int) best]);
1376               else
1377                 fprintf (dump, " pref %s, else %s\n",
1378                          reg_class_names[(int) best],
1379                          reg_class_names[(int) alt]);
1380             }
1381
1382           /* We cast to (int) because (char) hits bugs in some compilers.  */
1383           reg_pref[i].prefclass = (int) best;
1384           reg_pref[i].altclass = (int) alt;
1385         }
1386     }
1387
1388 #ifdef FORBIDDEN_INC_DEC_CLASSES
1389   free (in_inc_dec);
1390 #endif
1391 #ifdef CLASS_CANNOT_CHANGE_MODE
1392   BITMAP_XFREE (reg_changes_mode);
1393 #endif
1394   free (costs);
1395 }
1396 \f
1397 /* Record the cost of using memory or registers of various classes for
1398    the operands in INSN.
1399
1400    N_ALTS is the number of alternatives.
1401
1402    N_OPS is the number of operands.
1403
1404    OPS is an array of the operands.
1405
1406    MODES are the modes of the operands, in case any are VOIDmode.
1407
1408    CONSTRAINTS are the constraints to use for the operands.  This array
1409    is modified by this procedure.
1410
1411    This procedure works alternative by alternative.  For each alternative
1412    we assume that we will be able to allocate all pseudos to their ideal
1413    register class and calculate the cost of using that alternative.  Then
1414    we compute for each operand that is a pseudo-register, the cost of
1415    having the pseudo allocated to each register class and using it in that
1416    alternative.  To this cost is added the cost of the alternative.
1417
1418    The cost of each class for this insn is its lowest cost among all the
1419    alternatives.  */
1420
1421 static void
1422 record_reg_classes (n_alts, n_ops, ops, modes,
1423                     constraints, insn, op_costs, reg_pref)
1424      int n_alts;
1425      int n_ops;
1426      rtx *ops;
1427      enum machine_mode *modes;
1428      const char **constraints;
1429      rtx insn;
1430      struct costs *op_costs;
1431      struct reg_pref *reg_pref;
1432 {
1433   int alt;
1434   int i, j;
1435   rtx set;
1436
1437   /* Process each alternative, each time minimizing an operand's cost with
1438      the cost for each operand in that alternative.  */
1439
1440   for (alt = 0; alt < n_alts; alt++)
1441     {
1442       struct costs this_op_costs[MAX_RECOG_OPERANDS];
1443       int alt_fail = 0;
1444       int alt_cost = 0;
1445       enum reg_class classes[MAX_RECOG_OPERANDS];
1446       int allows_mem[MAX_RECOG_OPERANDS];
1447       int class;
1448
1449       for (i = 0; i < n_ops; i++)
1450         {
1451           const char *p = constraints[i];
1452           rtx op = ops[i];
1453           enum machine_mode mode = modes[i];
1454           int allows_addr = 0;
1455           int win = 0;
1456           unsigned char c;
1457
1458           /* Initially show we know nothing about the register class.  */
1459           classes[i] = NO_REGS;
1460           allows_mem[i] = 0;
1461
1462           /* If this operand has no constraints at all, we can conclude
1463              nothing about it since anything is valid.  */
1464
1465           if (*p == 0)
1466             {
1467               if (GET_CODE (op) == REG && REGNO (op) >= FIRST_PSEUDO_REGISTER)
1468                 memset ((char *) &this_op_costs[i], 0, sizeof this_op_costs[i]);
1469
1470               continue;
1471             }
1472
1473           /* If this alternative is only relevant when this operand
1474              matches a previous operand, we do different things depending
1475              on whether this operand is a pseudo-reg or not.  We must process
1476              any modifiers for the operand before we can make this test.  */
1477
1478           while (*p == '%' || *p == '=' || *p == '+' || *p == '&')
1479             p++;
1480
1481           if (p[0] >= '0' && p[0] <= '0' + i && (p[1] == ',' || p[1] == 0))
1482             {
1483               /* Copy class and whether memory is allowed from the matching
1484                  alternative.  Then perform any needed cost computations
1485                  and/or adjustments.  */
1486               j = p[0] - '0';
1487               classes[i] = classes[j];
1488               allows_mem[i] = allows_mem[j];
1489
1490               if (GET_CODE (op) != REG || REGNO (op) < FIRST_PSEUDO_REGISTER)
1491                 {
1492                   /* If this matches the other operand, we have no added
1493                      cost and we win.  */
1494                   if (rtx_equal_p (ops[j], op))
1495                     win = 1;
1496
1497                   /* If we can put the other operand into a register, add to
1498                      the cost of this alternative the cost to copy this
1499                      operand to the register used for the other operand.  */
1500
1501                   else if (classes[j] != NO_REGS)
1502                     alt_cost += copy_cost (op, mode, classes[j], 1), win = 1;
1503                 }
1504               else if (GET_CODE (ops[j]) != REG
1505                        || REGNO (ops[j]) < FIRST_PSEUDO_REGISTER)
1506                 {
1507                   /* This op is a pseudo but the one it matches is not.  */
1508
1509                   /* If we can't put the other operand into a register, this
1510                      alternative can't be used.  */
1511
1512                   if (classes[j] == NO_REGS)
1513                     alt_fail = 1;
1514
1515                   /* Otherwise, add to the cost of this alternative the cost
1516                      to copy the other operand to the register used for this
1517                      operand.  */
1518
1519                   else
1520                     alt_cost += copy_cost (ops[j], mode, classes[j], 1);
1521                 }
1522               else
1523                 {
1524                   /* The costs of this operand are not the same as the other
1525                      operand since move costs are not symmetric.  Moreover,
1526                      if we cannot tie them, this alternative needs to do a
1527                      copy, which is one instruction.  */
1528
1529                   struct costs *pp = &this_op_costs[i];
1530
1531                   for (class = 0; class < N_REG_CLASSES; class++)
1532                     pp->cost[class]
1533                       = ((recog_data.operand_type[i] != OP_OUT
1534                           ? may_move_in_cost[mode][class][(int) classes[i]]
1535                           : 0)
1536                          + (recog_data.operand_type[i] != OP_IN
1537                             ? may_move_out_cost[mode][(int) classes[i]][class]
1538                             : 0));
1539
1540                   /* If the alternative actually allows memory, make things
1541                      a bit cheaper since we won't need an extra insn to
1542                      load it.  */
1543
1544                   pp->mem_cost
1545                     = ((recog_data.operand_type[i] != OP_IN
1546                         ? MEMORY_MOVE_COST (mode, classes[i], 0)
1547                         : 0)
1548                        + (recog_data.operand_type[i] != OP_OUT
1549                           ? MEMORY_MOVE_COST (mode, classes[i], 1)
1550                           : 0) - allows_mem[i]);
1551
1552                   /* If we have assigned a class to this register in our
1553                      first pass, add a cost to this alternative corresponding
1554                      to what we would add if this register were not in the
1555                      appropriate class.  */
1556
1557                   if (reg_pref)
1558                     alt_cost
1559                       += (may_move_in_cost[mode]
1560                           [(unsigned char) reg_pref[REGNO (op)].prefclass]
1561                           [(int) classes[i]]);
1562
1563                   if (REGNO (ops[i]) != REGNO (ops[j])
1564                       && ! find_reg_note (insn, REG_DEAD, op))
1565                     alt_cost += 2;
1566
1567                   /* This is in place of ordinary cost computation
1568                      for this operand, so skip to the end of the
1569                      alternative (should be just one character).  */
1570                   while (*p && *p++ != ',')
1571                     ;
1572
1573                   constraints[i] = p;
1574                   continue;
1575                 }
1576             }
1577
1578           /* Scan all the constraint letters.  See if the operand matches
1579              any of the constraints.  Collect the valid register classes
1580              and see if this operand accepts memory.  */
1581
1582           while (*p && (c = *p++) != ',')
1583             switch (c)
1584               {
1585               case '*':
1586                 /* Ignore the next letter for this pass.  */
1587                 p++;
1588                 break;
1589
1590               case '?':
1591                 alt_cost += 2;
1592               case '!':  case '#':  case '&':
1593               case '0':  case '1':  case '2':  case '3':  case '4':
1594               case '5':  case '6':  case '7':  case '8':  case '9':
1595                 break;
1596
1597               case 'p':
1598                 allows_addr = 1;
1599                 win = address_operand (op, GET_MODE (op));
1600                 /* We know this operand is an address, so we want it to be
1601                    allocated to a register that can be the base of an
1602                    address, ie BASE_REG_CLASS.  */
1603                 classes[i]
1604                   = reg_class_subunion[(int) classes[i]]
1605                     [(int) MODE_BASE_REG_CLASS (VOIDmode)];
1606                 break;
1607
1608               case 'm':  case 'o':  case 'V':
1609                 /* It doesn't seem worth distinguishing between offsettable
1610                    and non-offsettable addresses here.  */
1611                 allows_mem[i] = 1;
1612                 if (GET_CODE (op) == MEM)
1613                   win = 1;
1614                 break;
1615
1616               case '<':
1617                 if (GET_CODE (op) == MEM
1618                     && (GET_CODE (XEXP (op, 0)) == PRE_DEC
1619                         || GET_CODE (XEXP (op, 0)) == POST_DEC))
1620                   win = 1;
1621                 break;
1622
1623               case '>':
1624                 if (GET_CODE (op) == MEM
1625                     && (GET_CODE (XEXP (op, 0)) == PRE_INC
1626                         || GET_CODE (XEXP (op, 0)) == POST_INC))
1627                   win = 1;
1628                 break;
1629
1630               case 'E':
1631               case 'F':
1632                 if (GET_CODE (op) == CONST_DOUBLE)
1633                   win = 1;
1634                 break;
1635
1636               case 'G':
1637               case 'H':
1638                 if (GET_CODE (op) == CONST_DOUBLE
1639                     && CONST_DOUBLE_OK_FOR_LETTER_P (op, c))
1640                   win = 1;
1641                 break;
1642
1643               case 's':
1644                 if (GET_CODE (op) == CONST_INT
1645                     || (GET_CODE (op) == CONST_DOUBLE
1646                         && GET_MODE (op) == VOIDmode))
1647                   break;
1648               case 'i':
1649                 if (CONSTANT_P (op)
1650 #ifdef LEGITIMATE_PIC_OPERAND_P
1651                     && (! flag_pic || LEGITIMATE_PIC_OPERAND_P (op))
1652 #endif
1653                     )
1654                   win = 1;
1655                 break;
1656
1657               case 'n':
1658                 if (GET_CODE (op) == CONST_INT
1659                     || (GET_CODE (op) == CONST_DOUBLE
1660                         && GET_MODE (op) == VOIDmode))
1661                   win = 1;
1662                 break;
1663
1664               case 'I':
1665               case 'J':
1666               case 'K':
1667               case 'L':
1668               case 'M':
1669               case 'N':
1670               case 'O':
1671               case 'P':
1672                 if (GET_CODE (op) == CONST_INT
1673                     && CONST_OK_FOR_LETTER_P (INTVAL (op), c))
1674                   win = 1;
1675                 break;
1676
1677               case 'X':
1678                 win = 1;
1679                 break;
1680
1681               case 'g':
1682                 if (GET_CODE (op) == MEM
1683                     || (CONSTANT_P (op)
1684 #ifdef LEGITIMATE_PIC_OPERAND_P
1685                         && (! flag_pic || LEGITIMATE_PIC_OPERAND_P (op))
1686 #endif
1687                         ))
1688                   win = 1;
1689                 allows_mem[i] = 1;
1690               case 'r':
1691                 classes[i]
1692                   = reg_class_subunion[(int) classes[i]][(int) GENERAL_REGS];
1693                 break;
1694
1695               default:
1696                 if (REG_CLASS_FROM_LETTER (c) != NO_REGS)
1697                   classes[i]
1698                     = reg_class_subunion[(int) classes[i]]
1699                       [(int) REG_CLASS_FROM_LETTER (c)];
1700 #ifdef EXTRA_CONSTRAINT
1701                 else if (EXTRA_CONSTRAINT (op, c))
1702                   win = 1;
1703 #endif
1704                 break;
1705               }
1706
1707           constraints[i] = p;
1708
1709           /* How we account for this operand now depends on whether it is  a
1710              pseudo register or not.  If it is, we first check if any
1711              register classes are valid.  If not, we ignore this alternative,
1712              since we want to assume that all pseudos get allocated for
1713              register preferencing.  If some register class is valid, compute
1714              the costs of moving the pseudo into that class.  */
1715
1716           if (GET_CODE (op) == REG && REGNO (op) >= FIRST_PSEUDO_REGISTER)
1717             {
1718               if (classes[i] == NO_REGS)
1719                 {
1720                   /* We must always fail if the operand is a REG, but
1721                      we did not find a suitable class.
1722
1723                      Otherwise we may perform an uninitialized read
1724                      from this_op_costs after the `continue' statement
1725                      below.  */
1726                   alt_fail = 1;
1727                 }
1728               else
1729                 {
1730                   struct costs *pp = &this_op_costs[i];
1731
1732                   for (class = 0; class < N_REG_CLASSES; class++)
1733                     pp->cost[class]
1734                       = ((recog_data.operand_type[i] != OP_OUT
1735                           ? may_move_in_cost[mode][class][(int) classes[i]]
1736                           : 0)
1737                          + (recog_data.operand_type[i] != OP_IN
1738                             ? may_move_out_cost[mode][(int) classes[i]][class]
1739                             : 0));
1740
1741                   /* If the alternative actually allows memory, make things
1742                      a bit cheaper since we won't need an extra insn to
1743                      load it.  */
1744
1745                   pp->mem_cost
1746                     = ((recog_data.operand_type[i] != OP_IN
1747                         ? MEMORY_MOVE_COST (mode, classes[i], 0)
1748                         : 0)
1749                        + (recog_data.operand_type[i] != OP_OUT
1750                           ? MEMORY_MOVE_COST (mode, classes[i], 1)
1751                           : 0) - allows_mem[i]);
1752
1753                   /* If we have assigned a class to this register in our
1754                      first pass, add a cost to this alternative corresponding
1755                      to what we would add if this register were not in the
1756                      appropriate class.  */
1757
1758                   if (reg_pref)
1759                     alt_cost
1760                       += (may_move_in_cost[mode]
1761                           [(unsigned char) reg_pref[REGNO (op)].prefclass]
1762                           [(int) classes[i]]);
1763                 }
1764             }
1765
1766           /* Otherwise, if this alternative wins, either because we
1767              have already determined that or if we have a hard register of
1768              the proper class, there is no cost for this alternative.  */
1769
1770           else if (win
1771                    || (GET_CODE (op) == REG
1772                        && reg_fits_class_p (op, classes[i], 0, GET_MODE (op))))
1773             ;
1774
1775           /* If registers are valid, the cost of this alternative includes
1776              copying the object to and/or from a register.  */
1777
1778           else if (classes[i] != NO_REGS)
1779             {
1780               if (recog_data.operand_type[i] != OP_OUT)
1781                 alt_cost += copy_cost (op, mode, classes[i], 1);
1782
1783               if (recog_data.operand_type[i] != OP_IN)
1784                 alt_cost += copy_cost (op, mode, classes[i], 0);
1785             }
1786
1787           /* The only other way this alternative can be used is if this is a
1788              constant that could be placed into memory.  */
1789
1790           else if (CONSTANT_P (op) && (allows_addr || allows_mem[i]))
1791             alt_cost += MEMORY_MOVE_COST (mode, classes[i], 1);
1792           else
1793             alt_fail = 1;
1794         }
1795
1796       if (alt_fail)
1797         continue;
1798
1799       /* Finally, update the costs with the information we've calculated
1800          about this alternative.  */
1801
1802       for (i = 0; i < n_ops; i++)
1803         if (GET_CODE (ops[i]) == REG
1804             && REGNO (ops[i]) >= FIRST_PSEUDO_REGISTER)
1805           {
1806             struct costs *pp = &op_costs[i], *qq = &this_op_costs[i];
1807             int scale = 1 + (recog_data.operand_type[i] == OP_INOUT);
1808
1809             pp->mem_cost = MIN (pp->mem_cost,
1810                                 (qq->mem_cost + alt_cost) * scale);
1811
1812             for (class = 0; class < N_REG_CLASSES; class++)
1813               pp->cost[class] = MIN (pp->cost[class],
1814                                      (qq->cost[class] + alt_cost) * scale);
1815           }
1816     }
1817
1818   /* If this insn is a single set copying operand 1 to operand 0
1819      and one operand is a pseudo with the other a hard reg or a pseudo
1820      that prefers a register that is in its own register class then
1821      we may want to adjust the cost of that register class to -1.
1822
1823      Avoid the adjustment if the source does not die to avoid stressing of
1824      register allocator by preferrencing two coliding registers into single
1825      class.
1826
1827      Also avoid the adjustment if a copy between registers of the class
1828      is expensive (ten times the cost of a default copy is considered
1829      arbitrarily expensive).  This avoids losing when the preferred class
1830      is very expensive as the source of a copy instruction.  */
1831
1832   if ((set = single_set (insn)) != 0
1833       && ops[0] == SET_DEST (set) && ops[1] == SET_SRC (set)
1834       && GET_CODE (ops[0]) == REG && GET_CODE (ops[1]) == REG
1835       && find_regno_note (insn, REG_DEAD, REGNO (ops[1])))
1836     for (i = 0; i <= 1; i++)
1837       if (REGNO (ops[i]) >= FIRST_PSEUDO_REGISTER)
1838         {
1839           unsigned int regno = REGNO (ops[!i]);
1840           enum machine_mode mode = GET_MODE (ops[!i]);
1841           int class;
1842           unsigned int nr;
1843
1844           if (regno >= FIRST_PSEUDO_REGISTER && reg_pref != 0)
1845             {
1846               enum reg_class pref = reg_pref[regno].prefclass;
1847
1848               if ((reg_class_size[(unsigned char) pref]
1849                    == CLASS_MAX_NREGS (pref, mode))
1850                   && REGISTER_MOVE_COST (mode, pref, pref) < 10 * 2)
1851                 op_costs[i].cost[(unsigned char) pref] = -1;
1852             }
1853           else if (regno < FIRST_PSEUDO_REGISTER)
1854             for (class = 0; class < N_REG_CLASSES; class++)
1855               if (TEST_HARD_REG_BIT (reg_class_contents[class], regno)
1856                   && reg_class_size[class] == CLASS_MAX_NREGS (class, mode))
1857                 {
1858                   if (reg_class_size[class] == 1)
1859                     op_costs[i].cost[class] = -1;
1860                   else
1861                     {
1862                       for (nr = 0; nr < HARD_REGNO_NREGS (regno, mode); nr++)
1863                         {
1864                           if (! TEST_HARD_REG_BIT (reg_class_contents[class],
1865                                                    regno + nr))
1866                             break;
1867                         }
1868
1869                       if (nr == HARD_REGNO_NREGS (regno,mode))
1870                         op_costs[i].cost[class] = -1;
1871                     }
1872                 }
1873         }
1874 }
1875 \f
1876 /* Compute the cost of loading X into (if TO_P is non-zero) or from (if
1877    TO_P is zero) a register of class CLASS in mode MODE.
1878
1879    X must not be a pseudo.  */
1880
1881 static int
1882 copy_cost (x, mode, class, to_p)
1883      rtx x;
1884      enum machine_mode mode ATTRIBUTE_UNUSED;
1885      enum reg_class class;
1886      int to_p ATTRIBUTE_UNUSED;
1887 {
1888 #ifdef HAVE_SECONDARY_RELOADS
1889   enum reg_class secondary_class = NO_REGS;
1890 #endif
1891
1892   /* If X is a SCRATCH, there is actually nothing to move since we are
1893      assuming optimal allocation.  */
1894
1895   if (GET_CODE (x) == SCRATCH)
1896     return 0;
1897
1898   /* Get the class we will actually use for a reload.  */
1899   class = PREFERRED_RELOAD_CLASS (x, class);
1900
1901 #ifdef HAVE_SECONDARY_RELOADS
1902   /* If we need a secondary reload (we assume here that we are using
1903      the secondary reload as an intermediate, not a scratch register), the
1904      cost is that to load the input into the intermediate register, then
1905      to copy them.  We use a special value of TO_P to avoid recursion.  */
1906
1907 #ifdef SECONDARY_INPUT_RELOAD_CLASS
1908   if (to_p == 1)
1909     secondary_class = SECONDARY_INPUT_RELOAD_CLASS (class, mode, x);
1910 #endif
1911
1912 #ifdef SECONDARY_OUTPUT_RELOAD_CLASS
1913   if (! to_p)
1914     secondary_class = SECONDARY_OUTPUT_RELOAD_CLASS (class, mode, x);
1915 #endif
1916
1917   if (secondary_class != NO_REGS)
1918     return (move_cost[mode][(int) secondary_class][(int) class]
1919             + copy_cost (x, mode, secondary_class, 2));
1920 #endif  /* HAVE_SECONDARY_RELOADS */
1921
1922   /* For memory, use the memory move cost, for (hard) registers, use the
1923      cost to move between the register classes, and use 2 for everything
1924      else (constants).  */
1925
1926   if (GET_CODE (x) == MEM || class == NO_REGS)
1927     return MEMORY_MOVE_COST (mode, class, to_p);
1928
1929   else if (GET_CODE (x) == REG)
1930     return move_cost[mode][(int) REGNO_REG_CLASS (REGNO (x))][(int) class];
1931
1932   else
1933     /* If this is a constant, we may eventually want to call rtx_cost here.  */
1934     return COSTS_N_INSNS (1);
1935 }
1936 \f
1937 /* Record the pseudo registers we must reload into hard registers
1938    in a subexpression of a memory address, X.
1939
1940    CLASS is the class that the register needs to be in and is either
1941    BASE_REG_CLASS or INDEX_REG_CLASS.
1942
1943    SCALE is twice the amount to multiply the cost by (it is twice so we
1944    can represent half-cost adjustments).  */
1945
1946 static void
1947 record_address_regs (x, class, scale)
1948      rtx x;
1949      enum reg_class class;
1950      int scale;
1951 {
1952   enum rtx_code code = GET_CODE (x);
1953
1954   switch (code)
1955     {
1956     case CONST_INT:
1957     case CONST:
1958     case CC0:
1959     case PC:
1960     case SYMBOL_REF:
1961     case LABEL_REF:
1962       return;
1963
1964     case PLUS:
1965       /* When we have an address that is a sum,
1966          we must determine whether registers are "base" or "index" regs.
1967          If there is a sum of two registers, we must choose one to be
1968          the "base".  Luckily, we can use the REG_POINTER to make a good
1969          choice most of the time.  We only need to do this on machines
1970          that can have two registers in an address and where the base
1971          and index register classes are different.
1972
1973          ??? This code used to set REGNO_POINTER_FLAG in some cases, but
1974          that seems bogus since it should only be set when we are sure
1975          the register is being used as a pointer.  */
1976
1977       {
1978         rtx arg0 = XEXP (x, 0);
1979         rtx arg1 = XEXP (x, 1);
1980         enum rtx_code code0 = GET_CODE (arg0);
1981         enum rtx_code code1 = GET_CODE (arg1);
1982
1983         /* Look inside subregs.  */
1984         if (code0 == SUBREG)
1985           arg0 = SUBREG_REG (arg0), code0 = GET_CODE (arg0);
1986         if (code1 == SUBREG)
1987           arg1 = SUBREG_REG (arg1), code1 = GET_CODE (arg1);
1988
1989         /* If this machine only allows one register per address, it must
1990            be in the first operand.  */
1991
1992         if (MAX_REGS_PER_ADDRESS == 1)
1993           record_address_regs (arg0, class, scale);
1994
1995         /* If index and base registers are the same on this machine, just
1996            record registers in any non-constant operands.  We assume here,
1997            as well as in the tests below, that all addresses are in
1998            canonical form.  */
1999
2000         else if (INDEX_REG_CLASS == MODE_BASE_REG_CLASS (VOIDmode))
2001           {
2002             record_address_regs (arg0, class, scale);
2003             if (! CONSTANT_P (arg1))
2004               record_address_regs (arg1, class, scale);
2005           }
2006
2007         /* If the second operand is a constant integer, it doesn't change
2008            what class the first operand must be.  */
2009
2010         else if (code1 == CONST_INT || code1 == CONST_DOUBLE)
2011           record_address_regs (arg0, class, scale);
2012
2013         /* If the second operand is a symbolic constant, the first operand
2014            must be an index register.  */
2015
2016         else if (code1 == SYMBOL_REF || code1 == CONST || code1 == LABEL_REF)
2017           record_address_regs (arg0, INDEX_REG_CLASS, scale);
2018
2019         /* If both operands are registers but one is already a hard register
2020            of index or base class, give the other the class that the hard
2021            register is not.  */
2022
2023 #ifdef REG_OK_FOR_BASE_P
2024         else if (code0 == REG && code1 == REG
2025                  && REGNO (arg0) < FIRST_PSEUDO_REGISTER
2026                  && (REG_OK_FOR_BASE_P (arg0) || REG_OK_FOR_INDEX_P (arg0)))
2027           record_address_regs (arg1,
2028                                REG_OK_FOR_BASE_P (arg0)
2029                                ? INDEX_REG_CLASS : MODE_BASE_REG_CLASS (VOIDmode),
2030                                scale);
2031         else if (code0 == REG && code1 == REG
2032                  && REGNO (arg1) < FIRST_PSEUDO_REGISTER
2033                  && (REG_OK_FOR_BASE_P (arg1) || REG_OK_FOR_INDEX_P (arg1)))
2034           record_address_regs (arg0,
2035                                REG_OK_FOR_BASE_P (arg1)
2036                                ? INDEX_REG_CLASS : MODE_BASE_REG_CLASS (VOIDmode),
2037                                scale);
2038 #endif
2039
2040         /* If one operand is known to be a pointer, it must be the base
2041            with the other operand the index.  Likewise if the other operand
2042            is a MULT.  */
2043
2044         else if ((code0 == REG && REG_POINTER (arg0))
2045                  || code1 == MULT)
2046           {
2047             record_address_regs (arg0, MODE_BASE_REG_CLASS (VOIDmode), scale);
2048             record_address_regs (arg1, INDEX_REG_CLASS, scale);
2049           }
2050         else if ((code1 == REG && REG_POINTER (arg1))
2051                  || code0 == MULT)
2052           {
2053             record_address_regs (arg0, INDEX_REG_CLASS, scale);
2054             record_address_regs (arg1, MODE_BASE_REG_CLASS (VOIDmode), scale);
2055           }
2056
2057         /* Otherwise, count equal chances that each might be a base
2058            or index register.  This case should be rare.  */
2059
2060         else
2061           {
2062             record_address_regs (arg0, MODE_BASE_REG_CLASS (VOIDmode),
2063                                  scale / 2);
2064             record_address_regs (arg0, INDEX_REG_CLASS, scale / 2);
2065             record_address_regs (arg1, MODE_BASE_REG_CLASS (VOIDmode),
2066                                  scale / 2);
2067             record_address_regs (arg1, INDEX_REG_CLASS, scale / 2);
2068           }
2069       }
2070       break;
2071
2072       /* Double the importance of a pseudo register that is incremented
2073          or decremented, since it would take two extra insns
2074          if it ends up in the wrong place.  */
2075     case POST_MODIFY:
2076     case PRE_MODIFY:
2077       record_address_regs (XEXP (x, 0), MODE_BASE_REG_CLASS (VOIDmode),
2078                            2 * scale);
2079       if (REG_P (XEXP (XEXP (x, 1), 1)))
2080         record_address_regs (XEXP (XEXP (x, 1), 1),
2081                              INDEX_REG_CLASS, 2 * scale);
2082       break;
2083
2084     case POST_INC:
2085     case PRE_INC:
2086     case POST_DEC:
2087     case PRE_DEC:
2088       /* Double the importance of a pseudo register that is incremented
2089          or decremented, since it would take two extra insns
2090          if it ends up in the wrong place.  If the operand is a pseudo,
2091          show it is being used in an INC_DEC context.  */
2092
2093 #ifdef FORBIDDEN_INC_DEC_CLASSES
2094       if (GET_CODE (XEXP (x, 0)) == REG
2095           && REGNO (XEXP (x, 0)) >= FIRST_PSEUDO_REGISTER)
2096         in_inc_dec[REGNO (XEXP (x, 0))] = 1;
2097 #endif
2098
2099       record_address_regs (XEXP (x, 0), class, 2 * scale);
2100       break;
2101
2102     case REG:
2103       {
2104         struct costs *pp = &costs[REGNO (x)];
2105         int i;
2106
2107         pp->mem_cost += (MEMORY_MOVE_COST (Pmode, class, 1) * scale) / 2;
2108
2109         for (i = 0; i < N_REG_CLASSES; i++)
2110           pp->cost[i] += (may_move_in_cost[Pmode][i][(int) class] * scale) / 2;
2111       }
2112       break;
2113
2114     default:
2115       {
2116         const char *fmt = GET_RTX_FORMAT (code);
2117         int i;
2118         for (i = GET_RTX_LENGTH (code) - 1; i >= 0; i--)
2119           if (fmt[i] == 'e')
2120             record_address_regs (XEXP (x, i), class, scale);
2121       }
2122     }
2123 }
2124 \f
2125 #ifdef FORBIDDEN_INC_DEC_CLASSES
2126
2127 /* Return 1 if REG is valid as an auto-increment memory reference
2128    to an object of MODE.  */
2129
2130 static int
2131 auto_inc_dec_reg_p (reg, mode)
2132      rtx reg;
2133      enum machine_mode mode;
2134 {
2135   if (HAVE_POST_INCREMENT
2136       && memory_address_p (mode, gen_rtx_POST_INC (Pmode, reg)))
2137     return 1;
2138
2139   if (HAVE_POST_DECREMENT
2140       && memory_address_p (mode, gen_rtx_POST_DEC (Pmode, reg)))
2141     return 1;
2142
2143   if (HAVE_PRE_INCREMENT
2144       && memory_address_p (mode, gen_rtx_PRE_INC (Pmode, reg)))
2145     return 1;
2146
2147   if (HAVE_PRE_DECREMENT
2148       && memory_address_p (mode, gen_rtx_PRE_DEC (Pmode, reg)))
2149     return 1;
2150
2151   return 0;
2152 }
2153 #endif
2154 \f
2155 static short *renumber;
2156 static size_t regno_allocated;
2157 static unsigned int reg_n_max;
2158
2159 /* Allocate enough space to hold NUM_REGS registers for the tables used for
2160    reg_scan and flow_analysis that are indexed by the register number.  If
2161    NEW_P is non zero, initialize all of the registers, otherwise only
2162    initialize the new registers allocated.  The same table is kept from
2163    function to function, only reallocating it when we need more room.  If
2164    RENUMBER_P is non zero, allocate the reg_renumber array also.  */
2165
2166 void
2167 allocate_reg_info (num_regs, new_p, renumber_p)
2168      size_t num_regs;
2169      int new_p;
2170      int renumber_p;
2171 {
2172   size_t size_info;
2173   size_t size_renumber;
2174   size_t min = (new_p) ? 0 : reg_n_max;
2175   struct reg_info_data *reg_data;
2176
2177   if (num_regs > regno_allocated)
2178     {
2179       size_t old_allocated = regno_allocated;
2180
2181       regno_allocated = num_regs + (num_regs / 20);     /* add some slop space */
2182       size_renumber = regno_allocated * sizeof (short);
2183
2184       if (!reg_n_info)
2185         {
2186           VARRAY_REG_INIT (reg_n_info, regno_allocated, "reg_n_info");
2187           renumber = (short *) xmalloc (size_renumber);
2188           reg_pref_buffer = (struct reg_pref *) xmalloc (regno_allocated
2189                                               * sizeof (struct reg_pref));
2190         }
2191
2192       else
2193         {
2194           VARRAY_GROW (reg_n_info, regno_allocated);
2195
2196           if (new_p)            /* if we're zapping everything, no need to realloc */
2197             {
2198               free ((char *) renumber);
2199               free ((char *) reg_pref);
2200               renumber = (short *) xmalloc (size_renumber);
2201               reg_pref_buffer = (struct reg_pref *) xmalloc (regno_allocated
2202                                                   * sizeof (struct reg_pref));
2203             }
2204
2205           else
2206             {
2207               renumber = (short *) xrealloc ((char *) renumber, size_renumber);
2208               reg_pref_buffer = (struct reg_pref *) xrealloc ((char *) reg_pref_buffer,
2209                                                    regno_allocated
2210                                                    * sizeof (struct reg_pref));
2211             }
2212         }
2213
2214       size_info = (regno_allocated - old_allocated) * sizeof (reg_info)
2215         + sizeof (struct reg_info_data) - sizeof (reg_info);
2216       reg_data = (struct reg_info_data *) xcalloc (size_info, 1);
2217       reg_data->min_index = old_allocated;
2218       reg_data->max_index = regno_allocated - 1;
2219       reg_data->next = reg_info_head;
2220       reg_info_head = reg_data;
2221     }
2222
2223   reg_n_max = num_regs;
2224   if (min < num_regs)
2225     {
2226       /* Loop through each of the segments allocated for the actual
2227          reg_info pages, and set up the pointers, zero the pages, etc.  */
2228       for (reg_data = reg_info_head;
2229            reg_data && reg_data->max_index >= min;
2230            reg_data = reg_data->next)
2231         {
2232           size_t min_index = reg_data->min_index;
2233           size_t max_index = reg_data->max_index;
2234           size_t max = MIN (max_index, num_regs);
2235           size_t local_min = min - min_index;
2236           size_t i;
2237
2238           if (reg_data->min_index > num_regs)
2239             continue;
2240
2241           if (min < min_index)
2242             local_min = 0;
2243           if (!reg_data->used_p)        /* page just allocated with calloc */
2244             reg_data->used_p = 1;       /* no need to zero */
2245           else
2246             memset ((char *) &reg_data->data[local_min], 0,
2247                    sizeof (reg_info) * (max - min_index - local_min + 1));
2248
2249           for (i = min_index+local_min; i <= max; i++)
2250             {
2251               VARRAY_REG (reg_n_info, i) = &reg_data->data[i-min_index];
2252               REG_BASIC_BLOCK (i) = REG_BLOCK_UNKNOWN;
2253               renumber[i] = -1;
2254               reg_pref_buffer[i].prefclass = (char) NO_REGS;
2255               reg_pref_buffer[i].altclass = (char) NO_REGS;
2256             }
2257         }
2258     }
2259
2260   /* If {pref,alt}class have already been allocated, update the pointers to
2261      the newly realloced ones.  */
2262   if (reg_pref)
2263     reg_pref = reg_pref_buffer;
2264
2265   if (renumber_p)
2266     reg_renumber = renumber;
2267
2268   /* Tell the regset code about the new number of registers */
2269   MAX_REGNO_REG_SET (num_regs, new_p, renumber_p);
2270 }
2271
2272 /* Free up the space allocated by allocate_reg_info.  */
2273 void
2274 free_reg_info ()
2275 {
2276   if (reg_n_info)
2277     {
2278       struct reg_info_data *reg_data;
2279       struct reg_info_data *reg_next;
2280
2281       VARRAY_FREE (reg_n_info);
2282       for (reg_data = reg_info_head; reg_data; reg_data = reg_next)
2283         {
2284           reg_next = reg_data->next;
2285           free ((char *) reg_data);
2286         }
2287
2288       free (reg_pref_buffer);
2289       reg_pref_buffer = (struct reg_pref *) 0;
2290       reg_info_head = (struct reg_info_data *) 0;
2291       renumber = (short *) 0;
2292     }
2293   regno_allocated = 0;
2294   reg_n_max = 0;
2295 }
2296 \f
2297 /* This is the `regscan' pass of the compiler, run just before cse
2298    and again just before loop.
2299
2300    It finds the first and last use of each pseudo-register
2301    and records them in the vectors regno_first_uid, regno_last_uid
2302    and counts the number of sets in the vector reg_n_sets.
2303
2304    REPEAT is nonzero the second time this is called.  */
2305
2306 /* Maximum number of parallel sets and clobbers in any insn in this fn.
2307    Always at least 3, since the combiner could put that many together
2308    and we want this to remain correct for all the remaining passes.
2309    This corresponds to the maximum number of times note_stores will call
2310    a function for any insn.  */
2311
2312 int max_parallel;
2313
2314 /* Used as a temporary to record the largest number of registers in
2315    PARALLEL in a SET_DEST.  This is added to max_parallel.  */
2316
2317 static int max_set_parallel;
2318
2319 void
2320 reg_scan (f, nregs, repeat)
2321      rtx f;
2322      unsigned int nregs;
2323      int repeat ATTRIBUTE_UNUSED;
2324 {
2325   rtx insn;
2326
2327   allocate_reg_info (nregs, TRUE, FALSE);
2328   max_parallel = 3;
2329   max_set_parallel = 0;
2330
2331   for (insn = f; insn; insn = NEXT_INSN (insn))
2332     if (GET_CODE (insn) == INSN
2333         || GET_CODE (insn) == CALL_INSN
2334         || GET_CODE (insn) == JUMP_INSN)
2335       {
2336         if (GET_CODE (PATTERN (insn)) == PARALLEL
2337             && XVECLEN (PATTERN (insn), 0) > max_parallel)
2338           max_parallel = XVECLEN (PATTERN (insn), 0);
2339         reg_scan_mark_refs (PATTERN (insn), insn, 0, 0);
2340
2341         if (REG_NOTES (insn))
2342           reg_scan_mark_refs (REG_NOTES (insn), insn, 1, 0);
2343       }
2344
2345   max_parallel += max_set_parallel;
2346 }
2347
2348 /* Update 'regscan' information by looking at the insns
2349    from FIRST to LAST.  Some new REGs have been created,
2350    and any REG with number greater than OLD_MAX_REGNO is
2351    such a REG.  We only update information for those.  */
2352
2353 void
2354 reg_scan_update (first, last, old_max_regno)
2355      rtx first;
2356      rtx last;
2357      unsigned int old_max_regno;
2358 {
2359   rtx insn;
2360
2361   allocate_reg_info (max_reg_num (), FALSE, FALSE);
2362
2363   for (insn = first; insn != last; insn = NEXT_INSN (insn))
2364     if (GET_CODE (insn) == INSN
2365         || GET_CODE (insn) == CALL_INSN
2366         || GET_CODE (insn) == JUMP_INSN)
2367       {
2368         if (GET_CODE (PATTERN (insn)) == PARALLEL
2369             && XVECLEN (PATTERN (insn), 0) > max_parallel)
2370           max_parallel = XVECLEN (PATTERN (insn), 0);
2371         reg_scan_mark_refs (PATTERN (insn), insn, 0, old_max_regno);
2372
2373         if (REG_NOTES (insn))
2374           reg_scan_mark_refs (REG_NOTES (insn), insn, 1, old_max_regno);
2375       }
2376 }
2377
2378 /* X is the expression to scan.  INSN is the insn it appears in.
2379    NOTE_FLAG is nonzero if X is from INSN's notes rather than its body.
2380    We should only record information for REGs with numbers
2381    greater than or equal to MIN_REGNO.  */
2382
2383 static void
2384 reg_scan_mark_refs (x, insn, note_flag, min_regno)
2385      rtx x;
2386      rtx insn;
2387      int note_flag;
2388      unsigned int min_regno;
2389 {
2390   enum rtx_code code;
2391   rtx dest;
2392   rtx note;
2393
2394   code = GET_CODE (x);
2395   switch (code)
2396     {
2397     case CONST:
2398     case CONST_INT:
2399     case CONST_DOUBLE:
2400     case CONST_VECTOR:
2401     case CC0:
2402     case PC:
2403     case SYMBOL_REF:
2404     case LABEL_REF:
2405     case ADDR_VEC:
2406     case ADDR_DIFF_VEC:
2407       return;
2408
2409     case REG:
2410       {
2411         unsigned int regno = REGNO (x);
2412
2413         if (regno >= min_regno)
2414           {
2415             REGNO_LAST_NOTE_UID (regno) = INSN_UID (insn);
2416             if (!note_flag)
2417               REGNO_LAST_UID (regno) = INSN_UID (insn);
2418             if (REGNO_FIRST_UID (regno) == 0)
2419               REGNO_FIRST_UID (regno) = INSN_UID (insn);
2420           }
2421       }
2422       break;
2423
2424     case EXPR_LIST:
2425       if (XEXP (x, 0))
2426         reg_scan_mark_refs (XEXP (x, 0), insn, note_flag, min_regno);
2427       if (XEXP (x, 1))
2428         reg_scan_mark_refs (XEXP (x, 1), insn, note_flag, min_regno);
2429       break;
2430
2431     case INSN_LIST:
2432       if (XEXP (x, 1))
2433         reg_scan_mark_refs (XEXP (x, 1), insn, note_flag, min_regno);
2434       break;
2435
2436     case SET:
2437       /* Count a set of the destination if it is a register.  */
2438       for (dest = SET_DEST (x);
2439            GET_CODE (dest) == SUBREG || GET_CODE (dest) == STRICT_LOW_PART
2440            || GET_CODE (dest) == ZERO_EXTEND;
2441            dest = XEXP (dest, 0))
2442         ;
2443
2444       /* For a PARALLEL, record the number of things (less the usual one for a
2445          SET) that are set.  */
2446       if (GET_CODE (dest) == PARALLEL)
2447         max_set_parallel = MAX (max_set_parallel, XVECLEN (dest, 0) - 1);
2448
2449       if (GET_CODE (dest) == REG
2450           && REGNO (dest) >= min_regno)
2451         {
2452           REG_N_SETS (REGNO (dest))++;
2453           REG_N_REFS (REGNO (dest))++;
2454         }
2455
2456       /* If this is setting a pseudo from another pseudo or the sum of a
2457          pseudo and a constant integer and the other pseudo is known to be
2458          a pointer, set the destination to be a pointer as well.
2459
2460          Likewise if it is setting the destination from an address or from a
2461          value equivalent to an address or to the sum of an address and
2462          something else.
2463
2464          But don't do any of this if the pseudo corresponds to a user
2465          variable since it should have already been set as a pointer based
2466          on the type.  */
2467
2468       if (GET_CODE (SET_DEST (x)) == REG
2469           && REGNO (SET_DEST (x)) >= FIRST_PSEUDO_REGISTER
2470           && REGNO (SET_DEST (x)) >= min_regno
2471           /* If the destination pseudo is set more than once, then other
2472              sets might not be to a pointer value (consider access to a
2473              union in two threads of control in the presense of global
2474              optimizations).  So only set REG_POINTER on the destination
2475              pseudo if this is the only set of that pseudo.  */
2476           && REG_N_SETS (REGNO (SET_DEST (x))) == 1
2477           && ! REG_USERVAR_P (SET_DEST (x))
2478           && ! REG_POINTER (SET_DEST (x))
2479           && ((GET_CODE (SET_SRC (x)) == REG
2480                && REG_POINTER (SET_SRC (x)))
2481               || ((GET_CODE (SET_SRC (x)) == PLUS
2482                    || GET_CODE (SET_SRC (x)) == LO_SUM)
2483                   && GET_CODE (XEXP (SET_SRC (x), 1)) == CONST_INT
2484                   && GET_CODE (XEXP (SET_SRC (x), 0)) == REG
2485                   && REG_POINTER (XEXP (SET_SRC (x), 0)))
2486               || GET_CODE (SET_SRC (x)) == CONST
2487               || GET_CODE (SET_SRC (x)) == SYMBOL_REF
2488               || GET_CODE (SET_SRC (x)) == LABEL_REF
2489               || (GET_CODE (SET_SRC (x)) == HIGH
2490                   && (GET_CODE (XEXP (SET_SRC (x), 0)) == CONST
2491                       || GET_CODE (XEXP (SET_SRC (x), 0)) == SYMBOL_REF
2492                       || GET_CODE (XEXP (SET_SRC (x), 0)) == LABEL_REF))
2493               || ((GET_CODE (SET_SRC (x)) == PLUS
2494                    || GET_CODE (SET_SRC (x)) == LO_SUM)
2495                   && (GET_CODE (XEXP (SET_SRC (x), 1)) == CONST
2496                       || GET_CODE (XEXP (SET_SRC (x), 1)) == SYMBOL_REF
2497                       || GET_CODE (XEXP (SET_SRC (x), 1)) == LABEL_REF))
2498               || ((note = find_reg_note (insn, REG_EQUAL, 0)) != 0
2499                   && (GET_CODE (XEXP (note, 0)) == CONST
2500                       || GET_CODE (XEXP (note, 0)) == SYMBOL_REF
2501                       || GET_CODE (XEXP (note, 0)) == LABEL_REF))))
2502         REG_POINTER (SET_DEST (x)) = 1;
2503
2504       /* If this is setting a register from a register or from a simple
2505          conversion of a register, propagate REG_DECL.  */
2506       if (GET_CODE (dest) == REG)
2507         {
2508           rtx src = SET_SRC (x);
2509
2510           while (GET_CODE (src) == SIGN_EXTEND
2511                  || GET_CODE (src) == ZERO_EXTEND
2512                  || GET_CODE (src) == TRUNCATE
2513                  || (GET_CODE (src) == SUBREG && subreg_lowpart_p (src)))
2514             src = XEXP (src, 0);
2515
2516           if (GET_CODE (src) == REG && REGNO_DECL (REGNO (src)) == 0)
2517             REGNO_DECL (REGNO (src)) = REGNO_DECL (REGNO (dest));
2518           else if (GET_CODE (src) == REG && REGNO_DECL (REGNO (dest)) == 0)
2519             REGNO_DECL (REGNO (dest)) = REGNO_DECL (REGNO (src));
2520         }
2521
2522       /* ... fall through ...  */
2523
2524     default:
2525       {
2526         const char *fmt = GET_RTX_FORMAT (code);
2527         int i;
2528         for (i = GET_RTX_LENGTH (code) - 1; i >= 0; i--)
2529           {
2530             if (fmt[i] == 'e')
2531               reg_scan_mark_refs (XEXP (x, i), insn, note_flag, min_regno);
2532             else if (fmt[i] == 'E' && XVEC (x, i) != 0)
2533               {
2534                 int j;
2535                 for (j = XVECLEN (x, i) - 1; j >= 0; j--)
2536                   reg_scan_mark_refs (XVECEXP (x, i, j), insn, note_flag, min_regno);
2537               }
2538           }
2539       }
2540     }
2541 }
2542 \f
2543 /* Return nonzero if C1 is a subset of C2, i.e., if every register in C1
2544    is also in C2.  */
2545
2546 int
2547 reg_class_subset_p (c1, c2)
2548      enum reg_class c1;
2549      enum reg_class c2;
2550 {
2551   if (c1 == c2) return 1;
2552
2553   if (c2 == ALL_REGS)
2554   win:
2555     return 1;
2556   GO_IF_HARD_REG_SUBSET (reg_class_contents[(int) c1],
2557                          reg_class_contents[(int) c2],
2558                          win);
2559   return 0;
2560 }
2561
2562 /* Return nonzero if there is a register that is in both C1 and C2.  */
2563
2564 int
2565 reg_classes_intersect_p (c1, c2)
2566      enum reg_class c1;
2567      enum reg_class c2;
2568 {
2569 #ifdef HARD_REG_SET
2570   register
2571 #endif
2572     HARD_REG_SET c;
2573
2574   if (c1 == c2) return 1;
2575
2576   if (c1 == ALL_REGS || c2 == ALL_REGS)
2577     return 1;
2578
2579   COPY_HARD_REG_SET (c, reg_class_contents[(int) c1]);
2580   AND_HARD_REG_SET (c, reg_class_contents[(int) c2]);
2581
2582   GO_IF_HARD_REG_SUBSET (c, reg_class_contents[(int) NO_REGS], lose);
2583   return 1;
2584
2585  lose:
2586   return 0;
2587 }
2588
2589 /* Release any memory allocated by register sets.  */
2590
2591 void
2592 regset_release_memory ()
2593 {
2594   bitmap_release_memory ();
2595 }
2596
2597 #include "gt-regclass.h"