OSDN Git Service

* c-parse.in (cast_expr): Constify.
[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 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] = may_move_cost[class][(int) classes[i]];
1440
1441                   /* If the alternative actually allows memory, make things
1442                      a bit cheaper since we won't need an extra insn to
1443                      load it.  */
1444
1445                   pp->mem_cost = (MEMORY_MOVE_COST (mode, classes[i], 1)
1446                                   - allows_mem);
1447
1448                   /* If we have assigned a class to this register in our
1449                      first pass, add a cost to this alternative corresponding
1450                      to what we would add if this register were not in the
1451                      appropriate class.  */
1452
1453                   if (prefclass)
1454                     alt_cost
1455                       += may_move_cost[(unsigned char)prefclass[REGNO (op)]][(int) classes[i]];
1456                 }
1457             }
1458
1459           /* Otherwise, if this alternative wins, either because we
1460              have already determined that or if we have a hard register of
1461              the proper class, there is no cost for this alternative.  */
1462
1463           else if (win
1464                    || (GET_CODE (op) == REG
1465                        && reg_fits_class_p (op, classes[i], 0, GET_MODE (op))))
1466             ;
1467
1468           /* If registers are valid, the cost of this alternative includes
1469              copying the object to and/or from a register.  */
1470
1471           else if (classes[i] != NO_REGS)
1472             {
1473               if (recog_data.operand_type[i] != OP_OUT)
1474                 alt_cost += copy_cost (op, mode, classes[i], 1);
1475
1476               if (recog_data.operand_type[i] != OP_IN)
1477                 alt_cost += copy_cost (op, mode, classes[i], 0);
1478             }
1479
1480           /* The only other way this alternative can be used is if this is a
1481              constant that could be placed into memory.  */
1482
1483           else if (CONSTANT_P (op) && (allows_addr || allows_mem))
1484             alt_cost += MEMORY_MOVE_COST (mode, classes[i], 1);
1485           else
1486             alt_fail = 1;
1487         }
1488
1489       if (alt_fail)
1490         continue;
1491
1492       /* Finally, update the costs with the information we've calculated
1493          about this alternative.  */
1494
1495       for (i = 0; i < n_ops; i++)
1496         if (GET_CODE (ops[i]) == REG
1497             && REGNO (ops[i]) >= FIRST_PSEUDO_REGISTER)
1498           {
1499             struct costs *pp = &op_costs[i], *qq = &this_op_costs[i];
1500             int scale = 1 + (recog_data.operand_type[i] == OP_INOUT);
1501
1502             pp->mem_cost = MIN (pp->mem_cost,
1503                                 (qq->mem_cost + alt_cost) * scale);
1504
1505             for (class = 0; class < N_REG_CLASSES; class++)
1506               pp->cost[class] = MIN (pp->cost[class],
1507                                      (qq->cost[class] + alt_cost) * scale);
1508           }
1509     }
1510
1511   /* If this insn is a single set copying operand 1 to operand 0
1512      and one is a pseudo with the other a hard reg that is in its
1513      own register class, set the cost of that register class to -1.  */
1514
1515   if ((set = single_set (insn)) != 0
1516       && ops[0] == SET_DEST (set) && ops[1] == SET_SRC (set)
1517       && GET_CODE (ops[0]) == REG && GET_CODE (ops[1]) == REG)
1518     for (i = 0; i <= 1; i++)
1519       if (REGNO (ops[i]) >= FIRST_PSEUDO_REGISTER)
1520         {
1521           int regno = REGNO (ops[!i]);
1522           enum machine_mode mode = GET_MODE (ops[!i]);
1523           int class;
1524           int nr;
1525
1526           if (regno >= FIRST_PSEUDO_REGISTER && prefclass != 0
1527               && (reg_class_size[(unsigned char)prefclass[regno]]
1528                   == CLASS_MAX_NREGS (prefclass[regno], mode)))
1529             op_costs[i].cost[(unsigned char)prefclass[regno]] = -1;
1530           else if (regno < FIRST_PSEUDO_REGISTER)
1531             for (class = 0; class < N_REG_CLASSES; class++)
1532               if (TEST_HARD_REG_BIT (reg_class_contents[class], regno)
1533                   && reg_class_size[class] == CLASS_MAX_NREGS (class, mode))
1534                 {
1535                   if (reg_class_size[class] == 1)
1536                     op_costs[i].cost[class] = -1;
1537                   else
1538                     {
1539                       for (nr = 0; nr < HARD_REGNO_NREGS(regno, mode); nr++)
1540                         {
1541                           if (!TEST_HARD_REG_BIT (reg_class_contents[class], regno + nr))
1542                             break;
1543                         }
1544
1545                       if (nr == HARD_REGNO_NREGS(regno,mode))
1546                         op_costs[i].cost[class] = -1;
1547                     }
1548                 }
1549         }
1550 }
1551 \f
1552 /* Compute the cost of loading X into (if TO_P is non-zero) or from (if
1553    TO_P is zero) a register of class CLASS in mode MODE.
1554
1555    X must not be a pseudo.  */
1556
1557 static int
1558 copy_cost (x, mode, class, to_p)
1559      rtx x;
1560      enum machine_mode mode;
1561      enum reg_class class;
1562      int to_p;
1563 {
1564 #ifdef HAVE_SECONDARY_RELOADS
1565   enum reg_class secondary_class = NO_REGS;
1566 #endif
1567
1568   /* If X is a SCRATCH, there is actually nothing to move since we are
1569      assuming optimal allocation.  */
1570
1571   if (GET_CODE (x) == SCRATCH)
1572     return 0;
1573
1574   /* Get the class we will actually use for a reload.  */
1575   class = PREFERRED_RELOAD_CLASS (x, class);
1576
1577 #ifdef HAVE_SECONDARY_RELOADS
1578   /* If we need a secondary reload (we assume here that we are using 
1579      the secondary reload as an intermediate, not a scratch register), the
1580      cost is that to load the input into the intermediate register, then
1581      to copy them.  We use a special value of TO_P to avoid recursion.  */
1582
1583 #ifdef SECONDARY_INPUT_RELOAD_CLASS
1584   if (to_p == 1)
1585     secondary_class = SECONDARY_INPUT_RELOAD_CLASS (class, mode, x);
1586 #endif
1587
1588 #ifdef SECONDARY_OUTPUT_RELOAD_CLASS
1589   if (! to_p)
1590     secondary_class = SECONDARY_OUTPUT_RELOAD_CLASS (class, mode, x);
1591 #endif
1592
1593   if (secondary_class != NO_REGS)
1594     return (move_cost[(int) secondary_class][(int) class]
1595             + copy_cost (x, mode, secondary_class, 2));
1596 #endif  /* HAVE_SECONDARY_RELOADS */
1597
1598   /* For memory, use the memory move cost, for (hard) registers, use the
1599      cost to move between the register classes, and use 2 for everything
1600      else (constants).  */
1601
1602   if (GET_CODE (x) == MEM || class == NO_REGS)
1603     return MEMORY_MOVE_COST (mode, class, to_p);
1604
1605   else if (GET_CODE (x) == REG)
1606     return move_cost[(int) REGNO_REG_CLASS (REGNO (x))][(int) class];
1607
1608   else
1609     /* If this is a constant, we may eventually want to call rtx_cost here.  */
1610     return 2;
1611 }
1612 \f
1613 /* Record the pseudo registers we must reload into hard registers
1614    in a subexpression of a memory address, X.
1615
1616    CLASS is the class that the register needs to be in and is either
1617    BASE_REG_CLASS or INDEX_REG_CLASS.
1618
1619    SCALE is twice the amount to multiply the cost by (it is twice so we
1620    can represent half-cost adjustments).  */
1621
1622 static void
1623 record_address_regs (x, class, scale)
1624      rtx x;
1625      enum reg_class class;
1626      int scale;
1627 {
1628   register enum rtx_code code = GET_CODE (x);
1629
1630   switch (code)
1631     {
1632     case CONST_INT:
1633     case CONST:
1634     case CC0:
1635     case PC:
1636     case SYMBOL_REF:
1637     case LABEL_REF:
1638       return;
1639
1640     case PLUS:
1641       /* When we have an address that is a sum,
1642          we must determine whether registers are "base" or "index" regs.
1643          If there is a sum of two registers, we must choose one to be
1644          the "base".  Luckily, we can use the REGNO_POINTER_FLAG
1645          to make a good choice most of the time.  We only need to do this
1646          on machines that can have two registers in an address and where
1647          the base and index register classes are different.
1648
1649          ??? This code used to set REGNO_POINTER_FLAG in some cases, but
1650          that seems bogus since it should only be set when we are sure
1651          the register is being used as a pointer.  */
1652
1653       {
1654         rtx arg0 = XEXP (x, 0);
1655         rtx arg1 = XEXP (x, 1);
1656         register enum rtx_code code0 = GET_CODE (arg0);
1657         register enum rtx_code code1 = GET_CODE (arg1);
1658
1659         /* Look inside subregs.  */
1660         if (code0 == SUBREG)
1661           arg0 = SUBREG_REG (arg0), code0 = GET_CODE (arg0);
1662         if (code1 == SUBREG)
1663           arg1 = SUBREG_REG (arg1), code1 = GET_CODE (arg1);
1664
1665         /* If this machine only allows one register per address, it must
1666            be in the first operand.  */
1667
1668         if (MAX_REGS_PER_ADDRESS == 1)
1669           record_address_regs (arg0, class, scale);
1670
1671         /* If index and base registers are the same on this machine, just
1672            record registers in any non-constant operands.  We assume here,
1673            as well as in the tests below, that all addresses are in 
1674            canonical form.  */
1675
1676         else if (INDEX_REG_CLASS == BASE_REG_CLASS)
1677           {
1678             record_address_regs (arg0, class, scale);
1679             if (! CONSTANT_P (arg1))
1680               record_address_regs (arg1, class, scale);
1681           }
1682
1683         /* If the second operand is a constant integer, it doesn't change
1684            what class the first operand must be.  */
1685
1686         else if (code1 == CONST_INT || code1 == CONST_DOUBLE)
1687           record_address_regs (arg0, class, scale);
1688
1689         /* If the second operand is a symbolic constant, the first operand
1690            must be an index register.  */
1691
1692         else if (code1 == SYMBOL_REF || code1 == CONST || code1 == LABEL_REF)
1693           record_address_regs (arg0, INDEX_REG_CLASS, scale);
1694
1695         /* If both operands are registers but one is already a hard register
1696            of index or base class, give the other the class that the hard
1697            register is not.  */
1698
1699 #ifdef REG_OK_FOR_BASE_P
1700         else if (code0 == REG && code1 == REG
1701                  && REGNO (arg0) < FIRST_PSEUDO_REGISTER
1702                  && (REG_OK_FOR_BASE_P (arg0) || REG_OK_FOR_INDEX_P (arg0)))
1703           record_address_regs (arg1,
1704                                REG_OK_FOR_BASE_P (arg0)
1705                                ? INDEX_REG_CLASS : BASE_REG_CLASS,
1706                                scale);
1707         else if (code0 == REG && code1 == REG
1708                  && REGNO (arg1) < FIRST_PSEUDO_REGISTER
1709                  && (REG_OK_FOR_BASE_P (arg1) || REG_OK_FOR_INDEX_P (arg1)))
1710           record_address_regs (arg0,
1711                                REG_OK_FOR_BASE_P (arg1)
1712                                ? INDEX_REG_CLASS : BASE_REG_CLASS,
1713                                scale);
1714 #endif
1715
1716         /* If one operand is known to be a pointer, it must be the base
1717            with the other operand the index.  Likewise if the other operand
1718            is a MULT.  */
1719
1720         else if ((code0 == REG && REGNO_POINTER_FLAG (REGNO (arg0)))
1721                  || code1 == MULT)
1722           {
1723             record_address_regs (arg0, BASE_REG_CLASS, scale);
1724             record_address_regs (arg1, INDEX_REG_CLASS, scale);
1725           }
1726         else if ((code1 == REG && REGNO_POINTER_FLAG (REGNO (arg1)))
1727                  || code0 == MULT)
1728           {
1729             record_address_regs (arg0, INDEX_REG_CLASS, scale);
1730             record_address_regs (arg1, BASE_REG_CLASS, scale);
1731           }
1732
1733         /* Otherwise, count equal chances that each might be a base
1734            or index register.  This case should be rare.  */
1735
1736         else
1737           {
1738             record_address_regs (arg0, BASE_REG_CLASS, scale / 2);
1739             record_address_regs (arg0, INDEX_REG_CLASS, scale / 2);
1740             record_address_regs (arg1, BASE_REG_CLASS, scale / 2);
1741             record_address_regs (arg1, INDEX_REG_CLASS, scale / 2);
1742           }
1743       }
1744       break;
1745
1746     case POST_INC:
1747     case PRE_INC:
1748     case POST_DEC:
1749     case PRE_DEC:
1750       /* Double the importance of a pseudo register that is incremented
1751          or decremented, since it would take two extra insns
1752          if it ends up in the wrong place.  If the operand is a pseudo,
1753          show it is being used in an INC_DEC context.  */
1754
1755 #ifdef FORBIDDEN_INC_DEC_CLASSES
1756       if (GET_CODE (XEXP (x, 0)) == REG
1757           && REGNO (XEXP (x, 0)) >= FIRST_PSEUDO_REGISTER)
1758         in_inc_dec[REGNO (XEXP (x, 0))] = 1;
1759 #endif
1760
1761       record_address_regs (XEXP (x, 0), class, 2 * scale);
1762       break;
1763
1764     case REG:
1765       {
1766         register struct costs *pp = &costs[REGNO (x)];
1767         register int i;
1768
1769         pp->mem_cost += (MEMORY_MOVE_COST (Pmode, class, 1) * scale) / 2;
1770
1771         for (i = 0; i < N_REG_CLASSES; i++)
1772           pp->cost[i] += (may_move_cost[i][(int) class] * scale) / 2;
1773       }
1774       break;
1775
1776     default:
1777       {
1778         register const char *fmt = GET_RTX_FORMAT (code);
1779         register int i;
1780         for (i = GET_RTX_LENGTH (code) - 1; i >= 0; i--)
1781           if (fmt[i] == 'e')
1782             record_address_regs (XEXP (x, i), class, scale);
1783       }
1784     }
1785 }
1786 \f
1787 #ifdef FORBIDDEN_INC_DEC_CLASSES
1788
1789 /* Return 1 if REG is valid as an auto-increment memory reference
1790    to an object of MODE.  */
1791
1792 static int
1793 auto_inc_dec_reg_p (reg, mode)
1794      rtx reg;
1795      enum machine_mode mode;
1796 {
1797   if (HAVE_POST_INCREMENT
1798       && memory_address_p (mode, gen_rtx_POST_INC (Pmode, reg)))
1799     return 1;
1800
1801   if (HAVE_POST_DECREMENT
1802       && memory_address_p (mode, gen_rtx_POST_DEC (Pmode, reg)))
1803     return 1;
1804
1805   if (HAVE_PRE_INCREMENT
1806       && memory_address_p (mode, gen_rtx_PRE_INC (Pmode, reg)))
1807     return 1;
1808
1809   if (HAVE_PRE_DECREMENT
1810       && memory_address_p (mode, gen_rtx_PRE_DEC (Pmode, reg)))
1811     return 1;
1812
1813   return 0;
1814 }
1815 #endif
1816 \f
1817 static short *renumber = (short *)0;
1818 static size_t regno_allocated = 0;
1819
1820 /* Allocate enough space to hold NUM_REGS registers for the tables used for
1821    reg_scan and flow_analysis that are indexed by the register number.  If
1822    NEW_P is non zero, initialize all of the registers, otherwise only
1823    initialize the new registers allocated.  The same table is kept from
1824    function to function, only reallocating it when we need more room.  If
1825    RENUMBER_P is non zero, allocate the reg_renumber array also.  */
1826
1827 void
1828 allocate_reg_info (num_regs, new_p, renumber_p)
1829      size_t num_regs;
1830      int new_p;
1831      int renumber_p;
1832 {
1833   size_t size_info;
1834   size_t size_renumber;
1835   size_t min = (new_p) ? 0 : reg_n_max;
1836   struct reg_info_data *reg_data;
1837   struct reg_info_data *reg_next;
1838
1839   if (num_regs > regno_allocated)
1840     {
1841       size_t old_allocated = regno_allocated;
1842
1843       regno_allocated = num_regs + (num_regs / 20);     /* add some slop space */
1844       size_renumber = regno_allocated * sizeof (short);
1845
1846       if (!reg_n_info)
1847         {
1848           VARRAY_REG_INIT (reg_n_info, regno_allocated, "reg_n_info");
1849           renumber = (short *) xmalloc (size_renumber);
1850           prefclass_buffer = (char *) xmalloc (regno_allocated);
1851           altclass_buffer = (char *) xmalloc (regno_allocated);
1852         }
1853
1854       else
1855         {
1856           VARRAY_GROW (reg_n_info, regno_allocated);
1857
1858           if (new_p)            /* if we're zapping everything, no need to realloc */
1859             {
1860               free ((char *)renumber);
1861               free ((char *)prefclass_buffer);
1862               free ((char *)altclass_buffer);
1863               renumber = (short *) xmalloc (size_renumber);
1864               prefclass_buffer = (char *) xmalloc (regno_allocated);
1865               altclass_buffer = (char *) xmalloc (regno_allocated);
1866             }
1867
1868           else
1869             {
1870               renumber = (short *) xrealloc ((char *)renumber, size_renumber);
1871               prefclass_buffer = (char *) xrealloc ((char *)prefclass_buffer,
1872                                                     regno_allocated);
1873
1874               altclass_buffer = (char *) xrealloc ((char *)altclass_buffer,
1875                                                    regno_allocated);
1876             }
1877         }
1878
1879       size_info = (regno_allocated - old_allocated) * sizeof (reg_info)
1880         + sizeof (struct reg_info_data) - sizeof (reg_info);
1881       reg_data = (struct reg_info_data *) xcalloc (size_info, 1);
1882       reg_data->min_index = old_allocated;
1883       reg_data->max_index = regno_allocated - 1;
1884       reg_data->next = reg_info_head;
1885       reg_info_head = reg_data;
1886     }
1887
1888   reg_n_max = num_regs;
1889   if (min < num_regs)
1890     {
1891       /* Loop through each of the segments allocated for the actual
1892          reg_info pages, and set up the pointers, zero the pages, etc.  */
1893       for (reg_data = reg_info_head; reg_data; reg_data = reg_next)
1894         {
1895           size_t min_index = reg_data->min_index;
1896           size_t max_index = reg_data->max_index;
1897
1898           reg_next = reg_data->next;
1899           if (min <= max_index)
1900             {
1901               size_t max = max_index;
1902               size_t local_min = min - min_index;
1903               size_t i;
1904
1905               if (min < min_index)
1906                 local_min = 0;
1907               if (!reg_data->used_p)    /* page just allocated with calloc */
1908                 reg_data->used_p = 1;   /* no need to zero */
1909               else
1910                 bzero ((char *) &reg_data->data[local_min],
1911                        sizeof (reg_info) * (max - min_index - local_min + 1));
1912
1913               for (i = min_index+local_min; i <= max; i++)
1914                 {
1915                   VARRAY_REG (reg_n_info, i) = &reg_data->data[i-min_index];
1916                   REG_BASIC_BLOCK (i) = REG_BLOCK_UNKNOWN;
1917                   renumber[i] = -1;
1918                   prefclass_buffer[i] = (char) NO_REGS;
1919                   altclass_buffer[i] = (char) NO_REGS;
1920                 }
1921             }
1922         }
1923     }
1924
1925   /* If {pref,alt}class have already been allocated, update the pointers to
1926      the newly realloced ones.  */
1927   if (prefclass)
1928     {
1929       prefclass = prefclass_buffer;
1930       altclass = altclass_buffer;
1931     }
1932
1933   if (renumber_p)
1934     reg_renumber = renumber;
1935
1936   /* Tell the regset code about the new number of registers */
1937   MAX_REGNO_REG_SET (num_regs, new_p, renumber_p);
1938 }
1939
1940 /* Free up the space allocated by allocate_reg_info.  */
1941 void
1942 free_reg_info ()
1943 {
1944   if (reg_n_info)
1945     {
1946       struct reg_info_data *reg_data;
1947       struct reg_info_data *reg_next;
1948
1949       VARRAY_FREE (reg_n_info);
1950       for (reg_data = reg_info_head; reg_data; reg_data = reg_next)
1951         {
1952           reg_next = reg_data->next;
1953           free ((char *)reg_data);
1954         }
1955
1956       free (prefclass_buffer);
1957       free (altclass_buffer);
1958       prefclass_buffer = (char *)0;
1959       altclass_buffer = (char *)0;
1960       reg_info_head = (struct reg_info_data *)0;
1961       renumber = (short *)0;
1962     }
1963   regno_allocated = 0;
1964   reg_n_max = 0;
1965 }
1966 \f
1967 /* This is the `regscan' pass of the compiler, run just before cse
1968    and again just before loop.
1969
1970    It finds the first and last use of each pseudo-register
1971    and records them in the vectors regno_first_uid, regno_last_uid
1972    and counts the number of sets in the vector reg_n_sets.
1973
1974    REPEAT is nonzero the second time this is called.  */
1975
1976 /* Maximum number of parallel sets and clobbers in any insn in this fn.
1977    Always at least 3, since the combiner could put that many together
1978    and we want this to remain correct for all the remaining passes.  */
1979
1980 int max_parallel;
1981
1982 void
1983 reg_scan (f, nregs, repeat)
1984      rtx f;
1985      int nregs;
1986      int repeat;
1987 {
1988   register rtx insn;
1989
1990   allocate_reg_info (nregs, TRUE, FALSE);
1991   max_parallel = 3;
1992
1993   for (insn = f; insn; insn = NEXT_INSN (insn))
1994     if (GET_CODE (insn) == INSN
1995         || GET_CODE (insn) == CALL_INSN
1996         || GET_CODE (insn) == JUMP_INSN)
1997       {
1998         if (GET_CODE (PATTERN (insn)) == PARALLEL
1999             && XVECLEN (PATTERN (insn), 0) > max_parallel)
2000           max_parallel = XVECLEN (PATTERN (insn), 0);
2001         reg_scan_mark_refs (PATTERN (insn), insn, 0, 0);
2002
2003         if (REG_NOTES (insn))
2004           reg_scan_mark_refs (REG_NOTES (insn), insn, 1, 0);
2005       }
2006 }
2007
2008 /* Update 'regscan' information by looking at the insns
2009    from FIRST to LAST.  Some new REGs have been created,
2010    and any REG with number greater than OLD_MAX_REGNO is
2011    such a REG.  We only update information for those.  */
2012
2013 void
2014 reg_scan_update(first, last, old_max_regno)
2015      rtx first;
2016      rtx last;
2017      int old_max_regno;
2018 {
2019   register rtx insn;
2020
2021   allocate_reg_info (max_reg_num (), FALSE, FALSE);
2022
2023   for (insn = first; insn != last; insn = NEXT_INSN (insn))
2024     if (GET_CODE (insn) == INSN
2025         || GET_CODE (insn) == CALL_INSN
2026         || GET_CODE (insn) == JUMP_INSN)
2027       {
2028         if (GET_CODE (PATTERN (insn)) == PARALLEL
2029             && XVECLEN (PATTERN (insn), 0) > max_parallel)
2030           max_parallel = XVECLEN (PATTERN (insn), 0);
2031         reg_scan_mark_refs (PATTERN (insn), insn, 0, old_max_regno);
2032
2033         if (REG_NOTES (insn))
2034           reg_scan_mark_refs (REG_NOTES (insn), insn, 1, old_max_regno);
2035       }
2036 }
2037
2038 /* X is the expression to scan.  INSN is the insn it appears in.
2039    NOTE_FLAG is nonzero if X is from INSN's notes rather than its body.
2040    We should only record information for REGs with numbers
2041    greater than or equal to MIN_REGNO.  */
2042
2043 static void
2044 reg_scan_mark_refs (x, insn, note_flag, min_regno)
2045      rtx x;
2046      rtx insn;
2047      int note_flag;
2048      int min_regno;
2049 {
2050   register enum rtx_code code;
2051   register rtx dest;
2052   register rtx note;
2053
2054   code = GET_CODE (x);
2055   switch (code)
2056     {
2057     case CONST:
2058     case CONST_INT:
2059     case CONST_DOUBLE:
2060     case CC0:
2061     case PC:
2062     case SYMBOL_REF:
2063     case LABEL_REF:
2064     case ADDR_VEC:
2065     case ADDR_DIFF_VEC:
2066       return;
2067
2068     case REG:
2069       {
2070         register int regno = REGNO (x);
2071
2072         if (regno >= min_regno)
2073           {
2074             REGNO_LAST_NOTE_UID (regno) = INSN_UID (insn);
2075             if (!note_flag)
2076               REGNO_LAST_UID (regno) = INSN_UID (insn);
2077             if (REGNO_FIRST_UID (regno) == 0)
2078               REGNO_FIRST_UID (regno) = INSN_UID (insn);
2079           }
2080       }
2081       break;
2082
2083     case EXPR_LIST:
2084       if (XEXP (x, 0))
2085         reg_scan_mark_refs (XEXP (x, 0), insn, note_flag, min_regno);
2086       if (XEXP (x, 1))
2087         reg_scan_mark_refs (XEXP (x, 1), insn, note_flag, min_regno);
2088       break;
2089
2090     case INSN_LIST:
2091       if (XEXP (x, 1))
2092         reg_scan_mark_refs (XEXP (x, 1), insn, note_flag, min_regno);
2093       break;
2094
2095     case SET:
2096       /* Count a set of the destination if it is a register.  */
2097       for (dest = SET_DEST (x);
2098            GET_CODE (dest) == SUBREG || GET_CODE (dest) == STRICT_LOW_PART
2099            || GET_CODE (dest) == ZERO_EXTEND;
2100            dest = XEXP (dest, 0))
2101         ;
2102
2103       if (GET_CODE (dest) == REG
2104           && REGNO (dest) >= min_regno)
2105         REG_N_SETS (REGNO (dest))++;
2106
2107       /* If this is setting a pseudo from another pseudo or the sum of a
2108          pseudo and a constant integer and the other pseudo is known to be
2109          a pointer, set the destination to be a pointer as well.
2110
2111          Likewise if it is setting the destination from an address or from a
2112          value equivalent to an address or to the sum of an address and
2113          something else.
2114                      
2115          But don't do any of this if the pseudo corresponds to a user
2116          variable since it should have already been set as a pointer based
2117          on the type.  */
2118
2119       if (GET_CODE (SET_DEST (x)) == REG
2120           && REGNO (SET_DEST (x)) >= FIRST_PSEUDO_REGISTER
2121           && REGNO (SET_DEST (x)) >= min_regno
2122           /* If the destination pseudo is set more than once, then other
2123              sets might not be to a pointer value (consider access to a
2124              union in two threads of control in the presense of global
2125              optimizations).  So only set REGNO_POINTER_FLAG on the destination
2126              pseudo if this is the only set of that pseudo.  */
2127           && REG_N_SETS (REGNO (SET_DEST (x))) == 1
2128           && ! REG_USERVAR_P (SET_DEST (x))
2129           && ! REGNO_POINTER_FLAG (REGNO (SET_DEST (x)))
2130           && ((GET_CODE (SET_SRC (x)) == REG
2131                && REGNO_POINTER_FLAG (REGNO (SET_SRC (x))))
2132               || ((GET_CODE (SET_SRC (x)) == PLUS
2133                    || GET_CODE (SET_SRC (x)) == LO_SUM)
2134                   && GET_CODE (XEXP (SET_SRC (x), 1)) == CONST_INT
2135                   && GET_CODE (XEXP (SET_SRC (x), 0)) == REG
2136                   && REGNO_POINTER_FLAG (REGNO (XEXP (SET_SRC (x), 0))))
2137               || GET_CODE (SET_SRC (x)) == CONST
2138               || GET_CODE (SET_SRC (x)) == SYMBOL_REF
2139               || GET_CODE (SET_SRC (x)) == LABEL_REF
2140               || (GET_CODE (SET_SRC (x)) == HIGH
2141                   && (GET_CODE (XEXP (SET_SRC (x), 0)) == CONST
2142                       || GET_CODE (XEXP (SET_SRC (x), 0)) == SYMBOL_REF
2143                       || GET_CODE (XEXP (SET_SRC (x), 0)) == LABEL_REF))
2144               || ((GET_CODE (SET_SRC (x)) == PLUS
2145                    || GET_CODE (SET_SRC (x)) == LO_SUM)
2146                   && (GET_CODE (XEXP (SET_SRC (x), 1)) == CONST
2147                       || GET_CODE (XEXP (SET_SRC (x), 1)) == SYMBOL_REF
2148                       || GET_CODE (XEXP (SET_SRC (x), 1)) == LABEL_REF))
2149               || ((note = find_reg_note (insn, REG_EQUAL, 0)) != 0
2150                   && (GET_CODE (XEXP (note, 0)) == CONST
2151                       || GET_CODE (XEXP (note, 0)) == SYMBOL_REF
2152                       || GET_CODE (XEXP (note, 0)) == LABEL_REF))))
2153         REGNO_POINTER_FLAG (REGNO (SET_DEST (x))) = 1;
2154
2155       /* ... fall through ...  */
2156
2157     default:
2158       {
2159         register const char *fmt = GET_RTX_FORMAT (code);
2160         register int i;
2161         for (i = GET_RTX_LENGTH (code) - 1; i >= 0; i--)
2162           {
2163             if (fmt[i] == 'e')
2164               reg_scan_mark_refs (XEXP (x, i), insn, note_flag, min_regno);
2165             else if (fmt[i] == 'E' && XVEC (x, i) != 0)
2166               {
2167                 register int j;
2168                 for (j = XVECLEN (x, i) - 1; j >= 0; j--)
2169                   reg_scan_mark_refs (XVECEXP (x, i, j), insn, note_flag, min_regno);
2170               }
2171           }
2172       }
2173     }
2174 }
2175 \f
2176 /* Return nonzero if C1 is a subset of C2, i.e., if every register in C1
2177    is also in C2.  */
2178
2179 int
2180 reg_class_subset_p (c1, c2)
2181      register enum reg_class c1;
2182      register enum reg_class c2;
2183 {
2184   if (c1 == c2) return 1;
2185
2186   if (c2 == ALL_REGS)
2187   win:
2188     return 1;
2189   GO_IF_HARD_REG_SUBSET (reg_class_contents[(int)c1],
2190                          reg_class_contents[(int)c2],
2191                          win);
2192   return 0;
2193 }
2194
2195 /* Return nonzero if there is a register that is in both C1 and C2.  */
2196
2197 int
2198 reg_classes_intersect_p (c1, c2)
2199      register enum reg_class c1;
2200      register enum reg_class c2;
2201 {
2202 #ifdef HARD_REG_SET
2203   register
2204 #endif
2205     HARD_REG_SET c;
2206
2207   if (c1 == c2) return 1;
2208
2209   if (c1 == ALL_REGS || c2 == ALL_REGS)
2210     return 1;
2211
2212   COPY_HARD_REG_SET (c, reg_class_contents[(int) c1]);
2213   AND_HARD_REG_SET (c, reg_class_contents[(int) c2]);
2214
2215   GO_IF_HARD_REG_SUBSET (c, reg_class_contents[(int) NO_REGS], lose);
2216   return 1;
2217
2218  lose:
2219   return 0;
2220 }
2221
2222 /* Release any memory allocated by register sets.  */
2223
2224 void
2225 regset_release_memory ()
2226 {
2227   bitmap_release_memory ();
2228 }