Simplify reload register allocation
[platform/upstream/gcc.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   rtx mem = top_of_stack[(int) mode];
507
508   if (in)
509     {
510 #ifdef SECONDARY_INPUT_RELOAD_CLASS
511       altclass = SECONDARY_INPUT_RELOAD_CLASS (class, mode, mem);
512 #else
513       altclass = NO_REGS;
514 #endif
515     }
516   else
517     {
518 #ifdef SECONDARY_OUTPUT_RELOAD_CLASS
519       altclass = SECONDARY_OUTPUT_RELOAD_CLASS (class, mode, mem);
520 #else
521       altclass = NO_REGS;
522 #endif
523     }
524
525   if (altclass == NO_REGS)
526     return 0;
527
528   if (in)
529     partial_cost = REGISTER_MOVE_COST (altclass, class);
530   else
531     partial_cost = REGISTER_MOVE_COST (class, altclass);
532
533   if (class == altclass)
534     /* This isn't simply a copy-to-temporary situation.  Can't guess
535        what it is, so MEMORY_MOVE_COST really ought not to be calling
536        here in that case.
537
538        I'm tempted to put in an abort here, but returning this will
539        probably only give poor estimates, which is what we would've
540        had before this code anyways.  */
541     return partial_cost;
542
543   /* Check if the secondary reload register will also need a
544      secondary reload.  */
545   return memory_move_secondary_cost (mode, altclass, in) + partial_cost;
546 }
547 #endif
548
549 /* Return a machine mode that is legitimate for hard reg REGNO and large
550    enough to save nregs.  If we can't find one, return VOIDmode.  */
551
552 enum machine_mode
553 choose_hard_reg_mode (regno, nregs)
554      int regno;
555      int nregs;
556 {
557   enum machine_mode found_mode = VOIDmode, mode;
558
559   /* We first look for the largest integer mode that can be validly
560      held in REGNO.  If none, we look for the largest floating-point mode.
561      If we still didn't find a valid mode, try CCmode.  */
562
563   for (mode = GET_CLASS_NARROWEST_MODE (MODE_INT);
564        mode != VOIDmode;
565        mode = GET_MODE_WIDER_MODE (mode))
566     if (HARD_REGNO_NREGS (regno, mode) == nregs
567         && HARD_REGNO_MODE_OK (regno, mode))
568       found_mode = mode;
569
570   if (found_mode != VOIDmode)
571     return found_mode;
572
573   for (mode = GET_CLASS_NARROWEST_MODE (MODE_FLOAT);
574        mode != VOIDmode;
575        mode = GET_MODE_WIDER_MODE (mode))
576     if (HARD_REGNO_NREGS (regno, mode) == nregs
577         && HARD_REGNO_MODE_OK (regno, mode))
578       found_mode = mode;
579
580   if (found_mode != VOIDmode)
581     return found_mode;
582
583   if (HARD_REGNO_NREGS (regno, CCmode) == nregs
584       && HARD_REGNO_MODE_OK (regno, CCmode))
585     return CCmode;
586
587   /* We can't find a mode valid for this register.  */
588   return VOIDmode;
589 }
590
591 /* Specify the usage characteristics of the register named NAME.
592    It should be a fixed register if FIXED and a
593    call-used register if CALL_USED.  */
594
595 void
596 fix_register (name, fixed, call_used)
597      const char *name;
598      int fixed, call_used;
599 {
600   int i;
601
602   /* Decode the name and update the primary form of
603      the register info.  */
604
605   if ((i = decode_reg_name (name)) >= 0)
606     {
607       if ((i == STACK_POINTER_REGNUM
608 #ifdef HARD_FRAME_POINTER_REGNUM
609            || i == HARD_FRAME_POINTER_REGNUM
610 #else
611            || i == FRAME_POINTER_REGNUM
612 #endif
613            )
614           && (fixed == 0 || call_used == 0))
615         {
616           static const char * const what_option[2][2] = {
617             { "call-saved", "call-used" },
618             { "no-such-option", "fixed" }};
619           
620           error ("can't use '%s' as a %s register", name, 
621                  what_option[fixed][call_used]);
622         }
623       else
624         {
625           fixed_regs[i] = fixed;
626           call_used_regs[i] = call_used;
627         }
628     }
629   else
630     {
631       warning ("unknown register name: %s", name);
632     }
633 }
634
635 /* Mark register number I as global.  */
636
637 void
638 globalize_reg (i)
639      int i;
640 {
641   if (fixed_regs[i] == 0 && no_global_reg_vars)
642     error ("global register variable follows a function definition");
643
644   if (global_regs[i])
645     {
646       warning ("register used for two global register variables");
647       return;
648     }
649
650   if (call_used_regs[i] && ! fixed_regs[i])
651     warning ("call-clobbered register used for global register variable");
652
653   global_regs[i] = 1;
654
655   /* If already fixed, nothing else to do.  */
656   if (fixed_regs[i])
657     return;
658
659   fixed_regs[i] = call_used_regs[i] = call_fixed_regs[i] = 1;
660   n_non_fixed_regs--;
661
662   SET_HARD_REG_BIT (fixed_reg_set, i);
663   SET_HARD_REG_BIT (call_used_reg_set, i);
664   SET_HARD_REG_BIT (call_fixed_reg_set, i);
665 }
666 \f
667 /* Now the data and code for the `regclass' pass, which happens
668    just before local-alloc.  */
669
670 /* The `costs' struct records the cost of using a hard register of each class
671    and of using memory for each pseudo.  We use this data to set up
672    register class preferences.  */
673
674 struct costs
675 {
676   int cost[N_REG_CLASSES];
677   int mem_cost;
678 };
679
680 /* Structure used to record preferrences of given pseudo.  */
681 struct reg_pref
682 {
683   /* (enum reg_class) prefclass is the preferred class.  */
684   char prefclass;
685
686   /* altclass is a register class that we should use for allocating
687      pseudo if no register in the preferred class is available.
688      If no register in this class is available, memory is preferred.
689
690      It might appear to be more general to have a bitmask of classes here,
691      but since it is recommended that there be a class corresponding to the
692      union of most major pair of classes, that generality is not required.  */
693   char altclass;
694 };
695
696 /* Record the cost of each class for each pseudo.  */
697
698 static struct costs *costs;
699
700 /* Initialized once, and used to initialize cost values for each insn.  */
701
702 static struct costs init_cost;
703
704 /* Record the same data by operand number, accumulated for each alternative
705    in an insn.  The contribution to a pseudo is that of the minimum-cost
706    alternative.  */
707
708 static struct costs op_costs[MAX_RECOG_OPERANDS];
709
710 /* Record preferrences of each pseudo.
711    This is available after `regclass' is run.  */
712
713 static struct reg_pref *reg_pref;
714
715 /* Allocated buffers for reg_pref. */
716
717 static struct reg_pref *reg_pref_buffer;
718
719 /* Record the depth of loops that we are in.  */
720
721 static int loop_depth;
722
723 /* Account for the fact that insns within a loop are executed very commonly,
724    but don't keep doing this as loops go too deep.  */
725
726 static int loop_cost;
727
728 static rtx scan_one_insn        PROTO((rtx, int));
729 static void dump_regclass       PROTO((FILE *));
730 static void record_reg_classes  PROTO((int, int, rtx *, enum machine_mode *,
731                                        char *, const char **, rtx));
732 static int copy_cost            PROTO((rtx, enum machine_mode, 
733                                        enum reg_class, int));
734 static void record_address_regs PROTO((rtx, enum reg_class, int));
735 #ifdef FORBIDDEN_INC_DEC_CLASSES
736 static int auto_inc_dec_reg_p   PROTO((rtx, enum machine_mode));
737 #endif
738 static void reg_scan_mark_refs  PROTO((rtx, rtx, int, int));
739
740 /* Return the reg_class in which pseudo reg number REGNO is best allocated.
741    This function is sometimes called before the info has been computed.
742    When that happens, just return GENERAL_REGS, which is innocuous.  */
743
744 enum reg_class
745 reg_preferred_class (regno)
746      int regno;
747 {
748   if (reg_pref == 0)
749     return GENERAL_REGS;
750   return (enum reg_class) reg_pref[regno].prefclass;
751 }
752
753 enum reg_class
754 reg_alternate_class (regno)
755      int regno;
756 {
757   if (reg_pref == 0)
758     return ALL_REGS;
759
760   return (enum reg_class) reg_pref[regno].altclass;
761 }
762
763 /* Initialize some global data for this pass.  */
764
765 void
766 regclass_init ()
767 {
768   int i;
769
770   init_cost.mem_cost = 10000;
771   for (i = 0; i < N_REG_CLASSES; i++)
772     init_cost.cost[i] = 10000;
773
774   /* This prevents dump_flow_info from losing if called
775      before regclass is run.  */
776   reg_pref = NULL;
777
778   /* No more global register variables may be declared. */
779   no_global_reg_vars = 1;
780 }
781 \f
782 /* Dump register costs.  */
783 static void
784 dump_regclass (dump)
785      FILE *dump;
786 {
787   static const char *const reg_class_names[] = REG_CLASS_NAMES;
788   int i;
789   for (i = FIRST_PSEUDO_REGISTER; i < max_regno; i++)
790     {
791       enum reg_class class;
792       if (REG_N_REFS (i))
793         {
794           fprintf (dump, ";; Register %i costs:", i);
795           for (class = 0; class < N_REG_CLASSES; class++)
796             fprintf (dump, " %s:%i", reg_class_names[(int) class],
797                      costs[i].cost[class]);
798           fprintf (dump, " MEM:%i\n\n", costs[i].mem_cost);
799         }
800     }
801 }
802
803 \f
804 /* Subroutine of regclass, processes one insn INSN.  Scan it and record each
805    time it would save code to put a certain register in a certain class.
806    PASS, when nonzero, inhibits some optimizations which need only be done
807    once.
808    Return the last insn processed, so that the scan can be continued from
809    there.  */
810
811 static rtx
812 scan_one_insn (insn, pass)
813      rtx insn;
814      int pass;
815 {
816   enum rtx_code code = GET_CODE (insn);
817   enum rtx_code pat_code;
818   const char *constraints[MAX_RECOG_OPERANDS];
819   enum machine_mode modes[MAX_RECOG_OPERANDS];
820   char subreg_changes_size[MAX_RECOG_OPERANDS];
821   rtx set, note;
822   int i, j;
823
824   /* Show that an insn inside a loop is likely to be executed three
825      times more than insns outside a loop.  This is much more aggressive
826      than the assumptions made elsewhere and is being tried as an
827      experiment.  */
828
829   if (code == NOTE)
830     {
831       if (NOTE_LINE_NUMBER (insn) == NOTE_INSN_LOOP_BEG)
832         loop_depth++, loop_cost = 1 << (2 * MIN (loop_depth, 5));
833       else if (NOTE_LINE_NUMBER (insn) == NOTE_INSN_LOOP_END)
834         loop_depth--, loop_cost = 1 << (2 * MIN (loop_depth, 5));
835
836       return insn;
837     }
838
839   if (GET_RTX_CLASS (code) != 'i')
840     return insn;
841
842   pat_code = GET_CODE (PATTERN (insn));
843   if (pat_code == USE
844       || pat_code == CLOBBER
845       || pat_code == ASM_INPUT
846       || pat_code == ADDR_VEC
847       || pat_code == ADDR_DIFF_VEC)
848     return insn;
849
850   set = single_set (insn);
851   extract_insn (insn);
852
853   for (i = 0; i < recog_data.n_operands; i++)
854     {
855       constraints[i] = recog_data.constraints[i];
856       modes[i] = recog_data.operand_mode[i];
857     }
858   memset (subreg_changes_size, 0, sizeof (subreg_changes_size));
859
860   /* If this insn loads a parameter from its stack slot, then
861      it represents a savings, rather than a cost, if the
862      parameter is stored in memory.  Record this fact.  */
863
864   if (set != 0 && GET_CODE (SET_DEST (set)) == REG
865       && GET_CODE (SET_SRC (set)) == MEM
866       && (note = find_reg_note (insn, REG_EQUIV,
867                                 NULL_RTX)) != 0
868       && GET_CODE (XEXP (note, 0)) == MEM)
869     {
870       costs[REGNO (SET_DEST (set))].mem_cost
871         -= (MEMORY_MOVE_COST (GET_MODE (SET_DEST (set)),
872                               GENERAL_REGS, 1)
873             * loop_cost);
874       record_address_regs (XEXP (SET_SRC (set), 0),
875                            BASE_REG_CLASS, loop_cost * 2);
876       return insn;
877     }
878
879   /* Improve handling of two-address insns such as
880      (set X (ashift CONST Y)) where CONST must be made to
881      match X. Change it into two insns: (set X CONST)
882      (set X (ashift X Y)).  If we left this for reloading, it
883      would probably get three insns because X and Y might go
884      in the same place. This prevents X and Y from receiving
885      the same hard reg.
886
887      We can only do this if the modes of operands 0 and 1
888      (which might not be the same) are tieable and we only need
889      do this during our first pass.  */
890
891   if (pass == 0 && optimize
892       && recog_data.n_operands >= 3
893       && recog_data.constraints[1][0] == '0'
894       && recog_data.constraints[1][1] == 0
895       && CONSTANT_P (recog_data.operand[1])
896       && ! rtx_equal_p (recog_data.operand[0], recog_data.operand[1])
897       && ! rtx_equal_p (recog_data.operand[0], recog_data.operand[2])
898       && GET_CODE (recog_data.operand[0]) == REG
899       && MODES_TIEABLE_P (GET_MODE (recog_data.operand[0]),
900                           recog_data.operand_mode[1]))
901     {
902       rtx previnsn = prev_real_insn (insn);
903       rtx dest
904         = gen_lowpart (recog_data.operand_mode[1],
905                        recog_data.operand[0]);
906       rtx newinsn
907         = emit_insn_before (gen_move_insn (dest, recog_data.operand[1]), insn);
908
909       /* If this insn was the start of a basic block,
910          include the new insn in that block.
911          We need not check for code_label here;
912          while a basic block can start with a code_label,
913          INSN could not be at the beginning of that block.  */
914       if (previnsn == 0 || GET_CODE (previnsn) == JUMP_INSN)
915         {
916           int b;
917           for (b = 0; b < n_basic_blocks; b++)
918             if (insn == BLOCK_HEAD (b))
919               BLOCK_HEAD (b) = newinsn;
920         }
921
922       /* This makes one more setting of new insns's dest.  */
923       REG_N_SETS (REGNO (recog_data.operand[0]))++;
924
925       *recog_data.operand_loc[1] = recog_data.operand[0];
926       for (i = recog_data.n_dups - 1; i >= 0; i--)
927         if (recog_data.dup_num[i] == 1)
928           *recog_data.dup_loc[i] = recog_data.operand[0];
929
930       return PREV_INSN (newinsn);
931     }
932
933   /* If we get here, we are set up to record the costs of all the
934      operands for this insn.  Start by initializing the costs.
935      Then handle any address registers.  Finally record the desired
936      classes for any pseudos, doing it twice if some pair of
937      operands are commutative.  */
938              
939   for (i = 0; i < recog_data.n_operands; i++)
940     {
941       op_costs[i] = init_cost;
942
943       if (GET_CODE (recog_data.operand[i]) == SUBREG)
944         {
945           rtx inner = SUBREG_REG (recog_data.operand[i]);
946           if (GET_MODE_SIZE (modes[i]) != GET_MODE_SIZE (GET_MODE (inner)))
947             subreg_changes_size[i] = 1;
948           recog_data.operand[i] = inner;
949         }
950
951       if (GET_CODE (recog_data.operand[i]) == MEM)
952         record_address_regs (XEXP (recog_data.operand[i], 0),
953                              BASE_REG_CLASS, loop_cost * 2);
954       else if (constraints[i][0] == 'p')
955         record_address_regs (recog_data.operand[i],
956                              BASE_REG_CLASS, loop_cost * 2);
957     }
958
959   /* Check for commutative in a separate loop so everything will
960      have been initialized.  We must do this even if one operand
961      is a constant--see addsi3 in m68k.md.  */
962
963   for (i = 0; i < (int) recog_data.n_operands - 1; i++)
964     if (constraints[i][0] == '%')
965       {
966         const char *xconstraints[MAX_RECOG_OPERANDS];
967         int j;
968
969         /* Handle commutative operands by swapping the constraints.
970            We assume the modes are the same.  */
971
972         for (j = 0; j < recog_data.n_operands; j++)
973           xconstraints[j] = constraints[j];
974
975         xconstraints[i] = constraints[i+1];
976         xconstraints[i+1] = constraints[i];
977         record_reg_classes (recog_data.n_alternatives, recog_data.n_operands,
978                             recog_data.operand, modes, subreg_changes_size,
979                             xconstraints, insn);
980       }
981
982   record_reg_classes (recog_data.n_alternatives, recog_data.n_operands,
983                       recog_data.operand, modes, subreg_changes_size,
984                       constraints, insn);
985
986   /* Now add the cost for each operand to the total costs for
987      its register.  */
988
989   for (i = 0; i < recog_data.n_operands; i++)
990     if (GET_CODE (recog_data.operand[i]) == REG
991         && REGNO (recog_data.operand[i]) >= FIRST_PSEUDO_REGISTER)
992       {
993         int regno = REGNO (recog_data.operand[i]);
994         struct costs *p = &costs[regno], *q = &op_costs[i];
995
996         p->mem_cost += q->mem_cost * loop_cost;
997         for (j = 0; j < N_REG_CLASSES; j++)
998           p->cost[j] += q->cost[j] * loop_cost;
999       }
1000
1001   return insn;
1002 }
1003
1004 /* This is a pass of the compiler that scans all instructions
1005    and calculates the preferred class for each pseudo-register.
1006    This information can be accessed later by calling `reg_preferred_class'.
1007    This pass comes just before local register allocation.  */
1008
1009 void
1010 regclass (f, nregs, dump)
1011      rtx f;
1012      int nregs;
1013      FILE *dump;
1014 {
1015   register rtx insn;
1016   register int i;
1017   int pass;
1018
1019   init_recog ();
1020
1021   costs = (struct costs *) xmalloc (nregs * sizeof (struct costs));
1022
1023 #ifdef FORBIDDEN_INC_DEC_CLASSES
1024
1025   in_inc_dec = (char *) xmalloc (nregs);
1026
1027   /* Initialize information about which register classes can be used for
1028      pseudos that are auto-incremented or auto-decremented.  It would
1029      seem better to put this in init_reg_sets, but we need to be able
1030      to allocate rtx, which we can't do that early.  */
1031
1032   for (i = 0; i < N_REG_CLASSES; i++)
1033     {
1034       rtx r = gen_rtx_REG (VOIDmode, 0);
1035       enum machine_mode m;
1036       register int j;
1037
1038       for (j = 0; j < FIRST_PSEUDO_REGISTER; j++)
1039         if (TEST_HARD_REG_BIT (reg_class_contents[i], j))
1040           {
1041             REGNO (r) = j;
1042
1043             for (m = VOIDmode; (int) m < (int) MAX_MACHINE_MODE;
1044                  m = (enum machine_mode) ((int) m + 1))
1045               if (HARD_REGNO_MODE_OK (j, m))
1046                 {
1047                   PUT_MODE (r, m);
1048
1049                   /* If a register is not directly suitable for an
1050                      auto-increment or decrement addressing mode and
1051                      requires secondary reloads, disallow its class from
1052                      being used in such addresses.  */
1053
1054                   if ((0
1055 #ifdef SECONDARY_RELOAD_CLASS
1056                        || (SECONDARY_RELOAD_CLASS (BASE_REG_CLASS, m, r)
1057                            != NO_REGS)
1058 #else
1059 #ifdef SECONDARY_INPUT_RELOAD_CLASS
1060                        || (SECONDARY_INPUT_RELOAD_CLASS (BASE_REG_CLASS, m, r)
1061                            != NO_REGS)
1062 #endif
1063 #ifdef SECONDARY_OUTPUT_RELOAD_CLASS
1064                        || (SECONDARY_OUTPUT_RELOAD_CLASS (BASE_REG_CLASS, m, r)
1065                            != NO_REGS)
1066 #endif
1067 #endif
1068                        )
1069                       && ! auto_inc_dec_reg_p (r, m))
1070                     forbidden_inc_dec_class[i] = 1;
1071                 }
1072           }
1073     }
1074 #endif /* FORBIDDEN_INC_DEC_CLASSES */
1075
1076   /* Normally we scan the insns once and determine the best class to use for
1077      each register.  However, if -fexpensive_optimizations are on, we do so
1078      twice, the second time using the tentative best classes to guide the
1079      selection.  */
1080
1081   for (pass = 0; pass <= flag_expensive_optimizations; pass++)
1082     {
1083       /* Zero out our accumulation of the cost of each class for each reg.  */
1084
1085       bzero ((char *) costs, nregs * sizeof (struct costs));
1086
1087 #ifdef FORBIDDEN_INC_DEC_CLASSES
1088       bzero (in_inc_dec, nregs);
1089 #endif
1090
1091       loop_depth = 0, loop_cost = 1;
1092
1093       /* Scan the instructions and record each time it would
1094          save code to put a certain register in a certain class.  */
1095
1096       for (insn = f; insn; insn = NEXT_INSN (insn))
1097         {
1098           insn = scan_one_insn (insn, pass);
1099         }
1100       
1101       /* Now for each register look at how desirable each class is
1102          and find which class is preferred.  Store that in
1103          `prefclass'.  Record in `altclass' the largest register
1104          class any of whose registers is better than memory.  */
1105     
1106       if (pass == 0)
1107         reg_pref = reg_pref_buffer;
1108
1109       for (i = FIRST_PSEUDO_REGISTER; i < nregs; i++)
1110         {
1111           register int best_cost = (1 << (HOST_BITS_PER_INT - 2)) - 1;
1112           enum reg_class best = ALL_REGS, alt = NO_REGS;
1113           /* This is an enum reg_class, but we call it an int
1114              to save lots of casts.  */
1115           register int class;
1116           register struct costs *p = &costs[i];
1117
1118           for (class = (int) ALL_REGS - 1; class > 0; class--)
1119             {
1120               /* Ignore classes that are too small for this operand or
1121                  invalid for a operand that was auto-incremented.  */
1122               if (CLASS_MAX_NREGS (class, PSEUDO_REGNO_MODE (i))
1123                   > reg_class_size[class]
1124 #ifdef FORBIDDEN_INC_DEC_CLASSES
1125                   || (in_inc_dec[i] && forbidden_inc_dec_class[class])
1126 #endif
1127                   )
1128                 ;
1129               else if (p->cost[class] < best_cost)
1130                 {
1131                   best_cost = p->cost[class];
1132                   best = (enum reg_class) class;
1133                 }
1134               else if (p->cost[class] == best_cost)
1135                 best = reg_class_subunion[(int)best][class];
1136             }
1137
1138           /* Record the alternate register class; i.e., a class for which
1139              every register in it is better than using memory.  If adding a
1140              class would make a smaller class (i.e., no union of just those
1141              classes exists), skip that class.  The major unions of classes
1142              should be provided as a register class.  Don't do this if we
1143              will be doing it again later.  */
1144
1145           if (pass == 1 || ! flag_expensive_optimizations)
1146             for (class = 0; class < N_REG_CLASSES; class++)
1147               if (p->cost[class] < p->mem_cost
1148                   && (reg_class_size[(int) reg_class_subunion[(int) alt][class]]
1149                       > reg_class_size[(int) alt])
1150 #ifdef FORBIDDEN_INC_DEC_CLASSES
1151                   && ! (in_inc_dec[i] && forbidden_inc_dec_class[class])
1152 #endif
1153                   )
1154                 alt = reg_class_subunion[(int) alt][class];
1155           
1156           /* If we don't add any classes, nothing to try.  */
1157           if (alt == best)
1158             alt = NO_REGS;
1159
1160           /* We cast to (int) because (char) hits bugs in some compilers.  */
1161           reg_pref[i].prefclass = (int) best;
1162           reg_pref[i].altclass = (int) alt;
1163         }
1164     }
1165
1166   if (dump)
1167     dump_regclass (dump);
1168 #ifdef FORBIDDEN_INC_DEC_CLASSES
1169   free (in_inc_dec);
1170 #endif
1171   free (costs);
1172 }
1173 \f
1174 /* Record the cost of using memory or registers of various classes for
1175    the operands in INSN.
1176
1177    N_ALTS is the number of alternatives.
1178
1179    N_OPS is the number of operands.
1180
1181    OPS is an array of the operands.
1182
1183    MODES are the modes of the operands, in case any are VOIDmode.
1184
1185    CONSTRAINTS are the constraints to use for the operands.  This array
1186    is modified by this procedure.
1187
1188    This procedure works alternative by alternative.  For each alternative
1189    we assume that we will be able to allocate all pseudos to their ideal
1190    register class and calculate the cost of using that alternative.  Then
1191    we compute for each operand that is a pseudo-register, the cost of 
1192    having the pseudo allocated to each register class and using it in that
1193    alternative.  To this cost is added the cost of the alternative.
1194
1195    The cost of each class for this insn is its lowest cost among all the
1196    alternatives.  */
1197
1198 static void
1199 record_reg_classes (n_alts, n_ops, ops, modes, subreg_changes_size,
1200                     constraints, insn)
1201      int n_alts;
1202      int n_ops;
1203      rtx *ops;
1204      enum machine_mode *modes;
1205      char *subreg_changes_size;
1206      const char **constraints;
1207      rtx insn;
1208 {
1209   int alt;
1210   int i, j;
1211   rtx set;
1212
1213   /* Process each alternative, each time minimizing an operand's cost with
1214      the cost for each operand in that alternative.  */
1215
1216   for (alt = 0; alt < n_alts; alt++)
1217     {
1218       struct costs this_op_costs[MAX_RECOG_OPERANDS];
1219       int alt_fail = 0;
1220       int alt_cost = 0;
1221       enum reg_class classes[MAX_RECOG_OPERANDS];
1222       int allows_mem[MAX_RECOG_OPERANDS];
1223       int class;
1224
1225       for (i = 0; i < n_ops; i++)
1226         {
1227           const char *p = constraints[i];
1228           rtx op = ops[i];
1229           enum machine_mode mode = modes[i];
1230           int allows_addr = 0;
1231           int win = 0;
1232           unsigned char c;
1233
1234           /* Initially show we know nothing about the register class.  */
1235           classes[i] = NO_REGS;
1236           allows_mem[i] = 0;
1237
1238           /* If this operand has no constraints at all, we can conclude 
1239              nothing about it since anything is valid.  */
1240
1241           if (*p == 0)
1242             {
1243               if (GET_CODE (op) == REG && REGNO (op) >= FIRST_PSEUDO_REGISTER)
1244                 bzero ((char *) &this_op_costs[i], sizeof this_op_costs[i]);
1245
1246               continue;
1247             }
1248
1249           /* If this alternative is only relevant when this operand
1250              matches a previous operand, we do different things depending
1251              on whether this operand is a pseudo-reg or not.  We must process
1252              any modifiers for the operand before we can make this test.  */
1253
1254           while (*p == '%' || *p == '=' || *p == '+' || *p == '&')
1255             p++;
1256
1257           if (p[0] >= '0' && p[0] <= '0' + i && (p[1] == ',' || p[1] == 0))
1258             {
1259               /* Copy class and whether memory is allowed from the matching
1260                  alternative.  Then perform any needed cost computations
1261                  and/or adjustments.  */
1262               j = p[0] - '0';
1263               classes[i] = classes[j];
1264               allows_mem[i] = allows_mem[j];
1265
1266               if (GET_CODE (op) != REG || REGNO (op) < FIRST_PSEUDO_REGISTER)
1267                 {
1268                   /* If this matches the other operand, we have no added
1269                      cost and we win.  */
1270                   if (rtx_equal_p (ops[j], op))
1271                     win = 1;
1272
1273                   /* If we can put the other operand into a register, add to
1274                      the cost of this alternative the cost to copy this
1275                      operand to the register used for the other operand.  */
1276
1277                   else if (classes[j] != NO_REGS)
1278                     alt_cost += copy_cost (op, mode, classes[j], 1), win = 1;
1279                 }
1280               else if (GET_CODE (ops[j]) != REG
1281                        || REGNO (ops[j]) < FIRST_PSEUDO_REGISTER)
1282                 {
1283                   /* This op is a pseudo but the one it matches is not.  */
1284                   
1285                   /* If we can't put the other operand into a register, this
1286                      alternative can't be used.  */
1287
1288                   if (classes[j] == NO_REGS)
1289                     alt_fail = 1;
1290
1291                   /* Otherwise, add to the cost of this alternative the cost
1292                      to copy the other operand to the register used for this
1293                      operand.  */
1294
1295                   else
1296                     alt_cost += copy_cost (ops[j], mode, classes[j], 1);
1297                 }
1298               else
1299                 {
1300                   /* The costs of this operand are not the same as the other
1301                      operand since move costs are not symmetric.  Moreover,
1302                      if we cannot tie them, this alternative needs to do a
1303                      copy, which is one instruction.  */
1304
1305                   struct costs *pp = &this_op_costs[i];
1306
1307                   for (class = 0; class < N_REG_CLASSES; class++)
1308                     pp->cost[class]
1309                       = (recog_data.operand_type[i] == OP_IN
1310                          ? may_move_in_cost[class][(int) classes[i]]
1311                          : may_move_out_cost[(int) classes[i]][class]);
1312                   
1313                   /* If the alternative actually allows memory, make things
1314                      a bit cheaper since we won't need an extra insn to
1315                      load it.  */
1316
1317                   pp->mem_cost
1318                     = (MEMORY_MOVE_COST (mode, classes[i], 
1319                                          recog_data.operand_type[i] == OP_IN)
1320                        - allows_mem[i]);
1321
1322                   /* If we have assigned a class to this register in our
1323                      first pass, add a cost to this alternative corresponding
1324                      to what we would add if this register were not in the
1325                      appropriate class.  */
1326
1327                   if (reg_pref)
1328                     alt_cost
1329                       += (may_move_in_cost[(unsigned char) reg_pref[REGNO (op)].prefclass]
1330                           [(int) classes[i]]);
1331
1332                   if (REGNO (ops[i]) != REGNO (ops[j])
1333                       && ! find_reg_note (insn, REG_DEAD, op))
1334                     alt_cost += 2;
1335
1336                   /* This is in place of ordinary cost computation
1337                      for this operand, so skip to the end of the
1338                      alternative (should be just one character).  */
1339                   while (*p && *p++ != ',')
1340                     ;
1341
1342                   constraints[i] = p;
1343                   continue;
1344                 }
1345             }
1346
1347           /* Scan all the constraint letters.  See if the operand matches
1348              any of the constraints.  Collect the valid register classes
1349              and see if this operand accepts memory.  */
1350
1351           while (*p && (c = *p++) != ',')
1352             switch (c)
1353               {
1354               case '*':
1355                 /* Ignore the next letter for this pass.  */
1356                 p++;
1357                 break;
1358
1359               case '?':
1360                 alt_cost += 2;
1361               case '!':  case '#':  case '&':
1362               case '0':  case '1':  case '2':  case '3':  case '4':
1363               case '5':  case '6':  case '7':  case '8':  case '9':
1364                 break;
1365
1366               case 'p':
1367                 allows_addr = 1;
1368                 win = address_operand (op, GET_MODE (op));
1369                 /* We know this operand is an address, so we want it to be
1370                    allocated to a register that can be the base of an
1371                    address, ie BASE_REG_CLASS.  */
1372                 classes[i]
1373                   = reg_class_subunion[(int) classes[i]]
1374                     [(int) BASE_REG_CLASS];
1375                 break;
1376
1377               case 'm':  case 'o':  case 'V':
1378                 /* It doesn't seem worth distinguishing between offsettable
1379                    and non-offsettable addresses here.  */
1380                 allows_mem[i] = 1;
1381                 if (GET_CODE (op) == MEM)
1382                   win = 1;
1383                 break;
1384
1385               case '<':
1386                 if (GET_CODE (op) == MEM
1387                     && (GET_CODE (XEXP (op, 0)) == PRE_DEC
1388                         || GET_CODE (XEXP (op, 0)) == POST_DEC))
1389                   win = 1;
1390                 break;
1391
1392               case '>':
1393                 if (GET_CODE (op) == MEM
1394                     && (GET_CODE (XEXP (op, 0)) == PRE_INC
1395                         || GET_CODE (XEXP (op, 0)) == POST_INC))
1396                   win = 1;
1397                 break;
1398
1399               case 'E':
1400 #ifndef REAL_ARITHMETIC
1401                 /* Match any floating double constant, but only if
1402                    we can examine the bits of it reliably.  */
1403                 if ((HOST_FLOAT_FORMAT != TARGET_FLOAT_FORMAT
1404                      || HOST_BITS_PER_WIDE_INT != BITS_PER_WORD)
1405                     && GET_MODE (op) != VOIDmode && ! flag_pretend_float)
1406                   break;
1407 #endif
1408                 if (GET_CODE (op) == CONST_DOUBLE)
1409                   win = 1;
1410                 break;
1411
1412               case 'F':
1413                 if (GET_CODE (op) == CONST_DOUBLE)
1414                   win = 1;
1415                 break;
1416
1417               case 'G':
1418               case 'H':
1419                 if (GET_CODE (op) == CONST_DOUBLE
1420                     && CONST_DOUBLE_OK_FOR_LETTER_P (op, c))
1421                   win = 1;
1422                 break;
1423
1424               case 's':
1425                 if (GET_CODE (op) == CONST_INT
1426                     || (GET_CODE (op) == CONST_DOUBLE
1427                         && GET_MODE (op) == VOIDmode))
1428                   break;
1429               case 'i':
1430                 if (CONSTANT_P (op)
1431 #ifdef LEGITIMATE_PIC_OPERAND_P
1432                     && (! flag_pic || LEGITIMATE_PIC_OPERAND_P (op))
1433 #endif
1434                     )
1435                   win = 1;
1436                 break;
1437
1438               case 'n':
1439                 if (GET_CODE (op) == CONST_INT
1440                     || (GET_CODE (op) == CONST_DOUBLE
1441                         && GET_MODE (op) == VOIDmode))
1442                   win = 1;
1443                 break;
1444
1445               case 'I':
1446               case 'J':
1447               case 'K':
1448               case 'L':
1449               case 'M':
1450               case 'N':
1451               case 'O':
1452               case 'P':
1453                 if (GET_CODE (op) == CONST_INT
1454                     && CONST_OK_FOR_LETTER_P (INTVAL (op), c))
1455                   win = 1;
1456                 break;
1457
1458               case 'X':
1459                 win = 1;
1460                 break;
1461
1462 #ifdef EXTRA_CONSTRAINT
1463               case 'Q':
1464               case 'R':
1465               case 'S':
1466               case 'T':
1467               case 'U':
1468                 if (EXTRA_CONSTRAINT (op, c))
1469                   win = 1;
1470                 break;
1471 #endif
1472
1473               case 'g':
1474                 if (GET_CODE (op) == MEM
1475                     || (CONSTANT_P (op)
1476 #ifdef LEGITIMATE_PIC_OPERAND_P
1477                         && (! flag_pic || LEGITIMATE_PIC_OPERAND_P (op))
1478 #endif
1479                         ))
1480                   win = 1;
1481                 allows_mem[i] = 1;
1482               case 'r':
1483                 classes[i]
1484                   = reg_class_subunion[(int) classes[i]][(int) GENERAL_REGS];
1485                 break;
1486
1487               default:
1488                 classes[i]
1489                   = reg_class_subunion[(int) classes[i]]
1490                     [(int) REG_CLASS_FROM_LETTER (c)];
1491               }
1492
1493           constraints[i] = p;
1494
1495 #ifdef CLASS_CANNOT_CHANGE_SIZE
1496           /* If we noted a subreg earlier, and the selected class is a 
1497              subclass of CLASS_CANNOT_CHANGE_SIZE, zap it.  */
1498           if (subreg_changes_size[i]
1499               && (reg_class_subunion[(int) CLASS_CANNOT_CHANGE_SIZE]
1500                                     [(int) classes[i]]
1501                   == CLASS_CANNOT_CHANGE_SIZE))
1502             classes[i] = NO_REGS;
1503 #endif
1504
1505           /* How we account for this operand now depends on whether it is  a
1506              pseudo register or not.  If it is, we first check if any
1507              register classes are valid.  If not, we ignore this alternative,
1508              since we want to assume that all pseudos get allocated for
1509              register preferencing.  If some register class is valid, compute
1510              the costs of moving the pseudo into that class.  */
1511
1512           if (GET_CODE (op) == REG && REGNO (op) >= FIRST_PSEUDO_REGISTER)
1513             {
1514               if (classes[i] == NO_REGS)
1515                 {
1516                     /* We must always fail if the operand is a REG, but
1517                        we did not find a suitable class.
1518
1519                        Otherwise we may perform an uninitialized read
1520                        from this_op_costs after the `continue' statement
1521                        below.  */
1522                     alt_fail = 1;
1523                 }
1524               else
1525                 {
1526                   struct costs *pp = &this_op_costs[i];
1527
1528                   for (class = 0; class < N_REG_CLASSES; class++)
1529                     pp->cost[class]
1530                       = (recog_data.operand_type[i] == OP_IN
1531                          ? may_move_in_cost[class][(int) classes[i]]
1532                          : may_move_out_cost[(int) classes[i]][class]);
1533
1534                   /* If the alternative actually allows memory, make things
1535                      a bit cheaper since we won't need an extra insn to
1536                      load it.  */
1537
1538                   pp->mem_cost
1539                     = (MEMORY_MOVE_COST (mode, classes[i], 
1540                                          recog_data.operand_type[i] == OP_IN)
1541                        - allows_mem[i]);
1542
1543                   /* If we have assigned a class to this register in our
1544                      first pass, add a cost to this alternative corresponding
1545                      to what we would add if this register were not in the
1546                      appropriate class.  */
1547
1548                   if (reg_pref)
1549                     alt_cost
1550                       += (may_move_in_cost[(unsigned char) reg_pref[REGNO (op)].prefclass]
1551                           [(int) classes[i]]);
1552                 }
1553             }
1554
1555           /* Otherwise, if this alternative wins, either because we
1556              have already determined that or if we have a hard register of
1557              the proper class, there is no cost for this alternative.  */
1558
1559           else if (win
1560                    || (GET_CODE (op) == REG
1561                        && reg_fits_class_p (op, classes[i], 0, GET_MODE (op))))
1562             ;
1563
1564           /* If registers are valid, the cost of this alternative includes
1565              copying the object to and/or from a register.  */
1566
1567           else if (classes[i] != NO_REGS)
1568             {
1569               if (recog_data.operand_type[i] != OP_OUT)
1570                 alt_cost += copy_cost (op, mode, classes[i], 1);
1571
1572               if (recog_data.operand_type[i] != OP_IN)
1573                 alt_cost += copy_cost (op, mode, classes[i], 0);
1574             }
1575
1576           /* The only other way this alternative can be used is if this is a
1577              constant that could be placed into memory.  */
1578
1579           else if (CONSTANT_P (op) && (allows_addr || allows_mem[i]))
1580             alt_cost += MEMORY_MOVE_COST (mode, classes[i], 1);
1581           else
1582             alt_fail = 1;
1583         }
1584
1585       if (alt_fail)
1586         continue;
1587
1588       /* Finally, update the costs with the information we've calculated
1589          about this alternative.  */
1590
1591       for (i = 0; i < n_ops; i++)
1592         if (GET_CODE (ops[i]) == REG
1593             && REGNO (ops[i]) >= FIRST_PSEUDO_REGISTER)
1594           {
1595             struct costs *pp = &op_costs[i], *qq = &this_op_costs[i];
1596             int scale = 1 + (recog_data.operand_type[i] == OP_INOUT);
1597
1598             pp->mem_cost = MIN (pp->mem_cost,
1599                                 (qq->mem_cost + alt_cost) * scale);
1600
1601             for (class = 0; class < N_REG_CLASSES; class++)
1602               pp->cost[class] = MIN (pp->cost[class],
1603                                      (qq->cost[class] + alt_cost) * scale);
1604           }
1605     }
1606
1607   /* If this insn is a single set copying operand 1 to operand 0
1608      and one is a pseudo with the other a hard reg that is in its
1609      own register class, set the cost of that register class to -1.  */
1610
1611   if ((set = single_set (insn)) != 0
1612       && ops[0] == SET_DEST (set) && ops[1] == SET_SRC (set)
1613       && GET_CODE (ops[0]) == REG && GET_CODE (ops[1]) == REG)
1614     for (i = 0; i <= 1; i++)
1615       if (REGNO (ops[i]) >= FIRST_PSEUDO_REGISTER)
1616         {
1617           int regno = REGNO (ops[!i]);
1618           enum machine_mode mode = GET_MODE (ops[!i]);
1619           int class;
1620           int nr;
1621
1622           if (regno >= FIRST_PSEUDO_REGISTER && reg_pref != 0
1623               && (reg_class_size[(unsigned char) reg_pref[regno].prefclass]
1624                   == CLASS_MAX_NREGS (reg_pref[regno].prefclass, mode)))
1625             op_costs[i].cost[(unsigned char) reg_pref[regno].prefclass] = -1;
1626           else if (regno < FIRST_PSEUDO_REGISTER)
1627             for (class = 0; class < N_REG_CLASSES; class++)
1628               if (TEST_HARD_REG_BIT (reg_class_contents[class], regno)
1629                   && reg_class_size[class] == CLASS_MAX_NREGS (class, mode))
1630                 {
1631                   if (reg_class_size[class] == 1)
1632                     op_costs[i].cost[class] = -1;
1633                   else
1634                     {
1635                       for (nr = 0; nr < HARD_REGNO_NREGS(regno, mode); nr++)
1636                         {
1637                           if (!TEST_HARD_REG_BIT (reg_class_contents[class], regno + nr))
1638                             break;
1639                         }
1640
1641                       if (nr == HARD_REGNO_NREGS(regno,mode))
1642                         op_costs[i].cost[class] = -1;
1643                     }
1644                 }
1645         }
1646 }
1647 \f
1648 /* Compute the cost of loading X into (if TO_P is non-zero) or from (if
1649    TO_P is zero) a register of class CLASS in mode MODE.
1650
1651    X must not be a pseudo.  */
1652
1653 static int
1654 copy_cost (x, mode, class, to_p)
1655      rtx x;
1656      enum machine_mode mode;
1657      enum reg_class class;
1658      int to_p;
1659 {
1660 #ifdef HAVE_SECONDARY_RELOADS
1661   enum reg_class secondary_class = NO_REGS;
1662 #endif
1663
1664   /* If X is a SCRATCH, there is actually nothing to move since we are
1665      assuming optimal allocation.  */
1666
1667   if (GET_CODE (x) == SCRATCH)
1668     return 0;
1669
1670   /* Get the class we will actually use for a reload.  */
1671   class = PREFERRED_RELOAD_CLASS (x, class);
1672
1673 #ifdef HAVE_SECONDARY_RELOADS
1674   /* If we need a secondary reload (we assume here that we are using 
1675      the secondary reload as an intermediate, not a scratch register), the
1676      cost is that to load the input into the intermediate register, then
1677      to copy them.  We use a special value of TO_P to avoid recursion.  */
1678
1679 #ifdef SECONDARY_INPUT_RELOAD_CLASS
1680   if (to_p == 1)
1681     secondary_class = SECONDARY_INPUT_RELOAD_CLASS (class, mode, x);
1682 #endif
1683
1684 #ifdef SECONDARY_OUTPUT_RELOAD_CLASS
1685   if (! to_p)
1686     secondary_class = SECONDARY_OUTPUT_RELOAD_CLASS (class, mode, x);
1687 #endif
1688
1689   if (secondary_class != NO_REGS)
1690     return (move_cost[(int) secondary_class][(int) class]
1691             + copy_cost (x, mode, secondary_class, 2));
1692 #endif  /* HAVE_SECONDARY_RELOADS */
1693
1694   /* For memory, use the memory move cost, for (hard) registers, use the
1695      cost to move between the register classes, and use 2 for everything
1696      else (constants).  */
1697
1698   if (GET_CODE (x) == MEM || class == NO_REGS)
1699     return MEMORY_MOVE_COST (mode, class, to_p);
1700
1701   else if (GET_CODE (x) == REG)
1702     return move_cost[(int) REGNO_REG_CLASS (REGNO (x))][(int) class];
1703
1704   else
1705     /* If this is a constant, we may eventually want to call rtx_cost here.  */
1706     return 2;
1707 }
1708 \f
1709 /* Record the pseudo registers we must reload into hard registers
1710    in a subexpression of a memory address, X.
1711
1712    CLASS is the class that the register needs to be in and is either
1713    BASE_REG_CLASS or INDEX_REG_CLASS.
1714
1715    SCALE is twice the amount to multiply the cost by (it is twice so we
1716    can represent half-cost adjustments).  */
1717
1718 static void
1719 record_address_regs (x, class, scale)
1720      rtx x;
1721      enum reg_class class;
1722      int scale;
1723 {
1724   register enum rtx_code code = GET_CODE (x);
1725
1726   switch (code)
1727     {
1728     case CONST_INT:
1729     case CONST:
1730     case CC0:
1731     case PC:
1732     case SYMBOL_REF:
1733     case LABEL_REF:
1734       return;
1735
1736     case PLUS:
1737       /* When we have an address that is a sum,
1738          we must determine whether registers are "base" or "index" regs.
1739          If there is a sum of two registers, we must choose one to be
1740          the "base".  Luckily, we can use the REGNO_POINTER_FLAG
1741          to make a good choice most of the time.  We only need to do this
1742          on machines that can have two registers in an address and where
1743          the base and index register classes are different.
1744
1745          ??? This code used to set REGNO_POINTER_FLAG in some cases, but
1746          that seems bogus since it should only be set when we are sure
1747          the register is being used as a pointer.  */
1748
1749       {
1750         rtx arg0 = XEXP (x, 0);
1751         rtx arg1 = XEXP (x, 1);
1752         register enum rtx_code code0 = GET_CODE (arg0);
1753         register enum rtx_code code1 = GET_CODE (arg1);
1754
1755         /* Look inside subregs.  */
1756         if (code0 == SUBREG)
1757           arg0 = SUBREG_REG (arg0), code0 = GET_CODE (arg0);
1758         if (code1 == SUBREG)
1759           arg1 = SUBREG_REG (arg1), code1 = GET_CODE (arg1);
1760
1761         /* If this machine only allows one register per address, it must
1762            be in the first operand.  */
1763
1764         if (MAX_REGS_PER_ADDRESS == 1)
1765           record_address_regs (arg0, class, scale);
1766
1767         /* If index and base registers are the same on this machine, just
1768            record registers in any non-constant operands.  We assume here,
1769            as well as in the tests below, that all addresses are in 
1770            canonical form.  */
1771
1772         else if (INDEX_REG_CLASS == BASE_REG_CLASS)
1773           {
1774             record_address_regs (arg0, class, scale);
1775             if (! CONSTANT_P (arg1))
1776               record_address_regs (arg1, class, scale);
1777           }
1778
1779         /* If the second operand is a constant integer, it doesn't change
1780            what class the first operand must be.  */
1781
1782         else if (code1 == CONST_INT || code1 == CONST_DOUBLE)
1783           record_address_regs (arg0, class, scale);
1784
1785         /* If the second operand is a symbolic constant, the first operand
1786            must be an index register.  */
1787
1788         else if (code1 == SYMBOL_REF || code1 == CONST || code1 == LABEL_REF)
1789           record_address_regs (arg0, INDEX_REG_CLASS, scale);
1790
1791         /* If both operands are registers but one is already a hard register
1792            of index or base class, give the other the class that the hard
1793            register is not.  */
1794
1795 #ifdef REG_OK_FOR_BASE_P
1796         else if (code0 == REG && code1 == REG
1797                  && REGNO (arg0) < FIRST_PSEUDO_REGISTER
1798                  && (REG_OK_FOR_BASE_P (arg0) || REG_OK_FOR_INDEX_P (arg0)))
1799           record_address_regs (arg1,
1800                                REG_OK_FOR_BASE_P (arg0)
1801                                ? INDEX_REG_CLASS : BASE_REG_CLASS,
1802                                scale);
1803         else if (code0 == REG && code1 == REG
1804                  && REGNO (arg1) < FIRST_PSEUDO_REGISTER
1805                  && (REG_OK_FOR_BASE_P (arg1) || REG_OK_FOR_INDEX_P (arg1)))
1806           record_address_regs (arg0,
1807                                REG_OK_FOR_BASE_P (arg1)
1808                                ? INDEX_REG_CLASS : BASE_REG_CLASS,
1809                                scale);
1810 #endif
1811
1812         /* If one operand is known to be a pointer, it must be the base
1813            with the other operand the index.  Likewise if the other operand
1814            is a MULT.  */
1815
1816         else if ((code0 == REG && REGNO_POINTER_FLAG (REGNO (arg0)))
1817                  || code1 == MULT)
1818           {
1819             record_address_regs (arg0, BASE_REG_CLASS, scale);
1820             record_address_regs (arg1, INDEX_REG_CLASS, scale);
1821           }
1822         else if ((code1 == REG && REGNO_POINTER_FLAG (REGNO (arg1)))
1823                  || code0 == MULT)
1824           {
1825             record_address_regs (arg0, INDEX_REG_CLASS, scale);
1826             record_address_regs (arg1, BASE_REG_CLASS, scale);
1827           }
1828
1829         /* Otherwise, count equal chances that each might be a base
1830            or index register.  This case should be rare.  */
1831
1832         else
1833           {
1834             record_address_regs (arg0, BASE_REG_CLASS, scale / 2);
1835             record_address_regs (arg0, INDEX_REG_CLASS, scale / 2);
1836             record_address_regs (arg1, BASE_REG_CLASS, scale / 2);
1837             record_address_regs (arg1, INDEX_REG_CLASS, scale / 2);
1838           }
1839       }
1840       break;
1841
1842     case POST_INC:
1843     case PRE_INC:
1844     case POST_DEC:
1845     case PRE_DEC:
1846       /* Double the importance of a pseudo register that is incremented
1847          or decremented, since it would take two extra insns
1848          if it ends up in the wrong place.  If the operand is a pseudo,
1849          show it is being used in an INC_DEC context.  */
1850
1851 #ifdef FORBIDDEN_INC_DEC_CLASSES
1852       if (GET_CODE (XEXP (x, 0)) == REG
1853           && REGNO (XEXP (x, 0)) >= FIRST_PSEUDO_REGISTER)
1854         in_inc_dec[REGNO (XEXP (x, 0))] = 1;
1855 #endif
1856
1857       record_address_regs (XEXP (x, 0), class, 2 * scale);
1858       break;
1859
1860     case REG:
1861       {
1862         register struct costs *pp = &costs[REGNO (x)];
1863         register int i;
1864
1865         pp->mem_cost += (MEMORY_MOVE_COST (Pmode, class, 1) * scale) / 2;
1866
1867         for (i = 0; i < N_REG_CLASSES; i++)
1868           pp->cost[i] += (may_move_in_cost[i][(int) class] * scale) / 2;
1869       }
1870       break;
1871
1872     default:
1873       {
1874         register const char *fmt = GET_RTX_FORMAT (code);
1875         register int i;
1876         for (i = GET_RTX_LENGTH (code) - 1; i >= 0; i--)
1877           if (fmt[i] == 'e')
1878             record_address_regs (XEXP (x, i), class, scale);
1879       }
1880     }
1881 }
1882 \f
1883 #ifdef FORBIDDEN_INC_DEC_CLASSES
1884
1885 /* Return 1 if REG is valid as an auto-increment memory reference
1886    to an object of MODE.  */
1887
1888 static int
1889 auto_inc_dec_reg_p (reg, mode)
1890      rtx reg;
1891      enum machine_mode mode;
1892 {
1893   if (HAVE_POST_INCREMENT
1894       && memory_address_p (mode, gen_rtx_POST_INC (Pmode, reg)))
1895     return 1;
1896
1897   if (HAVE_POST_DECREMENT
1898       && memory_address_p (mode, gen_rtx_POST_DEC (Pmode, reg)))
1899     return 1;
1900
1901   if (HAVE_PRE_INCREMENT
1902       && memory_address_p (mode, gen_rtx_PRE_INC (Pmode, reg)))
1903     return 1;
1904
1905   if (HAVE_PRE_DECREMENT
1906       && memory_address_p (mode, gen_rtx_PRE_DEC (Pmode, reg)))
1907     return 1;
1908
1909   return 0;
1910 }
1911 #endif
1912 \f
1913 static short *renumber = (short *)0;
1914 static size_t regno_allocated = 0;
1915
1916 /* Allocate enough space to hold NUM_REGS registers for the tables used for
1917    reg_scan and flow_analysis that are indexed by the register number.  If
1918    NEW_P is non zero, initialize all of the registers, otherwise only
1919    initialize the new registers allocated.  The same table is kept from
1920    function to function, only reallocating it when we need more room.  If
1921    RENUMBER_P is non zero, allocate the reg_renumber array also.  */
1922
1923 void
1924 allocate_reg_info (num_regs, new_p, renumber_p)
1925      size_t num_regs;
1926      int new_p;
1927      int renumber_p;
1928 {
1929   size_t size_info;
1930   size_t size_renumber;
1931   size_t min = (new_p) ? 0 : reg_n_max;
1932   struct reg_info_data *reg_data;
1933   struct reg_info_data *reg_next;
1934
1935   if (num_regs > regno_allocated)
1936     {
1937       size_t old_allocated = regno_allocated;
1938
1939       regno_allocated = num_regs + (num_regs / 20);     /* add some slop space */
1940       size_renumber = regno_allocated * sizeof (short);
1941
1942       if (!reg_n_info)
1943         {
1944           VARRAY_REG_INIT (reg_n_info, regno_allocated, "reg_n_info");
1945           renumber = (short *) xmalloc (size_renumber);
1946           reg_pref_buffer = (struct reg_pref *) xmalloc (regno_allocated 
1947                                               * sizeof (struct reg_pref));
1948         }
1949
1950       else
1951         {
1952           VARRAY_GROW (reg_n_info, regno_allocated);
1953
1954           if (new_p)            /* if we're zapping everything, no need to realloc */
1955             {
1956               free ((char *)renumber);
1957               free ((char *)reg_pref);
1958               renumber = (short *) xmalloc (size_renumber);
1959               reg_pref_buffer = (struct reg_pref *) xmalloc (regno_allocated 
1960                                                   * sizeof (struct reg_pref));
1961             }
1962
1963           else
1964             {
1965               renumber = (short *) xrealloc ((char *)renumber, size_renumber);
1966               reg_pref_buffer = (struct reg_pref *) xrealloc ((char *)reg_pref_buffer,
1967                                                    regno_allocated 
1968                                                    * sizeof (struct reg_pref));
1969             }
1970         }
1971
1972       size_info = (regno_allocated - old_allocated) * sizeof (reg_info)
1973         + sizeof (struct reg_info_data) - sizeof (reg_info);
1974       reg_data = (struct reg_info_data *) xcalloc (size_info, 1);
1975       reg_data->min_index = old_allocated;
1976       reg_data->max_index = regno_allocated - 1;
1977       reg_data->next = reg_info_head;
1978       reg_info_head = reg_data;
1979     }
1980
1981   reg_n_max = num_regs;
1982   if (min < num_regs)
1983     {
1984       /* Loop through each of the segments allocated for the actual
1985          reg_info pages, and set up the pointers, zero the pages, etc.  */
1986       for (reg_data = reg_info_head; reg_data; reg_data = reg_next)
1987         {
1988           size_t min_index = reg_data->min_index;
1989           size_t max_index = reg_data->max_index;
1990
1991           reg_next = reg_data->next;
1992           if (min <= max_index)
1993             {
1994               size_t max = max_index;
1995               size_t local_min = min - min_index;
1996               size_t i;
1997
1998               if (min < min_index)
1999                 local_min = 0;
2000               if (!reg_data->used_p)    /* page just allocated with calloc */
2001                 reg_data->used_p = 1;   /* no need to zero */
2002               else
2003                 bzero ((char *) &reg_data->data[local_min],
2004                        sizeof (reg_info) * (max - min_index - local_min + 1));
2005
2006               for (i = min_index+local_min; i <= max; i++)
2007                 {
2008                   VARRAY_REG (reg_n_info, i) = &reg_data->data[i-min_index];
2009                   REG_BASIC_BLOCK (i) = REG_BLOCK_UNKNOWN;
2010                   renumber[i] = -1;
2011                   reg_pref_buffer[i].prefclass = (char) NO_REGS;
2012                   reg_pref_buffer[i].altclass = (char) NO_REGS;
2013                 }
2014             }
2015         }
2016     }
2017
2018   /* If {pref,alt}class have already been allocated, update the pointers to
2019      the newly realloced ones.  */
2020   if (reg_pref)
2021     reg_pref = reg_pref_buffer;
2022
2023   if (renumber_p)
2024     reg_renumber = renumber;
2025
2026   /* Tell the regset code about the new number of registers */
2027   MAX_REGNO_REG_SET (num_regs, new_p, renumber_p);
2028 }
2029
2030 /* Free up the space allocated by allocate_reg_info.  */
2031 void
2032 free_reg_info ()
2033 {
2034   if (reg_n_info)
2035     {
2036       struct reg_info_data *reg_data;
2037       struct reg_info_data *reg_next;
2038
2039       VARRAY_FREE (reg_n_info);
2040       for (reg_data = reg_info_head; reg_data; reg_data = reg_next)
2041         {
2042           reg_next = reg_data->next;
2043           free ((char *)reg_data);
2044         }
2045
2046       free (reg_pref_buffer);
2047       reg_pref_buffer = (struct reg_pref *)0;
2048       reg_info_head = (struct reg_info_data *)0;
2049       renumber = (short *)0;
2050     }
2051   regno_allocated = 0;
2052   reg_n_max = 0;
2053 }
2054 \f
2055 /* This is the `regscan' pass of the compiler, run just before cse
2056    and again just before loop.
2057
2058    It finds the first and last use of each pseudo-register
2059    and records them in the vectors regno_first_uid, regno_last_uid
2060    and counts the number of sets in the vector reg_n_sets.
2061
2062    REPEAT is nonzero the second time this is called.  */
2063
2064 /* Maximum number of parallel sets and clobbers in any insn in this fn.
2065    Always at least 3, since the combiner could put that many together
2066    and we want this to remain correct for all the remaining passes.  */
2067
2068 int max_parallel;
2069
2070 void
2071 reg_scan (f, nregs, repeat)
2072      rtx f;
2073      int nregs;
2074      int repeat;
2075 {
2076   register rtx insn;
2077
2078   allocate_reg_info (nregs, TRUE, FALSE);
2079   max_parallel = 3;
2080
2081   for (insn = f; insn; insn = NEXT_INSN (insn))
2082     if (GET_CODE (insn) == INSN
2083         || GET_CODE (insn) == CALL_INSN
2084         || GET_CODE (insn) == JUMP_INSN)
2085       {
2086         if (GET_CODE (PATTERN (insn)) == PARALLEL
2087             && XVECLEN (PATTERN (insn), 0) > max_parallel)
2088           max_parallel = XVECLEN (PATTERN (insn), 0);
2089         reg_scan_mark_refs (PATTERN (insn), insn, 0, 0);
2090
2091         if (REG_NOTES (insn))
2092           reg_scan_mark_refs (REG_NOTES (insn), insn, 1, 0);
2093       }
2094 }
2095
2096 /* Update 'regscan' information by looking at the insns
2097    from FIRST to LAST.  Some new REGs have been created,
2098    and any REG with number greater than OLD_MAX_REGNO is
2099    such a REG.  We only update information for those.  */
2100
2101 void
2102 reg_scan_update(first, last, old_max_regno)
2103      rtx first;
2104      rtx last;
2105      int old_max_regno;
2106 {
2107   register rtx insn;
2108
2109   allocate_reg_info (max_reg_num (), FALSE, FALSE);
2110
2111   for (insn = first; insn != last; insn = NEXT_INSN (insn))
2112     if (GET_CODE (insn) == INSN
2113         || GET_CODE (insn) == CALL_INSN
2114         || GET_CODE (insn) == JUMP_INSN)
2115       {
2116         if (GET_CODE (PATTERN (insn)) == PARALLEL
2117             && XVECLEN (PATTERN (insn), 0) > max_parallel)
2118           max_parallel = XVECLEN (PATTERN (insn), 0);
2119         reg_scan_mark_refs (PATTERN (insn), insn, 0, old_max_regno);
2120
2121         if (REG_NOTES (insn))
2122           reg_scan_mark_refs (REG_NOTES (insn), insn, 1, old_max_regno);
2123       }
2124 }
2125
2126 /* X is the expression to scan.  INSN is the insn it appears in.
2127    NOTE_FLAG is nonzero if X is from INSN's notes rather than its body.
2128    We should only record information for REGs with numbers
2129    greater than or equal to MIN_REGNO.  */
2130
2131 static void
2132 reg_scan_mark_refs (x, insn, note_flag, min_regno)
2133      rtx x;
2134      rtx insn;
2135      int note_flag;
2136      int min_regno;
2137 {
2138   register enum rtx_code code;
2139   register rtx dest;
2140   register rtx note;
2141
2142   code = GET_CODE (x);
2143   switch (code)
2144     {
2145     case CONST:
2146     case CONST_INT:
2147     case CONST_DOUBLE:
2148     case CC0:
2149     case PC:
2150     case SYMBOL_REF:
2151     case LABEL_REF:
2152     case ADDR_VEC:
2153     case ADDR_DIFF_VEC:
2154       return;
2155
2156     case REG:
2157       {
2158         register int regno = REGNO (x);
2159
2160         if (regno >= min_regno)
2161           {
2162             REGNO_LAST_NOTE_UID (regno) = INSN_UID (insn);
2163             if (!note_flag)
2164               REGNO_LAST_UID (regno) = INSN_UID (insn);
2165             if (REGNO_FIRST_UID (regno) == 0)
2166               REGNO_FIRST_UID (regno) = INSN_UID (insn);
2167           }
2168       }
2169       break;
2170
2171     case EXPR_LIST:
2172       if (XEXP (x, 0))
2173         reg_scan_mark_refs (XEXP (x, 0), insn, note_flag, min_regno);
2174       if (XEXP (x, 1))
2175         reg_scan_mark_refs (XEXP (x, 1), insn, note_flag, min_regno);
2176       break;
2177
2178     case INSN_LIST:
2179       if (XEXP (x, 1))
2180         reg_scan_mark_refs (XEXP (x, 1), insn, note_flag, min_regno);
2181       break;
2182
2183     case SET:
2184       /* Count a set of the destination if it is a register.  */
2185       for (dest = SET_DEST (x);
2186            GET_CODE (dest) == SUBREG || GET_CODE (dest) == STRICT_LOW_PART
2187            || GET_CODE (dest) == ZERO_EXTEND;
2188            dest = XEXP (dest, 0))
2189         ;
2190
2191       if (GET_CODE (dest) == REG
2192           && REGNO (dest) >= min_regno)
2193         REG_N_SETS (REGNO (dest))++;
2194
2195       /* If this is setting a pseudo from another pseudo or the sum of a
2196          pseudo and a constant integer and the other pseudo is known to be
2197          a pointer, set the destination to be a pointer as well.
2198
2199          Likewise if it is setting the destination from an address or from a
2200          value equivalent to an address or to the sum of an address and
2201          something else.
2202                      
2203          But don't do any of this if the pseudo corresponds to a user
2204          variable since it should have already been set as a pointer based
2205          on the type.  */
2206
2207       if (GET_CODE (SET_DEST (x)) == REG
2208           && REGNO (SET_DEST (x)) >= FIRST_PSEUDO_REGISTER
2209           && REGNO (SET_DEST (x)) >= min_regno
2210           /* If the destination pseudo is set more than once, then other
2211              sets might not be to a pointer value (consider access to a
2212              union in two threads of control in the presense of global
2213              optimizations).  So only set REGNO_POINTER_FLAG on the destination
2214              pseudo if this is the only set of that pseudo.  */
2215           && REG_N_SETS (REGNO (SET_DEST (x))) == 1
2216           && ! REG_USERVAR_P (SET_DEST (x))
2217           && ! REGNO_POINTER_FLAG (REGNO (SET_DEST (x)))
2218           && ((GET_CODE (SET_SRC (x)) == REG
2219                && REGNO_POINTER_FLAG (REGNO (SET_SRC (x))))
2220               || ((GET_CODE (SET_SRC (x)) == PLUS
2221                    || GET_CODE (SET_SRC (x)) == LO_SUM)
2222                   && GET_CODE (XEXP (SET_SRC (x), 1)) == CONST_INT
2223                   && GET_CODE (XEXP (SET_SRC (x), 0)) == REG
2224                   && REGNO_POINTER_FLAG (REGNO (XEXP (SET_SRC (x), 0))))
2225               || GET_CODE (SET_SRC (x)) == CONST
2226               || GET_CODE (SET_SRC (x)) == SYMBOL_REF
2227               || GET_CODE (SET_SRC (x)) == LABEL_REF
2228               || (GET_CODE (SET_SRC (x)) == HIGH
2229                   && (GET_CODE (XEXP (SET_SRC (x), 0)) == CONST
2230                       || GET_CODE (XEXP (SET_SRC (x), 0)) == SYMBOL_REF
2231                       || GET_CODE (XEXP (SET_SRC (x), 0)) == LABEL_REF))
2232               || ((GET_CODE (SET_SRC (x)) == PLUS
2233                    || GET_CODE (SET_SRC (x)) == LO_SUM)
2234                   && (GET_CODE (XEXP (SET_SRC (x), 1)) == CONST
2235                       || GET_CODE (XEXP (SET_SRC (x), 1)) == SYMBOL_REF
2236                       || GET_CODE (XEXP (SET_SRC (x), 1)) == LABEL_REF))
2237               || ((note = find_reg_note (insn, REG_EQUAL, 0)) != 0
2238                   && (GET_CODE (XEXP (note, 0)) == CONST
2239                       || GET_CODE (XEXP (note, 0)) == SYMBOL_REF
2240                       || GET_CODE (XEXP (note, 0)) == LABEL_REF))))
2241         REGNO_POINTER_FLAG (REGNO (SET_DEST (x))) = 1;
2242
2243       /* ... fall through ...  */
2244
2245     default:
2246       {
2247         register const char *fmt = GET_RTX_FORMAT (code);
2248         register int i;
2249         for (i = GET_RTX_LENGTH (code) - 1; i >= 0; i--)
2250           {
2251             if (fmt[i] == 'e')
2252               reg_scan_mark_refs (XEXP (x, i), insn, note_flag, min_regno);
2253             else if (fmt[i] == 'E' && XVEC (x, i) != 0)
2254               {
2255                 register int j;
2256                 for (j = XVECLEN (x, i) - 1; j >= 0; j--)
2257                   reg_scan_mark_refs (XVECEXP (x, i, j), insn, note_flag, min_regno);
2258               }
2259           }
2260       }
2261     }
2262 }
2263 \f
2264 /* Return nonzero if C1 is a subset of C2, i.e., if every register in C1
2265    is also in C2.  */
2266
2267 int
2268 reg_class_subset_p (c1, c2)
2269      register enum reg_class c1;
2270      register enum reg_class c2;
2271 {
2272   if (c1 == c2) return 1;
2273
2274   if (c2 == ALL_REGS)
2275   win:
2276     return 1;
2277   GO_IF_HARD_REG_SUBSET (reg_class_contents[(int)c1],
2278                          reg_class_contents[(int)c2],
2279                          win);
2280   return 0;
2281 }
2282
2283 /* Return nonzero if there is a register that is in both C1 and C2.  */
2284
2285 int
2286 reg_classes_intersect_p (c1, c2)
2287      register enum reg_class c1;
2288      register enum reg_class c2;
2289 {
2290 #ifdef HARD_REG_SET
2291   register
2292 #endif
2293     HARD_REG_SET c;
2294
2295   if (c1 == c2) return 1;
2296
2297   if (c1 == ALL_REGS || c2 == ALL_REGS)
2298     return 1;
2299
2300   COPY_HARD_REG_SET (c, reg_class_contents[(int) c1]);
2301   AND_HARD_REG_SET (c, reg_class_contents[(int) c2]);
2302
2303   GO_IF_HARD_REG_SUBSET (c, reg_class_contents[(int) NO_REGS], lose);
2304   return 1;
2305
2306  lose:
2307   return 0;
2308 }
2309
2310 /* Release any memory allocated by register sets.  */
2311
2312 void
2313 regset_release_memory ()
2314 {
2315   bitmap_release_memory ();
2316 }