OSDN Git Service

*** empty log message ***
[pf3gnuchains/gcc-fork.git] / gcc / regclass.c
1 /* Compute register class preferences for pseudo-registers.
2    Copyright (C) 1987, 1988, 1991, 1992 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, 675 Mass Ave, Cambridge, MA 02139, USA.  */
19
20
21 /* This file contains two passes of the compiler: reg_scan and reg_class.
22    It also defines some tables of information about the hardware registers
23    and a function init_reg_sets to initialize the tables.  */
24
25 #include "config.h"
26 #include "rtl.h"
27 #include "hard-reg-set.h"
28 #include "flags.h"
29 #include "basic-block.h"
30 #include "regs.h"
31 #include "insn-config.h"
32 #include "recog.h"
33 #include "reload.h"
34 #include "real.h"
35
36 #ifndef REGISTER_MOVE_COST
37 #define REGISTER_MOVE_COST(x, y) 2
38 #endif
39
40 #ifndef MEMORY_MOVE_COST
41 #define MEMORY_MOVE_COST(x) 4
42 #endif
43 \f
44 /* Register tables used by many passes.  */
45
46 /* Indexed by hard register number, contains 1 for registers
47    that are fixed use (stack pointer, pc, frame pointer, etc.).
48    These are the registers that cannot be used to allocate
49    a pseudo reg whose life does not cross calls.  */
50
51 char fixed_regs[FIRST_PSEUDO_REGISTER];
52
53 /* Same info as a HARD_REG_SET.  */
54
55 HARD_REG_SET fixed_reg_set;
56
57 /* Data for initializing the above.  */
58
59 static char initial_fixed_regs[] = FIXED_REGISTERS;
60
61 /* Indexed by hard register number, contains 1 for registers
62    that are fixed use or are clobbered by function calls.
63    These are the registers that cannot be used to allocate
64    a pseudo reg whose life crosses calls.  */
65
66 char call_used_regs[FIRST_PSEUDO_REGISTER];
67
68 /* Same info as a HARD_REG_SET.  */
69
70 HARD_REG_SET call_used_reg_set;
71
72 /* Data for initializing the above.  */
73
74 static char initial_call_used_regs[] = CALL_USED_REGISTERS;
75   
76 /* Indexed by hard register number, contains 1 for registers that are
77    fixed use -- i.e. in fixed_regs -- or a function value return register
78    or STRUCT_VALUE_REGNUM or STATIC_CHAIN_REGNUM.  These are the
79    registers that cannot hold quantities across calls even if we are
80    willing to save and restore them.  */
81
82 char call_fixed_regs[FIRST_PSEUDO_REGISTER];
83
84 /* The same info as a HARD_REG_SET.  */
85
86 HARD_REG_SET call_fixed_reg_set;
87
88 /* Number of non-fixed registers.  */
89
90 int n_non_fixed_regs;
91
92 /* Indexed by hard register number, contains 1 for registers
93    that are being used for global register decls.
94    These must be exempt from ordinary flow analysis
95    and are also considered fixed.  */
96
97 char global_regs[FIRST_PSEUDO_REGISTER];
98   
99 /* Table of register numbers in the order in which to try to use them.  */
100 #ifdef REG_ALLOC_ORDER
101 int reg_alloc_order[FIRST_PSEUDO_REGISTER] = REG_ALLOC_ORDER;
102 #endif
103
104 /* For each reg class, a HARD_REG_SET saying which registers are in it.  */
105
106 HARD_REG_SET reg_class_contents[] = REG_CLASS_CONTENTS;
107
108 /* For each reg class, number of regs it contains.  */
109
110 int reg_class_size[N_REG_CLASSES];
111
112 /* For each reg class, table listing all the containing classes.  */
113
114 enum reg_class reg_class_superclasses[N_REG_CLASSES][N_REG_CLASSES];
115
116 /* For each reg class, table listing all the classes contained in it.  */
117
118 enum reg_class reg_class_subclasses[N_REG_CLASSES][N_REG_CLASSES];
119
120 /* For each pair of reg classes,
121    a largest reg class contained in their union.  */
122
123 enum reg_class reg_class_subunion[N_REG_CLASSES][N_REG_CLASSES];
124
125 /* For each pair of reg classes,
126    the smallest reg class containing their union.  */
127
128 enum reg_class reg_class_superunion[N_REG_CLASSES][N_REG_CLASSES];
129
130 /* Array containing all of the register names */
131
132 char *reg_names[] = REGISTER_NAMES;
133
134 /* Indexed by n, gives number of times (REG n) is set or clobbered.
135    This information remains valid for the rest of the compilation
136    of the current function; it is used to control register allocation.
137
138    This information applies to both hard registers and pseudo registers,
139    unlike much of the information above.  */
140
141 short *reg_n_sets;
142
143 /* Maximum cost of moving from a register in one class to a register in
144    another class.  Based on REGISTER_MOVE_COST.  */
145
146 static int move_cost[N_REG_CLASSES][N_REG_CLASSES];
147
148 /* Similar, but here we don't have to move if the first index is a subset
149    of the second so in that case the cost is zero.  */
150
151 static int may_move_cost[N_REG_CLASSES][N_REG_CLASSES];
152
153 /* Function called only once to initialize the above data on reg usage.
154    Once this is done, various switches may override.  */
155
156 void
157 init_reg_sets ()
158 {
159   register int i, j;
160
161   bcopy (initial_fixed_regs, fixed_regs, sizeof fixed_regs);
162   bcopy (initial_call_used_regs, call_used_regs, sizeof call_used_regs);
163   bzero (global_regs, sizeof global_regs);
164
165   /* Compute number of hard regs in each class.  */
166
167   bzero (reg_class_size, sizeof reg_class_size);
168   for (i = 0; i < N_REG_CLASSES; i++)
169     for (j = 0; j < FIRST_PSEUDO_REGISTER; j++)
170       if (TEST_HARD_REG_BIT (reg_class_contents[i], j))
171         reg_class_size[i]++;
172
173   /* Initialize the table of subunions.
174      reg_class_subunion[I][J] gets the largest-numbered reg-class
175      that is contained in the union of classes I and J.  */
176
177   for (i = 0; i < N_REG_CLASSES; i++)
178     {
179       for (j = 0; j < N_REG_CLASSES; j++)
180         {
181 #ifdef HARD_REG_SET
182           register              /* Declare it register if it's a scalar.  */
183 #endif
184             HARD_REG_SET c;
185           register int k;
186
187           COPY_HARD_REG_SET (c, reg_class_contents[i]);
188           IOR_HARD_REG_SET (c, reg_class_contents[j]);
189           for (k = 0; k < N_REG_CLASSES; k++)
190             {
191               GO_IF_HARD_REG_SUBSET (reg_class_contents[k], c,
192                                      subclass1);
193               continue;
194
195             subclass1:
196               /* keep the largest subclass */           /* SPEE 900308 */
197               GO_IF_HARD_REG_SUBSET (reg_class_contents[k],
198                                      reg_class_contents[(int) reg_class_subunion[i][j]],
199                                      subclass2);
200               reg_class_subunion[i][j] = (enum reg_class) k;
201             subclass2:
202               ;
203             }
204         }
205     }
206
207   /* Initialize the table of superunions.
208      reg_class_superunion[I][J] gets the smallest-numbered reg-class
209      containing the union of classes I and J.  */
210
211   for (i = 0; i < N_REG_CLASSES; i++)
212     {
213       for (j = 0; j < N_REG_CLASSES; j++)
214         {
215 #ifdef HARD_REG_SET
216           register              /* Declare it register if it's a scalar.  */
217 #endif
218             HARD_REG_SET c;
219           register int k;
220
221           COPY_HARD_REG_SET (c, reg_class_contents[i]);
222           IOR_HARD_REG_SET (c, reg_class_contents[j]);
223           for (k = 0; k < N_REG_CLASSES; k++)
224             GO_IF_HARD_REG_SUBSET (c, reg_class_contents[k], superclass);
225
226         superclass:
227           reg_class_superunion[i][j] = (enum reg_class) k;
228         }
229     }
230
231   /* Initialize the tables of subclasses and superclasses of each reg class.
232      First clear the whole table, then add the elements as they are found.  */
233
234   for (i = 0; i < N_REG_CLASSES; i++)
235     {
236       for (j = 0; j < N_REG_CLASSES; j++)
237         {
238           reg_class_superclasses[i][j] = LIM_REG_CLASSES;
239           reg_class_subclasses[i][j] = LIM_REG_CLASSES;
240         }
241     }
242
243   for (i = 0; i < N_REG_CLASSES; i++)
244     {
245       if (i == (int) NO_REGS)
246         continue;
247
248       for (j = i + 1; j < N_REG_CLASSES; j++)
249         {
250           enum reg_class *p;
251
252           GO_IF_HARD_REG_SUBSET (reg_class_contents[i], reg_class_contents[j],
253                                  subclass);
254           continue;
255         subclass:
256           /* Reg class I is a subclass of J.
257              Add J to the table of superclasses of I.  */
258           p = &reg_class_superclasses[i][0];
259           while (*p != LIM_REG_CLASSES) p++;
260           *p = (enum reg_class) j;
261           /* Add I to the table of superclasses of J.  */
262           p = &reg_class_subclasses[j][0];
263           while (*p != LIM_REG_CLASSES) p++;
264           *p = (enum reg_class) i;
265         }
266     }
267
268   /* Initialize the move cost table.  Find every subset of each class
269      and take the maximum cost of moving any subset to any other.  */
270
271   for (i = 0; i < N_REG_CLASSES; i++)
272     for (j = 0; j < N_REG_CLASSES; j++)
273       {
274         int cost = i == j ? 2 : REGISTER_MOVE_COST (i, j);
275         enum reg_class *p1, *p2;
276
277         for (p2 = &reg_class_subclasses[j][0]; *p2 != LIM_REG_CLASSES; p2++)
278           if (*p2 != i)
279             cost = MAX (cost, REGISTER_MOVE_COST (i, *p2));
280
281         for (p1 = &reg_class_subclasses[i][0]; *p1 != LIM_REG_CLASSES; p1++)
282           {
283             if (*p1 != j)
284               cost = MAX (cost, REGISTER_MOVE_COST (*p1, j));
285
286             for (p2 = &reg_class_subclasses[j][0];
287                  *p2 != LIM_REG_CLASSES; p2++)
288               if (*p1 != *p2)
289                 cost = MAX (cost, REGISTER_MOVE_COST (*p1, *p2));
290           }
291
292         move_cost[i][j] = cost;
293
294         if (reg_class_subset_p (i, j))
295           cost = 0;
296
297         may_move_cost[i][j] = cost;
298       }
299 }
300
301 /* After switches have been processed, which perhaps alter
302    `fixed_regs' and `call_used_regs', convert them to HARD_REG_SETs.  */
303
304 void
305 init_reg_sets_1 ()
306 {
307   register int i;
308
309   /* This macro allows the fixed or call-used registers
310      to depend on target flags.  */
311
312 #ifdef CONDITIONAL_REGISTER_USAGE
313   CONDITIONAL_REGISTER_USAGE;
314 #endif
315
316   for (i = 0; i < FIRST_PSEUDO_REGISTER; i++)
317     if (global_regs[i])
318       {
319         if (call_used_regs[i] && ! fixed_regs[i])
320           warning ("call-clobbered register used for global register variable");
321         fixed_regs[i] = 1;
322         /* Prevent saving/restoring of this reg.  */
323         call_used_regs[i] = 1;
324       }
325
326   /* Initialize "constant" tables.  */
327
328   CLEAR_HARD_REG_SET (fixed_reg_set);
329   CLEAR_HARD_REG_SET (call_used_reg_set);
330   CLEAR_HARD_REG_SET (call_fixed_reg_set);
331
332   bcopy (fixed_regs, call_fixed_regs, sizeof call_fixed_regs);
333 #ifdef STRUCT_VALUE_REGNUM
334   call_fixed_regs[STRUCT_VALUE_REGNUM] = 1;
335 #endif
336 #ifdef STATIC_CHAIN_REGNUM
337   call_fixed_regs[STATIC_CHAIN_REGNUM] = 1;
338 #endif
339
340   n_non_fixed_regs = 0;
341
342   for (i = 0; i < FIRST_PSEUDO_REGISTER; i++)
343     {
344       if (FUNCTION_VALUE_REGNO_P (i))
345         call_fixed_regs[i] = 1;
346       if (fixed_regs[i])
347         SET_HARD_REG_BIT (fixed_reg_set, i);
348       else
349         n_non_fixed_regs++;
350
351       if (call_used_regs[i])
352         SET_HARD_REG_BIT (call_used_reg_set, i);
353       if (call_fixed_regs[i])
354         SET_HARD_REG_BIT (call_fixed_reg_set, i);
355     }
356 }
357
358 /* Specify the usage characteristics of the register named NAME.
359    It should be a fixed register if FIXED and a
360    call-used register if CALL_USED.  */
361
362 void
363 fix_register (name, fixed, call_used)
364      char *name;
365      int fixed, call_used;
366 {
367   int i;
368
369   /* Decode the name and update the primary form of
370      the register info.  */
371
372   if ((i = decode_reg_name (name)) >= 0)
373     {
374       fixed_regs[i] = fixed;
375       call_used_regs[i] = call_used;
376     }
377   else
378     {
379       warning ("unknown register name: %s", name);
380     }
381 }
382 \f
383 /* Now the data and code for the `regclass' pass, which happens
384    just before local-alloc.  */
385
386 /* The `costs' struct records the cost of using a hard register of each class
387    and of using memory for each pseudo.  We use this data to set up
388    register class preferences.  */
389
390 struct costs
391 {
392   int cost[N_REG_CLASSES];
393   int mem_cost;
394 };
395
396 /* Record the cost of each class for each pseudo.  */
397
398 static struct costs *costs;
399
400 /* Record the same data by operand number, accumulated for each alternative
401    in an insn.  The contribution to a pseudo is that of the minimum-cost
402    alternative.  */
403
404 static struct costs op_costs[MAX_RECOG_OPERANDS];
405
406 /* (enum reg_class) prefclass[R] is the preferred class for pseudo number R.
407    This is available after `regclass' is run.  */
408
409 static char *prefclass;
410
411 /* altclass[R] is a register class that we should use for allocating
412    pseudo number R if no register in the preferred class is available.
413    If no register in this class is available, memory is preferred.
414
415    It might appear to be more general to have a bitmask of classes here,
416    but since it is recommended that there be a class corresponding to the
417    union of most major pair of classes, that generality is not required. 
418
419    This is available after `regclass' is run.  */
420
421 static char *altclass;
422
423 /* Record the depth of loops that we are in.  */
424
425 static int loop_depth;
426
427 /* Account for the fact that insns within a loop are executed very commonly,
428    but don't keep doing this as loops go too deep.  */
429
430 static int loop_cost;
431
432 static int copy_cost ();
433 static void record_reg_classes ();
434 static void record_address_regs ();
435
436
437 /* Return the reg_class in which pseudo reg number REGNO is best allocated.
438    This function is sometimes called before the info has been computed.
439    When that happens, just return GENERAL_REGS, which is innocuous.  */
440
441 enum reg_class
442 reg_preferred_class (regno)
443      int regno;
444 {
445   if (prefclass == 0)
446     return GENERAL_REGS;
447   return (enum reg_class) prefclass[regno];
448 }
449
450 enum reg_class
451 reg_alternate_class (regno)
452 {
453   if (prefclass == 0)
454     return ALL_REGS;
455
456   return (enum reg_class) altclass[regno];
457 }
458
459 /* This prevents dump_flow_info from losing if called
460    before regclass is run.  */
461
462 void
463 regclass_init ()
464 {
465   prefclass = 0;
466 }
467 \f
468 /* This is a pass of the compiler that scans all instructions
469    and calculates the preferred class for each pseudo-register.
470    This information can be accessed later by calling `reg_preferred_class'.
471    This pass comes just before local register allocation.  */
472
473 void
474 regclass (f, nregs)
475      rtx f;
476      int nregs;
477 {
478 #ifdef REGISTER_CONSTRAINTS
479   register rtx insn;
480   register int i, j;
481   struct costs init_cost;
482   rtx set;
483   int pass;
484
485   init_recog ();
486
487   init_cost.mem_cost = 10000;
488   for (i = 0; i < N_REG_CLASSES; i++)
489     init_cost.cost[i] = 10000;
490
491   /* Normally we scan the insns once and determine the best class to use for
492      each register.  However, if -fexpensive_optimizations are on, we do so
493      twice, the second time using the tentative best classes to guide the
494      selection.  */
495
496   for (pass = 0; pass <= flag_expensive_optimizations; pass++)
497     {
498       /* Zero out our accumulation of the cost of each class for each reg.  */
499
500       costs = (struct costs *) alloca (nregs * sizeof (struct costs));
501       bzero (costs, nregs * sizeof (struct costs));
502
503       loop_depth = 0, loop_cost = 1;
504
505       /* Scan the instructions and record each time it would
506          save code to put a certain register in a certain class.  */
507
508       for (insn = f; insn; insn = NEXT_INSN (insn))
509         {
510           char *constraints[MAX_RECOG_OPERANDS];
511           enum machine_mode modes[MAX_RECOG_OPERANDS];
512           int nalternatives;
513           int noperands;
514
515           /* Show that an insn inside a loop is likely to be executed three
516              times more than insns outside a loop.  This is much more agressive
517              than the assumptions made elsewhere and is being tried as an
518              experiment.  */
519
520           if (GET_CODE (insn) == NOTE
521               && NOTE_LINE_NUMBER (insn) == NOTE_INSN_LOOP_BEG)
522             loop_depth++, loop_cost = 1 << (2 * MIN (loop_depth, 5));
523           else if (GET_CODE (insn) == NOTE
524                    && NOTE_LINE_NUMBER (insn) == NOTE_INSN_LOOP_END)
525             loop_depth--, loop_cost = 1 << (2 * MIN (loop_depth, 5));
526
527           else if ((GET_CODE (insn) == INSN
528                     && GET_CODE (PATTERN (insn)) != USE
529                     && GET_CODE (PATTERN (insn)) != CLOBBER
530                     && GET_CODE (PATTERN (insn)) != ASM_INPUT)
531                    || (GET_CODE (insn) == JUMP_INSN
532                        && GET_CODE (PATTERN (insn)) != ADDR_VEC
533                        && GET_CODE (PATTERN (insn)) != ADDR_DIFF_VEC)
534                    || GET_CODE (insn) == CALL_INSN)
535             {
536               if (GET_CODE (insn) == INSN
537                   && (noperands = asm_noperands (PATTERN (insn))) >= 0)
538                 {
539                   decode_asm_operands (PATTERN (insn), recog_operand, 0,
540                                        constraints, modes);
541                   nalternatives = n_occurrences (',', constraints[0]) + 1;
542                 }
543               else
544                 {
545                   int insn_code_number = recog_memoized (insn);
546                   rtx note;
547
548                   set = single_set (insn);
549                   insn_extract (insn);
550
551                   nalternatives = insn_n_alternatives[insn_code_number];
552                   noperands = insn_n_operands[insn_code_number];
553
554                   /* If this insn loads a parameter from its stack slot, then
555                      it represents a savings, rather than a cost, if the
556                      parameter is stored in memory.  Record this fact.  */
557
558                   if (set != 0 && GET_CODE (SET_DEST (set)) == REG
559                       && GET_CODE (SET_SRC (set)) == MEM
560                       && (note = find_reg_note (insn, REG_EQUIV, 0)) != 0
561                       && GET_CODE (XEXP (note, 0)) == MEM)
562                     {
563                       costs[REGNO (SET_DEST (set))].mem_cost
564                         -= (MEMORY_MOVE_COST (GET_MODE (SET_DEST (set)))
565                             * loop_cost);
566                       record_address_regs (XEXP (SET_SRC (set), 0),
567                                            BASE_REG_CLASS, loop_cost * 2);
568                       continue;
569                     }
570               
571                   /* Improve handling of two-address insns such as
572                      (set X (ashift CONST Y)) where CONST must be made to
573                      match X. Change it into two insns: (set X CONST)
574                      (set X (ashift X Y)).  If we left this for reloading, it
575                      would probably get three insns because X and Y might go
576                      in the same place. This prevents X and Y from receiving
577                      the same hard reg.
578
579                      We can only do this if the modes of operands 0 and 1
580                      (which might not be the same) are tieable and we only need
581                      do this during our first pass.  */
582
583                   if (pass == 0 && optimize
584                       && noperands >= 3
585                       && insn_operand_constraint[insn_code_number][1][0] == '0'
586                       && insn_operand_constraint[insn_code_number][1][1] == 0
587                       && CONSTANT_P (recog_operand[1])
588                       && ! rtx_equal_p (recog_operand[0], recog_operand[1])
589                       && ! rtx_equal_p (recog_operand[0], recog_operand[2])
590                       && GET_CODE (recog_operand[0]) == REG
591                       && MODES_TIEABLE_P (GET_MODE (recog_operand[0]),
592                                           insn_operand_mode[insn_code_number][1]))
593                     {
594                       rtx previnsn = prev_real_insn (insn);
595                       rtx dest
596                         = gen_lowpart (insn_operand_mode[insn_code_number][1],
597                                        recog_operand[0]);
598                       rtx newinsn
599                         = emit_insn_before (gen_move_insn (dest,
600                                                            recog_operand[1]),
601                                             insn);
602
603                       /* If this insn was the start of a basic block,
604                          include the new insn in that block.  */
605                       if (previnsn == 0 || GET_CODE (previnsn) == JUMP_INSN)
606                         {
607                           int b;
608                           for (b = 0; b < n_basic_blocks; b++)
609                             if (insn == basic_block_head[b])
610                               basic_block_head[b] = newinsn;
611                         }
612
613                       /* This makes one more setting of new insns's dest. */
614                       reg_n_sets[REGNO (recog_operand[0])]++;
615
616                       insn = PREV_INSN (newinsn);
617                       continue;
618                     }
619
620                   /* If this is setting a pseudo from another pseudo or the
621                      sum of a pseudo and a constant integer and the other
622                      pseudo is known to be a pointer, set the destination to
623                      be a pointer as well.
624
625                      Likewise if it is setting the destination from an address
626                      or from a value equivalent to an address or to the sum of
627                      an address and something else.
628                      
629                      But don't do any of this if the pseudo corresponds to
630                      a user variable since it should have already been set
631                      as a pointer based on the type.
632
633                      There is no point in doing this during our second
634                      pass since not enough should have changed.  */
635
636                   if (pass == 0 && set != 0 && GET_CODE (SET_DEST (set)) == REG
637                       && REGNO (SET_DEST (set)) >= FIRST_PSEUDO_REGISTER
638                       && ! REG_USERVAR_P (SET_DEST (set))
639                       && ! REGNO_POINTER_FLAG (REGNO (SET_DEST (set)))
640                       && ((GET_CODE (SET_SRC (set)) == REG
641                            && REGNO_POINTER_FLAG (REGNO (SET_SRC (set))))
642                           || ((GET_CODE (SET_SRC (set)) == PLUS
643                                || GET_CODE (SET_SRC (set)) == LO_SUM)
644                               && (GET_CODE (XEXP (SET_SRC (set), 1))
645                                   == CONST_INT)
646                               && GET_CODE (XEXP (SET_SRC (set), 0)) == REG
647                               && REGNO_POINTER_FLAG (REGNO (XEXP (SET_SRC (set), 0))))
648                           || GET_CODE (SET_SRC (set)) == CONST
649                           || GET_CODE (SET_SRC (set)) == SYMBOL_REF
650                           || GET_CODE (SET_SRC (set)) == LABEL_REF
651                           || (GET_CODE (SET_SRC (set)) == HIGH
652                               && (GET_CODE (XEXP (SET_SRC (set), 0)) == CONST
653                                   || (GET_CODE (XEXP (SET_SRC (set), 0))
654                                       == SYMBOL_REF)
655                                   || (GET_CODE (XEXP (SET_SRC (set), 0))
656                                       == LABEL_REF)))
657                           || ((GET_CODE (SET_SRC (set)) == PLUS
658                                || GET_CODE (SET_SRC (set)) == LO_SUM)
659                               && (GET_CODE (XEXP (SET_SRC (set), 1)) == CONST
660                                   || (GET_CODE (XEXP (SET_SRC (set), 1))
661                                       == SYMBOL_REF)
662                                   || (GET_CODE (XEXP (SET_SRC (set), 1))
663                                       == LABEL_REF)))
664                           || ((note = find_reg_note (insn, REG_EQUAL, 0)) != 0
665                               && (GET_CODE (XEXP (note, 0)) == CONST
666                                   || GET_CODE (XEXP (note, 0)) == SYMBOL_REF
667                                   || GET_CODE (XEXP (note, 0)) == LABEL_REF))))
668                     REGNO_POINTER_FLAG (REGNO (SET_DEST (set))) = 1;
669
670                   for (i = 0; i < noperands; i++)
671                     {
672                       constraints[i]
673                         = insn_operand_constraint[insn_code_number][i];
674                       modes[i] = insn_operand_mode[insn_code_number][i];
675                     }
676                 }
677
678               /* If we get here, we are set up to record the costs of all the
679                  operands for this insn.  Start by initializing the costs.
680                  Then handle any address registers.  Finally record the desired
681                  classes for any pseudos, doing it twice if some pair of
682                  operands are commutative.  */
683              
684               for (i = 0; i < noperands; i++)
685                 {
686                   op_costs[i] = init_cost;
687
688                   if (GET_CODE (recog_operand[i]) == SUBREG)
689                     recog_operand[i] = SUBREG_REG (recog_operand[i]);
690
691                   if (GET_CODE (recog_operand[i]) == MEM)
692                     record_address_regs (XEXP (recog_operand[i], 0),
693                                          BASE_REG_CLASS, loop_cost * 2);
694                   else if (constraints[i][0] == 'p')
695                     record_address_regs (recog_operand[i],
696                                          BASE_REG_CLASS, loop_cost * 2);
697                 }
698
699               /* Check for commutative in a separate loop so everything will
700                  have been initialized.  Don't bother doing anything if the
701                  second operand is a constant since that is the case
702                  for which the constraints should have been written.  */
703               
704               for (i = 0; i < noperands; i++)
705                 if (constraints[i][0] == '%'
706                     && ! CONSTANT_P (recog_operand[i+1]))
707                   {
708                     char *xconstraints[MAX_RECOG_OPERANDS];
709                     int j;
710
711                     /* Handle commutative operands by swapping the constraints.
712                        We assume the modes are the same.  */
713
714                     for (j = 0; j < noperands; j++)
715                       xconstraints[j] = constraints[j];
716
717                     xconstraints[i] = constraints[i+1];
718                     xconstraints[i+1] = constraints[i];
719                     record_reg_classes (nalternatives, noperands,
720                                         recog_operand, modes, xconstraints,
721                                         insn);
722                   }
723
724               record_reg_classes (nalternatives, noperands, recog_operand,
725                                   modes, constraints, insn);
726
727               /* Now add the cost for each operand to the total costs for
728                  its register.  */
729
730               for (i = 0; i < noperands; i++)
731                 if (GET_CODE (recog_operand[i]) == REG
732                     && REGNO (recog_operand[i]) >= FIRST_PSEUDO_REGISTER)
733                   {
734                     int regno = REGNO (recog_operand[i]);
735                     struct costs *p = &costs[regno], *q = &op_costs[i];
736
737                     p->mem_cost += q->mem_cost * loop_cost;
738                     for (j = 0; j < N_REG_CLASSES; j++)
739                       p->cost[j] += q->cost[j] * loop_cost;
740                   }
741             }
742         }
743
744       /* Now for each register look at how desirable each class is
745          and find which class is preferred.  Store that in
746          `prefclass[REGNO]'.  Record in `altclass[REGNO]' the largest register
747          class any of whose registers is better than memory.  */
748     
749       if (pass == 0)
750         {
751           prefclass = (char *) oballoc (nregs);
752           altclass = (char *) oballoc (nregs);
753         }
754
755       for (i = FIRST_PSEUDO_REGISTER; i < nregs; i++)
756         {
757           register int best_cost = (1 << (HOST_BITS_PER_INT - 1)) - 1;
758           enum reg_class best = ALL_REGS, alt = NO_REGS;
759           /* This is an enum reg_class, but we call it an int
760              to save lots of casts.  */
761           register int class;
762           register struct costs *p = &costs[i];
763
764           for (class = (int) ALL_REGS - 1; class > 0; class--)
765             {
766               /* Ignore classes that are too small for this operand.  */
767               if (CLASS_MAX_NREGS (class, PSEUDO_REGNO_MODE (i))
768                   > reg_class_size[class])
769                 ;
770               else if (p->cost[class] < best_cost)
771                 {
772                   best_cost = p->cost[class];
773                   best = (enum reg_class) class;
774                 }
775               else if (p->cost[class] == best_cost)
776                 best = reg_class_subunion[(int)best][class];
777             }
778
779           /* Record the alternate register class; i.e., a class for which
780              every register in it is better than using memory.  If adding a
781              class would make a smaller class (i.e., no union of just those
782              classes exists), skip that class.  The major unions of classes
783              should be provided as a register class.  Don't do this if we
784              will be doing it again later.  */
785
786           if (pass == 1 || ! flag_expensive_optimizations)
787             for (class = 0; class < N_REG_CLASSES; class++)
788               if (p->cost[class] < p->mem_cost
789                   && (reg_class_size[reg_class_subunion[(int) alt][class]]
790                       > reg_class_size[(int) alt]))
791                 alt = reg_class_subunion[(int) alt][class];
792           
793           /* If we don't add any classes, nothing to try.  */
794           if (alt == best)
795             alt = (int) NO_REGS;
796
797           /* We cast to (int) because (char) hits bugs in some compilers.  */
798           prefclass[i] = (int) best;
799           altclass[i] = (int) alt;
800         }
801     }
802 #endif /* REGISTER_CONSTRAINTS */
803 }
804 \f
805 #ifdef REGISTER_CONSTRAINTS
806
807 /* Record the cost of using memory or registers of various classes for
808    the operands in INSN.
809
810    N_ALTS is the number of alternatives.
811
812    N_OPS is the number of operands.
813
814    OPS is an array of the operands.
815
816    MODES are the modes of the operands, in case any are VOIDmode.
817
818    CONSTRAINTS are the constraints to use for the operands.  This array
819    is modified by this procedure.
820
821    This procedure works alternative by alternative.  For each alternative
822    we assume that we will be able to allocate all pseudos to their ideal
823    register class and calculate the cost of using that alternative.  Then
824    we compute for each operand that is a pseudo-register, the cost of 
825    having the pseudo allocated to each register class and using it in that
826    alternative.  To this cost is added the cost of the alternative.
827
828    The cost of each class for this insn is its lowest cost among all the
829    alternatives.  */
830
831 static void
832 record_reg_classes (n_alts, n_ops, ops, modes, constraints, insn)
833      int n_alts;
834      int n_ops;
835      rtx *ops;
836      enum machine_mode *modes;
837      char **constraints;
838      rtx insn;
839 {
840   int alt;
841   enum op_type {OP_READ, OP_WRITE, OP_READ_WRITE} op_types[MAX_RECOG_OPERANDS];
842   int i, j;
843
844   /* By default, each operand is an input operand.  */
845
846   for (i = 0; i < n_ops; i++)
847     op_types[i] = OP_READ;
848
849   /* Process each alternative, each time minimizing an operand's cost with
850      the cost for each operand in that alternative.  */
851
852   for (alt = 0; alt < n_alts; alt++)
853     {
854       struct costs this_op_costs[MAX_RECOG_OPERANDS];
855       int alt_fail = 0;
856       int alt_cost = 0;
857       enum reg_class classes[MAX_RECOG_OPERANDS];
858       int class;
859
860       for (i = 0; i < n_ops; i++)
861         {
862           char *p = constraints[i];
863           rtx op = ops[i];
864           enum machine_mode mode = modes[i];
865           int allows_mem = 0;
866           int win = 0;
867           char c;
868
869           /* If this operand has no constraints at all, we can conclude 
870              nothing about it since anything is valid.  */
871
872           if (*p == 0)
873             {
874               if (GET_CODE (op) == REG && REGNO (op) >= FIRST_PSEUDO_REGISTER)
875                 bzero ((char *) &this_op_costs[i], sizeof this_op_costs[i]);
876
877               continue;
878             }
879
880           /* If this alternative is only relevant when this operand
881              matches a previous operand, we do different things depending
882              on whether this operand is a pseudo-reg or not.  */
883
884           if (p[0] >= '0' && p[0] <= '0' + i && (p[1] == ',' || p[1] == 0))
885             {
886               j = p[0] - '0';
887               classes[i] = classes[j];
888
889               if (GET_CODE (op) != REG || REGNO (op) < FIRST_PSEUDO_REGISTER)
890                 {
891                   /* If this matches the other operand, we have no added
892                      cost.  */
893                   if (rtx_equal_p (ops[j], op))
894                     ;
895
896                   /* If we can't put the other operand into a register, this
897                      alternative can't be used.  */
898
899                   else if (classes[j] == NO_REGS)
900                     alt_fail = 1;
901
902                   /* Otherwise, add to the cost of this alternative the cost
903                      to copy this operand to the register used for the other
904                      operand.  */
905
906                   else
907                     alt_cost += copy_cost (op, mode, classes[j], 1);
908                 }
909
910               else
911                 {
912                   /* The costs of this operand are the same as that of the
913                      other operand.  However, if we cannot tie them, this
914                      alternative needs to do a copy, which is one
915                      instruction.  */
916
917                   this_op_costs[i] = this_op_costs[j];
918                   if (! find_reg_note (insn, REG_DEAD, op))
919                     alt_cost += 2;
920                 }
921
922               continue;
923             }
924
925           /* Scan all the constraint letters.  See if the operand matches
926              any of the constraints.  Collect the valid register classes
927              and see if this operand accepts memory.  */
928
929           classes[i] = NO_REGS;
930           while (*p && (c = *p++) != ',')
931             switch (c)
932               {
933               case '=':
934                 op_types[i] = OP_WRITE;
935                 break;
936
937               case '+':
938                 op_types[i] = OP_READ_WRITE;
939                 break;
940
941               case '*':
942                 /* Ignore the next letter for this pass.  */
943                 p++;
944                 break;
945
946               case '%':
947               case '?':  case '!':  case '#':
948               case '&':
949               case '0':  case '1':  case '2':  case '3':  case '4':
950               case 'p':
951                 break;
952
953               case 'm':  case 'o':  case 'V':
954                 /* It doesn't seem worth distingishing between offsettable
955                    and non-offsettable addresses here.  */
956                 allows_mem = 1;
957                 if (GET_CODE (op) == MEM)
958                   win = 1;
959                 break;
960
961               case '<':
962                 if (GET_CODE (op) == MEM
963                     && (GET_CODE (XEXP (op, 0)) == PRE_DEC
964                         || GET_CODE (XEXP (op, 0)) == POST_DEC))
965                   win = 1;
966                 break;
967
968               case '>':
969                 if (GET_CODE (op) == MEM
970                     && (GET_CODE (XEXP (op, 0)) == PRE_INC
971                         || GET_CODE (XEXP (op, 0)) == POST_INC))
972                   win = 1;
973                 break;
974
975               case 'E':
976                 /* Match any floating double constant, but only if
977                    we can examine the bits of it reliably.  */
978                 if ((HOST_FLOAT_FORMAT != TARGET_FLOAT_FORMAT
979                      || HOST_BITS_PER_INT != BITS_PER_WORD)
980                     && GET_MODE (op) != VOIDmode && ! flag_pretend_float)
981                   break;
982                 if (GET_CODE (op) == CONST_DOUBLE)
983                   win = 1;
984                 break;
985
986               case 'F':
987                 if (GET_CODE (op) == CONST_DOUBLE)
988                   win = 1;
989                 break;
990
991               case 'G':
992               case 'H':
993                 if (GET_CODE (op) == CONST_DOUBLE
994                     && CONST_DOUBLE_OK_FOR_LETTER_P (op, c))
995                   win = 1;
996                 break;
997
998               case 's':
999                 if (GET_CODE (op) == CONST_INT
1000                     || (GET_CODE (op) == CONST_DOUBLE
1001                         && GET_MODE (op) == VOIDmode))
1002                   break;
1003               case 'i':
1004                 if (CONSTANT_P (op)
1005 #ifdef LEGITIMATE_PIC_OPERAND_P
1006                     && (! flag_pic || LEGITIMATE_PIC_OPERAND_P (op))
1007 #endif
1008                     )
1009                   win = 1;
1010                 break;
1011
1012               case 'n':
1013                 if (GET_CODE (op) == CONST_INT
1014                     || (GET_CODE (op) == CONST_DOUBLE
1015                         && GET_MODE (op) == VOIDmode))
1016                   win = 1;
1017                 break;
1018
1019               case 'I':
1020               case 'J':
1021               case 'K':
1022               case 'L':
1023               case 'M':
1024               case 'N':
1025               case 'O':
1026               case 'P':
1027                 if (GET_CODE (op) == CONST_INT
1028                     && CONST_OK_FOR_LETTER_P (INTVAL (op), c))
1029                   win = 1;
1030                 break;
1031
1032               case 'X':
1033                 win = 1;
1034                 break;
1035
1036 #ifdef EXTRA_CONSTRAINT
1037               case 'Q':
1038               case 'R':
1039               case 'S':
1040               case 'T':
1041               case 'U':
1042                 if (EXTRA_CONSTRAINT (op, c))
1043                   win = 1;
1044                 break;
1045 #endif
1046
1047               case 'g':
1048                 if (GET_CODE (op) == MEM
1049                     || (CONSTANT_P (op)
1050 #ifdef LEGITIMATE_PIC_OPERAND_P
1051                         && (! flag_pic || LEGITIMATE_PIC_OPERAND_P (op))
1052 #endif
1053                         ))
1054                   win = 1;
1055                 allows_mem = 1;
1056               case 'r':
1057                 classes[i]
1058                   = reg_class_subunion[(int) classes[i]][(int) GENERAL_REGS];
1059                 break;
1060
1061               default:
1062                 classes[i]
1063                   = reg_class_subunion[(int) classes[i]]
1064                     [(int) REG_CLASS_FROM_LETTER (c)];
1065               }
1066
1067           constraints[i] = p;
1068
1069           /* How we account for this operand now depends on whether it is  a
1070              pseudo register or not.  If it is, we first check if any
1071              register classes are valid.  If not, we ignore this alternative,
1072              since we want to assume that all pseudos get allocated for
1073              register preferencing.  If some register class is valid, compute
1074              the costs of moving the pseudo into that class.  */
1075
1076           if (GET_CODE (op) == REG && REGNO (op) >= FIRST_PSEUDO_REGISTER)
1077             {
1078               if (classes[i] == NO_REGS)
1079                 alt_fail = 1;
1080               else
1081                 {
1082                   struct costs *pp = &this_op_costs[i];
1083
1084                   for (class = 0; class < N_REG_CLASSES; class++)
1085                     pp->cost[class] = may_move_cost[class][(int) classes[i]];
1086
1087                   /* If the alternative actually allows memory, make things
1088                      a bit cheaper since we won't need an extra insn to
1089                      load it.  */
1090
1091                   pp->mem_cost = MEMORY_MOVE_COST (mode) - allows_mem;
1092
1093                   /* If we have assigned a class to this register in our
1094                      first pass, add a cost to this alternative corresponding
1095                      to what we would add if this register were not in the
1096                      appropriate class.  */
1097
1098                   if (prefclass)
1099                     alt_cost
1100                       += may_move_cost[prefclass[REGNO (op)]][(int) classes[i]];
1101                 }
1102             }
1103
1104           /* Otherwise, if this alternative wins, either because we
1105              have already determined that or if we have a hard register of
1106              the proper class, there is no cost for this alternative.  */
1107
1108           else if (win
1109                    || (GET_CODE (op) == REG
1110                        && reg_fits_class_p (op, classes[i], 0, mode)))
1111             ;
1112
1113           /* If registers are valid, the cost of this alternative includes
1114              copying the object to and/or from a register.  */
1115
1116           else if (classes[i] != NO_REGS)
1117             {
1118               if (op_types[i] != OP_WRITE)
1119                 alt_cost += copy_cost (op, mode, classes[i], 1);
1120
1121               if (op_types[i] != OP_READ)
1122                 alt_cost += copy_cost (op, mode, classes[i], 0);
1123             }
1124
1125           /* The only other way this alternative can be used is if this is a
1126              constant that could be placed into memory.  */
1127
1128           else if (CONSTANT_P (op) && allows_mem)
1129             alt_cost += MEMORY_MOVE_COST (mode);
1130           else
1131             alt_fail = 1;
1132         }
1133
1134       if (alt_fail)
1135         continue;
1136
1137       /* Finally, update the costs with the information we've calculated
1138          about this alternative.  */
1139
1140       for (i = 0; i < n_ops; i++)
1141         if (GET_CODE (ops[i]) == REG
1142             && REGNO (ops[i]) >= FIRST_PSEUDO_REGISTER)
1143           {
1144             struct costs *pp = &op_costs[i], *qq = &this_op_costs[i];
1145             int scale = 1 + (op_types[i] == OP_READ_WRITE);
1146
1147             pp->mem_cost = MIN (pp->mem_cost,
1148                                 (qq->mem_cost + alt_cost) * scale);
1149
1150             for (class = 0; class < N_REG_CLASSES; class++)
1151               pp->cost[class] = MIN (pp->cost[class],
1152                                      (qq->cost[class] + alt_cost) * scale);
1153           }
1154     }
1155 }
1156 \f
1157 /* Compute the cost of loading X into (if TO_P is non-zero) or from (if
1158    TO_P is zero) a register of class CLASS in mode MODE.
1159
1160    X must not be a pseudo.  */
1161
1162 static int
1163 copy_cost (x, mode, class, to_p)
1164      rtx x;
1165      enum machine_mode mode;
1166      enum reg_class class;
1167      int to_p;
1168 {
1169   enum reg_class secondary_class = NO_REGS;
1170
1171   /* If X is a SCRATCH, there is actually nothing to move since we are
1172      assuming optimal allocation.  */
1173
1174   if (GET_CODE (x) == SCRATCH)
1175     return 0;
1176
1177   /* Get the class we will actually use for a reload.  */
1178   class = PREFERRED_RELOAD_CLASS (x, class);
1179
1180 #ifdef HAVE_SECONDARY_RELOADS
1181   /* If we need a secondary reload (we assume here that we are using 
1182      the secondary reload as an intermediate, not a scratch register), the
1183      cost is that to load the input into the intermediate register, then
1184      to copy them.  We use a special value of TO_P to avoid recursion.  */
1185
1186 #ifdef SECONDARY_INPUT_RELOAD_CLASS
1187   if (to_p == 1)
1188     secondary_class = SECONDARY_INPUT_RELOAD_CLASS (class, mode, x);
1189 #endif
1190
1191 #ifdef SECONARY_OUTPUT_RELOAD_CLASS
1192   if (! to_p)
1193     secondary_class = SECONDARY_OUTPUT_RELOAD_CLASS (class, mode, x);
1194 #endif
1195
1196   if (secondary_class != NO_REGS)
1197     return (move_cost[(int) secondary_class][(int) class]
1198             + copy_cost (x, mode, secondary_class, 2));
1199 #endif  /* HAVE_SECONARY_RELOADS */
1200
1201   /* For memory, use the memory move cost, for (hard) registers, use the
1202      cost to move between the register classes, and use 2 for everything
1203      else (constants).  */
1204
1205   if (GET_CODE (x) == MEM || class == NO_REGS)
1206     return MEMORY_MOVE_COST (mode);
1207
1208   else if (GET_CODE (x) == REG)
1209     return move_cost[(int) REGNO_REG_CLASS (REGNO (x))][(int) class];
1210
1211   else
1212     /* If this is a constant, we may eventually want to call rtx_cost here.  */
1213     return 2;
1214 }
1215 \f
1216 /* Record the pseudo registers we must reload into hard registers
1217    in a subexpression of a memory address, X.
1218
1219    CLASS is the class that the register needs to be in and is either
1220    BASE_REG_CLASS or INDEX_REG_CLASS.
1221
1222    SCALE is twice the amount to multiply the cost by (it is twice so we
1223    can represent half-cost adjustments).  */
1224
1225 void
1226 record_address_regs (x, class, scale)
1227      rtx x;
1228      enum reg_class class;
1229      int scale;
1230 {
1231   register enum rtx_code code = GET_CODE (x);
1232
1233   switch (code)
1234     {
1235     case CONST_INT:
1236     case CONST:
1237     case CC0:
1238     case PC:
1239     case SYMBOL_REF:
1240     case LABEL_REF:
1241       return;
1242
1243     case PLUS:
1244       /* When we have an address that is a sum,
1245          we must determine whether registers are "base" or "index" regs.
1246          If there is a sum of two registers, we must choose one to be
1247          the "base".  Luckily, we can use the REGNO_POINTER_FLAG
1248          to make a good choice most of the time.  We only need to do this
1249          on machines that can have two registers in an address and where
1250          the base and index register classes are different.
1251
1252          ??? This code used to set REGNO_POINTER_FLAG in some cases, but
1253          that seems bogus since it should only be set when we are sure
1254          the register is being used as a pointer.  */
1255
1256       {
1257         rtx arg0 = XEXP (x, 0);
1258         rtx arg1 = XEXP (x, 1);
1259         register enum rtx_code code0 = GET_CODE (arg0);
1260         register enum rtx_code code1 = GET_CODE (arg1);
1261
1262         /* Look inside subregs.  */
1263         if (code0 == SUBREG)
1264           arg0 = SUBREG_REG (arg0), code0 = GET_CODE (arg0);
1265         if (code1 == SUBREG)
1266           arg1 = SUBREG_REG (arg1), code1 = GET_CODE (arg1);
1267
1268         /* If this machine only allows one register per address, it must
1269            be in the first operand.  */
1270
1271         if (MAX_REGS_PER_ADDRESS == 1)
1272           record_address_regs (arg0, class, scale);
1273
1274         /* If index and base registers are the same on this machine, just
1275            record registers in any non-constant operands.  We assume here,
1276            as well as in the tests below, that all addresses are in 
1277            canonical form.  */
1278
1279         else if (INDEX_REG_CLASS == BASE_REG_CLASS)
1280           {
1281             record_address_regs (arg0, class, scale);
1282             if (! CONSTANT_P (arg1))
1283               record_address_regs (arg1, class, scale);
1284           }
1285
1286         /* If the second operand is a constant integer, it doesn't change
1287            what class the first operand must be.  */
1288
1289         else if (code1 == CONST_INT || code1 == CONST_DOUBLE)
1290           record_address_regs (arg0, class, scale);
1291
1292         /* If the second operand is a symbolic constant, the first operand
1293            must be an index register.  */
1294
1295         else if (code1 == SYMBOL_REF || code1 == CONST || code1 == LABEL_REF)
1296           record_address_regs (arg0, INDEX_REG_CLASS, scale);
1297
1298         /* If this the sum of two registers where the first is known to be a 
1299            pointer, it must be a base register with the second an index.  */
1300
1301         else if (code0 == REG && code1 == REG
1302                  && REGNO_POINTER_FLAG (REGNO (arg0)))
1303           {
1304             record_address_regs (arg0, BASE_REG_CLASS, scale);
1305             record_address_regs (arg1, INDEX_REG_CLASS, scale);
1306           }
1307
1308         /* If this is the sum of two registers and neither is known to
1309            be a pointer, count equal chances that each might be a base
1310            or index register.  This case should be rare.  */
1311
1312         else if (code0 == REG && code1 == REG
1313                  && ! REGNO_POINTER_FLAG (REGNO (arg0))
1314                  && ! REGNO_POINTER_FLAG (REGNO (arg1)))
1315           {
1316             record_address_regs (arg0, BASE_REG_CLASS, scale / 2);
1317             record_address_regs (arg0, INDEX_REG_CLASS, scale / 2);
1318             record_address_regs (arg1, BASE_REG_CLASS, scale / 2);
1319             record_address_regs (arg1, INDEX_REG_CLASS, scale / 2);
1320           }
1321
1322         /* In all other cases, the first operand is an index and the
1323            second is the base.  */
1324
1325         else
1326           {
1327             record_address_regs (arg0, INDEX_REG_CLASS, scale);
1328             record_address_regs (arg1, BASE_REG_CLASS, scale);
1329           }
1330       }
1331       break;
1332
1333     case POST_INC:
1334     case PRE_INC:
1335     case POST_DEC:
1336     case PRE_DEC:
1337       /* Double the importance of a pseudo register that is incremented
1338          or decremented, since it would take two extra insns
1339          if it ends up in the wrong place.  */
1340
1341       record_address_regs (XEXP (x, 0), class, 2 * scale);
1342       break;
1343
1344     case REG:
1345       {
1346         register struct costs *pp = &costs[REGNO (x)];
1347         register int i;
1348
1349         pp->mem_cost += (MEMORY_MOVE_COST (Pmode) * scale) / 2;
1350
1351         for (i = 0; i < N_REG_CLASSES; i++)
1352           pp->cost[i] += (may_move_cost[i][(int) class] * scale) / 2;
1353       }
1354       break;
1355
1356     default:
1357       {
1358         register char *fmt = GET_RTX_FORMAT (code);
1359         register int i;
1360         for (i = GET_RTX_LENGTH (code) - 1; i >= 0; i--)
1361           if (fmt[i] == 'e')
1362             record_address_regs (XEXP (x, i), class, scale);
1363       }
1364     }
1365 }
1366 #endif /* REGISTER_CONSTRAINTS */
1367 \f
1368 /* This is the `regscan' pass of the compiler, run just before cse
1369    and again just before loop.
1370
1371    It finds the first and last use of each pseudo-register
1372    and records them in the vectors regno_first_uid, regno_last_uid
1373    and counts the number of sets in the vector reg_n_sets.
1374
1375    REPEAT is nonzero the second time this is called.  */
1376
1377 /* Indexed by pseudo register number, gives uid of first insn using the reg
1378    (as of the time reg_scan is called).  */
1379
1380 int *regno_first_uid;
1381
1382 /* Indexed by pseudo register number, gives uid of last insn using the reg
1383    (as of the time reg_scan is called).  */
1384
1385 int *regno_last_uid;
1386
1387 /* Record the number of registers we used when we allocated the above two
1388    tables.  If we are called again with more than this, we must re-allocate
1389    the tables.  */
1390
1391 static int highest_regno_in_uid_map;
1392
1393 /* Maximum number of parallel sets and clobbers in any insn in this fn.
1394    Always at least 3, since the combiner could put that many togetherm
1395    and we want this to remain correct for all the remaining passes.  */
1396
1397 int max_parallel;
1398
1399 void reg_scan_mark_refs ();
1400
1401 void
1402 reg_scan (f, nregs, repeat)
1403      rtx f;
1404      int nregs;
1405      int repeat;
1406 {
1407   register rtx insn;
1408
1409   if (!repeat || nregs > highest_regno_in_uid_map)
1410     {
1411       /* Leave some spare space in case more regs are allocated.  */
1412       highest_regno_in_uid_map = nregs + nregs / 20;
1413       regno_first_uid
1414         = (int *) oballoc (highest_regno_in_uid_map * sizeof (int));
1415       regno_last_uid
1416         = (int *) oballoc (highest_regno_in_uid_map * sizeof (int));
1417       reg_n_sets
1418         = (short *) oballoc (highest_regno_in_uid_map * sizeof (short));
1419     }
1420
1421   bzero (regno_first_uid, highest_regno_in_uid_map * sizeof (int));
1422   bzero (regno_last_uid, highest_regno_in_uid_map * sizeof (int));
1423   bzero (reg_n_sets, highest_regno_in_uid_map * sizeof (short));
1424
1425   max_parallel = 3;
1426
1427   for (insn = f; insn; insn = NEXT_INSN (insn))
1428     if (GET_CODE (insn) == INSN
1429         || GET_CODE (insn) == CALL_INSN
1430         || GET_CODE (insn) == JUMP_INSN)
1431       {
1432         if (GET_CODE (PATTERN (insn)) == PARALLEL
1433             && XVECLEN (PATTERN (insn), 0) > max_parallel)
1434           max_parallel = XVECLEN (PATTERN (insn), 0);
1435         reg_scan_mark_refs (PATTERN (insn), INSN_UID (insn));
1436       }
1437 }
1438
1439 void
1440 reg_scan_mark_refs (x, uid)
1441      rtx x;
1442      int uid;
1443 {
1444   register enum rtx_code code = GET_CODE (x);
1445   register rtx dest;
1446
1447   switch (code)
1448     {
1449     case CONST_INT:
1450     case CONST:
1451     case CONST_DOUBLE:
1452     case CC0:
1453     case PC:
1454     case SYMBOL_REF:
1455     case LABEL_REF:
1456     case ADDR_VEC:
1457     case ADDR_DIFF_VEC:
1458       return;
1459
1460     case REG:
1461       {
1462         register int regno = REGNO (x);
1463
1464         regno_last_uid[regno] = uid;
1465         if (regno_first_uid[regno] == 0)
1466           regno_first_uid[regno] = uid;
1467       }
1468       break;
1469
1470     case SET:
1471       /* Count a set of the destination if it is a register.  */
1472       for (dest = SET_DEST (x);
1473            GET_CODE (dest) == SUBREG || GET_CODE (dest) == STRICT_LOW_PART
1474            || GET_CODE (dest) == ZERO_EXTEND;
1475            dest = XEXP (dest, 0))
1476         ;
1477
1478       if (GET_CODE (dest) == REG)
1479         reg_n_sets[REGNO (dest)]++;
1480
1481       /* ... fall through ... */
1482
1483     default:
1484       {
1485         register char *fmt = GET_RTX_FORMAT (code);
1486         register int i;
1487         for (i = GET_RTX_LENGTH (code) - 1; i >= 0; i--)
1488           {
1489             if (fmt[i] == 'e')
1490               reg_scan_mark_refs (XEXP (x, i), uid);
1491             else if (fmt[i] == 'E' && XVEC (x, i) != 0)
1492               {
1493                 register int j;
1494                 for (j = XVECLEN (x, i) - 1; j >= 0; j--)
1495                   reg_scan_mark_refs (XVECEXP (x, i, j), uid);            
1496               }
1497           }
1498       }
1499     }
1500 }
1501 \f
1502 /* Return nonzero if C1 is a subset of C2, i.e., if every register in C1
1503    is also in C2.  */
1504
1505 int
1506 reg_class_subset_p (c1, c2)
1507      register enum reg_class c1;
1508      register enum reg_class c2;
1509 {
1510   if (c1 == c2) return 1;
1511
1512   if (c2 == ALL_REGS)
1513   win:
1514     return 1;
1515   GO_IF_HARD_REG_SUBSET (reg_class_contents[(int)c1],
1516                          reg_class_contents[(int)c2],
1517                          win);
1518   return 0;
1519 }
1520
1521 /* Return nonzero if there is a register that is in both C1 and C2.  */
1522
1523 int
1524 reg_classes_intersect_p (c1, c2)
1525      register enum reg_class c1;
1526      register enum reg_class c2;
1527 {
1528 #ifdef HARD_REG_SET
1529   register
1530 #endif
1531     HARD_REG_SET c;
1532
1533   if (c1 == c2) return 1;
1534
1535   if (c1 == ALL_REGS || c2 == ALL_REGS)
1536     return 1;
1537
1538   COPY_HARD_REG_SET (c, reg_class_contents[(int) c1]);
1539   AND_HARD_REG_SET (c, reg_class_contents[(int) c2]);
1540
1541   GO_IF_HARD_REG_SUBSET (c, reg_class_contents[(int) NO_REGS], lose);
1542   return 1;
1543
1544  lose:
1545   return 0;
1546 }
1547