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