Do not do src->dest copy if register would not be allocated a normal register
[official-gcc.git] / gcc / regclass.c
blobe7ea926b2746ec8764cdedf50cf48dbaf1f4790b
1 /* Compute register class preferences for pseudo-registers.
2 Copyright (C) 1987, 88, 91-97, 1998 Free Software Foundation, Inc.
4 This file is part of GNU CC.
6 GNU CC is free software; you can redistribute it and/or modify
7 it under the terms of the GNU General Public License as published by
8 the Free Software Foundation; either version 2, or (at your option)
9 any later version.
11 GNU CC is distributed in the hope that it will be useful,
12 but WITHOUT ANY WARRANTY; without even the implied warranty of
13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 GNU General Public License for more details.
16 You should have received a copy of the GNU General Public License
17 along with GNU CC; see the file COPYING. If not, write to
18 the Free Software Foundation, 59 Temple Place - Suite 330,
19 Boston, MA 02111-1307, USA. */
22 /* This file contains two passes of the compiler: reg_scan and reg_class.
23 It also defines some tables of information about the hardware registers
24 and a function init_reg_sets to initialize the tables. */
26 #include "config.h"
27 #include "system.h"
28 #include "rtl.h"
29 #include "hard-reg-set.h"
30 #include "flags.h"
31 #include "basic-block.h"
32 #include "regs.h"
33 #include "insn-config.h"
34 #include "recog.h"
35 #include "reload.h"
36 #include "real.h"
37 #include "toplev.h"
38 #include "output.h"
40 #ifndef REGISTER_MOVE_COST
41 #define REGISTER_MOVE_COST(x, y) 2
42 #endif
44 /* If we have auto-increment or auto-decrement and we can have secondary
45 reloads, we are not allowed to use classes requiring secondary
46 reloads for pseudos auto-incremented since reload can't handle it. */
48 #ifdef AUTO_INC_DEC
49 #if defined(SECONDARY_INPUT_RELOAD_CLASS) || defined(SECONDARY_OUTPUT_RELOAD_CLASS)
50 #define FORBIDDEN_INC_DEC_CLASSES
51 #endif
52 #endif
54 /* Register tables used by many passes. */
56 /* Indexed by hard register number, contains 1 for registers
57 that are fixed use (stack pointer, pc, frame pointer, etc.).
58 These are the registers that cannot be used to allocate
59 a pseudo reg whose life does not cross calls. */
61 char fixed_regs[FIRST_PSEUDO_REGISTER];
63 /* Same info as a HARD_REG_SET. */
65 HARD_REG_SET fixed_reg_set;
67 /* Data for initializing the above. */
69 static char initial_fixed_regs[] = FIXED_REGISTERS;
71 /* Indexed by hard register number, contains 1 for registers
72 that are fixed use or are clobbered by function calls.
73 These are the registers that cannot be used to allocate
74 a pseudo reg whose life crosses calls. */
76 char call_used_regs[FIRST_PSEUDO_REGISTER];
78 /* Same info as a HARD_REG_SET. */
80 HARD_REG_SET call_used_reg_set;
82 /* HARD_REG_SET of registers we want to avoid caller saving. */
83 HARD_REG_SET losing_caller_save_reg_set;
85 /* Data for initializing the above. */
87 static char initial_call_used_regs[] = CALL_USED_REGISTERS;
89 /* Indexed by hard register number, contains 1 for registers that are
90 fixed use -- i.e. in fixed_regs -- or a function value return register
91 or STRUCT_VALUE_REGNUM or STATIC_CHAIN_REGNUM. These are the
92 registers that cannot hold quantities across calls even if we are
93 willing to save and restore them. */
95 char call_fixed_regs[FIRST_PSEUDO_REGISTER];
97 /* The same info as a HARD_REG_SET. */
99 HARD_REG_SET call_fixed_reg_set;
101 /* Number of non-fixed registers. */
103 int n_non_fixed_regs;
105 /* Indexed by hard register number, contains 1 for registers
106 that are being used for global register decls.
107 These must be exempt from ordinary flow analysis
108 and are also considered fixed. */
110 char global_regs[FIRST_PSEUDO_REGISTER];
112 /* Table of register numbers in the order in which to try to use them. */
113 #ifdef REG_ALLOC_ORDER
114 int reg_alloc_order[FIRST_PSEUDO_REGISTER] = REG_ALLOC_ORDER;
115 #endif
117 /* For each reg class, a HARD_REG_SET saying which registers are in it. */
119 HARD_REG_SET reg_class_contents[N_REG_CLASSES];
121 /* The same information, but as an array of unsigned ints. We copy from
122 these unsigned ints to the table above. We do this so the tm.h files
123 do not have to be aware of the wordsize for machines with <= 64 regs. */
125 #define N_REG_INTS \
126 ((FIRST_PSEUDO_REGISTER + (HOST_BITS_PER_INT - 1)) / HOST_BITS_PER_INT)
128 static unsigned int_reg_class_contents[N_REG_CLASSES][N_REG_INTS]
129 = REG_CLASS_CONTENTS;
131 /* For each reg class, number of regs it contains. */
133 int reg_class_size[N_REG_CLASSES];
135 /* For each reg class, table listing all the containing classes. */
137 enum reg_class reg_class_superclasses[N_REG_CLASSES][N_REG_CLASSES];
139 /* For each reg class, table listing all the classes contained in it. */
141 enum reg_class reg_class_subclasses[N_REG_CLASSES][N_REG_CLASSES];
143 /* For each pair of reg classes,
144 a largest reg class contained in their union. */
146 enum reg_class reg_class_subunion[N_REG_CLASSES][N_REG_CLASSES];
148 /* For each pair of reg classes,
149 the smallest reg class containing their union. */
151 enum reg_class reg_class_superunion[N_REG_CLASSES][N_REG_CLASSES];
153 /* Array containing all of the register names */
155 char *reg_names[] = REGISTER_NAMES;
157 /* For each hard register, the widest mode object that it can contain.
158 This will be a MODE_INT mode if the register can hold integers. Otherwise
159 it will be a MODE_FLOAT or a MODE_CC mode, whichever is valid for the
160 register. */
162 enum machine_mode reg_raw_mode[FIRST_PSEUDO_REGISTER];
164 /* Maximum cost of moving from a register in one class to a register in
165 another class. Based on REGISTER_MOVE_COST. */
167 static int move_cost[N_REG_CLASSES][N_REG_CLASSES];
169 /* Similar, but here we don't have to move if the first index is a subset
170 of the second so in that case the cost is zero. */
172 static int may_move_cost[N_REG_CLASSES][N_REG_CLASSES];
174 #ifdef FORBIDDEN_INC_DEC_CLASSES
176 /* These are the classes that regs which are auto-incremented or decremented
177 cannot be put in. */
179 static int forbidden_inc_dec_class[N_REG_CLASSES];
181 /* Indexed by n, is non-zero if (REG n) is used in an auto-inc or auto-dec
182 context. */
184 static char *in_inc_dec;
186 #endif /* FORBIDDEN_INC_DEC_CLASSES */
188 #ifdef HAVE_SECONDARY_RELOADS
190 /* Sample MEM values for use by memory_move_secondary_cost. */
192 static rtx top_of_stack[MAX_MACHINE_MODE];
194 #endif /* HAVE_SECONDARY_RELOADS */
196 /* Function called only once to initialize the above data on reg usage.
197 Once this is done, various switches may override. */
199 void
200 init_reg_sets ()
202 register int i, j;
204 /* First copy the register information from the initial int form into
205 the regsets. */
207 for (i = 0; i < N_REG_CLASSES; i++)
209 CLEAR_HARD_REG_SET (reg_class_contents[i]);
211 for (j = 0; j < FIRST_PSEUDO_REGISTER; j++)
212 if (int_reg_class_contents[i][j / HOST_BITS_PER_INT]
213 & ((unsigned) 1 << (j % HOST_BITS_PER_INT)))
214 SET_HARD_REG_BIT (reg_class_contents[i], j);
217 bcopy (initial_fixed_regs, fixed_regs, sizeof fixed_regs);
218 bcopy (initial_call_used_regs, call_used_regs, sizeof call_used_regs);
219 bzero (global_regs, sizeof global_regs);
221 /* Compute number of hard regs in each class. */
223 bzero ((char *) reg_class_size, sizeof reg_class_size);
224 for (i = 0; i < N_REG_CLASSES; i++)
225 for (j = 0; j < FIRST_PSEUDO_REGISTER; j++)
226 if (TEST_HARD_REG_BIT (reg_class_contents[i], j))
227 reg_class_size[i]++;
229 /* Initialize the table of subunions.
230 reg_class_subunion[I][J] gets the largest-numbered reg-class
231 that is contained in the union of classes I and J. */
233 for (i = 0; i < N_REG_CLASSES; i++)
235 for (j = 0; j < N_REG_CLASSES; j++)
237 #ifdef HARD_REG_SET
238 register /* Declare it register if it's a scalar. */
239 #endif
240 HARD_REG_SET c;
241 register int k;
243 COPY_HARD_REG_SET (c, reg_class_contents[i]);
244 IOR_HARD_REG_SET (c, reg_class_contents[j]);
245 for (k = 0; k < N_REG_CLASSES; k++)
247 GO_IF_HARD_REG_SUBSET (reg_class_contents[k], c,
248 subclass1);
249 continue;
251 subclass1:
252 /* keep the largest subclass */ /* SPEE 900308 */
253 GO_IF_HARD_REG_SUBSET (reg_class_contents[k],
254 reg_class_contents[(int) reg_class_subunion[i][j]],
255 subclass2);
256 reg_class_subunion[i][j] = (enum reg_class) k;
257 subclass2:
263 /* Initialize the table of superunions.
264 reg_class_superunion[I][J] gets the smallest-numbered reg-class
265 containing the union of classes I and J. */
267 for (i = 0; i < N_REG_CLASSES; i++)
269 for (j = 0; j < N_REG_CLASSES; j++)
271 #ifdef HARD_REG_SET
272 register /* Declare it register if it's a scalar. */
273 #endif
274 HARD_REG_SET c;
275 register int k;
277 COPY_HARD_REG_SET (c, reg_class_contents[i]);
278 IOR_HARD_REG_SET (c, reg_class_contents[j]);
279 for (k = 0; k < N_REG_CLASSES; k++)
280 GO_IF_HARD_REG_SUBSET (c, reg_class_contents[k], superclass);
282 superclass:
283 reg_class_superunion[i][j] = (enum reg_class) k;
287 /* Initialize the tables of subclasses and superclasses of each reg class.
288 First clear the whole table, then add the elements as they are found. */
290 for (i = 0; i < N_REG_CLASSES; i++)
292 for (j = 0; j < N_REG_CLASSES; j++)
294 reg_class_superclasses[i][j] = LIM_REG_CLASSES;
295 reg_class_subclasses[i][j] = LIM_REG_CLASSES;
299 for (i = 0; i < N_REG_CLASSES; i++)
301 if (i == (int) NO_REGS)
302 continue;
304 for (j = i + 1; j < N_REG_CLASSES; j++)
306 enum reg_class *p;
308 GO_IF_HARD_REG_SUBSET (reg_class_contents[i], reg_class_contents[j],
309 subclass);
310 continue;
311 subclass:
312 /* Reg class I is a subclass of J.
313 Add J to the table of superclasses of I. */
314 p = &reg_class_superclasses[i][0];
315 while (*p != LIM_REG_CLASSES) p++;
316 *p = (enum reg_class) j;
317 /* Add I to the table of superclasses of J. */
318 p = &reg_class_subclasses[j][0];
319 while (*p != LIM_REG_CLASSES) p++;
320 *p = (enum reg_class) i;
324 /* Do any additional initialization regsets may need */
325 INIT_ONCE_REG_SET ();
328 /* After switches have been processed, which perhaps alter
329 `fixed_regs' and `call_used_regs', convert them to HARD_REG_SETs. */
331 static void
332 init_reg_sets_1 ()
334 register unsigned int i, j;
336 /* This macro allows the fixed or call-used registers
337 to depend on target flags. */
339 #ifdef CONDITIONAL_REGISTER_USAGE
340 CONDITIONAL_REGISTER_USAGE;
341 #endif
343 /* Initialize "constant" tables. */
345 CLEAR_HARD_REG_SET (fixed_reg_set);
346 CLEAR_HARD_REG_SET (call_used_reg_set);
347 CLEAR_HARD_REG_SET (call_fixed_reg_set);
349 bcopy (fixed_regs, call_fixed_regs, sizeof call_fixed_regs);
351 n_non_fixed_regs = 0;
353 for (i = 0; i < FIRST_PSEUDO_REGISTER; i++)
355 if (fixed_regs[i])
356 SET_HARD_REG_BIT (fixed_reg_set, i);
357 else
358 n_non_fixed_regs++;
360 if (call_used_regs[i])
361 SET_HARD_REG_BIT (call_used_reg_set, i);
362 if (call_fixed_regs[i])
363 SET_HARD_REG_BIT (call_fixed_reg_set, i);
364 if (CLASS_LIKELY_SPILLED_P (REGNO_REG_CLASS (i)))
365 SET_HARD_REG_BIT (losing_caller_save_reg_set, i);
368 /* Initialize the move cost table. Find every subset of each class
369 and take the maximum cost of moving any subset to any other. */
371 for (i = 0; i < N_REG_CLASSES; i++)
372 for (j = 0; j < N_REG_CLASSES; j++)
374 int cost = i == j ? 2 : REGISTER_MOVE_COST (i, j);
375 enum reg_class *p1, *p2;
377 for (p2 = &reg_class_subclasses[j][0]; *p2 != LIM_REG_CLASSES; p2++)
378 if (*p2 != i)
379 cost = MAX (cost, REGISTER_MOVE_COST (i, *p2));
381 for (p1 = &reg_class_subclasses[i][0]; *p1 != LIM_REG_CLASSES; p1++)
383 if (*p1 != j)
384 cost = MAX (cost, REGISTER_MOVE_COST (*p1, j));
386 for (p2 = &reg_class_subclasses[j][0];
387 *p2 != LIM_REG_CLASSES; p2++)
388 if (*p1 != *p2)
389 cost = MAX (cost, REGISTER_MOVE_COST (*p1, *p2));
392 move_cost[i][j] = cost;
394 if (reg_class_subset_p (i, j))
395 cost = 0;
397 may_move_cost[i][j] = cost;
401 /* Compute the table of register modes.
402 These values are used to record death information for individual registers
403 (as opposed to a multi-register mode). */
405 static void
406 init_reg_modes ()
408 register int i;
410 for (i = 0; i < FIRST_PSEUDO_REGISTER; i++)
412 reg_raw_mode[i] = choose_hard_reg_mode (i, 1);
414 /* If we couldn't find a valid mode, just use the previous mode.
415 ??? One situation in which we need to do this is on the mips where
416 HARD_REGNO_NREGS (fpreg, [SD]Fmode) returns 2. Ideally we'd like
417 to use DF mode for the even registers and VOIDmode for the odd
418 (for the cpu models where the odd ones are inaccessible). */
419 if (reg_raw_mode[i] == VOIDmode)
420 reg_raw_mode[i] = i == 0 ? word_mode : reg_raw_mode[i-1];
424 /* Finish initializing the register sets and
425 initialize the register modes. */
427 void
428 init_regs ()
430 /* This finishes what was started by init_reg_sets, but couldn't be done
431 until after register usage was specified. */
432 init_reg_sets_1 ();
434 init_reg_modes ();
436 #ifdef HAVE_SECONDARY_RELOADS
438 /* Make some fake stack-frame MEM references for use in
439 memory_move_secondary_cost. */
440 int i;
441 for (i = 0; i < MAX_MACHINE_MODE; i++)
442 top_of_stack[i] = gen_rtx (MEM, i, stack_pointer_rtx);
444 #endif
447 #ifdef HAVE_SECONDARY_RELOADS
449 /* Compute extra cost of moving registers to/from memory due to reloads.
450 Only needed if secondary reloads are required for memory moves. */
453 memory_move_secondary_cost (mode, class, in)
454 enum machine_mode mode;
455 enum reg_class class;
456 int in;
458 enum reg_class altclass;
459 int partial_cost = 0;
460 /* We need a memory reference to feed to SECONDARY... macros. */
461 rtx mem = top_of_stack[(int) mode];
463 if (in)
465 #ifdef SECONDARY_INPUT_RELOAD_CLASS
466 altclass = SECONDARY_INPUT_RELOAD_CLASS (class, mode, mem);
467 #else
468 altclass = NO_REGS;
469 #endif
471 else
473 #ifdef SECONDARY_OUTPUT_RELOAD_CLASS
474 altclass = SECONDARY_OUTPUT_RELOAD_CLASS (class, mode, mem);
475 #else
476 altclass = NO_REGS;
477 #endif
480 if (altclass == NO_REGS)
481 return 0;
483 if (in)
484 partial_cost = REGISTER_MOVE_COST (altclass, class);
485 else
486 partial_cost = REGISTER_MOVE_COST (class, altclass);
488 if (class == altclass)
489 /* This isn't simply a copy-to-temporary situation. Can't guess
490 what it is, so MEMORY_MOVE_COST really ought not to be calling
491 here in that case.
493 I'm tempted to put in an abort here, but returning this will
494 probably only give poor estimates, which is what we would've
495 had before this code anyways. */
496 return partial_cost;
498 /* Check if the secondary reload register will also need a
499 secondary reload. */
500 return memory_move_secondary_cost (mode, altclass, in) + partial_cost;
502 #endif
504 /* Return a machine mode that is legitimate for hard reg REGNO and large
505 enough to save nregs. If we can't find one, return VOIDmode. */
507 enum machine_mode
508 choose_hard_reg_mode (regno, nregs)
509 int regno;
510 int nregs;
512 enum machine_mode found_mode = VOIDmode, mode;
514 /* We first look for the largest integer mode that can be validly
515 held in REGNO. If none, we look for the largest floating-point mode.
516 If we still didn't find a valid mode, try CCmode. */
518 for (mode = GET_CLASS_NARROWEST_MODE (MODE_INT);
519 mode != VOIDmode;
520 mode = GET_MODE_WIDER_MODE (mode))
521 if (HARD_REGNO_NREGS (regno, mode) == nregs
522 && HARD_REGNO_MODE_OK (regno, mode))
523 found_mode = mode;
525 if (found_mode != VOIDmode)
526 return found_mode;
528 for (mode = GET_CLASS_NARROWEST_MODE (MODE_FLOAT);
529 mode != VOIDmode;
530 mode = GET_MODE_WIDER_MODE (mode))
531 if (HARD_REGNO_NREGS (regno, mode) == nregs
532 && HARD_REGNO_MODE_OK (regno, mode))
533 found_mode = mode;
535 if (found_mode != VOIDmode)
536 return found_mode;
538 if (HARD_REGNO_NREGS (regno, CCmode) == nregs
539 && HARD_REGNO_MODE_OK (regno, CCmode))
540 return CCmode;
542 /* We can't find a mode valid for this register. */
543 return VOIDmode;
546 /* Specify the usage characteristics of the register named NAME.
547 It should be a fixed register if FIXED and a
548 call-used register if CALL_USED. */
550 void
551 fix_register (name, fixed, call_used)
552 char *name;
553 int fixed, call_used;
555 int i;
557 /* Decode the name and update the primary form of
558 the register info. */
560 if ((i = decode_reg_name (name)) >= 0)
562 fixed_regs[i] = fixed;
563 call_used_regs[i] = call_used;
565 else
567 warning ("unknown register name: %s", name);
571 /* Mark register number I as global. */
573 void
574 globalize_reg (i)
575 int i;
577 if (global_regs[i])
579 warning ("register used for two global register variables");
580 return;
583 if (call_used_regs[i] && ! fixed_regs[i])
584 warning ("call-clobbered register used for global register variable");
586 global_regs[i] = 1;
588 /* If already fixed, nothing else to do. */
589 if (fixed_regs[i])
590 return;
592 fixed_regs[i] = call_used_regs[i] = call_fixed_regs[i] = 1;
593 n_non_fixed_regs--;
595 SET_HARD_REG_BIT (fixed_reg_set, i);
596 SET_HARD_REG_BIT (call_used_reg_set, i);
597 SET_HARD_REG_BIT (call_fixed_reg_set, i);
600 /* Now the data and code for the `regclass' pass, which happens
601 just before local-alloc. */
603 /* The `costs' struct records the cost of using a hard register of each class
604 and of using memory for each pseudo. We use this data to set up
605 register class preferences. */
607 struct costs
609 int cost[N_REG_CLASSES];
610 int mem_cost;
613 /* Record the cost of each class for each pseudo. */
615 static struct costs *costs;
617 /* Record the same data by operand number, accumulated for each alternative
618 in an insn. The contribution to a pseudo is that of the minimum-cost
619 alternative. */
621 static struct costs op_costs[MAX_RECOG_OPERANDS];
623 /* (enum reg_class) prefclass[R] is the preferred class for pseudo number R.
624 This is available after `regclass' is run. */
626 static char *prefclass;
628 /* altclass[R] is a register class that we should use for allocating
629 pseudo number R if no register in the preferred class is available.
630 If no register in this class is available, memory is preferred.
632 It might appear to be more general to have a bitmask of classes here,
633 but since it is recommended that there be a class corresponding to the
634 union of most major pair of classes, that generality is not required.
636 This is available after `regclass' is run. */
638 static char *altclass;
640 /* Record the depth of loops that we are in. */
642 static int loop_depth;
644 /* Account for the fact that insns within a loop are executed very commonly,
645 but don't keep doing this as loops go too deep. */
647 static int loop_cost;
649 static void record_reg_classes PROTO((int, int, rtx *, enum machine_mode *,
650 char **, rtx));
651 static int copy_cost PROTO((rtx, enum machine_mode,
652 enum reg_class, int));
653 static void record_address_regs PROTO((rtx, enum reg_class, int));
654 #ifdef FORBIDDEN_INC_DEC_CLASSES
655 static int auto_inc_dec_reg_p PROTO((rtx, enum machine_mode));
656 #endif
657 static void reg_scan_mark_refs PROTO((rtx, rtx, int));
659 /* Return the reg_class in which pseudo reg number REGNO is best allocated.
660 This function is sometimes called before the info has been computed.
661 When that happens, just return GENERAL_REGS, which is innocuous. */
663 enum reg_class
664 reg_preferred_class (regno)
665 int regno;
667 if (prefclass == 0)
668 return GENERAL_REGS;
669 return (enum reg_class) prefclass[regno];
672 enum reg_class
673 reg_alternate_class (regno)
674 int regno;
676 if (prefclass == 0)
677 return ALL_REGS;
679 return (enum reg_class) altclass[regno];
682 /* This prevents dump_flow_info from losing if called
683 before regclass is run. */
685 void
686 regclass_init ()
688 prefclass = 0;
691 /* This is a pass of the compiler that scans all instructions
692 and calculates the preferred class for each pseudo-register.
693 This information can be accessed later by calling `reg_preferred_class'.
694 This pass comes just before local register allocation. */
696 void
697 regclass (f, nregs)
698 rtx f;
699 int nregs;
701 #ifdef REGISTER_CONSTRAINTS
702 register rtx insn;
703 register int i, j;
704 struct costs init_cost;
705 rtx set;
706 int pass;
708 init_recog ();
710 costs = (struct costs *) alloca (nregs * sizeof (struct costs));
712 #ifdef FORBIDDEN_INC_DEC_CLASSES
714 in_inc_dec = (char *) alloca (nregs);
716 /* Initialize information about which register classes can be used for
717 pseudos that are auto-incremented or auto-decremented. It would
718 seem better to put this in init_reg_sets, but we need to be able
719 to allocate rtx, which we can't do that early. */
721 for (i = 0; i < N_REG_CLASSES; i++)
723 rtx r = gen_rtx_REG (VOIDmode, 0);
724 enum machine_mode m;
726 for (j = 0; j < FIRST_PSEUDO_REGISTER; j++)
727 if (TEST_HARD_REG_BIT (reg_class_contents[i], j))
729 REGNO (r) = j;
731 for (m = VOIDmode; (int) m < (int) MAX_MACHINE_MODE;
732 m = (enum machine_mode) ((int) m + 1))
733 if (HARD_REGNO_MODE_OK (j, m))
735 PUT_MODE (r, m);
737 /* If a register is not directly suitable for an
738 auto-increment or decrement addressing mode and
739 requires secondary reloads, disallow its class from
740 being used in such addresses. */
742 if ((0
743 #ifdef SECONDARY_RELOAD_CLASS
744 || (SECONDARY_RELOAD_CLASS (BASE_REG_CLASS, m, r)
745 != NO_REGS)
746 #else
747 #ifdef SECONDARY_INPUT_RELOAD_CLASS
748 || (SECONDARY_INPUT_RELOAD_CLASS (BASE_REG_CLASS, m, r)
749 != NO_REGS)
750 #endif
751 #ifdef SECONDARY_OUTPUT_RELOAD_CLASS
752 || (SECONDARY_OUTPUT_RELOAD_CLASS (BASE_REG_CLASS, m, r)
753 != NO_REGS)
754 #endif
755 #endif
757 && ! auto_inc_dec_reg_p (r, m))
758 forbidden_inc_dec_class[i] = 1;
762 #endif /* FORBIDDEN_INC_DEC_CLASSES */
764 init_cost.mem_cost = 10000;
765 for (i = 0; i < N_REG_CLASSES; i++)
766 init_cost.cost[i] = 10000;
768 /* Normally we scan the insns once and determine the best class to use for
769 each register. However, if -fexpensive_optimizations are on, we do so
770 twice, the second time using the tentative best classes to guide the
771 selection. */
773 for (pass = 0; pass <= flag_expensive_optimizations; pass++)
775 /* Zero out our accumulation of the cost of each class for each reg. */
777 bzero ((char *) costs, nregs * sizeof (struct costs));
779 #ifdef FORBIDDEN_INC_DEC_CLASSES
780 bzero (in_inc_dec, nregs);
781 #endif
783 loop_depth = 0, loop_cost = 1;
785 /* Scan the instructions and record each time it would
786 save code to put a certain register in a certain class. */
788 for (insn = f; insn; insn = NEXT_INSN (insn))
790 char *constraints[MAX_RECOG_OPERANDS];
791 enum machine_mode modes[MAX_RECOG_OPERANDS];
792 int nalternatives;
793 int noperands;
795 /* Show that an insn inside a loop is likely to be executed three
796 times more than insns outside a loop. This is much more aggressive
797 than the assumptions made elsewhere and is being tried as an
798 experiment. */
800 if (GET_CODE (insn) == NOTE
801 && NOTE_LINE_NUMBER (insn) == NOTE_INSN_LOOP_BEG)
802 loop_depth++, loop_cost = 1 << (2 * MIN (loop_depth, 5));
803 else if (GET_CODE (insn) == NOTE
804 && NOTE_LINE_NUMBER (insn) == NOTE_INSN_LOOP_END)
805 loop_depth--, loop_cost = 1 << (2 * MIN (loop_depth, 5));
807 else if ((GET_CODE (insn) == INSN
808 && GET_CODE (PATTERN (insn)) != USE
809 && GET_CODE (PATTERN (insn)) != CLOBBER
810 && GET_CODE (PATTERN (insn)) != ASM_INPUT)
811 || (GET_CODE (insn) == JUMP_INSN
812 && GET_CODE (PATTERN (insn)) != ADDR_VEC
813 && GET_CODE (PATTERN (insn)) != ADDR_DIFF_VEC)
814 || GET_CODE (insn) == CALL_INSN)
816 if (GET_CODE (insn) == INSN
817 && (noperands = asm_noperands (PATTERN (insn))) >= 0)
819 decode_asm_operands (PATTERN (insn), recog_operand, NULL_PTR,
820 constraints, modes);
821 nalternatives = (noperands == 0 ? 0
822 : n_occurrences (',', constraints[0]) + 1);
824 else
826 int insn_code_number = recog_memoized (insn);
827 rtx note;
829 set = single_set (insn);
830 insn_extract (insn);
832 nalternatives = insn_n_alternatives[insn_code_number];
833 noperands = insn_n_operands[insn_code_number];
835 /* If this insn loads a parameter from its stack slot, then
836 it represents a savings, rather than a cost, if the
837 parameter is stored in memory. Record this fact. */
839 if (set != 0 && GET_CODE (SET_DEST (set)) == REG
840 && GET_CODE (SET_SRC (set)) == MEM
841 && (note = find_reg_note (insn, REG_EQUIV,
842 NULL_RTX)) != 0
843 && GET_CODE (XEXP (note, 0)) == MEM)
845 costs[REGNO (SET_DEST (set))].mem_cost
846 -= (MEMORY_MOVE_COST (GET_MODE (SET_DEST (set)),
847 GENERAL_REGS, 1)
848 * loop_cost);
849 record_address_regs (XEXP (SET_SRC (set), 0),
850 BASE_REG_CLASS, loop_cost * 2);
851 continue;
854 /* Improve handling of two-address insns such as
855 (set X (ashift CONST Y)) where CONST must be made to
856 match X. Change it into two insns: (set X CONST)
857 (set X (ashift X Y)). If we left this for reloading, it
858 would probably get three insns because X and Y might go
859 in the same place. This prevents X and Y from receiving
860 the same hard reg.
862 We can only do this if the modes of operands 0 and 1
863 (which might not be the same) are tieable and we only need
864 do this during our first pass. */
866 if (pass == 0 && optimize
867 && noperands >= 3
868 && insn_operand_constraint[insn_code_number][1][0] == '0'
869 && insn_operand_constraint[insn_code_number][1][1] == 0
870 && CONSTANT_P (recog_operand[1])
871 && ! rtx_equal_p (recog_operand[0], recog_operand[1])
872 && ! rtx_equal_p (recog_operand[0], recog_operand[2])
873 && GET_CODE (recog_operand[0]) == REG
874 && MODES_TIEABLE_P (GET_MODE (recog_operand[0]),
875 insn_operand_mode[insn_code_number][1]))
877 rtx previnsn = prev_real_insn (insn);
878 rtx dest
879 = gen_lowpart (insn_operand_mode[insn_code_number][1],
880 recog_operand[0]);
881 rtx newinsn
882 = emit_insn_before (gen_move_insn (dest,
883 recog_operand[1]),
884 insn);
886 /* If this insn was the start of a basic block,
887 include the new insn in that block.
888 We need not check for code_label here;
889 while a basic block can start with a code_label,
890 INSN could not be at the beginning of that block. */
891 if (previnsn == 0 || GET_CODE (previnsn) == JUMP_INSN)
893 int b;
894 for (b = 0; b < n_basic_blocks; b++)
895 if (insn == basic_block_head[b])
896 basic_block_head[b] = newinsn;
899 /* This makes one more setting of new insns's dest. */
900 REG_N_SETS (REGNO (recog_operand[0]))++;
902 *recog_operand_loc[1] = recog_operand[0];
903 for (i = insn_n_dups[insn_code_number] - 1; i >= 0; i--)
904 if (recog_dup_num[i] == 1)
905 *recog_dup_loc[i] = recog_operand[0];
907 insn = PREV_INSN (newinsn);
908 continue;
911 for (i = 0; i < noperands; i++)
913 constraints[i]
914 = insn_operand_constraint[insn_code_number][i];
915 modes[i] = insn_operand_mode[insn_code_number][i];
919 /* If we get here, we are set up to record the costs of all the
920 operands for this insn. Start by initializing the costs.
921 Then handle any address registers. Finally record the desired
922 classes for any pseudos, doing it twice if some pair of
923 operands are commutative. */
925 for (i = 0; i < noperands; i++)
927 op_costs[i] = init_cost;
929 if (GET_CODE (recog_operand[i]) == SUBREG)
930 recog_operand[i] = SUBREG_REG (recog_operand[i]);
932 if (GET_CODE (recog_operand[i]) == MEM)
933 record_address_regs (XEXP (recog_operand[i], 0),
934 BASE_REG_CLASS, loop_cost * 2);
935 else if (constraints[i][0] == 'p')
936 record_address_regs (recog_operand[i],
937 BASE_REG_CLASS, loop_cost * 2);
940 /* Check for commutative in a separate loop so everything will
941 have been initialized. We must do this even if one operand
942 is a constant--see addsi3 in m68k.md. */
944 for (i = 0; i < noperands - 1; i++)
945 if (constraints[i][0] == '%')
947 char *xconstraints[MAX_RECOG_OPERANDS];
948 int j;
950 /* Handle commutative operands by swapping the constraints.
951 We assume the modes are the same. */
953 for (j = 0; j < noperands; j++)
954 xconstraints[j] = constraints[j];
956 xconstraints[i] = constraints[i+1];
957 xconstraints[i+1] = constraints[i];
958 record_reg_classes (nalternatives, noperands,
959 recog_operand, modes, xconstraints,
960 insn);
963 record_reg_classes (nalternatives, noperands, recog_operand,
964 modes, constraints, insn);
966 /* Now add the cost for each operand to the total costs for
967 its register. */
969 for (i = 0; i < noperands; i++)
970 if (GET_CODE (recog_operand[i]) == REG
971 && REGNO (recog_operand[i]) >= FIRST_PSEUDO_REGISTER)
973 int regno = REGNO (recog_operand[i]);
974 struct costs *p = &costs[regno], *q = &op_costs[i];
976 p->mem_cost += q->mem_cost * loop_cost;
977 for (j = 0; j < N_REG_CLASSES; j++)
978 p->cost[j] += q->cost[j] * loop_cost;
983 /* Now for each register look at how desirable each class is
984 and find which class is preferred. Store that in
985 `prefclass[REGNO]'. Record in `altclass[REGNO]' the largest register
986 class any of whose registers is better than memory. */
988 if (pass == 0)
990 prefclass = (char *) oballoc (nregs);
991 altclass = (char *) oballoc (nregs);
994 for (i = FIRST_PSEUDO_REGISTER; i < nregs; i++)
996 register int best_cost = (1 << (HOST_BITS_PER_INT - 2)) - 1;
997 enum reg_class best = ALL_REGS, alt = NO_REGS;
998 /* This is an enum reg_class, but we call it an int
999 to save lots of casts. */
1000 register int class;
1001 register struct costs *p = &costs[i];
1003 for (class = (int) ALL_REGS - 1; class > 0; class--)
1005 /* Ignore classes that are too small for this operand or
1006 invalid for a operand that was auto-incremented. */
1007 if (CLASS_MAX_NREGS (class, PSEUDO_REGNO_MODE (i))
1008 > reg_class_size[class]
1009 #ifdef FORBIDDEN_INC_DEC_CLASSES
1010 || (in_inc_dec[i] && forbidden_inc_dec_class[class])
1011 #endif
1014 else if (p->cost[class] < best_cost)
1016 best_cost = p->cost[class];
1017 best = (enum reg_class) class;
1019 else if (p->cost[class] == best_cost)
1020 best = reg_class_subunion[(int)best][class];
1023 /* Record the alternate register class; i.e., a class for which
1024 every register in it is better than using memory. If adding a
1025 class would make a smaller class (i.e., no union of just those
1026 classes exists), skip that class. The major unions of classes
1027 should be provided as a register class. Don't do this if we
1028 will be doing it again later. */
1030 if (pass == 1 || ! flag_expensive_optimizations)
1031 for (class = 0; class < N_REG_CLASSES; class++)
1032 if (p->cost[class] < p->mem_cost
1033 && (reg_class_size[(int) reg_class_subunion[(int) alt][class]]
1034 > reg_class_size[(int) alt])
1035 #ifdef FORBIDDEN_INC_DEC_CLASSES
1036 && ! (in_inc_dec[i] && forbidden_inc_dec_class[class])
1037 #endif
1039 alt = reg_class_subunion[(int) alt][class];
1041 /* If we don't add any classes, nothing to try. */
1042 if (alt == best)
1043 alt = NO_REGS;
1045 /* We cast to (int) because (char) hits bugs in some compilers. */
1046 prefclass[i] = (int) best;
1047 altclass[i] = (int) alt;
1050 #endif /* REGISTER_CONSTRAINTS */
1053 #ifdef REGISTER_CONSTRAINTS
1055 /* Record the cost of using memory or registers of various classes for
1056 the operands in INSN.
1058 N_ALTS is the number of alternatives.
1060 N_OPS is the number of operands.
1062 OPS is an array of the operands.
1064 MODES are the modes of the operands, in case any are VOIDmode.
1066 CONSTRAINTS are the constraints to use for the operands. This array
1067 is modified by this procedure.
1069 This procedure works alternative by alternative. For each alternative
1070 we assume that we will be able to allocate all pseudos to their ideal
1071 register class and calculate the cost of using that alternative. Then
1072 we compute for each operand that is a pseudo-register, the cost of
1073 having the pseudo allocated to each register class and using it in that
1074 alternative. To this cost is added the cost of the alternative.
1076 The cost of each class for this insn is its lowest cost among all the
1077 alternatives. */
1079 static void
1080 record_reg_classes (n_alts, n_ops, ops, modes, constraints, insn)
1081 int n_alts;
1082 int n_ops;
1083 rtx *ops;
1084 enum machine_mode *modes;
1085 char **constraints;
1086 rtx insn;
1088 int alt;
1089 enum op_type {OP_READ, OP_WRITE, OP_READ_WRITE} op_types[MAX_RECOG_OPERANDS];
1090 int i, j;
1091 rtx set;
1093 /* By default, each operand is an input operand. */
1095 for (i = 0; i < n_ops; i++)
1096 op_types[i] = OP_READ;
1098 /* Process each alternative, each time minimizing an operand's cost with
1099 the cost for each operand in that alternative. */
1101 for (alt = 0; alt < n_alts; alt++)
1103 struct costs this_op_costs[MAX_RECOG_OPERANDS];
1104 int alt_fail = 0;
1105 int alt_cost = 0;
1106 enum reg_class classes[MAX_RECOG_OPERANDS];
1107 int class;
1109 for (i = 0; i < n_ops; i++)
1111 char *p = constraints[i];
1112 rtx op = ops[i];
1113 enum machine_mode mode = modes[i];
1114 int allows_mem = 0;
1115 int win = 0;
1116 char c;
1118 /* If this operand has no constraints at all, we can conclude
1119 nothing about it since anything is valid. */
1121 if (*p == 0)
1123 if (GET_CODE (op) == REG && REGNO (op) >= FIRST_PSEUDO_REGISTER)
1124 bzero ((char *) &this_op_costs[i], sizeof this_op_costs[i]);
1126 continue;
1129 if (*p == '%')
1130 p++;
1132 /* If this alternative is only relevant when this operand
1133 matches a previous operand, we do different things depending
1134 on whether this operand is a pseudo-reg or not. */
1136 if (p[0] >= '0' && p[0] <= '0' + i && (p[1] == ',' || p[1] == 0))
1138 j = p[0] - '0';
1139 classes[i] = classes[j];
1141 if (GET_CODE (op) != REG || REGNO (op) < FIRST_PSEUDO_REGISTER)
1143 /* If this matches the other operand, we have no added
1144 cost and we win. */
1145 if (rtx_equal_p (ops[j], op))
1146 win = 1;
1148 /* If we can put the other operand into a register, add to
1149 the cost of this alternative the cost to copy this
1150 operand to the register used for the other operand. */
1152 else if (classes[j] != NO_REGS)
1153 alt_cost += copy_cost (op, mode, classes[j], 1), win = 1;
1155 else if (GET_CODE (ops[j]) != REG
1156 || REGNO (ops[j]) < FIRST_PSEUDO_REGISTER)
1158 /* This op is a pseudo but the one it matches is not. */
1160 /* If we can't put the other operand into a register, this
1161 alternative can't be used. */
1163 if (classes[j] == NO_REGS)
1164 alt_fail = 1;
1166 /* Otherwise, add to the cost of this alternative the cost
1167 to copy the other operand to the register used for this
1168 operand. */
1170 else
1171 alt_cost += copy_cost (ops[j], mode, classes[j], 1);
1173 else
1175 /* The costs of this operand are the same as that of the
1176 other operand. However, if we cannot tie them, this
1177 alternative needs to do a copy, which is one
1178 instruction. */
1180 this_op_costs[i] = this_op_costs[j];
1181 if (REGNO (ops[i]) != REGNO (ops[j])
1182 && ! find_reg_note (insn, REG_DEAD, op))
1183 alt_cost += 2;
1185 /* This is in place of ordinary cost computation
1186 for this operand, so skip to the end of the
1187 alternative (should be just one character). */
1188 while (*p && *p++ != ',')
1191 constraints[i] = p;
1192 continue;
1196 /* Scan all the constraint letters. See if the operand matches
1197 any of the constraints. Collect the valid register classes
1198 and see if this operand accepts memory. */
1200 classes[i] = NO_REGS;
1201 while (*p && (c = *p++) != ',')
1202 switch (c)
1204 case '=':
1205 op_types[i] = OP_WRITE;
1206 break;
1208 case '+':
1209 op_types[i] = OP_READ_WRITE;
1210 break;
1212 case '*':
1213 /* Ignore the next letter for this pass. */
1214 p++;
1215 break;
1217 case '?':
1218 alt_cost += 2;
1219 case '%':
1220 case '!': case '#':
1221 case '&':
1222 case '0': case '1': case '2': case '3': case '4':
1223 case 'p':
1224 break;
1226 case 'm': case 'o': case 'V':
1227 /* It doesn't seem worth distinguishing between offsettable
1228 and non-offsettable addresses here. */
1229 allows_mem = 1;
1230 if (GET_CODE (op) == MEM)
1231 win = 1;
1232 break;
1234 case '<':
1235 if (GET_CODE (op) == MEM
1236 && (GET_CODE (XEXP (op, 0)) == PRE_DEC
1237 || GET_CODE (XEXP (op, 0)) == POST_DEC))
1238 win = 1;
1239 break;
1241 case '>':
1242 if (GET_CODE (op) == MEM
1243 && (GET_CODE (XEXP (op, 0)) == PRE_INC
1244 || GET_CODE (XEXP (op, 0)) == POST_INC))
1245 win = 1;
1246 break;
1248 case 'E':
1249 #ifndef REAL_ARITHMETIC
1250 /* Match any floating double constant, but only if
1251 we can examine the bits of it reliably. */
1252 if ((HOST_FLOAT_FORMAT != TARGET_FLOAT_FORMAT
1253 || HOST_BITS_PER_WIDE_INT != BITS_PER_WORD)
1254 && GET_MODE (op) != VOIDmode && ! flag_pretend_float)
1255 break;
1256 #endif
1257 if (GET_CODE (op) == CONST_DOUBLE)
1258 win = 1;
1259 break;
1261 case 'F':
1262 if (GET_CODE (op) == CONST_DOUBLE)
1263 win = 1;
1264 break;
1266 case 'G':
1267 case 'H':
1268 if (GET_CODE (op) == CONST_DOUBLE
1269 && CONST_DOUBLE_OK_FOR_LETTER_P (op, c))
1270 win = 1;
1271 break;
1273 case 's':
1274 if (GET_CODE (op) == CONST_INT
1275 || (GET_CODE (op) == CONST_DOUBLE
1276 && GET_MODE (op) == VOIDmode))
1277 break;
1278 case 'i':
1279 if (CONSTANT_P (op)
1280 #ifdef LEGITIMATE_PIC_OPERAND_P
1281 && (! flag_pic || LEGITIMATE_PIC_OPERAND_P (op))
1282 #endif
1284 win = 1;
1285 break;
1287 case 'n':
1288 if (GET_CODE (op) == CONST_INT
1289 || (GET_CODE (op) == CONST_DOUBLE
1290 && GET_MODE (op) == VOIDmode))
1291 win = 1;
1292 break;
1294 case 'I':
1295 case 'J':
1296 case 'K':
1297 case 'L':
1298 case 'M':
1299 case 'N':
1300 case 'O':
1301 case 'P':
1302 if (GET_CODE (op) == CONST_INT
1303 && CONST_OK_FOR_LETTER_P (INTVAL (op), c))
1304 win = 1;
1305 break;
1307 case 'X':
1308 win = 1;
1309 break;
1311 #ifdef EXTRA_CONSTRAINT
1312 case 'Q':
1313 case 'R':
1314 case 'S':
1315 case 'T':
1316 case 'U':
1317 if (EXTRA_CONSTRAINT (op, c))
1318 win = 1;
1319 break;
1320 #endif
1322 case 'g':
1323 if (GET_CODE (op) == MEM
1324 || (CONSTANT_P (op)
1325 #ifdef LEGITIMATE_PIC_OPERAND_P
1326 && (! flag_pic || LEGITIMATE_PIC_OPERAND_P (op))
1327 #endif
1329 win = 1;
1330 allows_mem = 1;
1331 case 'r':
1332 classes[i]
1333 = reg_class_subunion[(int) classes[i]][(int) GENERAL_REGS];
1334 break;
1336 default:
1337 classes[i]
1338 = reg_class_subunion[(int) classes[i]]
1339 [(int) REG_CLASS_FROM_LETTER (c)];
1342 constraints[i] = p;
1344 /* How we account for this operand now depends on whether it is a
1345 pseudo register or not. If it is, we first check if any
1346 register classes are valid. If not, we ignore this alternative,
1347 since we want to assume that all pseudos get allocated for
1348 register preferencing. If some register class is valid, compute
1349 the costs of moving the pseudo into that class. */
1351 if (GET_CODE (op) == REG && REGNO (op) >= FIRST_PSEUDO_REGISTER)
1353 if (classes[i] == NO_REGS)
1354 alt_fail = 1;
1355 else
1357 struct costs *pp = &this_op_costs[i];
1359 for (class = 0; class < N_REG_CLASSES; class++)
1360 pp->cost[class] = may_move_cost[class][(int) classes[i]];
1362 /* If the alternative actually allows memory, make things
1363 a bit cheaper since we won't need an extra insn to
1364 load it. */
1366 pp->mem_cost = (MEMORY_MOVE_COST (mode, classes[i], 1)
1367 - allows_mem);
1369 /* If we have assigned a class to this register in our
1370 first pass, add a cost to this alternative corresponding
1371 to what we would add if this register were not in the
1372 appropriate class. */
1374 if (prefclass)
1375 alt_cost
1376 += may_move_cost[prefclass[REGNO (op)]][(int) classes[i]];
1380 /* Otherwise, if this alternative wins, either because we
1381 have already determined that or if we have a hard register of
1382 the proper class, there is no cost for this alternative. */
1384 else if (win
1385 || (GET_CODE (op) == REG
1386 && reg_fits_class_p (op, classes[i], 0, GET_MODE (op))))
1389 /* If registers are valid, the cost of this alternative includes
1390 copying the object to and/or from a register. */
1392 else if (classes[i] != NO_REGS)
1394 if (op_types[i] != OP_WRITE)
1395 alt_cost += copy_cost (op, mode, classes[i], 1);
1397 if (op_types[i] != OP_READ)
1398 alt_cost += copy_cost (op, mode, classes[i], 0);
1401 /* The only other way this alternative can be used is if this is a
1402 constant that could be placed into memory. */
1404 else if (CONSTANT_P (op) && allows_mem)
1405 alt_cost += MEMORY_MOVE_COST (mode, classes[i], 1);
1406 else
1407 alt_fail = 1;
1410 if (alt_fail)
1411 continue;
1413 /* Finally, update the costs with the information we've calculated
1414 about this alternative. */
1416 for (i = 0; i < n_ops; i++)
1417 if (GET_CODE (ops[i]) == REG
1418 && REGNO (ops[i]) >= FIRST_PSEUDO_REGISTER)
1420 struct costs *pp = &op_costs[i], *qq = &this_op_costs[i];
1421 int scale = 1 + (op_types[i] == OP_READ_WRITE);
1423 pp->mem_cost = MIN (pp->mem_cost,
1424 (qq->mem_cost + alt_cost) * scale);
1426 for (class = 0; class < N_REG_CLASSES; class++)
1427 pp->cost[class] = MIN (pp->cost[class],
1428 (qq->cost[class] + alt_cost) * scale);
1432 /* If this insn is a single set copying operand 1 to operand 0
1433 and one is a pseudo with the other a hard reg that is in its
1434 own register class, set the cost of that register class to -1. */
1436 if ((set = single_set (insn)) != 0
1437 && ops[0] == SET_DEST (set) && ops[1] == SET_SRC (set)
1438 && GET_CODE (ops[0]) == REG && GET_CODE (ops[1]) == REG)
1439 for (i = 0; i <= 1; i++)
1440 if (REGNO (ops[i]) >= FIRST_PSEUDO_REGISTER)
1442 int regno = REGNO (ops[!i]);
1443 enum machine_mode mode = GET_MODE (ops[!i]);
1444 int class;
1445 int nr;
1447 if (regno >= FIRST_PSEUDO_REGISTER && prefclass != 0
1448 && (reg_class_size[prefclass[regno]]
1449 == CLASS_MAX_NREGS (prefclass[regno], mode)))
1450 op_costs[i].cost[prefclass[regno]] = -1;
1451 else if (regno < FIRST_PSEUDO_REGISTER)
1452 for (class = 0; class < N_REG_CLASSES; class++)
1453 if (TEST_HARD_REG_BIT (reg_class_contents[class], regno)
1454 && reg_class_size[class] == CLASS_MAX_NREGS (class, mode))
1456 if (reg_class_size[class] == 1)
1457 op_costs[i].cost[class] = -1;
1458 else
1460 for (nr = 0; nr < HARD_REGNO_NREGS(regno, mode); nr++)
1462 if (!TEST_HARD_REG_BIT (reg_class_contents[class], regno + nr))
1463 break;
1466 if (nr == HARD_REGNO_NREGS(regno,mode))
1467 op_costs[i].cost[class] = -1;
1473 /* Compute the cost of loading X into (if TO_P is non-zero) or from (if
1474 TO_P is zero) a register of class CLASS in mode MODE.
1476 X must not be a pseudo. */
1478 static int
1479 copy_cost (x, mode, class, to_p)
1480 rtx x;
1481 enum machine_mode mode;
1482 enum reg_class class;
1483 int to_p;
1485 #ifdef HAVE_SECONDARY_RELOADS
1486 enum reg_class secondary_class = NO_REGS;
1487 #endif
1489 /* If X is a SCRATCH, there is actually nothing to move since we are
1490 assuming optimal allocation. */
1492 if (GET_CODE (x) == SCRATCH)
1493 return 0;
1495 /* Get the class we will actually use for a reload. */
1496 class = PREFERRED_RELOAD_CLASS (x, class);
1498 #ifdef HAVE_SECONDARY_RELOADS
1499 /* If we need a secondary reload (we assume here that we are using
1500 the secondary reload as an intermediate, not a scratch register), the
1501 cost is that to load the input into the intermediate register, then
1502 to copy them. We use a special value of TO_P to avoid recursion. */
1504 #ifdef SECONDARY_INPUT_RELOAD_CLASS
1505 if (to_p == 1)
1506 secondary_class = SECONDARY_INPUT_RELOAD_CLASS (class, mode, x);
1507 #endif
1509 #ifdef SECONDARY_OUTPUT_RELOAD_CLASS
1510 if (! to_p)
1511 secondary_class = SECONDARY_OUTPUT_RELOAD_CLASS (class, mode, x);
1512 #endif
1514 if (secondary_class != NO_REGS)
1515 return (move_cost[(int) secondary_class][(int) class]
1516 + copy_cost (x, mode, secondary_class, 2));
1517 #endif /* HAVE_SECONDARY_RELOADS */
1519 /* For memory, use the memory move cost, for (hard) registers, use the
1520 cost to move between the register classes, and use 2 for everything
1521 else (constants). */
1523 if (GET_CODE (x) == MEM || class == NO_REGS)
1524 return MEMORY_MOVE_COST (mode, class, to_p);
1526 else if (GET_CODE (x) == REG)
1527 return move_cost[(int) REGNO_REG_CLASS (REGNO (x))][(int) class];
1529 else
1530 /* If this is a constant, we may eventually want to call rtx_cost here. */
1531 return 2;
1534 /* Record the pseudo registers we must reload into hard registers
1535 in a subexpression of a memory address, X.
1537 CLASS is the class that the register needs to be in and is either
1538 BASE_REG_CLASS or INDEX_REG_CLASS.
1540 SCALE is twice the amount to multiply the cost by (it is twice so we
1541 can represent half-cost adjustments). */
1543 static void
1544 record_address_regs (x, class, scale)
1545 rtx x;
1546 enum reg_class class;
1547 int scale;
1549 register enum rtx_code code = GET_CODE (x);
1551 switch (code)
1553 case CONST_INT:
1554 case CONST:
1555 case CC0:
1556 case PC:
1557 case SYMBOL_REF:
1558 case LABEL_REF:
1559 return;
1561 case PLUS:
1562 /* When we have an address that is a sum,
1563 we must determine whether registers are "base" or "index" regs.
1564 If there is a sum of two registers, we must choose one to be
1565 the "base". Luckily, we can use the REGNO_POINTER_FLAG
1566 to make a good choice most of the time. We only need to do this
1567 on machines that can have two registers in an address and where
1568 the base and index register classes are different.
1570 ??? This code used to set REGNO_POINTER_FLAG in some cases, but
1571 that seems bogus since it should only be set when we are sure
1572 the register is being used as a pointer. */
1575 rtx arg0 = XEXP (x, 0);
1576 rtx arg1 = XEXP (x, 1);
1577 register enum rtx_code code0 = GET_CODE (arg0);
1578 register enum rtx_code code1 = GET_CODE (arg1);
1580 /* Look inside subregs. */
1581 if (code0 == SUBREG)
1582 arg0 = SUBREG_REG (arg0), code0 = GET_CODE (arg0);
1583 if (code1 == SUBREG)
1584 arg1 = SUBREG_REG (arg1), code1 = GET_CODE (arg1);
1586 /* If this machine only allows one register per address, it must
1587 be in the first operand. */
1589 if (MAX_REGS_PER_ADDRESS == 1)
1590 record_address_regs (arg0, class, scale);
1592 /* If index and base registers are the same on this machine, just
1593 record registers in any non-constant operands. We assume here,
1594 as well as in the tests below, that all addresses are in
1595 canonical form. */
1597 else if (INDEX_REG_CLASS == BASE_REG_CLASS)
1599 record_address_regs (arg0, class, scale);
1600 if (! CONSTANT_P (arg1))
1601 record_address_regs (arg1, class, scale);
1604 /* If the second operand is a constant integer, it doesn't change
1605 what class the first operand must be. */
1607 else if (code1 == CONST_INT || code1 == CONST_DOUBLE)
1608 record_address_regs (arg0, class, scale);
1610 /* If the second operand is a symbolic constant, the first operand
1611 must be an index register. */
1613 else if (code1 == SYMBOL_REF || code1 == CONST || code1 == LABEL_REF)
1614 record_address_regs (arg0, INDEX_REG_CLASS, scale);
1616 /* If both operands are registers but one is already a hard register
1617 of index or base class, give the other the class that the hard
1618 register is not. */
1620 #ifdef REG_OK_FOR_BASE_P
1621 else if (code0 == REG && code1 == REG
1622 && REGNO (arg0) < FIRST_PSEUDO_REGISTER
1623 && (REG_OK_FOR_BASE_P (arg0) || REG_OK_FOR_INDEX_P (arg0)))
1624 record_address_regs (arg1,
1625 REG_OK_FOR_BASE_P (arg0)
1626 ? INDEX_REG_CLASS : BASE_REG_CLASS,
1627 scale);
1628 else if (code0 == REG && code1 == REG
1629 && REGNO (arg1) < FIRST_PSEUDO_REGISTER
1630 && (REG_OK_FOR_BASE_P (arg1) || REG_OK_FOR_INDEX_P (arg1)))
1631 record_address_regs (arg0,
1632 REG_OK_FOR_BASE_P (arg1)
1633 ? INDEX_REG_CLASS : BASE_REG_CLASS,
1634 scale);
1635 #endif
1637 /* If one operand is known to be a pointer, it must be the base
1638 with the other operand the index. Likewise if the other operand
1639 is a MULT. */
1641 else if ((code0 == REG && REGNO_POINTER_FLAG (REGNO (arg0)))
1642 || code1 == MULT)
1644 record_address_regs (arg0, BASE_REG_CLASS, scale);
1645 record_address_regs (arg1, INDEX_REG_CLASS, scale);
1647 else if ((code1 == REG && REGNO_POINTER_FLAG (REGNO (arg1)))
1648 || code0 == MULT)
1650 record_address_regs (arg0, INDEX_REG_CLASS, scale);
1651 record_address_regs (arg1, BASE_REG_CLASS, scale);
1654 /* Otherwise, count equal chances that each might be a base
1655 or index register. This case should be rare. */
1657 else
1659 record_address_regs (arg0, BASE_REG_CLASS, scale / 2);
1660 record_address_regs (arg0, INDEX_REG_CLASS, scale / 2);
1661 record_address_regs (arg1, BASE_REG_CLASS, scale / 2);
1662 record_address_regs (arg1, INDEX_REG_CLASS, scale / 2);
1665 break;
1667 case POST_INC:
1668 case PRE_INC:
1669 case POST_DEC:
1670 case PRE_DEC:
1671 /* Double the importance of a pseudo register that is incremented
1672 or decremented, since it would take two extra insns
1673 if it ends up in the wrong place. If the operand is a pseudo,
1674 show it is being used in an INC_DEC context. */
1676 #ifdef FORBIDDEN_INC_DEC_CLASSES
1677 if (GET_CODE (XEXP (x, 0)) == REG
1678 && REGNO (XEXP (x, 0)) >= FIRST_PSEUDO_REGISTER)
1679 in_inc_dec[REGNO (XEXP (x, 0))] = 1;
1680 #endif
1682 record_address_regs (XEXP (x, 0), class, 2 * scale);
1683 break;
1685 case REG:
1687 register struct costs *pp = &costs[REGNO (x)];
1688 register int i;
1690 pp->mem_cost += (MEMORY_MOVE_COST (Pmode, class, 1) * scale) / 2;
1692 for (i = 0; i < N_REG_CLASSES; i++)
1693 pp->cost[i] += (may_move_cost[i][(int) class] * scale) / 2;
1695 break;
1697 default:
1699 register char *fmt = GET_RTX_FORMAT (code);
1700 register int i;
1701 for (i = GET_RTX_LENGTH (code) - 1; i >= 0; i--)
1702 if (fmt[i] == 'e')
1703 record_address_regs (XEXP (x, i), class, scale);
1708 #ifdef FORBIDDEN_INC_DEC_CLASSES
1710 /* Return 1 if REG is valid as an auto-increment memory reference
1711 to an object of MODE. */
1713 static int
1714 auto_inc_dec_reg_p (reg, mode)
1715 rtx reg;
1716 enum machine_mode mode;
1718 #ifdef HAVE_POST_INCREMENT
1719 if (memory_address_p (mode, gen_rtx_POST_INC (Pmode, reg)))
1720 return 1;
1721 #endif
1723 #ifdef HAVE_POST_DECREMENT
1724 if (memory_address_p (mode, gen_rtx_POST_DEC (Pmode, reg)))
1725 return 1;
1726 #endif
1728 #ifdef HAVE_PRE_INCREMENT
1729 if (memory_address_p (mode, gen_rtx_PRE_INC (Pmode, reg)))
1730 return 1;
1731 #endif
1733 #ifdef HAVE_PRE_DECREMENT
1734 if (memory_address_p (mode, gen_rtx_PRE_DEC (Pmode, reg)))
1735 return 1;
1736 #endif
1738 return 0;
1740 #endif
1742 #endif /* REGISTER_CONSTRAINTS */
1744 /* Allocate enough space to hold NUM_REGS registers for the tables used for
1745 reg_scan and flow_analysis that are indexed by the register number. If
1746 NEW_P is non zero, initialize all of the registers, otherwise only
1747 initialize the new registers allocated. The same table is kept from
1748 function to function, only reallocating it when we need more room. If
1749 RENUMBER_P is non zero, allocate the reg_renumber array also. */
1751 void
1752 allocate_reg_info (num_regs, new_p, renumber_p)
1753 int num_regs;
1754 int new_p;
1755 int renumber_p;
1757 static int regno_allocated = 0;
1758 static short *renumber = (short *)0;
1759 int i;
1760 int size_info;
1761 int size_renumber;
1762 int min = (new_p) ? 0 : reg_n_max;
1764 /* If this message come up, and you want to fix it, then all of the tables
1765 like reg_renumber, etc. that use short will have to be found and lengthed
1766 to int or HOST_WIDE_INT. */
1768 /* Free up all storage allocated */
1769 if (num_regs < 0)
1771 if (reg_n_info)
1773 free ((char *)reg_n_info);
1774 free ((char *)renumber);
1775 reg_n_info = (reg_info *)0;
1776 renumber = (short *)0;
1778 regno_allocated = 0;
1779 reg_n_max = 0;
1780 return;
1783 if (num_regs > regno_allocated)
1785 regno_allocated = num_regs + (num_regs / 20); /* add some slop space */
1786 size_info = regno_allocated * sizeof (reg_info);
1787 size_renumber = regno_allocated * sizeof (short);
1789 if (!reg_n_info)
1791 reg_n_info = (reg_info *) xmalloc (size_info);
1792 renumber = (short *) xmalloc (size_renumber);
1795 else if (new_p) /* if we're zapping everything, no need to realloc */
1797 free ((char *)reg_n_info);
1798 free ((char *)renumber);
1799 reg_n_info = (reg_info *) xmalloc (size_info);
1800 renumber = (short *) xmalloc (size_renumber);
1803 else
1805 reg_n_info = (reg_info *) xrealloc ((char *)reg_n_info, size_info);
1806 renumber = (short *) xrealloc ((char *)renumber, size_renumber);
1810 if (min < num_regs)
1812 bzero ((char *) &reg_n_info[min], (num_regs - min) * sizeof (reg_info));
1813 for (i = min; i < num_regs; i++)
1815 REG_BASIC_BLOCK (i) = REG_BLOCK_UNKNOWN;
1816 renumber[i] = -1;
1820 if (renumber_p)
1821 reg_renumber = renumber;
1823 /* Tell the regset code about the new number of registers */
1824 MAX_REGNO_REG_SET (num_regs, new_p, renumber_p);
1826 reg_n_max = num_regs;
1830 /* This is the `regscan' pass of the compiler, run just before cse
1831 and again just before loop.
1833 It finds the first and last use of each pseudo-register
1834 and records them in the vectors regno_first_uid, regno_last_uid
1835 and counts the number of sets in the vector reg_n_sets.
1837 REPEAT is nonzero the second time this is called. */
1839 /* Maximum number of parallel sets and clobbers in any insn in this fn.
1840 Always at least 3, since the combiner could put that many together
1841 and we want this to remain correct for all the remaining passes. */
1843 int max_parallel;
1845 void
1846 reg_scan (f, nregs, repeat)
1847 rtx f;
1848 int nregs;
1849 int repeat;
1851 register rtx insn;
1853 allocate_reg_info (nregs, TRUE, FALSE);
1854 max_parallel = 3;
1856 for (insn = f; insn; insn = NEXT_INSN (insn))
1857 if (GET_CODE (insn) == INSN
1858 || GET_CODE (insn) == CALL_INSN
1859 || GET_CODE (insn) == JUMP_INSN)
1861 if (GET_CODE (PATTERN (insn)) == PARALLEL
1862 && XVECLEN (PATTERN (insn), 0) > max_parallel)
1863 max_parallel = XVECLEN (PATTERN (insn), 0);
1864 reg_scan_mark_refs (PATTERN (insn), insn, 0);
1866 if (REG_NOTES (insn))
1867 reg_scan_mark_refs (REG_NOTES (insn), insn, 1);
1871 /* X is the expression to scan. INSN is the insn it appears in.
1872 NOTE_FLAG is nonzero if X is from INSN's notes rather than its body. */
1874 static void
1875 reg_scan_mark_refs (x, insn, note_flag)
1876 rtx x;
1877 rtx insn;
1878 int note_flag;
1880 register enum rtx_code code = GET_CODE (x);
1881 register rtx dest;
1882 register rtx note;
1884 switch (code)
1886 case CONST_INT:
1887 case CONST:
1888 case CONST_DOUBLE:
1889 case CC0:
1890 case PC:
1891 case SYMBOL_REF:
1892 case LABEL_REF:
1893 case ADDR_VEC:
1894 case ADDR_DIFF_VEC:
1895 return;
1897 case REG:
1899 register int regno = REGNO (x);
1901 REGNO_LAST_NOTE_UID (regno) = INSN_UID (insn);
1902 if (!note_flag)
1903 REGNO_LAST_UID (regno) = INSN_UID (insn);
1904 if (REGNO_FIRST_UID (regno) == 0)
1905 REGNO_FIRST_UID (regno) = INSN_UID (insn);
1907 break;
1909 case EXPR_LIST:
1910 if (XEXP (x, 0))
1911 reg_scan_mark_refs (XEXP (x, 0), insn, note_flag);
1912 if (XEXP (x, 1))
1913 reg_scan_mark_refs (XEXP (x, 1), insn, note_flag);
1914 break;
1916 case INSN_LIST:
1917 if (XEXP (x, 1))
1918 reg_scan_mark_refs (XEXP (x, 1), insn, note_flag);
1919 break;
1921 case SET:
1922 /* Count a set of the destination if it is a register. */
1923 for (dest = SET_DEST (x);
1924 GET_CODE (dest) == SUBREG || GET_CODE (dest) == STRICT_LOW_PART
1925 || GET_CODE (dest) == ZERO_EXTEND;
1926 dest = XEXP (dest, 0))
1929 if (GET_CODE (dest) == REG)
1930 REG_N_SETS (REGNO (dest))++;
1932 /* If this is setting a pseudo from another pseudo or the sum of a
1933 pseudo and a constant integer and the other pseudo is known to be
1934 a pointer, set the destination to be a pointer as well.
1936 Likewise if it is setting the destination from an address or from a
1937 value equivalent to an address or to the sum of an address and
1938 something else.
1940 But don't do any of this if the pseudo corresponds to a user
1941 variable since it should have already been set as a pointer based
1942 on the type. */
1944 if (GET_CODE (SET_DEST (x)) == REG
1945 && REGNO (SET_DEST (x)) >= FIRST_PSEUDO_REGISTER
1946 /* If the destination pseudo is set more than once, then other
1947 sets might not be to a pointer value (consider access to a
1948 union in two threads of control in the presense of global
1949 optimizations). So only set REGNO_POINTER_FLAG on the destination
1950 pseudo if this is the only set of that pseudo. */
1951 && REG_N_SETS (REGNO (SET_DEST (x))) == 1
1952 && ! REG_USERVAR_P (SET_DEST (x))
1953 && ! REGNO_POINTER_FLAG (REGNO (SET_DEST (x)))
1954 && ((GET_CODE (SET_SRC (x)) == REG
1955 && REGNO_POINTER_FLAG (REGNO (SET_SRC (x))))
1956 || ((GET_CODE (SET_SRC (x)) == PLUS
1957 || GET_CODE (SET_SRC (x)) == LO_SUM)
1958 && GET_CODE (XEXP (SET_SRC (x), 1)) == CONST_INT
1959 && GET_CODE (XEXP (SET_SRC (x), 0)) == REG
1960 && REGNO_POINTER_FLAG (REGNO (XEXP (SET_SRC (x), 0))))
1961 || GET_CODE (SET_SRC (x)) == CONST
1962 || GET_CODE (SET_SRC (x)) == SYMBOL_REF
1963 || GET_CODE (SET_SRC (x)) == LABEL_REF
1964 || (GET_CODE (SET_SRC (x)) == HIGH
1965 && (GET_CODE (XEXP (SET_SRC (x), 0)) == CONST
1966 || GET_CODE (XEXP (SET_SRC (x), 0)) == SYMBOL_REF
1967 || GET_CODE (XEXP (SET_SRC (x), 0)) == LABEL_REF))
1968 || ((GET_CODE (SET_SRC (x)) == PLUS
1969 || GET_CODE (SET_SRC (x)) == LO_SUM)
1970 && (GET_CODE (XEXP (SET_SRC (x), 1)) == CONST
1971 || GET_CODE (XEXP (SET_SRC (x), 1)) == SYMBOL_REF
1972 || GET_CODE (XEXP (SET_SRC (x), 1)) == LABEL_REF))
1973 || ((note = find_reg_note (insn, REG_EQUAL, 0)) != 0
1974 && (GET_CODE (XEXP (note, 0)) == CONST
1975 || GET_CODE (XEXP (note, 0)) == SYMBOL_REF
1976 || GET_CODE (XEXP (note, 0)) == LABEL_REF))))
1977 REGNO_POINTER_FLAG (REGNO (SET_DEST (x))) = 1;
1979 /* ... fall through ... */
1981 default:
1983 register char *fmt = GET_RTX_FORMAT (code);
1984 register int i;
1985 for (i = GET_RTX_LENGTH (code) - 1; i >= 0; i--)
1987 if (fmt[i] == 'e')
1988 reg_scan_mark_refs (XEXP (x, i), insn, note_flag);
1989 else if (fmt[i] == 'E' && XVEC (x, i) != 0)
1991 register int j;
1992 for (j = XVECLEN (x, i) - 1; j >= 0; j--)
1993 reg_scan_mark_refs (XVECEXP (x, i, j), insn, note_flag);
2000 /* Return nonzero if C1 is a subset of C2, i.e., if every register in C1
2001 is also in C2. */
2004 reg_class_subset_p (c1, c2)
2005 register enum reg_class c1;
2006 register enum reg_class c2;
2008 if (c1 == c2) return 1;
2010 if (c2 == ALL_REGS)
2011 win:
2012 return 1;
2013 GO_IF_HARD_REG_SUBSET (reg_class_contents[(int)c1],
2014 reg_class_contents[(int)c2],
2015 win);
2016 return 0;
2019 /* Return nonzero if there is a register that is in both C1 and C2. */
2022 reg_classes_intersect_p (c1, c2)
2023 register enum reg_class c1;
2024 register enum reg_class c2;
2026 #ifdef HARD_REG_SET
2027 register
2028 #endif
2029 HARD_REG_SET c;
2031 if (c1 == c2) return 1;
2033 if (c1 == ALL_REGS || c2 == ALL_REGS)
2034 return 1;
2036 COPY_HARD_REG_SET (c, reg_class_contents[(int) c1]);
2037 AND_HARD_REG_SET (c, reg_class_contents[(int) c2]);
2039 GO_IF_HARD_REG_SUBSET (c, reg_class_contents[(int) NO_REGS], lose);
2040 return 1;
2042 lose:
2043 return 0;
2046 /* Release any memory allocated by register sets. */
2048 void
2049 regset_release_memory ()
2051 if (basic_block_live_at_start)
2053 free_regset_vector (basic_block_live_at_start, n_basic_blocks);
2054 basic_block_live_at_start = 0;
2057 FREE_REG_SET (regs_live_at_setjmp);
2058 bitmap_release_memory ();