OSDN Git Service

Initial revision
[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 "rtl.h"
28 #include "hard-reg-set.h"
29 #include "flags.h"
30 #include "basic-block.h"
31 #include "regs.h"
32 #include "insn-config.h"
33 #include "recog.h"
34 #include "reload.h"
35 #include "real.h"
36 #include "bytecode.h"
37
38 #ifndef REGISTER_MOVE_COST
39 #define REGISTER_MOVE_COST(x, y) 2
40 #endif
41
42 #ifndef MEMORY_MOVE_COST
43 #define MEMORY_MOVE_COST(x) 4
44 #endif
45
46 /* If we have auto-increment or auto-decrement and we can have secondary
47    reloads, we are not allowed to use classes requiring secondary
48    reloads for pseudos auto-incremented since reload can't handle it.  */
49
50 #ifdef AUTO_INC_DEC
51 #if defined(SECONDARY_INPUT_RELOAD_CLASS) || defined(SECONDARY_OUTPUT_RELOAD_CLASS)
52 #define FORBIDDEN_INC_DEC_CLASSES
53 #endif
54 #endif
55 \f
56 /* Register tables used by many passes.  */
57
58 /* Indexed by hard register number, contains 1 for registers
59    that are fixed use (stack pointer, pc, frame pointer, etc.).
60    These are the registers that cannot be used to allocate
61    a pseudo reg whose life does not cross calls.  */
62
63 char fixed_regs[FIRST_PSEUDO_REGISTER];
64
65 /* Same info as a HARD_REG_SET.  */
66
67 HARD_REG_SET fixed_reg_set;
68
69 /* Data for initializing the above.  */
70
71 static char initial_fixed_regs[] = FIXED_REGISTERS;
72
73 /* Indexed by hard register number, contains 1 for registers
74    that are fixed use or are clobbered by function calls.
75    These are the registers that cannot be used to allocate
76    a pseudo reg whose life crosses calls.  */
77
78 char call_used_regs[FIRST_PSEUDO_REGISTER];
79
80 /* Same info as a HARD_REG_SET.  */
81
82 HARD_REG_SET call_used_reg_set;
83
84 /* HARD_REG_SET of registers we want to avoid caller saving.  */
85 HARD_REG_SET losing_caller_save_reg_set;
86
87 /* Data for initializing the above.  */
88
89 static char initial_call_used_regs[] = CALL_USED_REGISTERS;
90   
91 /* Indexed by hard register number, contains 1 for registers that are
92    fixed use -- i.e. in fixed_regs -- or a function value return register
93    or STRUCT_VALUE_REGNUM or STATIC_CHAIN_REGNUM.  These are the
94    registers that cannot hold quantities across calls even if we are
95    willing to save and restore them.  */
96
97 char call_fixed_regs[FIRST_PSEUDO_REGISTER];
98
99 /* The same info as a HARD_REG_SET.  */
100
101 HARD_REG_SET call_fixed_reg_set;
102
103 /* Number of non-fixed registers.  */
104
105 int n_non_fixed_regs;
106
107 /* Indexed by hard register number, contains 1 for registers
108    that are being used for global register decls.
109    These must be exempt from ordinary flow analysis
110    and are also considered fixed.  */
111
112 char global_regs[FIRST_PSEUDO_REGISTER];
113   
114 /* Table of register numbers in the order in which to try to use them.  */
115 #ifdef REG_ALLOC_ORDER
116 int reg_alloc_order[FIRST_PSEUDO_REGISTER] = REG_ALLOC_ORDER;
117 #endif
118
119 /* For each reg class, a HARD_REG_SET saying which registers are in it.  */
120
121 HARD_REG_SET reg_class_contents[N_REG_CLASSES];
122
123 /* The same information, but as an array of unsigned ints.  We copy from
124    these unsigned ints to the table above.  We do this so the tm.h files
125    do not have to be aware of the wordsize for machines with <= 64 regs.  */
126
127 #define N_REG_INTS  \
128   ((FIRST_PSEUDO_REGISTER + (HOST_BITS_PER_INT - 1)) / HOST_BITS_PER_INT)
129
130 static unsigned int_reg_class_contents[N_REG_CLASSES][N_REG_INTS] 
131   = REG_CLASS_CONTENTS;
132
133 /* For each reg class, number of regs it contains.  */
134
135 int reg_class_size[N_REG_CLASSES];
136
137 /* For each reg class, table listing all the containing classes.  */
138
139 enum reg_class reg_class_superclasses[N_REG_CLASSES][N_REG_CLASSES];
140
141 /* For each reg class, table listing all the classes contained in it.  */
142
143 enum reg_class reg_class_subclasses[N_REG_CLASSES][N_REG_CLASSES];
144
145 /* For each pair of reg classes,
146    a largest reg class contained in their union.  */
147
148 enum reg_class reg_class_subunion[N_REG_CLASSES][N_REG_CLASSES];
149
150 /* For each pair of reg classes,
151    the smallest reg class containing their union.  */
152
153 enum reg_class reg_class_superunion[N_REG_CLASSES][N_REG_CLASSES];
154
155 /* Array containing all of the register names */
156
157 char *reg_names[] = REGISTER_NAMES;
158
159 /* For each hard register, the widest mode object that it can contain.
160    This will be a MODE_INT mode if the register can hold integers.  Otherwise
161    it will be a MODE_FLOAT or a MODE_CC mode, whichever is valid for the
162    register.  */
163
164 enum machine_mode reg_raw_mode[FIRST_PSEUDO_REGISTER];
165
166 /* Maximum cost of moving from a register in one class to a register in
167    another class.  Based on REGISTER_MOVE_COST.  */
168
169 static int move_cost[N_REG_CLASSES][N_REG_CLASSES];
170
171 /* Similar, but here we don't have to move if the first index is a subset
172    of the second so in that case the cost is zero.  */
173
174 static int may_move_cost[N_REG_CLASSES][N_REG_CLASSES];
175
176 #ifdef FORBIDDEN_INC_DEC_CLASSES
177
178 /* These are the classes that regs which are auto-incremented or decremented
179    cannot be put in.  */
180
181 static int forbidden_inc_dec_class[N_REG_CLASSES];
182
183 /* Indexed by n, is non-zero if (REG n) is used in an auto-inc or auto-dec
184    context.  */
185
186 static char *in_inc_dec;
187
188 #endif /* FORBIDDEN_INC_DEC_CLASSES */
189
190 /* Function called only once to initialize the above data on reg usage.
191    Once this is done, various switches may override.  */
192
193 void
194 init_reg_sets ()
195 {
196   register int i, j;
197
198   /* First copy the register information from the initial int form into
199      the regsets.  */
200
201   for (i = 0; i < N_REG_CLASSES; i++)
202     {
203       CLEAR_HARD_REG_SET (reg_class_contents[i]);
204
205       for (j = 0; j < FIRST_PSEUDO_REGISTER; j++)
206         if (int_reg_class_contents[i][j / HOST_BITS_PER_INT]
207             & ((unsigned) 1 << (j % HOST_BITS_PER_INT)))
208           SET_HARD_REG_BIT (reg_class_contents[i], j);
209     }
210
211   bcopy (initial_fixed_regs, fixed_regs, sizeof fixed_regs);
212   bcopy (initial_call_used_regs, call_used_regs, sizeof call_used_regs);
213   bzero (global_regs, sizeof global_regs);
214
215   /* Compute number of hard regs in each class.  */
216
217   bzero ((char *) reg_class_size, sizeof reg_class_size);
218   for (i = 0; i < N_REG_CLASSES; i++)
219     for (j = 0; j < FIRST_PSEUDO_REGISTER; j++)
220       if (TEST_HARD_REG_BIT (reg_class_contents[i], j))
221         reg_class_size[i]++;
222
223   /* Initialize the table of subunions.
224      reg_class_subunion[I][J] gets the largest-numbered reg-class
225      that is contained in the union of classes I and J.  */
226
227   for (i = 0; i < N_REG_CLASSES; i++)
228     {
229       for (j = 0; j < N_REG_CLASSES; j++)
230         {
231 #ifdef HARD_REG_SET
232           register              /* Declare it register if it's a scalar.  */
233 #endif
234             HARD_REG_SET c;
235           register int k;
236
237           COPY_HARD_REG_SET (c, reg_class_contents[i]);
238           IOR_HARD_REG_SET (c, reg_class_contents[j]);
239           for (k = 0; k < N_REG_CLASSES; k++)
240             {
241               GO_IF_HARD_REG_SUBSET (reg_class_contents[k], c,
242                                      subclass1);
243               continue;
244
245             subclass1:
246               /* keep the largest subclass */           /* SPEE 900308 */
247               GO_IF_HARD_REG_SUBSET (reg_class_contents[k],
248                                      reg_class_contents[(int) reg_class_subunion[i][j]],
249                                      subclass2);
250               reg_class_subunion[i][j] = (enum reg_class) k;
251             subclass2:
252               ;
253             }
254         }
255     }
256
257   /* Initialize the table of superunions.
258      reg_class_superunion[I][J] gets the smallest-numbered reg-class
259      containing the union of classes I and J.  */
260
261   for (i = 0; i < N_REG_CLASSES; i++)
262     {
263       for (j = 0; j < N_REG_CLASSES; j++)
264         {
265 #ifdef HARD_REG_SET
266           register              /* Declare it register if it's a scalar.  */
267 #endif
268             HARD_REG_SET c;
269           register int k;
270
271           COPY_HARD_REG_SET (c, reg_class_contents[i]);
272           IOR_HARD_REG_SET (c, reg_class_contents[j]);
273           for (k = 0; k < N_REG_CLASSES; k++)
274             GO_IF_HARD_REG_SUBSET (c, reg_class_contents[k], superclass);
275
276         superclass:
277           reg_class_superunion[i][j] = (enum reg_class) k;
278         }
279     }
280
281   /* Initialize the tables of subclasses and superclasses of each reg class.
282      First clear the whole table, then add the elements as they are found.  */
283
284   for (i = 0; i < N_REG_CLASSES; i++)
285     {
286       for (j = 0; j < N_REG_CLASSES; j++)
287         {
288           reg_class_superclasses[i][j] = LIM_REG_CLASSES;
289           reg_class_subclasses[i][j] = LIM_REG_CLASSES;
290         }
291     }
292
293   for (i = 0; i < N_REG_CLASSES; i++)
294     {
295       if (i == (int) NO_REGS)
296         continue;
297
298       for (j = i + 1; j < N_REG_CLASSES; j++)
299         {
300           enum reg_class *p;
301
302           GO_IF_HARD_REG_SUBSET (reg_class_contents[i], reg_class_contents[j],
303                                  subclass);
304           continue;
305         subclass:
306           /* Reg class I is a subclass of J.
307              Add J to the table of superclasses of I.  */
308           p = &reg_class_superclasses[i][0];
309           while (*p != LIM_REG_CLASSES) p++;
310           *p = (enum reg_class) j;
311           /* Add I to the table of superclasses of J.  */
312           p = &reg_class_subclasses[j][0];
313           while (*p != LIM_REG_CLASSES) p++;
314           *p = (enum reg_class) i;
315         }
316     }
317
318   /* Initialize the move cost table.  Find every subset of each class
319      and take the maximum cost of moving any subset to any other.  */
320
321   for (i = 0; i < N_REG_CLASSES; i++)
322     for (j = 0; j < N_REG_CLASSES; j++)
323       {
324         int cost = i == j ? 2 : REGISTER_MOVE_COST (i, j);
325         enum reg_class *p1, *p2;
326
327         for (p2 = &reg_class_subclasses[j][0]; *p2 != LIM_REG_CLASSES; p2++)
328           if (*p2 != i)
329             cost = MAX (cost, REGISTER_MOVE_COST (i, *p2));
330
331         for (p1 = &reg_class_subclasses[i][0]; *p1 != LIM_REG_CLASSES; p1++)
332           {
333             if (*p1 != j)
334               cost = MAX (cost, REGISTER_MOVE_COST (*p1, j));
335
336             for (p2 = &reg_class_subclasses[j][0];
337                  *p2 != LIM_REG_CLASSES; p2++)
338               if (*p1 != *p2)
339                 cost = MAX (cost, REGISTER_MOVE_COST (*p1, *p2));
340           }
341
342         move_cost[i][j] = cost;
343
344         if (reg_class_subset_p (i, j))
345           cost = 0;
346
347         may_move_cost[i][j] = cost;
348       }
349
350   /* Do any additional initialization regsets may need */
351   INIT_ONCE_REG_SET ();
352 }
353
354 /* After switches have been processed, which perhaps alter
355    `fixed_regs' and `call_used_regs', convert them to HARD_REG_SETs.  */
356
357 static void
358 init_reg_sets_1 ()
359 {
360   register int i;
361
362   /* This macro allows the fixed or call-used registers
363      to depend on target flags.  */
364
365 #ifdef CONDITIONAL_REGISTER_USAGE
366   CONDITIONAL_REGISTER_USAGE;
367 #endif
368
369   /* Initialize "constant" tables.  */
370
371   CLEAR_HARD_REG_SET (fixed_reg_set);
372   CLEAR_HARD_REG_SET (call_used_reg_set);
373   CLEAR_HARD_REG_SET (call_fixed_reg_set);
374
375   bcopy (fixed_regs, call_fixed_regs, sizeof call_fixed_regs);
376
377   n_non_fixed_regs = 0;
378
379   for (i = 0; i < FIRST_PSEUDO_REGISTER; i++)
380     {
381       if (fixed_regs[i])
382         SET_HARD_REG_BIT (fixed_reg_set, i);
383       else
384         n_non_fixed_regs++;
385
386       if (call_used_regs[i])
387         SET_HARD_REG_BIT (call_used_reg_set, i);
388       if (call_fixed_regs[i])
389         SET_HARD_REG_BIT (call_fixed_reg_set, i);
390       if (CLASS_LIKELY_SPILLED_P (REGNO_REG_CLASS (i)))
391         SET_HARD_REG_BIT (losing_caller_save_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 inaccessible).  */
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_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 this the sum of two registers where the first is known to be a 
1544            pointer, it must be a base register with the second an index.  */
1545
1546         else if (code0 == REG && code1 == REG
1547                  && REGNO_POINTER_FLAG (REGNO (arg0)))
1548           {
1549             record_address_regs (arg0, BASE_REG_CLASS, scale);
1550             record_address_regs (arg1, INDEX_REG_CLASS, scale);
1551           }
1552
1553         /* If this is the sum of two registers and neither is known to
1554            be a pointer, count equal chances that each might be a base
1555            or index register.  This case should be rare.  */
1556
1557         else if (code0 == REG && code1 == REG
1558                  && ! REGNO_POINTER_FLAG (REGNO (arg0))
1559                  && ! REGNO_POINTER_FLAG (REGNO (arg1)))
1560           {
1561             record_address_regs (arg0, BASE_REG_CLASS, scale / 2);
1562             record_address_regs (arg0, INDEX_REG_CLASS, scale / 2);
1563             record_address_regs (arg1, BASE_REG_CLASS, scale / 2);
1564             record_address_regs (arg1, INDEX_REG_CLASS, scale / 2);
1565           }
1566
1567         /* In all other cases, the first operand is an index and the
1568            second is the base.  */
1569
1570         else
1571           {
1572             record_address_regs (arg0, INDEX_REG_CLASS, scale);
1573             record_address_regs (arg1, BASE_REG_CLASS, scale);
1574           }
1575       }
1576       break;
1577
1578     case POST_INC:
1579     case PRE_INC:
1580     case POST_DEC:
1581     case PRE_DEC:
1582       /* Double the importance of a pseudo register that is incremented
1583          or decremented, since it would take two extra insns
1584          if it ends up in the wrong place.  If the operand is a pseudo,
1585          show it is being used in an INC_DEC context.  */
1586
1587 #ifdef FORBIDDEN_INC_DEC_CLASSES
1588       if (GET_CODE (XEXP (x, 0)) == REG
1589           && REGNO (XEXP (x, 0)) >= FIRST_PSEUDO_REGISTER)
1590         in_inc_dec[REGNO (XEXP (x, 0))] = 1;
1591 #endif
1592
1593       record_address_regs (XEXP (x, 0), class, 2 * scale);
1594       break;
1595
1596     case REG:
1597       {
1598         register struct costs *pp = &costs[REGNO (x)];
1599         register int i;
1600
1601         pp->mem_cost += (MEMORY_MOVE_COST (Pmode) * scale) / 2;
1602
1603         for (i = 0; i < N_REG_CLASSES; i++)
1604           pp->cost[i] += (may_move_cost[i][(int) class] * scale) / 2;
1605       }
1606       break;
1607
1608     default:
1609       {
1610         register char *fmt = GET_RTX_FORMAT (code);
1611         register int i;
1612         for (i = GET_RTX_LENGTH (code) - 1; i >= 0; i--)
1613           if (fmt[i] == 'e')
1614             record_address_regs (XEXP (x, i), class, scale);
1615       }
1616     }
1617 }
1618 \f
1619 #ifdef FORBIDDEN_INC_DEC_CLASSES
1620
1621 /* Return 1 if REG is valid as an auto-increment memory reference
1622    to an object of MODE.  */
1623
1624 static 
1625 auto_inc_dec_reg_p (reg, mode)
1626      rtx reg;
1627      enum machine_mode mode;
1628 {
1629 #ifdef HAVE_POST_INCREMENT
1630   if (memory_address_p (mode, gen_rtx (POST_INC, Pmode, reg)))
1631     return 1;
1632 #endif
1633
1634 #ifdef HAVE_POST_DECREMENT
1635   if (memory_address_p (mode, gen_rtx (POST_DEC, Pmode, reg)))
1636     return 1;
1637 #endif
1638
1639 #ifdef HAVE_PRE_INCREMENT
1640   if (memory_address_p (mode, gen_rtx (PRE_INC, Pmode, reg)))
1641     return 1;
1642 #endif
1643
1644 #ifdef HAVE_PRE_DECREMENT
1645   if (memory_address_p (mode, gen_rtx (PRE_DEC, Pmode, reg)))
1646     return 1;
1647 #endif
1648
1649   return 0;
1650 }
1651 #endif
1652
1653 #endif /* REGISTER_CONSTRAINTS */
1654 \f
1655 /* Allocate enough space to hold NUM_REGS registers for the tables used for
1656    reg_scan and flow_analysis that are indexed by the register number.  If
1657    NEW_P is non zero, initialize all of the registers, otherwise only
1658    initialize the new registers allocated.  The same table is kept from
1659    function to function, only reallocating it when we need more room.  If
1660    RENUMBER_P is non zero, allocate the reg_renumber array also.  */
1661
1662 void
1663 allocate_reg_info (num_regs, new_p, renumber_p)
1664      int num_regs;
1665      int new_p;
1666      int renumber_p;
1667 {
1668   static int regno_allocated = 0;
1669   static int regno_max = 0;
1670   static short *renumber = (short *)0;
1671   int i;
1672   int size_info;
1673   int size_renumber;
1674   int min = (new_p) ? 0 : regno_max;
1675
1676   /* If this message come up, and you want to fix it, then all of the tables
1677      like reg_renumber, etc. that use short will have to be found and lengthed
1678      to int or HOST_WIDE_INT.  */
1679
1680   /* Free up all storage allocated */
1681   if (num_regs < 0)
1682     {
1683       if (reg_n_info)
1684         {
1685           free ((char *)reg_n_info);
1686           free ((char *)renumber);
1687           reg_n_info = (reg_info *)0;
1688           renumber = (short *)0;
1689         }
1690       regno_allocated = 0;
1691       regno_max = 0;
1692       return;
1693     }
1694
1695   if (num_regs > regno_allocated)
1696     {
1697       regno_allocated = num_regs + (num_regs / 20);     /* add some slop space */
1698       size_info = regno_allocated * sizeof (reg_info);
1699       size_renumber = regno_allocated * sizeof (short);
1700
1701       if (!reg_n_info)
1702         {
1703           reg_n_info = (reg_info *) xmalloc (size_info);
1704           renumber = (short *) xmalloc (size_renumber);
1705         }
1706
1707       else if (new_p)           /* if we're zapping everything, no need to realloc */
1708         {
1709           free ((char *)reg_n_info);
1710           free ((char *)renumber);
1711           reg_n_info = (reg_info *) xmalloc (size_info);
1712           renumber = (short *) xmalloc (size_renumber);
1713         }
1714
1715       else
1716         {
1717           reg_n_info = (reg_info *) xrealloc ((char *)reg_n_info, size_info);
1718           renumber = (short *) xrealloc ((char *)renumber, size_renumber);
1719         }
1720     }
1721
1722   if (min < num_regs)
1723     {
1724       bzero ((char *) &reg_n_info[min], (num_regs - min) * sizeof (reg_info));
1725       for (i = min; i < num_regs; i++)
1726         {
1727           REG_BASIC_BLOCK (i) = REG_BLOCK_UNKNOWN;
1728           renumber[i] = -1;
1729         }
1730     }
1731
1732   if (renumber_p)
1733     reg_renumber = renumber;
1734
1735   /* Tell the regset code about the new number of registers */
1736   MAX_REGNO_REG_SET (num_regs, new_p, renumber_p);
1737
1738   regno_max = num_regs;
1739 }
1740
1741 \f
1742 /* This is the `regscan' pass of the compiler, run just before cse
1743    and again just before loop.
1744
1745    It finds the first and last use of each pseudo-register
1746    and records them in the vectors regno_first_uid, regno_last_uid
1747    and counts the number of sets in the vector reg_n_sets.
1748
1749    REPEAT is nonzero the second time this is called.  */
1750
1751 /* Maximum number of parallel sets and clobbers in any insn in this fn.
1752    Always at least 3, since the combiner could put that many together
1753    and we want this to remain correct for all the remaining passes.  */
1754
1755 int max_parallel;
1756
1757 void
1758 reg_scan (f, nregs, repeat)
1759      rtx f;
1760      int nregs;
1761      int repeat;
1762 {
1763   register rtx insn;
1764
1765   allocate_reg_info (nregs, TRUE, FALSE);
1766   max_parallel = 3;
1767
1768   for (insn = f; insn; insn = NEXT_INSN (insn))
1769     if (GET_CODE (insn) == INSN
1770         || GET_CODE (insn) == CALL_INSN
1771         || GET_CODE (insn) == JUMP_INSN)
1772       {
1773         if (GET_CODE (PATTERN (insn)) == PARALLEL
1774             && XVECLEN (PATTERN (insn), 0) > max_parallel)
1775           max_parallel = XVECLEN (PATTERN (insn), 0);
1776         reg_scan_mark_refs (PATTERN (insn), insn, 0);
1777
1778         if (REG_NOTES (insn))
1779           reg_scan_mark_refs (REG_NOTES (insn), insn, 1);
1780       }
1781 }
1782
1783 /* X is the expression to scan.  INSN is the insn it appears in.
1784    NOTE_FLAG is nonzero if X is from INSN's notes rather than its body.  */
1785
1786 static void
1787 reg_scan_mark_refs (x, insn, note_flag)
1788      rtx x;
1789      rtx insn;
1790      int note_flag;
1791 {
1792   register enum rtx_code code = GET_CODE (x);
1793   register rtx dest;
1794   register rtx note;
1795
1796   switch (code)
1797     {
1798     case CONST_INT:
1799     case CONST:
1800     case CONST_DOUBLE:
1801     case CC0:
1802     case PC:
1803     case SYMBOL_REF:
1804     case LABEL_REF:
1805     case ADDR_VEC:
1806     case ADDR_DIFF_VEC:
1807       return;
1808
1809     case REG:
1810       {
1811         register int regno = REGNO (x);
1812
1813         REGNO_LAST_NOTE_UID (regno) = INSN_UID (insn);
1814         if (!note_flag)
1815           REGNO_LAST_UID (regno) = INSN_UID (insn);
1816         if (REGNO_FIRST_UID (regno) == 0)
1817           REGNO_FIRST_UID (regno) = INSN_UID (insn);
1818       }
1819       break;
1820
1821     case EXPR_LIST:
1822       if (XEXP (x, 0))
1823         reg_scan_mark_refs (XEXP (x, 0), insn, note_flag);
1824       if (XEXP (x, 1))
1825         reg_scan_mark_refs (XEXP (x, 1), insn, note_flag);
1826       break;
1827
1828     case INSN_LIST:
1829       if (XEXP (x, 1))
1830         reg_scan_mark_refs (XEXP (x, 1), insn, note_flag);
1831       break;
1832
1833     case SET:
1834       /* Count a set of the destination if it is a register.  */
1835       for (dest = SET_DEST (x);
1836            GET_CODE (dest) == SUBREG || GET_CODE (dest) == STRICT_LOW_PART
1837            || GET_CODE (dest) == ZERO_EXTEND;
1838            dest = XEXP (dest, 0))
1839         ;
1840
1841       if (GET_CODE (dest) == REG)
1842         REG_N_SETS (REGNO (dest))++;
1843
1844       /* If this is setting a pseudo from another pseudo or the sum of a
1845          pseudo and a constant integer and the other pseudo is known to be
1846          a pointer, set the destination to be a pointer as well.
1847
1848          Likewise if it is setting the destination from an address or from a
1849          value equivalent to an address or to the sum of an address and
1850          something else.
1851                      
1852          But don't do any of this if the pseudo corresponds to a user
1853          variable since it should have already been set as a pointer based
1854          on the type.  */
1855
1856       if (GET_CODE (SET_DEST (x)) == REG
1857           && REGNO (SET_DEST (x)) >= FIRST_PSEUDO_REGISTER
1858           && ! REG_USERVAR_P (SET_DEST (x))
1859           && ! REGNO_POINTER_FLAG (REGNO (SET_DEST (x)))
1860           && ((GET_CODE (SET_SRC (x)) == REG
1861                && REGNO_POINTER_FLAG (REGNO (SET_SRC (x))))
1862               || ((GET_CODE (SET_SRC (x)) == PLUS
1863                    || GET_CODE (SET_SRC (x)) == LO_SUM)
1864                   && GET_CODE (XEXP (SET_SRC (x), 1)) == CONST_INT
1865                   && GET_CODE (XEXP (SET_SRC (x), 0)) == REG
1866                   && REGNO_POINTER_FLAG (REGNO (XEXP (SET_SRC (x), 0))))
1867               || GET_CODE (SET_SRC (x)) == CONST
1868               || GET_CODE (SET_SRC (x)) == SYMBOL_REF
1869               || GET_CODE (SET_SRC (x)) == LABEL_REF
1870               || (GET_CODE (SET_SRC (x)) == HIGH
1871                   && (GET_CODE (XEXP (SET_SRC (x), 0)) == CONST
1872                       || GET_CODE (XEXP (SET_SRC (x), 0)) == SYMBOL_REF
1873                       || GET_CODE (XEXP (SET_SRC (x), 0)) == LABEL_REF))
1874               || ((GET_CODE (SET_SRC (x)) == PLUS
1875                    || GET_CODE (SET_SRC (x)) == LO_SUM)
1876                   && (GET_CODE (XEXP (SET_SRC (x), 1)) == CONST
1877                       || GET_CODE (XEXP (SET_SRC (x), 1)) == SYMBOL_REF
1878                       || GET_CODE (XEXP (SET_SRC (x), 1)) == LABEL_REF))
1879               || ((note = find_reg_note (insn, REG_EQUAL, 0)) != 0
1880                   && (GET_CODE (XEXP (note, 0)) == CONST
1881                       || GET_CODE (XEXP (note, 0)) == SYMBOL_REF
1882                       || GET_CODE (XEXP (note, 0)) == LABEL_REF))))
1883         REGNO_POINTER_FLAG (REGNO (SET_DEST (x))) = 1;
1884
1885       /* ... fall through ...  */
1886
1887     default:
1888       {
1889         register char *fmt = GET_RTX_FORMAT (code);
1890         register int i;
1891         for (i = GET_RTX_LENGTH (code) - 1; i >= 0; i--)
1892           {
1893             if (fmt[i] == 'e')
1894               reg_scan_mark_refs (XEXP (x, i), insn, note_flag);
1895             else if (fmt[i] == 'E' && XVEC (x, i) != 0)
1896               {
1897                 register int j;
1898                 for (j = XVECLEN (x, i) - 1; j >= 0; j--)
1899                   reg_scan_mark_refs (XVECEXP (x, i, j), insn, note_flag);
1900               }
1901           }
1902       }
1903     }
1904 }
1905 \f
1906 /* Return nonzero if C1 is a subset of C2, i.e., if every register in C1
1907    is also in C2.  */
1908
1909 int
1910 reg_class_subset_p (c1, c2)
1911      register enum reg_class c1;
1912      register enum reg_class c2;
1913 {
1914   if (c1 == c2) return 1;
1915
1916   if (c2 == ALL_REGS)
1917   win:
1918     return 1;
1919   GO_IF_HARD_REG_SUBSET (reg_class_contents[(int)c1],
1920                          reg_class_contents[(int)c2],
1921                          win);
1922   return 0;
1923 }
1924
1925 /* Return nonzero if there is a register that is in both C1 and C2.  */
1926
1927 int
1928 reg_classes_intersect_p (c1, c2)
1929      register enum reg_class c1;
1930      register enum reg_class c2;
1931 {
1932 #ifdef HARD_REG_SET
1933   register
1934 #endif
1935     HARD_REG_SET c;
1936
1937   if (c1 == c2) return 1;
1938
1939   if (c1 == ALL_REGS || c2 == ALL_REGS)
1940     return 1;
1941
1942   COPY_HARD_REG_SET (c, reg_class_contents[(int) c1]);
1943   AND_HARD_REG_SET (c, reg_class_contents[(int) c2]);
1944
1945   GO_IF_HARD_REG_SUBSET (c, reg_class_contents[(int) NO_REGS], lose);
1946   return 1;
1947
1948  lose:
1949   return 0;
1950 }
1951
1952 /* Release any memory allocated by register sets.  */
1953
1954 void
1955 regset_release_memory ()
1956 {
1957   if (basic_block_live_at_start)
1958     {
1959       free_regset_vector (basic_block_live_at_start, n_basic_blocks);
1960       basic_block_live_at_start = 0;
1961     }
1962
1963   FREE_REG_SET (regs_live_at_setjmp);
1964   bitmap_release_memory ();
1965 }