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