OSDN Git Service

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