OSDN Git Service

Daily bump.
[pf3gnuchains/gcc-fork.git] / gcc / ira.c
1 /* Integrated Register Allocator (IRA) entry point.
2    Copyright (C) 2006, 2007, 2008
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 /* The integrated register allocator (IRA) is a
23    regional register allocator performing graph coloring on a top-down
24    traversal of nested regions.  Graph coloring in a region is based
25    on Chaitin-Briggs algorithm.  It is called integrated because
26    register coalescing, register live range splitting, and choosing a
27    better hard register are done on-the-fly during coloring.  Register
28    coalescing and choosing a cheaper hard register is done by hard
29    register preferencing during hard register assigning.  The live
30    range splitting is a byproduct of the regional register allocation.
31
32    Major IRA notions are:
33
34      o *Region* is a part of CFG where graph coloring based on
35        Chaitin-Briggs algorithm is done.  IRA can work on any set of
36        nested CFG regions forming a tree.  Currently the regions are
37        the entire function for the root region and natural loops for
38        the other regions.  Therefore data structure representing a
39        region is called loop_tree_node.
40
41      o *Cover class* is a register class belonging to a set of
42        non-intersecting register classes containing all of the
43        hard-registers available for register allocation.  The set of
44        all cover classes for a target is defined in the corresponding
45        machine-description file according some criteria.  Such notion
46        is needed because Chaitin-Briggs algorithm works on
47        non-intersected register classes.
48
49      o *Allocno* represents the live range of a pseudo-register in a
50        region.  Besides the obvious attributes like the corresponding
51        pseudo-register number, cover class, conflicting allocnos and
52        conflicting hard-registers, there are a few allocno attributes
53        which are important for understanding the allocation algorithm:
54
55        - *Live ranges*.  This is a list of ranges of *program
56          points* where the allocno lives.  Program points represent
57          places where a pseudo can be born or become dead (there are
58          approximately two times more program points than the insns)
59          and they are represented by integers starting with 0.  The
60          live ranges are used to find conflicts between allocnos of
61          different cover classes.  They also play very important role
62          for the transformation of the IRA internal representation of
63          several regions into a one region representation.  The later is
64          used during the reload pass work because each allocno
65          represents all of the corresponding pseudo-registers.
66
67        - *Hard-register costs*.  This is a vector of size equal to the
68          number of available hard-registers of the allocno's cover
69          class.  The cost of a callee-clobbered hard-register for an
70          allocno is increased by the cost of save/restore code around
71          the calls through the given allocno's life.  If the allocno
72          is a move instruction operand and another operand is a
73          hard-register of the allocno's cover class, the cost of the
74          hard-register is decreased by the move cost.
75
76          When an allocno is assigned, the hard-register with minimal
77          full cost is used.  Initially, a hard-register's full cost is
78          the corresponding value from the hard-register's cost vector.
79          If the allocno is connected by a *copy* (see below) to
80          another allocno which has just received a hard-register, the
81          cost of the hard-register is decreased.  Before choosing a
82          hard-register for an allocno, the allocno's current costs of
83          the hard-registers are modified by the conflict hard-register
84          costs of all of the conflicting allocnos which are not
85          assigned yet.
86
87        - *Conflict hard-register costs*.  This is a vector of the same
88          size as the hard-register costs vector.  To permit an
89          unassigned allocno to get a better hard-register, IRA uses
90          this vector to calculate the final full cost of the
91          available hard-registers.  Conflict hard-register costs of an
92          unassigned allocno are also changed with a change of the
93          hard-register cost of the allocno when a copy involving the
94          allocno is processed as described above.  This is done to
95          show other unassigned allocnos that a given allocno prefers
96          some hard-registers in order to remove the move instruction
97          corresponding to the copy.
98
99      o *Cap*.  If a pseudo-register does not live in a region but
100        lives in a nested region, IRA creates a special allocno called
101        a cap in the outer region.  A region cap is also created for a
102        subregion cap.
103
104      o *Copy*.  Allocnos can be connected by copies.  Copies are used
105        to modify hard-register costs for allocnos during coloring.
106        Such modifications reflects a preference to use the same
107        hard-register for the allocnos connected by copies.  Usually
108        copies are created for move insns (in this case it results in
109        register coalescing).  But IRA also creates copies for operands
110        of an insn which should be assigned to the same hard-register
111        due to constraints in the machine description (it usually
112        results in removing a move generated in reload to satisfy
113        the constraints) and copies referring to the allocno which is
114        the output operand of an instruction and the allocno which is
115        an input operand dying in the instruction (creation of such
116        copies results in less register shuffling).  IRA *does not*
117        create copies between the same register allocnos from different
118        regions because we use another technique for propagating
119        hard-register preference on the borders of regions.
120
121    Allocnos (including caps) for the upper region in the region tree
122    *accumulate* information important for coloring from allocnos with
123    the same pseudo-register from nested regions.  This includes
124    hard-register and memory costs, conflicts with hard-registers,
125    allocno conflicts, allocno copies and more.  *Thus, attributes for
126    allocnos in a region have the same values as if the region had no
127    subregions*.  It means that attributes for allocnos in the
128    outermost region corresponding to the function have the same values
129    as though the allocation used only one region which is the entire
130    function.  It also means that we can look at IRA work as if the
131    first IRA did allocation for all function then it improved the
132    allocation for loops then their subloops and so on.
133
134    IRA major passes are:
135
136      o Building IRA internal representation which consists of the
137        following subpasses:
138
139        * First, IRA builds regions and creates allocnos (file
140          ira-build.c) and initializes most of their attributes.
141
142        * Then IRA finds a cover class for each allocno and calculates
143          its initial (non-accumulated) cost of memory and each
144          hard-register of its cover class (file ira-cost.c).
145
146        * IRA creates live ranges of each allocno, calulates register
147          pressure for each cover class in each region, sets up
148          conflict hard registers for each allocno and info about calls
149          the allocno lives through (file ira-lives.c).
150
151        * IRA removes low register pressure loops from the regions
152          mostly to speed IRA up (file ira-build.c).
153
154        * IRA propagates accumulated allocno info from lower region
155          allocnos to corresponding upper region allocnos (file
156          ira-build.c).
157
158        * IRA creates all caps (file ira-build.c).
159
160        * Having live-ranges of allocnos and their cover classes, IRA
161          creates conflicting allocnos of the same cover class for each
162          allocno.  Conflicting allocnos are stored as a bit vector or
163          array of pointers to the conflicting allocnos whatever is
164          more profitable (file ira-conflicts.c).  At this point IRA
165          creates allocno copies.
166
167      o Coloring.  Now IRA has all necessary info to start graph coloring
168        process.  It is done in each region on top-down traverse of the
169        region tree (file ira-color.c).  There are following subpasses:
170         
171        * Optional aggressive coalescing of allocnos in the region.
172
173        * Putting allocnos onto the coloring stack.  IRA uses Briggs
174          optimistic coloring which is a major improvement over
175          Chaitin's coloring.  Therefore IRA does not spill allocnos at
176          this point.  There is some freedom in the order of putting
177          allocnos on the stack which can affect the final result of
178          the allocation.  IRA uses some heuristics to improve the order.
179
180        * Popping the allocnos from the stack and assigning them hard
181          registers.  If IRA can not assign a hard register to an
182          allocno and the allocno is coalesced, IRA undoes the
183          coalescing and puts the uncoalesced allocnos onto the stack in
184          the hope that some such allocnos will get a hard register
185          separately.  If IRA fails to assign hard register or memory
186          is more profitable for it, IRA spills the allocno.  IRA
187          assigns the allocno the hard-register with minimal full
188          allocation cost which reflects the cost of usage of the
189          hard-register for the allocno and cost of usage of the
190          hard-register for allocnos conflicting with given allocno.
191
192        * After allono assigning in the region, IRA modifies the hard
193          register and memory costs for the corresponding allocnos in
194          the subregions to reflect the cost of possible loads, stores,
195          or moves on the border of the region and its subregions.
196          When default regional allocation algorithm is used
197          (-fira-algorithm=mixed), IRA just propagates the assignment
198          for allocnos if the register pressure in the region for the
199          corresponding cover class is less than number of available
200          hard registers for given cover class.
201
202      o Spill/restore code moving.  When IRA performs an allocation
203        by traversing regions in top-down order, it does not know what
204        happens below in the region tree.  Therefore, sometimes IRA
205        misses opportunities to perform a better allocation.  A simple
206        optimization tries to improve allocation in a region having
207        subregions and containing in another region.  If the
208        corresponding allocnos in the subregion are spilled, it spills
209        the region allocno if it is profitable.  The optimization
210        implements a simple iterative algorithm performing profitable
211        transformations while they are still possible.  It is fast in
212        practice, so there is no real need for a better time complexity
213        algorithm.
214
215      o Code change.  After coloring, two allocnos representing the same
216        pseudo-register outside and inside a region respectively may be
217        assigned to different locations (hard-registers or memory).  In
218        this case IRA creates and uses a new pseudo-register inside the
219        region and adds code to move allocno values on the region's
220        borders.  This is done during top-down traversal of the regions
221        (file ira-emit.c).  In some complicated cases IRA can create a
222        new allocno to move allocno values (e.g. when a swap of values
223        stored in two hard-registers is needed).  At this stage, the
224        new allocno is marked as spilled.  IRA still creates the
225        pseudo-register and the moves on the region borders even when
226        both allocnos were assigned to the same hard-register.  If the
227        reload pass spills a pseudo-register for some reason, the
228        effect will be smaller because another allocno will still be in
229        the hard-register.  In most cases, this is better then spilling
230        both allocnos.  If reload does not change the allocation
231        for the two pseudo-registers, the trivial move will be removed
232        by post-reload optimizations.  IRA does not generate moves for
233        allocnos assigned to the same hard register when the default
234        regional allocation algorithm is used and the register pressure
235        in the region for the corresponding allocno cover class is less
236        than number of available hard registers for given cover class.
237        IRA also does some optimizations to remove redundant stores and
238        to reduce code duplication on the region borders.
239
240      o Flattening internal representation.  After changing code, IRA
241        transforms its internal representation for several regions into
242        one region representation (file ira-build.c).  This process is
243        called IR flattening.  Such process is more complicated than IR
244        rebuilding would be, but is much faster.
245
246      o After IR flattening, IRA tries to assign hard registers to all
247        spilled allocnos.  This is impelemented by a simple and fast
248        priority coloring algorithm (see function
249        ira_reassign_conflict_allocnos::ira-color.c).  Here new allocnos
250        created during the code change pass can be assigned to hard
251        registers.
252
253      o At the end IRA calls the reload pass.  The reload pass
254        communicates with IRA through several functions in file
255        ira-color.c to improve its decisions in
256
257        * sharing stack slots for the spilled pseudos based on IRA info
258          about pseudo-register conflicts.
259
260        * reassigning hard-registers to all spilled pseudos at the end
261          of each reload iteration.
262
263        * choosing a better hard-register to spill based on IRA info
264          about pseudo-register live ranges and the register pressure
265          in places where the pseudo-register lives.
266
267    IRA uses a lot of data representing the target processors.  These
268    data are initilized in file ira.c.
269
270    If function has no loops (or the loops are ignored when
271    -fira-algorithm=CB is used), we have classic Chaitin-Briggs
272    coloring (only instead of separate pass of coalescing, we use hard
273    register preferencing).  In such case, IRA works much faster
274    because many things are not made (like IR flattening, the
275    spill/restore optimization, and the code change).
276
277    Literature is worth to read for better understanding the code:
278
279    o Preston Briggs, Keith D. Cooper, Linda Torczon.  Improvements to
280      Graph Coloring Register Allocation.
281
282    o David Callahan, Brian Koblenz.  Register allocation via
283      hierarchical graph coloring.
284
285    o Keith Cooper, Anshuman Dasgupta, Jason Eckhardt. Revisiting Graph
286      Coloring Register Allocation: A Study of the Chaitin-Briggs and
287      Callahan-Koblenz Algorithms.
288
289    o Guei-Yuan Lueh, Thomas Gross, and Ali-Reza Adl-Tabatabai. Global
290      Register Allocation Based on Graph Fusion.
291
292    o Vladimir Makarov. The Integrated Register Allocator for GCC.
293
294    o Vladimir Makarov.  The top-down register allocator for irregular
295      register file architectures.
296
297 */
298
299
300 #include "config.h"
301 #include "system.h"
302 #include "coretypes.h"
303 #include "tm.h"
304 #include "regs.h"
305 #include "rtl.h"
306 #include "tm_p.h"
307 #include "target.h"
308 #include "flags.h"
309 #include "obstack.h"
310 #include "bitmap.h"
311 #include "hard-reg-set.h"
312 #include "basic-block.h"
313 #include "expr.h"
314 #include "recog.h"
315 #include "params.h"
316 #include "timevar.h"
317 #include "tree-pass.h"
318 #include "output.h"
319 #include "reload.h"
320 #include "errors.h"
321 #include "integrate.h"
322 #include "df.h"
323 #include "ggc.h"
324 #include "ira-int.h"
325
326
327 /* A modified value of flag `-fira-verbose' used internally.  */
328 int internal_flag_ira_verbose;
329
330 /* Dump file of the allocator if it is not NULL.  */
331 FILE *ira_dump_file;
332
333 /* Pools for allocnos, copies, allocno live ranges.  */
334 alloc_pool allocno_pool, copy_pool, allocno_live_range_pool;
335
336 /* The number of elements in the following array.  */
337 int ira_spilled_reg_stack_slots_num;
338
339 /* The following array contains info about spilled pseudo-registers
340    stack slots used in current function so far.  */
341 struct ira_spilled_reg_stack_slot *ira_spilled_reg_stack_slots;
342
343 /* Correspondingly overall cost of the allocation, cost of the
344    allocnos assigned to hard-registers, cost of the allocnos assigned
345    to memory, cost of loads, stores and register move insns generated
346    for pseudo-register live range splitting (see ira-emit.c).  */
347 int ira_overall_cost;
348 int ira_reg_cost, ira_mem_cost;
349 int ira_load_cost, ira_store_cost, ira_shuffle_cost;
350 int ira_move_loops_num, ira_additional_jumps_num;
351
352 /* Map: hard regs X modes -> set of hard registers for storing value
353    of given mode starting with given hard register.  */
354 HARD_REG_SET ira_reg_mode_hard_regset[FIRST_PSEUDO_REGISTER][NUM_MACHINE_MODES];
355
356 /* The following two variables are array analogs of the macros
357    MEMORY_MOVE_COST and REGISTER_MOVE_COST.  */
358 short int ira_memory_move_cost[MAX_MACHINE_MODE][N_REG_CLASSES][2];
359 move_table *ira_register_move_cost[MAX_MACHINE_MODE];
360
361 /* Similar to may_move_in_cost but it is calculated in IRA instead of
362    regclass.  Another difference is that we take only available hard
363    registers into account to figure out that one register class is a
364    subset of the another one.  */
365 move_table *ira_may_move_in_cost[MAX_MACHINE_MODE];
366
367 /* Similar to may_move_out_cost but it is calculated in IRA instead of
368    regclass.  Another difference is that we take only available hard
369    registers into account to figure out that one register class is a
370    subset of the another one.  */
371 move_table *ira_may_move_out_cost[MAX_MACHINE_MODE];
372
373 /* Register class subset relation: TRUE if the first class is a subset
374    of the second one considering only hard registers available for the
375    allocation.  */
376 int ira_class_subset_p[N_REG_CLASSES][N_REG_CLASSES];
377
378 /* Temporary hard reg set used for a different calculation.  */
379 static HARD_REG_SET temp_hard_regset;
380
381 \f
382
383 /* The function sets up the map IRA_REG_MODE_HARD_REGSET.  */
384 static void
385 setup_reg_mode_hard_regset (void)
386 {
387   int i, m, hard_regno;
388
389   for (m = 0; m < NUM_MACHINE_MODES; m++)
390     for (hard_regno = 0; hard_regno < FIRST_PSEUDO_REGISTER; hard_regno++)
391       {
392         CLEAR_HARD_REG_SET (ira_reg_mode_hard_regset[hard_regno][m]);
393         for (i = hard_regno_nregs[hard_regno][m] - 1; i >= 0; i--)
394           if (hard_regno + i < FIRST_PSEUDO_REGISTER)
395             SET_HARD_REG_BIT (ira_reg_mode_hard_regset[hard_regno][m],
396                               hard_regno + i);
397       }
398 }
399
400 \f
401
402 /* Hard registers that can not be used for the register allocator for
403    all functions of the current compilation unit.  */
404 static HARD_REG_SET no_unit_alloc_regs;
405
406 /* Array of the number of hard registers of given class which are
407    available for allocation.  The order is defined by the
408    allocation order.  */
409 short ira_class_hard_regs[N_REG_CLASSES][FIRST_PSEUDO_REGISTER];
410
411 /* The number of elements of the above array for given register
412    class.  */
413 int ira_class_hard_regs_num[N_REG_CLASSES];
414
415 /* Index (in ira_class_hard_regs) for given register class and hard
416    register (in general case a hard register can belong to several
417    register classes).  The index is negative for hard registers
418    unavailable for the allocation. */
419 short ira_class_hard_reg_index[N_REG_CLASSES][FIRST_PSEUDO_REGISTER];
420
421 /* The function sets up the three arrays declared above.  */
422 static void
423 setup_class_hard_regs (void)
424 {
425   int cl, i, hard_regno, n;
426   HARD_REG_SET processed_hard_reg_set;
427
428   ira_assert (SHRT_MAX >= FIRST_PSEUDO_REGISTER);
429   /* We could call ORDER_REGS_FOR_LOCAL_ALLOC here (it is usually
430      putting hard callee-used hard registers first).  But our
431      heuristics work better.  */
432   for (cl = (int) N_REG_CLASSES - 1; cl >= 0; cl--)
433     {
434       COPY_HARD_REG_SET (temp_hard_regset, reg_class_contents[cl]);
435       AND_COMPL_HARD_REG_SET (temp_hard_regset, no_unit_alloc_regs);
436       CLEAR_HARD_REG_SET (processed_hard_reg_set);
437       for (n = 0, i = 0; i < FIRST_PSEUDO_REGISTER; i++)
438         {
439 #ifdef REG_ALLOC_ORDER
440           hard_regno = reg_alloc_order[i];
441 #else
442           hard_regno = i;
443 #endif    
444           if (TEST_HARD_REG_BIT (processed_hard_reg_set, hard_regno))
445             continue;
446           SET_HARD_REG_BIT (processed_hard_reg_set, hard_regno);
447           if (! TEST_HARD_REG_BIT (temp_hard_regset, hard_regno))
448             ira_class_hard_reg_index[cl][hard_regno] = -1;
449           else
450             {
451               ira_class_hard_reg_index[cl][hard_regno] = n;
452               ira_class_hard_regs[cl][n++] = hard_regno;
453             }
454         }
455       ira_class_hard_regs_num[cl] = n;
456     }
457 }
458
459 /* Number of given class hard registers available for the register
460    allocation for given classes.  */
461 int ira_available_class_regs[N_REG_CLASSES];
462
463 /* Set up IRA_AVAILABLE_CLASS_REGS.  */
464 static void
465 setup_available_class_regs (void)
466 {
467   int i, j;
468
469   memset (ira_available_class_regs, 0, sizeof (ira_available_class_regs));
470   for (i = 0; i < N_REG_CLASSES; i++)
471     {
472       COPY_HARD_REG_SET (temp_hard_regset, reg_class_contents[i]);
473       AND_COMPL_HARD_REG_SET (temp_hard_regset, no_unit_alloc_regs);
474       for (j = 0; j < FIRST_PSEUDO_REGISTER; j++)
475         if (TEST_HARD_REG_BIT (temp_hard_regset, j))
476           ira_available_class_regs[i]++;
477     }
478 }
479
480 /* Set up global variables defining info about hard registers for the
481    allocation.  These depend on USE_HARD_FRAME_P whose TRUE value means
482    that we can use the hard frame pointer for the allocation.  */
483 static void
484 setup_alloc_regs (bool use_hard_frame_p)
485 {
486   COPY_HARD_REG_SET (no_unit_alloc_regs, fixed_reg_set);
487   if (! use_hard_frame_p)
488     SET_HARD_REG_BIT (no_unit_alloc_regs, HARD_FRAME_POINTER_REGNUM);
489   setup_class_hard_regs ();
490   setup_available_class_regs ();
491 }
492
493 \f
494
495 /* Set up IRA_MEMORY_MOVE_COST, IRA_REGISTER_MOVE_COST.  */
496 static void
497 setup_class_subset_and_memory_move_costs (void)
498 {
499   int cl, cl2;
500   enum machine_mode mode;
501   HARD_REG_SET temp_hard_regset2;
502
503   for (mode = 0; mode < MAX_MACHINE_MODE; mode++)
504     ira_memory_move_cost[mode][NO_REGS][0]
505       = ira_memory_move_cost[mode][NO_REGS][1] = SHRT_MAX;
506   for (cl = (int) N_REG_CLASSES - 1; cl >= 0; cl--)
507     {
508       if (cl != (int) NO_REGS)
509         for (mode = 0; mode < MAX_MACHINE_MODE; mode++)
510           {
511             ira_memory_move_cost[mode][cl][0] = MEMORY_MOVE_COST (mode, cl, 0);
512             ira_memory_move_cost[mode][cl][1] = MEMORY_MOVE_COST (mode, cl, 1);
513             /* Costs for NO_REGS are used in cost calculation on the
514                1st pass when the preferred register classes are not
515                known yet.  In this case we take the best scenario.  */
516             if (ira_memory_move_cost[mode][NO_REGS][0]
517                 > ira_memory_move_cost[mode][cl][0])
518               ira_memory_move_cost[mode][NO_REGS][0]
519                 = ira_memory_move_cost[mode][cl][0];
520             if (ira_memory_move_cost[mode][NO_REGS][1]
521                 > ira_memory_move_cost[mode][cl][1])
522               ira_memory_move_cost[mode][NO_REGS][1]
523                 = ira_memory_move_cost[mode][cl][1];
524           }
525       for (cl2 = (int) N_REG_CLASSES - 1; cl2 >= 0; cl2--)
526         {
527           COPY_HARD_REG_SET (temp_hard_regset, reg_class_contents[cl]);
528           AND_COMPL_HARD_REG_SET (temp_hard_regset, no_unit_alloc_regs);
529           COPY_HARD_REG_SET (temp_hard_regset2, reg_class_contents[cl2]);
530           AND_COMPL_HARD_REG_SET (temp_hard_regset2, no_unit_alloc_regs);
531           ira_class_subset_p[cl][cl2]
532             = hard_reg_set_subset_p (temp_hard_regset, temp_hard_regset2);
533         }
534     }
535 }
536
537 \f
538
539 /* Define the following macro if allocation through malloc if
540    preferable.  */
541 #define IRA_NO_OBSTACK
542
543 #ifndef IRA_NO_OBSTACK
544 /* Obstack used for storing all dynamic data (except bitmaps) of the
545    IRA.  */
546 static struct obstack ira_obstack;
547 #endif
548
549 /* Obstack used for storing all bitmaps of the IRA.  */
550 static struct bitmap_obstack ira_bitmap_obstack;
551
552 /* Allocate memory of size LEN for IRA data.  */
553 void *
554 ira_allocate (size_t len)
555 {
556   void *res;
557
558 #ifndef IRA_NO_OBSTACK
559   res = obstack_alloc (&ira_obstack, len);
560 #else
561   res = xmalloc (len);
562 #endif
563   return res;
564 }
565
566 /* Reallocate memory PTR of size LEN for IRA data.  */
567 void *
568 ira_reallocate (void *ptr, size_t len)
569 {
570   void *res;
571
572 #ifndef IRA_NO_OBSTACK
573   res = obstack_alloc (&ira_obstack, len);
574 #else
575   res = xrealloc (ptr, len);
576 #endif
577   return res;
578 }
579
580 /* Free memory ADDR allocated for IRA data.  */
581 void
582 ira_free (void *addr ATTRIBUTE_UNUSED)
583 {
584 #ifndef IRA_NO_OBSTACK
585   /* do nothing */
586 #else
587   free (addr);
588 #endif
589 }
590
591
592 /* Allocate and returns bitmap for IRA.  */
593 bitmap
594 ira_allocate_bitmap (void)
595 {
596   return BITMAP_ALLOC (&ira_bitmap_obstack);
597 }
598
599 /* Free bitmap B allocated for IRA.  */
600 void
601 ira_free_bitmap (bitmap b ATTRIBUTE_UNUSED)
602 {
603   /* do nothing */
604 }
605
606 \f
607
608 /* Output information about allocation of all allocnos (except for
609    caps) into file F.  */
610 void
611 ira_print_disposition (FILE *f)
612 {
613   int i, n, max_regno;
614   ira_allocno_t a;
615   basic_block bb;
616
617   fprintf (f, "Disposition:");
618   max_regno = max_reg_num ();
619   for (n = 0, i = FIRST_PSEUDO_REGISTER; i < max_regno; i++)
620     for (a = ira_regno_allocno_map[i];
621          a != NULL;
622          a = ALLOCNO_NEXT_REGNO_ALLOCNO (a))
623       {
624         if (n % 4 == 0)
625           fprintf (f, "\n");
626         n++;
627         fprintf (f, " %4d:r%-4d", ALLOCNO_NUM (a), ALLOCNO_REGNO (a));
628         if ((bb = ALLOCNO_LOOP_TREE_NODE (a)->bb) != NULL)
629           fprintf (f, "b%-3d", bb->index);
630         else
631           fprintf (f, "l%-3d", ALLOCNO_LOOP_TREE_NODE (a)->loop->num);
632         if (ALLOCNO_HARD_REGNO (a) >= 0)
633           fprintf (f, " %3d", ALLOCNO_HARD_REGNO (a));
634         else
635           fprintf (f, " mem");
636       }
637   fprintf (f, "\n");
638 }
639
640 /* Outputs information about allocation of all allocnos into
641    stderr.  */
642 void
643 ira_debug_disposition (void)
644 {
645   ira_print_disposition (stderr);
646 }
647
648 \f
649
650 /* For each reg class, table listing all the classes contained in it
651    (excluding the class itself.  Non-allocatable registers are
652    excluded from the consideration).  */
653 static enum reg_class alloc_reg_class_subclasses[N_REG_CLASSES][N_REG_CLASSES];
654
655 /* Initialize the table of subclasses of each reg class.  */
656 static void
657 setup_reg_subclasses (void)
658 {
659   int i, j;
660   HARD_REG_SET temp_hard_regset2;
661
662   for (i = 0; i < N_REG_CLASSES; i++)
663     for (j = 0; j < N_REG_CLASSES; j++)
664       alloc_reg_class_subclasses[i][j] = LIM_REG_CLASSES;
665
666   for (i = 0; i < N_REG_CLASSES; i++)
667     {
668       if (i == (int) NO_REGS)
669         continue;
670
671       COPY_HARD_REG_SET (temp_hard_regset, reg_class_contents[i]);
672       AND_COMPL_HARD_REG_SET (temp_hard_regset, no_unit_alloc_regs);
673       if (hard_reg_set_empty_p (temp_hard_regset))
674         continue;
675       for (j = 0; j < N_REG_CLASSES; j++)
676         if (i != j)
677           {
678             enum reg_class *p;
679
680             COPY_HARD_REG_SET (temp_hard_regset2, reg_class_contents[j]);
681             AND_COMPL_HARD_REG_SET (temp_hard_regset2, no_unit_alloc_regs);
682             if (! hard_reg_set_subset_p (temp_hard_regset,
683                                          temp_hard_regset2))
684               continue;
685             p = &alloc_reg_class_subclasses[j][0];
686             while (*p != LIM_REG_CLASSES) p++;
687             *p = (enum reg_class) i;
688           }
689     }
690 }
691
692 \f
693
694 /* Number of cover classes.  Cover classes is non-intersected register
695    classes containing all hard-registers available for the
696    allocation.  */
697 int ira_reg_class_cover_size;
698
699 /* The array containing cover classes (see also comments for macro
700    IRA_COVER_CLASSES).  Only first IRA_REG_CLASS_COVER_SIZE elements are
701    used for this.  */
702 enum reg_class ira_reg_class_cover[N_REG_CLASSES];
703
704 /* The number of elements in the subsequent array.  */
705 int ira_important_classes_num;
706
707 /* The array containing non-empty classes (including non-empty cover
708    classes) which are subclasses of cover classes.  Such classes is
709    important for calculation of the hard register usage costs.  */
710 enum reg_class ira_important_classes[N_REG_CLASSES];
711
712 /* The array containing indexes of important classes in the previous
713    array.  The array elements are defined only for important
714    classes.  */
715 int ira_important_class_nums[N_REG_CLASSES];
716
717 /* Check IRA_COVER_CLASSES and sets the four global variables defined
718    above.  */
719 static void
720 setup_cover_and_important_classes (void)
721 {
722   int i, j;
723   enum reg_class cl;
724   const enum reg_class *classes;
725   HARD_REG_SET temp_hard_regset2;
726
727   classes = targetm.ira_cover_classes ();
728   ira_reg_class_cover_size = 0;
729   for (i = 0; (cl = classes[i]) != LIM_REG_CLASSES; i++)
730     {
731       for (j = 0; j < i; j++)
732         if (reg_classes_intersect_p (cl, classes[j]))
733           gcc_unreachable ();
734       COPY_HARD_REG_SET (temp_hard_regset, reg_class_contents[cl]);
735       AND_COMPL_HARD_REG_SET (temp_hard_regset, no_unit_alloc_regs);
736       if (! hard_reg_set_empty_p (temp_hard_regset))
737         ira_reg_class_cover[ira_reg_class_cover_size++] = cl;
738     }
739   ira_important_classes_num = 0;
740   for (cl = 0; cl < N_REG_CLASSES; cl++)
741     {
742       COPY_HARD_REG_SET (temp_hard_regset, reg_class_contents[cl]);
743       AND_COMPL_HARD_REG_SET (temp_hard_regset, no_unit_alloc_regs);
744       if (! hard_reg_set_empty_p (temp_hard_regset))
745         for (j = 0; j < ira_reg_class_cover_size; j++)
746           {
747             COPY_HARD_REG_SET (temp_hard_regset, reg_class_contents[cl]);
748             AND_COMPL_HARD_REG_SET (temp_hard_regset, no_unit_alloc_regs);
749             COPY_HARD_REG_SET (temp_hard_regset2,
750                                reg_class_contents[ira_reg_class_cover[j]]);
751             AND_COMPL_HARD_REG_SET (temp_hard_regset2, no_unit_alloc_regs);
752             if (cl == ira_reg_class_cover[j]
753                 || (hard_reg_set_subset_p (temp_hard_regset, temp_hard_regset2)
754                     && ! hard_reg_set_equal_p (temp_hard_regset,
755                                                temp_hard_regset2)))
756               {
757                 ira_important_class_nums[cl] = ira_important_classes_num;
758                 ira_important_classes[ira_important_classes_num++] = cl;
759               }
760           }
761     }
762 }
763
764 /* Map of all register classes to corresponding cover class containing
765    the given class.  If given class is not a subset of a cover class,
766    we translate it into the cheapest cover class.  */
767 enum reg_class ira_class_translate[N_REG_CLASSES];
768
769 /* Set up array IRA_CLASS_TRANSLATE.  */
770 static void
771 setup_class_translate (void)
772 {
773   enum reg_class cl, cover_class, best_class, *cl_ptr;
774   enum machine_mode mode;
775   int i, cost, min_cost, best_cost;
776
777   for (cl = 0; cl < N_REG_CLASSES; cl++)
778     ira_class_translate[cl] = NO_REGS;
779   for (i = 0; i < ira_reg_class_cover_size; i++)
780     {
781       cover_class = ira_reg_class_cover[i];
782       for (cl_ptr = &alloc_reg_class_subclasses[cover_class][0];
783            (cl = *cl_ptr) != LIM_REG_CLASSES;
784            cl_ptr++)
785         {
786           if (ira_class_translate[cl] == NO_REGS)
787             ira_class_translate[cl] = cover_class;
788 #ifdef ENABLE_IRA_CHECKING
789           else
790             {
791               COPY_HARD_REG_SET (temp_hard_regset, reg_class_contents[cl]);
792               AND_COMPL_HARD_REG_SET (temp_hard_regset, no_unit_alloc_regs);
793               if (! hard_reg_set_empty_p (temp_hard_regset))
794                 gcc_unreachable ();
795             }
796 #endif
797         }
798       ira_class_translate[cover_class] = cover_class;
799     }
800   /* For classes which are not fully covered by a cover class (in
801      other words covered by more one cover class), use the cheapest
802      cover class.  */
803   for (cl = 0; cl < N_REG_CLASSES; cl++)
804     {
805       if (cl == NO_REGS || ira_class_translate[cl] != NO_REGS)
806         continue;
807       best_class = NO_REGS;
808       best_cost = INT_MAX;
809       for (i = 0; i < ira_reg_class_cover_size; i++)
810         {
811           cover_class = ira_reg_class_cover[i];
812           COPY_HARD_REG_SET (temp_hard_regset,
813                              reg_class_contents[cover_class]);
814           AND_HARD_REG_SET (temp_hard_regset, reg_class_contents[cl]);
815           AND_COMPL_HARD_REG_SET (temp_hard_regset, no_unit_alloc_regs);
816           if (! hard_reg_set_empty_p (temp_hard_regset))
817             {
818               min_cost = INT_MAX;
819               for (mode = 0; mode < MAX_MACHINE_MODE; mode++)
820                 {
821                   cost = (ira_memory_move_cost[mode][cl][0]
822                           + ira_memory_move_cost[mode][cl][1]);
823                   if (min_cost > cost)
824                     min_cost = cost;
825                 }
826               if (best_class == NO_REGS || best_cost > min_cost)
827                 {
828                   best_class = cover_class;
829                   best_cost = min_cost;
830                 }
831             }
832         }
833       ira_class_translate[cl] = best_class;
834     }
835 }
836
837 /* The biggest important reg_class inside of intersection of the two
838    reg_classes (that is calculated taking only hard registers
839    available for allocation into account).  If the both reg_classes
840    contain no hard registers available for allocation, the value is
841    calculated by taking all hard-registers including fixed ones into
842    account.  */
843 enum reg_class ira_reg_class_intersect[N_REG_CLASSES][N_REG_CLASSES];
844
845 /* The biggest important reg_class inside of union of the two
846    reg_classes (that is calculated taking only hard registers
847    available for allocation into account).  If the both reg_classes
848    contain no hard registers available for allocation, the value is
849    calculated by taking all hard-registers including fixed ones into
850    account.  In other words, the value is the corresponding
851    reg_class_subunion value.  */
852 enum reg_class ira_reg_class_union[N_REG_CLASSES][N_REG_CLASSES];
853
854 /* Set up IRA_REG_CLASS_INTERSECT and IRA_REG_CLASS_UNION.  */
855 static void
856 setup_reg_class_intersect_union (void)
857 {
858   int i, cl1, cl2, cl3;
859   HARD_REG_SET intersection_set, union_set, temp_set2;
860
861   for (cl1 = 0; cl1 < N_REG_CLASSES; cl1++)
862     {
863       for (cl2 = 0; cl2 < N_REG_CLASSES; cl2++)
864         {
865           ira_reg_class_intersect[cl1][cl2] = NO_REGS;
866           COPY_HARD_REG_SET (temp_hard_regset, reg_class_contents[cl1]);
867           AND_COMPL_HARD_REG_SET (temp_hard_regset, no_unit_alloc_regs);
868           COPY_HARD_REG_SET (temp_set2, reg_class_contents[cl2]);
869           AND_COMPL_HARD_REG_SET (temp_set2, no_unit_alloc_regs);
870           if (hard_reg_set_empty_p (temp_hard_regset)
871               && hard_reg_set_empty_p (temp_set2))
872             {
873               for (i = 0;; i++)
874                 {
875                   cl3 = reg_class_subclasses[cl1][i];
876                   if (cl3 == LIM_REG_CLASSES)
877                     break;
878                   if (reg_class_subset_p (ira_reg_class_intersect[cl1][cl2],
879                                           cl3))
880                     ira_reg_class_intersect[cl1][cl2] = cl3;
881                 }
882               ira_reg_class_union[cl1][cl2] = reg_class_subunion[cl1][cl2];
883               continue;
884             }
885           ira_reg_class_union[cl1][cl2] = NO_REGS;
886           COPY_HARD_REG_SET (intersection_set, reg_class_contents[cl1]);
887           AND_HARD_REG_SET (intersection_set, reg_class_contents[cl2]);
888           AND_COMPL_HARD_REG_SET (intersection_set, no_unit_alloc_regs);
889           COPY_HARD_REG_SET (union_set, reg_class_contents[cl1]);
890           IOR_HARD_REG_SET (union_set, reg_class_contents[cl2]);
891           AND_COMPL_HARD_REG_SET (union_set, no_unit_alloc_regs);
892           for (i = 0; i < ira_important_classes_num; i++)
893             {
894               cl3 = ira_important_classes[i];
895               COPY_HARD_REG_SET (temp_hard_regset, reg_class_contents[cl3]);
896               AND_COMPL_HARD_REG_SET (temp_hard_regset, no_unit_alloc_regs);
897               if (hard_reg_set_subset_p (temp_hard_regset, intersection_set))
898                 {
899                   COPY_HARD_REG_SET
900                     (temp_set2,
901                      reg_class_contents[(int)
902                                         ira_reg_class_intersect[cl1][cl2]]);
903                   AND_COMPL_HARD_REG_SET (temp_set2, no_unit_alloc_regs);
904                   if (! hard_reg_set_subset_p (temp_hard_regset, temp_set2)
905                       /* Ignore unavailable hard registers and prefer
906                          smallest class for debugging purposes.  */
907                       || (hard_reg_set_equal_p (temp_hard_regset, temp_set2)
908                           && hard_reg_set_subset_p
909                              (reg_class_contents[cl3],
910                               reg_class_contents
911                               [(int) ira_reg_class_intersect[cl1][cl2]])))
912                     ira_reg_class_intersect[cl1][cl2] = (enum reg_class) cl3;
913                 }
914               if (hard_reg_set_subset_p (temp_hard_regset, union_set))
915                 {
916                   COPY_HARD_REG_SET
917                     (temp_set2,
918                      reg_class_contents[(int) ira_reg_class_union[cl1][cl2]]);
919                   AND_COMPL_HARD_REG_SET (temp_set2, no_unit_alloc_regs);
920                   if (ira_reg_class_union[cl1][cl2] == NO_REGS
921                       || (hard_reg_set_subset_p (temp_set2, temp_hard_regset)
922                       
923                           && (! hard_reg_set_equal_p (temp_set2,
924                                                       temp_hard_regset)
925                               /* Ignore unavailable hard registers and
926                                  prefer smallest class for debugging
927                                  purposes.  */
928                               || hard_reg_set_subset_p
929                                  (reg_class_contents[cl3],
930                                   reg_class_contents
931                                   [(int) ira_reg_class_union[cl1][cl2]]))))
932                     ira_reg_class_union[cl1][cl2] = (enum reg_class) cl3;
933                 }
934             }
935         }
936     }
937 }
938
939 /* Output all cover classes and the translation map into file F.  */
940 static void
941 print_class_cover (FILE *f)
942 {
943   static const char *const reg_class_names[] = REG_CLASS_NAMES;
944   int i;
945
946   fprintf (f, "Class cover:\n");
947   for (i = 0; i < ira_reg_class_cover_size; i++)
948     fprintf (f, " %s", reg_class_names[ira_reg_class_cover[i]]);
949   fprintf (f, "\nClass translation:\n");
950   for (i = 0; i < N_REG_CLASSES; i++)
951     fprintf (f, " %s -> %s\n", reg_class_names[i],
952              reg_class_names[ira_class_translate[i]]);
953 }
954
955 /* Output all cover classes and the translation map into
956    stderr.  */
957 void
958 ira_debug_class_cover (void)
959 {
960   print_class_cover (stderr);
961 }
962
963 /* Set up different arrays concerning class subsets, cover and
964    important classes.  */
965 static void
966 find_reg_class_closure (void)
967 {
968   setup_reg_subclasses ();
969   if (targetm.ira_cover_classes)
970     {
971       setup_cover_and_important_classes ();
972       setup_class_translate ();
973       setup_reg_class_intersect_union ();
974     }
975 }
976
977 \f
978
979 /* Map: register class x machine mode -> number of hard registers of
980    given class needed to store value of given mode.  If the number is
981    different, the size will be negative.  */
982 int ira_reg_class_nregs[N_REG_CLASSES][MAX_MACHINE_MODE];
983
984 /* Maximal value of the previous array elements.  */
985 int ira_max_nregs;
986
987 /* Form IRA_REG_CLASS_NREGS map.  */
988 static void
989 setup_reg_class_nregs (void)
990 {
991   int m;
992   enum reg_class cl;
993
994   ira_max_nregs = -1;
995   for (cl = 0; cl < N_REG_CLASSES; cl++)
996     for (m = 0; m < MAX_MACHINE_MODE; m++)
997       {
998         ira_reg_class_nregs[cl][m] = CLASS_MAX_NREGS (cl, m);
999         if (ira_max_nregs < ira_reg_class_nregs[cl][m])
1000           ira_max_nregs = ira_reg_class_nregs[cl][m];
1001       }
1002 }
1003
1004 \f
1005
1006 /* Array whose values are hard regset of hard registers available for
1007    the allocation of given register class whose HARD_REGNO_MODE_OK
1008    values for given mode are zero.  */
1009 HARD_REG_SET prohibited_class_mode_regs[N_REG_CLASSES][NUM_MACHINE_MODES];
1010
1011 /* Set up PROHIBITED_CLASS_MODE_REGS.  */
1012 static void
1013 setup_prohibited_class_mode_regs (void)
1014 {
1015   int i, j, k, hard_regno;
1016   enum reg_class cl;
1017
1018   for (i = 0; i < ira_reg_class_cover_size; i++)
1019     {
1020       cl = ira_reg_class_cover[i];
1021       for (j = 0; j < NUM_MACHINE_MODES; j++)
1022         {
1023           CLEAR_HARD_REG_SET (prohibited_class_mode_regs[cl][j]);
1024           for (k = ira_class_hard_regs_num[cl] - 1; k >= 0; k--)
1025             {
1026               hard_regno = ira_class_hard_regs[cl][k];
1027               if (! HARD_REGNO_MODE_OK (hard_regno, j))
1028                 SET_HARD_REG_BIT (prohibited_class_mode_regs[cl][j],
1029                                   hard_regno);
1030             }
1031         }
1032     }
1033 }
1034
1035 \f
1036
1037 /* Allocate and initialize IRA_REGISTER_MOVE_COST,
1038    IRA_MAY_MOVE_IN_COST, and IRA_MAY_MOVE_OUT_COST for MODE if it is
1039    not done yet.  */
1040 void
1041 ira_init_register_move_cost (enum machine_mode mode)
1042 {
1043   int cl1, cl2;
1044
1045   ira_assert (ira_register_move_cost[mode] == NULL
1046               && ira_may_move_in_cost[mode] == NULL
1047               && ira_may_move_out_cost[mode] == NULL);
1048   if (move_cost[mode] == NULL)
1049     init_move_cost (mode);
1050   ira_register_move_cost[mode] = move_cost[mode];
1051   /* Don't use ira_allocate because the tables exist out of scope of a
1052      IRA call.  */
1053   ira_may_move_in_cost[mode]
1054     = (move_table *) xmalloc (sizeof (move_table) * N_REG_CLASSES);
1055   memcpy (ira_may_move_in_cost[mode], may_move_in_cost[mode],
1056           sizeof (move_table) * N_REG_CLASSES);
1057   ira_may_move_out_cost[mode]
1058     = (move_table *) xmalloc (sizeof (move_table) * N_REG_CLASSES);
1059   memcpy (ira_may_move_out_cost[mode], may_move_out_cost[mode],
1060           sizeof (move_table) * N_REG_CLASSES);
1061   for (cl1 = 0; cl1 < N_REG_CLASSES; cl1++)
1062     {
1063       for (cl2 = 0; cl2 < N_REG_CLASSES; cl2++)
1064         {
1065           if (ira_class_subset_p[cl1][cl2])
1066             ira_may_move_in_cost[mode][cl1][cl2] = 0;
1067           if (ira_class_subset_p[cl2][cl1])
1068             ira_may_move_out_cost[mode][cl1][cl2] = 0;
1069         }
1070     }
1071 }
1072
1073 \f
1074
1075 /* This is called once during compiler work.  It sets up
1076    different arrays whose values don't depend on the compiled
1077    function.  */
1078 void
1079 ira_init_once (void)
1080 {
1081   enum machine_mode mode;
1082
1083   for (mode = 0; mode < MAX_MACHINE_MODE; mode++)
1084     {
1085       ira_register_move_cost[mode] = NULL;
1086       ira_may_move_in_cost[mode] = NULL;
1087       ira_may_move_out_cost[mode] = NULL;
1088     }
1089   ira_init_costs_once ();
1090 }
1091
1092 /* Free ira_register_move_cost, ira_may_move_in_cost, and
1093    ira_may_move_out_cost for each mode.  */
1094 static void
1095 free_register_move_costs (void)
1096 {
1097   enum machine_mode mode;
1098
1099   for (mode = 0; mode < MAX_MACHINE_MODE; mode++)
1100     {
1101       if (ira_may_move_in_cost[mode] != NULL)
1102         free (ira_may_move_in_cost[mode]);
1103       if (ira_may_move_out_cost[mode] != NULL)
1104         free (ira_may_move_out_cost[mode]);
1105       ira_register_move_cost[mode] = NULL;
1106       ira_may_move_in_cost[mode] = NULL;
1107       ira_may_move_out_cost[mode] = NULL;
1108     }
1109 }
1110
1111 /* This is called every time when register related information is
1112    changed.  */
1113 void
1114 ira_init (void)
1115 {
1116   free_register_move_costs ();
1117   setup_reg_mode_hard_regset ();
1118   setup_alloc_regs (flag_omit_frame_pointer != 0);
1119   setup_class_subset_and_memory_move_costs ();
1120   find_reg_class_closure ();
1121   setup_reg_class_nregs ();
1122   setup_prohibited_class_mode_regs ();
1123   ira_init_costs ();
1124 }
1125
1126 /* Function called once at the end of compiler work.  */
1127 void
1128 ira_finish_once (void)
1129 {
1130   ira_finish_costs_once ();
1131   free_register_move_costs ();
1132 }
1133
1134 \f
1135
1136 /* Array whose values are hard regset of hard registers for which
1137    move of the hard register in given mode into itself is
1138    prohibited.  */
1139 HARD_REG_SET ira_prohibited_mode_move_regs[NUM_MACHINE_MODES];
1140
1141 /* Flag of that the above array has been initialized.  */
1142 static bool ira_prohibited_mode_move_regs_initialized_p = false;
1143
1144 /* Set up IRA_PROHIBITED_MODE_MOVE_REGS.  */
1145 static void
1146 setup_prohibited_mode_move_regs (void)
1147 {
1148   int i, j;
1149   rtx test_reg1, test_reg2, move_pat, move_insn;
1150
1151   if (ira_prohibited_mode_move_regs_initialized_p)
1152     return;
1153   ira_prohibited_mode_move_regs_initialized_p = true;
1154   test_reg1 = gen_rtx_REG (VOIDmode, 0);
1155   test_reg2 = gen_rtx_REG (VOIDmode, 0);
1156   move_pat = gen_rtx_SET (VOIDmode, test_reg1, test_reg2);
1157   move_insn = gen_rtx_INSN (VOIDmode, 0, 0, 0, 0, 0, move_pat, -1, 0);
1158   for (i = 0; i < NUM_MACHINE_MODES; i++)
1159     {
1160       SET_HARD_REG_SET (ira_prohibited_mode_move_regs[i]);
1161       for (j = 0; j < FIRST_PSEUDO_REGISTER; j++)
1162         {
1163           if (! HARD_REGNO_MODE_OK (j, i))
1164             continue;
1165           SET_REGNO (test_reg1, j);
1166           PUT_MODE (test_reg1, i);
1167           SET_REGNO (test_reg2, j);
1168           PUT_MODE (test_reg2, i);
1169           INSN_CODE (move_insn) = -1;
1170           recog_memoized (move_insn);
1171           if (INSN_CODE (move_insn) < 0)
1172             continue;
1173           extract_insn (move_insn);
1174           if (! constrain_operands (1))
1175             continue;
1176           CLEAR_HARD_REG_BIT (ira_prohibited_mode_move_regs[i], j);
1177         }
1178     }
1179 }
1180
1181 \f
1182
1183 /* Function specific hard registers that can not be used for the
1184    register allocation.  */
1185 HARD_REG_SET ira_no_alloc_regs;
1186
1187 /* Return TRUE if *LOC contains an asm.  */
1188 static int
1189 insn_contains_asm_1 (rtx *loc, void *data ATTRIBUTE_UNUSED)
1190 {
1191   if ( !*loc)
1192     return FALSE;
1193   if (GET_CODE (*loc) == ASM_OPERANDS)
1194     return TRUE;
1195   return FALSE;
1196 }
1197
1198
1199 /* Return TRUE if INSN contains an ASM.  */
1200 static bool
1201 insn_contains_asm (rtx insn)
1202 {
1203   return for_each_rtx (&insn, insn_contains_asm_1, NULL);
1204 }
1205
1206 /* Set up regs_asm_clobbered.  */
1207 static void
1208 compute_regs_asm_clobbered (char *regs_asm_clobbered)
1209 {
1210   basic_block bb;
1211
1212   memset (regs_asm_clobbered, 0, sizeof (char) * FIRST_PSEUDO_REGISTER);
1213   
1214   FOR_EACH_BB (bb)
1215     {
1216       rtx insn;
1217       FOR_BB_INSNS_REVERSE (bb, insn)
1218         {
1219           df_ref *def_rec;
1220
1221           if (insn_contains_asm (insn))
1222             for (def_rec = DF_INSN_DEFS (insn); *def_rec; def_rec++)
1223               {
1224                 df_ref def = *def_rec;
1225                 unsigned int dregno = DF_REF_REGNO (def);
1226                 if (dregno < FIRST_PSEUDO_REGISTER)
1227                   {
1228                     unsigned int i;
1229                     enum machine_mode mode = GET_MODE (DF_REF_REAL_REG (def));
1230                     unsigned int end = dregno 
1231                       + hard_regno_nregs[dregno][mode] - 1;
1232
1233                     for (i = dregno; i <= end; ++i)
1234                       regs_asm_clobbered[i] = 1;
1235                   }
1236               }
1237         }
1238     }
1239 }
1240
1241
1242 /* Set up ELIMINABLE_REGSET, IRA_NO_ALLOC_REGS, and REGS_EVER_LIVE.  */
1243 static void
1244 setup_eliminable_regset (void)
1245 {
1246   /* Like regs_ever_live, but 1 if a reg is set or clobbered from an
1247      asm.  Unlike regs_ever_live, elements of this array corresponding
1248      to eliminable regs (like the frame pointer) are set if an asm
1249      sets them.  */
1250   char *regs_asm_clobbered
1251     = (char *) alloca (FIRST_PSEUDO_REGISTER * sizeof (char));
1252 #ifdef ELIMINABLE_REGS
1253   int i;
1254   static const struct {const int from, to; } eliminables[] = ELIMINABLE_REGS;
1255 #endif
1256   /* FIXME: If EXIT_IGNORE_STACK is set, we will not save and restore
1257      sp for alloca.  So we can't eliminate the frame pointer in that
1258      case.  At some point, we should improve this by emitting the
1259      sp-adjusting insns for this case.  */
1260   int need_fp
1261     = (! flag_omit_frame_pointer
1262        || (cfun->calls_alloca && EXIT_IGNORE_STACK)
1263        || crtl->accesses_prior_frames
1264        || crtl->stack_realign_needed
1265        || FRAME_POINTER_REQUIRED);
1266
1267   frame_pointer_needed = need_fp;
1268
1269   COPY_HARD_REG_SET (ira_no_alloc_regs, no_unit_alloc_regs);
1270   CLEAR_HARD_REG_SET (eliminable_regset);
1271
1272   compute_regs_asm_clobbered (regs_asm_clobbered);
1273   /* Build the regset of all eliminable registers and show we can't
1274      use those that we already know won't be eliminated.  */
1275 #ifdef ELIMINABLE_REGS
1276   for (i = 0; i < (int) ARRAY_SIZE (eliminables); i++)
1277     {
1278       bool cannot_elim
1279         = (! CAN_ELIMINATE (eliminables[i].from, eliminables[i].to)
1280            || (eliminables[i].to == STACK_POINTER_REGNUM && need_fp));
1281
1282       if (! regs_asm_clobbered[eliminables[i].from])
1283         {
1284             SET_HARD_REG_BIT (eliminable_regset, eliminables[i].from);
1285
1286             if (cannot_elim)
1287               SET_HARD_REG_BIT (ira_no_alloc_regs, eliminables[i].from);
1288         }
1289       else if (cannot_elim)
1290         error ("%s cannot be used in asm here",
1291                reg_names[eliminables[i].from]);
1292       else
1293         df_set_regs_ever_live (eliminables[i].from, true);
1294     }
1295 #if FRAME_POINTER_REGNUM != HARD_FRAME_POINTER_REGNUM
1296   if (! regs_asm_clobbered[HARD_FRAME_POINTER_REGNUM])
1297     {
1298       SET_HARD_REG_BIT (eliminable_regset, HARD_FRAME_POINTER_REGNUM);
1299       if (need_fp)
1300         SET_HARD_REG_BIT (ira_no_alloc_regs, HARD_FRAME_POINTER_REGNUM);
1301     }
1302   else if (need_fp)
1303     error ("%s cannot be used in asm here",
1304            reg_names[HARD_FRAME_POINTER_REGNUM]);
1305   else
1306     df_set_regs_ever_live (HARD_FRAME_POINTER_REGNUM, true);
1307 #endif
1308
1309 #else
1310   if (! regs_asm_clobbered[FRAME_POINTER_REGNUM])
1311     {
1312       SET_HARD_REG_BIT (eliminable_regset, FRAME_POINTER_REGNUM);
1313       if (need_fp)
1314         SET_HARD_REG_BIT (ira_no_alloc_regs, FRAME_POINTER_REGNUM);
1315     }
1316   else if (need_fp)
1317     error ("%s cannot be used in asm here", reg_names[FRAME_POINTER_REGNUM]);
1318   else
1319     df_set_regs_ever_live (FRAME_POINTER_REGNUM, true);
1320 #endif
1321 }
1322
1323 \f
1324
1325 /* The length of the following two arrays.  */
1326 int ira_reg_equiv_len;
1327
1328 /* The element value is TRUE if the corresponding regno value is
1329    invariant.  */
1330 bool *ira_reg_equiv_invariant_p;
1331
1332 /* The element value is equiv constant of given pseudo-register or
1333    NULL_RTX.  */
1334 rtx *ira_reg_equiv_const;
1335
1336 /* Set up the two arrays declared above.  */
1337 static void
1338 find_reg_equiv_invariant_const (void)
1339 {
1340   int i;
1341   bool invariant_p;
1342   rtx list, insn, note, constant, x;
1343
1344   for (i = FIRST_PSEUDO_REGISTER; i < reg_equiv_init_size; i++)
1345     {
1346       constant = NULL_RTX;
1347       invariant_p = false;
1348       for (list = reg_equiv_init[i]; list != NULL_RTX; list = XEXP (list, 1))
1349         {
1350           insn = XEXP (list, 0);
1351           note = find_reg_note (insn, REG_EQUIV, NULL_RTX);
1352           
1353           if (note == NULL_RTX)
1354             continue;
1355
1356           x = XEXP (note, 0);
1357           
1358           if (! function_invariant_p (x)
1359               || ! flag_pic
1360               /* A function invariant is often CONSTANT_P but may
1361                  include a register.  We promise to only pass CONSTANT_P
1362                  objects to LEGITIMATE_PIC_OPERAND_P.  */
1363               || (CONSTANT_P (x) && LEGITIMATE_PIC_OPERAND_P (x)))
1364             {
1365               /* It can happen that a REG_EQUIV note contains a MEM
1366                  that is not a legitimate memory operand.  As later
1367                  stages of the reload assume that all addresses found
1368                  in the reg_equiv_* arrays were originally legitimate,
1369                  we ignore such REG_EQUIV notes.  */
1370               if (memory_operand (x, VOIDmode))
1371                 invariant_p = MEM_READONLY_P (x);
1372               else if (function_invariant_p (x))
1373                 {
1374                   if (GET_CODE (x) == PLUS
1375                       || x == frame_pointer_rtx || x == arg_pointer_rtx)
1376                     invariant_p = true;
1377                   else
1378                     constant = x;
1379                 }
1380             }
1381         }
1382       ira_reg_equiv_invariant_p[i] = invariant_p;
1383       ira_reg_equiv_const[i] = constant;
1384     }
1385 }
1386
1387 \f
1388
1389 /* Set up REG_RENUMBER and CALLER_SAVE_NEEDED (used by reload) from
1390    the allocation found by IRA.  */
1391 static void
1392 setup_reg_renumber (void)
1393 {
1394   int regno, hard_regno;
1395   ira_allocno_t a;
1396   ira_allocno_iterator ai;
1397
1398   caller_save_needed = 0;
1399   FOR_EACH_ALLOCNO (a, ai)
1400     {
1401       /* There are no caps at this point.  */
1402       ira_assert (ALLOCNO_CAP_MEMBER (a) == NULL);
1403       if (! ALLOCNO_ASSIGNED_P (a))
1404         /* It can happen if A is not referenced but partially anticipated
1405            somewhere in a region.  */
1406         ALLOCNO_ASSIGNED_P (a) = true;
1407       ira_free_allocno_updated_costs (a);
1408       hard_regno = ALLOCNO_HARD_REGNO (a);
1409       regno = (int) REGNO (ALLOCNO_REG (a));
1410       reg_renumber[regno] = (hard_regno < 0 ? -1 : hard_regno);
1411       if (hard_regno >= 0 && ALLOCNO_CALLS_CROSSED_NUM (a) != 0
1412           && ! ira_hard_reg_not_in_set_p (hard_regno, ALLOCNO_MODE (a),
1413                                           call_used_reg_set))
1414         {
1415           ira_assert (!optimize || flag_caller_saves
1416                       || regno >= ira_reg_equiv_len
1417                       || ira_reg_equiv_const[regno]
1418                       || ira_reg_equiv_invariant_p[regno]);
1419           caller_save_needed = 1;
1420         }
1421     }
1422 }
1423
1424 /* Set up allocno assignment flags for further allocation
1425    improvements.  */
1426 static void
1427 setup_allocno_assignment_flags (void)
1428 {
1429   int hard_regno;
1430   ira_allocno_t a;
1431   ira_allocno_iterator ai;
1432
1433   FOR_EACH_ALLOCNO (a, ai)
1434     {
1435       if (! ALLOCNO_ASSIGNED_P (a))
1436         /* It can happen if A is not referenced but partially anticipated
1437            somewhere in a region.  */
1438         ira_free_allocno_updated_costs (a);
1439       hard_regno = ALLOCNO_HARD_REGNO (a);
1440       /* Don't assign hard registers to allocnos which are destination
1441          of removed store at the end of loop.  It has no sense to keep
1442          the same value in different hard registers.  It is also
1443          impossible to assign hard registers correctly to such
1444          allocnos because the cost info and info about intersected
1445          calls are incorrect for them.  */
1446       ALLOCNO_ASSIGNED_P (a) = (hard_regno >= 0
1447                                 || ALLOCNO_MEM_OPTIMIZED_DEST_P (a)
1448                                 || (ALLOCNO_MEMORY_COST (a)
1449                                     - ALLOCNO_COVER_CLASS_COST (a)) < 0);
1450       ira_assert (hard_regno < 0
1451                   || ! ira_hard_reg_not_in_set_p (hard_regno, ALLOCNO_MODE (a),
1452                                                   reg_class_contents
1453                                                   [ALLOCNO_COVER_CLASS (a)]));
1454     }
1455 }
1456
1457 /* Evaluate overall allocation cost and the costs for using hard
1458    registers and memory for allocnos.  */
1459 static void
1460 calculate_allocation_cost (void)
1461 {
1462   int hard_regno, cost;
1463   ira_allocno_t a;
1464   ira_allocno_iterator ai;
1465
1466   ira_overall_cost = ira_reg_cost = ira_mem_cost = 0;
1467   FOR_EACH_ALLOCNO (a, ai)
1468     {
1469       hard_regno = ALLOCNO_HARD_REGNO (a);
1470       ira_assert (hard_regno < 0
1471                   || ! ira_hard_reg_not_in_set_p
1472                        (hard_regno, ALLOCNO_MODE (a),
1473                         reg_class_contents[ALLOCNO_COVER_CLASS (a)])); 
1474       if (hard_regno < 0)
1475         {
1476           cost = ALLOCNO_MEMORY_COST (a);
1477           ira_mem_cost += cost;
1478         }
1479       else if (ALLOCNO_HARD_REG_COSTS (a) != NULL)
1480         {
1481           cost = (ALLOCNO_HARD_REG_COSTS (a)
1482                   [ira_class_hard_reg_index
1483                    [ALLOCNO_COVER_CLASS (a)][hard_regno]]);
1484           ira_reg_cost += cost;
1485         }
1486       else
1487         {
1488           cost = ALLOCNO_COVER_CLASS_COST (a);
1489           ira_reg_cost += cost;
1490         }
1491       ira_overall_cost += cost;
1492     }
1493
1494   if (internal_flag_ira_verbose > 0 && ira_dump_file != NULL)
1495     {
1496       fprintf (ira_dump_file,
1497                "+++Costs: overall %d, reg %d, mem %d, ld %d, st %d, move %d\n",
1498                ira_overall_cost, ira_reg_cost, ira_mem_cost,
1499                ira_load_cost, ira_store_cost, ira_shuffle_cost);
1500       fprintf (ira_dump_file, "+++       move loops %d, new jumps %d\n",
1501                ira_move_loops_num, ira_additional_jumps_num);
1502     }
1503
1504 }
1505
1506 #ifdef ENABLE_IRA_CHECKING
1507 /* Check the correctness of the allocation.  We do need this because
1508    of complicated code to transform more one region internal
1509    representation into one region representation.  */
1510 static void
1511 check_allocation (void)
1512 {
1513   ira_allocno_t a, conflict_a;
1514   int hard_regno, conflict_hard_regno, nregs, conflict_nregs;
1515   ira_allocno_conflict_iterator aci;
1516   ira_allocno_iterator ai;
1517
1518   FOR_EACH_ALLOCNO (a, ai)
1519     {
1520       if (ALLOCNO_CAP_MEMBER (a) != NULL
1521           || (hard_regno = ALLOCNO_HARD_REGNO (a)) < 0)
1522         continue;
1523       nregs = hard_regno_nregs[hard_regno][ALLOCNO_MODE (a)];
1524       FOR_EACH_ALLOCNO_CONFLICT (a, conflict_a, aci)
1525         if ((conflict_hard_regno = ALLOCNO_HARD_REGNO (conflict_a)) >= 0)
1526           {
1527             conflict_nregs
1528               = (hard_regno_nregs
1529                  [conflict_hard_regno][ALLOCNO_MODE (conflict_a)]);
1530             if ((conflict_hard_regno <= hard_regno
1531                  && hard_regno < conflict_hard_regno + conflict_nregs)
1532                 || (hard_regno <= conflict_hard_regno
1533                     && conflict_hard_regno < hard_regno + nregs))
1534               {
1535                 fprintf (stderr, "bad allocation for %d and %d\n",
1536                          ALLOCNO_REGNO (a), ALLOCNO_REGNO (conflict_a));
1537                 gcc_unreachable ();
1538               }
1539           }
1540     }
1541 }
1542 #endif
1543
1544 /* Fix values of array REG_EQUIV_INIT after live range splitting done
1545    by IRA.  */
1546 static void
1547 fix_reg_equiv_init (void)
1548 {
1549   int max_regno = max_reg_num ();
1550   int i, new_regno;
1551   rtx x, prev, next, insn, set;
1552   
1553   if (reg_equiv_init_size < max_regno)
1554     {
1555       reg_equiv_init
1556         = (rtx *) ggc_realloc (reg_equiv_init, max_regno * sizeof (rtx));
1557       while (reg_equiv_init_size < max_regno)
1558         reg_equiv_init[reg_equiv_init_size++] = NULL_RTX;
1559       for (i = FIRST_PSEUDO_REGISTER; i < reg_equiv_init_size; i++)
1560         for (prev = NULL_RTX, x = reg_equiv_init[i]; x != NULL_RTX; x = next)
1561           {
1562             next = XEXP (x, 1);
1563             insn = XEXP (x, 0);
1564             set = single_set (insn);
1565             ira_assert (set != NULL_RTX
1566                         && (REG_P (SET_DEST (set)) || REG_P (SET_SRC (set))));
1567             if (REG_P (SET_DEST (set))
1568                 && ((int) REGNO (SET_DEST (set)) == i
1569                     || (int) ORIGINAL_REGNO (SET_DEST (set)) == i))
1570               new_regno = REGNO (SET_DEST (set));
1571             else if (REG_P (SET_SRC (set))
1572                      && ((int) REGNO (SET_SRC (set)) == i
1573                          || (int) ORIGINAL_REGNO (SET_SRC (set)) == i))
1574               new_regno = REGNO (SET_SRC (set));
1575             else
1576               gcc_unreachable ();
1577             if (new_regno == i)
1578               prev = x;
1579             else
1580               {
1581                 if (prev == NULL_RTX)
1582                   reg_equiv_init[i] = next;
1583                 else
1584                   XEXP (prev, 1) = next;
1585                 XEXP (x, 1) = reg_equiv_init[new_regno];
1586                 reg_equiv_init[new_regno] = x;
1587               }
1588           }
1589     }
1590 }
1591
1592 #ifdef ENABLE_IRA_CHECKING
1593 /* Print redundant memory-memory copies.  */
1594 static void
1595 print_redundant_copies (void)
1596 {
1597   int hard_regno;
1598   ira_allocno_t a;
1599   ira_copy_t cp, next_cp;
1600   ira_allocno_iterator ai;
1601   
1602   FOR_EACH_ALLOCNO (a, ai)
1603     {
1604       if (ALLOCNO_CAP_MEMBER (a) != NULL)
1605         /* It is a cap. */
1606         continue;
1607       hard_regno = ALLOCNO_HARD_REGNO (a);
1608       if (hard_regno >= 0)
1609         continue;
1610       for (cp = ALLOCNO_COPIES (a); cp != NULL; cp = next_cp)
1611         if (cp->first == a)
1612           next_cp = cp->next_first_allocno_copy;
1613         else
1614           {
1615             next_cp = cp->next_second_allocno_copy;
1616             if (internal_flag_ira_verbose > 4 && ira_dump_file != NULL
1617                 && cp->insn != NULL_RTX
1618                 && ALLOCNO_HARD_REGNO (cp->first) == hard_regno)
1619               fprintf (ira_dump_file,
1620                        "        Redundant move from %d(freq %d):%d\n",
1621                        INSN_UID (cp->insn), cp->freq, hard_regno);
1622           }
1623     }
1624 }
1625 #endif
1626
1627 /* Setup preferred and alternative classes for new pseudo-registers
1628    created by IRA starting with START.  */
1629 static void
1630 setup_preferred_alternate_classes_for_new_pseudos (int start)
1631 {
1632   int i, old_regno;
1633   int max_regno = max_reg_num ();
1634
1635   for (i = start; i < max_regno; i++)
1636     {
1637       old_regno = ORIGINAL_REGNO (regno_reg_rtx[i]);
1638       ira_assert (i != old_regno); 
1639       setup_reg_classes (i, reg_preferred_class (old_regno),
1640                          reg_alternate_class (old_regno));
1641       if (internal_flag_ira_verbose > 2 && ira_dump_file != NULL)
1642         fprintf (ira_dump_file,
1643                  "    New r%d: setting preferred %s, alternative %s\n",
1644                  i, reg_class_names[reg_preferred_class (old_regno)],
1645                  reg_class_names[reg_alternate_class (old_regno)]);
1646     }
1647 }
1648
1649 \f
1650
1651 /* Regional allocation can create new pseudo-registers.  This function
1652    expands some arrays for pseudo-registers.  */
1653 static void
1654 expand_reg_info (int old_size)
1655 {
1656   int i;
1657   int size = max_reg_num ();
1658
1659   resize_reg_info ();
1660   for (i = old_size; i < size; i++)
1661     {
1662       reg_renumber[i] = -1;
1663       setup_reg_classes (i, GENERAL_REGS, ALL_REGS);
1664     }
1665 }
1666
1667 \f
1668
1669 /* All natural loops.  */
1670 struct loops ira_loops;
1671
1672 /* This is the main entry of IRA.  */
1673 static void
1674 ira (FILE *f)
1675 {
1676   int overall_cost_before, allocated_reg_info_size;
1677   bool loops_p;
1678   int max_regno_before_ira, ira_max_point_before_emit;
1679   int rebuild_p;
1680   int saved_flag_ira_algorithm;
1681   basic_block bb;
1682
1683   timevar_push (TV_IRA);
1684
1685   if (flag_ira_verbose < 10)
1686     {
1687       internal_flag_ira_verbose = flag_ira_verbose;
1688       ira_dump_file = f;
1689     }
1690   else
1691     {
1692       internal_flag_ira_verbose = flag_ira_verbose - 10;
1693       ira_dump_file = stderr;
1694     }
1695
1696   setup_prohibited_mode_move_regs ();
1697
1698   df_note_add_problem ();
1699
1700   if (optimize == 1)
1701     {
1702       df_live_add_problem ();
1703       df_live_set_all_dirty ();
1704     }
1705 #ifdef ENABLE_CHECKING
1706   df->changeable_flags |= DF_VERIFY_SCHEDULED;
1707 #endif
1708   df_analyze ();
1709   df_clear_flags (DF_NO_INSN_RESCAN);
1710   regstat_init_n_sets_and_refs ();
1711   regstat_compute_ri ();
1712
1713   /* If we are not optimizing, then this is the only place before
1714      register allocation where dataflow is done.  And that is needed
1715      to generate these warnings.  */
1716   if (warn_clobbered)
1717     generate_setjmp_warnings ();
1718
1719   rebuild_p = update_equiv_regs ();
1720
1721 #ifndef IRA_NO_OBSTACK
1722   gcc_obstack_init (&ira_obstack);
1723 #endif
1724   bitmap_obstack_initialize (&ira_bitmap_obstack);
1725   if (optimize)
1726     {      
1727       max_regno = max_reg_num ();
1728       ira_reg_equiv_len = max_regno;
1729       ira_reg_equiv_invariant_p
1730         = (bool *) ira_allocate (max_regno * sizeof (bool));
1731       memset (ira_reg_equiv_invariant_p, 0, max_regno * sizeof (bool));
1732       ira_reg_equiv_const = (rtx *) ira_allocate (max_regno * sizeof (rtx));
1733       memset (ira_reg_equiv_const, 0, max_regno * sizeof (rtx));
1734       find_reg_equiv_invariant_const ();
1735       if (rebuild_p)
1736         {
1737           timevar_push (TV_JUMP);
1738           rebuild_jump_labels (get_insns ());
1739           purge_all_dead_edges ();
1740           timevar_pop (TV_JUMP);
1741         }
1742     }
1743
1744   max_regno_before_ira = allocated_reg_info_size = max_reg_num ();
1745   allocate_reg_info ();
1746   setup_eliminable_regset ();
1747       
1748   ira_overall_cost = ira_reg_cost = ira_mem_cost = 0;
1749   ira_load_cost = ira_store_cost = ira_shuffle_cost = 0;
1750   ira_move_loops_num = ira_additional_jumps_num = 0;
1751   
1752   ira_assert (current_loops == NULL);
1753   flow_loops_find (&ira_loops);
1754   current_loops = &ira_loops;
1755   saved_flag_ira_algorithm = flag_ira_algorithm;
1756   if (optimize && number_of_loops () > (unsigned) IRA_MAX_LOOPS_NUM)
1757     flag_ira_algorithm = IRA_ALGORITHM_CB;
1758       
1759   if (internal_flag_ira_verbose > 0 && ira_dump_file != NULL)
1760     fprintf (ira_dump_file, "Building IRA IR\n");
1761   loops_p = ira_build (optimize
1762                        && (flag_ira_algorithm == IRA_ALGORITHM_REGIONAL
1763                            || flag_ira_algorithm == IRA_ALGORITHM_MIXED));
1764   if (optimize)
1765     ira_color ();
1766   else
1767     ira_fast_allocation ();
1768       
1769   ira_max_point_before_emit = ira_max_point;
1770       
1771   ira_emit (loops_p);
1772   
1773   if (optimize)
1774     {
1775       max_regno = max_reg_num ();
1776       
1777       if (! loops_p)
1778         ira_initiate_assign ();
1779       else
1780         {
1781           expand_reg_info (allocated_reg_info_size);
1782           setup_preferred_alternate_classes_for_new_pseudos
1783             (allocated_reg_info_size);
1784           allocated_reg_info_size = max_regno;
1785           
1786           if (internal_flag_ira_verbose > 0 && ira_dump_file != NULL)
1787             fprintf (ira_dump_file, "Flattening IR\n");
1788           ira_flattening (max_regno_before_ira, ira_max_point_before_emit);
1789           /* New insns were generated: add notes and recalculate live
1790              info.  */
1791           df_analyze ();
1792           
1793           flow_loops_find (&ira_loops);
1794           current_loops = &ira_loops;
1795
1796           setup_allocno_assignment_flags ();
1797           ira_initiate_assign ();
1798           ira_reassign_conflict_allocnos (max_regno);
1799         }
1800     }
1801
1802   setup_reg_renumber ();
1803   
1804   calculate_allocation_cost ();
1805   
1806 #ifdef ENABLE_IRA_CHECKING
1807   if (optimize)
1808     check_allocation ();
1809 #endif
1810       
1811   delete_trivially_dead_insns (get_insns (), max_reg_num ());
1812   max_regno = max_reg_num ();
1813   
1814   /* Determine if the current function is a leaf before running IRA
1815      since this can impact optimizations done by the prologue and
1816      epilogue thus changing register elimination offsets.  */
1817   current_function_is_leaf = leaf_function_p ();
1818   
1819   /* And the reg_equiv_memory_loc array.  */
1820   VEC_safe_grow (rtx, gc, reg_equiv_memory_loc_vec, max_regno);
1821   memset (VEC_address (rtx, reg_equiv_memory_loc_vec), 0,
1822           sizeof (rtx) * max_regno);
1823   reg_equiv_memory_loc = VEC_address (rtx, reg_equiv_memory_loc_vec);
1824
1825   if (max_regno != max_regno_before_ira)
1826     {
1827       regstat_free_n_sets_and_refs ();
1828       regstat_free_ri ();
1829       regstat_init_n_sets_and_refs ();
1830       regstat_compute_ri ();
1831     }
1832
1833   allocate_initial_values (reg_equiv_memory_loc);
1834
1835   overall_cost_before = ira_overall_cost;
1836   if (optimize)
1837     {
1838       fix_reg_equiv_init ();
1839       
1840 #ifdef ENABLE_IRA_CHECKING
1841       print_redundant_copies ();
1842 #endif
1843
1844       ira_spilled_reg_stack_slots_num = 0;
1845       ira_spilled_reg_stack_slots
1846         = ((struct ira_spilled_reg_stack_slot *)
1847            ira_allocate (max_regno
1848                          * sizeof (struct ira_spilled_reg_stack_slot)));
1849       memset (ira_spilled_reg_stack_slots, 0,
1850               max_regno * sizeof (struct ira_spilled_reg_stack_slot));
1851     }
1852   
1853   timevar_pop (TV_IRA);
1854
1855   timevar_push (TV_RELOAD);
1856   df_set_flags (DF_NO_INSN_RESCAN);
1857   build_insn_chain ();
1858
1859   reload_completed = !reload (get_insns (), optimize > 0);
1860
1861   timevar_pop (TV_RELOAD);
1862
1863   timevar_push (TV_IRA);
1864
1865   if (optimize)
1866     {
1867       ira_free (ira_spilled_reg_stack_slots);
1868       
1869       ira_finish_assign ();
1870       
1871     }  
1872   if (internal_flag_ira_verbose > 0 && ira_dump_file != NULL
1873       && overall_cost_before != ira_overall_cost)
1874     fprintf (ira_dump_file, "+++Overall after reload %d\n", ira_overall_cost);
1875   ira_destroy ();
1876   
1877   flow_loops_free (&ira_loops);
1878   free_dominance_info (CDI_DOMINATORS);
1879   FOR_ALL_BB (bb)
1880     bb->loop_father = NULL;
1881   current_loops = NULL;
1882
1883   flag_ira_algorithm = saved_flag_ira_algorithm;
1884
1885   regstat_free_ri ();
1886   regstat_free_n_sets_and_refs ();
1887       
1888   if (optimize)
1889     {
1890       cleanup_cfg (CLEANUP_EXPENSIVE);
1891       
1892       ira_free (ira_reg_equiv_invariant_p);
1893       ira_free (ira_reg_equiv_const);
1894     }
1895
1896   bitmap_obstack_release (&ira_bitmap_obstack);
1897 #ifndef IRA_NO_OBSTACK
1898   obstack_free (&ira_obstack, NULL);
1899 #endif
1900
1901   /* The code after the reload has changed so much that at this point
1902      we might as well just rescan everything.  Not that
1903      df_rescan_all_insns is not going to help here because it does not
1904      touch the artificial uses and defs.  */
1905   df_finish_pass (true);
1906   if (optimize > 1)
1907     df_live_add_problem ();
1908   df_scan_alloc (NULL);
1909   df_scan_blocks ();
1910
1911   if (optimize)
1912     df_analyze ();
1913
1914   timevar_pop (TV_IRA);
1915 }
1916
1917 \f
1918
1919 static bool
1920 gate_ira (void)
1921 {
1922   return flag_ira != 0;
1923 }
1924
1925 /* Run the integrated register allocator.  */
1926 static unsigned int
1927 rest_of_handle_ira (void)
1928 {
1929   ira (dump_file);
1930   return 0;
1931 }
1932
1933 struct rtl_opt_pass pass_ira =
1934 {
1935  {
1936   RTL_PASS,
1937   "ira",                                /* name */
1938   gate_ira,                             /* gate */
1939   rest_of_handle_ira,                   /* execute */
1940   NULL,                                 /* sub */
1941   NULL,                                 /* next */
1942   0,                                    /* static_pass_number */
1943   0,                                    /* tv_id */
1944   0,                                    /* properties_required */
1945   0,                                    /* properties_provided */
1946   0,                                    /* properties_destroyed */
1947   0,                                    /* todo_flags_start */
1948   TODO_dump_func |
1949   TODO_ggc_collect                      /* todo_flags_finish */
1950  }
1951 };