source: trunk/third/gcc/regclass.c @ 8834

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