(expand_inline_function): If called function calls alloca, save and
[official-gcc.git] / gcc / regclass.c
blob5e758549e8a5470761773e42a1c5735187b14c40
1 /* Compute register class preferences for pseudo-registers.
2 Copyright (C) 1987, 88, 91, 92, 93, 1994 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, 675 Mass Ave, Cambridge, MA 02139, USA. */
21 /* This file contains two passes of the compiler: reg_scan and reg_class.
22 It also defines some tables of information about the hardware registers
23 and a function init_reg_sets to initialize the tables. */
25 #include "config.h"
26 #include "rtl.h"
27 #include "hard-reg-set.h"
28 #include "flags.h"
29 #include "basic-block.h"
30 #include "regs.h"
31 #include "insn-config.h"
32 #include "recog.h"
33 #include "reload.h"
34 #include "real.h"
35 #include "bytecode.h"
37 #ifndef REGISTER_MOVE_COST
38 #define REGISTER_MOVE_COST(x, y) 2
39 #endif
41 #ifndef MEMORY_MOVE_COST
42 #define MEMORY_MOVE_COST(x) 4
43 #endif
45 /* If we have auto-increment or auto-decrement and we can have secondary
46 reloads, we are not allowed to use classes requiring secondary
47 reloads for psuedos auto-incremented since reload can't handle it. */
49 #ifdef AUTO_INC_DEC
50 #if defined(SECONDARY_INPUT_RELOAD_CLASS) || defined(SECONDARY_OUTPUT_RELOAD_CLASS)
51 #define FORBIDDEN_INC_DEC_CLASSES
52 #endif
53 #endif
55 /* Register tables used by many passes. */
57 /* Indexed by hard register number, contains 1 for registers
58 that are fixed use (stack pointer, pc, frame pointer, etc.).
59 These are the registers that cannot be used to allocate
60 a pseudo reg whose life does not cross calls. */
62 char fixed_regs[FIRST_PSEUDO_REGISTER];
64 /* Same info as a HARD_REG_SET. */
66 HARD_REG_SET fixed_reg_set;
68 /* Data for initializing the above. */
70 static char initial_fixed_regs[] = FIXED_REGISTERS;
72 /* Indexed by hard register number, contains 1 for registers
73 that are fixed use or are clobbered by function calls.
74 These are the registers that cannot be used to allocate
75 a pseudo reg whose life crosses calls. */
77 char call_used_regs[FIRST_PSEUDO_REGISTER];
79 /* Same info as a HARD_REG_SET. */
81 HARD_REG_SET call_used_reg_set;
83 /* Data for initializing the above. */
85 static char initial_call_used_regs[] = CALL_USED_REGISTERS;
87 /* Indexed by hard register number, contains 1 for registers that are
88 fixed use -- i.e. in fixed_regs -- or a function value return register
89 or STRUCT_VALUE_REGNUM or STATIC_CHAIN_REGNUM. These are the
90 registers that cannot hold quantities across calls even if we are
91 willing to save and restore them. */
93 char call_fixed_regs[FIRST_PSEUDO_REGISTER];
95 /* The same info as a HARD_REG_SET. */
97 HARD_REG_SET call_fixed_reg_set;
99 /* Number of non-fixed registers. */
101 int n_non_fixed_regs;
103 /* Indexed by hard register number, contains 1 for registers
104 that are being used for global register decls.
105 These must be exempt from ordinary flow analysis
106 and are also considered fixed. */
108 char global_regs[FIRST_PSEUDO_REGISTER];
110 /* Table of register numbers in the order in which to try to use them. */
111 #ifdef REG_ALLOC_ORDER
112 int reg_alloc_order[FIRST_PSEUDO_REGISTER] = REG_ALLOC_ORDER;
113 #endif
115 /* For each reg class, a HARD_REG_SET saying which registers are in it. */
117 HARD_REG_SET reg_class_contents[N_REG_CLASSES];
119 /* The same information, but as an array of unsigned ints. We copy from
120 these unsigned ints to the table above. We do this so the tm.h files
121 do not have to be aware of the wordsize for machines with <= 64 regs. */
123 #define N_REG_INTS \
124 ((FIRST_PSEUDO_REGISTER + (HOST_BITS_PER_INT - 1)) / HOST_BITS_PER_INT)
126 static unsigned int_reg_class_contents[N_REG_CLASSES][N_REG_INTS]
127 = REG_CLASS_CONTENTS;
129 /* For each reg class, number of regs it contains. */
131 int reg_class_size[N_REG_CLASSES];
133 /* For each reg class, table listing all the containing classes. */
135 enum reg_class reg_class_superclasses[N_REG_CLASSES][N_REG_CLASSES];
137 /* For each reg class, table listing all the classes contained in it. */
139 enum reg_class reg_class_subclasses[N_REG_CLASSES][N_REG_CLASSES];
141 /* For each pair of reg classes,
142 a largest reg class contained in their union. */
144 enum reg_class reg_class_subunion[N_REG_CLASSES][N_REG_CLASSES];
146 /* For each pair of reg classes,
147 the smallest reg class containing their union. */
149 enum reg_class reg_class_superunion[N_REG_CLASSES][N_REG_CLASSES];
151 /* Array containing all of the register names */
153 char *reg_names[] = REGISTER_NAMES;
155 /* For each hard register, the widest mode object that it can contain.
156 This will be a MODE_INT mode if the register can hold integers. Otherwise
157 it will be a MODE_FLOAT or a MODE_CC mode, whichever is valid for the
158 register. */
160 enum machine_mode reg_raw_mode[FIRST_PSEUDO_REGISTER];
162 /* Indexed by n, gives number of times (REG n) is set or clobbered.
163 This information remains valid for the rest of the compilation
164 of the current function; it is used to control register allocation.
166 This information applies to both hard registers and pseudo registers,
167 unlike much of the information above. */
169 short *reg_n_sets;
171 /* Maximum cost of moving from a register in one class to a register in
172 another class. Based on REGISTER_MOVE_COST. */
174 static int move_cost[N_REG_CLASSES][N_REG_CLASSES];
176 /* Similar, but here we don't have to move if the first index is a subset
177 of the second so in that case the cost is zero. */
179 static int may_move_cost[N_REG_CLASSES][N_REG_CLASSES];
181 #ifdef FORBIDDEN_INC_DEC_CLASSES
183 /* These are the classes that regs which are auto-incremented or decremented
184 cannot be put in. */
186 static int forbidden_inc_dec_class[N_REG_CLASSES];
188 /* Indexed by n, is non-zero if (REG n) is used in an auto-inc or auto-dec
189 context. */
191 static char *in_inc_dec;
193 #endif /* FORBIDDEN_INC_DEC_CLASSES */
195 /* Function called only once to initialize the above data on reg usage.
196 Once this is done, various switches may override. */
198 void
199 init_reg_sets ()
201 register int i, j;
203 /* First copy the register information from the initial int form into
204 the regsets. */
206 for (i = 0; i < N_REG_CLASSES; i++)
208 CLEAR_HARD_REG_SET (reg_class_contents[i]);
210 for (j = 0; j < FIRST_PSEUDO_REGISTER; j++)
211 if (int_reg_class_contents[i][j / HOST_BITS_PER_INT]
212 & ((unsigned) 1 << (j % HOST_BITS_PER_INT)))
213 SET_HARD_REG_BIT (reg_class_contents[i], j);
216 bcopy (initial_fixed_regs, fixed_regs, sizeof fixed_regs);
217 bcopy (initial_call_used_regs, call_used_regs, sizeof call_used_regs);
218 bzero (global_regs, sizeof global_regs);
220 /* Compute number of hard regs in each class. */
222 bzero ((char *) reg_class_size, sizeof reg_class_size);
223 for (i = 0; i < N_REG_CLASSES; i++)
224 for (j = 0; j < FIRST_PSEUDO_REGISTER; j++)
225 if (TEST_HARD_REG_BIT (reg_class_contents[i], j))
226 reg_class_size[i]++;
228 /* Initialize the table of subunions.
229 reg_class_subunion[I][J] gets the largest-numbered reg-class
230 that is contained in the union of classes I and J. */
232 for (i = 0; i < N_REG_CLASSES; i++)
234 for (j = 0; j < N_REG_CLASSES; j++)
236 #ifdef HARD_REG_SET
237 register /* Declare it register if it's a scalar. */
238 #endif
239 HARD_REG_SET c;
240 register int k;
242 COPY_HARD_REG_SET (c, reg_class_contents[i]);
243 IOR_HARD_REG_SET (c, reg_class_contents[j]);
244 for (k = 0; k < N_REG_CLASSES; k++)
246 GO_IF_HARD_REG_SUBSET (reg_class_contents[k], c,
247 subclass1);
248 continue;
250 subclass1:
251 /* keep the largest subclass */ /* SPEE 900308 */
252 GO_IF_HARD_REG_SUBSET (reg_class_contents[k],
253 reg_class_contents[(int) reg_class_subunion[i][j]],
254 subclass2);
255 reg_class_subunion[i][j] = (enum reg_class) k;
256 subclass2:
262 /* Initialize the table of superunions.
263 reg_class_superunion[I][J] gets the smallest-numbered reg-class
264 containing the union of classes I and J. */
266 for (i = 0; i < N_REG_CLASSES; i++)
268 for (j = 0; j < N_REG_CLASSES; j++)
270 #ifdef HARD_REG_SET
271 register /* Declare it register if it's a scalar. */
272 #endif
273 HARD_REG_SET c;
274 register int k;
276 COPY_HARD_REG_SET (c, reg_class_contents[i]);
277 IOR_HARD_REG_SET (c, reg_class_contents[j]);
278 for (k = 0; k < N_REG_CLASSES; k++)
279 GO_IF_HARD_REG_SUBSET (c, reg_class_contents[k], superclass);
281 superclass:
282 reg_class_superunion[i][j] = (enum reg_class) k;
286 /* Initialize the tables of subclasses and superclasses of each reg class.
287 First clear the whole table, then add the elements as they are found. */
289 for (i = 0; i < N_REG_CLASSES; i++)
291 for (j = 0; j < N_REG_CLASSES; j++)
293 reg_class_superclasses[i][j] = LIM_REG_CLASSES;
294 reg_class_subclasses[i][j] = LIM_REG_CLASSES;
298 for (i = 0; i < N_REG_CLASSES; i++)
300 if (i == (int) NO_REGS)
301 continue;
303 for (j = i + 1; j < N_REG_CLASSES; j++)
305 enum reg_class *p;
307 GO_IF_HARD_REG_SUBSET (reg_class_contents[i], reg_class_contents[j],
308 subclass);
309 continue;
310 subclass:
311 /* Reg class I is a subclass of J.
312 Add J to the table of superclasses of I. */
313 p = &reg_class_superclasses[i][0];
314 while (*p != LIM_REG_CLASSES) p++;
315 *p = (enum reg_class) j;
316 /* Add I to the table of superclasses of J. */
317 p = &reg_class_subclasses[j][0];
318 while (*p != LIM_REG_CLASSES) p++;
319 *p = (enum reg_class) i;
323 /* Initialize the move cost table. Find every subset of each class
324 and take the maximum cost of moving any subset to any other. */
326 for (i = 0; i < N_REG_CLASSES; i++)
327 for (j = 0; j < N_REG_CLASSES; j++)
329 int cost = i == j ? 2 : REGISTER_MOVE_COST (i, j);
330 enum reg_class *p1, *p2;
332 for (p2 = &reg_class_subclasses[j][0]; *p2 != LIM_REG_CLASSES; p2++)
333 if (*p2 != i)
334 cost = MAX (cost, REGISTER_MOVE_COST (i, *p2));
336 for (p1 = &reg_class_subclasses[i][0]; *p1 != LIM_REG_CLASSES; p1++)
338 if (*p1 != j)
339 cost = MAX (cost, REGISTER_MOVE_COST (*p1, j));
341 for (p2 = &reg_class_subclasses[j][0];
342 *p2 != LIM_REG_CLASSES; p2++)
343 if (*p1 != *p2)
344 cost = MAX (cost, REGISTER_MOVE_COST (*p1, *p2));
347 move_cost[i][j] = cost;
349 if (reg_class_subset_p (i, j))
350 cost = 0;
352 may_move_cost[i][j] = cost;
356 /* After switches have been processed, which perhaps alter
357 `fixed_regs' and `call_used_regs', convert them to HARD_REG_SETs. */
359 static void
360 init_reg_sets_1 ()
362 register int i;
364 /* This macro allows the fixed or call-used registers
365 to depend on target flags. */
367 #ifdef CONDITIONAL_REGISTER_USAGE
368 CONDITIONAL_REGISTER_USAGE;
369 #endif
371 /* Initialize "constant" tables. */
373 CLEAR_HARD_REG_SET (fixed_reg_set);
374 CLEAR_HARD_REG_SET (call_used_reg_set);
375 CLEAR_HARD_REG_SET (call_fixed_reg_set);
377 bcopy (fixed_regs, call_fixed_regs, sizeof call_fixed_regs);
379 n_non_fixed_regs = 0;
381 for (i = 0; i < FIRST_PSEUDO_REGISTER; i++)
383 if (fixed_regs[i])
384 SET_HARD_REG_BIT (fixed_reg_set, i);
385 else
386 n_non_fixed_regs++;
388 if (call_used_regs[i])
389 SET_HARD_REG_BIT (call_used_reg_set, i);
390 if (call_fixed_regs[i])
391 SET_HARD_REG_BIT (call_fixed_reg_set, i);
395 /* Compute the table of register modes.
396 These values are used to record death information for individual registers
397 (as opposed to a multi-register mode). */
399 static void
400 init_reg_modes ()
402 register int i;
404 for (i = 0; i < FIRST_PSEUDO_REGISTER; i++)
406 reg_raw_mode[i] = choose_hard_reg_mode (i, 1);
408 /* If we couldn't find a valid mode, fall back to `word_mode'.
409 ??? We assume `word_mode' has already been initialized.
410 ??? One situation in which we need to do this is on the mips where
411 HARD_REGNO_NREGS (fpreg, [SD]Fmode) returns 2. Ideally we'd like
412 to use DF mode for the even registers and VOIDmode for the odd
413 (for the cpu models where the odd ones are inaccessable). */
414 if (reg_raw_mode[i] == VOIDmode)
415 reg_raw_mode[i] = word_mode;
419 /* Finish initializing the register sets and
420 initialize the register modes. */
422 void
423 init_regs ()
425 /* This finishes what was started by init_reg_sets, but couldn't be done
426 until after register usage was specified. */
427 if (!output_bytecode)
428 init_reg_sets_1 ();
430 init_reg_modes ();
433 /* Return a machine mode that is legitimate for hard reg REGNO and large
434 enough to save nregs. If we can't find one, return VOIDmode. */
436 enum machine_mode
437 choose_hard_reg_mode (regno, nregs)
438 int regno;
439 int nregs;
441 enum machine_mode found_mode = VOIDmode, mode;
443 /* We first look for the largest integer mode that can be validly
444 held in REGNO. If none, we look for the largest floating-point mode.
445 If we still didn't find a valid mode, try CCmode. */
447 for (mode = GET_CLASS_NARROWEST_MODE (MODE_INT);
448 mode != VOIDmode;
449 mode = GET_MODE_WIDER_MODE (mode))
450 if (HARD_REGNO_NREGS (regno, mode) == nregs
451 && HARD_REGNO_MODE_OK (regno, mode))
452 found_mode = mode;
454 if (found_mode != VOIDmode)
455 return found_mode;
457 for (mode = GET_CLASS_NARROWEST_MODE (MODE_FLOAT);
458 mode != VOIDmode;
459 mode = GET_MODE_WIDER_MODE (mode))
460 if (HARD_REGNO_NREGS (regno, mode) == nregs
461 && HARD_REGNO_MODE_OK (regno, mode))
462 found_mode = mode;
464 if (found_mode != VOIDmode)
465 return found_mode;
467 if (HARD_REGNO_NREGS (regno, CCmode) == nregs
468 && HARD_REGNO_MODE_OK (regno, CCmode))
469 return CCmode;
471 /* We can't find a mode valid for this register. */
472 return VOIDmode;
475 /* Specify the usage characteristics of the register named NAME.
476 It should be a fixed register if FIXED and a
477 call-used register if CALL_USED. */
479 void
480 fix_register (name, fixed, call_used)
481 char *name;
482 int fixed, call_used;
484 int i;
486 if (output_bytecode)
488 warning ("request to mark `%s' as %s ignored by bytecode compiler",
489 name, call_used ? "call-used" : "fixed");
490 return;
493 /* Decode the name and update the primary form of
494 the register info. */
496 if ((i = decode_reg_name (name)) >= 0)
498 fixed_regs[i] = fixed;
499 call_used_regs[i] = call_used;
501 else
503 warning ("unknown register name: %s", name);
507 /* Mark register number I as global. */
509 void
510 globalize_reg (i)
511 int i;
513 if (global_regs[i])
515 warning ("register used for two global register variables");
516 return;
519 if (call_used_regs[i] && ! fixed_regs[i])
520 warning ("call-clobbered register used for global register variable");
522 global_regs[i] = 1;
524 /* If already fixed, nothing else to do. */
525 if (fixed_regs[i])
526 return;
528 fixed_regs[i] = call_used_regs[i] = call_fixed_regs[i] = 1;
529 n_non_fixed_regs--;
531 SET_HARD_REG_BIT (fixed_reg_set, i);
532 SET_HARD_REG_BIT (call_used_reg_set, i);
533 SET_HARD_REG_BIT (call_fixed_reg_set, i);
536 /* Now the data and code for the `regclass' pass, which happens
537 just before local-alloc. */
539 /* The `costs' struct records the cost of using a hard register of each class
540 and of using memory for each pseudo. We use this data to set up
541 register class preferences. */
543 struct costs
545 int cost[N_REG_CLASSES];
546 int mem_cost;
549 /* Record the cost of each class for each pseudo. */
551 static struct costs *costs;
553 /* Record the same data by operand number, accumulated for each alternative
554 in an insn. The contribution to a pseudo is that of the minimum-cost
555 alternative. */
557 static struct costs op_costs[MAX_RECOG_OPERANDS];
559 /* (enum reg_class) prefclass[R] is the preferred class for pseudo number R.
560 This is available after `regclass' is run. */
562 static char *prefclass;
564 /* altclass[R] is a register class that we should use for allocating
565 pseudo number R if no register in the preferred class is available.
566 If no register in this class is available, memory is preferred.
568 It might appear to be more general to have a bitmask of classes here,
569 but since it is recommended that there be a class corresponding to the
570 union of most major pair of classes, that generality is not required.
572 This is available after `regclass' is run. */
574 static char *altclass;
576 /* Record the depth of loops that we are in. */
578 static int loop_depth;
580 /* Account for the fact that insns within a loop are executed very commonly,
581 but don't keep doing this as loops go too deep. */
583 static int loop_cost;
585 static void record_reg_classes PROTO((int, int, rtx *, enum machine_mode *,
586 char **, rtx));
587 static int copy_cost PROTO((rtx, enum machine_mode,
588 enum reg_class, int));
589 static void record_address_regs PROTO((rtx, enum reg_class, int));
590 static auto_inc_dec_reg_p PROTO((rtx, enum machine_mode));
591 static void reg_scan_mark_refs PROTO((rtx, rtx, int));
593 /* Return the reg_class in which pseudo reg number REGNO is best allocated.
594 This function is sometimes called before the info has been computed.
595 When that happens, just return GENERAL_REGS, which is innocuous. */
597 enum reg_class
598 reg_preferred_class (regno)
599 int regno;
601 if (prefclass == 0)
602 return GENERAL_REGS;
603 return (enum reg_class) prefclass[regno];
606 enum reg_class
607 reg_alternate_class (regno)
609 if (prefclass == 0)
610 return ALL_REGS;
612 return (enum reg_class) altclass[regno];
615 /* This prevents dump_flow_info from losing if called
616 before regclass is run. */
618 void
619 regclass_init ()
621 prefclass = 0;
624 /* This is a pass of the compiler that scans all instructions
625 and calculates the preferred class for each pseudo-register.
626 This information can be accessed later by calling `reg_preferred_class'.
627 This pass comes just before local register allocation. */
629 void
630 regclass (f, nregs)
631 rtx f;
632 int nregs;
634 #ifdef REGISTER_CONSTRAINTS
635 register rtx insn;
636 register int i, j;
637 struct costs init_cost;
638 rtx set;
639 int pass;
641 init_recog ();
643 costs = (struct costs *) alloca (nregs * sizeof (struct costs));
645 #ifdef FORBIDDEN_INC_DEC_CLASSES
647 in_inc_dec = (char *) alloca (nregs);
649 /* Initialize information about which register classes can be used for
650 pseudos that are auto-incremented or auto-decremented. It would
651 seem better to put this in init_reg_sets, but we need to be able
652 to allocate rtx, which we can't do that early. */
654 for (i = 0; i < N_REG_CLASSES; i++)
656 rtx r = gen_rtx (REG, VOIDmode, 0);
657 enum machine_mode m;
659 for (j = 0; j < FIRST_PSEUDO_REGISTER; j++)
660 if (TEST_HARD_REG_BIT (reg_class_contents[i], j))
662 REGNO (r) = j;
664 for (m = VOIDmode; (int) m < (int) MAX_MACHINE_MODE;
665 m = (enum machine_mode) ((int) m + 1))
666 if (HARD_REGNO_MODE_OK (j, m))
668 PUT_MODE (r, m);
670 /* If a register is not directly suitable for an
671 auto-increment or decrement addressing mode and
672 requires secondary reloads, disallow its class from
673 being used in such addresses. */
675 if ((0
676 #ifdef SECONDARY_INPUT_RELOAD_CLASS
677 || (SECONDARY_INPUT_RELOAD_CLASS (BASE_REG_CLASS, m, r)
678 != NO_REGS)
679 #endif
680 #ifdef SECONDARY_OUTPUT_RELOAD_CLASS
681 || (SECONDARY_OUTPUT_RELOAD_CLASS (BASE_REG_CLASS, m, r)
682 != NO_REGS)
683 #endif
685 && ! auto_inc_dec_reg_p (r, m))
686 forbidden_inc_dec_class[i] = 1;
690 #endif /* FORBIDDEN_INC_DEC_CLASSES */
692 init_cost.mem_cost = 10000;
693 for (i = 0; i < N_REG_CLASSES; i++)
694 init_cost.cost[i] = 10000;
696 /* Normally we scan the insns once and determine the best class to use for
697 each register. However, if -fexpensive_optimizations are on, we do so
698 twice, the second time using the tentative best classes to guide the
699 selection. */
701 for (pass = 0; pass <= flag_expensive_optimizations; pass++)
703 /* Zero out our accumulation of the cost of each class for each reg. */
705 bzero ((char *) costs, nregs * sizeof (struct costs));
707 #ifdef FORBIDDEN_INC_DEC_CLASSES
708 bzero (in_inc_dec, nregs);
709 #endif
711 loop_depth = 0, loop_cost = 1;
713 /* Scan the instructions and record each time it would
714 save code to put a certain register in a certain class. */
716 for (insn = f; insn; insn = NEXT_INSN (insn))
718 char *constraints[MAX_RECOG_OPERANDS];
719 enum machine_mode modes[MAX_RECOG_OPERANDS];
720 int nalternatives;
721 int noperands;
723 /* Show that an insn inside a loop is likely to be executed three
724 times more than insns outside a loop. This is much more aggressive
725 than the assumptions made elsewhere and is being tried as an
726 experiment. */
728 if (GET_CODE (insn) == NOTE
729 && NOTE_LINE_NUMBER (insn) == NOTE_INSN_LOOP_BEG)
730 loop_depth++, loop_cost = 1 << (2 * MIN (loop_depth, 5));
731 else if (GET_CODE (insn) == NOTE
732 && NOTE_LINE_NUMBER (insn) == NOTE_INSN_LOOP_END)
733 loop_depth--, loop_cost = 1 << (2 * MIN (loop_depth, 5));
735 else if ((GET_CODE (insn) == INSN
736 && GET_CODE (PATTERN (insn)) != USE
737 && GET_CODE (PATTERN (insn)) != CLOBBER
738 && GET_CODE (PATTERN (insn)) != ASM_INPUT)
739 || (GET_CODE (insn) == JUMP_INSN
740 && GET_CODE (PATTERN (insn)) != ADDR_VEC
741 && GET_CODE (PATTERN (insn)) != ADDR_DIFF_VEC)
742 || GET_CODE (insn) == CALL_INSN)
744 if (GET_CODE (insn) == INSN
745 && (noperands = asm_noperands (PATTERN (insn))) >= 0)
747 decode_asm_operands (PATTERN (insn), recog_operand, NULL_PTR,
748 constraints, modes);
749 nalternatives = (noperands == 0 ? 0
750 : n_occurrences (',', constraints[0]) + 1);
752 else
754 int insn_code_number = recog_memoized (insn);
755 rtx note;
757 set = single_set (insn);
758 insn_extract (insn);
760 nalternatives = insn_n_alternatives[insn_code_number];
761 noperands = insn_n_operands[insn_code_number];
763 /* If this insn loads a parameter from its stack slot, then
764 it represents a savings, rather than a cost, if the
765 parameter is stored in memory. Record this fact. */
767 if (set != 0 && GET_CODE (SET_DEST (set)) == REG
768 && GET_CODE (SET_SRC (set)) == MEM
769 && (note = find_reg_note (insn, REG_EQUIV,
770 NULL_RTX)) != 0
771 && GET_CODE (XEXP (note, 0)) == MEM)
773 costs[REGNO (SET_DEST (set))].mem_cost
774 -= (MEMORY_MOVE_COST (GET_MODE (SET_DEST (set)))
775 * loop_cost);
776 record_address_regs (XEXP (SET_SRC (set), 0),
777 BASE_REG_CLASS, loop_cost * 2);
778 continue;
781 /* Improve handling of two-address insns such as
782 (set X (ashift CONST Y)) where CONST must be made to
783 match X. Change it into two insns: (set X CONST)
784 (set X (ashift X Y)). If we left this for reloading, it
785 would probably get three insns because X and Y might go
786 in the same place. This prevents X and Y from receiving
787 the same hard reg.
789 We can only do this if the modes of operands 0 and 1
790 (which might not be the same) are tieable and we only need
791 do this during our first pass. */
793 if (pass == 0 && optimize
794 && noperands >= 3
795 && insn_operand_constraint[insn_code_number][1][0] == '0'
796 && insn_operand_constraint[insn_code_number][1][1] == 0
797 && CONSTANT_P (recog_operand[1])
798 && ! rtx_equal_p (recog_operand[0], recog_operand[1])
799 && ! rtx_equal_p (recog_operand[0], recog_operand[2])
800 && GET_CODE (recog_operand[0]) == REG
801 && MODES_TIEABLE_P (GET_MODE (recog_operand[0]),
802 insn_operand_mode[insn_code_number][1]))
804 rtx previnsn = prev_real_insn (insn);
805 rtx dest
806 = gen_lowpart (insn_operand_mode[insn_code_number][1],
807 recog_operand[0]);
808 rtx newinsn
809 = emit_insn_before (gen_move_insn (dest,
810 recog_operand[1]),
811 insn);
813 /* If this insn was the start of a basic block,
814 include the new insn in that block.
815 We need not check for code_label here;
816 while a basic block can start with a code_label,
817 INSN could not be at the beginning of that block. */
818 if (previnsn == 0 || GET_CODE (previnsn) == JUMP_INSN)
820 int b;
821 for (b = 0; b < n_basic_blocks; b++)
822 if (insn == basic_block_head[b])
823 basic_block_head[b] = newinsn;
826 /* This makes one more setting of new insns's dest. */
827 reg_n_sets[REGNO (recog_operand[0])]++;
829 *recog_operand_loc[1] = recog_operand[0];
830 for (i = insn_n_dups[insn_code_number] - 1; i >= 0; i--)
831 if (recog_dup_num[i] == 1)
832 *recog_dup_loc[i] = recog_operand[0];
834 insn = PREV_INSN (newinsn);
835 continue;
838 for (i = 0; i < noperands; i++)
840 constraints[i]
841 = insn_operand_constraint[insn_code_number][i];
842 modes[i] = insn_operand_mode[insn_code_number][i];
846 /* If we get here, we are set up to record the costs of all the
847 operands for this insn. Start by initializing the costs.
848 Then handle any address registers. Finally record the desired
849 classes for any pseudos, doing it twice if some pair of
850 operands are commutative. */
852 for (i = 0; i < noperands; i++)
854 op_costs[i] = init_cost;
856 if (GET_CODE (recog_operand[i]) == SUBREG)
857 recog_operand[i] = SUBREG_REG (recog_operand[i]);
859 if (GET_CODE (recog_operand[i]) == MEM)
860 record_address_regs (XEXP (recog_operand[i], 0),
861 BASE_REG_CLASS, loop_cost * 2);
862 else if (constraints[i][0] == 'p')
863 record_address_regs (recog_operand[i],
864 BASE_REG_CLASS, loop_cost * 2);
867 /* Check for commutative in a separate loop so everything will
868 have been initialized. We must do this even if one operand
869 is a constant--see addsi3 in m68k.md. */
871 for (i = 0; i < noperands - 1; i++)
872 if (constraints[i][0] == '%')
874 char *xconstraints[MAX_RECOG_OPERANDS];
875 int j;
877 /* Handle commutative operands by swapping the constraints.
878 We assume the modes are the same. */
880 for (j = 0; j < noperands; j++)
881 xconstraints[j] = constraints[j];
883 xconstraints[i] = constraints[i+1];
884 xconstraints[i+1] = constraints[i];
885 record_reg_classes (nalternatives, noperands,
886 recog_operand, modes, xconstraints,
887 insn);
890 record_reg_classes (nalternatives, noperands, recog_operand,
891 modes, constraints, insn);
893 /* Now add the cost for each operand to the total costs for
894 its register. */
896 for (i = 0; i < noperands; i++)
897 if (GET_CODE (recog_operand[i]) == REG
898 && REGNO (recog_operand[i]) >= FIRST_PSEUDO_REGISTER)
900 int regno = REGNO (recog_operand[i]);
901 struct costs *p = &costs[regno], *q = &op_costs[i];
903 p->mem_cost += q->mem_cost * loop_cost;
904 for (j = 0; j < N_REG_CLASSES; j++)
905 p->cost[j] += q->cost[j] * loop_cost;
910 /* Now for each register look at how desirable each class is
911 and find which class is preferred. Store that in
912 `prefclass[REGNO]'. Record in `altclass[REGNO]' the largest register
913 class any of whose registers is better than memory. */
915 if (pass == 0)
917 prefclass = (char *) oballoc (nregs);
918 altclass = (char *) oballoc (nregs);
921 for (i = FIRST_PSEUDO_REGISTER; i < nregs; i++)
923 register int best_cost = (1 << (HOST_BITS_PER_INT - 2)) - 1;
924 enum reg_class best = ALL_REGS, alt = NO_REGS;
925 /* This is an enum reg_class, but we call it an int
926 to save lots of casts. */
927 register int class;
928 register struct costs *p = &costs[i];
930 for (class = (int) ALL_REGS - 1; class > 0; class--)
932 /* Ignore classes that are too small for this operand or
933 invalid for a operand that was auto-incremented. */
934 if (CLASS_MAX_NREGS (class, PSEUDO_REGNO_MODE (i))
935 > reg_class_size[class]
936 #ifdef FORBIDDEN_INC_DEC_CLASSES
937 || (in_inc_dec[i] && forbidden_inc_dec_class[class])
938 #endif
941 else if (p->cost[class] < best_cost)
943 best_cost = p->cost[class];
944 best = (enum reg_class) class;
946 else if (p->cost[class] == best_cost)
947 best = reg_class_subunion[(int)best][class];
950 /* Record the alternate register class; i.e., a class for which
951 every register in it is better than using memory. If adding a
952 class would make a smaller class (i.e., no union of just those
953 classes exists), skip that class. The major unions of classes
954 should be provided as a register class. Don't do this if we
955 will be doing it again later. */
957 if (pass == 1 || ! flag_expensive_optimizations)
958 for (class = 0; class < N_REG_CLASSES; class++)
959 if (p->cost[class] < p->mem_cost
960 && (reg_class_size[(int) reg_class_subunion[(int) alt][class]]
961 > reg_class_size[(int) alt])
962 #ifdef FORBIDDEN_INC_DEC_CLASSES
963 && ! (in_inc_dec[i] && forbidden_inc_dec_class[class])
964 #endif
966 alt = reg_class_subunion[(int) alt][class];
968 /* If we don't add any classes, nothing to try. */
969 if (alt == best)
970 alt = (int) NO_REGS;
972 /* We cast to (int) because (char) hits bugs in some compilers. */
973 prefclass[i] = (int) best;
974 altclass[i] = (int) alt;
977 #endif /* REGISTER_CONSTRAINTS */
980 #ifdef REGISTER_CONSTRAINTS
982 /* Record the cost of using memory or registers of various classes for
983 the operands in INSN.
985 N_ALTS is the number of alternatives.
987 N_OPS is the number of operands.
989 OPS is an array of the operands.
991 MODES are the modes of the operands, in case any are VOIDmode.
993 CONSTRAINTS are the constraints to use for the operands. This array
994 is modified by this procedure.
996 This procedure works alternative by alternative. For each alternative
997 we assume that we will be able to allocate all pseudos to their ideal
998 register class and calculate the cost of using that alternative. Then
999 we compute for each operand that is a pseudo-register, the cost of
1000 having the pseudo allocated to each register class and using it in that
1001 alternative. To this cost is added the cost of the alternative.
1003 The cost of each class for this insn is its lowest cost among all the
1004 alternatives. */
1006 static void
1007 record_reg_classes (n_alts, n_ops, ops, modes, constraints, insn)
1008 int n_alts;
1009 int n_ops;
1010 rtx *ops;
1011 enum machine_mode *modes;
1012 char **constraints;
1013 rtx insn;
1015 int alt;
1016 enum op_type {OP_READ, OP_WRITE, OP_READ_WRITE} op_types[MAX_RECOG_OPERANDS];
1017 int i, j;
1018 rtx set;
1020 /* By default, each operand is an input operand. */
1022 for (i = 0; i < n_ops; i++)
1023 op_types[i] = OP_READ;
1025 /* Process each alternative, each time minimizing an operand's cost with
1026 the cost for each operand in that alternative. */
1028 for (alt = 0; alt < n_alts; alt++)
1030 struct costs this_op_costs[MAX_RECOG_OPERANDS];
1031 int alt_fail = 0;
1032 int alt_cost = 0;
1033 enum reg_class classes[MAX_RECOG_OPERANDS];
1034 int class;
1036 for (i = 0; i < n_ops; i++)
1038 char *p = constraints[i];
1039 rtx op = ops[i];
1040 enum machine_mode mode = modes[i];
1041 int allows_mem = 0;
1042 int win = 0;
1043 char c;
1045 /* If this operand has no constraints at all, we can conclude
1046 nothing about it since anything is valid. */
1048 if (*p == 0)
1050 if (GET_CODE (op) == REG && REGNO (op) >= FIRST_PSEUDO_REGISTER)
1051 bzero ((char *) &this_op_costs[i], sizeof this_op_costs[i]);
1053 continue;
1056 if (*p == '%')
1057 p++;
1059 /* If this alternative is only relevant when this operand
1060 matches a previous operand, we do different things depending
1061 on whether this operand is a pseudo-reg or not. */
1063 if (p[0] >= '0' && p[0] <= '0' + i && (p[1] == ',' || p[1] == 0))
1065 j = p[0] - '0';
1066 classes[i] = classes[j];
1068 if (GET_CODE (op) != REG || REGNO (op) < FIRST_PSEUDO_REGISTER)
1070 /* If this matches the other operand, we have no added
1071 cost and we win. */
1072 if (rtx_equal_p (ops[j], op))
1073 win = 1;
1075 /* If we can put the other operand into a register, add to
1076 the cost of this alternative the cost to copy this
1077 operand to the register used for the other operand. */
1079 else if (classes[j] != NO_REGS)
1080 alt_cost += copy_cost (op, mode, classes[j], 1), win = 1;
1082 else if (GET_CODE (ops[j]) != REG
1083 || REGNO (ops[j]) < FIRST_PSEUDO_REGISTER)
1085 /* This op is a pseudo but the one it matches is not. */
1087 /* If we can't put the other operand into a register, this
1088 alternative can't be used. */
1090 if (classes[j] == NO_REGS)
1091 alt_fail = 1;
1093 /* Otherwise, add to the cost of this alternative the cost
1094 to copy the other operand to the register used for this
1095 operand. */
1097 else
1098 alt_cost += copy_cost (ops[j], mode, classes[j], 1);
1100 else
1102 /* The costs of this operand are the same as that of the
1103 other operand. However, if we cannot tie them, this
1104 alternative needs to do a copy, which is one
1105 instruction. */
1107 this_op_costs[i] = this_op_costs[j];
1108 if (REGNO (ops[i]) != REGNO (ops[j])
1109 && ! find_reg_note (insn, REG_DEAD, op))
1110 alt_cost += 2;
1112 /* This is in place of ordinary cost computation
1113 for this operand, so skip to the end of the
1114 alternative (should be just one character). */
1115 while (*p && *p++ != ',')
1118 constraints[i] = p;
1119 continue;
1123 /* Scan all the constraint letters. See if the operand matches
1124 any of the constraints. Collect the valid register classes
1125 and see if this operand accepts memory. */
1127 classes[i] = NO_REGS;
1128 while (*p && (c = *p++) != ',')
1129 switch (c)
1131 case '=':
1132 op_types[i] = OP_WRITE;
1133 break;
1135 case '+':
1136 op_types[i] = OP_READ_WRITE;
1137 break;
1139 case '*':
1140 /* Ignore the next letter for this pass. */
1141 p++;
1142 break;
1144 case '%':
1145 case '?': case '!': case '#':
1146 case '&':
1147 case '0': case '1': case '2': case '3': case '4':
1148 case 'p':
1149 break;
1151 case 'm': case 'o': case 'V':
1152 /* It doesn't seem worth distinguishing between offsettable
1153 and non-offsettable addresses here. */
1154 allows_mem = 1;
1155 if (GET_CODE (op) == MEM)
1156 win = 1;
1157 break;
1159 case '<':
1160 if (GET_CODE (op) == MEM
1161 && (GET_CODE (XEXP (op, 0)) == PRE_DEC
1162 || GET_CODE (XEXP (op, 0)) == POST_DEC))
1163 win = 1;
1164 break;
1166 case '>':
1167 if (GET_CODE (op) == MEM
1168 && (GET_CODE (XEXP (op, 0)) == PRE_INC
1169 || GET_CODE (XEXP (op, 0)) == POST_INC))
1170 win = 1;
1171 break;
1173 case 'E':
1174 /* Match any floating double constant, but only if
1175 we can examine the bits of it reliably. */
1176 if ((HOST_FLOAT_FORMAT != TARGET_FLOAT_FORMAT
1177 || HOST_BITS_PER_WIDE_INT != BITS_PER_WORD)
1178 && GET_MODE (op) != VOIDmode && ! flag_pretend_float)
1179 break;
1180 if (GET_CODE (op) == CONST_DOUBLE)
1181 win = 1;
1182 break;
1184 case 'F':
1185 if (GET_CODE (op) == CONST_DOUBLE)
1186 win = 1;
1187 break;
1189 case 'G':
1190 case 'H':
1191 if (GET_CODE (op) == CONST_DOUBLE
1192 && CONST_DOUBLE_OK_FOR_LETTER_P (op, c))
1193 win = 1;
1194 break;
1196 case 's':
1197 if (GET_CODE (op) == CONST_INT
1198 || (GET_CODE (op) == CONST_DOUBLE
1199 && GET_MODE (op) == VOIDmode))
1200 break;
1201 case 'i':
1202 if (CONSTANT_P (op)
1203 #ifdef LEGITIMATE_PIC_OPERAND_P
1204 && (! flag_pic || LEGITIMATE_PIC_OPERAND_P (op))
1205 #endif
1207 win = 1;
1208 break;
1210 case 'n':
1211 if (GET_CODE (op) == CONST_INT
1212 || (GET_CODE (op) == CONST_DOUBLE
1213 && GET_MODE (op) == VOIDmode))
1214 win = 1;
1215 break;
1217 case 'I':
1218 case 'J':
1219 case 'K':
1220 case 'L':
1221 case 'M':
1222 case 'N':
1223 case 'O':
1224 case 'P':
1225 if (GET_CODE (op) == CONST_INT
1226 && CONST_OK_FOR_LETTER_P (INTVAL (op), c))
1227 win = 1;
1228 break;
1230 case 'X':
1231 win = 1;
1232 break;
1234 #ifdef EXTRA_CONSTRAINT
1235 case 'Q':
1236 case 'R':
1237 case 'S':
1238 case 'T':
1239 case 'U':
1240 if (EXTRA_CONSTRAINT (op, c))
1241 win = 1;
1242 break;
1243 #endif
1245 case 'g':
1246 if (GET_CODE (op) == MEM
1247 || (CONSTANT_P (op)
1248 #ifdef LEGITIMATE_PIC_OPERAND_P
1249 && (! flag_pic || LEGITIMATE_PIC_OPERAND_P (op))
1250 #endif
1252 win = 1;
1253 allows_mem = 1;
1254 case 'r':
1255 classes[i]
1256 = reg_class_subunion[(int) classes[i]][(int) GENERAL_REGS];
1257 break;
1259 default:
1260 classes[i]
1261 = reg_class_subunion[(int) classes[i]]
1262 [(int) REG_CLASS_FROM_LETTER (c)];
1265 constraints[i] = p;
1267 /* How we account for this operand now depends on whether it is a
1268 pseudo register or not. If it is, we first check if any
1269 register classes are valid. If not, we ignore this alternative,
1270 since we want to assume that all pseudos get allocated for
1271 register preferencing. If some register class is valid, compute
1272 the costs of moving the pseudo into that class. */
1274 if (GET_CODE (op) == REG && REGNO (op) >= FIRST_PSEUDO_REGISTER)
1276 if (classes[i] == NO_REGS)
1277 alt_fail = 1;
1278 else
1280 struct costs *pp = &this_op_costs[i];
1282 for (class = 0; class < N_REG_CLASSES; class++)
1283 pp->cost[class] = may_move_cost[class][(int) classes[i]];
1285 /* If the alternative actually allows memory, make things
1286 a bit cheaper since we won't need an extra insn to
1287 load it. */
1289 pp->mem_cost = MEMORY_MOVE_COST (mode) - allows_mem;
1291 /* If we have assigned a class to this register in our
1292 first pass, add a cost to this alternative corresponding
1293 to what we would add if this register were not in the
1294 appropriate class. */
1296 if (prefclass)
1297 alt_cost
1298 += may_move_cost[prefclass[REGNO (op)]][(int) classes[i]];
1302 /* Otherwise, if this alternative wins, either because we
1303 have already determined that or if we have a hard register of
1304 the proper class, there is no cost for this alternative. */
1306 else if (win
1307 || (GET_CODE (op) == REG
1308 && reg_fits_class_p (op, classes[i], 0, GET_MODE (op))))
1311 /* If registers are valid, the cost of this alternative includes
1312 copying the object to and/or from a register. */
1314 else if (classes[i] != NO_REGS)
1316 if (op_types[i] != OP_WRITE)
1317 alt_cost += copy_cost (op, mode, classes[i], 1);
1319 if (op_types[i] != OP_READ)
1320 alt_cost += copy_cost (op, mode, classes[i], 0);
1323 /* The only other way this alternative can be used is if this is a
1324 constant that could be placed into memory. */
1326 else if (CONSTANT_P (op) && allows_mem)
1327 alt_cost += MEMORY_MOVE_COST (mode);
1328 else
1329 alt_fail = 1;
1332 if (alt_fail)
1333 continue;
1335 /* Finally, update the costs with the information we've calculated
1336 about this alternative. */
1338 for (i = 0; i < n_ops; i++)
1339 if (GET_CODE (ops[i]) == REG
1340 && REGNO (ops[i]) >= FIRST_PSEUDO_REGISTER)
1342 struct costs *pp = &op_costs[i], *qq = &this_op_costs[i];
1343 int scale = 1 + (op_types[i] == OP_READ_WRITE);
1345 pp->mem_cost = MIN (pp->mem_cost,
1346 (qq->mem_cost + alt_cost) * scale);
1348 for (class = 0; class < N_REG_CLASSES; class++)
1349 pp->cost[class] = MIN (pp->cost[class],
1350 (qq->cost[class] + alt_cost) * scale);
1354 /* If this insn is a single set copying operand 1 to operand 0
1355 and one is a pseudo with the other a hard reg that is in its
1356 own register class, set the cost of that register class to -1. */
1358 if ((set = single_set (insn)) != 0
1359 && ops[0] == SET_DEST (set) && ops[1] == SET_SRC (set)
1360 && GET_CODE (ops[0]) == REG && GET_CODE (ops[1]) == REG)
1361 for (i = 0; i <= 1; i++)
1362 if (REGNO (ops[i]) >= FIRST_PSEUDO_REGISTER)
1364 int regno = REGNO (ops[!i]);
1365 enum machine_mode mode = GET_MODE (ops[!i]);
1366 int class;
1367 int nr;
1369 if (regno >= FIRST_PSEUDO_REGISTER && prefclass != 0
1370 && (reg_class_size[prefclass[regno]]
1371 == CLASS_MAX_NREGS (prefclass[regno], mode)))
1372 op_costs[i].cost[prefclass[regno]] = -1;
1373 else if (regno < FIRST_PSEUDO_REGISTER)
1374 for (class = 0; class < N_REG_CLASSES; class++)
1375 if (TEST_HARD_REG_BIT (reg_class_contents[class], regno)
1376 && reg_class_size[class] == CLASS_MAX_NREGS (class, mode))
1378 if (reg_class_size[class] == 1)
1379 op_costs[i].cost[class] = -1;
1380 else
1382 for (nr = 0; nr < HARD_REGNO_NREGS(regno, mode); nr++)
1384 if (!TEST_HARD_REG_BIT (reg_class_contents[class], regno + nr))
1385 break;
1388 if (nr == HARD_REGNO_NREGS(regno,mode))
1389 op_costs[i].cost[class] = -1;
1395 /* Compute the cost of loading X into (if TO_P is non-zero) or from (if
1396 TO_P is zero) a register of class CLASS in mode MODE.
1398 X must not be a pseudo. */
1400 static int
1401 copy_cost (x, mode, class, to_p)
1402 rtx x;
1403 enum machine_mode mode;
1404 enum reg_class class;
1405 int to_p;
1407 enum reg_class secondary_class = NO_REGS;
1409 /* If X is a SCRATCH, there is actually nothing to move since we are
1410 assuming optimal allocation. */
1412 if (GET_CODE (x) == SCRATCH)
1413 return 0;
1415 /* Get the class we will actually use for a reload. */
1416 class = PREFERRED_RELOAD_CLASS (x, class);
1418 #ifdef HAVE_SECONDARY_RELOADS
1419 /* If we need a secondary reload (we assume here that we are using
1420 the secondary reload as an intermediate, not a scratch register), the
1421 cost is that to load the input into the intermediate register, then
1422 to copy them. We use a special value of TO_P to avoid recursion. */
1424 #ifdef SECONDARY_INPUT_RELOAD_CLASS
1425 if (to_p == 1)
1426 secondary_class = SECONDARY_INPUT_RELOAD_CLASS (class, mode, x);
1427 #endif
1429 #ifdef SECONDARY_OUTPUT_RELOAD_CLASS
1430 if (! to_p)
1431 secondary_class = SECONDARY_OUTPUT_RELOAD_CLASS (class, mode, x);
1432 #endif
1434 if (secondary_class != NO_REGS)
1435 return (move_cost[(int) secondary_class][(int) class]
1436 + copy_cost (x, mode, secondary_class, 2));
1437 #endif /* HAVE_SECONDARY_RELOADS */
1439 /* For memory, use the memory move cost, for (hard) registers, use the
1440 cost to move between the register classes, and use 2 for everything
1441 else (constants). */
1443 if (GET_CODE (x) == MEM || class == NO_REGS)
1444 return MEMORY_MOVE_COST (mode);
1446 else if (GET_CODE (x) == REG)
1447 return move_cost[(int) REGNO_REG_CLASS (REGNO (x))][(int) class];
1449 else
1450 /* If this is a constant, we may eventually want to call rtx_cost here. */
1451 return 2;
1454 /* Record the pseudo registers we must reload into hard registers
1455 in a subexpression of a memory address, X.
1457 CLASS is the class that the register needs to be in and is either
1458 BASE_REG_CLASS or INDEX_REG_CLASS.
1460 SCALE is twice the amount to multiply the cost by (it is twice so we
1461 can represent half-cost adjustments). */
1463 static void
1464 record_address_regs (x, class, scale)
1465 rtx x;
1466 enum reg_class class;
1467 int scale;
1469 register enum rtx_code code = GET_CODE (x);
1471 switch (code)
1473 case CONST_INT:
1474 case CONST:
1475 case CC0:
1476 case PC:
1477 case SYMBOL_REF:
1478 case LABEL_REF:
1479 return;
1481 case PLUS:
1482 /* When we have an address that is a sum,
1483 we must determine whether registers are "base" or "index" regs.
1484 If there is a sum of two registers, we must choose one to be
1485 the "base". Luckily, we can use the REGNO_POINTER_FLAG
1486 to make a good choice most of the time. We only need to do this
1487 on machines that can have two registers in an address and where
1488 the base and index register classes are different.
1490 ??? This code used to set REGNO_POINTER_FLAG in some cases, but
1491 that seems bogus since it should only be set when we are sure
1492 the register is being used as a pointer. */
1495 rtx arg0 = XEXP (x, 0);
1496 rtx arg1 = XEXP (x, 1);
1497 register enum rtx_code code0 = GET_CODE (arg0);
1498 register enum rtx_code code1 = GET_CODE (arg1);
1500 /* Look inside subregs. */
1501 if (code0 == SUBREG)
1502 arg0 = SUBREG_REG (arg0), code0 = GET_CODE (arg0);
1503 if (code1 == SUBREG)
1504 arg1 = SUBREG_REG (arg1), code1 = GET_CODE (arg1);
1506 /* If this machine only allows one register per address, it must
1507 be in the first operand. */
1509 if (MAX_REGS_PER_ADDRESS == 1)
1510 record_address_regs (arg0, class, scale);
1512 /* If index and base registers are the same on this machine, just
1513 record registers in any non-constant operands. We assume here,
1514 as well as in the tests below, that all addresses are in
1515 canonical form. */
1517 else if (INDEX_REG_CLASS == BASE_REG_CLASS)
1519 record_address_regs (arg0, class, scale);
1520 if (! CONSTANT_P (arg1))
1521 record_address_regs (arg1, class, scale);
1524 /* If the second operand is a constant integer, it doesn't change
1525 what class the first operand must be. */
1527 else if (code1 == CONST_INT || code1 == CONST_DOUBLE)
1528 record_address_regs (arg0, class, scale);
1530 /* If the second operand is a symbolic constant, the first operand
1531 must be an index register. */
1533 else if (code1 == SYMBOL_REF || code1 == CONST || code1 == LABEL_REF)
1534 record_address_regs (arg0, INDEX_REG_CLASS, scale);
1536 /* If this the sum of two registers where the first is known to be a
1537 pointer, it must be a base register with the second an index. */
1539 else if (code0 == REG && code1 == REG
1540 && REGNO_POINTER_FLAG (REGNO (arg0)))
1542 record_address_regs (arg0, BASE_REG_CLASS, scale);
1543 record_address_regs (arg1, INDEX_REG_CLASS, scale);
1546 /* If this is the sum of two registers and neither is known to
1547 be a pointer, count equal chances that each might be a base
1548 or index register. This case should be rare. */
1550 else if (code0 == REG && code1 == REG
1551 && ! REGNO_POINTER_FLAG (REGNO (arg0))
1552 && ! REGNO_POINTER_FLAG (REGNO (arg1)))
1554 record_address_regs (arg0, BASE_REG_CLASS, scale / 2);
1555 record_address_regs (arg0, INDEX_REG_CLASS, scale / 2);
1556 record_address_regs (arg1, BASE_REG_CLASS, scale / 2);
1557 record_address_regs (arg1, INDEX_REG_CLASS, scale / 2);
1560 /* In all other cases, the first operand is an index and the
1561 second is the base. */
1563 else
1565 record_address_regs (arg0, INDEX_REG_CLASS, scale);
1566 record_address_regs (arg1, BASE_REG_CLASS, scale);
1569 break;
1571 case POST_INC:
1572 case PRE_INC:
1573 case POST_DEC:
1574 case PRE_DEC:
1575 /* Double the importance of a pseudo register that is incremented
1576 or decremented, since it would take two extra insns
1577 if it ends up in the wrong place. If the operand is a pseudo,
1578 show it is being used in an INC_DEC context. */
1580 #ifdef FORBIDDEN_INC_DEC_CLASSES
1581 if (GET_CODE (XEXP (x, 0)) == REG
1582 && REGNO (XEXP (x, 0)) >= FIRST_PSEUDO_REGISTER)
1583 in_inc_dec[REGNO (XEXP (x, 0))] = 1;
1584 #endif
1586 record_address_regs (XEXP (x, 0), class, 2 * scale);
1587 break;
1589 case REG:
1591 register struct costs *pp = &costs[REGNO (x)];
1592 register int i;
1594 pp->mem_cost += (MEMORY_MOVE_COST (Pmode) * scale) / 2;
1596 for (i = 0; i < N_REG_CLASSES; i++)
1597 pp->cost[i] += (may_move_cost[i][(int) class] * scale) / 2;
1599 break;
1601 default:
1603 register char *fmt = GET_RTX_FORMAT (code);
1604 register int i;
1605 for (i = GET_RTX_LENGTH (code) - 1; i >= 0; i--)
1606 if (fmt[i] == 'e')
1607 record_address_regs (XEXP (x, i), class, scale);
1612 #ifdef FORBIDDEN_INC_DEC_CLASSES
1614 /* Return 1 if REG is valid as an auto-increment memory reference
1615 to an object of MODE. */
1617 static
1618 auto_inc_dec_reg_p (reg, mode)
1619 rtx reg;
1620 enum machine_mode mode;
1622 #ifdef HAVE_POST_INCREMENT
1623 if (memory_address_p (mode, gen_rtx (POST_INC, Pmode, reg)))
1624 return 1;
1625 #endif
1627 #ifdef HAVE_POST_DECREMENT
1628 if (memory_address_p (mode, gen_rtx (POST_DEC, Pmode, reg)))
1629 return 1;
1630 #endif
1632 #ifdef HAVE_PRE_INCREMENT
1633 if (memory_address_p (mode, gen_rtx (PRE_INC, Pmode, reg)))
1634 return 1;
1635 #endif
1637 #ifdef HAVE_PRE_DECREMENT
1638 if (memory_address_p (mode, gen_rtx (PRE_DEC, Pmode, reg)))
1639 return 1;
1640 #endif
1642 return 0;
1644 #endif
1646 #endif /* REGISTER_CONSTRAINTS */
1648 /* This is the `regscan' pass of the compiler, run just before cse
1649 and again just before loop.
1651 It finds the first and last use of each pseudo-register
1652 and records them in the vectors regno_first_uid, regno_last_uid
1653 and counts the number of sets in the vector reg_n_sets.
1655 REPEAT is nonzero the second time this is called. */
1657 /* Indexed by pseudo register number, gives uid of first insn using the reg
1658 (as of the time reg_scan is called). */
1660 int *regno_first_uid;
1662 /* Indexed by pseudo register number, gives uid of last insn using the reg
1663 (as of the time reg_scan is called). */
1665 int *regno_last_uid;
1667 /* Indexed by pseudo register number, gives uid of last insn using the reg
1668 or mentioning it in a note (as of the time reg_scan is called). */
1670 int *regno_last_note_uid;
1672 /* Record the number of registers we used when we allocated the above two
1673 tables. If we are called again with more than this, we must re-allocate
1674 the tables. */
1676 static int highest_regno_in_uid_map;
1678 /* Maximum number of parallel sets and clobbers in any insn in this fn.
1679 Always at least 3, since the combiner could put that many togetherm
1680 and we want this to remain correct for all the remaining passes. */
1682 int max_parallel;
1684 void
1685 reg_scan (f, nregs, repeat)
1686 rtx f;
1687 int nregs;
1688 int repeat;
1690 register rtx insn;
1692 if (!repeat || nregs > highest_regno_in_uid_map)
1694 /* Leave some spare space in case more regs are allocated. */
1695 highest_regno_in_uid_map = nregs + nregs / 20;
1696 regno_first_uid
1697 = (int *) oballoc (highest_regno_in_uid_map * sizeof (int));
1698 regno_last_uid
1699 = (int *) oballoc (highest_regno_in_uid_map * sizeof (int));
1700 regno_last_note_uid
1701 = (int *) oballoc (highest_regno_in_uid_map * sizeof (int));
1702 reg_n_sets
1703 = (short *) oballoc (highest_regno_in_uid_map * sizeof (short));
1706 bzero ((char *) regno_first_uid, highest_regno_in_uid_map * sizeof (int));
1707 bzero ((char *) regno_last_uid, highest_regno_in_uid_map * sizeof (int));
1708 bzero ((char *) regno_last_note_uid,
1709 highest_regno_in_uid_map * sizeof (int));
1710 bzero ((char *) reg_n_sets, highest_regno_in_uid_map * sizeof (short));
1712 max_parallel = 3;
1714 for (insn = f; insn; insn = NEXT_INSN (insn))
1715 if (GET_CODE (insn) == INSN
1716 || GET_CODE (insn) == CALL_INSN
1717 || GET_CODE (insn) == JUMP_INSN)
1719 if (GET_CODE (PATTERN (insn)) == PARALLEL
1720 && XVECLEN (PATTERN (insn), 0) > max_parallel)
1721 max_parallel = XVECLEN (PATTERN (insn), 0);
1722 reg_scan_mark_refs (PATTERN (insn), insn, 0);
1724 if (REG_NOTES (insn))
1725 reg_scan_mark_refs (REG_NOTES (insn), insn, 1);
1729 /* X is the expression to scan. INSN is the insn it appears in.
1730 NOTE_FLAG is nonzero if X is from INSN's notes rather than its body. */
1732 static void
1733 reg_scan_mark_refs (x, insn, note_flag)
1734 rtx x;
1735 rtx insn;
1736 int note_flag;
1738 register enum rtx_code code = GET_CODE (x);
1739 register rtx dest;
1740 register rtx note;
1742 switch (code)
1744 case CONST_INT:
1745 case CONST:
1746 case CONST_DOUBLE:
1747 case CC0:
1748 case PC:
1749 case SYMBOL_REF:
1750 case LABEL_REF:
1751 case ADDR_VEC:
1752 case ADDR_DIFF_VEC:
1753 return;
1755 case REG:
1757 register int regno = REGNO (x);
1759 regno_last_note_uid[regno] = INSN_UID (insn);
1760 if (!note_flag)
1761 regno_last_uid[regno] = INSN_UID (insn);
1762 if (regno_first_uid[regno] == 0)
1763 regno_first_uid[regno] = INSN_UID (insn);
1765 break;
1767 case EXPR_LIST:
1768 if (XEXP (x, 0))
1769 reg_scan_mark_refs (XEXP (x, 0), insn, note_flag);
1770 if (XEXP (x, 1))
1771 reg_scan_mark_refs (XEXP (x, 1), insn, note_flag);
1772 break;
1774 case INSN_LIST:
1775 if (XEXP (x, 1))
1776 reg_scan_mark_refs (XEXP (x, 1), insn, note_flag);
1777 break;
1779 case SET:
1780 /* Count a set of the destination if it is a register. */
1781 for (dest = SET_DEST (x);
1782 GET_CODE (dest) == SUBREG || GET_CODE (dest) == STRICT_LOW_PART
1783 || GET_CODE (dest) == ZERO_EXTEND;
1784 dest = XEXP (dest, 0))
1787 if (GET_CODE (dest) == REG)
1788 reg_n_sets[REGNO (dest)]++;
1790 /* If this is setting a pseudo from another pseudo or the sum of a
1791 pseudo and a constant integer and the other pseudo is known to be
1792 a pointer, set the destination to be a pointer as well.
1794 Likewise if it is setting the destination from an address or from a
1795 value equivalent to an address or to the sum of an address and
1796 something else.
1798 But don't do any of this if the pseudo corresponds to a user
1799 variable since it should have already been set as a pointer based
1800 on the type. */
1802 if (GET_CODE (SET_DEST (x)) == REG
1803 && REGNO (SET_DEST (x)) >= FIRST_PSEUDO_REGISTER
1804 && ! REG_USERVAR_P (SET_DEST (x))
1805 && ! REGNO_POINTER_FLAG (REGNO (SET_DEST (x)))
1806 && ((GET_CODE (SET_SRC (x)) == REG
1807 && REGNO_POINTER_FLAG (REGNO (SET_SRC (x))))
1808 || ((GET_CODE (SET_SRC (x)) == PLUS
1809 || GET_CODE (SET_SRC (x)) == LO_SUM)
1810 && GET_CODE (XEXP (SET_SRC (x), 1)) == CONST_INT
1811 && GET_CODE (XEXP (SET_SRC (x), 0)) == REG
1812 && REGNO_POINTER_FLAG (REGNO (XEXP (SET_SRC (x), 0))))
1813 || GET_CODE (SET_SRC (x)) == CONST
1814 || GET_CODE (SET_SRC (x)) == SYMBOL_REF
1815 || GET_CODE (SET_SRC (x)) == LABEL_REF
1816 || (GET_CODE (SET_SRC (x)) == HIGH
1817 && (GET_CODE (XEXP (SET_SRC (x), 0)) == CONST
1818 || GET_CODE (XEXP (SET_SRC (x), 0)) == SYMBOL_REF
1819 || GET_CODE (XEXP (SET_SRC (x), 0)) == LABEL_REF))
1820 || ((GET_CODE (SET_SRC (x)) == PLUS
1821 || GET_CODE (SET_SRC (x)) == LO_SUM)
1822 && (GET_CODE (XEXP (SET_SRC (x), 1)) == CONST
1823 || GET_CODE (XEXP (SET_SRC (x), 1)) == SYMBOL_REF
1824 || GET_CODE (XEXP (SET_SRC (x), 1)) == LABEL_REF))
1825 || ((note = find_reg_note (insn, REG_EQUAL, 0)) != 0
1826 && (GET_CODE (XEXP (note, 0)) == CONST
1827 || GET_CODE (XEXP (note, 0)) == SYMBOL_REF
1828 || GET_CODE (XEXP (note, 0)) == LABEL_REF))))
1829 REGNO_POINTER_FLAG (REGNO (SET_DEST (x))) = 1;
1831 /* ... fall through ... */
1833 default:
1835 register char *fmt = GET_RTX_FORMAT (code);
1836 register int i;
1837 for (i = GET_RTX_LENGTH (code) - 1; i >= 0; i--)
1839 if (fmt[i] == 'e')
1840 reg_scan_mark_refs (XEXP (x, i), insn, note_flag);
1841 else if (fmt[i] == 'E' && XVEC (x, i) != 0)
1843 register int j;
1844 for (j = XVECLEN (x, i) - 1; j >= 0; j--)
1845 reg_scan_mark_refs (XVECEXP (x, i, j), insn, note_flag);
1852 /* Return nonzero if C1 is a subset of C2, i.e., if every register in C1
1853 is also in C2. */
1856 reg_class_subset_p (c1, c2)
1857 register enum reg_class c1;
1858 register enum reg_class c2;
1860 if (c1 == c2) return 1;
1862 if (c2 == ALL_REGS)
1863 win:
1864 return 1;
1865 GO_IF_HARD_REG_SUBSET (reg_class_contents[(int)c1],
1866 reg_class_contents[(int)c2],
1867 win);
1868 return 0;
1871 /* Return nonzero if there is a register that is in both C1 and C2. */
1874 reg_classes_intersect_p (c1, c2)
1875 register enum reg_class c1;
1876 register enum reg_class c2;
1878 #ifdef HARD_REG_SET
1879 register
1880 #endif
1881 HARD_REG_SET c;
1883 if (c1 == c2) return 1;
1885 if (c1 == ALL_REGS || c2 == ALL_REGS)
1886 return 1;
1888 COPY_HARD_REG_SET (c, reg_class_contents[(int) c1]);
1889 AND_HARD_REG_SET (c, reg_class_contents[(int) c2]);
1891 GO_IF_HARD_REG_SUBSET (c, reg_class_contents[(int) NO_REGS], lose);
1892 return 1;
1894 lose:
1895 return 0;