OSDN Git Service

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