OSDN Git Service

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