OSDN Git Service

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