OSDN Git Service

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