OSDN Git Service

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