1 /* IRA hard register and memory cost calculation for allocnos or pseudos.
2 Copyright (C) 2006, 2007, 2008, 2009, 2010, 2011
3 Free Software Foundation, Inc.
4 Contributed by Vladimir Makarov <vmakarov@redhat.com>.
6 This file is part of GCC.
8 GCC is free software; you can redistribute it and/or modify it under
9 the terms of the GNU General Public License as published by the Free
10 Software Foundation; either version 3, or (at your option) any later
13 GCC is distributed in the hope that it will be useful, but WITHOUT ANY
14 WARRANTY; without even the implied warranty of MERCHANTABILITY or
15 FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
18 You should have received a copy of the GNU General Public License
19 along with GCC; see the file COPYING3. If not see
20 <http://www.gnu.org/licenses/>. */
24 #include "coretypes.h"
26 #include "hard-reg-set.h"
31 #include "basic-block.h"
33 #include "addresses.h"
34 #include "insn-config.h"
37 #include "diagnostic-core.h"
42 /* The flags is set up every time when we calculate pseudo register
43 classes through function ira_set_pseudo_classes. */
44 static bool pseudo_classes_defined_p
= false;
46 /* TRUE if we work with allocnos. Otherwise we work with pseudos. */
47 static bool allocno_p
;
49 /* Number of elements in arrays `in_inc_dec' and `costs'. */
50 static int cost_elements_num
;
52 #ifdef FORBIDDEN_INC_DEC_CLASSES
53 /* Indexed by n, is TRUE if allocno or pseudo with number N is used in
54 an auto-inc or auto-dec context. */
55 static bool *in_inc_dec
;
58 /* The `costs' struct records the cost of using hard registers of each
59 class considered for the calculation and of using memory for each
64 /* Costs for register classes start here. We process only some
69 #define max_struct_costs_size \
70 (this_target_ira_int->x_max_struct_costs_size)
72 (this_target_ira_int->x_init_cost)
74 (this_target_ira_int->x_temp_costs)
76 (this_target_ira_int->x_op_costs)
77 #define this_op_costs \
78 (this_target_ira_int->x_this_op_costs)
80 /* Costs of each class for each allocno or pseudo. */
81 static struct costs
*costs
;
83 /* Accumulated costs of each class for each allocno. */
84 static struct costs
*total_allocno_costs
;
86 /* It is the current size of struct costs. */
87 static int struct_costs_size
;
89 /* Return pointer to structure containing costs of allocno or pseudo
90 with given NUM in array ARR. */
91 #define COSTS(arr, num) \
92 ((struct costs *) ((char *) (arr) + (num) * struct_costs_size))
94 /* Return index in COSTS when processing reg with REGNO. */
95 #define COST_INDEX(regno) (allocno_p \
96 ? ALLOCNO_NUM (ira_curr_regno_allocno_map[regno]) \
99 /* Record register class preferences of each allocno or pseudo. Null
100 value means no preferences. It happens on the 1st iteration of the
102 static enum reg_class
*pref
;
104 /* Allocated buffers for pref. */
105 static enum reg_class
*pref_buffer
;
107 /* Record allocno class of each allocno with the same regno. */
108 static enum reg_class
*regno_aclass
;
110 /* Record cost gains for not allocating a register with an invariant
112 static int *regno_equiv_gains
;
114 /* Execution frequency of the current insn. */
115 static int frequency
;
119 /* Info about reg classes whose costs are calculated for a pseudo. */
122 /* Number of the cost classes in the subsequent array. */
124 /* Container of the cost classes. */
125 enum reg_class classes
[N_REG_CLASSES
];
126 /* Map reg class -> index of the reg class in the previous array.
127 -1 if it is not a cost classe. */
128 int index
[N_REG_CLASSES
];
129 /* Map hard regno index of first class in array CLASSES containing
130 the hard regno, -1 otherwise. */
131 int hard_regno_index
[FIRST_PSEUDO_REGISTER
];
134 /* Types of pointers to the structure above. */
135 typedef struct cost_classes
*cost_classes_t
;
136 typedef const struct cost_classes
*const_cost_classes_t
;
138 /* Info about cost classes for each pseudo. */
139 static cost_classes_t
*regno_cost_classes
;
141 /* Returns hash value for cost classes info V. */
143 cost_classes_hash (const void *v
)
145 const_cost_classes_t hv
= (const_cost_classes_t
) v
;
147 return iterative_hash (&hv
->classes
, sizeof (enum reg_class
) * hv
->num
, 0);
150 /* Compares cost classes info V1 and V2. */
152 cost_classes_eq (const void *v1
, const void *v2
)
154 const_cost_classes_t hv1
= (const_cost_classes_t
) v1
;
155 const_cost_classes_t hv2
= (const_cost_classes_t
) v2
;
157 return hv1
->num
== hv2
->num
&& memcmp (hv1
->classes
, hv2
->classes
,
158 sizeof (enum reg_class
) * hv1
->num
);
161 /* Delete cost classes info V from the hash table. */
163 cost_classes_del (void *v
)
168 /* Hash table of unique cost classes. */
169 static htab_t cost_classes_htab
;
171 /* Map allocno class -> cost classes for pseudo of given allocno
173 static cost_classes_t cost_classes_aclass_cache
[N_REG_CLASSES
];
175 /* Map mode -> cost classes for pseudo of give mode. */
176 static cost_classes_t cost_classes_mode_cache
[MAX_MACHINE_MODE
];
178 /* Initialize info about the cost classes for each pseudo. */
180 initiate_regno_cost_classes (void)
182 int size
= sizeof (cost_classes_t
) * max_reg_num ();
184 regno_cost_classes
= (cost_classes_t
*) ira_allocate (size
);
185 memset (regno_cost_classes
, 0, size
);
186 memset (cost_classes_aclass_cache
, 0,
187 sizeof (cost_classes_t
) * N_REG_CLASSES
);
188 memset (cost_classes_mode_cache
, 0,
189 sizeof (cost_classes_t
) * MAX_MACHINE_MODE
);
191 = htab_create (200, cost_classes_hash
, cost_classes_eq
, cost_classes_del
);
194 /* Create new cost classes from cost classes FROM and set up members
195 index and hard_regno_index. Return the new classes. The function
196 implements some common code of two functions
197 setup_regno_cost_classes_by_aclass and
198 setup_regno_cost_classes_by_mode. */
199 static cost_classes_t
200 setup_cost_classes (cost_classes_t from
)
202 cost_classes_t classes_ptr
;
204 int i
, j
, hard_regno
;
206 classes_ptr
= (cost_classes_t
) ira_allocate (sizeof (struct cost_classes
));
207 classes_ptr
->num
= from
->num
;
208 for (i
= 0; i
< N_REG_CLASSES
; i
++)
209 classes_ptr
->index
[i
] = -1;
210 for (i
= 0; i
< FIRST_PSEUDO_REGISTER
; i
++)
211 classes_ptr
->hard_regno_index
[i
] = -1;
212 for (i
= 0; i
< from
->num
; i
++)
214 cl
= classes_ptr
->classes
[i
] = from
->classes
[i
];
215 classes_ptr
->index
[cl
] = i
;
216 for (j
= ira_class_hard_regs_num
[cl
] - 1; j
>= 0; j
--)
218 hard_regno
= ira_class_hard_regs
[cl
][j
];
219 if (classes_ptr
->hard_regno_index
[hard_regno
] < 0)
220 classes_ptr
->hard_regno_index
[hard_regno
] = i
;
226 /* Setup cost classes for pseudo REGNO whose allocno class is ACLASS.
227 This function is used when we know an initial approximation of
228 allocno class of the pseudo already, e.g. on the second iteration
229 of class cost calculation or after class cost calculation in
230 register-pressure sensitive insn scheduling or register-pressure
231 sensitive loop-invariant motion. */
233 setup_regno_cost_classes_by_aclass (int regno
, enum reg_class aclass
)
235 static struct cost_classes classes
;
236 cost_classes_t classes_ptr
;
240 HARD_REG_SET temp
, temp2
;
242 if ((classes_ptr
= cost_classes_aclass_cache
[aclass
]) == NULL
)
244 COPY_HARD_REG_SET (temp
, reg_class_contents
[aclass
]);
245 AND_COMPL_HARD_REG_SET (temp
, ira_no_alloc_regs
);
247 for (i
= 0; i
< ira_important_classes_num
; i
++)
249 cl
= ira_important_classes
[i
];
250 COPY_HARD_REG_SET (temp2
, reg_class_contents
[cl
]);
251 AND_COMPL_HARD_REG_SET (temp2
, ira_no_alloc_regs
);
252 if (! ira_reg_pressure_class_p
[cl
]
253 && hard_reg_set_subset_p (temp2
, temp
) && cl
!= aclass
)
255 classes
.classes
[classes
.num
++] = cl
;
257 slot
= htab_find_slot (cost_classes_htab
, &classes
, INSERT
);
260 classes_ptr
= setup_cost_classes (&classes
);
263 classes_ptr
= cost_classes_aclass_cache
[aclass
] = (cost_classes_t
) *slot
;
265 regno_cost_classes
[regno
] = classes_ptr
;
268 /* Setup cost classes for pseudo REGNO with MODE. Usage of MODE can
269 decrease number of cost classes for the pseudo, if hard registers
270 of some important classes can not hold a value of MODE. So the
271 pseudo can not get hard register of some important classes and cost
272 calculation for such important classes is only waisting CPU
275 setup_regno_cost_classes_by_mode (int regno
, enum machine_mode mode
)
277 static struct cost_classes classes
;
278 cost_classes_t classes_ptr
;
284 if ((classes_ptr
= cost_classes_mode_cache
[mode
]) == NULL
)
287 for (i
= 0; i
< ira_important_classes_num
; i
++)
289 cl
= ira_important_classes
[i
];
290 COPY_HARD_REG_SET (temp
, ira_prohibited_class_mode_regs
[cl
][mode
]);
291 IOR_HARD_REG_SET (temp
, ira_no_alloc_regs
);
292 if (hard_reg_set_subset_p (reg_class_contents
[cl
], temp
))
294 classes
.classes
[classes
.num
++] = cl
;
296 slot
= htab_find_slot (cost_classes_htab
, &classes
, INSERT
);
299 classes_ptr
= setup_cost_classes (&classes
);
302 cost_classes_mode_cache
[mode
] = (cost_classes_t
) *slot
;
304 regno_cost_classes
[regno
] = classes_ptr
;
307 /* Finilize info about the cost classes for each pseudo. */
309 finish_regno_cost_classes (void)
311 ira_free (regno_cost_classes
);
312 htab_delete (cost_classes_htab
);
317 /* Compute the cost of loading X into (if TO_P is TRUE) or from (if
318 TO_P is FALSE) a register of class RCLASS in mode MODE. X must not
319 be a pseudo register. */
321 copy_cost (rtx x
, enum machine_mode mode
, reg_class_t rclass
, bool to_p
,
322 secondary_reload_info
*prev_sri
)
324 secondary_reload_info sri
;
325 reg_class_t secondary_class
= NO_REGS
;
327 /* If X is a SCRATCH, there is actually nothing to move since we are
328 assuming optimal allocation. */
329 if (GET_CODE (x
) == SCRATCH
)
332 /* Get the class we will actually use for a reload. */
333 rclass
= targetm
.preferred_reload_class (x
, rclass
);
335 /* If we need a secondary reload for an intermediate, the cost is
336 that to load the input into the intermediate register, then to
338 sri
.prev_sri
= prev_sri
;
340 secondary_class
= targetm
.secondary_reload (to_p
, x
, rclass
, mode
, &sri
);
342 if (secondary_class
!= NO_REGS
)
344 if (!move_cost
[mode
])
345 init_move_cost (mode
);
346 return (move_cost
[mode
][(int) secondary_class
][(int) rclass
]
348 + copy_cost (x
, mode
, secondary_class
, to_p
, &sri
));
351 /* For memory, use the memory move cost, for (hard) registers, use
352 the cost to move between the register classes, and use 2 for
353 everything else (constants). */
354 if (MEM_P (x
) || rclass
== NO_REGS
)
355 return sri
.extra_cost
356 + ira_memory_move_cost
[mode
][(int) rclass
][to_p
!= 0];
359 if (!move_cost
[mode
])
360 init_move_cost (mode
);
361 return (sri
.extra_cost
362 + move_cost
[mode
][REGNO_REG_CLASS (REGNO (x
))][(int) rclass
]);
365 /* If this is a constant, we may eventually want to call rtx_cost
367 return sri
.extra_cost
+ COSTS_N_INSNS (1);
372 /* Record the cost of using memory or hard registers of various
373 classes for the operands in INSN.
375 N_ALTS is the number of alternatives.
376 N_OPS is the number of operands.
377 OPS is an array of the operands.
378 MODES are the modes of the operands, in case any are VOIDmode.
379 CONSTRAINTS are the constraints to use for the operands. This array
380 is modified by this procedure.
382 This procedure works alternative by alternative. For each
383 alternative we assume that we will be able to allocate all allocnos
384 to their ideal register class and calculate the cost of using that
385 alternative. Then we compute, for each operand that is a
386 pseudo-register, the cost of having the allocno allocated to each
387 register class and using it in that alternative. To this cost is
388 added the cost of the alternative.
390 The cost of each class for this insn is its lowest cost among all
393 record_reg_classes (int n_alts
, int n_ops
, rtx
*ops
,
394 enum machine_mode
*modes
, const char **constraints
,
395 rtx insn
, enum reg_class
*pref
)
400 int insn_allows_mem
[MAX_RECOG_OPERANDS
];
402 for (i
= 0; i
< n_ops
; i
++)
403 insn_allows_mem
[i
] = 0;
405 /* Process each alternative, each time minimizing an operand's cost
406 with the cost for each operand in that alternative. */
407 for (alt
= 0; alt
< n_alts
; alt
++)
409 enum reg_class classes
[MAX_RECOG_OPERANDS
];
410 int allows_mem
[MAX_RECOG_OPERANDS
];
411 enum reg_class rclass
;
413 int alt_cost
= 0, op_cost_add
;
415 if (!recog_data
.alternative_enabled_p
[alt
])
417 for (i
= 0; i
< recog_data
.n_operands
; i
++)
418 constraints
[i
] = skip_alternative (constraints
[i
]);
423 for (i
= 0; i
< n_ops
; i
++)
426 const char *p
= constraints
[i
];
428 enum machine_mode mode
= modes
[i
];
432 /* Initially show we know nothing about the register class. */
433 classes
[i
] = NO_REGS
;
436 /* If this operand has no constraints at all, we can
437 conclude nothing about it since anything is valid. */
440 if (REG_P (op
) && REGNO (op
) >= FIRST_PSEUDO_REGISTER
)
441 memset (this_op_costs
[i
], 0, struct_costs_size
);
445 /* If this alternative is only relevant when this operand
446 matches a previous operand, we do different things
447 depending on whether this operand is a allocno-reg or not.
448 We must process any modifiers for the operand before we
449 can make this test. */
450 while (*p
== '%' || *p
== '=' || *p
== '+' || *p
== '&')
453 if (p
[0] >= '0' && p
[0] <= '0' + i
&& (p
[1] == ',' || p
[1] == 0))
455 /* Copy class and whether memory is allowed from the
456 matching alternative. Then perform any needed cost
457 computations and/or adjustments. */
459 classes
[i
] = classes
[j
];
460 allows_mem
[i
] = allows_mem
[j
];
462 insn_allows_mem
[i
] = 1;
464 if (! REG_P (op
) || REGNO (op
) < FIRST_PSEUDO_REGISTER
)
466 /* If this matches the other operand, we have no
467 added cost and we win. */
468 if (rtx_equal_p (ops
[j
], op
))
470 /* If we can put the other operand into a register,
471 add to the cost of this alternative the cost to
472 copy this operand to the register used for the
474 else if (classes
[j
] != NO_REGS
)
476 alt_cost
+= copy_cost (op
, mode
, classes
[j
], 1, NULL
);
480 else if (! REG_P (ops
[j
])
481 || REGNO (ops
[j
]) < FIRST_PSEUDO_REGISTER
)
483 /* This op is an allocno but the one it matches is
486 /* If we can't put the other operand into a
487 register, this alternative can't be used. */
489 if (classes
[j
] == NO_REGS
)
491 /* Otherwise, add to the cost of this alternative
492 the cost to copy the other operand to the hard
493 register used for this operand. */
495 alt_cost
+= copy_cost (ops
[j
], mode
, classes
[j
], 1, NULL
);
499 /* The costs of this operand are not the same as the
500 other operand since move costs are not symmetric.
501 Moreover, if we cannot tie them, this alternative
502 needs to do a copy, which is one insn. */
503 struct costs
*pp
= this_op_costs
[i
];
504 int *pp_costs
= pp
->cost
;
505 cost_classes_t cost_classes_ptr
506 = regno_cost_classes
[REGNO (op
)];
507 enum reg_class
*cost_classes
= cost_classes_ptr
->classes
;
508 bool in_p
= recog_data
.operand_type
[i
] != OP_OUT
;
509 bool out_p
= recog_data
.operand_type
[i
] != OP_IN
;
510 enum reg_class op_class
= classes
[i
];
511 move_table
*move_in_cost
, *move_out_cost
;
513 ira_init_register_move_cost_if_necessary (mode
);
517 move_out_cost
= ira_may_move_out_cost
[mode
];
518 for (k
= cost_classes_ptr
->num
- 1; k
>= 0; k
--)
520 rclass
= cost_classes
[k
];
522 = move_out_cost
[op_class
][rclass
] * frequency
;
528 move_in_cost
= ira_may_move_in_cost
[mode
];
529 for (k
= cost_classes_ptr
->num
- 1; k
>= 0; k
--)
531 rclass
= cost_classes
[k
];
533 = move_in_cost
[rclass
][op_class
] * frequency
;
538 move_in_cost
= ira_may_move_in_cost
[mode
];
539 move_out_cost
= ira_may_move_out_cost
[mode
];
540 for (k
= cost_classes_ptr
->num
- 1; k
>= 0; k
--)
542 rclass
= cost_classes
[k
];
543 pp_costs
[k
] = ((move_in_cost
[rclass
][op_class
]
544 + move_out_cost
[op_class
][rclass
])
549 /* If the alternative actually allows memory, make
550 things a bit cheaper since we won't need an extra
553 = ((out_p
? ira_memory_move_cost
[mode
][op_class
][0] : 0)
554 + (in_p
? ira_memory_move_cost
[mode
][op_class
][1] : 0)
555 - allows_mem
[i
]) * frequency
;
557 /* If we have assigned a class to this allocno in
558 our first pass, add a cost to this alternative
559 corresponding to what we would add if this
560 allocno were not in the appropriate class. */
563 enum reg_class pref_class
= pref
[COST_INDEX (REGNO (op
))];
565 if (pref_class
== NO_REGS
)
568 ? ira_memory_move_cost
[mode
][op_class
][0] : 0)
570 ? ira_memory_move_cost
[mode
][op_class
][1]
572 else if (ira_reg_class_intersect
573 [pref_class
][op_class
] == NO_REGS
)
575 += ira_register_move_cost
[mode
][pref_class
][op_class
];
577 if (REGNO (ops
[i
]) != REGNO (ops
[j
])
578 && ! find_reg_note (insn
, REG_DEAD
, op
))
581 /* This is in place of ordinary cost computation for
582 this operand, so skip to the end of the
583 alternative (should be just one character). */
584 while (*p
&& *p
++ != ',')
592 /* Scan all the constraint letters. See if the operand
593 matches any of the constraints. Collect the valid
594 register classes and see if this operand accepts
603 /* Ignore the next letter for this pass. */
609 case '!': case '#': case '&':
610 case '0': case '1': case '2': case '3': case '4':
611 case '5': case '6': case '7': case '8': case '9':
616 win
= address_operand (op
, GET_MODE (op
));
617 /* We know this operand is an address, so we want it
618 to be allocated to a register that can be the
619 base of an address, i.e. BASE_REG_CLASS. */
621 = ira_reg_class_subunion
[classes
[i
]]
622 [base_reg_class (VOIDmode
, ADDRESS
, SCRATCH
)];
625 case 'm': case 'o': case 'V':
626 /* It doesn't seem worth distinguishing between
627 offsettable and non-offsettable addresses
629 insn_allows_mem
[i
] = allows_mem
[i
] = 1;
636 && (GET_CODE (XEXP (op
, 0)) == PRE_DEC
637 || GET_CODE (XEXP (op
, 0)) == POST_DEC
))
643 && (GET_CODE (XEXP (op
, 0)) == PRE_INC
644 || GET_CODE (XEXP (op
, 0)) == POST_INC
))
650 if (GET_CODE (op
) == CONST_DOUBLE
651 || (GET_CODE (op
) == CONST_VECTOR
652 && (GET_MODE_CLASS (GET_MODE (op
))
653 == MODE_VECTOR_FLOAT
)))
659 if (GET_CODE (op
) == CONST_DOUBLE
660 && CONST_DOUBLE_OK_FOR_CONSTRAINT_P (op
, c
, p
))
666 || (GET_CODE (op
) == CONST_DOUBLE
667 && GET_MODE (op
) == VOIDmode
))
672 && (! flag_pic
|| LEGITIMATE_PIC_OPERAND_P (op
)))
678 || (GET_CODE (op
) == CONST_DOUBLE
679 && GET_MODE (op
) == VOIDmode
))
692 && CONST_OK_FOR_CONSTRAINT_P (INTVAL (op
), c
, p
))
703 && (! flag_pic
|| LEGITIMATE_PIC_OPERAND_P (op
))))
705 insn_allows_mem
[i
] = allows_mem
[i
] = 1;
707 classes
[i
] = ira_reg_class_subunion
[classes
[i
]][GENERAL_REGS
];
711 if (REG_CLASS_FROM_CONSTRAINT (c
, p
) != NO_REGS
)
712 classes
[i
] = ira_reg_class_subunion
[classes
[i
]]
713 [REG_CLASS_FROM_CONSTRAINT (c
, p
)];
714 #ifdef EXTRA_CONSTRAINT_STR
715 else if (EXTRA_CONSTRAINT_STR (op
, c
, p
))
718 if (EXTRA_MEMORY_CONSTRAINT (c
, p
))
720 /* Every MEM can be reloaded to fit. */
721 insn_allows_mem
[i
] = allows_mem
[i
] = 1;
725 if (EXTRA_ADDRESS_CONSTRAINT (c
, p
))
727 /* Every address can be reloaded to fit. */
729 if (address_operand (op
, GET_MODE (op
)))
731 /* We know this operand is an address, so we
732 want it to be allocated to a hard register
733 that can be the base of an address,
734 i.e. BASE_REG_CLASS. */
736 = ira_reg_class_subunion
[classes
[i
]]
737 [base_reg_class (VOIDmode
, ADDRESS
, SCRATCH
)];
742 p
+= CONSTRAINT_LEN (c
, p
);
749 /* How we account for this operand now depends on whether it
750 is a pseudo register or not. If it is, we first check if
751 any register classes are valid. If not, we ignore this
752 alternative, since we want to assume that all allocnos get
753 allocated for register preferencing. If some register
754 class is valid, compute the costs of moving the allocno
756 if (REG_P (op
) && REGNO (op
) >= FIRST_PSEUDO_REGISTER
)
758 if (classes
[i
] == NO_REGS
)
760 /* We must always fail if the operand is a REG, but
761 we did not find a suitable class.
763 Otherwise we may perform an uninitialized read
764 from this_op_costs after the `continue' statement
770 unsigned int regno
= REGNO (op
);
771 struct costs
*pp
= this_op_costs
[i
];
772 int *pp_costs
= pp
->cost
;
773 cost_classes_t cost_classes_ptr
= regno_cost_classes
[regno
];
774 enum reg_class
*cost_classes
= cost_classes_ptr
->classes
;
775 bool in_p
= recog_data
.operand_type
[i
] != OP_OUT
;
776 bool out_p
= recog_data
.operand_type
[i
] != OP_IN
;
777 enum reg_class op_class
= classes
[i
];
778 move_table
*move_in_cost
, *move_out_cost
;
780 ira_init_register_move_cost_if_necessary (mode
);
784 move_out_cost
= ira_may_move_out_cost
[mode
];
785 for (k
= cost_classes_ptr
->num
- 1; k
>= 0; k
--)
787 rclass
= cost_classes
[k
];
789 = move_out_cost
[op_class
][rclass
] * frequency
;
795 move_in_cost
= ira_may_move_in_cost
[mode
];
796 for (k
= cost_classes_ptr
->num
- 1; k
>= 0; k
--)
798 rclass
= cost_classes
[k
];
800 = move_in_cost
[rclass
][op_class
] * frequency
;
805 move_in_cost
= ira_may_move_in_cost
[mode
];
806 move_out_cost
= ira_may_move_out_cost
[mode
];
807 for (k
= cost_classes_ptr
->num
- 1; k
>= 0; k
--)
809 rclass
= cost_classes
[k
];
810 pp_costs
[k
] = ((move_in_cost
[rclass
][op_class
]
811 + move_out_cost
[op_class
][rclass
])
816 /* If the alternative actually allows memory, make
817 things a bit cheaper since we won't need an extra
820 = ((out_p
? ira_memory_move_cost
[mode
][op_class
][0] : 0)
821 + (in_p
? ira_memory_move_cost
[mode
][op_class
][1] : 0)
822 - allows_mem
[i
]) * frequency
;
823 /* If we have assigned a class to this allocno in
824 our first pass, add a cost to this alternative
825 corresponding to what we would add if this
826 allocno were not in the appropriate class. */
829 enum reg_class pref_class
= pref
[COST_INDEX (REGNO (op
))];
831 if (pref_class
== NO_REGS
)
834 ? ira_memory_move_cost
[mode
][op_class
][0] : 0)
836 ? ira_memory_move_cost
[mode
][op_class
][1]
838 else if (ira_reg_class_intersect
[pref_class
][op_class
]
840 alt_cost
+= ira_register_move_cost
[mode
][pref_class
][op_class
];
845 /* Otherwise, if this alternative wins, either because we
846 have already determined that or if we have a hard
847 register of the proper class, there is no cost for this
849 else if (win
|| (REG_P (op
)
850 && reg_fits_class_p (op
, classes
[i
],
854 /* If registers are valid, the cost of this alternative
855 includes copying the object to and/or from a
857 else if (classes
[i
] != NO_REGS
)
859 if (recog_data
.operand_type
[i
] != OP_OUT
)
860 alt_cost
+= copy_cost (op
, mode
, classes
[i
], 1, NULL
);
862 if (recog_data
.operand_type
[i
] != OP_IN
)
863 alt_cost
+= copy_cost (op
, mode
, classes
[i
], 0, NULL
);
865 /* The only other way this alternative can be used is if
866 this is a constant that could be placed into memory. */
867 else if (CONSTANT_P (op
) && (allows_addr
|| allows_mem
[i
]))
868 alt_cost
+= ira_memory_move_cost
[mode
][classes
[i
]][1];
876 op_cost_add
= alt_cost
* frequency
;
877 /* Finally, update the costs with the information we've
878 calculated about this alternative. */
879 for (i
= 0; i
< n_ops
; i
++)
880 if (REG_P (ops
[i
]) && REGNO (ops
[i
]) >= FIRST_PSEUDO_REGISTER
)
882 struct costs
*pp
= op_costs
[i
], *qq
= this_op_costs
[i
];
883 int *pp_costs
= pp
->cost
, *qq_costs
= qq
->cost
;
884 int scale
= 1 + (recog_data
.operand_type
[i
] == OP_INOUT
);
885 cost_classes_t cost_classes_ptr
886 = regno_cost_classes
[REGNO (ops
[i
])];
888 pp
->mem_cost
= MIN (pp
->mem_cost
,
889 (qq
->mem_cost
+ op_cost_add
) * scale
);
891 for (k
= cost_classes_ptr
->num
- 1; k
>= 0; k
--)
893 = MIN (pp_costs
[k
], (qq_costs
[k
] + op_cost_add
) * scale
);
898 for (i
= 0; i
< n_ops
; i
++)
903 if (! REG_P (op
) || REGNO (op
) < FIRST_PSEUDO_REGISTER
)
905 a
= ira_curr_regno_allocno_map
[REGNO (op
)];
906 if (! ALLOCNO_BAD_SPILL_P (a
) && insn_allows_mem
[i
] == 0)
907 ALLOCNO_BAD_SPILL_P (a
) = true;
910 /* If this insn is a single set copying operand 1 to operand 0 and
911 one operand is an allocno with the other a hard reg or an allocno
912 that prefers a hard register that is in its own register class
913 then we may want to adjust the cost of that register class to -1.
915 Avoid the adjustment if the source does not die to avoid
916 stressing of register allocator by preferrencing two colliding
917 registers into single class.
919 Also avoid the adjustment if a copy between hard registers of the
920 class is expensive (ten times the cost of a default copy is
921 considered arbitrarily expensive). This avoids losing when the
922 preferred class is very expensive as the source of a copy
924 if ((set
= single_set (insn
)) != 0
925 && ops
[0] == SET_DEST (set
) && ops
[1] == SET_SRC (set
)
926 && REG_P (ops
[0]) && REG_P (ops
[1])
927 && find_regno_note (insn
, REG_DEAD
, REGNO (ops
[1])))
928 for (i
= 0; i
<= 1; i
++)
929 if (REGNO (ops
[i
]) >= FIRST_PSEUDO_REGISTER
930 && REGNO (ops
[!i
]) < FIRST_PSEUDO_REGISTER
)
932 unsigned int regno
= REGNO (ops
[i
]);
933 unsigned int other_regno
= REGNO (ops
[!i
]);
934 enum machine_mode mode
= GET_MODE (ops
[!i
]);
935 cost_classes_t cost_classes_ptr
= regno_cost_classes
[regno
];
936 enum reg_class
*cost_classes
= cost_classes_ptr
->classes
;
937 enum reg_class rclass
;
940 for (k
= cost_classes_ptr
->num
- 1; k
>= 0; k
--)
942 rclass
= cost_classes
[k
];
943 if (TEST_HARD_REG_BIT (reg_class_contents
[rclass
], other_regno
)
944 && (reg_class_size
[rclass
]
945 == (unsigned) CLASS_MAX_NREGS (rclass
, mode
)))
947 if (reg_class_size
[rclass
] == 1)
948 op_costs
[i
]->cost
[k
] = -frequency
;
952 nr
< hard_regno_nregs
[other_regno
][mode
];
954 if (! TEST_HARD_REG_BIT (reg_class_contents
[rclass
],
958 if (nr
== hard_regno_nregs
[other_regno
][mode
])
959 op_costs
[i
]->cost
[k
] = -frequency
;
968 /* Wrapper around REGNO_OK_FOR_INDEX_P, to allow pseudo registers. */
970 ok_for_index_p_nonstrict (rtx reg
)
972 unsigned regno
= REGNO (reg
);
974 return regno
>= FIRST_PSEUDO_REGISTER
|| REGNO_OK_FOR_INDEX_P (regno
);
977 /* A version of regno_ok_for_base_p for use here, when all
978 pseudo-registers should count as OK. Arguments as for
979 regno_ok_for_base_p. */
981 ok_for_base_p_nonstrict (rtx reg
, enum machine_mode mode
,
982 enum rtx_code outer_code
, enum rtx_code index_code
)
984 unsigned regno
= REGNO (reg
);
986 if (regno
>= FIRST_PSEUDO_REGISTER
)
988 return ok_for_base_p_1 (regno
, mode
, outer_code
, index_code
);
991 /* Record the pseudo registers we must reload into hard registers in a
992 subexpression of a memory address, X.
994 If CONTEXT is 0, we are looking at the base part of an address,
995 otherwise we are looking at the index part.
997 MODE is the mode of the memory reference; OUTER_CODE and INDEX_CODE
998 give the context that the rtx appears in. These three arguments
999 are passed down to base_reg_class.
1001 SCALE is twice the amount to multiply the cost by (it is twice so
1002 we can represent half-cost adjustments). */
1004 record_address_regs (enum machine_mode mode
, rtx x
, int context
,
1005 enum rtx_code outer_code
, enum rtx_code index_code
,
1008 enum rtx_code code
= GET_CODE (x
);
1009 enum reg_class rclass
;
1012 rclass
= INDEX_REG_CLASS
;
1014 rclass
= base_reg_class (mode
, outer_code
, index_code
);
1027 /* When we have an address that is a sum, we must determine
1028 whether registers are "base" or "index" regs. If there is a
1029 sum of two registers, we must choose one to be the "base".
1030 Luckily, we can use the REG_POINTER to make a good choice
1031 most of the time. We only need to do this on machines that
1032 can have two registers in an address and where the base and
1033 index register classes are different.
1035 ??? This code used to set REGNO_POINTER_FLAG in some cases,
1036 but that seems bogus since it should only be set when we are
1037 sure the register is being used as a pointer. */
1039 rtx arg0
= XEXP (x
, 0);
1040 rtx arg1
= XEXP (x
, 1);
1041 enum rtx_code code0
= GET_CODE (arg0
);
1042 enum rtx_code code1
= GET_CODE (arg1
);
1044 /* Look inside subregs. */
1045 if (code0
== SUBREG
)
1046 arg0
= SUBREG_REG (arg0
), code0
= GET_CODE (arg0
);
1047 if (code1
== SUBREG
)
1048 arg1
= SUBREG_REG (arg1
), code1
= GET_CODE (arg1
);
1050 /* If this machine only allows one register per address, it
1051 must be in the first operand. */
1052 if (MAX_REGS_PER_ADDRESS
== 1)
1053 record_address_regs (mode
, arg0
, 0, PLUS
, code1
, scale
);
1055 /* If index and base registers are the same on this machine,
1056 just record registers in any non-constant operands. We
1057 assume here, as well as in the tests below, that all
1058 addresses are in canonical form. */
1059 else if (INDEX_REG_CLASS
== base_reg_class (VOIDmode
, PLUS
, SCRATCH
))
1061 record_address_regs (mode
, arg0
, context
, PLUS
, code1
, scale
);
1062 if (! CONSTANT_P (arg1
))
1063 record_address_regs (mode
, arg1
, context
, PLUS
, code0
, scale
);
1066 /* If the second operand is a constant integer, it doesn't
1067 change what class the first operand must be. */
1068 else if (code1
== CONST_INT
|| code1
== CONST_DOUBLE
)
1069 record_address_regs (mode
, arg0
, context
, PLUS
, code1
, scale
);
1070 /* If the second operand is a symbolic constant, the first
1071 operand must be an index register. */
1072 else if (code1
== SYMBOL_REF
|| code1
== CONST
|| code1
== LABEL_REF
)
1073 record_address_regs (mode
, arg0
, 1, PLUS
, code1
, scale
);
1074 /* If both operands are registers but one is already a hard
1075 register of index or reg-base class, give the other the
1076 class that the hard register is not. */
1077 else if (code0
== REG
&& code1
== REG
1078 && REGNO (arg0
) < FIRST_PSEUDO_REGISTER
1079 && (ok_for_base_p_nonstrict (arg0
, mode
, PLUS
, REG
)
1080 || ok_for_index_p_nonstrict (arg0
)))
1081 record_address_regs (mode
, arg1
,
1082 ok_for_base_p_nonstrict (arg0
, mode
, PLUS
, REG
)
1085 else if (code0
== REG
&& code1
== REG
1086 && REGNO (arg1
) < FIRST_PSEUDO_REGISTER
1087 && (ok_for_base_p_nonstrict (arg1
, mode
, PLUS
, REG
)
1088 || ok_for_index_p_nonstrict (arg1
)))
1089 record_address_regs (mode
, arg0
,
1090 ok_for_base_p_nonstrict (arg1
, mode
, PLUS
, REG
)
1093 /* If one operand is known to be a pointer, it must be the
1094 base with the other operand the index. Likewise if the
1095 other operand is a MULT. */
1096 else if ((code0
== REG
&& REG_POINTER (arg0
)) || code1
== MULT
)
1098 record_address_regs (mode
, arg0
, 0, PLUS
, code1
, scale
);
1099 record_address_regs (mode
, arg1
, 1, PLUS
, code0
, scale
);
1101 else if ((code1
== REG
&& REG_POINTER (arg1
)) || code0
== MULT
)
1103 record_address_regs (mode
, arg0
, 1, PLUS
, code1
, scale
);
1104 record_address_regs (mode
, arg1
, 0, PLUS
, code0
, scale
);
1106 /* Otherwise, count equal chances that each might be a base or
1107 index register. This case should be rare. */
1110 record_address_regs (mode
, arg0
, 0, PLUS
, code1
, scale
/ 2);
1111 record_address_regs (mode
, arg0
, 1, PLUS
, code1
, scale
/ 2);
1112 record_address_regs (mode
, arg1
, 0, PLUS
, code0
, scale
/ 2);
1113 record_address_regs (mode
, arg1
, 1, PLUS
, code0
, scale
/ 2);
1118 /* Double the importance of an allocno that is incremented or
1119 decremented, since it would take two extra insns if it ends
1120 up in the wrong place. */
1123 record_address_regs (mode
, XEXP (x
, 0), 0, code
,
1124 GET_CODE (XEXP (XEXP (x
, 1), 1)), 2 * scale
);
1125 if (REG_P (XEXP (XEXP (x
, 1), 1)))
1126 record_address_regs (mode
, XEXP (XEXP (x
, 1), 1), 1, code
, REG
,
1134 /* Double the importance of an allocno that is incremented or
1135 decremented, since it would take two extra insns if it ends
1136 up in the wrong place. If the operand is a pseudo-register,
1137 show it is being used in an INC_DEC context. */
1138 #ifdef FORBIDDEN_INC_DEC_CLASSES
1139 if (REG_P (XEXP (x
, 0))
1140 && REGNO (XEXP (x
, 0)) >= FIRST_PSEUDO_REGISTER
)
1141 in_inc_dec
[COST_INDEX (REGNO (XEXP (x
, 0)))] = true;
1143 record_address_regs (mode
, XEXP (x
, 0), 0, code
, SCRATCH
, 2 * scale
);
1151 int k
, regno
, add_cost
;
1152 cost_classes_t cost_classes_ptr
;
1153 enum reg_class
*cost_classes
;
1154 move_table
*move_in_cost
;
1156 if (REGNO (x
) < FIRST_PSEUDO_REGISTER
)
1161 ALLOCNO_BAD_SPILL_P (ira_curr_regno_allocno_map
[regno
]) = true;
1162 pp
= COSTS (costs
, COST_INDEX (regno
));
1163 add_cost
= (ira_memory_move_cost
[Pmode
][rclass
][1] * scale
) / 2;
1164 if (INT_MAX
- add_cost
< pp
->mem_cost
)
1165 pp
->mem_cost
= INT_MAX
;
1167 pp
->mem_cost
+= add_cost
;
1168 cost_classes_ptr
= regno_cost_classes
[regno
];
1169 cost_classes
= cost_classes_ptr
->classes
;
1170 pp_costs
= pp
->cost
;
1171 ira_init_register_move_cost_if_necessary (Pmode
);
1172 move_in_cost
= ira_may_move_in_cost
[Pmode
];
1173 for (k
= cost_classes_ptr
->num
- 1; k
>= 0; k
--)
1175 i
= cost_classes
[k
];
1176 add_cost
= (move_in_cost
[i
][rclass
] * scale
) / 2;
1177 if (INT_MAX
- add_cost
< pp_costs
[k
])
1178 pp_costs
[k
] = INT_MAX
;
1180 pp_costs
[k
] += add_cost
;
1187 const char *fmt
= GET_RTX_FORMAT (code
);
1189 for (i
= GET_RTX_LENGTH (code
) - 1; i
>= 0; i
--)
1191 record_address_regs (mode
, XEXP (x
, i
), context
, code
, SCRATCH
,
1199 /* Calculate the costs of insn operands. */
1201 record_operand_costs (rtx insn
, enum reg_class
*pref
)
1203 const char *constraints
[MAX_RECOG_OPERANDS
];
1204 enum machine_mode modes
[MAX_RECOG_OPERANDS
];
1207 for (i
= 0; i
< recog_data
.n_operands
; i
++)
1209 constraints
[i
] = recog_data
.constraints
[i
];
1210 modes
[i
] = recog_data
.operand_mode
[i
];
1213 /* If we get here, we are set up to record the costs of all the
1214 operands for this insn. Start by initializing the costs. Then
1215 handle any address registers. Finally record the desired classes
1216 for any allocnos, doing it twice if some pair of operands are
1218 for (i
= 0; i
< recog_data
.n_operands
; i
++)
1220 memcpy (op_costs
[i
], init_cost
, struct_costs_size
);
1222 if (GET_CODE (recog_data
.operand
[i
]) == SUBREG
)
1223 recog_data
.operand
[i
] = SUBREG_REG (recog_data
.operand
[i
]);
1225 if (MEM_P (recog_data
.operand
[i
]))
1226 record_address_regs (GET_MODE (recog_data
.operand
[i
]),
1227 XEXP (recog_data
.operand
[i
], 0),
1228 0, MEM
, SCRATCH
, frequency
* 2);
1229 else if (constraints
[i
][0] == 'p'
1230 || EXTRA_ADDRESS_CONSTRAINT (constraints
[i
][0],
1232 record_address_regs (VOIDmode
, recog_data
.operand
[i
], 0, ADDRESS
,
1233 SCRATCH
, frequency
* 2);
1236 /* Check for commutative in a separate loop so everything will have
1237 been initialized. We must do this even if one operand is a
1238 constant--see addsi3 in m68k.md. */
1239 for (i
= 0; i
< (int) recog_data
.n_operands
- 1; i
++)
1240 if (constraints
[i
][0] == '%')
1242 const char *xconstraints
[MAX_RECOG_OPERANDS
];
1245 /* Handle commutative operands by swapping the constraints.
1246 We assume the modes are the same. */
1247 for (j
= 0; j
< recog_data
.n_operands
; j
++)
1248 xconstraints
[j
] = constraints
[j
];
1250 xconstraints
[i
] = constraints
[i
+1];
1251 xconstraints
[i
+1] = constraints
[i
];
1252 record_reg_classes (recog_data
.n_alternatives
, recog_data
.n_operands
,
1253 recog_data
.operand
, modes
,
1254 xconstraints
, insn
, pref
);
1256 record_reg_classes (recog_data
.n_alternatives
, recog_data
.n_operands
,
1257 recog_data
.operand
, modes
,
1258 constraints
, insn
, pref
);
1263 /* Process one insn INSN. Scan it and record each time it would save
1264 code to put a certain allocnos in a certain class. Return the last
1265 insn processed, so that the scan can be continued from there. */
1267 scan_one_insn (rtx insn
)
1269 enum rtx_code pat_code
;
1274 if (!NONDEBUG_INSN_P (insn
))
1277 pat_code
= GET_CODE (PATTERN (insn
));
1278 if (pat_code
== USE
|| pat_code
== CLOBBER
|| pat_code
== ASM_INPUT
1279 || pat_code
== ADDR_VEC
|| pat_code
== ADDR_DIFF_VEC
)
1282 counted_mem
= false;
1283 set
= single_set (insn
);
1284 extract_insn (insn
);
1286 /* If this insn loads a parameter from its stack slot, then it
1287 represents a savings, rather than a cost, if the parameter is
1288 stored in memory. Record this fact.
1290 Similarly if we're loading other constants from memory (constant
1291 pool, TOC references, small data areas, etc) and this is the only
1292 assignment to the destination pseudo. */
1293 if (set
!= 0 && REG_P (SET_DEST (set
)) && MEM_P (SET_SRC (set
))
1294 && (note
= find_reg_note (insn
, REG_EQUIV
, NULL_RTX
)) != NULL_RTX
1295 && ((MEM_P (XEXP (note
, 0)))
1296 || (CONSTANT_P (XEXP (note
, 0))
1297 && LEGITIMATE_CONSTANT_P (XEXP (note
, 0))
1298 && REG_N_SETS (REGNO (SET_DEST (set
))) == 1)))
1300 enum reg_class cl
= GENERAL_REGS
;
1301 rtx reg
= SET_DEST (set
);
1302 int num
= COST_INDEX (REGNO (reg
));
1304 COSTS (costs
, num
)->mem_cost
1305 -= ira_memory_move_cost
[GET_MODE (reg
)][cl
][1] * frequency
;
1306 record_address_regs (GET_MODE (SET_SRC (set
)), XEXP (SET_SRC (set
), 0),
1307 0, MEM
, SCRATCH
, frequency
* 2);
1311 record_operand_costs (insn
, pref
);
1313 /* Now add the cost for each operand to the total costs for its
1315 for (i
= 0; i
< recog_data
.n_operands
; i
++)
1316 if (REG_P (recog_data
.operand
[i
])
1317 && REGNO (recog_data
.operand
[i
]) >= FIRST_PSEUDO_REGISTER
)
1319 int regno
= REGNO (recog_data
.operand
[i
]);
1320 struct costs
*p
= COSTS (costs
, COST_INDEX (regno
));
1321 struct costs
*q
= op_costs
[i
];
1322 int *p_costs
= p
->cost
, *q_costs
= q
->cost
;
1323 cost_classes_t cost_classes_ptr
= regno_cost_classes
[regno
];
1326 /* If the already accounted for the memory "cost" above, don't
1330 add_cost
= q
->mem_cost
;
1331 if (add_cost
> 0 && INT_MAX
- add_cost
< p
->mem_cost
)
1332 p
->mem_cost
= INT_MAX
;
1334 p
->mem_cost
+= add_cost
;
1336 for (k
= cost_classes_ptr
->num
- 1; k
>= 0; k
--)
1338 add_cost
= q_costs
[k
];
1339 if (add_cost
> 0 && INT_MAX
- add_cost
< p_costs
[k
])
1340 p_costs
[k
] = INT_MAX
;
1342 p_costs
[k
] += add_cost
;
1351 /* Print allocnos costs to file F. */
1353 print_allocno_costs (FILE *f
)
1357 ira_allocno_iterator ai
;
1359 ira_assert (allocno_p
);
1361 FOR_EACH_ALLOCNO (a
, ai
)
1365 int regno
= ALLOCNO_REGNO (a
);
1366 cost_classes_t cost_classes_ptr
= regno_cost_classes
[regno
];
1367 enum reg_class
*cost_classes
= cost_classes_ptr
->classes
;
1369 i
= ALLOCNO_NUM (a
);
1370 fprintf (f
, " a%d(r%d,", i
, regno
);
1371 if ((bb
= ALLOCNO_LOOP_TREE_NODE (a
)->bb
) != NULL
)
1372 fprintf (f
, "b%d", bb
->index
);
1374 fprintf (f
, "l%d", ALLOCNO_LOOP_TREE_NODE (a
)->loop
->num
);
1375 fprintf (f
, ") costs:");
1376 for (k
= 0; k
< cost_classes_ptr
->num
; k
++)
1378 rclass
= cost_classes
[k
];
1379 if (contains_reg_of_mode
[rclass
][PSEUDO_REGNO_MODE (regno
)]
1380 #ifdef FORBIDDEN_INC_DEC_CLASSES
1381 && (! in_inc_dec
[i
] || ! forbidden_inc_dec_class
[rclass
])
1383 #ifdef CANNOT_CHANGE_MODE_CLASS
1384 && ! invalid_mode_change_p (regno
, (enum reg_class
) rclass
)
1388 fprintf (f
, " %s:%d", reg_class_names
[rclass
],
1389 COSTS (costs
, i
)->cost
[k
]);
1390 if (flag_ira_region
== IRA_REGION_ALL
1391 || flag_ira_region
== IRA_REGION_MIXED
)
1392 fprintf (f
, ",%d", COSTS (total_allocno_costs
, i
)->cost
[k
]);
1395 fprintf (f
, " MEM:%i", COSTS (costs
, i
)->mem_cost
);
1396 if (flag_ira_region
== IRA_REGION_ALL
1397 || flag_ira_region
== IRA_REGION_MIXED
)
1398 fprintf (f
, ",%d", COSTS (total_allocno_costs
, i
)->mem_cost
);
1403 /* Print pseudo costs to file F. */
1405 print_pseudo_costs (FILE *f
)
1409 cost_classes_t cost_classes_ptr
;
1410 enum reg_class
*cost_classes
;
1412 ira_assert (! allocno_p
);
1414 for (regno
= max_reg_num () - 1; regno
>= FIRST_PSEUDO_REGISTER
; regno
--)
1416 if (REG_N_REFS (regno
) <= 0)
1418 cost_classes_ptr
= regno_cost_classes
[regno
];
1419 cost_classes
= cost_classes_ptr
->classes
;
1420 fprintf (f
, " r%d costs:", regno
);
1421 for (k
= 0; k
< cost_classes_ptr
->num
; k
++)
1423 rclass
= cost_classes
[k
];
1424 if (contains_reg_of_mode
[rclass
][PSEUDO_REGNO_MODE (regno
)]
1425 #ifdef FORBIDDEN_INC_DEC_CLASSES
1426 && (! in_inc_dec
[regno
] || ! forbidden_inc_dec_class
[rclass
])
1428 #ifdef CANNOT_CHANGE_MODE_CLASS
1429 && ! invalid_mode_change_p (regno
, (enum reg_class
) rclass
)
1432 fprintf (f
, " %s:%d", reg_class_names
[rclass
],
1433 COSTS (costs
, regno
)->cost
[k
]);
1435 fprintf (f
, " MEM:%i\n", COSTS (costs
, regno
)->mem_cost
);
1439 /* Traverse the BB represented by LOOP_TREE_NODE to update the allocno
1442 process_bb_for_costs (basic_block bb
)
1446 frequency
= REG_FREQ_FROM_BB (bb
);
1449 FOR_BB_INSNS (bb
, insn
)
1450 insn
= scan_one_insn (insn
);
1453 /* Traverse the BB represented by LOOP_TREE_NODE to update the allocno
1456 process_bb_node_for_costs (ira_loop_tree_node_t loop_tree_node
)
1460 bb
= loop_tree_node
->bb
;
1462 process_bb_for_costs (bb
);
1465 /* Find costs of register classes and memory for allocnos or pseudos
1466 and their best costs. Set up preferred, alternative and allocno
1467 classes for pseudos. */
1469 find_costs_and_classes (FILE *dump_file
)
1471 int i
, k
, start
, max_cost_classes_num
;
1474 enum reg_class
*regno_best_class
;
1477 #ifdef FORBIDDEN_INC_DEC_CLASSES
1478 in_inc_dec
= ira_allocate (sizeof (bool) * cost_elements_num
);
1479 #endif /* FORBIDDEN_INC_DEC_CLASSES */
1481 = (enum reg_class
*) ira_allocate (max_reg_num ()
1482 * sizeof (enum reg_class
));
1483 for (i
= max_reg_num () - 1; i
>= FIRST_PSEUDO_REGISTER
; i
--)
1484 regno_best_class
[i
] = NO_REGS
;
1485 if (!resize_reg_info () && allocno_p
1486 && pseudo_classes_defined_p
&& flag_expensive_optimizations
)
1489 ira_allocno_iterator ai
;
1492 max_cost_classes_num
= 1;
1493 FOR_EACH_ALLOCNO (a
, ai
)
1495 pref
[ALLOCNO_NUM (a
)] = reg_preferred_class (ALLOCNO_REGNO (a
));
1496 setup_regno_cost_classes_by_aclass
1497 (ALLOCNO_REGNO (a
), pref
[ALLOCNO_NUM (a
)]);
1498 max_cost_classes_num
1499 = MAX (max_cost_classes_num
,
1500 regno_cost_classes
[ALLOCNO_REGNO (a
)]->num
);
1507 max_cost_classes_num
= ira_important_classes_num
;
1508 for (i
= max_reg_num () - 1; i
>= FIRST_PSEUDO_REGISTER
; i
--)
1509 if (regno_reg_rtx
[i
] != NULL_RTX
)
1510 setup_regno_cost_classes_by_mode (i
, PSEUDO_REGNO_MODE (i
));
1512 setup_regno_cost_classes_by_aclass (i
, ALL_REGS
);
1516 /* Clear the flag for the next compiled function. */
1517 pseudo_classes_defined_p
= false;
1518 /* Normally we scan the insns once and determine the best class to
1519 use for each allocno. However, if -fexpensive-optimizations are
1520 on, we do so twice, the second time using the tentative best
1521 classes to guide the selection. */
1522 for (pass
= start
; pass
<= flag_expensive_optimizations
; pass
++)
1524 if ((!allocno_p
|| internal_flag_ira_verbose
> 0) && dump_file
)
1526 "\nPass %i for finding pseudo/allocno costs\n\n", pass
);
1530 max_cost_classes_num
= 1;
1531 for (i
= max_reg_num () - 1; i
>= FIRST_PSEUDO_REGISTER
; i
--)
1533 setup_regno_cost_classes_by_aclass (i
, regno_best_class
[i
]);
1534 max_cost_classes_num
1535 = MAX (max_cost_classes_num
, regno_cost_classes
[i
]->num
);
1540 = sizeof (struct costs
) + sizeof (int) * (max_cost_classes_num
- 1);
1541 /* Zero out our accumulation of the cost of each class for each
1543 memset (costs
, 0, cost_elements_num
* struct_costs_size
);
1544 #ifdef FORBIDDEN_INC_DEC_CLASSES
1545 memset (in_inc_dec
, 0, cost_elements_num
* sizeof (bool));
1550 /* Scan the instructions and record each time it would save code
1551 to put a certain allocno in a certain class. */
1552 ira_traverse_loop_tree (true, ira_loop_tree_root
,
1553 process_bb_node_for_costs
, NULL
);
1555 memcpy (total_allocno_costs
, costs
,
1556 max_struct_costs_size
* ira_allocnos_num
);
1563 process_bb_for_costs (bb
);
1569 /* Now for each allocno look at how desirable each class is and
1570 find which class is preferred. */
1571 for (i
= max_reg_num () - 1; i
>= FIRST_PSEUDO_REGISTER
; i
--)
1573 ira_allocno_t a
, parent_a
;
1574 int rclass
, a_num
, parent_a_num
, add_cost
;
1575 ira_loop_tree_node_t parent
;
1576 int best_cost
, allocno_cost
;
1577 enum reg_class best
, alt_class
;
1578 #ifdef FORBIDDEN_INC_DEC_CLASSES
1579 int inc_dec_p
= false;
1581 cost_classes_t cost_classes_ptr
= regno_cost_classes
[i
];
1582 enum reg_class
*cost_classes
= cost_classes_ptr
->classes
;
1583 int *i_costs
= temp_costs
->cost
;
1585 int equiv_savings
= regno_equiv_gains
[i
];
1589 if (regno_reg_rtx
[i
] == NULL_RTX
)
1591 #ifdef FORBIDDEN_INC_DEC_CLASSES
1592 inc_dec_p
= in_inc_dec
[i
];
1594 memcpy (temp_costs
, COSTS (costs
, i
), struct_costs_size
);
1595 i_mem_cost
= temp_costs
->mem_cost
;
1599 if (ira_regno_allocno_map
[i
] == NULL
)
1601 memset (temp_costs
, 0, struct_costs_size
);
1603 /* Find cost of all allocnos with the same regno. */
1604 for (a
= ira_regno_allocno_map
[i
];
1606 a
= ALLOCNO_NEXT_REGNO_ALLOCNO (a
))
1608 int *a_costs
, *p_costs
;
1610 a_num
= ALLOCNO_NUM (a
);
1611 if ((flag_ira_region
== IRA_REGION_ALL
1612 || flag_ira_region
== IRA_REGION_MIXED
)
1613 && (parent
= ALLOCNO_LOOP_TREE_NODE (a
)->parent
) != NULL
1614 && (parent_a
= parent
->regno_allocno_map
[i
]) != NULL
1615 /* There are no caps yet. */
1616 && bitmap_bit_p (ALLOCNO_LOOP_TREE_NODE
1617 (a
)->border_allocnos
,
1620 /* Propagate costs to upper levels in the region
1622 parent_a_num
= ALLOCNO_NUM (parent_a
);
1623 a_costs
= COSTS (total_allocno_costs
, a_num
)->cost
;
1624 p_costs
= COSTS (total_allocno_costs
, parent_a_num
)->cost
;
1625 for (k
= cost_classes_ptr
->num
- 1; k
>= 0; k
--)
1627 add_cost
= a_costs
[k
];
1628 if (add_cost
> 0 && INT_MAX
- add_cost
< p_costs
[k
])
1629 p_costs
[k
] = INT_MAX
;
1631 p_costs
[k
] += add_cost
;
1633 add_cost
= COSTS (total_allocno_costs
, a_num
)->mem_cost
;
1635 && (INT_MAX
- add_cost
1636 < COSTS (total_allocno_costs
,
1637 parent_a_num
)->mem_cost
))
1638 COSTS (total_allocno_costs
, parent_a_num
)->mem_cost
1641 COSTS (total_allocno_costs
, parent_a_num
)->mem_cost
1645 a_costs
= COSTS (costs
, a_num
)->cost
;
1646 for (k
= cost_classes_ptr
->num
- 1; k
>= 0; k
--)
1648 add_cost
= a_costs
[k
];
1649 if (add_cost
> 0 && INT_MAX
- add_cost
< i_costs
[k
])
1650 i_costs
[k
] = INT_MAX
;
1652 i_costs
[k
] += add_cost
;
1654 add_cost
= COSTS (costs
, a_num
)->mem_cost
;
1655 if (add_cost
> 0 && INT_MAX
- add_cost
< i_mem_cost
)
1656 i_mem_cost
= INT_MAX
;
1658 i_mem_cost
+= add_cost
;
1659 #ifdef FORBIDDEN_INC_DEC_CLASSES
1660 if (in_inc_dec
[a_num
])
1665 if (equiv_savings
< 0)
1666 i_mem_cost
= -equiv_savings
;
1667 else if (equiv_savings
> 0)
1670 for (k
= cost_classes_ptr
->num
- 1; k
>= 0; k
--)
1671 i_costs
[k
] += equiv_savings
;
1674 best_cost
= (1 << (HOST_BITS_PER_INT
- 2)) - 1;
1676 alt_class
= NO_REGS
;
1677 /* Find best common class for all allocnos with the same
1679 for (k
= 0; k
< cost_classes_ptr
->num
; k
++)
1681 rclass
= cost_classes
[k
];
1682 /* Ignore classes that are too small for this operand or
1683 invalid for an operand that was auto-incremented. */
1684 if (! contains_reg_of_mode
[rclass
][PSEUDO_REGNO_MODE (i
)]
1685 #ifdef FORBIDDEN_INC_DEC_CLASSES
1686 || (inc_dec_p
&& forbidden_inc_dec_class
[rclass
])
1688 #ifdef CANNOT_CHANGE_MODE_CLASS
1689 || invalid_mode_change_p (i
, (enum reg_class
) rclass
)
1693 if (i_costs
[k
] < best_cost
)
1695 best_cost
= i_costs
[k
];
1696 best
= (enum reg_class
) rclass
;
1698 else if (i_costs
[k
] == best_cost
)
1699 best
= ira_reg_class_subunion
[best
][rclass
];
1700 if (pass
== flag_expensive_optimizations
1701 && i_costs
[k
] < i_mem_cost
1702 && (reg_class_size
[reg_class_subunion
[alt_class
][rclass
]]
1703 > reg_class_size
[alt_class
]))
1704 alt_class
= reg_class_subunion
[alt_class
][rclass
];
1706 alt_class
= ira_allocno_class_translate
[alt_class
];
1707 if (best_cost
> i_mem_cost
)
1708 regno_aclass
[i
] = NO_REGS
;
1711 /* Make the common class the biggest class of best and
1714 = ira_reg_class_superunion
[best
][alt_class
];
1715 ira_assert (regno_aclass
[i
] != NO_REGS
1716 && ira_reg_allocno_class_p
[regno_aclass
[i
]]);
1718 if (pass
== flag_expensive_optimizations
)
1720 if (best_cost
> i_mem_cost
)
1721 best
= alt_class
= NO_REGS
;
1722 else if (best
== alt_class
)
1723 alt_class
= NO_REGS
;
1724 setup_reg_classes (i
, best
, alt_class
, regno_aclass
[i
]);
1725 if ((!allocno_p
|| internal_flag_ira_verbose
> 2)
1726 && dump_file
!= NULL
)
1728 " r%d: preferred %s, alternative %s, allocno %s\n",
1729 i
, reg_class_names
[best
], reg_class_names
[alt_class
],
1730 reg_class_names
[regno_aclass
[i
]]);
1732 regno_best_class
[i
] = best
;
1735 pref
[i
] = best_cost
> i_mem_cost
? NO_REGS
: best
;
1738 for (a
= ira_regno_allocno_map
[i
];
1740 a
= ALLOCNO_NEXT_REGNO_ALLOCNO (a
))
1742 a_num
= ALLOCNO_NUM (a
);
1743 if (regno_aclass
[i
] == NO_REGS
)
1747 int *total_a_costs
= COSTS (total_allocno_costs
, a_num
)->cost
;
1748 int *a_costs
= COSTS (costs
, a_num
)->cost
;
1750 /* Finding best class which is subset of the common
1752 best_cost
= (1 << (HOST_BITS_PER_INT
- 2)) - 1;
1753 allocno_cost
= best_cost
;
1755 for (k
= 0; k
< cost_classes_ptr
->num
; k
++)
1757 rclass
= cost_classes
[k
];
1758 if (! ira_class_subset_p
[rclass
][regno_aclass
[i
]])
1760 /* Ignore classes that are too small for this
1761 operand or invalid for an operand that was
1762 auto-incremented. */
1763 if (! contains_reg_of_mode
[rclass
][PSEUDO_REGNO_MODE (i
)]
1764 #ifdef FORBIDDEN_INC_DEC_CLASSES
1765 || (inc_dec_p
&& forbidden_inc_dec_class
[rclass
])
1767 #ifdef CANNOT_CHANGE_MODE_CLASS
1768 || invalid_mode_change_p (i
, (enum reg_class
) rclass
)
1772 else if (total_a_costs
[k
] < best_cost
)
1774 best_cost
= total_a_costs
[k
];
1775 allocno_cost
= a_costs
[k
];
1776 best
= (enum reg_class
) rclass
;
1778 else if (total_a_costs
[k
] == best_cost
)
1780 best
= ira_reg_class_subunion
[best
][rclass
];
1781 allocno_cost
= MAX (allocno_cost
, a_costs
[k
]);
1784 ALLOCNO_CLASS_COST (a
) = allocno_cost
;
1786 if (internal_flag_ira_verbose
> 2 && dump_file
!= NULL
1787 && (pass
== 0 || pref
[a_num
] != best
))
1789 fprintf (dump_file
, " a%d (r%d,", a_num
, i
);
1790 if ((bb
= ALLOCNO_LOOP_TREE_NODE (a
)->bb
) != NULL
)
1791 fprintf (dump_file
, "b%d", bb
->index
);
1793 fprintf (dump_file
, "l%d",
1794 ALLOCNO_LOOP_TREE_NODE (a
)->loop
->num
);
1795 fprintf (dump_file
, ") best %s, allocno %s\n",
1796 reg_class_names
[best
],
1797 reg_class_names
[regno_aclass
[i
]]);
1803 if (internal_flag_ira_verbose
> 4 && dump_file
)
1806 print_allocno_costs (dump_file
);
1808 print_pseudo_costs (dump_file
);
1809 fprintf (dump_file
,"\n");
1812 ira_free (regno_best_class
);
1813 #ifdef FORBIDDEN_INC_DEC_CLASSES
1814 ira_free (in_inc_dec
);
1820 /* Process moves involving hard regs to modify allocno hard register
1821 costs. We can do this only after determining allocno class. If a
1822 hard register forms a register class, than moves with the hard
1823 register are already taken into account in class costs for the
1826 process_bb_node_for_hard_reg_moves (ira_loop_tree_node_t loop_tree_node
)
1828 int i
, freq
, cost
, src_regno
, dst_regno
, hard_regno
;
1831 enum reg_class rclass
, hard_reg_class
;
1832 enum machine_mode mode
;
1834 rtx insn
, set
, src
, dst
;
1836 bb
= loop_tree_node
->bb
;
1839 freq
= REG_FREQ_FROM_BB (bb
);
1842 FOR_BB_INSNS (bb
, insn
)
1844 if (!NONDEBUG_INSN_P (insn
))
1846 set
= single_set (insn
);
1847 if (set
== NULL_RTX
)
1849 dst
= SET_DEST (set
);
1850 src
= SET_SRC (set
);
1851 if (! REG_P (dst
) || ! REG_P (src
))
1853 dst_regno
= REGNO (dst
);
1854 src_regno
= REGNO (src
);
1855 if (dst_regno
>= FIRST_PSEUDO_REGISTER
1856 && src_regno
< FIRST_PSEUDO_REGISTER
)
1858 hard_regno
= src_regno
;
1860 a
= ira_curr_regno_allocno_map
[dst_regno
];
1862 else if (src_regno
>= FIRST_PSEUDO_REGISTER
1863 && dst_regno
< FIRST_PSEUDO_REGISTER
)
1865 hard_regno
= dst_regno
;
1867 a
= ira_curr_regno_allocno_map
[src_regno
];
1871 rclass
= ALLOCNO_CLASS (a
);
1872 if (! TEST_HARD_REG_BIT (reg_class_contents
[rclass
], hard_regno
))
1874 i
= ira_class_hard_reg_index
[rclass
][hard_regno
];
1877 mode
= ALLOCNO_MODE (a
);
1878 hard_reg_class
= REGNO_REG_CLASS (hard_regno
);
1879 ira_init_register_move_cost_if_necessary (mode
);
1881 = (to_p
? ira_register_move_cost
[mode
][hard_reg_class
][rclass
]
1882 : ira_register_move_cost
[mode
][rclass
][hard_reg_class
]) * freq
;
1883 ira_allocate_and_set_costs (&ALLOCNO_HARD_REG_COSTS (a
), rclass
,
1884 ALLOCNO_CLASS_COST (a
));
1885 ira_allocate_and_set_costs (&ALLOCNO_CONFLICT_HARD_REG_COSTS (a
),
1887 ALLOCNO_HARD_REG_COSTS (a
)[i
] -= cost
;
1888 ALLOCNO_CONFLICT_HARD_REG_COSTS (a
)[i
] -= cost
;
1889 ALLOCNO_CLASS_COST (a
) = MIN (ALLOCNO_CLASS_COST (a
),
1890 ALLOCNO_HARD_REG_COSTS (a
)[i
]);
1894 /* After we find hard register and memory costs for allocnos, define
1895 its class and modify hard register cost because insns moving
1896 allocno to/from hard registers. */
1898 setup_allocno_class_and_costs (void)
1900 int i
, j
, n
, regno
, hard_regno
, num
;
1902 enum reg_class aclass
, rclass
;
1904 ira_allocno_iterator ai
;
1905 cost_classes_t cost_classes_ptr
;
1907 ira_assert (allocno_p
);
1908 FOR_EACH_ALLOCNO (a
, ai
)
1910 i
= ALLOCNO_NUM (a
);
1911 regno
= ALLOCNO_REGNO (a
);
1912 aclass
= regno_aclass
[regno
];
1913 cost_classes_ptr
= regno_cost_classes
[regno
];
1914 ira_assert (pref
[i
] == NO_REGS
|| aclass
!= NO_REGS
);
1915 ALLOCNO_MEMORY_COST (a
) = COSTS (costs
, i
)->mem_cost
;
1916 ira_set_allocno_class (a
, aclass
);
1917 if (aclass
== NO_REGS
)
1919 if (optimize
&& ALLOCNO_CLASS (a
) != pref
[i
])
1921 n
= ira_class_hard_regs_num
[aclass
];
1922 ALLOCNO_HARD_REG_COSTS (a
)
1923 = reg_costs
= ira_allocate_cost_vector (aclass
);
1924 for (j
= n
- 1; j
>= 0; j
--)
1926 hard_regno
= ira_class_hard_regs
[aclass
][j
];
1927 if (TEST_HARD_REG_BIT (reg_class_contents
[pref
[i
]], hard_regno
))
1928 reg_costs
[j
] = ALLOCNO_CLASS_COST (a
);
1931 rclass
= REGNO_REG_CLASS (hard_regno
);
1932 num
= cost_classes_ptr
->index
[rclass
];
1935 num
= cost_classes_ptr
->hard_regno_index
[hard_regno
];
1936 ira_assert (num
>= 0);
1938 reg_costs
[j
] = COSTS (costs
, i
)->cost
[num
];
1944 ira_traverse_loop_tree (true, ira_loop_tree_root
,
1945 process_bb_node_for_hard_reg_moves
, NULL
);
1950 /* Function called once during compiler work. */
1952 ira_init_costs_once (void)
1957 for (i
= 0; i
< MAX_RECOG_OPERANDS
; i
++)
1960 this_op_costs
[i
] = NULL
;
1965 /* Free allocated temporary cost vectors. */
1967 free_ira_costs (void)
1971 if (init_cost
!= NULL
)
1974 for (i
= 0; i
< MAX_RECOG_OPERANDS
; i
++)
1976 if (op_costs
[i
] != NULL
)
1978 if (this_op_costs
[i
] != NULL
)
1979 free (this_op_costs
[i
]);
1980 op_costs
[i
] = this_op_costs
[i
] = NULL
;
1982 if (temp_costs
!= NULL
)
1987 /* This is called each time register related information is
1990 ira_init_costs (void)
1995 max_struct_costs_size
1996 = sizeof (struct costs
) + sizeof (int) * (ira_important_classes_num
- 1);
1997 /* Don't use ira_allocate because vectors live through several IRA
1999 init_cost
= (struct costs
*) xmalloc (max_struct_costs_size
);
2000 init_cost
->mem_cost
= 1000000;
2001 for (i
= 0; i
< ira_important_classes_num
; i
++)
2002 init_cost
->cost
[i
] = 1000000;
2003 for (i
= 0; i
< MAX_RECOG_OPERANDS
; i
++)
2005 op_costs
[i
] = (struct costs
*) xmalloc (max_struct_costs_size
);
2006 this_op_costs
[i
] = (struct costs
*) xmalloc (max_struct_costs_size
);
2008 temp_costs
= (struct costs
*) xmalloc (max_struct_costs_size
);
2011 /* Function called once at the end of compiler work. */
2013 ira_finish_costs_once (void)
2020 /* Common initialization function for ira_costs and
2021 ira_set_pseudo_classes. */
2025 init_subregs_of_mode ();
2026 costs
= (struct costs
*) ira_allocate (max_struct_costs_size
2027 * cost_elements_num
);
2028 pref_buffer
= (enum reg_class
*) ira_allocate (sizeof (enum reg_class
)
2029 * cost_elements_num
);
2030 regno_aclass
= (enum reg_class
*) ira_allocate (sizeof (enum reg_class
)
2032 regno_equiv_gains
= (int *) ira_allocate (sizeof (int) * max_reg_num ());
2033 memset (regno_equiv_gains
, 0, sizeof (int) * max_reg_num ());
2036 /* Common finalization function for ira_costs and
2037 ira_set_pseudo_classes. */
2041 finish_subregs_of_mode ();
2042 ira_free (regno_equiv_gains
);
2043 ira_free (regno_aclass
);
2044 ira_free (pref_buffer
);
2048 /* Entry function which defines register class, memory and hard
2049 register costs for each allocno. */
2054 cost_elements_num
= ira_allocnos_num
;
2056 total_allocno_costs
= (struct costs
*) ira_allocate (max_struct_costs_size
2057 * ira_allocnos_num
);
2058 initiate_regno_cost_classes ();
2059 calculate_elim_costs_all_insns ();
2060 find_costs_and_classes (ira_dump_file
);
2061 setup_allocno_class_and_costs ();
2062 finish_regno_cost_classes ();
2064 ira_free (total_allocno_costs
);
2067 /* Entry function which defines classes for pseudos. */
2069 ira_set_pseudo_classes (FILE *dump_file
)
2072 internal_flag_ira_verbose
= flag_ira_verbose
;
2073 cost_elements_num
= max_reg_num ();
2075 initiate_regno_cost_classes ();
2076 find_costs_and_classes (dump_file
);
2077 finish_regno_cost_classes ();
2078 pseudo_classes_defined_p
= true;
2084 /* Change hard register costs for allocnos which lives through
2085 function calls. This is called only when we found all intersected
2086 calls during building allocno live ranges. */
2088 ira_tune_allocno_costs (void)
2091 int cost
, min_cost
, *reg_costs
;
2092 enum reg_class aclass
, rclass
;
2093 enum machine_mode mode
;
2095 ira_allocno_iterator ai
;
2096 ira_allocno_object_iterator oi
;
2100 FOR_EACH_ALLOCNO (a
, ai
)
2102 aclass
= ALLOCNO_CLASS (a
);
2103 if (aclass
== NO_REGS
)
2105 mode
= ALLOCNO_MODE (a
);
2106 n
= ira_class_hard_regs_num
[aclass
];
2108 if (ALLOCNO_CALLS_CROSSED_NUM (a
) != 0)
2110 ira_allocate_and_set_costs
2111 (&ALLOCNO_HARD_REG_COSTS (a
), aclass
,
2112 ALLOCNO_CLASS_COST (a
));
2113 reg_costs
= ALLOCNO_HARD_REG_COSTS (a
);
2114 for (j
= n
- 1; j
>= 0; j
--)
2116 regno
= ira_class_hard_regs
[aclass
][j
];
2118 FOR_EACH_ALLOCNO_OBJECT (a
, obj
, oi
)
2120 if (! ira_hard_reg_not_in_set_p (regno
, mode
,
2121 OBJECT_CONFLICT_HARD_REGS
2130 rclass
= REGNO_REG_CLASS (regno
);
2132 if (! ira_hard_reg_not_in_set_p (regno
, mode
, call_used_reg_set
)
2133 || HARD_REGNO_CALL_PART_CLOBBERED (regno
, mode
))
2134 cost
+= (ALLOCNO_CALL_FREQ (a
)
2135 * (ira_memory_move_cost
[mode
][rclass
][0]
2136 + ira_memory_move_cost
[mode
][rclass
][1]));
2137 #ifdef IRA_HARD_REGNO_ADD_COST_MULTIPLIER
2138 cost
+= ((ira_memory_move_cost
[mode
][rclass
][0]
2139 + ira_memory_move_cost
[mode
][rclass
][1])
2141 * IRA_HARD_REGNO_ADD_COST_MULTIPLIER (regno
) / 2);
2143 if (INT_MAX
- cost
< reg_costs
[j
])
2144 reg_costs
[j
] = INT_MAX
;
2146 reg_costs
[j
] += cost
;
2147 if (min_cost
> reg_costs
[j
])
2148 min_cost
= reg_costs
[j
];
2151 if (min_cost
!= INT_MAX
)
2152 ALLOCNO_CLASS_COST (a
) = min_cost
;
2154 /* Some targets allow pseudos to be allocated to unaligned sequences
2155 of hard registers. However, selecting an unaligned sequence can
2156 unnecessarily restrict later allocations. So increase the cost of
2157 unaligned hard regs to encourage the use of aligned hard regs. */
2159 const int nregs
= ira_reg_class_max_nregs
[aclass
][ALLOCNO_MODE (a
)];
2163 ira_allocate_and_set_costs
2164 (&ALLOCNO_HARD_REG_COSTS (a
), aclass
, ALLOCNO_CLASS_COST (a
));
2165 reg_costs
= ALLOCNO_HARD_REG_COSTS (a
);
2166 for (j
= n
- 1; j
>= 0; j
--)
2168 regno
= ira_non_ordered_class_hard_regs
[aclass
][j
];
2169 if ((regno
% nregs
) != 0)
2171 int index
= ira_class_hard_reg_index
[aclass
][regno
];
2172 ira_assert (index
!= -1);
2173 reg_costs
[index
] += ALLOCNO_FREQ (a
);
2181 /* Add COST to the estimated gain for eliminating REGNO with its
2182 equivalence. If COST is zero, record that no such elimination is
2186 ira_adjust_equiv_reg_cost (unsigned regno
, int cost
)
2189 regno_equiv_gains
[regno
] = 0;
2191 regno_equiv_gains
[regno
] += cost
;