(CONST_OK_FOR_LETTER_P): Only allow constants valid when inverted for 'K'.
[official-gcc.git] / gcc / regclass.c
blobbef30abe539995d4a1e0db5d7b6ab38f875a267c
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 (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 (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;
1019 /* By default, each operand is an input operand. */
1021 for (i = 0; i < n_ops; i++)
1022 op_types[i] = OP_READ;
1024 /* Process each alternative, each time minimizing an operand's cost with
1025 the cost for each operand in that alternative. */
1027 for (alt = 0; alt < n_alts; alt++)
1029 struct costs this_op_costs[MAX_RECOG_OPERANDS];
1030 int alt_fail = 0;
1031 int alt_cost = 0;
1032 enum reg_class classes[MAX_RECOG_OPERANDS];
1033 int class;
1035 for (i = 0; i < n_ops; i++)
1037 char *p = constraints[i];
1038 rtx op = ops[i];
1039 enum machine_mode mode = modes[i];
1040 int allows_mem = 0;
1041 int win = 0;
1042 char c;
1044 /* If this operand has no constraints at all, we can conclude
1045 nothing about it since anything is valid. */
1047 if (*p == 0)
1049 if (GET_CODE (op) == REG && REGNO (op) >= FIRST_PSEUDO_REGISTER)
1050 bzero ((char *) &this_op_costs[i], sizeof this_op_costs[i]);
1052 continue;
1055 if (*p == '%')
1056 p++;
1058 /* If this alternative is only relevant when this operand
1059 matches a previous operand, we do different things depending
1060 on whether this operand is a pseudo-reg or not. */
1062 if (p[0] >= '0' && p[0] <= '0' + i && (p[1] == ',' || p[1] == 0))
1064 j = p[0] - '0';
1065 classes[i] = classes[j];
1067 if (GET_CODE (op) != REG || REGNO (op) < FIRST_PSEUDO_REGISTER)
1069 /* If this matches the other operand, we have no added
1070 cost and we win. */
1071 if (rtx_equal_p (ops[j], op))
1072 win = 1;
1074 /* If we can put the other operand into a register, add to
1075 the cost of this alternative the cost to copy this
1076 operand to the register used for the other operand. */
1078 else if (classes[j] != NO_REGS)
1079 alt_cost += copy_cost (op, mode, classes[j], 1), win = 1;
1081 else if (GET_CODE (ops[j]) != REG
1082 || REGNO (ops[j]) < FIRST_PSEUDO_REGISTER)
1084 /* This op is a pseudo but the one it matches is not. */
1086 /* If we can't put the other operand into a register, this
1087 alternative can't be used. */
1089 if (classes[j] == NO_REGS)
1090 alt_fail = 1;
1092 /* Otherwise, add to the cost of this alternative the cost
1093 to copy the other operand to the register used for this
1094 operand. */
1096 else
1097 alt_cost += copy_cost (ops[j], mode, classes[j], 1);
1099 else
1101 /* The costs of this operand are the same as that of the
1102 other operand. However, if we cannot tie them, this
1103 alternative needs to do a copy, which is one
1104 instruction. */
1106 this_op_costs[i] = this_op_costs[j];
1107 if (REGNO (ops[i]) != REGNO (ops[j])
1108 && ! find_reg_note (insn, REG_DEAD, op))
1109 alt_cost += 2;
1111 /* This is in place of ordinary cost computation
1112 for this operand, so skip to the end of the
1113 alternative (should be just one character). */
1114 while (*p && *p++ != ',')
1117 constraints[i] = p;
1118 continue;
1122 /* Scan all the constraint letters. See if the operand matches
1123 any of the constraints. Collect the valid register classes
1124 and see if this operand accepts memory. */
1126 classes[i] = NO_REGS;
1127 while (*p && (c = *p++) != ',')
1128 switch (c)
1130 case '=':
1131 op_types[i] = OP_WRITE;
1132 break;
1134 case '+':
1135 op_types[i] = OP_READ_WRITE;
1136 break;
1138 case '*':
1139 /* Ignore the next letter for this pass. */
1140 p++;
1141 break;
1143 case '%':
1144 case '?': case '!': case '#':
1145 case '&':
1146 case '0': case '1': case '2': case '3': case '4':
1147 case 'p':
1148 break;
1150 case 'm': case 'o': case 'V':
1151 /* It doesn't seem worth distinguishing between offsettable
1152 and non-offsettable addresses here. */
1153 allows_mem = 1;
1154 if (GET_CODE (op) == MEM)
1155 win = 1;
1156 break;
1158 case '<':
1159 if (GET_CODE (op) == MEM
1160 && (GET_CODE (XEXP (op, 0)) == PRE_DEC
1161 || GET_CODE (XEXP (op, 0)) == POST_DEC))
1162 win = 1;
1163 break;
1165 case '>':
1166 if (GET_CODE (op) == MEM
1167 && (GET_CODE (XEXP (op, 0)) == PRE_INC
1168 || GET_CODE (XEXP (op, 0)) == POST_INC))
1169 win = 1;
1170 break;
1172 case 'E':
1173 /* Match any floating double constant, but only if
1174 we can examine the bits of it reliably. */
1175 if ((HOST_FLOAT_FORMAT != TARGET_FLOAT_FORMAT
1176 || HOST_BITS_PER_WIDE_INT != BITS_PER_WORD)
1177 && GET_MODE (op) != VOIDmode && ! flag_pretend_float)
1178 break;
1179 if (GET_CODE (op) == CONST_DOUBLE)
1180 win = 1;
1181 break;
1183 case 'F':
1184 if (GET_CODE (op) == CONST_DOUBLE)
1185 win = 1;
1186 break;
1188 case 'G':
1189 case 'H':
1190 if (GET_CODE (op) == CONST_DOUBLE
1191 && CONST_DOUBLE_OK_FOR_LETTER_P (op, c))
1192 win = 1;
1193 break;
1195 case 's':
1196 if (GET_CODE (op) == CONST_INT
1197 || (GET_CODE (op) == CONST_DOUBLE
1198 && GET_MODE (op) == VOIDmode))
1199 break;
1200 case 'i':
1201 if (CONSTANT_P (op)
1202 #ifdef LEGITIMATE_PIC_OPERAND_P
1203 && (! flag_pic || LEGITIMATE_PIC_OPERAND_P (op))
1204 #endif
1206 win = 1;
1207 break;
1209 case 'n':
1210 if (GET_CODE (op) == CONST_INT
1211 || (GET_CODE (op) == CONST_DOUBLE
1212 && GET_MODE (op) == VOIDmode))
1213 win = 1;
1214 break;
1216 case 'I':
1217 case 'J':
1218 case 'K':
1219 case 'L':
1220 case 'M':
1221 case 'N':
1222 case 'O':
1223 case 'P':
1224 if (GET_CODE (op) == CONST_INT
1225 && CONST_OK_FOR_LETTER_P (INTVAL (op), c))
1226 win = 1;
1227 break;
1229 case 'X':
1230 win = 1;
1231 break;
1233 #ifdef EXTRA_CONSTRAINT
1234 case 'Q':
1235 case 'R':
1236 case 'S':
1237 case 'T':
1238 case 'U':
1239 if (EXTRA_CONSTRAINT (op, c))
1240 win = 1;
1241 break;
1242 #endif
1244 case 'g':
1245 if (GET_CODE (op) == MEM
1246 || (CONSTANT_P (op)
1247 #ifdef LEGITIMATE_PIC_OPERAND_P
1248 && (! flag_pic || LEGITIMATE_PIC_OPERAND_P (op))
1249 #endif
1251 win = 1;
1252 allows_mem = 1;
1253 case 'r':
1254 classes[i]
1255 = reg_class_subunion[(int) classes[i]][(int) GENERAL_REGS];
1256 break;
1258 default:
1259 classes[i]
1260 = reg_class_subunion[(int) classes[i]]
1261 [(int) REG_CLASS_FROM_LETTER (c)];
1264 constraints[i] = p;
1266 /* How we account for this operand now depends on whether it is a
1267 pseudo register or not. If it is, we first check if any
1268 register classes are valid. If not, we ignore this alternative,
1269 since we want to assume that all pseudos get allocated for
1270 register preferencing. If some register class is valid, compute
1271 the costs of moving the pseudo into that class. */
1273 if (GET_CODE (op) == REG && REGNO (op) >= FIRST_PSEUDO_REGISTER)
1275 if (classes[i] == NO_REGS)
1276 alt_fail = 1;
1277 else
1279 struct costs *pp = &this_op_costs[i];
1281 for (class = 0; class < N_REG_CLASSES; class++)
1282 pp->cost[class] = may_move_cost[class][(int) classes[i]];
1284 /* If the alternative actually allows memory, make things
1285 a bit cheaper since we won't need an extra insn to
1286 load it. */
1288 pp->mem_cost = MEMORY_MOVE_COST (mode) - allows_mem;
1290 /* If we have assigned a class to this register in our
1291 first pass, add a cost to this alternative corresponding
1292 to what we would add if this register were not in the
1293 appropriate class. */
1295 if (prefclass)
1296 alt_cost
1297 += may_move_cost[prefclass[REGNO (op)]][(int) classes[i]];
1301 /* Otherwise, if this alternative wins, either because we
1302 have already determined that or if we have a hard register of
1303 the proper class, there is no cost for this alternative. */
1305 else if (win
1306 || (GET_CODE (op) == REG
1307 && reg_fits_class_p (op, classes[i], 0, GET_MODE (op))))
1310 /* If registers are valid, the cost of this alternative includes
1311 copying the object to and/or from a register. */
1313 else if (classes[i] != NO_REGS)
1315 if (op_types[i] != OP_WRITE)
1316 alt_cost += copy_cost (op, mode, classes[i], 1);
1318 if (op_types[i] != OP_READ)
1319 alt_cost += copy_cost (op, mode, classes[i], 0);
1322 /* The only other way this alternative can be used is if this is a
1323 constant that could be placed into memory. */
1325 else if (CONSTANT_P (op) && allows_mem)
1326 alt_cost += MEMORY_MOVE_COST (mode);
1327 else
1328 alt_fail = 1;
1331 if (alt_fail)
1332 continue;
1334 /* Finally, update the costs with the information we've calculated
1335 about this alternative. */
1337 for (i = 0; i < n_ops; i++)
1338 if (GET_CODE (ops[i]) == REG
1339 && REGNO (ops[i]) >= FIRST_PSEUDO_REGISTER)
1341 struct costs *pp = &op_costs[i], *qq = &this_op_costs[i];
1342 int scale = 1 + (op_types[i] == OP_READ_WRITE);
1344 pp->mem_cost = MIN (pp->mem_cost,
1345 (qq->mem_cost + alt_cost) * scale);
1347 for (class = 0; class < N_REG_CLASSES; class++)
1348 pp->cost[class] = MIN (pp->cost[class],
1349 (qq->cost[class] + alt_cost) * scale);
1354 /* Compute the cost of loading X into (if TO_P is non-zero) or from (if
1355 TO_P is zero) a register of class CLASS in mode MODE.
1357 X must not be a pseudo. */
1359 static int
1360 copy_cost (x, mode, class, to_p)
1361 rtx x;
1362 enum machine_mode mode;
1363 enum reg_class class;
1364 int to_p;
1366 enum reg_class secondary_class = NO_REGS;
1368 /* If X is a SCRATCH, there is actually nothing to move since we are
1369 assuming optimal allocation. */
1371 if (GET_CODE (x) == SCRATCH)
1372 return 0;
1374 /* Get the class we will actually use for a reload. */
1375 class = PREFERRED_RELOAD_CLASS (x, class);
1377 #ifdef HAVE_SECONDARY_RELOADS
1378 /* If we need a secondary reload (we assume here that we are using
1379 the secondary reload as an intermediate, not a scratch register), the
1380 cost is that to load the input into the intermediate register, then
1381 to copy them. We use a special value of TO_P to avoid recursion. */
1383 #ifdef SECONDARY_INPUT_RELOAD_CLASS
1384 if (to_p == 1)
1385 secondary_class = SECONDARY_INPUT_RELOAD_CLASS (class, mode, x);
1386 #endif
1388 #ifdef SECONDARY_OUTPUT_RELOAD_CLASS
1389 if (! to_p)
1390 secondary_class = SECONDARY_OUTPUT_RELOAD_CLASS (class, mode, x);
1391 #endif
1393 if (secondary_class != NO_REGS)
1394 return (move_cost[(int) secondary_class][(int) class]
1395 + copy_cost (x, mode, secondary_class, 2));
1396 #endif /* HAVE_SECONDARY_RELOADS */
1398 /* For memory, use the memory move cost, for (hard) registers, use the
1399 cost to move between the register classes, and use 2 for everything
1400 else (constants). */
1402 if (GET_CODE (x) == MEM || class == NO_REGS)
1403 return MEMORY_MOVE_COST (mode);
1405 else if (GET_CODE (x) == REG)
1406 return move_cost[(int) REGNO_REG_CLASS (REGNO (x))][(int) class];
1408 else
1409 /* If this is a constant, we may eventually want to call rtx_cost here. */
1410 return 2;
1413 /* Record the pseudo registers we must reload into hard registers
1414 in a subexpression of a memory address, X.
1416 CLASS is the class that the register needs to be in and is either
1417 BASE_REG_CLASS or INDEX_REG_CLASS.
1419 SCALE is twice the amount to multiply the cost by (it is twice so we
1420 can represent half-cost adjustments). */
1422 static void
1423 record_address_regs (x, class, scale)
1424 rtx x;
1425 enum reg_class class;
1426 int scale;
1428 register enum rtx_code code = GET_CODE (x);
1430 switch (code)
1432 case CONST_INT:
1433 case CONST:
1434 case CC0:
1435 case PC:
1436 case SYMBOL_REF:
1437 case LABEL_REF:
1438 return;
1440 case PLUS:
1441 /* When we have an address that is a sum,
1442 we must determine whether registers are "base" or "index" regs.
1443 If there is a sum of two registers, we must choose one to be
1444 the "base". Luckily, we can use the REGNO_POINTER_FLAG
1445 to make a good choice most of the time. We only need to do this
1446 on machines that can have two registers in an address and where
1447 the base and index register classes are different.
1449 ??? This code used to set REGNO_POINTER_FLAG in some cases, but
1450 that seems bogus since it should only be set when we are sure
1451 the register is being used as a pointer. */
1454 rtx arg0 = XEXP (x, 0);
1455 rtx arg1 = XEXP (x, 1);
1456 register enum rtx_code code0 = GET_CODE (arg0);
1457 register enum rtx_code code1 = GET_CODE (arg1);
1459 /* Look inside subregs. */
1460 if (code0 == SUBREG)
1461 arg0 = SUBREG_REG (arg0), code0 = GET_CODE (arg0);
1462 if (code1 == SUBREG)
1463 arg1 = SUBREG_REG (arg1), code1 = GET_CODE (arg1);
1465 /* If this machine only allows one register per address, it must
1466 be in the first operand. */
1468 if (MAX_REGS_PER_ADDRESS == 1)
1469 record_address_regs (arg0, class, scale);
1471 /* If index and base registers are the same on this machine, just
1472 record registers in any non-constant operands. We assume here,
1473 as well as in the tests below, that all addresses are in
1474 canonical form. */
1476 else if (INDEX_REG_CLASS == BASE_REG_CLASS)
1478 record_address_regs (arg0, class, scale);
1479 if (! CONSTANT_P (arg1))
1480 record_address_regs (arg1, class, scale);
1483 /* If the second operand is a constant integer, it doesn't change
1484 what class the first operand must be. */
1486 else if (code1 == CONST_INT || code1 == CONST_DOUBLE)
1487 record_address_regs (arg0, class, scale);
1489 /* If the second operand is a symbolic constant, the first operand
1490 must be an index register. */
1492 else if (code1 == SYMBOL_REF || code1 == CONST || code1 == LABEL_REF)
1493 record_address_regs (arg0, INDEX_REG_CLASS, scale);
1495 /* If this the sum of two registers where the first is known to be a
1496 pointer, it must be a base register with the second an index. */
1498 else if (code0 == REG && code1 == REG
1499 && REGNO_POINTER_FLAG (REGNO (arg0)))
1501 record_address_regs (arg0, BASE_REG_CLASS, scale);
1502 record_address_regs (arg1, INDEX_REG_CLASS, scale);
1505 /* If this is the sum of two registers and neither is known to
1506 be a pointer, count equal chances that each might be a base
1507 or index register. This case should be rare. */
1509 else if (code0 == REG && code1 == REG
1510 && ! REGNO_POINTER_FLAG (REGNO (arg0))
1511 && ! REGNO_POINTER_FLAG (REGNO (arg1)))
1513 record_address_regs (arg0, BASE_REG_CLASS, scale / 2);
1514 record_address_regs (arg0, INDEX_REG_CLASS, scale / 2);
1515 record_address_regs (arg1, BASE_REG_CLASS, scale / 2);
1516 record_address_regs (arg1, INDEX_REG_CLASS, scale / 2);
1519 /* In all other cases, the first operand is an index and the
1520 second is the base. */
1522 else
1524 record_address_regs (arg0, INDEX_REG_CLASS, scale);
1525 record_address_regs (arg1, BASE_REG_CLASS, scale);
1528 break;
1530 case POST_INC:
1531 case PRE_INC:
1532 case POST_DEC:
1533 case PRE_DEC:
1534 /* Double the importance of a pseudo register that is incremented
1535 or decremented, since it would take two extra insns
1536 if it ends up in the wrong place. If the operand is a pseudo,
1537 show it is being used in an INC_DEC context. */
1539 #ifdef FORBIDDEN_INC_DEC_CLASSES
1540 if (GET_CODE (XEXP (x, 0)) == REG
1541 && REGNO (XEXP (x, 0)) >= FIRST_PSEUDO_REGISTER)
1542 in_inc_dec[REGNO (XEXP (x, 0))] = 1;
1543 #endif
1545 record_address_regs (XEXP (x, 0), class, 2 * scale);
1546 break;
1548 case REG:
1550 register struct costs *pp = &costs[REGNO (x)];
1551 register int i;
1553 pp->mem_cost += (MEMORY_MOVE_COST (Pmode) * scale) / 2;
1555 for (i = 0; i < N_REG_CLASSES; i++)
1556 pp->cost[i] += (may_move_cost[i][(int) class] * scale) / 2;
1558 break;
1560 default:
1562 register char *fmt = GET_RTX_FORMAT (code);
1563 register int i;
1564 for (i = GET_RTX_LENGTH (code) - 1; i >= 0; i--)
1565 if (fmt[i] == 'e')
1566 record_address_regs (XEXP (x, i), class, scale);
1571 #ifdef FORBIDDEN_INC_DEC_CLASSES
1573 /* Return 1 if REG is valid as an auto-increment memory reference
1574 to an object of MODE. */
1576 static
1577 auto_inc_dec_reg_p (reg, mode)
1578 rtx reg;
1579 enum machine_mode mode;
1581 #ifdef HAVE_POST_INCREMENT
1582 if (memory_address_p (mode, gen_rtx (POST_INC, Pmode, reg)))
1583 return 1;
1584 #endif
1586 #ifdef HAVE_POST_DECREMENT
1587 if (memory_address_p (mode, gen_rtx (POST_DEC, Pmode, reg)))
1588 return 1;
1589 #endif
1591 #ifdef HAVE_PRE_INCREMENT
1592 if (memory_address_p (mode, gen_rtx (PRE_INC, Pmode, reg)))
1593 return 1;
1594 #endif
1596 #ifdef HAVE_PRE_DECREMENT
1597 if (memory_address_p (mode, gen_rtx (PRE_DEC, Pmode, reg)))
1598 return 1;
1599 #endif
1601 return 0;
1603 #endif
1605 #endif /* REGISTER_CONSTRAINTS */
1607 /* This is the `regscan' pass of the compiler, run just before cse
1608 and again just before loop.
1610 It finds the first and last use of each pseudo-register
1611 and records them in the vectors regno_first_uid, regno_last_uid
1612 and counts the number of sets in the vector reg_n_sets.
1614 REPEAT is nonzero the second time this is called. */
1616 /* Indexed by pseudo register number, gives uid of first insn using the reg
1617 (as of the time reg_scan is called). */
1619 int *regno_first_uid;
1621 /* Indexed by pseudo register number, gives uid of last insn using the reg
1622 (as of the time reg_scan is called). */
1624 int *regno_last_uid;
1626 /* Indexed by pseudo register number, gives uid of last insn using the reg
1627 or mentioning it in a note (as of the time reg_scan is called). */
1629 int *regno_last_note_uid;
1631 /* Record the number of registers we used when we allocated the above two
1632 tables. If we are called again with more than this, we must re-allocate
1633 the tables. */
1635 static int highest_regno_in_uid_map;
1637 /* Maximum number of parallel sets and clobbers in any insn in this fn.
1638 Always at least 3, since the combiner could put that many togetherm
1639 and we want this to remain correct for all the remaining passes. */
1641 int max_parallel;
1643 void
1644 reg_scan (f, nregs, repeat)
1645 rtx f;
1646 int nregs;
1647 int repeat;
1649 register rtx insn;
1651 if (!repeat || nregs > highest_regno_in_uid_map)
1653 /* Leave some spare space in case more regs are allocated. */
1654 highest_regno_in_uid_map = nregs + nregs / 20;
1655 regno_first_uid
1656 = (int *) oballoc (highest_regno_in_uid_map * sizeof (int));
1657 regno_last_uid
1658 = (int *) oballoc (highest_regno_in_uid_map * sizeof (int));
1659 regno_last_note_uid
1660 = (int *) oballoc (highest_regno_in_uid_map * sizeof (int));
1661 reg_n_sets
1662 = (short *) oballoc (highest_regno_in_uid_map * sizeof (short));
1665 bzero (regno_first_uid, highest_regno_in_uid_map * sizeof (int));
1666 bzero (regno_last_uid, highest_regno_in_uid_map * sizeof (int));
1667 bzero (regno_last_note_uid, highest_regno_in_uid_map * sizeof (int));
1668 bzero (reg_n_sets, highest_regno_in_uid_map * sizeof (short));
1670 max_parallel = 3;
1672 for (insn = f; insn; insn = NEXT_INSN (insn))
1673 if (GET_CODE (insn) == INSN
1674 || GET_CODE (insn) == CALL_INSN
1675 || GET_CODE (insn) == JUMP_INSN)
1677 if (GET_CODE (PATTERN (insn)) == PARALLEL
1678 && XVECLEN (PATTERN (insn), 0) > max_parallel)
1679 max_parallel = XVECLEN (PATTERN (insn), 0);
1680 reg_scan_mark_refs (PATTERN (insn), insn, 0);
1682 if (REG_NOTES (insn))
1683 reg_scan_mark_refs (REG_NOTES (insn), insn, 1);
1687 /* X is the expression to scan. INSN is the insn it appears in.
1688 NOTE_FLAG is nonzero if X is from INSN's notes rather than its body. */
1690 static void
1691 reg_scan_mark_refs (x, insn, note_flag)
1692 rtx x;
1693 rtx insn;
1694 int note_flag;
1696 register enum rtx_code code = GET_CODE (x);
1697 register rtx dest;
1698 register rtx note;
1700 switch (code)
1702 case CONST_INT:
1703 case CONST:
1704 case CONST_DOUBLE:
1705 case CC0:
1706 case PC:
1707 case SYMBOL_REF:
1708 case LABEL_REF:
1709 case ADDR_VEC:
1710 case ADDR_DIFF_VEC:
1711 return;
1713 case REG:
1715 register int regno = REGNO (x);
1717 regno_last_note_uid[regno] = INSN_UID (insn);
1718 if (!note_flag)
1719 regno_last_uid[regno] = INSN_UID (insn);
1720 if (regno_first_uid[regno] == 0)
1721 regno_first_uid[regno] = INSN_UID (insn);
1723 break;
1725 case EXPR_LIST:
1726 if (XEXP (x, 0))
1727 reg_scan_mark_refs (XEXP (x, 0), insn, note_flag);
1728 if (XEXP (x, 1))
1729 reg_scan_mark_refs (XEXP (x, 1), insn, note_flag);
1730 break;
1732 case INSN_LIST:
1733 if (XEXP (x, 1))
1734 reg_scan_mark_refs (XEXP (x, 1), insn, note_flag);
1735 break;
1737 case SET:
1738 /* Count a set of the destination if it is a register. */
1739 for (dest = SET_DEST (x);
1740 GET_CODE (dest) == SUBREG || GET_CODE (dest) == STRICT_LOW_PART
1741 || GET_CODE (dest) == ZERO_EXTEND;
1742 dest = XEXP (dest, 0))
1745 if (GET_CODE (dest) == REG)
1746 reg_n_sets[REGNO (dest)]++;
1748 /* If this is setting a pseudo from another pseudo or the sum of a
1749 pseudo and a constant integer and the other pseudo is known to be
1750 a pointer, set the destination to be a pointer as well.
1752 Likewise if it is setting the destination from an address or from a
1753 value equivalent to an address or to the sum of an address and
1754 something else.
1756 But don't do any of this if the pseudo corresponds to a user
1757 variable since it should have already been set as a pointer based
1758 on the type. */
1760 if (GET_CODE (SET_DEST (x)) == REG
1761 && REGNO (SET_DEST (x)) >= FIRST_PSEUDO_REGISTER
1762 && ! REG_USERVAR_P (SET_DEST (x))
1763 && ! REGNO_POINTER_FLAG (REGNO (SET_DEST (x)))
1764 && ((GET_CODE (SET_SRC (x)) == REG
1765 && REGNO_POINTER_FLAG (REGNO (SET_SRC (x))))
1766 || ((GET_CODE (SET_SRC (x)) == PLUS
1767 || GET_CODE (SET_SRC (x)) == LO_SUM)
1768 && GET_CODE (XEXP (SET_SRC (x), 1)) == CONST_INT
1769 && GET_CODE (XEXP (SET_SRC (x), 0)) == REG
1770 && REGNO_POINTER_FLAG (REGNO (XEXP (SET_SRC (x), 0))))
1771 || GET_CODE (SET_SRC (x)) == CONST
1772 || GET_CODE (SET_SRC (x)) == SYMBOL_REF
1773 || GET_CODE (SET_SRC (x)) == LABEL_REF
1774 || (GET_CODE (SET_SRC (x)) == HIGH
1775 && (GET_CODE (XEXP (SET_SRC (x), 0)) == CONST
1776 || GET_CODE (XEXP (SET_SRC (x), 0)) == SYMBOL_REF
1777 || GET_CODE (XEXP (SET_SRC (x), 0)) == LABEL_REF))
1778 || ((GET_CODE (SET_SRC (x)) == PLUS
1779 || GET_CODE (SET_SRC (x)) == LO_SUM)
1780 && (GET_CODE (XEXP (SET_SRC (x), 1)) == CONST
1781 || GET_CODE (XEXP (SET_SRC (x), 1)) == SYMBOL_REF
1782 || GET_CODE (XEXP (SET_SRC (x), 1)) == LABEL_REF))
1783 || ((note = find_reg_note (insn, REG_EQUAL, 0)) != 0
1784 && (GET_CODE (XEXP (note, 0)) == CONST
1785 || GET_CODE (XEXP (note, 0)) == SYMBOL_REF
1786 || GET_CODE (XEXP (note, 0)) == LABEL_REF))))
1787 REGNO_POINTER_FLAG (REGNO (SET_DEST (x))) = 1;
1789 /* ... fall through ... */
1791 default:
1793 register char *fmt = GET_RTX_FORMAT (code);
1794 register int i;
1795 for (i = GET_RTX_LENGTH (code) - 1; i >= 0; i--)
1797 if (fmt[i] == 'e')
1798 reg_scan_mark_refs (XEXP (x, i), insn, note_flag);
1799 else if (fmt[i] == 'E' && XVEC (x, i) != 0)
1801 register int j;
1802 for (j = XVECLEN (x, i) - 1; j >= 0; j--)
1803 reg_scan_mark_refs (XVECEXP (x, i, j), insn, note_flag);
1810 /* Return nonzero if C1 is a subset of C2, i.e., if every register in C1
1811 is also in C2. */
1814 reg_class_subset_p (c1, c2)
1815 register enum reg_class c1;
1816 register enum reg_class c2;
1818 if (c1 == c2) return 1;
1820 if (c2 == ALL_REGS)
1821 win:
1822 return 1;
1823 GO_IF_HARD_REG_SUBSET (reg_class_contents[(int)c1],
1824 reg_class_contents[(int)c2],
1825 win);
1826 return 0;
1829 /* Return nonzero if there is a register that is in both C1 and C2. */
1832 reg_classes_intersect_p (c1, c2)
1833 register enum reg_class c1;
1834 register enum reg_class c2;
1836 #ifdef HARD_REG_SET
1837 register
1838 #endif
1839 HARD_REG_SET c;
1841 if (c1 == c2) return 1;
1843 if (c1 == ALL_REGS || c2 == ALL_REGS)
1844 return 1;
1846 COPY_HARD_REG_SET (c, reg_class_contents[(int) c1]);
1847 AND_HARD_REG_SET (c, reg_class_contents[(int) c2]);
1849 GO_IF_HARD_REG_SUBSET (c, reg_class_contents[(int) NO_REGS], lose);
1850 return 1;
1852 lose:
1853 return 0;