OSDN Git Service

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