OSDN Git Service

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