OSDN Git Service

* hard-reg-set.h (reg_names): Constify a char*.
[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 class;
1164
1165       for (i = 0; i < n_ops; i++)
1166         {
1167           const char *p = constraints[i];
1168           rtx op = ops[i];
1169           enum machine_mode mode = modes[i];
1170           int allows_addr = 0;
1171           int allows_mem = 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
1178           /* If this operand has no constraints at all, we can conclude 
1179              nothing about it since anything is valid.  */
1180
1181           if (*p == 0)
1182             {
1183               if (GET_CODE (op) == REG && REGNO (op) >= FIRST_PSEUDO_REGISTER)
1184                 bzero ((char *) &this_op_costs[i], sizeof this_op_costs[i]);
1185
1186               continue;
1187             }
1188
1189           /* If this alternative is only relevant when this operand
1190              matches a previous operand, we do different things depending
1191              on whether this operand is a pseudo-reg or not.  We must process
1192              any modifiers for the operand before we can make this test.  */
1193
1194           while (*p == '%' || *p == '=' || *p == '+' || *p == '&')
1195             p++;
1196
1197           if (p[0] >= '0' && p[0] <= '0' + i && (p[1] == ',' || p[1] == 0))
1198             {
1199               j = p[0] - '0';
1200               classes[i] = classes[j];
1201
1202               if (GET_CODE (op) != REG || REGNO (op) < FIRST_PSEUDO_REGISTER)
1203                 {
1204                   /* If this matches the other operand, we have no added
1205                      cost and we win.  */
1206                   if (rtx_equal_p (ops[j], op))
1207                     win = 1;
1208
1209                   /* If we can put the other operand into a register, add to
1210                      the cost of this alternative the cost to copy this
1211                      operand to the register used for the other operand.  */
1212
1213                   else if (classes[j] != NO_REGS)
1214                     alt_cost += copy_cost (op, mode, classes[j], 1), win = 1;
1215                 }
1216               else if (GET_CODE (ops[j]) != REG
1217                        || REGNO (ops[j]) < FIRST_PSEUDO_REGISTER)
1218                 {
1219                   /* This op is a pseudo but the one it matches is not.  */
1220                   
1221                   /* If we can't put the other operand into a register, this
1222                      alternative can't be used.  */
1223
1224                   if (classes[j] == NO_REGS)
1225                     alt_fail = 1;
1226
1227                   /* Otherwise, add to the cost of this alternative the cost
1228                      to copy the other operand to the register used for this
1229                      operand.  */
1230
1231                   else
1232                     alt_cost += copy_cost (ops[j], mode, classes[j], 1);
1233                 }
1234               else
1235                 {
1236                   /* The costs of this operand are the same as that of the
1237                      other operand.  However, if we cannot tie them, this
1238                      alternative needs to do a copy, which is one
1239                      instruction.  */
1240
1241                   this_op_costs[i] = this_op_costs[j];
1242                   if (REGNO (ops[i]) != REGNO (ops[j])
1243                       && ! find_reg_note (insn, REG_DEAD, op))
1244                     alt_cost += 2;
1245
1246                   /* This is in place of ordinary cost computation
1247                      for this operand, so skip to the end of the
1248                      alternative (should be just one character).  */
1249                   while (*p && *p++ != ',')
1250                     ;
1251
1252                   constraints[i] = p;
1253                   continue;
1254                 }
1255             }
1256
1257           /* Scan all the constraint letters.  See if the operand matches
1258              any of the constraints.  Collect the valid register classes
1259              and see if this operand accepts memory.  */
1260
1261           while (*p && (c = *p++) != ',')
1262             switch (c)
1263               {
1264               case '*':
1265                 /* Ignore the next letter for this pass.  */
1266                 p++;
1267                 break;
1268
1269               case '?':
1270                 alt_cost += 2;
1271               case '!':  case '#':  case '&':
1272               case '0':  case '1':  case '2':  case '3':  case '4':
1273               case '5':  case '6':  case '7':  case '8':  case '9':
1274                 break;
1275
1276               case 'p':
1277                 allows_addr = 1;
1278                 win = address_operand (op, GET_MODE (op));
1279                 /* We know this operand is an address, so we want it to be
1280                    allocated to a register that can be the base of an
1281                    address, ie BASE_REG_CLASS.  */
1282                 classes[i]
1283                   = reg_class_subunion[(int) classes[i]]
1284                     [(int) BASE_REG_CLASS];
1285                 break;
1286
1287               case 'm':  case 'o':  case 'V':
1288                 /* It doesn't seem worth distinguishing between offsettable
1289                    and non-offsettable addresses here.  */
1290                 allows_mem = 1;
1291                 if (GET_CODE (op) == MEM)
1292                   win = 1;
1293                 break;
1294
1295               case '<':
1296                 if (GET_CODE (op) == MEM
1297                     && (GET_CODE (XEXP (op, 0)) == PRE_DEC
1298                         || GET_CODE (XEXP (op, 0)) == POST_DEC))
1299                   win = 1;
1300                 break;
1301
1302               case '>':
1303                 if (GET_CODE (op) == MEM
1304                     && (GET_CODE (XEXP (op, 0)) == PRE_INC
1305                         || GET_CODE (XEXP (op, 0)) == POST_INC))
1306                   win = 1;
1307                 break;
1308
1309               case 'E':
1310 #ifndef REAL_ARITHMETIC
1311                 /* Match any floating double constant, but only if
1312                    we can examine the bits of it reliably.  */
1313                 if ((HOST_FLOAT_FORMAT != TARGET_FLOAT_FORMAT
1314                      || HOST_BITS_PER_WIDE_INT != BITS_PER_WORD)
1315                     && GET_MODE (op) != VOIDmode && ! flag_pretend_float)
1316                   break;
1317 #endif
1318                 if (GET_CODE (op) == CONST_DOUBLE)
1319                   win = 1;
1320                 break;
1321
1322               case 'F':
1323                 if (GET_CODE (op) == CONST_DOUBLE)
1324                   win = 1;
1325                 break;
1326
1327               case 'G':
1328               case 'H':
1329                 if (GET_CODE (op) == CONST_DOUBLE
1330                     && CONST_DOUBLE_OK_FOR_LETTER_P (op, c))
1331                   win = 1;
1332                 break;
1333
1334               case 's':
1335                 if (GET_CODE (op) == CONST_INT
1336                     || (GET_CODE (op) == CONST_DOUBLE
1337                         && GET_MODE (op) == VOIDmode))
1338                   break;
1339               case 'i':
1340                 if (CONSTANT_P (op)
1341 #ifdef LEGITIMATE_PIC_OPERAND_P
1342                     && (! flag_pic || LEGITIMATE_PIC_OPERAND_P (op))
1343 #endif
1344                     )
1345                   win = 1;
1346                 break;
1347
1348               case 'n':
1349                 if (GET_CODE (op) == CONST_INT
1350                     || (GET_CODE (op) == CONST_DOUBLE
1351                         && GET_MODE (op) == VOIDmode))
1352                   win = 1;
1353                 break;
1354
1355               case 'I':
1356               case 'J':
1357               case 'K':
1358               case 'L':
1359               case 'M':
1360               case 'N':
1361               case 'O':
1362               case 'P':
1363                 if (GET_CODE (op) == CONST_INT
1364                     && CONST_OK_FOR_LETTER_P (INTVAL (op), c))
1365                   win = 1;
1366                 break;
1367
1368               case 'X':
1369                 win = 1;
1370                 break;
1371
1372 #ifdef EXTRA_CONSTRAINT
1373               case 'Q':
1374               case 'R':
1375               case 'S':
1376               case 'T':
1377               case 'U':
1378                 if (EXTRA_CONSTRAINT (op, c))
1379                   win = 1;
1380                 break;
1381 #endif
1382
1383               case 'g':
1384                 if (GET_CODE (op) == MEM
1385                     || (CONSTANT_P (op)
1386 #ifdef LEGITIMATE_PIC_OPERAND_P
1387                         && (! flag_pic || LEGITIMATE_PIC_OPERAND_P (op))
1388 #endif
1389                         ))
1390                   win = 1;
1391                 allows_mem = 1;
1392               case 'r':
1393                 classes[i]
1394                   = reg_class_subunion[(int) classes[i]][(int) GENERAL_REGS];
1395                 break;
1396
1397               default:
1398                 classes[i]
1399                   = reg_class_subunion[(int) classes[i]]
1400                     [(int) REG_CLASS_FROM_LETTER (c)];
1401               }
1402
1403           constraints[i] = p;
1404
1405 #ifdef CLASS_CANNOT_CHANGE_SIZE
1406           /* If we noted a subreg earlier, and the selected class is a 
1407              subclass of CLASS_CANNOT_CHANGE_SIZE, zap it.  */
1408           if (subreg_changes_size[i]
1409               && (reg_class_subunion[(int) CLASS_CANNOT_CHANGE_SIZE]
1410                                     [(int) classes[i]]
1411                   == CLASS_CANNOT_CHANGE_SIZE))
1412             classes[i] = NO_REGS;
1413 #endif
1414
1415           /* How we account for this operand now depends on whether it is  a
1416              pseudo register or not.  If it is, we first check if any
1417              register classes are valid.  If not, we ignore this alternative,
1418              since we want to assume that all pseudos get allocated for
1419              register preferencing.  If some register class is valid, compute
1420              the costs of moving the pseudo into that class.  */
1421
1422           if (GET_CODE (op) == REG && REGNO (op) >= FIRST_PSEUDO_REGISTER)
1423             {
1424               if (classes[i] == NO_REGS)
1425                 {
1426                     /* We must always fail if the operand is a REG, but
1427                        we did not find a suitable class.
1428
1429                        Otherwise we may perform an uninitialized read
1430                        from this_op_costs after the `continue' statement
1431                        below.  */
1432                     alt_fail = 1;
1433                 }
1434               else
1435                 {
1436                   struct costs *pp = &this_op_costs[i];
1437
1438                   for (class = 0; class < N_REG_CLASSES; class++)
1439                     pp->cost[class]
1440                       = (recog_data.operand_type[i] == OP_IN
1441                          ? may_move_cost[class][(int) classes[i]]
1442                          : move_cost[(int) classes[i]][class]);
1443
1444                   /* If the alternative actually allows memory, make things
1445                      a bit cheaper since we won't need an extra insn to
1446                      load it.  */
1447
1448                   pp->mem_cost
1449                     = (MEMORY_MOVE_COST (mode, classes[i], 
1450                                          recog_data.operand_type[i] == OP_IN)
1451                        - allows_mem);
1452
1453                   /* If we have assigned a class to this register in our
1454                      first pass, add a cost to this alternative corresponding
1455                      to what we would add if this register were not in the
1456                      appropriate class.  */
1457
1458                   if (prefclass)
1459                     alt_cost
1460                       += (may_move_cost[(unsigned char) prefclass[REGNO (op)]]
1461                           [(int) classes[i]]);
1462                 }
1463             }
1464
1465           /* Otherwise, if this alternative wins, either because we
1466              have already determined that or if we have a hard register of
1467              the proper class, there is no cost for this alternative.  */
1468
1469           else if (win
1470                    || (GET_CODE (op) == REG
1471                        && reg_fits_class_p (op, classes[i], 0, GET_MODE (op))))
1472             ;
1473
1474           /* If registers are valid, the cost of this alternative includes
1475              copying the object to and/or from a register.  */
1476
1477           else if (classes[i] != NO_REGS)
1478             {
1479               if (recog_data.operand_type[i] != OP_OUT)
1480                 alt_cost += copy_cost (op, mode, classes[i], 1);
1481
1482               if (recog_data.operand_type[i] != OP_IN)
1483                 alt_cost += copy_cost (op, mode, classes[i], 0);
1484             }
1485
1486           /* The only other way this alternative can be used is if this is a
1487              constant that could be placed into memory.  */
1488
1489           else if (CONSTANT_P (op) && (allows_addr || allows_mem))
1490             alt_cost += MEMORY_MOVE_COST (mode, classes[i], 1);
1491           else
1492             alt_fail = 1;
1493         }
1494
1495       if (alt_fail)
1496         continue;
1497
1498       /* Finally, update the costs with the information we've calculated
1499          about this alternative.  */
1500
1501       for (i = 0; i < n_ops; i++)
1502         if (GET_CODE (ops[i]) == REG
1503             && REGNO (ops[i]) >= FIRST_PSEUDO_REGISTER)
1504           {
1505             struct costs *pp = &op_costs[i], *qq = &this_op_costs[i];
1506             int scale = 1 + (recog_data.operand_type[i] == OP_INOUT);
1507
1508             pp->mem_cost = MIN (pp->mem_cost,
1509                                 (qq->mem_cost + alt_cost) * scale);
1510
1511             for (class = 0; class < N_REG_CLASSES; class++)
1512               pp->cost[class] = MIN (pp->cost[class],
1513                                      (qq->cost[class] + alt_cost) * scale);
1514           }
1515     }
1516
1517   /* If this insn is a single set copying operand 1 to operand 0
1518      and one is a pseudo with the other a hard reg that is in its
1519      own register class, set the cost of that register class to -1.  */
1520
1521   if ((set = single_set (insn)) != 0
1522       && ops[0] == SET_DEST (set) && ops[1] == SET_SRC (set)
1523       && GET_CODE (ops[0]) == REG && GET_CODE (ops[1]) == REG)
1524     for (i = 0; i <= 1; i++)
1525       if (REGNO (ops[i]) >= FIRST_PSEUDO_REGISTER)
1526         {
1527           int regno = REGNO (ops[!i]);
1528           enum machine_mode mode = GET_MODE (ops[!i]);
1529           int class;
1530           int nr;
1531
1532           if (regno >= FIRST_PSEUDO_REGISTER && prefclass != 0
1533               && (reg_class_size[(unsigned char)prefclass[regno]]
1534                   == CLASS_MAX_NREGS (prefclass[regno], mode)))
1535             op_costs[i].cost[(unsigned char)prefclass[regno]] = -1;
1536           else if (regno < FIRST_PSEUDO_REGISTER)
1537             for (class = 0; class < N_REG_CLASSES; class++)
1538               if (TEST_HARD_REG_BIT (reg_class_contents[class], regno)
1539                   && reg_class_size[class] == CLASS_MAX_NREGS (class, mode))
1540                 {
1541                   if (reg_class_size[class] == 1)
1542                     op_costs[i].cost[class] = -1;
1543                   else
1544                     {
1545                       for (nr = 0; nr < HARD_REGNO_NREGS(regno, mode); nr++)
1546                         {
1547                           if (!TEST_HARD_REG_BIT (reg_class_contents[class], regno + nr))
1548                             break;
1549                         }
1550
1551                       if (nr == HARD_REGNO_NREGS(regno,mode))
1552                         op_costs[i].cost[class] = -1;
1553                     }
1554                 }
1555         }
1556 }
1557 \f
1558 /* Compute the cost of loading X into (if TO_P is non-zero) or from (if
1559    TO_P is zero) a register of class CLASS in mode MODE.
1560
1561    X must not be a pseudo.  */
1562
1563 static int
1564 copy_cost (x, mode, class, to_p)
1565      rtx x;
1566      enum machine_mode mode;
1567      enum reg_class class;
1568      int to_p;
1569 {
1570 #ifdef HAVE_SECONDARY_RELOADS
1571   enum reg_class secondary_class = NO_REGS;
1572 #endif
1573
1574   /* If X is a SCRATCH, there is actually nothing to move since we are
1575      assuming optimal allocation.  */
1576
1577   if (GET_CODE (x) == SCRATCH)
1578     return 0;
1579
1580   /* Get the class we will actually use for a reload.  */
1581   class = PREFERRED_RELOAD_CLASS (x, class);
1582
1583 #ifdef HAVE_SECONDARY_RELOADS
1584   /* If we need a secondary reload (we assume here that we are using 
1585      the secondary reload as an intermediate, not a scratch register), the
1586      cost is that to load the input into the intermediate register, then
1587      to copy them.  We use a special value of TO_P to avoid recursion.  */
1588
1589 #ifdef SECONDARY_INPUT_RELOAD_CLASS
1590   if (to_p == 1)
1591     secondary_class = SECONDARY_INPUT_RELOAD_CLASS (class, mode, x);
1592 #endif
1593
1594 #ifdef SECONDARY_OUTPUT_RELOAD_CLASS
1595   if (! to_p)
1596     secondary_class = SECONDARY_OUTPUT_RELOAD_CLASS (class, mode, x);
1597 #endif
1598
1599   if (secondary_class != NO_REGS)
1600     return (move_cost[(int) secondary_class][(int) class]
1601             + copy_cost (x, mode, secondary_class, 2));
1602 #endif  /* HAVE_SECONDARY_RELOADS */
1603
1604   /* For memory, use the memory move cost, for (hard) registers, use the
1605      cost to move between the register classes, and use 2 for everything
1606      else (constants).  */
1607
1608   if (GET_CODE (x) == MEM || class == NO_REGS)
1609     return MEMORY_MOVE_COST (mode, class, to_p);
1610
1611   else if (GET_CODE (x) == REG)
1612     return move_cost[(int) REGNO_REG_CLASS (REGNO (x))][(int) class];
1613
1614   else
1615     /* If this is a constant, we may eventually want to call rtx_cost here.  */
1616     return 2;
1617 }
1618 \f
1619 /* Record the pseudo registers we must reload into hard registers
1620    in a subexpression of a memory address, X.
1621
1622    CLASS is the class that the register needs to be in and is either
1623    BASE_REG_CLASS or INDEX_REG_CLASS.
1624
1625    SCALE is twice the amount to multiply the cost by (it is twice so we
1626    can represent half-cost adjustments).  */
1627
1628 static void
1629 record_address_regs (x, class, scale)
1630      rtx x;
1631      enum reg_class class;
1632      int scale;
1633 {
1634   register enum rtx_code code = GET_CODE (x);
1635
1636   switch (code)
1637     {
1638     case CONST_INT:
1639     case CONST:
1640     case CC0:
1641     case PC:
1642     case SYMBOL_REF:
1643     case LABEL_REF:
1644       return;
1645
1646     case PLUS:
1647       /* When we have an address that is a sum,
1648          we must determine whether registers are "base" or "index" regs.
1649          If there is a sum of two registers, we must choose one to be
1650          the "base".  Luckily, we can use the REGNO_POINTER_FLAG
1651          to make a good choice most of the time.  We only need to do this
1652          on machines that can have two registers in an address and where
1653          the base and index register classes are different.
1654
1655          ??? This code used to set REGNO_POINTER_FLAG in some cases, but
1656          that seems bogus since it should only be set when we are sure
1657          the register is being used as a pointer.  */
1658
1659       {
1660         rtx arg0 = XEXP (x, 0);
1661         rtx arg1 = XEXP (x, 1);
1662         register enum rtx_code code0 = GET_CODE (arg0);
1663         register enum rtx_code code1 = GET_CODE (arg1);
1664
1665         /* Look inside subregs.  */
1666         if (code0 == SUBREG)
1667           arg0 = SUBREG_REG (arg0), code0 = GET_CODE (arg0);
1668         if (code1 == SUBREG)
1669           arg1 = SUBREG_REG (arg1), code1 = GET_CODE (arg1);
1670
1671         /* If this machine only allows one register per address, it must
1672            be in the first operand.  */
1673
1674         if (MAX_REGS_PER_ADDRESS == 1)
1675           record_address_regs (arg0, class, scale);
1676
1677         /* If index and base registers are the same on this machine, just
1678            record registers in any non-constant operands.  We assume here,
1679            as well as in the tests below, that all addresses are in 
1680            canonical form.  */
1681
1682         else if (INDEX_REG_CLASS == BASE_REG_CLASS)
1683           {
1684             record_address_regs (arg0, class, scale);
1685             if (! CONSTANT_P (arg1))
1686               record_address_regs (arg1, class, scale);
1687           }
1688
1689         /* If the second operand is a constant integer, it doesn't change
1690            what class the first operand must be.  */
1691
1692         else if (code1 == CONST_INT || code1 == CONST_DOUBLE)
1693           record_address_regs (arg0, class, scale);
1694
1695         /* If the second operand is a symbolic constant, the first operand
1696            must be an index register.  */
1697
1698         else if (code1 == SYMBOL_REF || code1 == CONST || code1 == LABEL_REF)
1699           record_address_regs (arg0, INDEX_REG_CLASS, scale);
1700
1701         /* If both operands are registers but one is already a hard register
1702            of index or base class, give the other the class that the hard
1703            register is not.  */
1704
1705 #ifdef REG_OK_FOR_BASE_P
1706         else if (code0 == REG && code1 == REG
1707                  && REGNO (arg0) < FIRST_PSEUDO_REGISTER
1708                  && (REG_OK_FOR_BASE_P (arg0) || REG_OK_FOR_INDEX_P (arg0)))
1709           record_address_regs (arg1,
1710                                REG_OK_FOR_BASE_P (arg0)
1711                                ? INDEX_REG_CLASS : BASE_REG_CLASS,
1712                                scale);
1713         else if (code0 == REG && code1 == REG
1714                  && REGNO (arg1) < FIRST_PSEUDO_REGISTER
1715                  && (REG_OK_FOR_BASE_P (arg1) || REG_OK_FOR_INDEX_P (arg1)))
1716           record_address_regs (arg0,
1717                                REG_OK_FOR_BASE_P (arg1)
1718                                ? INDEX_REG_CLASS : BASE_REG_CLASS,
1719                                scale);
1720 #endif
1721
1722         /* If one operand is known to be a pointer, it must be the base
1723            with the other operand the index.  Likewise if the other operand
1724            is a MULT.  */
1725
1726         else if ((code0 == REG && REGNO_POINTER_FLAG (REGNO (arg0)))
1727                  || code1 == MULT)
1728           {
1729             record_address_regs (arg0, BASE_REG_CLASS, scale);
1730             record_address_regs (arg1, INDEX_REG_CLASS, scale);
1731           }
1732         else if ((code1 == REG && REGNO_POINTER_FLAG (REGNO (arg1)))
1733                  || code0 == MULT)
1734           {
1735             record_address_regs (arg0, INDEX_REG_CLASS, scale);
1736             record_address_regs (arg1, BASE_REG_CLASS, scale);
1737           }
1738
1739         /* Otherwise, count equal chances that each might be a base
1740            or index register.  This case should be rare.  */
1741
1742         else
1743           {
1744             record_address_regs (arg0, BASE_REG_CLASS, scale / 2);
1745             record_address_regs (arg0, INDEX_REG_CLASS, scale / 2);
1746             record_address_regs (arg1, BASE_REG_CLASS, scale / 2);
1747             record_address_regs (arg1, INDEX_REG_CLASS, scale / 2);
1748           }
1749       }
1750       break;
1751
1752     case POST_INC:
1753     case PRE_INC:
1754     case POST_DEC:
1755     case PRE_DEC:
1756       /* Double the importance of a pseudo register that is incremented
1757          or decremented, since it would take two extra insns
1758          if it ends up in the wrong place.  If the operand is a pseudo,
1759          show it is being used in an INC_DEC context.  */
1760
1761 #ifdef FORBIDDEN_INC_DEC_CLASSES
1762       if (GET_CODE (XEXP (x, 0)) == REG
1763           && REGNO (XEXP (x, 0)) >= FIRST_PSEUDO_REGISTER)
1764         in_inc_dec[REGNO (XEXP (x, 0))] = 1;
1765 #endif
1766
1767       record_address_regs (XEXP (x, 0), class, 2 * scale);
1768       break;
1769
1770     case REG:
1771       {
1772         register struct costs *pp = &costs[REGNO (x)];
1773         register int i;
1774
1775         pp->mem_cost += (MEMORY_MOVE_COST (Pmode, class, 1) * scale) / 2;
1776
1777         for (i = 0; i < N_REG_CLASSES; i++)
1778           pp->cost[i] += (may_move_cost[i][(int) class] * scale) / 2;
1779       }
1780       break;
1781
1782     default:
1783       {
1784         register const char *fmt = GET_RTX_FORMAT (code);
1785         register int i;
1786         for (i = GET_RTX_LENGTH (code) - 1; i >= 0; i--)
1787           if (fmt[i] == 'e')
1788             record_address_regs (XEXP (x, i), class, scale);
1789       }
1790     }
1791 }
1792 \f
1793 #ifdef FORBIDDEN_INC_DEC_CLASSES
1794
1795 /* Return 1 if REG is valid as an auto-increment memory reference
1796    to an object of MODE.  */
1797
1798 static int
1799 auto_inc_dec_reg_p (reg, mode)
1800      rtx reg;
1801      enum machine_mode mode;
1802 {
1803   if (HAVE_POST_INCREMENT
1804       && memory_address_p (mode, gen_rtx_POST_INC (Pmode, reg)))
1805     return 1;
1806
1807   if (HAVE_POST_DECREMENT
1808       && memory_address_p (mode, gen_rtx_POST_DEC (Pmode, reg)))
1809     return 1;
1810
1811   if (HAVE_PRE_INCREMENT
1812       && memory_address_p (mode, gen_rtx_PRE_INC (Pmode, reg)))
1813     return 1;
1814
1815   if (HAVE_PRE_DECREMENT
1816       && memory_address_p (mode, gen_rtx_PRE_DEC (Pmode, reg)))
1817     return 1;
1818
1819   return 0;
1820 }
1821 #endif
1822 \f
1823 static short *renumber = (short *)0;
1824 static size_t regno_allocated = 0;
1825
1826 /* Allocate enough space to hold NUM_REGS registers for the tables used for
1827    reg_scan and flow_analysis that are indexed by the register number.  If
1828    NEW_P is non zero, initialize all of the registers, otherwise only
1829    initialize the new registers allocated.  The same table is kept from
1830    function to function, only reallocating it when we need more room.  If
1831    RENUMBER_P is non zero, allocate the reg_renumber array also.  */
1832
1833 void
1834 allocate_reg_info (num_regs, new_p, renumber_p)
1835      size_t num_regs;
1836      int new_p;
1837      int renumber_p;
1838 {
1839   size_t size_info;
1840   size_t size_renumber;
1841   size_t min = (new_p) ? 0 : reg_n_max;
1842   struct reg_info_data *reg_data;
1843   struct reg_info_data *reg_next;
1844
1845   if (num_regs > regno_allocated)
1846     {
1847       size_t old_allocated = regno_allocated;
1848
1849       regno_allocated = num_regs + (num_regs / 20);     /* add some slop space */
1850       size_renumber = regno_allocated * sizeof (short);
1851
1852       if (!reg_n_info)
1853         {
1854           VARRAY_REG_INIT (reg_n_info, regno_allocated, "reg_n_info");
1855           renumber = (short *) xmalloc (size_renumber);
1856           prefclass_buffer = (char *) xmalloc (regno_allocated);
1857           altclass_buffer = (char *) xmalloc (regno_allocated);
1858         }
1859
1860       else
1861         {
1862           VARRAY_GROW (reg_n_info, regno_allocated);
1863
1864           if (new_p)            /* if we're zapping everything, no need to realloc */
1865             {
1866               free ((char *)renumber);
1867               free ((char *)prefclass_buffer);
1868               free ((char *)altclass_buffer);
1869               renumber = (short *) xmalloc (size_renumber);
1870               prefclass_buffer = (char *) xmalloc (regno_allocated);
1871               altclass_buffer = (char *) xmalloc (regno_allocated);
1872             }
1873
1874           else
1875             {
1876               renumber = (short *) xrealloc ((char *)renumber, size_renumber);
1877               prefclass_buffer = (char *) xrealloc ((char *)prefclass_buffer,
1878                                                     regno_allocated);
1879
1880               altclass_buffer = (char *) xrealloc ((char *)altclass_buffer,
1881                                                    regno_allocated);
1882             }
1883         }
1884
1885       size_info = (regno_allocated - old_allocated) * sizeof (reg_info)
1886         + sizeof (struct reg_info_data) - sizeof (reg_info);
1887       reg_data = (struct reg_info_data *) xcalloc (size_info, 1);
1888       reg_data->min_index = old_allocated;
1889       reg_data->max_index = regno_allocated - 1;
1890       reg_data->next = reg_info_head;
1891       reg_info_head = reg_data;
1892     }
1893
1894   reg_n_max = num_regs;
1895   if (min < num_regs)
1896     {
1897       /* Loop through each of the segments allocated for the actual
1898          reg_info pages, and set up the pointers, zero the pages, etc.  */
1899       for (reg_data = reg_info_head; reg_data; reg_data = reg_next)
1900         {
1901           size_t min_index = reg_data->min_index;
1902           size_t max_index = reg_data->max_index;
1903
1904           reg_next = reg_data->next;
1905           if (min <= max_index)
1906             {
1907               size_t max = max_index;
1908               size_t local_min = min - min_index;
1909               size_t i;
1910
1911               if (min < min_index)
1912                 local_min = 0;
1913               if (!reg_data->used_p)    /* page just allocated with calloc */
1914                 reg_data->used_p = 1;   /* no need to zero */
1915               else
1916                 bzero ((char *) &reg_data->data[local_min],
1917                        sizeof (reg_info) * (max - min_index - local_min + 1));
1918
1919               for (i = min_index+local_min; i <= max; i++)
1920                 {
1921                   VARRAY_REG (reg_n_info, i) = &reg_data->data[i-min_index];
1922                   REG_BASIC_BLOCK (i) = REG_BLOCK_UNKNOWN;
1923                   renumber[i] = -1;
1924                   prefclass_buffer[i] = (char) NO_REGS;
1925                   altclass_buffer[i] = (char) NO_REGS;
1926                 }
1927             }
1928         }
1929     }
1930
1931   /* If {pref,alt}class have already been allocated, update the pointers to
1932      the newly realloced ones.  */
1933   if (prefclass)
1934     {
1935       prefclass = prefclass_buffer;
1936       altclass = altclass_buffer;
1937     }
1938
1939   if (renumber_p)
1940     reg_renumber = renumber;
1941
1942   /* Tell the regset code about the new number of registers */
1943   MAX_REGNO_REG_SET (num_regs, new_p, renumber_p);
1944 }
1945
1946 /* Free up the space allocated by allocate_reg_info.  */
1947 void
1948 free_reg_info ()
1949 {
1950   if (reg_n_info)
1951     {
1952       struct reg_info_data *reg_data;
1953       struct reg_info_data *reg_next;
1954
1955       VARRAY_FREE (reg_n_info);
1956       for (reg_data = reg_info_head; reg_data; reg_data = reg_next)
1957         {
1958           reg_next = reg_data->next;
1959           free ((char *)reg_data);
1960         }
1961
1962       free (prefclass_buffer);
1963       free (altclass_buffer);
1964       prefclass_buffer = (char *)0;
1965       altclass_buffer = (char *)0;
1966       reg_info_head = (struct reg_info_data *)0;
1967       renumber = (short *)0;
1968     }
1969   regno_allocated = 0;
1970   reg_n_max = 0;
1971 }
1972 \f
1973 /* This is the `regscan' pass of the compiler, run just before cse
1974    and again just before loop.
1975
1976    It finds the first and last use of each pseudo-register
1977    and records them in the vectors regno_first_uid, regno_last_uid
1978    and counts the number of sets in the vector reg_n_sets.
1979
1980    REPEAT is nonzero the second time this is called.  */
1981
1982 /* Maximum number of parallel sets and clobbers in any insn in this fn.
1983    Always at least 3, since the combiner could put that many together
1984    and we want this to remain correct for all the remaining passes.  */
1985
1986 int max_parallel;
1987
1988 void
1989 reg_scan (f, nregs, repeat)
1990      rtx f;
1991      int nregs;
1992      int repeat;
1993 {
1994   register rtx insn;
1995
1996   allocate_reg_info (nregs, TRUE, FALSE);
1997   max_parallel = 3;
1998
1999   for (insn = f; insn; insn = NEXT_INSN (insn))
2000     if (GET_CODE (insn) == INSN
2001         || GET_CODE (insn) == CALL_INSN
2002         || GET_CODE (insn) == JUMP_INSN)
2003       {
2004         if (GET_CODE (PATTERN (insn)) == PARALLEL
2005             && XVECLEN (PATTERN (insn), 0) > max_parallel)
2006           max_parallel = XVECLEN (PATTERN (insn), 0);
2007         reg_scan_mark_refs (PATTERN (insn), insn, 0, 0);
2008
2009         if (REG_NOTES (insn))
2010           reg_scan_mark_refs (REG_NOTES (insn), insn, 1, 0);
2011       }
2012 }
2013
2014 /* Update 'regscan' information by looking at the insns
2015    from FIRST to LAST.  Some new REGs have been created,
2016    and any REG with number greater than OLD_MAX_REGNO is
2017    such a REG.  We only update information for those.  */
2018
2019 void
2020 reg_scan_update(first, last, old_max_regno)
2021      rtx first;
2022      rtx last;
2023      int old_max_regno;
2024 {
2025   register rtx insn;
2026
2027   allocate_reg_info (max_reg_num (), FALSE, FALSE);
2028
2029   for (insn = first; insn != last; insn = NEXT_INSN (insn))
2030     if (GET_CODE (insn) == INSN
2031         || GET_CODE (insn) == CALL_INSN
2032         || GET_CODE (insn) == JUMP_INSN)
2033       {
2034         if (GET_CODE (PATTERN (insn)) == PARALLEL
2035             && XVECLEN (PATTERN (insn), 0) > max_parallel)
2036           max_parallel = XVECLEN (PATTERN (insn), 0);
2037         reg_scan_mark_refs (PATTERN (insn), insn, 0, old_max_regno);
2038
2039         if (REG_NOTES (insn))
2040           reg_scan_mark_refs (REG_NOTES (insn), insn, 1, old_max_regno);
2041       }
2042 }
2043
2044 /* X is the expression to scan.  INSN is the insn it appears in.
2045    NOTE_FLAG is nonzero if X is from INSN's notes rather than its body.
2046    We should only record information for REGs with numbers
2047    greater than or equal to MIN_REGNO.  */
2048
2049 static void
2050 reg_scan_mark_refs (x, insn, note_flag, min_regno)
2051      rtx x;
2052      rtx insn;
2053      int note_flag;
2054      int min_regno;
2055 {
2056   register enum rtx_code code;
2057   register rtx dest;
2058   register rtx note;
2059
2060   code = GET_CODE (x);
2061   switch (code)
2062     {
2063     case CONST:
2064     case CONST_INT:
2065     case CONST_DOUBLE:
2066     case CC0:
2067     case PC:
2068     case SYMBOL_REF:
2069     case LABEL_REF:
2070     case ADDR_VEC:
2071     case ADDR_DIFF_VEC:
2072       return;
2073
2074     case REG:
2075       {
2076         register int regno = REGNO (x);
2077
2078         if (regno >= min_regno)
2079           {
2080             REGNO_LAST_NOTE_UID (regno) = INSN_UID (insn);
2081             if (!note_flag)
2082               REGNO_LAST_UID (regno) = INSN_UID (insn);
2083             if (REGNO_FIRST_UID (regno) == 0)
2084               REGNO_FIRST_UID (regno) = INSN_UID (insn);
2085           }
2086       }
2087       break;
2088
2089     case EXPR_LIST:
2090       if (XEXP (x, 0))
2091         reg_scan_mark_refs (XEXP (x, 0), insn, note_flag, min_regno);
2092       if (XEXP (x, 1))
2093         reg_scan_mark_refs (XEXP (x, 1), insn, note_flag, min_regno);
2094       break;
2095
2096     case INSN_LIST:
2097       if (XEXP (x, 1))
2098         reg_scan_mark_refs (XEXP (x, 1), insn, note_flag, min_regno);
2099       break;
2100
2101     case SET:
2102       /* Count a set of the destination if it is a register.  */
2103       for (dest = SET_DEST (x);
2104            GET_CODE (dest) == SUBREG || GET_CODE (dest) == STRICT_LOW_PART
2105            || GET_CODE (dest) == ZERO_EXTEND;
2106            dest = XEXP (dest, 0))
2107         ;
2108
2109       if (GET_CODE (dest) == REG
2110           && REGNO (dest) >= min_regno)
2111         REG_N_SETS (REGNO (dest))++;
2112
2113       /* If this is setting a pseudo from another pseudo or the sum of a
2114          pseudo and a constant integer and the other pseudo is known to be
2115          a pointer, set the destination to be a pointer as well.
2116
2117          Likewise if it is setting the destination from an address or from a
2118          value equivalent to an address or to the sum of an address and
2119          something else.
2120                      
2121          But don't do any of this if the pseudo corresponds to a user
2122          variable since it should have already been set as a pointer based
2123          on the type.  */
2124
2125       if (GET_CODE (SET_DEST (x)) == REG
2126           && REGNO (SET_DEST (x)) >= FIRST_PSEUDO_REGISTER
2127           && REGNO (SET_DEST (x)) >= min_regno
2128           /* If the destination pseudo is set more than once, then other
2129              sets might not be to a pointer value (consider access to a
2130              union in two threads of control in the presense of global
2131              optimizations).  So only set REGNO_POINTER_FLAG on the destination
2132              pseudo if this is the only set of that pseudo.  */
2133           && REG_N_SETS (REGNO (SET_DEST (x))) == 1
2134           && ! REG_USERVAR_P (SET_DEST (x))
2135           && ! REGNO_POINTER_FLAG (REGNO (SET_DEST (x)))
2136           && ((GET_CODE (SET_SRC (x)) == REG
2137                && REGNO_POINTER_FLAG (REGNO (SET_SRC (x))))
2138               || ((GET_CODE (SET_SRC (x)) == PLUS
2139                    || GET_CODE (SET_SRC (x)) == LO_SUM)
2140                   && GET_CODE (XEXP (SET_SRC (x), 1)) == CONST_INT
2141                   && GET_CODE (XEXP (SET_SRC (x), 0)) == REG
2142                   && REGNO_POINTER_FLAG (REGNO (XEXP (SET_SRC (x), 0))))
2143               || GET_CODE (SET_SRC (x)) == CONST
2144               || GET_CODE (SET_SRC (x)) == SYMBOL_REF
2145               || GET_CODE (SET_SRC (x)) == LABEL_REF
2146               || (GET_CODE (SET_SRC (x)) == HIGH
2147                   && (GET_CODE (XEXP (SET_SRC (x), 0)) == CONST
2148                       || GET_CODE (XEXP (SET_SRC (x), 0)) == SYMBOL_REF
2149                       || GET_CODE (XEXP (SET_SRC (x), 0)) == LABEL_REF))
2150               || ((GET_CODE (SET_SRC (x)) == PLUS
2151                    || GET_CODE (SET_SRC (x)) == LO_SUM)
2152                   && (GET_CODE (XEXP (SET_SRC (x), 1)) == CONST
2153                       || GET_CODE (XEXP (SET_SRC (x), 1)) == SYMBOL_REF
2154                       || GET_CODE (XEXP (SET_SRC (x), 1)) == LABEL_REF))
2155               || ((note = find_reg_note (insn, REG_EQUAL, 0)) != 0
2156                   && (GET_CODE (XEXP (note, 0)) == CONST
2157                       || GET_CODE (XEXP (note, 0)) == SYMBOL_REF
2158                       || GET_CODE (XEXP (note, 0)) == LABEL_REF))))
2159         REGNO_POINTER_FLAG (REGNO (SET_DEST (x))) = 1;
2160
2161       /* ... fall through ...  */
2162
2163     default:
2164       {
2165         register const char *fmt = GET_RTX_FORMAT (code);
2166         register int i;
2167         for (i = GET_RTX_LENGTH (code) - 1; i >= 0; i--)
2168           {
2169             if (fmt[i] == 'e')
2170               reg_scan_mark_refs (XEXP (x, i), insn, note_flag, min_regno);
2171             else if (fmt[i] == 'E' && XVEC (x, i) != 0)
2172               {
2173                 register int j;
2174                 for (j = XVECLEN (x, i) - 1; j >= 0; j--)
2175                   reg_scan_mark_refs (XVECEXP (x, i, j), insn, note_flag, min_regno);
2176               }
2177           }
2178       }
2179     }
2180 }
2181 \f
2182 /* Return nonzero if C1 is a subset of C2, i.e., if every register in C1
2183    is also in C2.  */
2184
2185 int
2186 reg_class_subset_p (c1, c2)
2187      register enum reg_class c1;
2188      register enum reg_class c2;
2189 {
2190   if (c1 == c2) return 1;
2191
2192   if (c2 == ALL_REGS)
2193   win:
2194     return 1;
2195   GO_IF_HARD_REG_SUBSET (reg_class_contents[(int)c1],
2196                          reg_class_contents[(int)c2],
2197                          win);
2198   return 0;
2199 }
2200
2201 /* Return nonzero if there is a register that is in both C1 and C2.  */
2202
2203 int
2204 reg_classes_intersect_p (c1, c2)
2205      register enum reg_class c1;
2206      register enum reg_class c2;
2207 {
2208 #ifdef HARD_REG_SET
2209   register
2210 #endif
2211     HARD_REG_SET c;
2212
2213   if (c1 == c2) return 1;
2214
2215   if (c1 == ALL_REGS || c2 == ALL_REGS)
2216     return 1;
2217
2218   COPY_HARD_REG_SET (c, reg_class_contents[(int) c1]);
2219   AND_HARD_REG_SET (c, reg_class_contents[(int) c2]);
2220
2221   GO_IF_HARD_REG_SUBSET (c, reg_class_contents[(int) NO_REGS], lose);
2222   return 1;
2223
2224  lose:
2225   return 0;
2226 }
2227
2228 /* Release any memory allocated by register sets.  */
2229
2230 void
2231 regset_release_memory ()
2232 {
2233   bitmap_release_memory ();
2234 }