OSDN Git Service

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