genattrtab.c (write_header): Include hash-set.h...
[gcc.git] / gcc / ira-costs.c
1 /* IRA hard register and memory cost calculation for allocnos or pseudos.
2 Copyright (C) 2006-2015 Free Software Foundation, Inc.
3 Contributed by Vladimir Makarov <vmakarov@redhat.com>.
4
5 This file is part of GCC.
6
7 GCC is free software; you can redistribute it and/or modify it under
8 the terms of the GNU General Public License as published by the Free
9 Software Foundation; either version 3, or (at your option) any later
10 version.
11
12 GCC is distributed in the hope that it will be useful, but WITHOUT ANY
13 WARRANTY; without even the implied warranty of MERCHANTABILITY or
14 FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
15 for more details.
16
17 You should have received a copy of the GNU General Public License
18 along with GCC; see the file COPYING3. If not see
19 <http://www.gnu.org/licenses/>. */
20
21 #include "config.h"
22 #include "system.h"
23 #include "coretypes.h"
24 #include "tm.h"
25 #include "hash-table.h"
26 #include "hard-reg-set.h"
27 #include "rtl.h"
28 #include "symtab.h"
29 #include "expr.h"
30 #include "tm_p.h"
31 #include "flags.h"
32 #include "predict.h"
33 #include "vec.h"
34 #include "hashtab.h"
35 #include "hash-set.h"
36 #include "machmode.h"
37 #include "input.h"
38 #include "function.h"
39 #include "dominance.h"
40 #include "cfg.h"
41 #include "basic-block.h"
42 #include "regs.h"
43 #include "addresses.h"
44 #include "insn-config.h"
45 #include "recog.h"
46 #include "reload.h"
47 #include "diagnostic-core.h"
48 #include "target.h"
49 #include "params.h"
50 #include "ira-int.h"
51
52 /* The flags is set up every time when we calculate pseudo register
53 classes through function ira_set_pseudo_classes. */
54 static bool pseudo_classes_defined_p = false;
55
56 /* TRUE if we work with allocnos. Otherwise we work with pseudos. */
57 static bool allocno_p;
58
59 /* Number of elements in array `costs'. */
60 static int cost_elements_num;
61
62 /* The `costs' struct records the cost of using hard registers of each
63 class considered for the calculation and of using memory for each
64 allocno or pseudo. */
65 struct costs
66 {
67 int mem_cost;
68 /* Costs for register classes start here. We process only some
69 allocno classes. */
70 int cost[1];
71 };
72
73 #define max_struct_costs_size \
74 (this_target_ira_int->x_max_struct_costs_size)
75 #define init_cost \
76 (this_target_ira_int->x_init_cost)
77 #define temp_costs \
78 (this_target_ira_int->x_temp_costs)
79 #define op_costs \
80 (this_target_ira_int->x_op_costs)
81 #define this_op_costs \
82 (this_target_ira_int->x_this_op_costs)
83
84 /* Costs of each class for each allocno or pseudo. */
85 static struct costs *costs;
86
87 /* Accumulated costs of each class for each allocno. */
88 static struct costs *total_allocno_costs;
89
90 /* It is the current size of struct costs. */
91 static int struct_costs_size;
92
93 /* Return pointer to structure containing costs of allocno or pseudo
94 with given NUM in array ARR. */
95 #define COSTS(arr, num) \
96 ((struct costs *) ((char *) (arr) + (num) * struct_costs_size))
97
98 /* Return index in COSTS when processing reg with REGNO. */
99 #define COST_INDEX(regno) (allocno_p \
100 ? ALLOCNO_NUM (ira_curr_regno_allocno_map[regno]) \
101 : (int) regno)
102
103 /* Record register class preferences of each allocno or pseudo. Null
104 value means no preferences. It happens on the 1st iteration of the
105 cost calculation. */
106 static enum reg_class *pref;
107
108 /* Allocated buffers for pref. */
109 static enum reg_class *pref_buffer;
110
111 /* Record allocno class of each allocno with the same regno. */
112 static enum reg_class *regno_aclass;
113
114 /* Record cost gains for not allocating a register with an invariant
115 equivalence. */
116 static int *regno_equiv_gains;
117
118 /* Execution frequency of the current insn. */
119 static int frequency;
120
121 \f
122
123 /* Info about reg classes whose costs are calculated for a pseudo. */
124 struct cost_classes
125 {
126 /* Number of the cost classes in the subsequent array. */
127 int num;
128 /* Container of the cost classes. */
129 enum reg_class classes[N_REG_CLASSES];
130 /* Map reg class -> index of the reg class in the previous array.
131 -1 if it is not a cost class. */
132 int index[N_REG_CLASSES];
133 /* Map hard regno index of first class in array CLASSES containing
134 the hard regno, -1 otherwise. */
135 int hard_regno_index[FIRST_PSEUDO_REGISTER];
136 };
137
138 /* Types of pointers to the structure above. */
139 typedef struct cost_classes *cost_classes_t;
140 typedef const struct cost_classes *const_cost_classes_t;
141
142 /* Info about cost classes for each pseudo. */
143 static cost_classes_t *regno_cost_classes;
144
145 /* Helper for cost_classes hashing. */
146
147 struct cost_classes_hasher
148 {
149 typedef cost_classes value_type;
150 typedef cost_classes compare_type;
151 static inline hashval_t hash (const value_type *);
152 static inline bool equal (const value_type *, const compare_type *);
153 static inline void remove (value_type *);
154 };
155
156 /* Returns hash value for cost classes info HV. */
157 inline hashval_t
158 cost_classes_hasher::hash (const value_type *hv)
159 {
160 return iterative_hash (&hv->classes, sizeof (enum reg_class) * hv->num, 0);
161 }
162
163 /* Compares cost classes info HV1 and HV2. */
164 inline bool
165 cost_classes_hasher::equal (const value_type *hv1, const compare_type *hv2)
166 {
167 return (hv1->num == hv2->num
168 && memcmp (hv1->classes, hv2->classes,
169 sizeof (enum reg_class) * hv1->num) == 0);
170 }
171
172 /* Delete cost classes info V from the hash table. */
173 inline void
174 cost_classes_hasher::remove (value_type *v)
175 {
176 ira_free (v);
177 }
178
179 /* Hash table of unique cost classes. */
180 static hash_table<cost_classes_hasher> *cost_classes_htab;
181
182 /* Map allocno class -> cost classes for pseudo of given allocno
183 class. */
184 static cost_classes_t cost_classes_aclass_cache[N_REG_CLASSES];
185
186 /* Map mode -> cost classes for pseudo of give mode. */
187 static cost_classes_t cost_classes_mode_cache[MAX_MACHINE_MODE];
188
189 /* Cost classes that include all classes in ira_important_classes. */
190 static cost_classes all_cost_classes;
191
192 /* Use the array of classes in CLASSES_PTR to fill out the rest of
193 the structure. */
194 static void
195 complete_cost_classes (cost_classes_t classes_ptr)
196 {
197 for (int i = 0; i < N_REG_CLASSES; i++)
198 classes_ptr->index[i] = -1;
199 for (int i = 0; i < FIRST_PSEUDO_REGISTER; i++)
200 classes_ptr->hard_regno_index[i] = -1;
201 for (int i = 0; i < classes_ptr->num; i++)
202 {
203 enum reg_class cl = classes_ptr->classes[i];
204 classes_ptr->index[cl] = i;
205 for (int j = ira_class_hard_regs_num[cl] - 1; j >= 0; j--)
206 {
207 unsigned int hard_regno = ira_class_hard_regs[cl][j];
208 if (classes_ptr->hard_regno_index[hard_regno] < 0)
209 classes_ptr->hard_regno_index[hard_regno] = i;
210 }
211 }
212 }
213
214 /* Initialize info about the cost classes for each pseudo. */
215 static void
216 initiate_regno_cost_classes (void)
217 {
218 int size = sizeof (cost_classes_t) * max_reg_num ();
219
220 regno_cost_classes = (cost_classes_t *) ira_allocate (size);
221 memset (regno_cost_classes, 0, size);
222 memset (cost_classes_aclass_cache, 0,
223 sizeof (cost_classes_t) * N_REG_CLASSES);
224 memset (cost_classes_mode_cache, 0,
225 sizeof (cost_classes_t) * MAX_MACHINE_MODE);
226 cost_classes_htab = new hash_table<cost_classes_hasher> (200);
227 all_cost_classes.num = ira_important_classes_num;
228 for (int i = 0; i < ira_important_classes_num; i++)
229 all_cost_classes.classes[i] = ira_important_classes[i];
230 complete_cost_classes (&all_cost_classes);
231 }
232
233 /* Create new cost classes from cost classes FROM and set up members
234 index and hard_regno_index. Return the new classes. The function
235 implements some common code of two functions
236 setup_regno_cost_classes_by_aclass and
237 setup_regno_cost_classes_by_mode. */
238 static cost_classes_t
239 setup_cost_classes (cost_classes_t from)
240 {
241 cost_classes_t classes_ptr;
242
243 classes_ptr = (cost_classes_t) ira_allocate (sizeof (struct cost_classes));
244 classes_ptr->num = from->num;
245 for (int i = 0; i < from->num; i++)
246 classes_ptr->classes[i] = from->classes[i];
247 complete_cost_classes (classes_ptr);
248 return classes_ptr;
249 }
250
251 /* Return a version of FULL that only considers registers in REGS that are
252 valid for mode MODE. Both FULL and the returned class are globally
253 allocated. */
254 static cost_classes_t
255 restrict_cost_classes (cost_classes_t full, machine_mode mode,
256 const HARD_REG_SET &regs)
257 {
258 static struct cost_classes narrow;
259 int map[N_REG_CLASSES];
260 narrow.num = 0;
261 for (int i = 0; i < full->num; i++)
262 {
263 /* Assume that we'll drop the class. */
264 map[i] = -1;
265
266 /* Ignore classes that are too small for the mode. */
267 enum reg_class cl = full->classes[i];
268 if (!contains_reg_of_mode[cl][mode])
269 continue;
270
271 /* Calculate the set of registers in CL that belong to REGS and
272 are valid for MODE. */
273 HARD_REG_SET valid_for_cl;
274 COPY_HARD_REG_SET (valid_for_cl, reg_class_contents[cl]);
275 AND_HARD_REG_SET (valid_for_cl, regs);
276 AND_COMPL_HARD_REG_SET (valid_for_cl,
277 ira_prohibited_class_mode_regs[cl][mode]);
278 AND_COMPL_HARD_REG_SET (valid_for_cl, ira_no_alloc_regs);
279 if (hard_reg_set_empty_p (valid_for_cl))
280 continue;
281
282 /* Don't use this class if the set of valid registers is a subset
283 of an existing class. For example, suppose we have two classes
284 GR_REGS and FR_REGS and a union class GR_AND_FR_REGS. Suppose
285 that the mode changes allowed by FR_REGS are not as general as
286 the mode changes allowed by GR_REGS.
287
288 In this situation, the mode changes for GR_AND_FR_REGS could
289 either be seen as the union or the intersection of the mode
290 changes allowed by the two subclasses. The justification for
291 the union-based definition would be that, if you want a mode
292 change that's only allowed by GR_REGS, you can pick a register
293 from the GR_REGS subclass. The justification for the
294 intersection-based definition would be that every register
295 from the class would allow the mode change.
296
297 However, if we have a register that needs to be in GR_REGS,
298 using GR_AND_FR_REGS with the intersection-based definition
299 would be too pessimistic, since it would bring in restrictions
300 that only apply to FR_REGS. Conversely, if we have a register
301 that needs to be in FR_REGS, using GR_AND_FR_REGS with the
302 union-based definition would lose the extra restrictions
303 placed on FR_REGS. GR_AND_FR_REGS is therefore only useful
304 for cases where GR_REGS and FP_REGS are both valid. */
305 int pos;
306 for (pos = 0; pos < narrow.num; ++pos)
307 {
308 enum reg_class cl2 = narrow.classes[pos];
309 if (hard_reg_set_subset_p (valid_for_cl, reg_class_contents[cl2]))
310 break;
311 }
312 map[i] = pos;
313 if (pos == narrow.num)
314 {
315 /* If several classes are equivalent, prefer to use the one
316 that was chosen as the allocno class. */
317 enum reg_class cl2 = ira_allocno_class_translate[cl];
318 if (ira_class_hard_regs_num[cl] == ira_class_hard_regs_num[cl2])
319 cl = cl2;
320 narrow.classes[narrow.num++] = cl;
321 }
322 }
323 if (narrow.num == full->num)
324 return full;
325
326 cost_classes **slot = cost_classes_htab->find_slot (&narrow, INSERT);
327 if (*slot == NULL)
328 {
329 cost_classes_t classes = setup_cost_classes (&narrow);
330 /* Map equivalent classes to the representative that we chose above. */
331 for (int i = 0; i < ira_important_classes_num; i++)
332 {
333 enum reg_class cl = ira_important_classes[i];
334 int index = full->index[cl];
335 if (index >= 0)
336 classes->index[cl] = map[index];
337 }
338 *slot = classes;
339 }
340 return *slot;
341 }
342
343 /* Setup cost classes for pseudo REGNO whose allocno class is ACLASS.
344 This function is used when we know an initial approximation of
345 allocno class of the pseudo already, e.g. on the second iteration
346 of class cost calculation or after class cost calculation in
347 register-pressure sensitive insn scheduling or register-pressure
348 sensitive loop-invariant motion. */
349 static void
350 setup_regno_cost_classes_by_aclass (int regno, enum reg_class aclass)
351 {
352 static struct cost_classes classes;
353 cost_classes_t classes_ptr;
354 enum reg_class cl;
355 int i;
356 cost_classes **slot;
357 HARD_REG_SET temp, temp2;
358 bool exclude_p;
359
360 if ((classes_ptr = cost_classes_aclass_cache[aclass]) == NULL)
361 {
362 COPY_HARD_REG_SET (temp, reg_class_contents[aclass]);
363 AND_COMPL_HARD_REG_SET (temp, ira_no_alloc_regs);
364 /* We exclude classes from consideration which are subsets of
365 ACLASS only if ACLASS is an uniform class. */
366 exclude_p = ira_uniform_class_p[aclass];
367 classes.num = 0;
368 for (i = 0; i < ira_important_classes_num; i++)
369 {
370 cl = ira_important_classes[i];
371 if (exclude_p)
372 {
373 /* Exclude non-uniform classes which are subsets of
374 ACLASS. */
375 COPY_HARD_REG_SET (temp2, reg_class_contents[cl]);
376 AND_COMPL_HARD_REG_SET (temp2, ira_no_alloc_regs);
377 if (hard_reg_set_subset_p (temp2, temp) && cl != aclass)
378 continue;
379 }
380 classes.classes[classes.num++] = cl;
381 }
382 slot = cost_classes_htab->find_slot (&classes, INSERT);
383 if (*slot == NULL)
384 {
385 classes_ptr = setup_cost_classes (&classes);
386 *slot = classes_ptr;
387 }
388 classes_ptr = cost_classes_aclass_cache[aclass] = (cost_classes_t) *slot;
389 }
390 if (regno_reg_rtx[regno] != NULL_RTX)
391 {
392 /* Restrict the classes to those that are valid for REGNO's mode
393 (which might for example exclude singleton classes if the mode
394 requires two registers). Also restrict the classes to those that
395 are valid for subregs of REGNO. */
396 const HARD_REG_SET *valid_regs = valid_mode_changes_for_regno (regno);
397 if (!valid_regs)
398 valid_regs = &reg_class_contents[ALL_REGS];
399 classes_ptr = restrict_cost_classes (classes_ptr,
400 PSEUDO_REGNO_MODE (regno),
401 *valid_regs);
402 }
403 regno_cost_classes[regno] = classes_ptr;
404 }
405
406 /* Setup cost classes for pseudo REGNO with MODE. Usage of MODE can
407 decrease number of cost classes for the pseudo, if hard registers
408 of some important classes can not hold a value of MODE. So the
409 pseudo can not get hard register of some important classes and cost
410 calculation for such important classes is only wasting CPU
411 time. */
412 static void
413 setup_regno_cost_classes_by_mode (int regno, machine_mode mode)
414 {
415 if (const HARD_REG_SET *valid_regs = valid_mode_changes_for_regno (regno))
416 regno_cost_classes[regno] = restrict_cost_classes (&all_cost_classes,
417 mode, *valid_regs);
418 else
419 {
420 if (cost_classes_mode_cache[mode] == NULL)
421 cost_classes_mode_cache[mode]
422 = restrict_cost_classes (&all_cost_classes, mode,
423 reg_class_contents[ALL_REGS]);
424 regno_cost_classes[regno] = cost_classes_mode_cache[mode];
425 }
426 }
427
428 /* Finalize info about the cost classes for each pseudo. */
429 static void
430 finish_regno_cost_classes (void)
431 {
432 ira_free (regno_cost_classes);
433 delete cost_classes_htab;
434 cost_classes_htab = NULL;
435 }
436
437 \f
438
439 /* Compute the cost of loading X into (if TO_P is TRUE) or from (if
440 TO_P is FALSE) a register of class RCLASS in mode MODE. X must not
441 be a pseudo register. */
442 static int
443 copy_cost (rtx x, machine_mode mode, reg_class_t rclass, bool to_p,
444 secondary_reload_info *prev_sri)
445 {
446 secondary_reload_info sri;
447 reg_class_t secondary_class = NO_REGS;
448
449 /* If X is a SCRATCH, there is actually nothing to move since we are
450 assuming optimal allocation. */
451 if (GET_CODE (x) == SCRATCH)
452 return 0;
453
454 /* Get the class we will actually use for a reload. */
455 rclass = targetm.preferred_reload_class (x, rclass);
456
457 /* If we need a secondary reload for an intermediate, the cost is
458 that to load the input into the intermediate register, then to
459 copy it. */
460 sri.prev_sri = prev_sri;
461 sri.extra_cost = 0;
462 secondary_class = targetm.secondary_reload (to_p, x, rclass, mode, &sri);
463
464 if (secondary_class != NO_REGS)
465 {
466 ira_init_register_move_cost_if_necessary (mode);
467 return (ira_register_move_cost[mode][(int) secondary_class][(int) rclass]
468 + sri.extra_cost
469 + copy_cost (x, mode, secondary_class, to_p, &sri));
470 }
471
472 /* For memory, use the memory move cost, for (hard) registers, use
473 the cost to move between the register classes, and use 2 for
474 everything else (constants). */
475 if (MEM_P (x) || rclass == NO_REGS)
476 return sri.extra_cost
477 + ira_memory_move_cost[mode][(int) rclass][to_p != 0];
478 else if (REG_P (x))
479 {
480 reg_class_t x_class = REGNO_REG_CLASS (REGNO (x));
481
482 ira_init_register_move_cost_if_necessary (mode);
483 return (sri.extra_cost
484 + ira_register_move_cost[mode][(int) x_class][(int) rclass]);
485 }
486 else
487 /* If this is a constant, we may eventually want to call rtx_cost
488 here. */
489 return sri.extra_cost + COSTS_N_INSNS (1);
490 }
491
492 \f
493
494 /* Record the cost of using memory or hard registers of various
495 classes for the operands in INSN.
496
497 N_ALTS is the number of alternatives.
498 N_OPS is the number of operands.
499 OPS is an array of the operands.
500 MODES are the modes of the operands, in case any are VOIDmode.
501 CONSTRAINTS are the constraints to use for the operands. This array
502 is modified by this procedure.
503
504 This procedure works alternative by alternative. For each
505 alternative we assume that we will be able to allocate all allocnos
506 to their ideal register class and calculate the cost of using that
507 alternative. Then we compute, for each operand that is a
508 pseudo-register, the cost of having the allocno allocated to each
509 register class and using it in that alternative. To this cost is
510 added the cost of the alternative.
511
512 The cost of each class for this insn is its lowest cost among all
513 the alternatives. */
514 static void
515 record_reg_classes (int n_alts, int n_ops, rtx *ops,
516 machine_mode *modes, const char **constraints,
517 rtx_insn *insn, enum reg_class *pref)
518 {
519 int alt;
520 int i, j, k;
521 int insn_allows_mem[MAX_RECOG_OPERANDS];
522 move_table *move_in_cost, *move_out_cost;
523 short (*mem_cost)[2];
524
525 for (i = 0; i < n_ops; i++)
526 insn_allows_mem[i] = 0;
527
528 /* Process each alternative, each time minimizing an operand's cost
529 with the cost for each operand in that alternative. */
530 alternative_mask preferred = get_preferred_alternatives (insn);
531 for (alt = 0; alt < n_alts; alt++)
532 {
533 enum reg_class classes[MAX_RECOG_OPERANDS];
534 int allows_mem[MAX_RECOG_OPERANDS];
535 enum reg_class rclass;
536 int alt_fail = 0;
537 int alt_cost = 0, op_cost_add;
538
539 if (!TEST_BIT (preferred, alt))
540 {
541 for (i = 0; i < recog_data.n_operands; i++)
542 constraints[i] = skip_alternative (constraints[i]);
543
544 continue;
545 }
546
547 for (i = 0; i < n_ops; i++)
548 {
549 unsigned char c;
550 const char *p = constraints[i];
551 rtx op = ops[i];
552 machine_mode mode = modes[i];
553 int allows_addr = 0;
554 int win = 0;
555
556 /* Initially show we know nothing about the register class. */
557 classes[i] = NO_REGS;
558 allows_mem[i] = 0;
559
560 /* If this operand has no constraints at all, we can
561 conclude nothing about it since anything is valid. */
562 if (*p == 0)
563 {
564 if (REG_P (op) && REGNO (op) >= FIRST_PSEUDO_REGISTER)
565 memset (this_op_costs[i], 0, struct_costs_size);
566 continue;
567 }
568
569 /* If this alternative is only relevant when this operand
570 matches a previous operand, we do different things
571 depending on whether this operand is a allocno-reg or not.
572 We must process any modifiers for the operand before we
573 can make this test. */
574 while (*p == '%' || *p == '=' || *p == '+' || *p == '&')
575 p++;
576
577 if (p[0] >= '0' && p[0] <= '0' + i && (p[1] == ',' || p[1] == 0))
578 {
579 /* Copy class and whether memory is allowed from the
580 matching alternative. Then perform any needed cost
581 computations and/or adjustments. */
582 j = p[0] - '0';
583 classes[i] = classes[j];
584 allows_mem[i] = allows_mem[j];
585 if (allows_mem[i])
586 insn_allows_mem[i] = 1;
587
588 if (! REG_P (op) || REGNO (op) < FIRST_PSEUDO_REGISTER)
589 {
590 /* If this matches the other operand, we have no
591 added cost and we win. */
592 if (rtx_equal_p (ops[j], op))
593 win = 1;
594 /* If we can put the other operand into a register,
595 add to the cost of this alternative the cost to
596 copy this operand to the register used for the
597 other operand. */
598 else if (classes[j] != NO_REGS)
599 {
600 alt_cost += copy_cost (op, mode, classes[j], 1, NULL);
601 win = 1;
602 }
603 }
604 else if (! REG_P (ops[j])
605 || REGNO (ops[j]) < FIRST_PSEUDO_REGISTER)
606 {
607 /* This op is an allocno but the one it matches is
608 not. */
609
610 /* If we can't put the other operand into a
611 register, this alternative can't be used. */
612
613 if (classes[j] == NO_REGS)
614 alt_fail = 1;
615 /* Otherwise, add to the cost of this alternative
616 the cost to copy the other operand to the hard
617 register used for this operand. */
618 else
619 alt_cost += copy_cost (ops[j], mode, classes[j], 1, NULL);
620 }
621 else
622 {
623 /* The costs of this operand are not the same as the
624 other operand since move costs are not symmetric.
625 Moreover, if we cannot tie them, this alternative
626 needs to do a copy, which is one insn. */
627 struct costs *pp = this_op_costs[i];
628 int *pp_costs = pp->cost;
629 cost_classes_t cost_classes_ptr
630 = regno_cost_classes[REGNO (op)];
631 enum reg_class *cost_classes = cost_classes_ptr->classes;
632 bool in_p = recog_data.operand_type[i] != OP_OUT;
633 bool out_p = recog_data.operand_type[i] != OP_IN;
634 enum reg_class op_class = classes[i];
635
636 ira_init_register_move_cost_if_necessary (mode);
637 if (! in_p)
638 {
639 ira_assert (out_p);
640 if (op_class == NO_REGS)
641 {
642 mem_cost = ira_memory_move_cost[mode];
643 for (k = cost_classes_ptr->num - 1; k >= 0; k--)
644 {
645 rclass = cost_classes[k];
646 pp_costs[k] = mem_cost[rclass][0] * frequency;
647 }
648 }
649 else
650 {
651 move_out_cost = ira_may_move_out_cost[mode];
652 for (k = cost_classes_ptr->num - 1; k >= 0; k--)
653 {
654 rclass = cost_classes[k];
655 pp_costs[k]
656 = move_out_cost[op_class][rclass] * frequency;
657 }
658 }
659 }
660 else if (! out_p)
661 {
662 ira_assert (in_p);
663 if (op_class == NO_REGS)
664 {
665 mem_cost = ira_memory_move_cost[mode];
666 for (k = cost_classes_ptr->num - 1; k >= 0; k--)
667 {
668 rclass = cost_classes[k];
669 pp_costs[k] = mem_cost[rclass][1] * frequency;
670 }
671 }
672 else
673 {
674 move_in_cost = ira_may_move_in_cost[mode];
675 for (k = cost_classes_ptr->num - 1; k >= 0; k--)
676 {
677 rclass = cost_classes[k];
678 pp_costs[k]
679 = move_in_cost[rclass][op_class] * frequency;
680 }
681 }
682 }
683 else
684 {
685 if (op_class == NO_REGS)
686 {
687 mem_cost = ira_memory_move_cost[mode];
688 for (k = cost_classes_ptr->num - 1; k >= 0; k--)
689 {
690 rclass = cost_classes[k];
691 pp_costs[k] = ((mem_cost[rclass][0]
692 + mem_cost[rclass][1])
693 * frequency);
694 }
695 }
696 else
697 {
698 move_in_cost = ira_may_move_in_cost[mode];
699 move_out_cost = ira_may_move_out_cost[mode];
700 for (k = cost_classes_ptr->num - 1; k >= 0; k--)
701 {
702 rclass = cost_classes[k];
703 pp_costs[k] = ((move_in_cost[rclass][op_class]
704 + move_out_cost[op_class][rclass])
705 * frequency);
706 }
707 }
708 }
709
710 /* If the alternative actually allows memory, make
711 things a bit cheaper since we won't need an extra
712 insn to load it. */
713 pp->mem_cost
714 = ((out_p ? ira_memory_move_cost[mode][op_class][0] : 0)
715 + (in_p ? ira_memory_move_cost[mode][op_class][1] : 0)
716 - allows_mem[i]) * frequency;
717
718 /* If we have assigned a class to this allocno in
719 our first pass, add a cost to this alternative
720 corresponding to what we would add if this
721 allocno were not in the appropriate class. */
722 if (pref)
723 {
724 enum reg_class pref_class = pref[COST_INDEX (REGNO (op))];
725
726 if (pref_class == NO_REGS)
727 alt_cost
728 += ((out_p
729 ? ira_memory_move_cost[mode][op_class][0] : 0)
730 + (in_p
731 ? ira_memory_move_cost[mode][op_class][1]
732 : 0));
733 else if (ira_reg_class_intersect
734 [pref_class][op_class] == NO_REGS)
735 alt_cost
736 += ira_register_move_cost[mode][pref_class][op_class];
737 }
738 if (REGNO (ops[i]) != REGNO (ops[j])
739 && ! find_reg_note (insn, REG_DEAD, op))
740 alt_cost += 2;
741
742 /* This is in place of ordinary cost computation for
743 this operand, so skip to the end of the
744 alternative (should be just one character). */
745 while (*p && *p++ != ',')
746 ;
747
748 constraints[i] = p;
749 continue;
750 }
751 }
752
753 /* Scan all the constraint letters. See if the operand
754 matches any of the constraints. Collect the valid
755 register classes and see if this operand accepts
756 memory. */
757 while ((c = *p))
758 {
759 switch (c)
760 {
761 case '*':
762 /* Ignore the next letter for this pass. */
763 c = *++p;
764 break;
765
766 case '?':
767 alt_cost += 2;
768 break;
769
770 case 'g':
771 if (MEM_P (op)
772 || (CONSTANT_P (op)
773 && (! flag_pic || LEGITIMATE_PIC_OPERAND_P (op))))
774 win = 1;
775 insn_allows_mem[i] = allows_mem[i] = 1;
776 classes[i] = ira_reg_class_subunion[classes[i]][GENERAL_REGS];
777 break;
778
779 default:
780 enum constraint_num cn = lookup_constraint (p);
781 enum reg_class cl;
782 switch (get_constraint_type (cn))
783 {
784 case CT_REGISTER:
785 cl = reg_class_for_constraint (cn);
786 if (cl != NO_REGS)
787 classes[i] = ira_reg_class_subunion[classes[i]][cl];
788 break;
789
790 case CT_CONST_INT:
791 if (CONST_INT_P (op)
792 && insn_const_int_ok_for_constraint (INTVAL (op), cn))
793 win = 1;
794 break;
795
796 case CT_MEMORY:
797 /* Every MEM can be reloaded to fit. */
798 insn_allows_mem[i] = allows_mem[i] = 1;
799 if (MEM_P (op))
800 win = 1;
801 break;
802
803 case CT_ADDRESS:
804 /* Every address can be reloaded to fit. */
805 allows_addr = 1;
806 if (address_operand (op, GET_MODE (op))
807 || constraint_satisfied_p (op, cn))
808 win = 1;
809 /* We know this operand is an address, so we
810 want it to be allocated to a hard register
811 that can be the base of an address,
812 i.e. BASE_REG_CLASS. */
813 classes[i]
814 = ira_reg_class_subunion[classes[i]]
815 [base_reg_class (VOIDmode, ADDR_SPACE_GENERIC,
816 ADDRESS, SCRATCH)];
817 break;
818
819 case CT_FIXED_FORM:
820 if (constraint_satisfied_p (op, cn))
821 win = 1;
822 break;
823 }
824 break;
825 }
826 p += CONSTRAINT_LEN (c, p);
827 if (c == ',')
828 break;
829 }
830
831 constraints[i] = p;
832
833 /* How we account for this operand now depends on whether it
834 is a pseudo register or not. If it is, we first check if
835 any register classes are valid. If not, we ignore this
836 alternative, since we want to assume that all allocnos get
837 allocated for register preferencing. If some register
838 class is valid, compute the costs of moving the allocno
839 into that class. */
840 if (REG_P (op) && REGNO (op) >= FIRST_PSEUDO_REGISTER)
841 {
842 if (classes[i] == NO_REGS && ! allows_mem[i])
843 {
844 /* We must always fail if the operand is a REG, but
845 we did not find a suitable class and memory is
846 not allowed.
847
848 Otherwise we may perform an uninitialized read
849 from this_op_costs after the `continue' statement
850 below. */
851 alt_fail = 1;
852 }
853 else
854 {
855 unsigned int regno = REGNO (op);
856 struct costs *pp = this_op_costs[i];
857 int *pp_costs = pp->cost;
858 cost_classes_t cost_classes_ptr = regno_cost_classes[regno];
859 enum reg_class *cost_classes = cost_classes_ptr->classes;
860 bool in_p = recog_data.operand_type[i] != OP_OUT;
861 bool out_p = recog_data.operand_type[i] != OP_IN;
862 enum reg_class op_class = classes[i];
863
864 ira_init_register_move_cost_if_necessary (mode);
865 if (! in_p)
866 {
867 ira_assert (out_p);
868 if (op_class == NO_REGS)
869 {
870 mem_cost = ira_memory_move_cost[mode];
871 for (k = cost_classes_ptr->num - 1; k >= 0; k--)
872 {
873 rclass = cost_classes[k];
874 pp_costs[k] = mem_cost[rclass][0] * frequency;
875 }
876 }
877 else
878 {
879 move_out_cost = ira_may_move_out_cost[mode];
880 for (k = cost_classes_ptr->num - 1; k >= 0; k--)
881 {
882 rclass = cost_classes[k];
883 pp_costs[k]
884 = move_out_cost[op_class][rclass] * frequency;
885 }
886 }
887 }
888 else if (! out_p)
889 {
890 ira_assert (in_p);
891 if (op_class == NO_REGS)
892 {
893 mem_cost = ira_memory_move_cost[mode];
894 for (k = cost_classes_ptr->num - 1; k >= 0; k--)
895 {
896 rclass = cost_classes[k];
897 pp_costs[k] = mem_cost[rclass][1] * frequency;
898 }
899 }
900 else
901 {
902 move_in_cost = ira_may_move_in_cost[mode];
903 for (k = cost_classes_ptr->num - 1; k >= 0; k--)
904 {
905 rclass = cost_classes[k];
906 pp_costs[k]
907 = move_in_cost[rclass][op_class] * frequency;
908 }
909 }
910 }
911 else
912 {
913 if (op_class == NO_REGS)
914 {
915 mem_cost = ira_memory_move_cost[mode];
916 for (k = cost_classes_ptr->num - 1; k >= 0; k--)
917 {
918 rclass = cost_classes[k];
919 pp_costs[k] = ((mem_cost[rclass][0]
920 + mem_cost[rclass][1])
921 * frequency);
922 }
923 }
924 else
925 {
926 move_in_cost = ira_may_move_in_cost[mode];
927 move_out_cost = ira_may_move_out_cost[mode];
928 for (k = cost_classes_ptr->num - 1; k >= 0; k--)
929 {
930 rclass = cost_classes[k];
931 pp_costs[k] = ((move_in_cost[rclass][op_class]
932 + move_out_cost[op_class][rclass])
933 * frequency);
934 }
935 }
936 }
937
938 if (op_class == NO_REGS)
939 /* Although we don't need insn to reload from
940 memory, still accessing memory is usually more
941 expensive than a register. */
942 pp->mem_cost = frequency;
943 else
944 /* If the alternative actually allows memory, make
945 things a bit cheaper since we won't need an
946 extra insn to load it. */
947 pp->mem_cost
948 = ((out_p ? ira_memory_move_cost[mode][op_class][0] : 0)
949 + (in_p ? ira_memory_move_cost[mode][op_class][1] : 0)
950 - allows_mem[i]) * frequency;
951 /* If we have assigned a class to this allocno in
952 our first pass, add a cost to this alternative
953 corresponding to what we would add if this
954 allocno were not in the appropriate class. */
955 if (pref)
956 {
957 enum reg_class pref_class = pref[COST_INDEX (REGNO (op))];
958
959 if (pref_class == NO_REGS)
960 {
961 if (op_class != NO_REGS)
962 alt_cost
963 += ((out_p
964 ? ira_memory_move_cost[mode][op_class][0]
965 : 0)
966 + (in_p
967 ? ira_memory_move_cost[mode][op_class][1]
968 : 0));
969 }
970 else if (op_class == NO_REGS)
971 alt_cost
972 += ((out_p
973 ? ira_memory_move_cost[mode][pref_class][1]
974 : 0)
975 + (in_p
976 ? ira_memory_move_cost[mode][pref_class][0]
977 : 0));
978 else if (ira_reg_class_intersect[pref_class][op_class]
979 == NO_REGS)
980 alt_cost += (ira_register_move_cost
981 [mode][pref_class][op_class]);
982 }
983 }
984 }
985
986 /* Otherwise, if this alternative wins, either because we
987 have already determined that or if we have a hard
988 register of the proper class, there is no cost for this
989 alternative. */
990 else if (win || (REG_P (op)
991 && reg_fits_class_p (op, classes[i],
992 0, GET_MODE (op))))
993 ;
994
995 /* If registers are valid, the cost of this alternative
996 includes copying the object to and/or from a
997 register. */
998 else if (classes[i] != NO_REGS)
999 {
1000 if (recog_data.operand_type[i] != OP_OUT)
1001 alt_cost += copy_cost (op, mode, classes[i], 1, NULL);
1002
1003 if (recog_data.operand_type[i] != OP_IN)
1004 alt_cost += copy_cost (op, mode, classes[i], 0, NULL);
1005 }
1006 /* The only other way this alternative can be used is if
1007 this is a constant that could be placed into memory. */
1008 else if (CONSTANT_P (op) && (allows_addr || allows_mem[i]))
1009 alt_cost += ira_memory_move_cost[mode][classes[i]][1];
1010 else
1011 alt_fail = 1;
1012 }
1013
1014 if (alt_fail)
1015 continue;
1016
1017 op_cost_add = alt_cost * frequency;
1018 /* Finally, update the costs with the information we've
1019 calculated about this alternative. */
1020 for (i = 0; i < n_ops; i++)
1021 if (REG_P (ops[i]) && REGNO (ops[i]) >= FIRST_PSEUDO_REGISTER)
1022 {
1023 struct costs *pp = op_costs[i], *qq = this_op_costs[i];
1024 int *pp_costs = pp->cost, *qq_costs = qq->cost;
1025 int scale = 1 + (recog_data.operand_type[i] == OP_INOUT);
1026 cost_classes_t cost_classes_ptr
1027 = regno_cost_classes[REGNO (ops[i])];
1028
1029 pp->mem_cost = MIN (pp->mem_cost,
1030 (qq->mem_cost + op_cost_add) * scale);
1031
1032 for (k = cost_classes_ptr->num - 1; k >= 0; k--)
1033 pp_costs[k]
1034 = MIN (pp_costs[k], (qq_costs[k] + op_cost_add) * scale);
1035 }
1036 }
1037
1038 if (allocno_p)
1039 for (i = 0; i < n_ops; i++)
1040 {
1041 ira_allocno_t a;
1042 rtx op = ops[i];
1043
1044 if (! REG_P (op) || REGNO (op) < FIRST_PSEUDO_REGISTER)
1045 continue;
1046 a = ira_curr_regno_allocno_map [REGNO (op)];
1047 if (! ALLOCNO_BAD_SPILL_P (a) && insn_allows_mem[i] == 0)
1048 ALLOCNO_BAD_SPILL_P (a) = true;
1049 }
1050
1051 }
1052
1053 \f
1054
1055 /* Wrapper around REGNO_OK_FOR_INDEX_P, to allow pseudo registers. */
1056 static inline bool
1057 ok_for_index_p_nonstrict (rtx reg)
1058 {
1059 unsigned regno = REGNO (reg);
1060
1061 return regno >= FIRST_PSEUDO_REGISTER || REGNO_OK_FOR_INDEX_P (regno);
1062 }
1063
1064 /* A version of regno_ok_for_base_p for use here, when all
1065 pseudo-registers should count as OK. Arguments as for
1066 regno_ok_for_base_p. */
1067 static inline bool
1068 ok_for_base_p_nonstrict (rtx reg, machine_mode mode, addr_space_t as,
1069 enum rtx_code outer_code, enum rtx_code index_code)
1070 {
1071 unsigned regno = REGNO (reg);
1072
1073 if (regno >= FIRST_PSEUDO_REGISTER)
1074 return true;
1075 return ok_for_base_p_1 (regno, mode, as, outer_code, index_code);
1076 }
1077
1078 /* Record the pseudo registers we must reload into hard registers in a
1079 subexpression of a memory address, X.
1080
1081 If CONTEXT is 0, we are looking at the base part of an address,
1082 otherwise we are looking at the index part.
1083
1084 MODE and AS are the mode and address space of the memory reference;
1085 OUTER_CODE and INDEX_CODE give the context that the rtx appears in.
1086 These four arguments are passed down to base_reg_class.
1087
1088 SCALE is twice the amount to multiply the cost by (it is twice so
1089 we can represent half-cost adjustments). */
1090 static void
1091 record_address_regs (machine_mode mode, addr_space_t as, rtx x,
1092 int context, enum rtx_code outer_code,
1093 enum rtx_code index_code, int scale)
1094 {
1095 enum rtx_code code = GET_CODE (x);
1096 enum reg_class rclass;
1097
1098 if (context == 1)
1099 rclass = INDEX_REG_CLASS;
1100 else
1101 rclass = base_reg_class (mode, as, outer_code, index_code);
1102
1103 switch (code)
1104 {
1105 case CONST_INT:
1106 case CONST:
1107 case CC0:
1108 case PC:
1109 case SYMBOL_REF:
1110 case LABEL_REF:
1111 return;
1112
1113 case PLUS:
1114 /* When we have an address that is a sum, we must determine
1115 whether registers are "base" or "index" regs. If there is a
1116 sum of two registers, we must choose one to be the "base".
1117 Luckily, we can use the REG_POINTER to make a good choice
1118 most of the time. We only need to do this on machines that
1119 can have two registers in an address and where the base and
1120 index register classes are different.
1121
1122 ??? This code used to set REGNO_POINTER_FLAG in some cases,
1123 but that seems bogus since it should only be set when we are
1124 sure the register is being used as a pointer. */
1125 {
1126 rtx arg0 = XEXP (x, 0);
1127 rtx arg1 = XEXP (x, 1);
1128 enum rtx_code code0 = GET_CODE (arg0);
1129 enum rtx_code code1 = GET_CODE (arg1);
1130
1131 /* Look inside subregs. */
1132 if (code0 == SUBREG)
1133 arg0 = SUBREG_REG (arg0), code0 = GET_CODE (arg0);
1134 if (code1 == SUBREG)
1135 arg1 = SUBREG_REG (arg1), code1 = GET_CODE (arg1);
1136
1137 /* If this machine only allows one register per address, it
1138 must be in the first operand. */
1139 if (MAX_REGS_PER_ADDRESS == 1)
1140 record_address_regs (mode, as, arg0, 0, PLUS, code1, scale);
1141
1142 /* If index and base registers are the same on this machine,
1143 just record registers in any non-constant operands. We
1144 assume here, as well as in the tests below, that all
1145 addresses are in canonical form. */
1146 else if (INDEX_REG_CLASS
1147 == base_reg_class (VOIDmode, as, PLUS, SCRATCH))
1148 {
1149 record_address_regs (mode, as, arg0, context, PLUS, code1, scale);
1150 if (! CONSTANT_P (arg1))
1151 record_address_regs (mode, as, arg1, context, PLUS, code0, scale);
1152 }
1153
1154 /* If the second operand is a constant integer, it doesn't
1155 change what class the first operand must be. */
1156 else if (CONST_SCALAR_INT_P (arg1))
1157 record_address_regs (mode, as, arg0, context, PLUS, code1, scale);
1158 /* If the second operand is a symbolic constant, the first
1159 operand must be an index register. */
1160 else if (code1 == SYMBOL_REF || code1 == CONST || code1 == LABEL_REF)
1161 record_address_regs (mode, as, arg0, 1, PLUS, code1, scale);
1162 /* If both operands are registers but one is already a hard
1163 register of index or reg-base class, give the other the
1164 class that the hard register is not. */
1165 else if (code0 == REG && code1 == REG
1166 && REGNO (arg0) < FIRST_PSEUDO_REGISTER
1167 && (ok_for_base_p_nonstrict (arg0, mode, as, PLUS, REG)
1168 || ok_for_index_p_nonstrict (arg0)))
1169 record_address_regs (mode, as, arg1,
1170 ok_for_base_p_nonstrict (arg0, mode, as,
1171 PLUS, REG) ? 1 : 0,
1172 PLUS, REG, scale);
1173 else if (code0 == REG && code1 == REG
1174 && REGNO (arg1) < FIRST_PSEUDO_REGISTER
1175 && (ok_for_base_p_nonstrict (arg1, mode, as, PLUS, REG)
1176 || ok_for_index_p_nonstrict (arg1)))
1177 record_address_regs (mode, as, arg0,
1178 ok_for_base_p_nonstrict (arg1, mode, as,
1179 PLUS, REG) ? 1 : 0,
1180 PLUS, REG, scale);
1181 /* If one operand is known to be a pointer, it must be the
1182 base with the other operand the index. Likewise if the
1183 other operand is a MULT. */
1184 else if ((code0 == REG && REG_POINTER (arg0)) || code1 == MULT)
1185 {
1186 record_address_regs (mode, as, arg0, 0, PLUS, code1, scale);
1187 record_address_regs (mode, as, arg1, 1, PLUS, code0, scale);
1188 }
1189 else if ((code1 == REG && REG_POINTER (arg1)) || code0 == MULT)
1190 {
1191 record_address_regs (mode, as, arg0, 1, PLUS, code1, scale);
1192 record_address_regs (mode, as, arg1, 0, PLUS, code0, scale);
1193 }
1194 /* Otherwise, count equal chances that each might be a base or
1195 index register. This case should be rare. */
1196 else
1197 {
1198 record_address_regs (mode, as, arg0, 0, PLUS, code1, scale / 2);
1199 record_address_regs (mode, as, arg0, 1, PLUS, code1, scale / 2);
1200 record_address_regs (mode, as, arg1, 0, PLUS, code0, scale / 2);
1201 record_address_regs (mode, as, arg1, 1, PLUS, code0, scale / 2);
1202 }
1203 }
1204 break;
1205
1206 /* Double the importance of an allocno that is incremented or
1207 decremented, since it would take two extra insns if it ends
1208 up in the wrong place. */
1209 case POST_MODIFY:
1210 case PRE_MODIFY:
1211 record_address_regs (mode, as, XEXP (x, 0), 0, code,
1212 GET_CODE (XEXP (XEXP (x, 1), 1)), 2 * scale);
1213 if (REG_P (XEXP (XEXP (x, 1), 1)))
1214 record_address_regs (mode, as, XEXP (XEXP (x, 1), 1), 1, code, REG,
1215 2 * scale);
1216 break;
1217
1218 case POST_INC:
1219 case PRE_INC:
1220 case POST_DEC:
1221 case PRE_DEC:
1222 /* Double the importance of an allocno that is incremented or
1223 decremented, since it would take two extra insns if it ends
1224 up in the wrong place. */
1225 record_address_regs (mode, as, XEXP (x, 0), 0, code, SCRATCH, 2 * scale);
1226 break;
1227
1228 case REG:
1229 {
1230 struct costs *pp;
1231 int *pp_costs;
1232 enum reg_class i;
1233 int k, regno, add_cost;
1234 cost_classes_t cost_classes_ptr;
1235 enum reg_class *cost_classes;
1236 move_table *move_in_cost;
1237
1238 if (REGNO (x) < FIRST_PSEUDO_REGISTER)
1239 break;
1240
1241 regno = REGNO (x);
1242 if (allocno_p)
1243 ALLOCNO_BAD_SPILL_P (ira_curr_regno_allocno_map[regno]) = true;
1244 pp = COSTS (costs, COST_INDEX (regno));
1245 add_cost = (ira_memory_move_cost[Pmode][rclass][1] * scale) / 2;
1246 if (INT_MAX - add_cost < pp->mem_cost)
1247 pp->mem_cost = INT_MAX;
1248 else
1249 pp->mem_cost += add_cost;
1250 cost_classes_ptr = regno_cost_classes[regno];
1251 cost_classes = cost_classes_ptr->classes;
1252 pp_costs = pp->cost;
1253 ira_init_register_move_cost_if_necessary (Pmode);
1254 move_in_cost = ira_may_move_in_cost[Pmode];
1255 for (k = cost_classes_ptr->num - 1; k >= 0; k--)
1256 {
1257 i = cost_classes[k];
1258 add_cost = (move_in_cost[i][rclass] * scale) / 2;
1259 if (INT_MAX - add_cost < pp_costs[k])
1260 pp_costs[k] = INT_MAX;
1261 else
1262 pp_costs[k] += add_cost;
1263 }
1264 }
1265 break;
1266
1267 default:
1268 {
1269 const char *fmt = GET_RTX_FORMAT (code);
1270 int i;
1271 for (i = GET_RTX_LENGTH (code) - 1; i >= 0; i--)
1272 if (fmt[i] == 'e')
1273 record_address_regs (mode, as, XEXP (x, i), context, code, SCRATCH,
1274 scale);
1275 }
1276 }
1277 }
1278
1279 \f
1280
1281 /* Calculate the costs of insn operands. */
1282 static void
1283 record_operand_costs (rtx_insn *insn, enum reg_class *pref)
1284 {
1285 const char *constraints[MAX_RECOG_OPERANDS];
1286 machine_mode modes[MAX_RECOG_OPERANDS];
1287 rtx ops[MAX_RECOG_OPERANDS];
1288 rtx set;
1289 int i;
1290
1291 for (i = 0; i < recog_data.n_operands; i++)
1292 {
1293 constraints[i] = recog_data.constraints[i];
1294 modes[i] = recog_data.operand_mode[i];
1295 }
1296
1297 /* If we get here, we are set up to record the costs of all the
1298 operands for this insn. Start by initializing the costs. Then
1299 handle any address registers. Finally record the desired classes
1300 for any allocnos, doing it twice if some pair of operands are
1301 commutative. */
1302 for (i = 0; i < recog_data.n_operands; i++)
1303 {
1304 memcpy (op_costs[i], init_cost, struct_costs_size);
1305
1306 ops[i] = recog_data.operand[i];
1307 if (GET_CODE (recog_data.operand[i]) == SUBREG)
1308 recog_data.operand[i] = SUBREG_REG (recog_data.operand[i]);
1309
1310 if (MEM_P (recog_data.operand[i]))
1311 record_address_regs (GET_MODE (recog_data.operand[i]),
1312 MEM_ADDR_SPACE (recog_data.operand[i]),
1313 XEXP (recog_data.operand[i], 0),
1314 0, MEM, SCRATCH, frequency * 2);
1315 else if (constraints[i][0] == 'p'
1316 || (insn_extra_address_constraint
1317 (lookup_constraint (constraints[i]))))
1318 record_address_regs (VOIDmode, ADDR_SPACE_GENERIC,
1319 recog_data.operand[i], 0, ADDRESS, SCRATCH,
1320 frequency * 2);
1321 }
1322
1323 /* Check for commutative in a separate loop so everything will have
1324 been initialized. We must do this even if one operand is a
1325 constant--see addsi3 in m68k.md. */
1326 for (i = 0; i < (int) recog_data.n_operands - 1; i++)
1327 if (constraints[i][0] == '%')
1328 {
1329 const char *xconstraints[MAX_RECOG_OPERANDS];
1330 int j;
1331
1332 /* Handle commutative operands by swapping the constraints.
1333 We assume the modes are the same. */
1334 for (j = 0; j < recog_data.n_operands; j++)
1335 xconstraints[j] = constraints[j];
1336
1337 xconstraints[i] = constraints[i+1];
1338 xconstraints[i+1] = constraints[i];
1339 record_reg_classes (recog_data.n_alternatives, recog_data.n_operands,
1340 recog_data.operand, modes,
1341 xconstraints, insn, pref);
1342 }
1343 record_reg_classes (recog_data.n_alternatives, recog_data.n_operands,
1344 recog_data.operand, modes,
1345 constraints, insn, pref);
1346
1347 /* If this insn is a single set copying operand 1 to operand 0 and
1348 one operand is an allocno with the other a hard reg or an allocno
1349 that prefers a hard register that is in its own register class
1350 then we may want to adjust the cost of that register class to -1.
1351
1352 Avoid the adjustment if the source does not die to avoid
1353 stressing of register allocator by preferencing two colliding
1354 registers into single class.
1355
1356 Also avoid the adjustment if a copy between hard registers of the
1357 class is expensive (ten times the cost of a default copy is
1358 considered arbitrarily expensive). This avoids losing when the
1359 preferred class is very expensive as the source of a copy
1360 instruction. */
1361 if ((set = single_set (insn)) != NULL_RTX
1362 /* In rare cases the single set insn might have less 2 operands
1363 as the source can be a fixed special reg. */
1364 && recog_data.n_operands > 1
1365 && ops[0] == SET_DEST (set) && ops[1] == SET_SRC (set))
1366 {
1367 int regno, other_regno;
1368 rtx dest = SET_DEST (set);
1369 rtx src = SET_SRC (set);
1370
1371 dest = SET_DEST (set);
1372 src = SET_SRC (set);
1373 if (GET_CODE (dest) == SUBREG
1374 && (GET_MODE_SIZE (GET_MODE (dest))
1375 == GET_MODE_SIZE (GET_MODE (SUBREG_REG (dest)))))
1376 dest = SUBREG_REG (dest);
1377 if (GET_CODE (src) == SUBREG
1378 && (GET_MODE_SIZE (GET_MODE (src))
1379 == GET_MODE_SIZE (GET_MODE (SUBREG_REG (src)))))
1380 src = SUBREG_REG (src);
1381 if (REG_P (src) && REG_P (dest)
1382 && find_regno_note (insn, REG_DEAD, REGNO (src))
1383 && (((regno = REGNO (src)) >= FIRST_PSEUDO_REGISTER
1384 && (other_regno = REGNO (dest)) < FIRST_PSEUDO_REGISTER)
1385 || ((regno = REGNO (dest)) >= FIRST_PSEUDO_REGISTER
1386 && (other_regno = REGNO (src)) < FIRST_PSEUDO_REGISTER)))
1387 {
1388 machine_mode mode = GET_MODE (src);
1389 cost_classes_t cost_classes_ptr = regno_cost_classes[regno];
1390 enum reg_class *cost_classes = cost_classes_ptr->classes;
1391 reg_class_t rclass;
1392 int k, nr;
1393
1394 i = regno == (int) REGNO (src) ? 1 : 0;
1395 for (k = cost_classes_ptr->num - 1; k >= 0; k--)
1396 {
1397 rclass = cost_classes[k];
1398 if (TEST_HARD_REG_BIT (reg_class_contents[rclass], other_regno)
1399 && (reg_class_size[(int) rclass]
1400 == ira_reg_class_max_nregs [(int) rclass][(int) mode]))
1401 {
1402 if (reg_class_size[rclass] == 1)
1403 op_costs[i]->cost[k] = -frequency;
1404 else
1405 {
1406 for (nr = 0;
1407 nr < hard_regno_nregs[other_regno][mode];
1408 nr++)
1409 if (! TEST_HARD_REG_BIT (reg_class_contents[rclass],
1410 other_regno + nr))
1411 break;
1412
1413 if (nr == hard_regno_nregs[other_regno][mode])
1414 op_costs[i]->cost[k] = -frequency;
1415 }
1416 }
1417 }
1418 }
1419 }
1420 }
1421
1422 \f
1423
1424 /* Process one insn INSN. Scan it and record each time it would save
1425 code to put a certain allocnos in a certain class. Return the last
1426 insn processed, so that the scan can be continued from there. */
1427 static rtx_insn *
1428 scan_one_insn (rtx_insn *insn)
1429 {
1430 enum rtx_code pat_code;
1431 rtx set, note;
1432 int i, k;
1433 bool counted_mem;
1434
1435 if (!NONDEBUG_INSN_P (insn))
1436 return insn;
1437
1438 pat_code = GET_CODE (PATTERN (insn));
1439 if (pat_code == USE || pat_code == CLOBBER || pat_code == ASM_INPUT)
1440 return insn;
1441
1442 counted_mem = false;
1443 set = single_set (insn);
1444 extract_insn (insn);
1445
1446 /* If this insn loads a parameter from its stack slot, then it
1447 represents a savings, rather than a cost, if the parameter is
1448 stored in memory. Record this fact.
1449
1450 Similarly if we're loading other constants from memory (constant
1451 pool, TOC references, small data areas, etc) and this is the only
1452 assignment to the destination pseudo.
1453
1454 Don't do this if SET_SRC (set) isn't a general operand, if it is
1455 a memory requiring special instructions to load it, decreasing
1456 mem_cost might result in it being loaded using the specialized
1457 instruction into a register, then stored into stack and loaded
1458 again from the stack. See PR52208.
1459
1460 Don't do this if SET_SRC (set) has side effect. See PR56124. */
1461 if (set != 0 && REG_P (SET_DEST (set)) && MEM_P (SET_SRC (set))
1462 && (note = find_reg_note (insn, REG_EQUIV, NULL_RTX)) != NULL_RTX
1463 && ((MEM_P (XEXP (note, 0))
1464 && !side_effects_p (SET_SRC (set)))
1465 || (CONSTANT_P (XEXP (note, 0))
1466 && targetm.legitimate_constant_p (GET_MODE (SET_DEST (set)),
1467 XEXP (note, 0))
1468 && REG_N_SETS (REGNO (SET_DEST (set))) == 1))
1469 && general_operand (SET_SRC (set), GET_MODE (SET_SRC (set))))
1470 {
1471 enum reg_class cl = GENERAL_REGS;
1472 rtx reg = SET_DEST (set);
1473 int num = COST_INDEX (REGNO (reg));
1474
1475 COSTS (costs, num)->mem_cost
1476 -= ira_memory_move_cost[GET_MODE (reg)][cl][1] * frequency;
1477 record_address_regs (GET_MODE (SET_SRC (set)),
1478 MEM_ADDR_SPACE (SET_SRC (set)),
1479 XEXP (SET_SRC (set), 0), 0, MEM, SCRATCH,
1480 frequency * 2);
1481 counted_mem = true;
1482 }
1483
1484 record_operand_costs (insn, pref);
1485
1486 /* Now add the cost for each operand to the total costs for its
1487 allocno. */
1488 for (i = 0; i < recog_data.n_operands; i++)
1489 if (REG_P (recog_data.operand[i])
1490 && REGNO (recog_data.operand[i]) >= FIRST_PSEUDO_REGISTER)
1491 {
1492 int regno = REGNO (recog_data.operand[i]);
1493 struct costs *p = COSTS (costs, COST_INDEX (regno));
1494 struct costs *q = op_costs[i];
1495 int *p_costs = p->cost, *q_costs = q->cost;
1496 cost_classes_t cost_classes_ptr = regno_cost_classes[regno];
1497 int add_cost;
1498
1499 /* If the already accounted for the memory "cost" above, don't
1500 do so again. */
1501 if (!counted_mem)
1502 {
1503 add_cost = q->mem_cost;
1504 if (add_cost > 0 && INT_MAX - add_cost < p->mem_cost)
1505 p->mem_cost = INT_MAX;
1506 else
1507 p->mem_cost += add_cost;
1508 }
1509 for (k = cost_classes_ptr->num - 1; k >= 0; k--)
1510 {
1511 add_cost = q_costs[k];
1512 if (add_cost > 0 && INT_MAX - add_cost < p_costs[k])
1513 p_costs[k] = INT_MAX;
1514 else
1515 p_costs[k] += add_cost;
1516 }
1517 }
1518
1519 return insn;
1520 }
1521
1522 \f
1523
1524 /* Print allocnos costs to file F. */
1525 static void
1526 print_allocno_costs (FILE *f)
1527 {
1528 int k;
1529 ira_allocno_t a;
1530 ira_allocno_iterator ai;
1531
1532 ira_assert (allocno_p);
1533 fprintf (f, "\n");
1534 FOR_EACH_ALLOCNO (a, ai)
1535 {
1536 int i, rclass;
1537 basic_block bb;
1538 int regno = ALLOCNO_REGNO (a);
1539 cost_classes_t cost_classes_ptr = regno_cost_classes[regno];
1540 enum reg_class *cost_classes = cost_classes_ptr->classes;
1541
1542 i = ALLOCNO_NUM (a);
1543 fprintf (f, " a%d(r%d,", i, regno);
1544 if ((bb = ALLOCNO_LOOP_TREE_NODE (a)->bb) != NULL)
1545 fprintf (f, "b%d", bb->index);
1546 else
1547 fprintf (f, "l%d", ALLOCNO_LOOP_TREE_NODE (a)->loop_num);
1548 fprintf (f, ") costs:");
1549 for (k = 0; k < cost_classes_ptr->num; k++)
1550 {
1551 rclass = cost_classes[k];
1552 fprintf (f, " %s:%d", reg_class_names[rclass],
1553 COSTS (costs, i)->cost[k]);
1554 if (flag_ira_region == IRA_REGION_ALL
1555 || flag_ira_region == IRA_REGION_MIXED)
1556 fprintf (f, ",%d", COSTS (total_allocno_costs, i)->cost[k]);
1557 }
1558 fprintf (f, " MEM:%i", COSTS (costs, i)->mem_cost);
1559 if (flag_ira_region == IRA_REGION_ALL
1560 || flag_ira_region == IRA_REGION_MIXED)
1561 fprintf (f, ",%d", COSTS (total_allocno_costs, i)->mem_cost);
1562 fprintf (f, "\n");
1563 }
1564 }
1565
1566 /* Print pseudo costs to file F. */
1567 static void
1568 print_pseudo_costs (FILE *f)
1569 {
1570 int regno, k;
1571 int rclass;
1572 cost_classes_t cost_classes_ptr;
1573 enum reg_class *cost_classes;
1574
1575 ira_assert (! allocno_p);
1576 fprintf (f, "\n");
1577 for (regno = max_reg_num () - 1; regno >= FIRST_PSEUDO_REGISTER; regno--)
1578 {
1579 if (REG_N_REFS (regno) <= 0)
1580 continue;
1581 cost_classes_ptr = regno_cost_classes[regno];
1582 cost_classes = cost_classes_ptr->classes;
1583 fprintf (f, " r%d costs:", regno);
1584 for (k = 0; k < cost_classes_ptr->num; k++)
1585 {
1586 rclass = cost_classes[k];
1587 fprintf (f, " %s:%d", reg_class_names[rclass],
1588 COSTS (costs, regno)->cost[k]);
1589 }
1590 fprintf (f, " MEM:%i\n", COSTS (costs, regno)->mem_cost);
1591 }
1592 }
1593
1594 /* Traverse the BB represented by LOOP_TREE_NODE to update the allocno
1595 costs. */
1596 static void
1597 process_bb_for_costs (basic_block bb)
1598 {
1599 rtx_insn *insn;
1600
1601 frequency = REG_FREQ_FROM_BB (bb);
1602 if (frequency == 0)
1603 frequency = 1;
1604 FOR_BB_INSNS (bb, insn)
1605 insn = scan_one_insn (insn);
1606 }
1607
1608 /* Traverse the BB represented by LOOP_TREE_NODE to update the allocno
1609 costs. */
1610 static void
1611 process_bb_node_for_costs (ira_loop_tree_node_t loop_tree_node)
1612 {
1613 basic_block bb;
1614
1615 bb = loop_tree_node->bb;
1616 if (bb != NULL)
1617 process_bb_for_costs (bb);
1618 }
1619
1620 /* Find costs of register classes and memory for allocnos or pseudos
1621 and their best costs. Set up preferred, alternative and allocno
1622 classes for pseudos. */
1623 static void
1624 find_costs_and_classes (FILE *dump_file)
1625 {
1626 int i, k, start, max_cost_classes_num;
1627 int pass;
1628 basic_block bb;
1629 enum reg_class *regno_best_class;
1630
1631 init_recog ();
1632 regno_best_class
1633 = (enum reg_class *) ira_allocate (max_reg_num ()
1634 * sizeof (enum reg_class));
1635 for (i = max_reg_num () - 1; i >= FIRST_PSEUDO_REGISTER; i--)
1636 regno_best_class[i] = NO_REGS;
1637 if (!resize_reg_info () && allocno_p
1638 && pseudo_classes_defined_p && flag_expensive_optimizations)
1639 {
1640 ira_allocno_t a;
1641 ira_allocno_iterator ai;
1642
1643 pref = pref_buffer;
1644 max_cost_classes_num = 1;
1645 FOR_EACH_ALLOCNO (a, ai)
1646 {
1647 pref[ALLOCNO_NUM (a)] = reg_preferred_class (ALLOCNO_REGNO (a));
1648 setup_regno_cost_classes_by_aclass
1649 (ALLOCNO_REGNO (a), pref[ALLOCNO_NUM (a)]);
1650 max_cost_classes_num
1651 = MAX (max_cost_classes_num,
1652 regno_cost_classes[ALLOCNO_REGNO (a)]->num);
1653 }
1654 start = 1;
1655 }
1656 else
1657 {
1658 pref = NULL;
1659 max_cost_classes_num = ira_important_classes_num;
1660 for (i = max_reg_num () - 1; i >= FIRST_PSEUDO_REGISTER; i--)
1661 if (regno_reg_rtx[i] != NULL_RTX)
1662 setup_regno_cost_classes_by_mode (i, PSEUDO_REGNO_MODE (i));
1663 else
1664 setup_regno_cost_classes_by_aclass (i, ALL_REGS);
1665 start = 0;
1666 }
1667 if (allocno_p)
1668 /* Clear the flag for the next compiled function. */
1669 pseudo_classes_defined_p = false;
1670 /* Normally we scan the insns once and determine the best class to
1671 use for each allocno. However, if -fexpensive-optimizations are
1672 on, we do so twice, the second time using the tentative best
1673 classes to guide the selection. */
1674 for (pass = start; pass <= flag_expensive_optimizations; pass++)
1675 {
1676 if ((!allocno_p || internal_flag_ira_verbose > 0) && dump_file)
1677 fprintf (dump_file,
1678 "\nPass %i for finding pseudo/allocno costs\n\n", pass);
1679
1680 if (pass != start)
1681 {
1682 max_cost_classes_num = 1;
1683 for (i = max_reg_num () - 1; i >= FIRST_PSEUDO_REGISTER; i--)
1684 {
1685 setup_regno_cost_classes_by_aclass (i, regno_best_class[i]);
1686 max_cost_classes_num
1687 = MAX (max_cost_classes_num, regno_cost_classes[i]->num);
1688 }
1689 }
1690
1691 struct_costs_size
1692 = sizeof (struct costs) + sizeof (int) * (max_cost_classes_num - 1);
1693 /* Zero out our accumulation of the cost of each class for each
1694 allocno. */
1695 memset (costs, 0, cost_elements_num * struct_costs_size);
1696
1697 if (allocno_p)
1698 {
1699 /* Scan the instructions and record each time it would save code
1700 to put a certain allocno in a certain class. */
1701 ira_traverse_loop_tree (true, ira_loop_tree_root,
1702 process_bb_node_for_costs, NULL);
1703
1704 memcpy (total_allocno_costs, costs,
1705 max_struct_costs_size * ira_allocnos_num);
1706 }
1707 else
1708 {
1709 basic_block bb;
1710
1711 FOR_EACH_BB_FN (bb, cfun)
1712 process_bb_for_costs (bb);
1713 }
1714
1715 if (pass == 0)
1716 pref = pref_buffer;
1717
1718 /* Now for each allocno look at how desirable each class is and
1719 find which class is preferred. */
1720 for (i = max_reg_num () - 1; i >= FIRST_PSEUDO_REGISTER; i--)
1721 {
1722 ira_allocno_t a, parent_a;
1723 int rclass, a_num, parent_a_num, add_cost;
1724 ira_loop_tree_node_t parent;
1725 int best_cost, allocno_cost;
1726 enum reg_class best, alt_class;
1727 cost_classes_t cost_classes_ptr = regno_cost_classes[i];
1728 enum reg_class *cost_classes = cost_classes_ptr->classes;
1729 int *i_costs = temp_costs->cost;
1730 int i_mem_cost;
1731 int equiv_savings = regno_equiv_gains[i];
1732
1733 if (! allocno_p)
1734 {
1735 if (regno_reg_rtx[i] == NULL_RTX)
1736 continue;
1737 memcpy (temp_costs, COSTS (costs, i), struct_costs_size);
1738 i_mem_cost = temp_costs->mem_cost;
1739 }
1740 else
1741 {
1742 if (ira_regno_allocno_map[i] == NULL)
1743 continue;
1744 memset (temp_costs, 0, struct_costs_size);
1745 i_mem_cost = 0;
1746 /* Find cost of all allocnos with the same regno. */
1747 for (a = ira_regno_allocno_map[i];
1748 a != NULL;
1749 a = ALLOCNO_NEXT_REGNO_ALLOCNO (a))
1750 {
1751 int *a_costs, *p_costs;
1752
1753 a_num = ALLOCNO_NUM (a);
1754 if ((flag_ira_region == IRA_REGION_ALL
1755 || flag_ira_region == IRA_REGION_MIXED)
1756 && (parent = ALLOCNO_LOOP_TREE_NODE (a)->parent) != NULL
1757 && (parent_a = parent->regno_allocno_map[i]) != NULL
1758 /* There are no caps yet. */
1759 && bitmap_bit_p (ALLOCNO_LOOP_TREE_NODE
1760 (a)->border_allocnos,
1761 ALLOCNO_NUM (a)))
1762 {
1763 /* Propagate costs to upper levels in the region
1764 tree. */
1765 parent_a_num = ALLOCNO_NUM (parent_a);
1766 a_costs = COSTS (total_allocno_costs, a_num)->cost;
1767 p_costs = COSTS (total_allocno_costs, parent_a_num)->cost;
1768 for (k = cost_classes_ptr->num - 1; k >= 0; k--)
1769 {
1770 add_cost = a_costs[k];
1771 if (add_cost > 0 && INT_MAX - add_cost < p_costs[k])
1772 p_costs[k] = INT_MAX;
1773 else
1774 p_costs[k] += add_cost;
1775 }
1776 add_cost = COSTS (total_allocno_costs, a_num)->mem_cost;
1777 if (add_cost > 0
1778 && (INT_MAX - add_cost
1779 < COSTS (total_allocno_costs,
1780 parent_a_num)->mem_cost))
1781 COSTS (total_allocno_costs, parent_a_num)->mem_cost
1782 = INT_MAX;
1783 else
1784 COSTS (total_allocno_costs, parent_a_num)->mem_cost
1785 += add_cost;
1786
1787 if (i >= first_moveable_pseudo && i < last_moveable_pseudo)
1788 COSTS (total_allocno_costs, parent_a_num)->mem_cost = 0;
1789 }
1790 a_costs = COSTS (costs, a_num)->cost;
1791 for (k = cost_classes_ptr->num - 1; k >= 0; k--)
1792 {
1793 add_cost = a_costs[k];
1794 if (add_cost > 0 && INT_MAX - add_cost < i_costs[k])
1795 i_costs[k] = INT_MAX;
1796 else
1797 i_costs[k] += add_cost;
1798 }
1799 add_cost = COSTS (costs, a_num)->mem_cost;
1800 if (add_cost > 0 && INT_MAX - add_cost < i_mem_cost)
1801 i_mem_cost = INT_MAX;
1802 else
1803 i_mem_cost += add_cost;
1804 }
1805 }
1806 if (i >= first_moveable_pseudo && i < last_moveable_pseudo)
1807 i_mem_cost = 0;
1808 else if (equiv_savings < 0)
1809 i_mem_cost = -equiv_savings;
1810 else if (equiv_savings > 0)
1811 {
1812 i_mem_cost = 0;
1813 for (k = cost_classes_ptr->num - 1; k >= 0; k--)
1814 i_costs[k] += equiv_savings;
1815 }
1816
1817 best_cost = (1 << (HOST_BITS_PER_INT - 2)) - 1;
1818 best = ALL_REGS;
1819 alt_class = NO_REGS;
1820 /* Find best common class for all allocnos with the same
1821 regno. */
1822 for (k = 0; k < cost_classes_ptr->num; k++)
1823 {
1824 rclass = cost_classes[k];
1825 if (i_costs[k] < best_cost)
1826 {
1827 best_cost = i_costs[k];
1828 best = (enum reg_class) rclass;
1829 }
1830 else if (i_costs[k] == best_cost)
1831 best = ira_reg_class_subunion[best][rclass];
1832 if (pass == flag_expensive_optimizations
1833 /* We still prefer registers to memory even at this
1834 stage if their costs are the same. We will make
1835 a final decision during assigning hard registers
1836 when we have all info including more accurate
1837 costs which might be affected by assigning hard
1838 registers to other pseudos because the pseudos
1839 involved in moves can be coalesced. */
1840 && i_costs[k] <= i_mem_cost
1841 && (reg_class_size[reg_class_subunion[alt_class][rclass]]
1842 > reg_class_size[alt_class]))
1843 alt_class = reg_class_subunion[alt_class][rclass];
1844 }
1845 alt_class = ira_allocno_class_translate[alt_class];
1846 if (best_cost > i_mem_cost)
1847 regno_aclass[i] = NO_REGS;
1848 else if (!optimize && !targetm.class_likely_spilled_p (best))
1849 /* Registers in the alternative class are likely to need
1850 longer or slower sequences than registers in the best class.
1851 When optimizing we make some effort to use the best class
1852 over the alternative class where possible, but at -O0 we
1853 effectively give the alternative class equal weight.
1854 We then run the risk of using slower alternative registers
1855 when plenty of registers from the best class are still free.
1856 This is especially true because live ranges tend to be very
1857 short in -O0 code and so register pressure tends to be low.
1858
1859 Avoid that by ignoring the alternative class if the best
1860 class has plenty of registers. */
1861 regno_aclass[i] = best;
1862 else
1863 {
1864 /* Make the common class the biggest class of best and
1865 alt_class. */
1866 regno_aclass[i]
1867 = ira_reg_class_superunion[best][alt_class];
1868 ira_assert (regno_aclass[i] != NO_REGS
1869 && ira_reg_allocno_class_p[regno_aclass[i]]);
1870 }
1871 if (pass == flag_expensive_optimizations)
1872 {
1873 if (best_cost > i_mem_cost)
1874 best = alt_class = NO_REGS;
1875 else if (best == alt_class)
1876 alt_class = NO_REGS;
1877 setup_reg_classes (i, best, alt_class, regno_aclass[i]);
1878 if ((!allocno_p || internal_flag_ira_verbose > 2)
1879 && dump_file != NULL)
1880 fprintf (dump_file,
1881 " r%d: preferred %s, alternative %s, allocno %s\n",
1882 i, reg_class_names[best], reg_class_names[alt_class],
1883 reg_class_names[regno_aclass[i]]);
1884 }
1885 regno_best_class[i] = best;
1886 if (! allocno_p)
1887 {
1888 pref[i] = best_cost > i_mem_cost ? NO_REGS : best;
1889 continue;
1890 }
1891 for (a = ira_regno_allocno_map[i];
1892 a != NULL;
1893 a = ALLOCNO_NEXT_REGNO_ALLOCNO (a))
1894 {
1895 enum reg_class aclass = regno_aclass[i];
1896 int a_num = ALLOCNO_NUM (a);
1897 int *total_a_costs = COSTS (total_allocno_costs, a_num)->cost;
1898 int *a_costs = COSTS (costs, a_num)->cost;
1899
1900 if (aclass == NO_REGS)
1901 best = NO_REGS;
1902 else
1903 {
1904 /* Finding best class which is subset of the common
1905 class. */
1906 best_cost = (1 << (HOST_BITS_PER_INT - 2)) - 1;
1907 allocno_cost = best_cost;
1908 best = ALL_REGS;
1909 for (k = 0; k < cost_classes_ptr->num; k++)
1910 {
1911 rclass = cost_classes[k];
1912 if (! ira_class_subset_p[rclass][aclass])
1913 continue;
1914 if (total_a_costs[k] < best_cost)
1915 {
1916 best_cost = total_a_costs[k];
1917 allocno_cost = a_costs[k];
1918 best = (enum reg_class) rclass;
1919 }
1920 else if (total_a_costs[k] == best_cost)
1921 {
1922 best = ira_reg_class_subunion[best][rclass];
1923 allocno_cost = MAX (allocno_cost, a_costs[k]);
1924 }
1925 }
1926 ALLOCNO_CLASS_COST (a) = allocno_cost;
1927 }
1928 if (internal_flag_ira_verbose > 2 && dump_file != NULL
1929 && (pass == 0 || pref[a_num] != best))
1930 {
1931 fprintf (dump_file, " a%d (r%d,", a_num, i);
1932 if ((bb = ALLOCNO_LOOP_TREE_NODE (a)->bb) != NULL)
1933 fprintf (dump_file, "b%d", bb->index);
1934 else
1935 fprintf (dump_file, "l%d",
1936 ALLOCNO_LOOP_TREE_NODE (a)->loop_num);
1937 fprintf (dump_file, ") best %s, allocno %s\n",
1938 reg_class_names[best],
1939 reg_class_names[aclass]);
1940 }
1941 pref[a_num] = best;
1942 if (pass == flag_expensive_optimizations && best != aclass
1943 && ira_class_hard_regs_num[best] > 0
1944 && (ira_reg_class_max_nregs[best][ALLOCNO_MODE (a)]
1945 >= ira_class_hard_regs_num[best]))
1946 {
1947 int ind = cost_classes_ptr->index[aclass];
1948
1949 ira_assert (ind >= 0);
1950 ira_init_register_move_cost_if_necessary (ALLOCNO_MODE (a));
1951 ira_add_allocno_pref (a, ira_class_hard_regs[best][0],
1952 (a_costs[ind] - ALLOCNO_CLASS_COST (a))
1953 / (ira_register_move_cost
1954 [ALLOCNO_MODE (a)][best][aclass]));
1955 for (k = 0; k < cost_classes_ptr->num; k++)
1956 if (ira_class_subset_p[cost_classes[k]][best])
1957 a_costs[k] = a_costs[ind];
1958 }
1959 }
1960 }
1961
1962 if (internal_flag_ira_verbose > 4 && dump_file)
1963 {
1964 if (allocno_p)
1965 print_allocno_costs (dump_file);
1966 else
1967 print_pseudo_costs (dump_file);
1968 fprintf (dump_file,"\n");
1969 }
1970 }
1971 ira_free (regno_best_class);
1972 }
1973
1974 \f
1975
1976 /* Process moves involving hard regs to modify allocno hard register
1977 costs. We can do this only after determining allocno class. If a
1978 hard register forms a register class, then moves with the hard
1979 register are already taken into account in class costs for the
1980 allocno. */
1981 static void
1982 process_bb_node_for_hard_reg_moves (ira_loop_tree_node_t loop_tree_node)
1983 {
1984 int i, freq, src_regno, dst_regno, hard_regno, a_regno;
1985 bool to_p;
1986 ira_allocno_t a, curr_a;
1987 ira_loop_tree_node_t curr_loop_tree_node;
1988 enum reg_class rclass;
1989 basic_block bb;
1990 rtx_insn *insn;
1991 rtx set, src, dst;
1992
1993 bb = loop_tree_node->bb;
1994 if (bb == NULL)
1995 return;
1996 freq = REG_FREQ_FROM_BB (bb);
1997 if (freq == 0)
1998 freq = 1;
1999 FOR_BB_INSNS (bb, insn)
2000 {
2001 if (!NONDEBUG_INSN_P (insn))
2002 continue;
2003 set = single_set (insn);
2004 if (set == NULL_RTX)
2005 continue;
2006 dst = SET_DEST (set);
2007 src = SET_SRC (set);
2008 if (! REG_P (dst) || ! REG_P (src))
2009 continue;
2010 dst_regno = REGNO (dst);
2011 src_regno = REGNO (src);
2012 if (dst_regno >= FIRST_PSEUDO_REGISTER
2013 && src_regno < FIRST_PSEUDO_REGISTER)
2014 {
2015 hard_regno = src_regno;
2016 a = ira_curr_regno_allocno_map[dst_regno];
2017 to_p = true;
2018 }
2019 else if (src_regno >= FIRST_PSEUDO_REGISTER
2020 && dst_regno < FIRST_PSEUDO_REGISTER)
2021 {
2022 hard_regno = dst_regno;
2023 a = ira_curr_regno_allocno_map[src_regno];
2024 to_p = false;
2025 }
2026 else
2027 continue;
2028 rclass = ALLOCNO_CLASS (a);
2029 if (! TEST_HARD_REG_BIT (reg_class_contents[rclass], hard_regno))
2030 continue;
2031 i = ira_class_hard_reg_index[rclass][hard_regno];
2032 if (i < 0)
2033 continue;
2034 a_regno = ALLOCNO_REGNO (a);
2035 for (curr_loop_tree_node = ALLOCNO_LOOP_TREE_NODE (a);
2036 curr_loop_tree_node != NULL;
2037 curr_loop_tree_node = curr_loop_tree_node->parent)
2038 if ((curr_a = curr_loop_tree_node->regno_allocno_map[a_regno]) != NULL)
2039 ira_add_allocno_pref (curr_a, hard_regno, freq);
2040 {
2041 int cost;
2042 enum reg_class hard_reg_class;
2043 machine_mode mode;
2044
2045 mode = ALLOCNO_MODE (a);
2046 hard_reg_class = REGNO_REG_CLASS (hard_regno);
2047 ira_init_register_move_cost_if_necessary (mode);
2048 cost = (to_p ? ira_register_move_cost[mode][hard_reg_class][rclass]
2049 : ira_register_move_cost[mode][rclass][hard_reg_class]) * freq;
2050 ira_allocate_and_set_costs (&ALLOCNO_HARD_REG_COSTS (a), rclass,
2051 ALLOCNO_CLASS_COST (a));
2052 ira_allocate_and_set_costs (&ALLOCNO_CONFLICT_HARD_REG_COSTS (a),
2053 rclass, 0);
2054 ALLOCNO_HARD_REG_COSTS (a)[i] -= cost;
2055 ALLOCNO_CONFLICT_HARD_REG_COSTS (a)[i] -= cost;
2056 ALLOCNO_CLASS_COST (a) = MIN (ALLOCNO_CLASS_COST (a),
2057 ALLOCNO_HARD_REG_COSTS (a)[i]);
2058 }
2059 }
2060 }
2061
2062 /* After we find hard register and memory costs for allocnos, define
2063 its class and modify hard register cost because insns moving
2064 allocno to/from hard registers. */
2065 static void
2066 setup_allocno_class_and_costs (void)
2067 {
2068 int i, j, n, regno, hard_regno, num;
2069 int *reg_costs;
2070 enum reg_class aclass, rclass;
2071 ira_allocno_t a;
2072 ira_allocno_iterator ai;
2073 cost_classes_t cost_classes_ptr;
2074
2075 ira_assert (allocno_p);
2076 FOR_EACH_ALLOCNO (a, ai)
2077 {
2078 i = ALLOCNO_NUM (a);
2079 regno = ALLOCNO_REGNO (a);
2080 aclass = regno_aclass[regno];
2081 cost_classes_ptr = regno_cost_classes[regno];
2082 ira_assert (pref[i] == NO_REGS || aclass != NO_REGS);
2083 ALLOCNO_MEMORY_COST (a) = COSTS (costs, i)->mem_cost;
2084 ira_set_allocno_class (a, aclass);
2085 if (aclass == NO_REGS)
2086 continue;
2087 if (optimize && ALLOCNO_CLASS (a) != pref[i])
2088 {
2089 n = ira_class_hard_regs_num[aclass];
2090 ALLOCNO_HARD_REG_COSTS (a)
2091 = reg_costs = ira_allocate_cost_vector (aclass);
2092 for (j = n - 1; j >= 0; j--)
2093 {
2094 hard_regno = ira_class_hard_regs[aclass][j];
2095 if (TEST_HARD_REG_BIT (reg_class_contents[pref[i]], hard_regno))
2096 reg_costs[j] = ALLOCNO_CLASS_COST (a);
2097 else
2098 {
2099 rclass = REGNO_REG_CLASS (hard_regno);
2100 num = cost_classes_ptr->index[rclass];
2101 if (num < 0)
2102 {
2103 num = cost_classes_ptr->hard_regno_index[hard_regno];
2104 ira_assert (num >= 0);
2105 }
2106 reg_costs[j] = COSTS (costs, i)->cost[num];
2107 }
2108 }
2109 }
2110 }
2111 if (optimize)
2112 ira_traverse_loop_tree (true, ira_loop_tree_root,
2113 process_bb_node_for_hard_reg_moves, NULL);
2114 }
2115
2116 \f
2117
2118 /* Function called once during compiler work. */
2119 void
2120 ira_init_costs_once (void)
2121 {
2122 int i;
2123
2124 init_cost = NULL;
2125 for (i = 0; i < MAX_RECOG_OPERANDS; i++)
2126 {
2127 op_costs[i] = NULL;
2128 this_op_costs[i] = NULL;
2129 }
2130 temp_costs = NULL;
2131 }
2132
2133 /* Free allocated temporary cost vectors. */
2134 void
2135 target_ira_int::free_ira_costs ()
2136 {
2137 int i;
2138
2139 free (x_init_cost);
2140 x_init_cost = NULL;
2141 for (i = 0; i < MAX_RECOG_OPERANDS; i++)
2142 {
2143 free (x_op_costs[i]);
2144 free (x_this_op_costs[i]);
2145 x_op_costs[i] = x_this_op_costs[i] = NULL;
2146 }
2147 free (x_temp_costs);
2148 x_temp_costs = NULL;
2149 }
2150
2151 /* This is called each time register related information is
2152 changed. */
2153 void
2154 ira_init_costs (void)
2155 {
2156 int i;
2157
2158 this_target_ira_int->free_ira_costs ();
2159 max_struct_costs_size
2160 = sizeof (struct costs) + sizeof (int) * (ira_important_classes_num - 1);
2161 /* Don't use ira_allocate because vectors live through several IRA
2162 calls. */
2163 init_cost = (struct costs *) xmalloc (max_struct_costs_size);
2164 init_cost->mem_cost = 1000000;
2165 for (i = 0; i < ira_important_classes_num; i++)
2166 init_cost->cost[i] = 1000000;
2167 for (i = 0; i < MAX_RECOG_OPERANDS; i++)
2168 {
2169 op_costs[i] = (struct costs *) xmalloc (max_struct_costs_size);
2170 this_op_costs[i] = (struct costs *) xmalloc (max_struct_costs_size);
2171 }
2172 temp_costs = (struct costs *) xmalloc (max_struct_costs_size);
2173 }
2174
2175 \f
2176
2177 /* Common initialization function for ira_costs and
2178 ira_set_pseudo_classes. */
2179 static void
2180 init_costs (void)
2181 {
2182 init_subregs_of_mode ();
2183 costs = (struct costs *) ira_allocate (max_struct_costs_size
2184 * cost_elements_num);
2185 pref_buffer = (enum reg_class *) ira_allocate (sizeof (enum reg_class)
2186 * cost_elements_num);
2187 regno_aclass = (enum reg_class *) ira_allocate (sizeof (enum reg_class)
2188 * max_reg_num ());
2189 regno_equiv_gains = (int *) ira_allocate (sizeof (int) * max_reg_num ());
2190 memset (regno_equiv_gains, 0, sizeof (int) * max_reg_num ());
2191 }
2192
2193 /* Common finalization function for ira_costs and
2194 ira_set_pseudo_classes. */
2195 static void
2196 finish_costs (void)
2197 {
2198 finish_subregs_of_mode ();
2199 ira_free (regno_equiv_gains);
2200 ira_free (regno_aclass);
2201 ira_free (pref_buffer);
2202 ira_free (costs);
2203 }
2204
2205 /* Entry function which defines register class, memory and hard
2206 register costs for each allocno. */
2207 void
2208 ira_costs (void)
2209 {
2210 allocno_p = true;
2211 cost_elements_num = ira_allocnos_num;
2212 init_costs ();
2213 total_allocno_costs = (struct costs *) ira_allocate (max_struct_costs_size
2214 * ira_allocnos_num);
2215 initiate_regno_cost_classes ();
2216 calculate_elim_costs_all_insns ();
2217 find_costs_and_classes (ira_dump_file);
2218 setup_allocno_class_and_costs ();
2219 finish_regno_cost_classes ();
2220 finish_costs ();
2221 ira_free (total_allocno_costs);
2222 }
2223
2224 /* Entry function which defines classes for pseudos.
2225 Set pseudo_classes_defined_p only if DEFINE_PSEUDO_CLASSES is true. */
2226 void
2227 ira_set_pseudo_classes (bool define_pseudo_classes, FILE *dump_file)
2228 {
2229 allocno_p = false;
2230 internal_flag_ira_verbose = flag_ira_verbose;
2231 cost_elements_num = max_reg_num ();
2232 init_costs ();
2233 initiate_regno_cost_classes ();
2234 find_costs_and_classes (dump_file);
2235 finish_regno_cost_classes ();
2236 if (define_pseudo_classes)
2237 pseudo_classes_defined_p = true;
2238
2239 finish_costs ();
2240 }
2241
2242 \f
2243
2244 /* Change hard register costs for allocnos which lives through
2245 function calls. This is called only when we found all intersected
2246 calls during building allocno live ranges. */
2247 void
2248 ira_tune_allocno_costs (void)
2249 {
2250 int j, n, regno;
2251 int cost, min_cost, *reg_costs;
2252 enum reg_class aclass, rclass;
2253 machine_mode mode;
2254 ira_allocno_t a;
2255 ira_allocno_iterator ai;
2256 ira_allocno_object_iterator oi;
2257 ira_object_t obj;
2258 bool skip_p;
2259 HARD_REG_SET *crossed_calls_clobber_regs;
2260
2261 FOR_EACH_ALLOCNO (a, ai)
2262 {
2263 aclass = ALLOCNO_CLASS (a);
2264 if (aclass == NO_REGS)
2265 continue;
2266 mode = ALLOCNO_MODE (a);
2267 n = ira_class_hard_regs_num[aclass];
2268 min_cost = INT_MAX;
2269 if (ALLOCNO_CALLS_CROSSED_NUM (a)
2270 != ALLOCNO_CHEAP_CALLS_CROSSED_NUM (a))
2271 {
2272 ira_allocate_and_set_costs
2273 (&ALLOCNO_HARD_REG_COSTS (a), aclass,
2274 ALLOCNO_CLASS_COST (a));
2275 reg_costs = ALLOCNO_HARD_REG_COSTS (a);
2276 for (j = n - 1; j >= 0; j--)
2277 {
2278 regno = ira_class_hard_regs[aclass][j];
2279 skip_p = false;
2280 FOR_EACH_ALLOCNO_OBJECT (a, obj, oi)
2281 {
2282 if (ira_hard_reg_set_intersection_p (regno, mode,
2283 OBJECT_CONFLICT_HARD_REGS
2284 (obj)))
2285 {
2286 skip_p = true;
2287 break;
2288 }
2289 }
2290 if (skip_p)
2291 continue;
2292 rclass = REGNO_REG_CLASS (regno);
2293 cost = 0;
2294 crossed_calls_clobber_regs
2295 = &(ALLOCNO_CROSSED_CALLS_CLOBBERED_REGS (a));
2296 if (ira_hard_reg_set_intersection_p (regno, mode,
2297 *crossed_calls_clobber_regs)
2298 && (ira_hard_reg_set_intersection_p (regno, mode,
2299 call_used_reg_set)
2300 || HARD_REGNO_CALL_PART_CLOBBERED (regno, mode)))
2301 cost += (ALLOCNO_CALL_FREQ (a)
2302 * (ira_memory_move_cost[mode][rclass][0]
2303 + ira_memory_move_cost[mode][rclass][1]));
2304 #ifdef IRA_HARD_REGNO_ADD_COST_MULTIPLIER
2305 cost += ((ira_memory_move_cost[mode][rclass][0]
2306 + ira_memory_move_cost[mode][rclass][1])
2307 * ALLOCNO_FREQ (a)
2308 * IRA_HARD_REGNO_ADD_COST_MULTIPLIER (regno) / 2);
2309 #endif
2310 if (INT_MAX - cost < reg_costs[j])
2311 reg_costs[j] = INT_MAX;
2312 else
2313 reg_costs[j] += cost;
2314 if (min_cost > reg_costs[j])
2315 min_cost = reg_costs[j];
2316 }
2317 }
2318 if (min_cost != INT_MAX)
2319 ALLOCNO_CLASS_COST (a) = min_cost;
2320
2321 /* Some targets allow pseudos to be allocated to unaligned sequences
2322 of hard registers. However, selecting an unaligned sequence can
2323 unnecessarily restrict later allocations. So increase the cost of
2324 unaligned hard regs to encourage the use of aligned hard regs. */
2325 {
2326 const int nregs = ira_reg_class_max_nregs[aclass][ALLOCNO_MODE (a)];
2327
2328 if (nregs > 1)
2329 {
2330 ira_allocate_and_set_costs
2331 (&ALLOCNO_HARD_REG_COSTS (a), aclass, ALLOCNO_CLASS_COST (a));
2332 reg_costs = ALLOCNO_HARD_REG_COSTS (a);
2333 for (j = n - 1; j >= 0; j--)
2334 {
2335 regno = ira_non_ordered_class_hard_regs[aclass][j];
2336 if ((regno % nregs) != 0)
2337 {
2338 int index = ira_class_hard_reg_index[aclass][regno];
2339 ira_assert (index != -1);
2340 reg_costs[index] += ALLOCNO_FREQ (a);
2341 }
2342 }
2343 }
2344 }
2345 }
2346 }
2347
2348 /* Add COST to the estimated gain for eliminating REGNO with its
2349 equivalence. If COST is zero, record that no such elimination is
2350 possible. */
2351
2352 void
2353 ira_adjust_equiv_reg_cost (unsigned regno, int cost)
2354 {
2355 if (cost == 0)
2356 regno_equiv_gains[regno] = 0;
2357 else
2358 regno_equiv_gains[regno] += cost;
2359 }
2360
2361 void
2362 ira_costs_c_finalize (void)
2363 {
2364 this_target_ira_int->free_ira_costs ();
2365 }