OSDN Git Service

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