OSDN Git Service

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