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