OSDN Git Service

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