OSDN Git Service

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