OSDN Git Service

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