OSDN Git Service

* ra-build.c (copy_insn_p, remember_move, defuse_overlap_p_1,
[pf3gnuchains/gcc-fork.git] / gcc / regclass.c
1 /* Compute register class preferences for pseudo-registers.
2    Copyright (C) 1987, 1988, 1991, 1992, 1993, 1994, 1995, 1996
3    1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004
4    Free Software Foundation, Inc.
5
6 This file is part of GCC.
7
8 GCC is free software; you can redistribute it and/or modify it under
9 the terms of the GNU General Public License as published by the Free
10 Software Foundation; either version 2, or (at your option) any later
11 version.
12
13 GCC is distributed in the hope that it will be useful, but WITHOUT ANY
14 WARRANTY; without even the implied warranty of MERCHANTABILITY or
15 FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
16 for more details.
17
18 You should have received a copy of the GNU General Public License
19 along with GCC; see the file COPYING.  If not, write to the Free
20 Software Foundation, 59 Temple Place - Suite 330, Boston, MA
21 02111-1307, USA.  */
22
23
24 /* This file contains two passes of the compiler: reg_scan and reg_class.
25    It also defines some tables of information about the hardware registers
26    and a function init_reg_sets to initialize the tables.  */
27
28 #include "config.h"
29 #include "system.h"
30 #include "coretypes.h"
31 #include "tm.h"
32 #include "hard-reg-set.h"
33 #include "rtl.h"
34 #include "expr.h"
35 #include "tm_p.h"
36 #include "flags.h"
37 #include "basic-block.h"
38 #include "regs.h"
39 #include "function.h"
40 #include "insn-config.h"
41 #include "recog.h"
42 #include "reload.h"
43 #include "real.h"
44 #include "toplev.h"
45 #include "output.h"
46 #include "ggc.h"
47 #include "timevar.h"
48
49 static void init_reg_sets_1 (void);
50 static void init_reg_autoinc (void);
51
52 /* If we have auto-increment or auto-decrement and we can have secondary
53    reloads, we are not allowed to use classes requiring secondary
54    reloads for pseudos auto-incremented since reload can't handle it.  */
55
56 #ifdef AUTO_INC_DEC
57 #if defined(SECONDARY_INPUT_RELOAD_CLASS) || defined(SECONDARY_OUTPUT_RELOAD_CLASS)
58 #define FORBIDDEN_INC_DEC_CLASSES
59 #endif
60 #endif
61 \f
62 /* Register tables used by many passes.  */
63
64 /* Indexed by hard register number, contains 1 for registers
65    that are fixed use (stack pointer, pc, frame pointer, etc.).
66    These are the registers that cannot be used to allocate
67    a pseudo reg for general use.  */
68
69 char fixed_regs[FIRST_PSEUDO_REGISTER];
70
71 /* Same info as a HARD_REG_SET.  */
72
73 HARD_REG_SET fixed_reg_set;
74
75 /* Data for initializing the above.  */
76
77 static const char initial_fixed_regs[] = FIXED_REGISTERS;
78
79 /* Indexed by hard register number, contains 1 for registers
80    that are fixed use or are clobbered by function calls.
81    These are the registers that cannot be used to allocate
82    a pseudo reg whose life crosses calls unless we are able
83    to save/restore them across the calls.  */
84
85 char call_used_regs[FIRST_PSEUDO_REGISTER];
86
87 /* Same info as a HARD_REG_SET.  */
88
89 HARD_REG_SET call_used_reg_set;
90
91 /* HARD_REG_SET of registers we want to avoid caller saving.  */
92 HARD_REG_SET losing_caller_save_reg_set;
93
94 /* Data for initializing the above.  */
95
96 static const char initial_call_used_regs[] = CALL_USED_REGISTERS;
97
98 /* This is much like call_used_regs, except it doesn't have to
99    be a superset of FIXED_REGISTERS. This vector indicates
100    what is really call clobbered, and is used when defining
101    regs_invalidated_by_call.  */
102
103 #ifdef CALL_REALLY_USED_REGISTERS
104 char call_really_used_regs[] = CALL_REALLY_USED_REGISTERS;
105 #endif
106
107 /* Indexed by hard register number, contains 1 for registers that are
108    fixed use or call used registers that cannot hold quantities across
109    calls even if we are willing to save and restore them.  call fixed
110    registers are a subset of call used registers.  */
111
112 char call_fixed_regs[FIRST_PSEUDO_REGISTER];
113
114 /* The same info as a HARD_REG_SET.  */
115
116 HARD_REG_SET call_fixed_reg_set;
117
118 /* Number of non-fixed registers.  */
119
120 int n_non_fixed_regs;
121
122 /* Indexed by hard register number, contains 1 for registers
123    that are being used for global register decls.
124    These must be exempt from ordinary flow analysis
125    and are also considered fixed.  */
126
127 char global_regs[FIRST_PSEUDO_REGISTER];
128
129 /* Contains 1 for registers that are set or clobbered by calls.  */
130 /* ??? Ideally, this would be just call_used_regs plus global_regs, but
131    for someone's bright idea to have call_used_regs strictly include
132    fixed_regs.  Which leaves us guessing as to the set of fixed_regs
133    that are actually preserved.  We know for sure that those associated
134    with the local stack frame are safe, but scant others.  */
135
136 HARD_REG_SET regs_invalidated_by_call;
137
138 /* Table of register numbers in the order in which to try to use them.  */
139 #ifdef REG_ALLOC_ORDER
140 int reg_alloc_order[FIRST_PSEUDO_REGISTER] = REG_ALLOC_ORDER;
141
142 /* The inverse of reg_alloc_order.  */
143 int inv_reg_alloc_order[FIRST_PSEUDO_REGISTER];
144 #endif
145
146 /* For each reg class, a HARD_REG_SET saying which registers are in it.  */
147
148 HARD_REG_SET reg_class_contents[N_REG_CLASSES];
149
150 /* The same information, but as an array of unsigned ints.  We copy from
151    these unsigned ints to the table above.  We do this so the tm.h files
152    do not have to be aware of the wordsize for machines with <= 64 regs.
153    Note that we hard-code 32 here, not HOST_BITS_PER_INT.  */
154
155 #define N_REG_INTS  \
156   ((FIRST_PSEUDO_REGISTER + (32 - 1)) / 32)
157
158 static const unsigned int_reg_class_contents[N_REG_CLASSES][N_REG_INTS]
159   = REG_CLASS_CONTENTS;
160
161 /* For each reg class, number of regs it contains.  */
162
163 unsigned int reg_class_size[N_REG_CLASSES];
164
165 /* For each reg class, table listing all the containing classes.  */
166
167 enum reg_class reg_class_superclasses[N_REG_CLASSES][N_REG_CLASSES];
168
169 /* For each reg class, table listing all the classes contained in it.  */
170
171 enum reg_class reg_class_subclasses[N_REG_CLASSES][N_REG_CLASSES];
172
173 /* For each pair of reg classes,
174    a largest reg class contained in their union.  */
175
176 enum reg_class reg_class_subunion[N_REG_CLASSES][N_REG_CLASSES];
177
178 /* For each pair of reg classes,
179    the smallest reg class containing their union.  */
180
181 enum reg_class reg_class_superunion[N_REG_CLASSES][N_REG_CLASSES];
182
183 /* Array containing all of the register names.  */
184
185 const char * reg_names[] = REGISTER_NAMES;
186
187 /* For each hard register, the widest mode object that it can contain.
188    This will be a MODE_INT mode if the register can hold integers.  Otherwise
189    it will be a MODE_FLOAT or a MODE_CC mode, whichever is valid for the
190    register.  */
191
192 enum machine_mode reg_raw_mode[FIRST_PSEUDO_REGISTER];
193
194 /* 1 if there is a register of given mode.  */
195
196 bool have_regs_of_mode [MAX_MACHINE_MODE];
197
198 /* 1 if class does contain register of given mode.  */
199
200 static char contains_reg_of_mode [N_REG_CLASSES] [MAX_MACHINE_MODE];
201
202 /* Maximum cost of moving from a register in one class to a register in
203    another class.  Based on REGISTER_MOVE_COST.  */
204
205 static int move_cost[MAX_MACHINE_MODE][N_REG_CLASSES][N_REG_CLASSES];
206
207 /* Similar, but here we don't have to move if the first index is a subset
208    of the second so in that case the cost is zero.  */
209
210 static int may_move_in_cost[MAX_MACHINE_MODE][N_REG_CLASSES][N_REG_CLASSES];
211
212 /* Similar, but here we don't have to move if the first index is a superset
213    of the second so in that case the cost is zero.  */
214
215 static int may_move_out_cost[MAX_MACHINE_MODE][N_REG_CLASSES][N_REG_CLASSES];
216
217 #ifdef FORBIDDEN_INC_DEC_CLASSES
218
219 /* These are the classes that regs which are auto-incremented or decremented
220    cannot be put in.  */
221
222 static int forbidden_inc_dec_class[N_REG_CLASSES];
223
224 /* Indexed by n, is nonzero if (REG n) is used in an auto-inc or auto-dec
225    context.  */
226
227 static char *in_inc_dec;
228
229 #endif /* FORBIDDEN_INC_DEC_CLASSES */
230
231 #ifdef CANNOT_CHANGE_MODE_CLASS
232 /* All registers that have been subreged.  Indexed by regno * MAX_MACHINE_MODE
233    + mode.  */
234 bitmap_head subregs_of_mode;
235 #endif
236
237 /* Sample MEM values for use by memory_move_secondary_cost.  */
238
239 static GTY(()) rtx top_of_stack[MAX_MACHINE_MODE];
240
241 /* Linked list of reg_info structures allocated for reg_n_info array.
242    Grouping all of the allocated structures together in one lump
243    means only one call to bzero to clear them, rather than n smaller
244    calls.  */
245 struct reg_info_data {
246   struct reg_info_data *next;   /* next set of reg_info structures */
247   size_t min_index;             /* minimum index # */
248   size_t max_index;             /* maximum index # */
249   char used_p;                  /* nonzero if this has been used previously */
250   reg_info data[1];             /* beginning of the reg_info data */
251 };
252
253 static struct reg_info_data *reg_info_head;
254
255 /* No more global register variables may be declared; true once
256    regclass has been initialized.  */
257
258 static int no_global_reg_vars = 0;
259
260 /* Specify number of hard registers given machine mode occupy.  */
261 unsigned char hard_regno_nregs[FIRST_PSEUDO_REGISTER][MAX_MACHINE_MODE];
262
263 /* Function called only once to initialize the above data on reg usage.
264    Once this is done, various switches may override.  */
265
266 void
267 init_reg_sets (void)
268 {
269   int i, j;
270
271   /* First copy the register information from the initial int form into
272      the regsets.  */
273
274   for (i = 0; i < N_REG_CLASSES; i++)
275     {
276       CLEAR_HARD_REG_SET (reg_class_contents[i]);
277
278       /* Note that we hard-code 32 here, not HOST_BITS_PER_INT.  */
279       for (j = 0; j < FIRST_PSEUDO_REGISTER; j++)
280         if (int_reg_class_contents[i][j / 32]
281             & ((unsigned) 1 << (j % 32)))
282           SET_HARD_REG_BIT (reg_class_contents[i], j);
283     }
284
285   /* Sanity check: make sure the target macros FIXED_REGISTERS and
286      CALL_USED_REGISTERS had the right number of initializers.  */
287   gcc_assert (sizeof fixed_regs == sizeof initial_fixed_regs);
288   gcc_assert (sizeof call_used_regs == sizeof initial_call_used_regs);
289
290   memcpy (fixed_regs, initial_fixed_regs, sizeof fixed_regs);
291   memcpy (call_used_regs, initial_call_used_regs, sizeof call_used_regs);
292   memset (global_regs, 0, sizeof global_regs);
293
294   /* Do any additional initialization regsets may need.  */
295   INIT_ONCE_REG_SET ();
296
297 #ifdef REG_ALLOC_ORDER
298   for (i = 0; i < FIRST_PSEUDO_REGISTER; i++)
299     inv_reg_alloc_order[reg_alloc_order[i]] = i;
300 #endif
301 }
302
303 /* After switches have been processed, which perhaps alter
304    `fixed_regs' and `call_used_regs', convert them to HARD_REG_SETs.  */
305
306 static void
307 init_reg_sets_1 (void)
308 {
309   unsigned int i, j;
310   unsigned int /* enum machine_mode */ m;
311
312   /* This macro allows the fixed or call-used registers
313      and the register classes to depend on target flags.  */
314
315 #ifdef CONDITIONAL_REGISTER_USAGE
316   CONDITIONAL_REGISTER_USAGE;
317 #endif
318
319   /* Compute number of hard regs in each class.  */
320
321   memset (reg_class_size, 0, sizeof reg_class_size);
322   for (i = 0; i < N_REG_CLASSES; i++)
323     for (j = 0; j < FIRST_PSEUDO_REGISTER; j++)
324       if (TEST_HARD_REG_BIT (reg_class_contents[i], j))
325         reg_class_size[i]++;
326
327   /* Initialize the table of subunions.
328      reg_class_subunion[I][J] gets the largest-numbered reg-class
329      that is contained in the union of classes I and J.  */
330
331   for (i = 0; i < N_REG_CLASSES; i++)
332     {
333       for (j = 0; j < N_REG_CLASSES; j++)
334         {
335           HARD_REG_SET c;
336           int k;
337
338           COPY_HARD_REG_SET (c, reg_class_contents[i]);
339           IOR_HARD_REG_SET (c, reg_class_contents[j]);
340           for (k = 0; k < N_REG_CLASSES; k++)
341             {
342               GO_IF_HARD_REG_SUBSET (reg_class_contents[k], c,
343                                      subclass1);
344               continue;
345
346             subclass1:
347               /* Keep the largest subclass.  */         /* SPEE 900308 */
348               GO_IF_HARD_REG_SUBSET (reg_class_contents[k],
349                                      reg_class_contents[(int) reg_class_subunion[i][j]],
350                                      subclass2);
351               reg_class_subunion[i][j] = (enum reg_class) k;
352             subclass2:
353               ;
354             }
355         }
356     }
357
358   /* Initialize the table of superunions.
359      reg_class_superunion[I][J] gets the smallest-numbered reg-class
360      containing the union of classes I and J.  */
361
362   for (i = 0; i < N_REG_CLASSES; i++)
363     {
364       for (j = 0; j < N_REG_CLASSES; j++)
365         {
366           HARD_REG_SET c;
367           int k;
368
369           COPY_HARD_REG_SET (c, reg_class_contents[i]);
370           IOR_HARD_REG_SET (c, reg_class_contents[j]);
371           for (k = 0; k < N_REG_CLASSES; k++)
372             GO_IF_HARD_REG_SUBSET (c, reg_class_contents[k], superclass);
373
374         superclass:
375           reg_class_superunion[i][j] = (enum reg_class) k;
376         }
377     }
378
379   /* Initialize the tables of subclasses and superclasses of each reg class.
380      First clear the whole table, then add the elements as they are found.  */
381
382   for (i = 0; i < N_REG_CLASSES; i++)
383     {
384       for (j = 0; j < N_REG_CLASSES; j++)
385         {
386           reg_class_superclasses[i][j] = LIM_REG_CLASSES;
387           reg_class_subclasses[i][j] = LIM_REG_CLASSES;
388         }
389     }
390
391   for (i = 0; i < N_REG_CLASSES; i++)
392     {
393       if (i == (int) NO_REGS)
394         continue;
395
396       for (j = i + 1; j < N_REG_CLASSES; j++)
397         {
398           enum reg_class *p;
399
400           GO_IF_HARD_REG_SUBSET (reg_class_contents[i], reg_class_contents[j],
401                                  subclass);
402           continue;
403         subclass:
404           /* Reg class I is a subclass of J.
405              Add J to the table of superclasses of I.  */
406           p = &reg_class_superclasses[i][0];
407           while (*p != LIM_REG_CLASSES) p++;
408           *p = (enum reg_class) j;
409           /* Add I to the table of superclasses of J.  */
410           p = &reg_class_subclasses[j][0];
411           while (*p != LIM_REG_CLASSES) p++;
412           *p = (enum reg_class) i;
413         }
414     }
415
416   /* Initialize "constant" tables.  */
417
418   CLEAR_HARD_REG_SET (fixed_reg_set);
419   CLEAR_HARD_REG_SET (call_used_reg_set);
420   CLEAR_HARD_REG_SET (call_fixed_reg_set);
421   CLEAR_HARD_REG_SET (regs_invalidated_by_call);
422
423   memcpy (call_fixed_regs, fixed_regs, sizeof call_fixed_regs);
424
425   n_non_fixed_regs = 0;
426
427   for (i = 0; i < FIRST_PSEUDO_REGISTER; i++)
428     {
429       /* call_used_regs must include fixed_regs.  */
430       gcc_assert (!fixed_regs[i] || call_used_regs[i]);
431 #ifdef CALL_REALLY_USED_REGISTERS
432       /* call_used_regs must include call_really_used_regs.  */
433       gcc_assert (!call_really_used_regs[i] || call_used_regs[i]);
434 #endif
435
436       if (fixed_regs[i])
437         SET_HARD_REG_BIT (fixed_reg_set, i);
438       else
439         n_non_fixed_regs++;
440
441       if (call_used_regs[i])
442         SET_HARD_REG_BIT (call_used_reg_set, i);
443       if (call_fixed_regs[i])
444         SET_HARD_REG_BIT (call_fixed_reg_set, i);
445       if (CLASS_LIKELY_SPILLED_P (REGNO_REG_CLASS (i)))
446         SET_HARD_REG_BIT (losing_caller_save_reg_set, i);
447
448       /* There are a couple of fixed registers that we know are safe to
449          exclude from being clobbered by calls:
450
451          The frame pointer is always preserved across calls.  The arg pointer
452          is if it is fixed.  The stack pointer usually is, unless
453          RETURN_POPS_ARGS, in which case an explicit CLOBBER will be present.
454          If we are generating PIC code, the PIC offset table register is
455          preserved across calls, though the target can override that.  */
456
457       if (i == STACK_POINTER_REGNUM || i == FRAME_POINTER_REGNUM)
458         ;
459 #if HARD_FRAME_POINTER_REGNUM != FRAME_POINTER_REGNUM
460       else if (i == HARD_FRAME_POINTER_REGNUM)
461         ;
462 #endif
463 #if ARG_POINTER_REGNUM != FRAME_POINTER_REGNUM
464       else if (i == ARG_POINTER_REGNUM && fixed_regs[i])
465         ;
466 #endif
467 #ifndef PIC_OFFSET_TABLE_REG_CALL_CLOBBERED
468       else if (i == (unsigned) PIC_OFFSET_TABLE_REGNUM && fixed_regs[i])
469         ;
470 #endif
471       else if (0
472 #ifdef CALL_REALLY_USED_REGISTERS
473                || call_really_used_regs[i]
474 #else
475                || call_used_regs[i]
476 #endif
477                || global_regs[i])
478         SET_HARD_REG_BIT (regs_invalidated_by_call, i);
479     }
480
481   memset (have_regs_of_mode, 0, sizeof (have_regs_of_mode));
482   memset (contains_reg_of_mode, 0, sizeof (contains_reg_of_mode));
483   for (m = 0; m < (unsigned int) MAX_MACHINE_MODE; m++)
484     for (i = 0; i < N_REG_CLASSES; i++)
485       if ((unsigned) CLASS_MAX_NREGS (i, m) <= reg_class_size[i])
486         for (j = 0; j < FIRST_PSEUDO_REGISTER; j++)
487           if (!fixed_regs [j] && TEST_HARD_REG_BIT (reg_class_contents[i], j)
488               && HARD_REGNO_MODE_OK (j, m))
489              {
490                contains_reg_of_mode [i][m] = 1;
491                have_regs_of_mode [m] = 1;
492                break;
493              }
494
495   /* Initialize the move cost table.  Find every subset of each class
496      and take the maximum cost of moving any subset to any other.  */
497
498   for (m = 0; m < (unsigned int) MAX_MACHINE_MODE; m++)
499     if (have_regs_of_mode [m])
500       {
501         for (i = 0; i < N_REG_CLASSES; i++)
502           if (contains_reg_of_mode [i][m])
503             for (j = 0; j < N_REG_CLASSES; j++)
504               {
505                 int cost;
506                 enum reg_class *p1, *p2;
507
508                 if (!contains_reg_of_mode [j][m])
509                   {
510                     move_cost[m][i][j] = 65536;
511                     may_move_in_cost[m][i][j] = 65536;
512                     may_move_out_cost[m][i][j] = 65536;
513                   }
514                 else
515                   {
516                     cost = REGISTER_MOVE_COST (m, i, j);
517
518                     for (p2 = &reg_class_subclasses[j][0];
519                          *p2 != LIM_REG_CLASSES;
520                          p2++)
521                       if (*p2 != i && contains_reg_of_mode [*p2][m])
522                         cost = MAX (cost, move_cost [m][i][*p2]);
523
524                     for (p1 = &reg_class_subclasses[i][0];
525                          *p1 != LIM_REG_CLASSES;
526                          p1++)
527                       if (*p1 != j && contains_reg_of_mode [*p1][m])
528                         cost = MAX (cost, move_cost [m][*p1][j]);
529
530                     move_cost[m][i][j] = cost;
531
532                     if (reg_class_subset_p (i, j))
533                       may_move_in_cost[m][i][j] = 0;
534                     else
535                       may_move_in_cost[m][i][j] = cost;
536
537                     if (reg_class_subset_p (j, i))
538                       may_move_out_cost[m][i][j] = 0;
539                     else
540                       may_move_out_cost[m][i][j] = cost;
541                   }
542               }
543           else
544             for (j = 0; j < N_REG_CLASSES; j++)
545               {
546                 move_cost[m][i][j] = 65536;
547                 may_move_in_cost[m][i][j] = 65536;
548                 may_move_out_cost[m][i][j] = 65536;
549               }
550       }
551 }
552
553 /* Compute the table of register modes.
554    These values are used to record death information for individual registers
555    (as opposed to a multi-register mode).  */
556
557 void
558 init_reg_modes_once (void)
559 {
560   int i, j;
561
562   for (i = 0; i < FIRST_PSEUDO_REGISTER; i++)
563     for (j = 0; j < MAX_MACHINE_MODE; j++)
564       hard_regno_nregs[i][j] = HARD_REGNO_NREGS(i, (enum machine_mode)j);
565
566   for (i = 0; i < FIRST_PSEUDO_REGISTER; i++)
567     {
568       reg_raw_mode[i] = choose_hard_reg_mode (i, 1, false);
569
570       /* If we couldn't find a valid mode, just use the previous mode.
571          ??? One situation in which we need to do this is on the mips where
572          HARD_REGNO_NREGS (fpreg, [SD]Fmode) returns 2.  Ideally we'd like
573          to use DF mode for the even registers and VOIDmode for the odd
574          (for the cpu models where the odd ones are inaccessible).  */
575       if (reg_raw_mode[i] == VOIDmode)
576         reg_raw_mode[i] = i == 0 ? word_mode : reg_raw_mode[i-1];
577     }
578 }
579
580 /* Finish initializing the register sets and
581    initialize the register modes.  */
582
583 void
584 init_regs (void)
585 {
586   /* This finishes what was started by init_reg_sets, but couldn't be done
587      until after register usage was specified.  */
588   init_reg_sets_1 ();
589
590   init_reg_autoinc ();
591 }
592
593 /* Initialize some fake stack-frame MEM references for use in
594    memory_move_secondary_cost.  */
595
596 void
597 init_fake_stack_mems (void)
598 {
599 #ifdef HAVE_SECONDARY_RELOADS
600   {
601     int i;
602
603     for (i = 0; i < MAX_MACHINE_MODE; i++)
604       top_of_stack[i] = gen_rtx_MEM (i, stack_pointer_rtx);
605   }
606 #endif
607 }
608
609 #ifdef HAVE_SECONDARY_RELOADS
610
611 /* Compute extra cost of moving registers to/from memory due to reloads.
612    Only needed if secondary reloads are required for memory moves.  */
613
614 int
615 memory_move_secondary_cost (enum machine_mode mode, enum reg_class class, int in)
616 {
617   enum reg_class altclass;
618   int partial_cost = 0;
619   /* We need a memory reference to feed to SECONDARY... macros.  */
620   /* mem may be unused even if the SECONDARY_ macros are defined.  */
621   rtx mem ATTRIBUTE_UNUSED = top_of_stack[(int) mode];
622
623
624   if (in)
625     {
626 #ifdef SECONDARY_INPUT_RELOAD_CLASS
627       altclass = SECONDARY_INPUT_RELOAD_CLASS (class, mode, mem);
628 #else
629       altclass = NO_REGS;
630 #endif
631     }
632   else
633     {
634 #ifdef SECONDARY_OUTPUT_RELOAD_CLASS
635       altclass = SECONDARY_OUTPUT_RELOAD_CLASS (class, mode, mem);
636 #else
637       altclass = NO_REGS;
638 #endif
639     }
640
641   if (altclass == NO_REGS)
642     return 0;
643
644   if (in)
645     partial_cost = REGISTER_MOVE_COST (mode, altclass, class);
646   else
647     partial_cost = REGISTER_MOVE_COST (mode, class, altclass);
648
649   if (class == altclass)
650     /* This isn't simply a copy-to-temporary situation.  Can't guess
651        what it is, so MEMORY_MOVE_COST really ought not to be calling
652        here in that case.
653
654        I'm tempted to put in an assert here, but returning this will
655        probably only give poor estimates, which is what we would've
656        had before this code anyways.  */
657     return partial_cost;
658
659   /* Check if the secondary reload register will also need a
660      secondary reload.  */
661   return memory_move_secondary_cost (mode, altclass, in) + partial_cost;
662 }
663 #endif
664
665 /* Return a machine mode that is legitimate for hard reg REGNO and large
666    enough to save nregs.  If we can't find one, return VOIDmode.
667    If CALL_SAVED is true, only consider modes that are call saved.  */
668
669 enum machine_mode
670 choose_hard_reg_mode (unsigned int regno ATTRIBUTE_UNUSED,
671                       unsigned int nregs, bool call_saved)
672 {
673   unsigned int /* enum machine_mode */ m;
674   enum machine_mode found_mode = VOIDmode, mode;
675
676   /* We first look for the largest integer mode that can be validly
677      held in REGNO.  If none, we look for the largest floating-point mode.
678      If we still didn't find a valid mode, try CCmode.  */
679
680   for (mode = GET_CLASS_NARROWEST_MODE (MODE_INT);
681        mode != VOIDmode;
682        mode = GET_MODE_WIDER_MODE (mode))
683     if ((unsigned) hard_regno_nregs[regno][mode] == nregs
684         && HARD_REGNO_MODE_OK (regno, mode)
685         && (! call_saved || ! HARD_REGNO_CALL_PART_CLOBBERED (regno, mode)))
686       found_mode = mode;
687
688   if (found_mode != VOIDmode)
689     return found_mode;
690
691   for (mode = GET_CLASS_NARROWEST_MODE (MODE_FLOAT);
692        mode != VOIDmode;
693        mode = GET_MODE_WIDER_MODE (mode))
694     if ((unsigned) hard_regno_nregs[regno][mode] == nregs
695         && HARD_REGNO_MODE_OK (regno, mode)
696         && (! call_saved || ! HARD_REGNO_CALL_PART_CLOBBERED (regno, mode)))
697       found_mode = mode;
698
699   if (found_mode != VOIDmode)
700     return found_mode;
701
702   for (mode = GET_CLASS_NARROWEST_MODE (MODE_VECTOR_FLOAT);
703        mode != VOIDmode;
704        mode = GET_MODE_WIDER_MODE (mode))
705     if ((unsigned) hard_regno_nregs[regno][mode] == nregs
706         && HARD_REGNO_MODE_OK (regno, mode)
707         && (! call_saved || ! HARD_REGNO_CALL_PART_CLOBBERED (regno, mode)))
708       found_mode = mode;
709
710   if (found_mode != VOIDmode)
711     return found_mode;
712
713   for (mode = GET_CLASS_NARROWEST_MODE (MODE_VECTOR_INT);
714        mode != VOIDmode;
715        mode = GET_MODE_WIDER_MODE (mode))
716     if ((unsigned) hard_regno_nregs[regno][mode] == nregs
717         && HARD_REGNO_MODE_OK (regno, mode)
718         && (! call_saved || ! HARD_REGNO_CALL_PART_CLOBBERED (regno, mode)))
719       found_mode = mode;
720
721   if (found_mode != VOIDmode)
722     return found_mode;
723
724   /* Iterate over all of the CCmodes.  */
725   for (m = (unsigned int) CCmode; m < (unsigned int) NUM_MACHINE_MODES; ++m)
726     {
727       mode = (enum machine_mode) m;
728       if ((unsigned) hard_regno_nregs[regno][mode] == nregs
729           && HARD_REGNO_MODE_OK (regno, mode)
730           && (! call_saved || ! HARD_REGNO_CALL_PART_CLOBBERED (regno, mode)))
731         return mode;
732     }
733
734   /* We can't find a mode valid for this register.  */
735   return VOIDmode;
736 }
737
738 /* Specify the usage characteristics of the register named NAME.
739    It should be a fixed register if FIXED and a
740    call-used register if CALL_USED.  */
741
742 void
743 fix_register (const char *name, int fixed, int call_used)
744 {
745   int i;
746
747   /* Decode the name and update the primary form of
748      the register info.  */
749
750   if ((i = decode_reg_name (name)) >= 0)
751     {
752       if ((i == STACK_POINTER_REGNUM
753 #ifdef HARD_FRAME_POINTER_REGNUM
754            || i == HARD_FRAME_POINTER_REGNUM
755 #else
756            || i == FRAME_POINTER_REGNUM
757 #endif
758            )
759           && (fixed == 0 || call_used == 0))
760         {
761           static const char * const what_option[2][2] = {
762             { "call-saved", "call-used" },
763             { "no-such-option", "fixed" }};
764
765           error ("can't use '%s' as a %s register", name,
766                  what_option[fixed][call_used]);
767         }
768       else
769         {
770           fixed_regs[i] = fixed;
771           call_used_regs[i] = call_used;
772 #ifdef CALL_REALLY_USED_REGISTERS
773           if (fixed == 0)
774             call_really_used_regs[i] = call_used;
775 #endif
776         }
777     }
778   else
779     {
780       warning ("unknown register name: %s", name);
781     }
782 }
783
784 /* Mark register number I as global.  */
785
786 void
787 globalize_reg (int i)
788 {
789   if (fixed_regs[i] == 0 && no_global_reg_vars)
790     error ("global register variable follows a function definition");
791
792   if (global_regs[i])
793     {
794       warning ("register used for two global register variables");
795       return;
796     }
797
798   if (call_used_regs[i] && ! fixed_regs[i])
799     warning ("call-clobbered register used for global register variable");
800
801   global_regs[i] = 1;
802
803   /* If already fixed, nothing else to do.  */
804   if (fixed_regs[i])
805     return;
806
807   fixed_regs[i] = call_used_regs[i] = call_fixed_regs[i] = 1;
808 #ifdef CALL_REALLY_USED_REGISTERS
809   call_really_used_regs[i] = 1;
810 #endif
811   n_non_fixed_regs--;
812
813   SET_HARD_REG_BIT (fixed_reg_set, i);
814   SET_HARD_REG_BIT (call_used_reg_set, i);
815   SET_HARD_REG_BIT (call_fixed_reg_set, i);
816   SET_HARD_REG_BIT (regs_invalidated_by_call, i);
817 }
818 \f
819 /* Now the data and code for the `regclass' pass, which happens
820    just before local-alloc.  */
821
822 /* The `costs' struct records the cost of using a hard register of each class
823    and of using memory for each pseudo.  We use this data to set up
824    register class preferences.  */
825
826 struct costs
827 {
828   int cost[N_REG_CLASSES];
829   int mem_cost;
830 };
831
832 /* Structure used to record preferences of given pseudo.  */
833 struct reg_pref
834 {
835   /* (enum reg_class) prefclass is the preferred class.  */
836   char prefclass;
837
838   /* altclass is a register class that we should use for allocating
839      pseudo if no register in the preferred class is available.
840      If no register in this class is available, memory is preferred.
841
842      It might appear to be more general to have a bitmask of classes here,
843      but since it is recommended that there be a class corresponding to the
844      union of most major pair of classes, that generality is not required.  */
845   char altclass;
846 };
847
848 /* Record the cost of each class for each pseudo.  */
849
850 static struct costs *costs;
851
852 /* Initialized once, and used to initialize cost values for each insn.  */
853
854 static struct costs init_cost;
855
856 /* Record preferences of each pseudo.
857    This is available after `regclass' is run.  */
858
859 static struct reg_pref *reg_pref;
860
861 /* Allocated buffers for reg_pref.  */
862
863 static struct reg_pref *reg_pref_buffer;
864
865 /* Frequency of executions of current insn.  */
866
867 static int frequency;
868
869 static rtx scan_one_insn (rtx, int);
870 static void record_operand_costs (rtx, struct costs *, struct reg_pref *);
871 static void dump_regclass (FILE *);
872 static void record_reg_classes (int, int, rtx *, enum machine_mode *,
873                                 const char **, rtx, struct costs *,
874                                 struct reg_pref *);
875 static int copy_cost (rtx, enum machine_mode, enum reg_class, int);
876 static void record_address_regs (rtx, enum reg_class, int);
877 #ifdef FORBIDDEN_INC_DEC_CLASSES
878 static int auto_inc_dec_reg_p (rtx, enum machine_mode);
879 #endif
880 static void reg_scan_mark_refs (rtx, rtx, int, unsigned int);
881
882 /* Return the reg_class in which pseudo reg number REGNO is best allocated.
883    This function is sometimes called before the info has been computed.
884    When that happens, just return GENERAL_REGS, which is innocuous.  */
885
886 enum reg_class
887 reg_preferred_class (int regno)
888 {
889   if (reg_pref == 0)
890     return GENERAL_REGS;
891   return (enum reg_class) reg_pref[regno].prefclass;
892 }
893
894 enum reg_class
895 reg_alternate_class (int regno)
896 {
897   if (reg_pref == 0)
898     return ALL_REGS;
899
900   return (enum reg_class) reg_pref[regno].altclass;
901 }
902
903 /* Initialize some global data for this pass.  */
904
905 void
906 regclass_init (void)
907 {
908   int i;
909
910   init_cost.mem_cost = 10000;
911   for (i = 0; i < N_REG_CLASSES; i++)
912     init_cost.cost[i] = 10000;
913
914   /* This prevents dump_flow_info from losing if called
915      before regclass is run.  */
916   reg_pref = NULL;
917
918   /* No more global register variables may be declared.  */
919   no_global_reg_vars = 1;
920 }
921 \f
922 /* Dump register costs.  */
923 static void
924 dump_regclass (FILE *dump)
925 {
926   static const char *const reg_class_names[] = REG_CLASS_NAMES;
927   int i;
928   for (i = FIRST_PSEUDO_REGISTER; i < max_regno; i++)
929     {
930       int /* enum reg_class */ class;
931       if (REG_N_REFS (i))
932         {
933           fprintf (dump, "  Register %i costs:", i);
934           for (class = 0; class < (int) N_REG_CLASSES; class++)
935             if (contains_reg_of_mode [(enum reg_class) class][PSEUDO_REGNO_MODE (i)]
936 #ifdef FORBIDDEN_INC_DEC_CLASSES
937                 && (!in_inc_dec[i]
938                     || !forbidden_inc_dec_class[(enum reg_class) class])
939 #endif
940 #ifdef CANNOT_CHANGE_MODE_CLASS
941                 && ! invalid_mode_change_p (i, (enum reg_class) class,
942                                             PSEUDO_REGNO_MODE (i))
943 #endif
944                 )
945             fprintf (dump, " %s:%i", reg_class_names[class],
946                      costs[i].cost[(enum reg_class) class]);
947           fprintf (dump, " MEM:%i\n", costs[i].mem_cost);
948         }
949     }
950 }
951 \f
952
953 /* Calculate the costs of insn operands.  */
954
955 static void
956 record_operand_costs (rtx insn, struct costs *op_costs,
957                       struct reg_pref *reg_pref)
958 {
959   const char *constraints[MAX_RECOG_OPERANDS];
960   enum machine_mode modes[MAX_RECOG_OPERANDS];
961   int i;
962
963   for (i = 0; i < recog_data.n_operands; i++)
964     {
965       constraints[i] = recog_data.constraints[i];
966       modes[i] = recog_data.operand_mode[i];
967     }
968
969   /* If we get here, we are set up to record the costs of all the
970      operands for this insn.  Start by initializing the costs.
971      Then handle any address registers.  Finally record the desired
972      classes for any pseudos, doing it twice if some pair of
973      operands are commutative.  */
974
975   for (i = 0; i < recog_data.n_operands; i++)
976     {
977       op_costs[i] = init_cost;
978
979       if (GET_CODE (recog_data.operand[i]) == SUBREG)
980         recog_data.operand[i] = SUBREG_REG (recog_data.operand[i]);
981
982       if (MEM_P (recog_data.operand[i]))
983         record_address_regs (XEXP (recog_data.operand[i], 0),
984                              MODE_BASE_REG_CLASS (modes[i]), frequency * 2);
985       else if (constraints[i][0] == 'p'
986                || EXTRA_ADDRESS_CONSTRAINT (constraints[i][0], constraints[i]))
987         record_address_regs (recog_data.operand[i],
988                              MODE_BASE_REG_CLASS (modes[i]), frequency * 2);
989     }
990
991   /* Check for commutative in a separate loop so everything will
992      have been initialized.  We must do this even if one operand
993      is a constant--see addsi3 in m68k.md.  */
994
995   for (i = 0; i < (int) recog_data.n_operands - 1; i++)
996     if (constraints[i][0] == '%')
997       {
998         const char *xconstraints[MAX_RECOG_OPERANDS];
999         int j;
1000
1001         /* Handle commutative operands by swapping the constraints.
1002            We assume the modes are the same.  */
1003
1004         for (j = 0; j < recog_data.n_operands; j++)
1005           xconstraints[j] = constraints[j];
1006
1007         xconstraints[i] = constraints[i+1];
1008         xconstraints[i+1] = constraints[i];
1009         record_reg_classes (recog_data.n_alternatives, recog_data.n_operands,
1010                             recog_data.operand, modes,
1011                             xconstraints, insn, op_costs, reg_pref);
1012       }
1013
1014   record_reg_classes (recog_data.n_alternatives, recog_data.n_operands,
1015                       recog_data.operand, modes,
1016                       constraints, insn, op_costs, reg_pref);
1017 }
1018 \f
1019 /* Subroutine of regclass, processes one insn INSN.  Scan it and record each
1020    time it would save code to put a certain register in a certain class.
1021    PASS, when nonzero, inhibits some optimizations which need only be done
1022    once.
1023    Return the last insn processed, so that the scan can be continued from
1024    there.  */
1025
1026 static rtx
1027 scan_one_insn (rtx insn, int pass)
1028 {
1029   enum rtx_code pat_code;
1030   rtx set, note;
1031   int i, j;
1032   struct costs op_costs[MAX_RECOG_OPERANDS];
1033
1034   if (!INSN_P (insn))
1035     return insn;
1036
1037   pat_code = GET_CODE (PATTERN (insn));
1038   if (pat_code == USE
1039       || pat_code == CLOBBER
1040       || pat_code == ASM_INPUT
1041       || pat_code == ADDR_VEC
1042       || pat_code == ADDR_DIFF_VEC)
1043     return insn;
1044
1045   set = single_set (insn);
1046   extract_insn (insn);
1047
1048   /* If this insn loads a parameter from its stack slot, then
1049      it represents a savings, rather than a cost, if the
1050      parameter is stored in memory.  Record this fact.  */
1051
1052   if (set != 0 && REG_P (SET_DEST (set))
1053       && MEM_P (SET_SRC (set))
1054       && (note = find_reg_note (insn, REG_EQUIV,
1055                                 NULL_RTX)) != 0
1056       && MEM_P (XEXP (note, 0)))
1057     {
1058       costs[REGNO (SET_DEST (set))].mem_cost
1059         -= (MEMORY_MOVE_COST (GET_MODE (SET_DEST (set)),
1060                               GENERAL_REGS, 1)
1061             * frequency);
1062       record_address_regs (XEXP (SET_SRC (set), 0),
1063                            MODE_BASE_REG_CLASS (VOIDmode), frequency * 2);
1064       return insn;
1065     }
1066
1067   /* Improve handling of two-address insns such as
1068      (set X (ashift CONST Y)) where CONST must be made to
1069      match X. Change it into two insns: (set X CONST)
1070      (set X (ashift X Y)).  If we left this for reloading, it
1071      would probably get three insns because X and Y might go
1072      in the same place. This prevents X and Y from receiving
1073      the same hard reg.
1074
1075      We can only do this if the modes of operands 0 and 1
1076      (which might not be the same) are tieable and we only need
1077      do this during our first pass.  */
1078
1079   if (pass == 0 && optimize
1080       && recog_data.n_operands >= 3
1081       && recog_data.constraints[1][0] == '0'
1082       && recog_data.constraints[1][1] == 0
1083       && CONSTANT_P (recog_data.operand[1])
1084       && ! rtx_equal_p (recog_data.operand[0], recog_data.operand[1])
1085       && ! rtx_equal_p (recog_data.operand[0], recog_data.operand[2])
1086       && REG_P (recog_data.operand[0])
1087       && MODES_TIEABLE_P (GET_MODE (recog_data.operand[0]),
1088                           recog_data.operand_mode[1]))
1089     {
1090       rtx previnsn = prev_real_insn (insn);
1091       rtx dest
1092         = gen_lowpart (recog_data.operand_mode[1],
1093                        recog_data.operand[0]);
1094       rtx newinsn
1095         = emit_insn_before (gen_move_insn (dest, recog_data.operand[1]), insn);
1096
1097       /* If this insn was the start of a basic block,
1098          include the new insn in that block.
1099          We need not check for code_label here;
1100          while a basic block can start with a code_label,
1101          INSN could not be at the beginning of that block.  */
1102       if (previnsn == 0 || JUMP_P (previnsn))
1103         {
1104           basic_block b;
1105           FOR_EACH_BB (b)
1106             if (insn == BB_HEAD (b))
1107               BB_HEAD (b) = newinsn;
1108         }
1109
1110       /* This makes one more setting of new insns's dest.  */
1111       REG_N_SETS (REGNO (recog_data.operand[0]))++;
1112       REG_N_REFS (REGNO (recog_data.operand[0]))++;
1113       REG_FREQ (REGNO (recog_data.operand[0])) += frequency;
1114
1115       *recog_data.operand_loc[1] = recog_data.operand[0];
1116       REG_N_REFS (REGNO (recog_data.operand[0]))++;
1117       REG_FREQ (REGNO (recog_data.operand[0])) += frequency;
1118       for (i = recog_data.n_dups - 1; i >= 0; i--)
1119         if (recog_data.dup_num[i] == 1)
1120           {
1121             *recog_data.dup_loc[i] = recog_data.operand[0];
1122             REG_N_REFS (REGNO (recog_data.operand[0]))++;
1123             REG_FREQ (REGNO (recog_data.operand[0])) += frequency;
1124           }
1125
1126       return PREV_INSN (newinsn);
1127     }
1128
1129   record_operand_costs (insn, op_costs, reg_pref);
1130
1131   /* Now add the cost for each operand to the total costs for
1132      its register.  */
1133
1134   for (i = 0; i < recog_data.n_operands; i++)
1135     if (REG_P (recog_data.operand[i])
1136         && REGNO (recog_data.operand[i]) >= FIRST_PSEUDO_REGISTER)
1137       {
1138         int regno = REGNO (recog_data.operand[i]);
1139         struct costs *p = &costs[regno], *q = &op_costs[i];
1140
1141         p->mem_cost += q->mem_cost * frequency;
1142         for (j = 0; j < N_REG_CLASSES; j++)
1143           p->cost[j] += q->cost[j] * frequency;
1144       }
1145
1146   return insn;
1147 }
1148
1149 /* Initialize information about which register classes can be used for
1150    pseudos that are auto-incremented or auto-decremented.  */
1151
1152 static void
1153 init_reg_autoinc (void)
1154 {
1155 #ifdef FORBIDDEN_INC_DEC_CLASSES
1156   int i;
1157
1158   for (i = 0; i < N_REG_CLASSES; i++)
1159     {
1160       rtx r = gen_rtx_raw_REG (VOIDmode, 0);
1161       enum machine_mode m;
1162       int j;
1163
1164       for (j = 0; j < FIRST_PSEUDO_REGISTER; j++)
1165         if (TEST_HARD_REG_BIT (reg_class_contents[i], j))
1166           {
1167             REGNO (r) = j;
1168
1169             for (m = VOIDmode; (int) m < (int) MAX_MACHINE_MODE;
1170                  m = (enum machine_mode) ((int) m + 1))
1171               if (HARD_REGNO_MODE_OK (j, m))
1172                 {
1173                   PUT_MODE (r, m);
1174
1175                   /* If a register is not directly suitable for an
1176                      auto-increment or decrement addressing mode and
1177                      requires secondary reloads, disallow its class from
1178                      being used in such addresses.  */
1179
1180                   if ((0
1181 #ifdef SECONDARY_RELOAD_CLASS
1182                        || (SECONDARY_RELOAD_CLASS (MODE_BASE_REG_CLASS (VOIDmode), m, r)
1183                            != NO_REGS)
1184 #else
1185 #ifdef SECONDARY_INPUT_RELOAD_CLASS
1186                        || (SECONDARY_INPUT_RELOAD_CLASS (MODE_BASE_REG_CLASS (VOIDmode), m, r)
1187                            != NO_REGS)
1188 #endif
1189 #ifdef SECONDARY_OUTPUT_RELOAD_CLASS
1190                        || (SECONDARY_OUTPUT_RELOAD_CLASS (MODE_BASE_REG_CLASS (VOIDmode), m, r)
1191                            != NO_REGS)
1192 #endif
1193 #endif
1194                        )
1195                       && ! auto_inc_dec_reg_p (r, m))
1196                     forbidden_inc_dec_class[i] = 1;
1197                 }
1198           }
1199     }
1200 #endif /* FORBIDDEN_INC_DEC_CLASSES */
1201 }
1202
1203 /* This is a pass of the compiler that scans all instructions
1204    and calculates the preferred class for each pseudo-register.
1205    This information can be accessed later by calling `reg_preferred_class'.
1206    This pass comes just before local register allocation.  */
1207
1208 void
1209 regclass (rtx f, int nregs, FILE *dump)
1210 {
1211   rtx insn;
1212   int i;
1213   int pass;
1214
1215   init_recog ();
1216
1217   costs = xmalloc (nregs * sizeof (struct costs));
1218
1219 #ifdef FORBIDDEN_INC_DEC_CLASSES
1220
1221   in_inc_dec = xmalloc (nregs);
1222
1223 #endif /* FORBIDDEN_INC_DEC_CLASSES */
1224
1225   /* Normally we scan the insns once and determine the best class to use for
1226      each register.  However, if -fexpensive_optimizations are on, we do so
1227      twice, the second time using the tentative best classes to guide the
1228      selection.  */
1229
1230   for (pass = 0; pass <= flag_expensive_optimizations; pass++)
1231     {
1232       basic_block bb;
1233
1234       if (dump)
1235         fprintf (dump, "\n\nPass %i\n\n",pass);
1236       /* Zero out our accumulation of the cost of each class for each reg.  */
1237
1238       memset (costs, 0, nregs * sizeof (struct costs));
1239
1240 #ifdef FORBIDDEN_INC_DEC_CLASSES
1241       memset (in_inc_dec, 0, nregs);
1242 #endif
1243
1244       /* Scan the instructions and record each time it would
1245          save code to put a certain register in a certain class.  */
1246
1247       if (!optimize)
1248         {
1249           frequency = REG_FREQ_MAX;
1250           for (insn = f; insn; insn = NEXT_INSN (insn))
1251             insn = scan_one_insn (insn, pass);
1252         }
1253       else
1254         FOR_EACH_BB (bb)
1255           {
1256             /* Show that an insn inside a loop is likely to be executed three
1257                times more than insns outside a loop.  This is much more
1258                aggressive than the assumptions made elsewhere and is being
1259                tried as an experiment.  */
1260             frequency = REG_FREQ_FROM_BB (bb);
1261             for (insn = BB_HEAD (bb); ; insn = NEXT_INSN (insn))
1262               {
1263                 insn = scan_one_insn (insn, pass);
1264                 if (insn == BB_END (bb))
1265                   break;
1266               }
1267           }
1268
1269       /* Now for each register look at how desirable each class is
1270          and find which class is preferred.  Store that in
1271          `prefclass'.  Record in `altclass' the largest register
1272          class any of whose registers is better than memory.  */
1273
1274       if (pass == 0)
1275         reg_pref = reg_pref_buffer;
1276
1277       if (dump)
1278         {
1279           dump_regclass (dump);
1280           fprintf (dump,"\n");
1281         }
1282       for (i = FIRST_PSEUDO_REGISTER; i < nregs; i++)
1283         {
1284           int best_cost = (1 << (HOST_BITS_PER_INT - 2)) - 1;
1285           enum reg_class best = ALL_REGS, alt = NO_REGS;
1286           /* This is an enum reg_class, but we call it an int
1287              to save lots of casts.  */
1288           int class;
1289           struct costs *p = &costs[i];
1290
1291           /* In non-optimizing compilation REG_N_REFS is not initialized
1292              yet.  */
1293           if (optimize && !REG_N_REFS (i) && !REG_N_SETS (i))
1294             continue;
1295
1296           for (class = (int) ALL_REGS - 1; class > 0; class--)
1297             {
1298               /* Ignore classes that are too small for this operand or
1299                  invalid for an operand that was auto-incremented.  */
1300               if (!contains_reg_of_mode [class][PSEUDO_REGNO_MODE (i)]
1301 #ifdef FORBIDDEN_INC_DEC_CLASSES
1302                   || (in_inc_dec[i] && forbidden_inc_dec_class[class])
1303 #endif
1304 #ifdef CANNOT_CHANGE_MODE_CLASS
1305                   || invalid_mode_change_p (i, (enum reg_class) class,
1306                                             PSEUDO_REGNO_MODE (i))
1307 #endif
1308                   )
1309                 ;
1310               else if (p->cost[class] < best_cost)
1311                 {
1312                   best_cost = p->cost[class];
1313                   best = (enum reg_class) class;
1314                 }
1315               else if (p->cost[class] == best_cost)
1316                 best = reg_class_subunion[(int) best][class];
1317             }
1318
1319           /* Record the alternate register class; i.e., a class for which
1320              every register in it is better than using memory.  If adding a
1321              class would make a smaller class (i.e., no union of just those
1322              classes exists), skip that class.  The major unions of classes
1323              should be provided as a register class.  Don't do this if we
1324              will be doing it again later.  */
1325
1326           if ((pass == 1  || dump) || ! flag_expensive_optimizations)
1327             for (class = 0; class < N_REG_CLASSES; class++)
1328               if (p->cost[class] < p->mem_cost
1329                   && (reg_class_size[(int) reg_class_subunion[(int) alt][class]]
1330                       > reg_class_size[(int) alt])
1331 #ifdef FORBIDDEN_INC_DEC_CLASSES
1332                   && ! (in_inc_dec[i] && forbidden_inc_dec_class[class])
1333 #endif
1334 #ifdef CANNOT_CHANGE_MODE_CLASS
1335                   && ! invalid_mode_change_p (i, (enum reg_class) class,
1336                                               PSEUDO_REGNO_MODE (i))
1337 #endif
1338                   )
1339                 alt = reg_class_subunion[(int) alt][class];
1340
1341           /* If we don't add any classes, nothing to try.  */
1342           if (alt == best)
1343             alt = NO_REGS;
1344
1345           if (dump
1346               && (reg_pref[i].prefclass != (int) best
1347                   || reg_pref[i].altclass != (int) alt))
1348             {
1349               static const char *const reg_class_names[] = REG_CLASS_NAMES;
1350               fprintf (dump, "  Register %i", i);
1351               if (alt == ALL_REGS || best == ALL_REGS)
1352                 fprintf (dump, " pref %s\n", reg_class_names[(int) best]);
1353               else if (alt == NO_REGS)
1354                 fprintf (dump, " pref %s or none\n", reg_class_names[(int) best]);
1355               else
1356                 fprintf (dump, " pref %s, else %s\n",
1357                          reg_class_names[(int) best],
1358                          reg_class_names[(int) alt]);
1359             }
1360
1361           /* We cast to (int) because (char) hits bugs in some compilers.  */
1362           reg_pref[i].prefclass = (int) best;
1363           reg_pref[i].altclass = (int) alt;
1364         }
1365     }
1366
1367 #ifdef FORBIDDEN_INC_DEC_CLASSES
1368   free (in_inc_dec);
1369 #endif
1370   free (costs);
1371 }
1372 \f
1373 /* Record the cost of using memory or registers of various classes for
1374    the operands in INSN.
1375
1376    N_ALTS is the number of alternatives.
1377
1378    N_OPS is the number of operands.
1379
1380    OPS is an array of the operands.
1381
1382    MODES are the modes of the operands, in case any are VOIDmode.
1383
1384    CONSTRAINTS are the constraints to use for the operands.  This array
1385    is modified by this procedure.
1386
1387    This procedure works alternative by alternative.  For each alternative
1388    we assume that we will be able to allocate all pseudos to their ideal
1389    register class and calculate the cost of using that alternative.  Then
1390    we compute for each operand that is a pseudo-register, the cost of
1391    having the pseudo allocated to each register class and using it in that
1392    alternative.  To this cost is added the cost of the alternative.
1393
1394    The cost of each class for this insn is its lowest cost among all the
1395    alternatives.  */
1396
1397 static void
1398 record_reg_classes (int n_alts, int n_ops, rtx *ops,
1399                     enum machine_mode *modes, const char **constraints,
1400                     rtx insn, struct costs *op_costs,
1401                     struct reg_pref *reg_pref)
1402 {
1403   int alt;
1404   int i, j;
1405   rtx set;
1406
1407   /* Process each alternative, each time minimizing an operand's cost with
1408      the cost for each operand in that alternative.  */
1409
1410   for (alt = 0; alt < n_alts; alt++)
1411     {
1412       struct costs this_op_costs[MAX_RECOG_OPERANDS];
1413       int alt_fail = 0;
1414       int alt_cost = 0;
1415       enum reg_class classes[MAX_RECOG_OPERANDS];
1416       int allows_mem[MAX_RECOG_OPERANDS];
1417       int class;
1418
1419       for (i = 0; i < n_ops; i++)
1420         {
1421           const char *p = constraints[i];
1422           rtx op = ops[i];
1423           enum machine_mode mode = modes[i];
1424           int allows_addr = 0;
1425           int win = 0;
1426           unsigned char c;
1427
1428           /* Initially show we know nothing about the register class.  */
1429           classes[i] = NO_REGS;
1430           allows_mem[i] = 0;
1431
1432           /* If this operand has no constraints at all, we can conclude
1433              nothing about it since anything is valid.  */
1434
1435           if (*p == 0)
1436             {
1437               if (REG_P (op) && REGNO (op) >= FIRST_PSEUDO_REGISTER)
1438                 memset (&this_op_costs[i], 0, sizeof this_op_costs[i]);
1439
1440               continue;
1441             }
1442
1443           /* If this alternative is only relevant when this operand
1444              matches a previous operand, we do different things depending
1445              on whether this operand is a pseudo-reg or not.  We must process
1446              any modifiers for the operand before we can make this test.  */
1447
1448           while (*p == '%' || *p == '=' || *p == '+' || *p == '&')
1449             p++;
1450
1451           if (p[0] >= '0' && p[0] <= '0' + i && (p[1] == ',' || p[1] == 0))
1452             {
1453               /* Copy class and whether memory is allowed from the matching
1454                  alternative.  Then perform any needed cost computations
1455                  and/or adjustments.  */
1456               j = p[0] - '0';
1457               classes[i] = classes[j];
1458               allows_mem[i] = allows_mem[j];
1459
1460               if (!REG_P (op) || REGNO (op) < FIRST_PSEUDO_REGISTER)
1461                 {
1462                   /* If this matches the other operand, we have no added
1463                      cost and we win.  */
1464                   if (rtx_equal_p (ops[j], op))
1465                     win = 1;
1466
1467                   /* If we can put the other operand into a register, add to
1468                      the cost of this alternative the cost to copy this
1469                      operand to the register used for the other operand.  */
1470
1471                   else if (classes[j] != NO_REGS)
1472                     alt_cost += copy_cost (op, mode, classes[j], 1), win = 1;
1473                 }
1474               else if (!REG_P (ops[j])
1475                        || REGNO (ops[j]) < FIRST_PSEUDO_REGISTER)
1476                 {
1477                   /* This op is a pseudo but the one it matches is not.  */
1478
1479                   /* If we can't put the other operand into a register, this
1480                      alternative can't be used.  */
1481
1482                   if (classes[j] == NO_REGS)
1483                     alt_fail = 1;
1484
1485                   /* Otherwise, add to the cost of this alternative the cost
1486                      to copy the other operand to the register used for this
1487                      operand.  */
1488
1489                   else
1490                     alt_cost += copy_cost (ops[j], mode, classes[j], 1);
1491                 }
1492               else
1493                 {
1494                   /* The costs of this operand are not the same as the other
1495                      operand since move costs are not symmetric.  Moreover,
1496                      if we cannot tie them, this alternative needs to do a
1497                      copy, which is one instruction.  */
1498
1499                   struct costs *pp = &this_op_costs[i];
1500
1501                   for (class = 0; class < N_REG_CLASSES; class++)
1502                     pp->cost[class]
1503                       = ((recog_data.operand_type[i] != OP_OUT
1504                           ? may_move_in_cost[mode][class][(int) classes[i]]
1505                           : 0)
1506                          + (recog_data.operand_type[i] != OP_IN
1507                             ? may_move_out_cost[mode][(int) classes[i]][class]
1508                             : 0));
1509
1510                   /* If the alternative actually allows memory, make things
1511                      a bit cheaper since we won't need an extra insn to
1512                      load it.  */
1513
1514                   pp->mem_cost
1515                     = ((recog_data.operand_type[i] != OP_IN
1516                         ? MEMORY_MOVE_COST (mode, classes[i], 0)
1517                         : 0)
1518                        + (recog_data.operand_type[i] != OP_OUT
1519                           ? MEMORY_MOVE_COST (mode, classes[i], 1)
1520                           : 0) - allows_mem[i]);
1521
1522                   /* If we have assigned a class to this register in our
1523                      first pass, add a cost to this alternative corresponding
1524                      to what we would add if this register were not in the
1525                      appropriate class.  */
1526
1527                   if (reg_pref)
1528                     alt_cost
1529                       += (may_move_in_cost[mode]
1530                           [(unsigned char) reg_pref[REGNO (op)].prefclass]
1531                           [(int) classes[i]]);
1532
1533                   if (REGNO (ops[i]) != REGNO (ops[j])
1534                       && ! find_reg_note (insn, REG_DEAD, op))
1535                     alt_cost += 2;
1536
1537                   /* This is in place of ordinary cost computation
1538                      for this operand, so skip to the end of the
1539                      alternative (should be just one character).  */
1540                   while (*p && *p++ != ',')
1541                     ;
1542
1543                   constraints[i] = p;
1544                   continue;
1545                 }
1546             }
1547
1548           /* Scan all the constraint letters.  See if the operand matches
1549              any of the constraints.  Collect the valid register classes
1550              and see if this operand accepts memory.  */
1551
1552           while ((c = *p))
1553             {
1554               switch (c)
1555                 {
1556                 case ',':
1557                   break;
1558                 case '*':
1559                   /* Ignore the next letter for this pass.  */
1560                   c = *++p;
1561                   break;
1562
1563                 case '?':
1564                   alt_cost += 2;
1565                 case '!':  case '#':  case '&':
1566                 case '0':  case '1':  case '2':  case '3':  case '4':
1567                 case '5':  case '6':  case '7':  case '8':  case '9':
1568                   break;
1569
1570                 case 'p':
1571                   allows_addr = 1;
1572                   win = address_operand (op, GET_MODE (op));
1573                   /* We know this operand is an address, so we want it to be
1574                      allocated to a register that can be the base of an
1575                      address, ie BASE_REG_CLASS.  */
1576                   classes[i]
1577                     = reg_class_subunion[(int) classes[i]]
1578                       [(int) MODE_BASE_REG_CLASS (VOIDmode)];
1579                   break;
1580
1581                 case 'm':  case 'o':  case 'V':
1582                   /* It doesn't seem worth distinguishing between offsettable
1583                      and non-offsettable addresses here.  */
1584                   allows_mem[i] = 1;
1585                   if (MEM_P (op))
1586                     win = 1;
1587                   break;
1588
1589                 case '<':
1590                   if (MEM_P (op)
1591                       && (GET_CODE (XEXP (op, 0)) == PRE_DEC
1592                           || GET_CODE (XEXP (op, 0)) == POST_DEC))
1593                     win = 1;
1594                   break;
1595
1596                 case '>':
1597                   if (MEM_P (op)
1598                       && (GET_CODE (XEXP (op, 0)) == PRE_INC
1599                           || GET_CODE (XEXP (op, 0)) == POST_INC))
1600                     win = 1;
1601                   break;
1602
1603                 case 'E':
1604                 case 'F':
1605                   if (GET_CODE (op) == CONST_DOUBLE
1606                       || (GET_CODE (op) == CONST_VECTOR
1607                           && (GET_MODE_CLASS (GET_MODE (op))
1608                               == MODE_VECTOR_FLOAT)))
1609                     win = 1;
1610                   break;
1611
1612                 case 'G':
1613                 case 'H':
1614                   if (GET_CODE (op) == CONST_DOUBLE
1615                       && CONST_DOUBLE_OK_FOR_CONSTRAINT_P (op, c, p))
1616                     win = 1;
1617                   break;
1618
1619                 case 's':
1620                   if (GET_CODE (op) == CONST_INT
1621                       || (GET_CODE (op) == CONST_DOUBLE
1622                           && GET_MODE (op) == VOIDmode))
1623                     break;
1624                 case 'i':
1625                   if (CONSTANT_P (op)
1626                       && (! flag_pic || LEGITIMATE_PIC_OPERAND_P (op)))
1627                     win = 1;
1628                   break;
1629
1630                 case 'n':
1631                   if (GET_CODE (op) == CONST_INT
1632                       || (GET_CODE (op) == CONST_DOUBLE
1633                           && GET_MODE (op) == VOIDmode))
1634                     win = 1;
1635                   break;
1636
1637                 case 'I':
1638                 case 'J':
1639                 case 'K':
1640                 case 'L':
1641                 case 'M':
1642                 case 'N':
1643                 case 'O':
1644                 case 'P':
1645                   if (GET_CODE (op) == CONST_INT
1646                       && CONST_OK_FOR_CONSTRAINT_P (INTVAL (op), c, p))
1647                     win = 1;
1648                   break;
1649
1650                 case 'X':
1651                   win = 1;
1652                   break;
1653
1654                 case 'g':
1655                   if (MEM_P (op)
1656                       || (CONSTANT_P (op)
1657                           && (! flag_pic || LEGITIMATE_PIC_OPERAND_P (op))))
1658                     win = 1;
1659                   allows_mem[i] = 1;
1660                 case 'r':
1661                   classes[i]
1662                     = reg_class_subunion[(int) classes[i]][(int) GENERAL_REGS];
1663                   break;
1664
1665                 default:
1666                   if (REG_CLASS_FROM_CONSTRAINT (c, p) != NO_REGS)
1667                     classes[i]
1668                       = reg_class_subunion[(int) classes[i]]
1669                         [(int) REG_CLASS_FROM_CONSTRAINT (c, p)];
1670 #ifdef EXTRA_CONSTRAINT_STR
1671                   else if (EXTRA_CONSTRAINT_STR (op, c, p))
1672                     win = 1;
1673
1674                   if (EXTRA_MEMORY_CONSTRAINT (c, p))
1675                     {
1676                       /* Every MEM can be reloaded to fit.  */
1677                       allows_mem[i] = 1;
1678                       if (MEM_P (op))
1679                         win = 1;
1680                     }
1681                   if (EXTRA_ADDRESS_CONSTRAINT (c, p))
1682                     {
1683                       /* Every address can be reloaded to fit.  */
1684                       allows_addr = 1;
1685                       if (address_operand (op, GET_MODE (op)))
1686                         win = 1;
1687                       /* We know this operand is an address, so we want it to
1688                          be allocated to a register that can be the base of an
1689                          address, ie BASE_REG_CLASS.  */
1690                       classes[i]
1691                         = reg_class_subunion[(int) classes[i]]
1692                           [(int) MODE_BASE_REG_CLASS (VOIDmode)];
1693                     }
1694 #endif
1695                   break;
1696                 }
1697               p += CONSTRAINT_LEN (c, p);
1698               if (c == ',')
1699                 break;
1700             }
1701
1702           constraints[i] = p;
1703
1704           /* How we account for this operand now depends on whether it is  a
1705              pseudo register or not.  If it is, we first check if any
1706              register classes are valid.  If not, we ignore this alternative,
1707              since we want to assume that all pseudos get allocated for
1708              register preferencing.  If some register class is valid, compute
1709              the costs of moving the pseudo into that class.  */
1710
1711           if (REG_P (op) && REGNO (op) >= FIRST_PSEUDO_REGISTER)
1712             {
1713               if (classes[i] == NO_REGS)
1714                 {
1715                   /* We must always fail if the operand is a REG, but
1716                      we did not find a suitable class.
1717
1718                      Otherwise we may perform an uninitialized read
1719                      from this_op_costs after the `continue' statement
1720                      below.  */
1721                   alt_fail = 1;
1722                 }
1723               else
1724                 {
1725                   struct costs *pp = &this_op_costs[i];
1726
1727                   for (class = 0; class < N_REG_CLASSES; class++)
1728                     pp->cost[class]
1729                       = ((recog_data.operand_type[i] != OP_OUT
1730                           ? may_move_in_cost[mode][class][(int) classes[i]]
1731                           : 0)
1732                          + (recog_data.operand_type[i] != OP_IN
1733                             ? may_move_out_cost[mode][(int) classes[i]][class]
1734                             : 0));
1735
1736                   /* If the alternative actually allows memory, make things
1737                      a bit cheaper since we won't need an extra insn to
1738                      load it.  */
1739
1740                   pp->mem_cost
1741                     = ((recog_data.operand_type[i] != OP_IN
1742                         ? MEMORY_MOVE_COST (mode, classes[i], 0)
1743                         : 0)
1744                        + (recog_data.operand_type[i] != OP_OUT
1745                           ? MEMORY_MOVE_COST (mode, classes[i], 1)
1746                           : 0) - allows_mem[i]);
1747
1748                   /* If we have assigned a class to this register in our
1749                      first pass, add a cost to this alternative corresponding
1750                      to what we would add if this register were not in the
1751                      appropriate class.  */
1752
1753                   if (reg_pref)
1754                     alt_cost
1755                       += (may_move_in_cost[mode]
1756                           [(unsigned char) reg_pref[REGNO (op)].prefclass]
1757                           [(int) classes[i]]);
1758                 }
1759             }
1760
1761           /* Otherwise, if this alternative wins, either because we
1762              have already determined that or if we have a hard register of
1763              the proper class, there is no cost for this alternative.  */
1764
1765           else if (win
1766                    || (REG_P (op)
1767                        && reg_fits_class_p (op, classes[i], 0, GET_MODE (op))))
1768             ;
1769
1770           /* If registers are valid, the cost of this alternative includes
1771              copying the object to and/or from a register.  */
1772
1773           else if (classes[i] != NO_REGS)
1774             {
1775               if (recog_data.operand_type[i] != OP_OUT)
1776                 alt_cost += copy_cost (op, mode, classes[i], 1);
1777
1778               if (recog_data.operand_type[i] != OP_IN)
1779                 alt_cost += copy_cost (op, mode, classes[i], 0);
1780             }
1781
1782           /* The only other way this alternative can be used is if this is a
1783              constant that could be placed into memory.  */
1784
1785           else if (CONSTANT_P (op) && (allows_addr || allows_mem[i]))
1786             alt_cost += MEMORY_MOVE_COST (mode, classes[i], 1);
1787           else
1788             alt_fail = 1;
1789         }
1790
1791       if (alt_fail)
1792         continue;
1793
1794       /* Finally, update the costs with the information we've calculated
1795          about this alternative.  */
1796
1797       for (i = 0; i < n_ops; i++)
1798         if (REG_P (ops[i])
1799             && REGNO (ops[i]) >= FIRST_PSEUDO_REGISTER)
1800           {
1801             struct costs *pp = &op_costs[i], *qq = &this_op_costs[i];
1802             int scale = 1 + (recog_data.operand_type[i] == OP_INOUT);
1803
1804             pp->mem_cost = MIN (pp->mem_cost,
1805                                 (qq->mem_cost + alt_cost) * scale);
1806
1807             for (class = 0; class < N_REG_CLASSES; class++)
1808               pp->cost[class] = MIN (pp->cost[class],
1809                                      (qq->cost[class] + alt_cost) * scale);
1810           }
1811     }
1812
1813   /* If this insn is a single set copying operand 1 to operand 0
1814      and one operand is a pseudo with the other a hard reg or a pseudo
1815      that prefers a register that is in its own register class then
1816      we may want to adjust the cost of that register class to -1.
1817
1818      Avoid the adjustment if the source does not die to avoid stressing of
1819      register allocator by preferrencing two colliding registers into single
1820      class.
1821
1822      Also avoid the adjustment if a copy between registers of the class
1823      is expensive (ten times the cost of a default copy is considered
1824      arbitrarily expensive).  This avoids losing when the preferred class
1825      is very expensive as the source of a copy instruction.  */
1826
1827   if ((set = single_set (insn)) != 0
1828       && ops[0] == SET_DEST (set) && ops[1] == SET_SRC (set)
1829       && REG_P (ops[0]) && REG_P (ops[1])
1830       && find_regno_note (insn, REG_DEAD, REGNO (ops[1])))
1831     for (i = 0; i <= 1; i++)
1832       if (REGNO (ops[i]) >= FIRST_PSEUDO_REGISTER)
1833         {
1834           unsigned int regno = REGNO (ops[!i]);
1835           enum machine_mode mode = GET_MODE (ops[!i]);
1836           int class;
1837           unsigned int nr;
1838
1839           if (regno >= FIRST_PSEUDO_REGISTER && reg_pref != 0)
1840             {
1841               enum reg_class pref = reg_pref[regno].prefclass;
1842
1843               if ((reg_class_size[(unsigned char) pref]
1844                    == (unsigned) CLASS_MAX_NREGS (pref, mode))
1845                   && REGISTER_MOVE_COST (mode, pref, pref) < 10 * 2)
1846                 op_costs[i].cost[(unsigned char) pref] = -1;
1847             }
1848           else if (regno < FIRST_PSEUDO_REGISTER)
1849             for (class = 0; class < N_REG_CLASSES; class++)
1850               if (TEST_HARD_REG_BIT (reg_class_contents[class], regno)
1851                   && reg_class_size[class] == (unsigned) CLASS_MAX_NREGS (class, mode))
1852                 {
1853                   if (reg_class_size[class] == 1)
1854                     op_costs[i].cost[class] = -1;
1855                   else
1856                     {
1857                       for (nr = 0; nr < (unsigned) hard_regno_nregs[regno][mode]; nr++)
1858                         {
1859                           if (! TEST_HARD_REG_BIT (reg_class_contents[class],
1860                                                    regno + nr))
1861                             break;
1862                         }
1863
1864                       if (nr == (unsigned) hard_regno_nregs[regno][mode])
1865                         op_costs[i].cost[class] = -1;
1866                     }
1867                 }
1868         }
1869 }
1870 \f
1871 /* Compute the cost of loading X into (if TO_P is nonzero) or from (if
1872    TO_P is zero) a register of class CLASS in mode MODE.
1873
1874    X must not be a pseudo.  */
1875
1876 static int
1877 copy_cost (rtx x, enum machine_mode mode ATTRIBUTE_UNUSED,
1878            enum reg_class class, int to_p ATTRIBUTE_UNUSED)
1879 {
1880 #ifdef HAVE_SECONDARY_RELOADS
1881   enum reg_class secondary_class = NO_REGS;
1882 #endif
1883
1884   /* If X is a SCRATCH, there is actually nothing to move since we are
1885      assuming optimal allocation.  */
1886
1887   if (GET_CODE (x) == SCRATCH)
1888     return 0;
1889
1890   /* Get the class we will actually use for a reload.  */
1891   class = PREFERRED_RELOAD_CLASS (x, class);
1892
1893 #ifdef HAVE_SECONDARY_RELOADS
1894   /* If we need a secondary reload (we assume here that we are using
1895      the secondary reload as an intermediate, not a scratch register), the
1896      cost is that to load the input into the intermediate register, then
1897      to copy them.  We use a special value of TO_P to avoid recursion.  */
1898
1899 #ifdef SECONDARY_INPUT_RELOAD_CLASS
1900   if (to_p == 1)
1901     secondary_class = SECONDARY_INPUT_RELOAD_CLASS (class, mode, x);
1902 #endif
1903
1904 #ifdef SECONDARY_OUTPUT_RELOAD_CLASS
1905   if (! to_p)
1906     secondary_class = SECONDARY_OUTPUT_RELOAD_CLASS (class, mode, x);
1907 #endif
1908
1909   if (secondary_class != NO_REGS)
1910     return (move_cost[mode][(int) secondary_class][(int) class]
1911             + copy_cost (x, mode, secondary_class, 2));
1912 #endif  /* HAVE_SECONDARY_RELOADS */
1913
1914   /* For memory, use the memory move cost, for (hard) registers, use the
1915      cost to move between the register classes, and use 2 for everything
1916      else (constants).  */
1917
1918   if (MEM_P (x) || class == NO_REGS)
1919     return MEMORY_MOVE_COST (mode, class, to_p);
1920
1921   else if (REG_P (x))
1922     return move_cost[mode][(int) REGNO_REG_CLASS (REGNO (x))][(int) class];
1923
1924   else
1925     /* If this is a constant, we may eventually want to call rtx_cost here.  */
1926     return COSTS_N_INSNS (1);
1927 }
1928 \f
1929 /* Record the pseudo registers we must reload into hard registers
1930    in a subexpression of a memory address, X.
1931
1932    CLASS is the class that the register needs to be in and is either
1933    BASE_REG_CLASS or INDEX_REG_CLASS.
1934
1935    SCALE is twice the amount to multiply the cost by (it is twice so we
1936    can represent half-cost adjustments).  */
1937
1938 static void
1939 record_address_regs (rtx x, enum reg_class class, int scale)
1940 {
1941   enum rtx_code code = GET_CODE (x);
1942
1943   switch (code)
1944     {
1945     case CONST_INT:
1946     case CONST:
1947     case CC0:
1948     case PC:
1949     case SYMBOL_REF:
1950     case LABEL_REF:
1951       return;
1952
1953     case PLUS:
1954       /* When we have an address that is a sum,
1955          we must determine whether registers are "base" or "index" regs.
1956          If there is a sum of two registers, we must choose one to be
1957          the "base".  Luckily, we can use the REG_POINTER to make a good
1958          choice most of the time.  We only need to do this on machines
1959          that can have two registers in an address and where the base
1960          and index register classes are different.
1961
1962          ??? This code used to set REGNO_POINTER_FLAG in some cases, but
1963          that seems bogus since it should only be set when we are sure
1964          the register is being used as a pointer.  */
1965
1966       {
1967         rtx arg0 = XEXP (x, 0);
1968         rtx arg1 = XEXP (x, 1);
1969         enum rtx_code code0 = GET_CODE (arg0);
1970         enum rtx_code code1 = GET_CODE (arg1);
1971
1972         /* Look inside subregs.  */
1973         if (code0 == SUBREG)
1974           arg0 = SUBREG_REG (arg0), code0 = GET_CODE (arg0);
1975         if (code1 == SUBREG)
1976           arg1 = SUBREG_REG (arg1), code1 = GET_CODE (arg1);
1977
1978         /* If this machine only allows one register per address, it must
1979            be in the first operand.  */
1980
1981         if (MAX_REGS_PER_ADDRESS == 1)
1982           record_address_regs (arg0, class, scale);
1983
1984         /* If index and base registers are the same on this machine, just
1985            record registers in any non-constant operands.  We assume here,
1986            as well as in the tests below, that all addresses are in
1987            canonical form.  */
1988
1989         else if (INDEX_REG_CLASS == MODE_BASE_REG_CLASS (VOIDmode))
1990           {
1991             record_address_regs (arg0, class, scale);
1992             if (! CONSTANT_P (arg1))
1993               record_address_regs (arg1, class, scale);
1994           }
1995
1996         /* If the second operand is a constant integer, it doesn't change
1997            what class the first operand must be.  */
1998
1999         else if (code1 == CONST_INT || code1 == CONST_DOUBLE)
2000           record_address_regs (arg0, class, scale);
2001
2002         /* If the second operand is a symbolic constant, the first operand
2003            must be an index register.  */
2004
2005         else if (code1 == SYMBOL_REF || code1 == CONST || code1 == LABEL_REF)
2006           record_address_regs (arg0, INDEX_REG_CLASS, scale);
2007
2008         /* If both operands are registers but one is already a hard register
2009            of index or base class, give the other the class that the hard
2010            register is not.  */
2011
2012 #ifdef REG_OK_FOR_BASE_P
2013         else if (code0 == REG && code1 == REG
2014                  && REGNO (arg0) < FIRST_PSEUDO_REGISTER
2015                  && (REG_OK_FOR_BASE_P (arg0) || REG_OK_FOR_INDEX_P (arg0)))
2016           record_address_regs (arg1,
2017                                REG_OK_FOR_BASE_P (arg0)
2018                                ? INDEX_REG_CLASS : MODE_BASE_REG_CLASS (VOIDmode),
2019                                scale);
2020         else if (code0 == REG && code1 == REG
2021                  && REGNO (arg1) < FIRST_PSEUDO_REGISTER
2022                  && (REG_OK_FOR_BASE_P (arg1) || REG_OK_FOR_INDEX_P (arg1)))
2023           record_address_regs (arg0,
2024                                REG_OK_FOR_BASE_P (arg1)
2025                                ? INDEX_REG_CLASS : MODE_BASE_REG_CLASS (VOIDmode),
2026                                scale);
2027 #endif
2028
2029         /* If one operand is known to be a pointer, it must be the base
2030            with the other operand the index.  Likewise if the other operand
2031            is a MULT.  */
2032
2033         else if ((code0 == REG && REG_POINTER (arg0))
2034                  || code1 == MULT)
2035           {
2036             record_address_regs (arg0, MODE_BASE_REG_CLASS (VOIDmode), scale);
2037             record_address_regs (arg1, INDEX_REG_CLASS, scale);
2038           }
2039         else if ((code1 == REG && REG_POINTER (arg1))
2040                  || code0 == MULT)
2041           {
2042             record_address_regs (arg0, INDEX_REG_CLASS, scale);
2043             record_address_regs (arg1, MODE_BASE_REG_CLASS (VOIDmode), scale);
2044           }
2045
2046         /* Otherwise, count equal chances that each might be a base
2047            or index register.  This case should be rare.  */
2048
2049         else
2050           {
2051             record_address_regs (arg0, MODE_BASE_REG_CLASS (VOIDmode),
2052                                  scale / 2);
2053             record_address_regs (arg0, INDEX_REG_CLASS, scale / 2);
2054             record_address_regs (arg1, MODE_BASE_REG_CLASS (VOIDmode),
2055                                  scale / 2);
2056             record_address_regs (arg1, INDEX_REG_CLASS, scale / 2);
2057           }
2058       }
2059       break;
2060
2061       /* Double the importance of a pseudo register that is incremented
2062          or decremented, since it would take two extra insns
2063          if it ends up in the wrong place.  */
2064     case POST_MODIFY:
2065     case PRE_MODIFY:
2066       record_address_regs (XEXP (x, 0), MODE_BASE_REG_CLASS (VOIDmode),
2067                            2 * scale);
2068       if (REG_P (XEXP (XEXP (x, 1), 1)))
2069         record_address_regs (XEXP (XEXP (x, 1), 1),
2070                              INDEX_REG_CLASS, 2 * scale);
2071       break;
2072
2073     case POST_INC:
2074     case PRE_INC:
2075     case POST_DEC:
2076     case PRE_DEC:
2077       /* Double the importance of a pseudo register that is incremented
2078          or decremented, since it would take two extra insns
2079          if it ends up in the wrong place.  If the operand is a pseudo,
2080          show it is being used in an INC_DEC context.  */
2081
2082 #ifdef FORBIDDEN_INC_DEC_CLASSES
2083       if (REG_P (XEXP (x, 0))
2084           && REGNO (XEXP (x, 0)) >= FIRST_PSEUDO_REGISTER)
2085         in_inc_dec[REGNO (XEXP (x, 0))] = 1;
2086 #endif
2087
2088       record_address_regs (XEXP (x, 0), class, 2 * scale);
2089       break;
2090
2091     case REG:
2092       {
2093         struct costs *pp = &costs[REGNO (x)];
2094         int i;
2095
2096         pp->mem_cost += (MEMORY_MOVE_COST (Pmode, class, 1) * scale) / 2;
2097
2098         for (i = 0; i < N_REG_CLASSES; i++)
2099           pp->cost[i] += (may_move_in_cost[Pmode][i][(int) class] * scale) / 2;
2100       }
2101       break;
2102
2103     default:
2104       {
2105         const char *fmt = GET_RTX_FORMAT (code);
2106         int i;
2107         for (i = GET_RTX_LENGTH (code) - 1; i >= 0; i--)
2108           if (fmt[i] == 'e')
2109             record_address_regs (XEXP (x, i), class, scale);
2110       }
2111     }
2112 }
2113 \f
2114 #ifdef FORBIDDEN_INC_DEC_CLASSES
2115
2116 /* Return 1 if REG is valid as an auto-increment memory reference
2117    to an object of MODE.  */
2118
2119 static int
2120 auto_inc_dec_reg_p (rtx reg, enum machine_mode mode)
2121 {
2122   if (HAVE_POST_INCREMENT
2123       && memory_address_p (mode, gen_rtx_POST_INC (Pmode, reg)))
2124     return 1;
2125
2126   if (HAVE_POST_DECREMENT
2127       && memory_address_p (mode, gen_rtx_POST_DEC (Pmode, reg)))
2128     return 1;
2129
2130   if (HAVE_PRE_INCREMENT
2131       && memory_address_p (mode, gen_rtx_PRE_INC (Pmode, reg)))
2132     return 1;
2133
2134   if (HAVE_PRE_DECREMENT
2135       && memory_address_p (mode, gen_rtx_PRE_DEC (Pmode, reg)))
2136     return 1;
2137
2138   return 0;
2139 }
2140 #endif
2141 \f
2142 static short *renumber;
2143 static size_t regno_allocated;
2144 static unsigned int reg_n_max;
2145
2146 /* Allocate enough space to hold NUM_REGS registers for the tables used for
2147    reg_scan and flow_analysis that are indexed by the register number.  If
2148    NEW_P is nonzero, initialize all of the registers, otherwise only
2149    initialize the new registers allocated.  The same table is kept from
2150    function to function, only reallocating it when we need more room.  If
2151    RENUMBER_P is nonzero, allocate the reg_renumber array also.  */
2152
2153 void
2154 allocate_reg_info (size_t num_regs, int new_p, int renumber_p)
2155 {
2156   size_t size_info;
2157   size_t size_renumber;
2158   size_t min = (new_p) ? 0 : reg_n_max;
2159   struct reg_info_data *reg_data;
2160
2161   if (num_regs > regno_allocated)
2162     {
2163       size_t old_allocated = regno_allocated;
2164
2165       regno_allocated = num_regs + (num_regs / 20);     /* Add some slop space.  */
2166       size_renumber = regno_allocated * sizeof (short);
2167
2168       if (!reg_n_info)
2169         {
2170           VARRAY_REG_INIT (reg_n_info, regno_allocated, "reg_n_info");
2171           renumber = xmalloc (size_renumber);
2172           reg_pref_buffer = xmalloc (regno_allocated
2173                                      * sizeof (struct reg_pref));
2174         }
2175
2176       else
2177         {
2178           VARRAY_GROW (reg_n_info, regno_allocated);
2179
2180           if (new_p)            /* If we're zapping everything, no need to realloc.  */
2181             {
2182               free ((char *) renumber);
2183               free ((char *) reg_pref);
2184               renumber = xmalloc (size_renumber);
2185               reg_pref_buffer = xmalloc (regno_allocated
2186                                          * sizeof (struct reg_pref));
2187             }
2188
2189           else
2190             {
2191               renumber = xrealloc (renumber, size_renumber);
2192               reg_pref_buffer = xrealloc (reg_pref_buffer,
2193                                           regno_allocated
2194                                           * sizeof (struct reg_pref));
2195             }
2196         }
2197
2198       size_info = (regno_allocated - old_allocated) * sizeof (reg_info)
2199         + sizeof (struct reg_info_data) - sizeof (reg_info);
2200       reg_data = xcalloc (size_info, 1);
2201       reg_data->min_index = old_allocated;
2202       reg_data->max_index = regno_allocated - 1;
2203       reg_data->next = reg_info_head;
2204       reg_info_head = reg_data;
2205     }
2206
2207   reg_n_max = num_regs;
2208   if (min < num_regs)
2209     {
2210       /* Loop through each of the segments allocated for the actual
2211          reg_info pages, and set up the pointers, zero the pages, etc.  */
2212       for (reg_data = reg_info_head;
2213            reg_data && reg_data->max_index >= min;
2214            reg_data = reg_data->next)
2215         {
2216           size_t min_index = reg_data->min_index;
2217           size_t max_index = reg_data->max_index;
2218           size_t max = MIN (max_index, num_regs);
2219           size_t local_min = min - min_index;
2220           size_t i;
2221
2222           if (reg_data->min_index > num_regs)
2223             continue;
2224
2225           if (min < min_index)
2226             local_min = 0;
2227           if (!reg_data->used_p)        /* page just allocated with calloc */
2228             reg_data->used_p = 1;       /* no need to zero */
2229           else
2230             memset (&reg_data->data[local_min], 0,
2231                     sizeof (reg_info) * (max - min_index - local_min + 1));
2232
2233           for (i = min_index+local_min; i <= max; i++)
2234             {
2235               VARRAY_REG (reg_n_info, i) = &reg_data->data[i-min_index];
2236               REG_BASIC_BLOCK (i) = REG_BLOCK_UNKNOWN;
2237               renumber[i] = -1;
2238               reg_pref_buffer[i].prefclass = (char) NO_REGS;
2239               reg_pref_buffer[i].altclass = (char) NO_REGS;
2240             }
2241         }
2242     }
2243
2244   /* If {pref,alt}class have already been allocated, update the pointers to
2245      the newly realloced ones.  */
2246   if (reg_pref)
2247     reg_pref = reg_pref_buffer;
2248
2249   if (renumber_p)
2250     reg_renumber = renumber;
2251
2252   /* Tell the regset code about the new number of registers.  */
2253   MAX_REGNO_REG_SET (num_regs, new_p, renumber_p);
2254 }
2255
2256 /* Free up the space allocated by allocate_reg_info.  */
2257 void
2258 free_reg_info (void)
2259 {
2260   if (reg_n_info)
2261     {
2262       struct reg_info_data *reg_data;
2263       struct reg_info_data *reg_next;
2264
2265       VARRAY_FREE (reg_n_info);
2266       for (reg_data = reg_info_head; reg_data; reg_data = reg_next)
2267         {
2268           reg_next = reg_data->next;
2269           free ((char *) reg_data);
2270         }
2271
2272       free (reg_pref_buffer);
2273       reg_pref_buffer = (struct reg_pref *) 0;
2274       reg_info_head = (struct reg_info_data *) 0;
2275       renumber = (short *) 0;
2276     }
2277   regno_allocated = 0;
2278   reg_n_max = 0;
2279 }
2280 \f
2281 /* This is the `regscan' pass of the compiler, run just before cse
2282    and again just before loop.
2283
2284    It finds the first and last use of each pseudo-register
2285    and records them in the vectors regno_first_uid, regno_last_uid
2286    and counts the number of sets in the vector reg_n_sets.
2287
2288    REPEAT is nonzero the second time this is called.  */
2289
2290 /* Maximum number of parallel sets and clobbers in any insn in this fn.
2291    Always at least 3, since the combiner could put that many together
2292    and we want this to remain correct for all the remaining passes.
2293    This corresponds to the maximum number of times note_stores will call
2294    a function for any insn.  */
2295
2296 int max_parallel;
2297
2298 /* Used as a temporary to record the largest number of registers in
2299    PARALLEL in a SET_DEST.  This is added to max_parallel.  */
2300
2301 static int max_set_parallel;
2302
2303 void
2304 reg_scan (rtx f, unsigned int nregs, int repeat ATTRIBUTE_UNUSED)
2305 {
2306   rtx insn;
2307
2308   timevar_push (TV_REG_SCAN);
2309
2310   allocate_reg_info (nregs, TRUE, FALSE);
2311   max_parallel = 3;
2312   max_set_parallel = 0;
2313
2314   for (insn = f; insn; insn = NEXT_INSN (insn))
2315     if (INSN_P (insn))
2316       {
2317         rtx pat = PATTERN (insn);
2318         if (GET_CODE (pat) == PARALLEL
2319             && XVECLEN (pat, 0) > max_parallel)
2320           max_parallel = XVECLEN (pat, 0);
2321         reg_scan_mark_refs (pat, insn, 0, 0);
2322
2323         if (REG_NOTES (insn))
2324           reg_scan_mark_refs (REG_NOTES (insn), insn, 1, 0);
2325       }
2326
2327   max_parallel += max_set_parallel;
2328
2329   timevar_pop (TV_REG_SCAN);
2330 }
2331
2332 /* Update 'regscan' information by looking at the insns
2333    from FIRST to LAST.  Some new REGs have been created,
2334    and any REG with number greater than OLD_MAX_REGNO is
2335    such a REG.  We only update information for those.  */
2336
2337 void
2338 reg_scan_update (rtx first, rtx last, unsigned int old_max_regno)
2339 {
2340   rtx insn;
2341
2342   allocate_reg_info (max_reg_num (), FALSE, FALSE);
2343
2344   for (insn = first; insn != last; insn = NEXT_INSN (insn))
2345     if (INSN_P (insn))
2346       {
2347         rtx pat = PATTERN (insn);
2348         if (GET_CODE (pat) == PARALLEL
2349             && XVECLEN (pat, 0) > max_parallel)
2350           max_parallel = XVECLEN (pat, 0);
2351         reg_scan_mark_refs (pat, insn, 0, old_max_regno);
2352
2353         if (REG_NOTES (insn))
2354           reg_scan_mark_refs (REG_NOTES (insn), insn, 1, old_max_regno);
2355       }
2356 }
2357
2358 /* X is the expression to scan.  INSN is the insn it appears in.
2359    NOTE_FLAG is nonzero if X is from INSN's notes rather than its body.
2360    We should only record information for REGs with numbers
2361    greater than or equal to MIN_REGNO.  */
2362
2363 static void
2364 reg_scan_mark_refs (rtx x, rtx insn, int note_flag, unsigned int min_regno)
2365 {
2366   enum rtx_code code;
2367   rtx dest;
2368   rtx note;
2369
2370   if (!x)
2371     return;
2372   code = GET_CODE (x);
2373   switch (code)
2374     {
2375     case CONST:
2376     case CONST_INT:
2377     case CONST_DOUBLE:
2378     case CONST_VECTOR:
2379     case CC0:
2380     case PC:
2381     case SYMBOL_REF:
2382     case LABEL_REF:
2383     case ADDR_VEC:
2384     case ADDR_DIFF_VEC:
2385       return;
2386
2387     case REG:
2388       {
2389         unsigned int regno = REGNO (x);
2390
2391         if (regno >= min_regno)
2392           {
2393             REGNO_LAST_NOTE_UID (regno) = INSN_UID (insn);
2394             if (!note_flag)
2395               REGNO_LAST_UID (regno) = INSN_UID (insn);
2396             if (REGNO_FIRST_UID (regno) == 0)
2397               REGNO_FIRST_UID (regno) = INSN_UID (insn);
2398             /* If we are called by reg_scan_update() (indicated by min_regno
2399                being set), we also need to update the reference count.  */
2400             if (min_regno)
2401               REG_N_REFS (regno)++;
2402           }
2403       }
2404       break;
2405
2406     case EXPR_LIST:
2407       if (XEXP (x, 0))
2408         reg_scan_mark_refs (XEXP (x, 0), insn, note_flag, min_regno);
2409       if (XEXP (x, 1))
2410         reg_scan_mark_refs (XEXP (x, 1), insn, note_flag, min_regno);
2411       break;
2412
2413     case INSN_LIST:
2414       if (XEXP (x, 1))
2415         reg_scan_mark_refs (XEXP (x, 1), insn, note_flag, min_regno);
2416       break;
2417
2418     case CLOBBER:
2419       {
2420         rtx reg = XEXP (x, 0);
2421         if (REG_P (reg)
2422             && REGNO (reg) >= min_regno)
2423           {
2424             REG_N_SETS (REGNO (reg))++;
2425             REG_N_REFS (REGNO (reg))++;
2426           }
2427         else if (MEM_P (reg))
2428           reg_scan_mark_refs (XEXP (reg, 0), insn, note_flag, min_regno);
2429       }
2430       break;
2431
2432     case SET:
2433       /* Count a set of the destination if it is a register.  */
2434       for (dest = SET_DEST (x);
2435            GET_CODE (dest) == SUBREG || GET_CODE (dest) == STRICT_LOW_PART
2436            || GET_CODE (dest) == ZERO_EXTEND;
2437            dest = XEXP (dest, 0))
2438         ;
2439
2440       /* For a PARALLEL, record the number of things (less the usual one for a
2441          SET) that are set.  */
2442       if (GET_CODE (dest) == PARALLEL)
2443         max_set_parallel = MAX (max_set_parallel, XVECLEN (dest, 0) - 1);
2444
2445       if (REG_P (dest)
2446           && REGNO (dest) >= min_regno)
2447         {
2448           REG_N_SETS (REGNO (dest))++;
2449           REG_N_REFS (REGNO (dest))++;
2450         }
2451
2452       /* If this is setting a pseudo from another pseudo or the sum of a
2453          pseudo and a constant integer and the other pseudo is known to be
2454          a pointer, set the destination to be a pointer as well.
2455
2456          Likewise if it is setting the destination from an address or from a
2457          value equivalent to an address or to the sum of an address and
2458          something else.
2459
2460          But don't do any of this if the pseudo corresponds to a user
2461          variable since it should have already been set as a pointer based
2462          on the type.  */
2463
2464       if (REG_P (SET_DEST (x))
2465           && REGNO (SET_DEST (x)) >= FIRST_PSEUDO_REGISTER
2466           && REGNO (SET_DEST (x)) >= min_regno
2467           /* If the destination pseudo is set more than once, then other
2468              sets might not be to a pointer value (consider access to a
2469              union in two threads of control in the presence of global
2470              optimizations).  So only set REG_POINTER on the destination
2471              pseudo if this is the only set of that pseudo.  */
2472           && REG_N_SETS (REGNO (SET_DEST (x))) == 1
2473           && ! REG_USERVAR_P (SET_DEST (x))
2474           && ! REG_POINTER (SET_DEST (x))
2475           && ((REG_P (SET_SRC (x))
2476                && REG_POINTER (SET_SRC (x)))
2477               || ((GET_CODE (SET_SRC (x)) == PLUS
2478                    || GET_CODE (SET_SRC (x)) == LO_SUM)
2479                   && GET_CODE (XEXP (SET_SRC (x), 1)) == CONST_INT
2480                   && REG_P (XEXP (SET_SRC (x), 0))
2481                   && REG_POINTER (XEXP (SET_SRC (x), 0)))
2482               || GET_CODE (SET_SRC (x)) == CONST
2483               || GET_CODE (SET_SRC (x)) == SYMBOL_REF
2484               || GET_CODE (SET_SRC (x)) == LABEL_REF
2485               || (GET_CODE (SET_SRC (x)) == HIGH
2486                   && (GET_CODE (XEXP (SET_SRC (x), 0)) == CONST
2487                       || GET_CODE (XEXP (SET_SRC (x), 0)) == SYMBOL_REF
2488                       || GET_CODE (XEXP (SET_SRC (x), 0)) == LABEL_REF))
2489               || ((GET_CODE (SET_SRC (x)) == PLUS
2490                    || GET_CODE (SET_SRC (x)) == LO_SUM)
2491                   && (GET_CODE (XEXP (SET_SRC (x), 1)) == CONST
2492                       || GET_CODE (XEXP (SET_SRC (x), 1)) == SYMBOL_REF
2493                       || GET_CODE (XEXP (SET_SRC (x), 1)) == LABEL_REF))
2494               || ((note = find_reg_note (insn, REG_EQUAL, 0)) != 0
2495                   && (GET_CODE (XEXP (note, 0)) == CONST
2496                       || GET_CODE (XEXP (note, 0)) == SYMBOL_REF
2497                       || GET_CODE (XEXP (note, 0)) == LABEL_REF))))
2498         REG_POINTER (SET_DEST (x)) = 1;
2499
2500       /* If this is setting a register from a register or from a simple
2501          conversion of a register, propagate REG_EXPR.  */
2502       if (REG_P (dest))
2503         {
2504           rtx src = SET_SRC (x);
2505
2506           while (GET_CODE (src) == SIGN_EXTEND
2507                  || GET_CODE (src) == ZERO_EXTEND
2508                  || GET_CODE (src) == TRUNCATE
2509                  || (GET_CODE (src) == SUBREG && subreg_lowpart_p (src)))
2510             src = XEXP (src, 0);
2511
2512           if (!REG_ATTRS (dest) && REG_P (src))
2513             REG_ATTRS (dest) = REG_ATTRS (src);
2514           if (!REG_ATTRS (dest) && MEM_P (src))
2515             set_reg_attrs_from_mem (dest, src);
2516         }
2517
2518       /* ... fall through ...  */
2519
2520     default:
2521       {
2522         const char *fmt = GET_RTX_FORMAT (code);
2523         int i;
2524         for (i = GET_RTX_LENGTH (code) - 1; i >= 0; i--)
2525           {
2526             if (fmt[i] == 'e')
2527               reg_scan_mark_refs (XEXP (x, i), insn, note_flag, min_regno);
2528             else if (fmt[i] == 'E' && XVEC (x, i) != 0)
2529               {
2530                 int j;
2531                 for (j = XVECLEN (x, i) - 1; j >= 0; j--)
2532                   reg_scan_mark_refs (XVECEXP (x, i, j), insn, note_flag, min_regno);
2533               }
2534           }
2535       }
2536     }
2537 }
2538 \f
2539 /* Return nonzero if C1 is a subset of C2, i.e., if every register in C1
2540    is also in C2.  */
2541
2542 int
2543 reg_class_subset_p (enum reg_class c1, enum reg_class c2)
2544 {
2545   if (c1 == c2) return 1;
2546
2547   if (c2 == ALL_REGS)
2548   win:
2549     return 1;
2550   GO_IF_HARD_REG_SUBSET (reg_class_contents[(int) c1],
2551                          reg_class_contents[(int) c2],
2552                          win);
2553   return 0;
2554 }
2555
2556 /* Return nonzero if there is a register that is in both C1 and C2.  */
2557
2558 int
2559 reg_classes_intersect_p (enum reg_class c1, enum reg_class c2)
2560 {
2561   HARD_REG_SET c;
2562
2563   if (c1 == c2) return 1;
2564
2565   if (c1 == ALL_REGS || c2 == ALL_REGS)
2566     return 1;
2567
2568   COPY_HARD_REG_SET (c, reg_class_contents[(int) c1]);
2569   AND_HARD_REG_SET (c, reg_class_contents[(int) c2]);
2570
2571   GO_IF_HARD_REG_SUBSET (c, reg_class_contents[(int) NO_REGS], lose);
2572   return 1;
2573
2574  lose:
2575   return 0;
2576 }
2577
2578 /* Release any memory allocated by register sets.  */
2579
2580 void
2581 regset_release_memory (void)
2582 {
2583   bitmap_release_memory ();
2584 }
2585
2586 #ifdef CANNOT_CHANGE_MODE_CLASS
2587 /* Set bits in *USED which correspond to registers which can't change
2588    their mode from FROM to any mode in which REGNO was encountered.  */
2589
2590 void
2591 cannot_change_mode_set_regs (HARD_REG_SET *used, enum machine_mode from,
2592                              unsigned int regno)
2593 {
2594   enum machine_mode to;
2595   int n, i;
2596   int start = regno * MAX_MACHINE_MODE;
2597
2598   EXECUTE_IF_SET_IN_BITMAP (&subregs_of_mode, start, n,
2599     if (n >= MAX_MACHINE_MODE + start)
2600       return;
2601     to = n - start;
2602     for (i = 0; i < FIRST_PSEUDO_REGISTER; i++)
2603       if (! TEST_HARD_REG_BIT (*used, i)
2604           && REG_CANNOT_CHANGE_MODE_P (i, from, to))
2605         SET_HARD_REG_BIT (*used, i);
2606   );
2607 }
2608
2609 /* Return 1 if REGNO has had an invalid mode change in CLASS from FROM
2610    mode.  */
2611
2612 bool
2613 invalid_mode_change_p (unsigned int regno, enum reg_class class,
2614                        enum machine_mode from_mode)
2615 {
2616   enum machine_mode to_mode;
2617   int n;
2618   int start = regno * MAX_MACHINE_MODE;
2619
2620   EXECUTE_IF_SET_IN_BITMAP (&subregs_of_mode, start, n,
2621     if (n >= MAX_MACHINE_MODE + start)
2622       return 0;
2623     to_mode = n - start;
2624     if (CANNOT_CHANGE_MODE_CLASS (from_mode, to_mode, class))
2625       return 1;
2626   );
2627   return 0;
2628 }
2629 #endif /* CANNOT_CHANGE_MODE_CLASS */
2630
2631 #include "gt-regclass.h"