OSDN Git Service

2008-11-25 Vladimir Makarov <vmakarov@redhat.com>
[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: hard register number -> cover class it belongs to.  If the
980    corresponding class is NO_REGS, the hard register is not available
981    for allocation.  */
982 enum reg_class ira_hard_regno_cover_class[FIRST_PSEUDO_REGISTER];
983
984 /* Set up the array above.  */
985 static void
986 setup_hard_regno_cover_class (void)
987 {
988   int i, j;
989   enum reg_class cl;
990
991   for (i = 0; i < FIRST_PSEUDO_REGISTER; i++)
992     {
993       ira_hard_regno_cover_class[i] = NO_REGS;
994       for (j = 0; j < ira_reg_class_cover_size; j++)
995         {
996           cl = ira_reg_class_cover[j];
997           if (ira_class_hard_reg_index[cl][i] >= 0)
998             {
999               ira_hard_regno_cover_class[i] = cl;
1000               break;
1001             }
1002         }
1003             
1004     }
1005 }
1006
1007 \f
1008
1009 /* Map: register class x machine mode -> number of hard registers of
1010    given class needed to store value of given mode.  If the number is
1011    different, the size will be negative.  */
1012 int ira_reg_class_nregs[N_REG_CLASSES][MAX_MACHINE_MODE];
1013
1014 /* Maximal value of the previous array elements.  */
1015 int ira_max_nregs;
1016
1017 /* Form IRA_REG_CLASS_NREGS map.  */
1018 static void
1019 setup_reg_class_nregs (void)
1020 {
1021   int m;
1022   enum reg_class cl;
1023
1024   ira_max_nregs = -1;
1025   for (cl = 0; cl < N_REG_CLASSES; cl++)
1026     for (m = 0; m < MAX_MACHINE_MODE; m++)
1027       {
1028         ira_reg_class_nregs[cl][m] = CLASS_MAX_NREGS (cl, m);
1029         if (ira_max_nregs < ira_reg_class_nregs[cl][m])
1030           ira_max_nregs = ira_reg_class_nregs[cl][m];
1031       }
1032 }
1033
1034 \f
1035
1036 /* Array whose values are hard regset of hard registers available for
1037    the allocation of given register class whose HARD_REGNO_MODE_OK
1038    values for given mode are zero.  */
1039 HARD_REG_SET prohibited_class_mode_regs[N_REG_CLASSES][NUM_MACHINE_MODES];
1040
1041 /* Set up PROHIBITED_CLASS_MODE_REGS.  */
1042 static void
1043 setup_prohibited_class_mode_regs (void)
1044 {
1045   int i, j, k, hard_regno;
1046   enum reg_class cl;
1047
1048   for (i = 0; i < ira_reg_class_cover_size; i++)
1049     {
1050       cl = ira_reg_class_cover[i];
1051       for (j = 0; j < NUM_MACHINE_MODES; j++)
1052         {
1053           CLEAR_HARD_REG_SET (prohibited_class_mode_regs[cl][j]);
1054           for (k = ira_class_hard_regs_num[cl] - 1; k >= 0; k--)
1055             {
1056               hard_regno = ira_class_hard_regs[cl][k];
1057               if (! HARD_REGNO_MODE_OK (hard_regno, j))
1058                 SET_HARD_REG_BIT (prohibited_class_mode_regs[cl][j],
1059                                   hard_regno);
1060             }
1061         }
1062     }
1063 }
1064
1065 \f
1066
1067 /* Allocate and initialize IRA_REGISTER_MOVE_COST,
1068    IRA_MAY_MOVE_IN_COST, and IRA_MAY_MOVE_OUT_COST for MODE if it is
1069    not done yet.  */
1070 void
1071 ira_init_register_move_cost (enum machine_mode mode)
1072 {
1073   int cl1, cl2;
1074
1075   ira_assert (ira_register_move_cost[mode] == NULL
1076               && ira_may_move_in_cost[mode] == NULL
1077               && ira_may_move_out_cost[mode] == NULL);
1078   if (move_cost[mode] == NULL)
1079     init_move_cost (mode);
1080   ira_register_move_cost[mode] = move_cost[mode];
1081   /* Don't use ira_allocate because the tables exist out of scope of a
1082      IRA call.  */
1083   ira_may_move_in_cost[mode]
1084     = (move_table *) xmalloc (sizeof (move_table) * N_REG_CLASSES);
1085   memcpy (ira_may_move_in_cost[mode], may_move_in_cost[mode],
1086           sizeof (move_table) * N_REG_CLASSES);
1087   ira_may_move_out_cost[mode]
1088     = (move_table *) xmalloc (sizeof (move_table) * N_REG_CLASSES);
1089   memcpy (ira_may_move_out_cost[mode], may_move_out_cost[mode],
1090           sizeof (move_table) * N_REG_CLASSES);
1091   for (cl1 = 0; cl1 < N_REG_CLASSES; cl1++)
1092     {
1093       for (cl2 = 0; cl2 < N_REG_CLASSES; cl2++)
1094         {
1095           if (ira_class_subset_p[cl1][cl2])
1096             ira_may_move_in_cost[mode][cl1][cl2] = 0;
1097           if (ira_class_subset_p[cl2][cl1])
1098             ira_may_move_out_cost[mode][cl1][cl2] = 0;
1099         }
1100     }
1101 }
1102
1103 \f
1104
1105 /* This is called once during compiler work.  It sets up
1106    different arrays whose values don't depend on the compiled
1107    function.  */
1108 void
1109 ira_init_once (void)
1110 {
1111   enum machine_mode mode;
1112
1113   for (mode = 0; mode < MAX_MACHINE_MODE; mode++)
1114     {
1115       ira_register_move_cost[mode] = NULL;
1116       ira_may_move_in_cost[mode] = NULL;
1117       ira_may_move_out_cost[mode] = NULL;
1118     }
1119   ira_init_costs_once ();
1120 }
1121
1122 /* Free ira_register_move_cost, ira_may_move_in_cost, and
1123    ira_may_move_out_cost for each mode.  */
1124 static void
1125 free_register_move_costs (void)
1126 {
1127   enum machine_mode mode;
1128
1129   for (mode = 0; mode < MAX_MACHINE_MODE; mode++)
1130     {
1131       if (ira_may_move_in_cost[mode] != NULL)
1132         free (ira_may_move_in_cost[mode]);
1133       if (ira_may_move_out_cost[mode] != NULL)
1134         free (ira_may_move_out_cost[mode]);
1135       ira_register_move_cost[mode] = NULL;
1136       ira_may_move_in_cost[mode] = NULL;
1137       ira_may_move_out_cost[mode] = NULL;
1138     }
1139 }
1140
1141 /* This is called every time when register related information is
1142    changed.  */
1143 void
1144 ira_init (void)
1145 {
1146   free_register_move_costs ();
1147   setup_reg_mode_hard_regset ();
1148   setup_alloc_regs (flag_omit_frame_pointer != 0);
1149   setup_class_subset_and_memory_move_costs ();
1150   find_reg_class_closure ();
1151   setup_hard_regno_cover_class ();
1152   setup_reg_class_nregs ();
1153   setup_prohibited_class_mode_regs ();
1154   ira_init_costs ();
1155 }
1156
1157 /* Function called once at the end of compiler work.  */
1158 void
1159 ira_finish_once (void)
1160 {
1161   ira_finish_costs_once ();
1162   free_register_move_costs ();
1163 }
1164
1165 \f
1166
1167 /* Array whose values are hard regset of hard registers for which
1168    move of the hard register in given mode into itself is
1169    prohibited.  */
1170 HARD_REG_SET ira_prohibited_mode_move_regs[NUM_MACHINE_MODES];
1171
1172 /* Flag of that the above array has been initialized.  */
1173 static bool ira_prohibited_mode_move_regs_initialized_p = false;
1174
1175 /* Set up IRA_PROHIBITED_MODE_MOVE_REGS.  */
1176 static void
1177 setup_prohibited_mode_move_regs (void)
1178 {
1179   int i, j;
1180   rtx test_reg1, test_reg2, move_pat, move_insn;
1181
1182   if (ira_prohibited_mode_move_regs_initialized_p)
1183     return;
1184   ira_prohibited_mode_move_regs_initialized_p = true;
1185   test_reg1 = gen_rtx_REG (VOIDmode, 0);
1186   test_reg2 = gen_rtx_REG (VOIDmode, 0);
1187   move_pat = gen_rtx_SET (VOIDmode, test_reg1, test_reg2);
1188   move_insn = gen_rtx_INSN (VOIDmode, 0, 0, 0, 0, 0, move_pat, -1, 0);
1189   for (i = 0; i < NUM_MACHINE_MODES; i++)
1190     {
1191       SET_HARD_REG_SET (ira_prohibited_mode_move_regs[i]);
1192       for (j = 0; j < FIRST_PSEUDO_REGISTER; j++)
1193         {
1194           if (! HARD_REGNO_MODE_OK (j, i))
1195             continue;
1196           SET_REGNO (test_reg1, j);
1197           PUT_MODE (test_reg1, i);
1198           SET_REGNO (test_reg2, j);
1199           PUT_MODE (test_reg2, i);
1200           INSN_CODE (move_insn) = -1;
1201           recog_memoized (move_insn);
1202           if (INSN_CODE (move_insn) < 0)
1203             continue;
1204           extract_insn (move_insn);
1205           if (! constrain_operands (1))
1206             continue;
1207           CLEAR_HARD_REG_BIT (ira_prohibited_mode_move_regs[i], j);
1208         }
1209     }
1210 }
1211
1212 \f
1213
1214 /* Function specific hard registers that can not be used for the
1215    register allocation.  */
1216 HARD_REG_SET ira_no_alloc_regs;
1217
1218 /* Return TRUE if *LOC contains an asm.  */
1219 static int
1220 insn_contains_asm_1 (rtx *loc, void *data ATTRIBUTE_UNUSED)
1221 {
1222   if ( !*loc)
1223     return FALSE;
1224   if (GET_CODE (*loc) == ASM_OPERANDS)
1225     return TRUE;
1226   return FALSE;
1227 }
1228
1229
1230 /* Return TRUE if INSN contains an ASM.  */
1231 static bool
1232 insn_contains_asm (rtx insn)
1233 {
1234   return for_each_rtx (&insn, insn_contains_asm_1, NULL);
1235 }
1236
1237 /* Set up regs_asm_clobbered.  */
1238 static void
1239 compute_regs_asm_clobbered (char *regs_asm_clobbered)
1240 {
1241   basic_block bb;
1242
1243   memset (regs_asm_clobbered, 0, sizeof (char) * FIRST_PSEUDO_REGISTER);
1244   
1245   FOR_EACH_BB (bb)
1246     {
1247       rtx insn;
1248       FOR_BB_INSNS_REVERSE (bb, insn)
1249         {
1250           df_ref *def_rec;
1251
1252           if (insn_contains_asm (insn))
1253             for (def_rec = DF_INSN_DEFS (insn); *def_rec; def_rec++)
1254               {
1255                 df_ref def = *def_rec;
1256                 unsigned int dregno = DF_REF_REGNO (def);
1257                 if (dregno < FIRST_PSEUDO_REGISTER)
1258                   {
1259                     unsigned int i;
1260                     enum machine_mode mode = GET_MODE (DF_REF_REAL_REG (def));
1261                     unsigned int end = dregno 
1262                       + hard_regno_nregs[dregno][mode] - 1;
1263
1264                     for (i = dregno; i <= end; ++i)
1265                       regs_asm_clobbered[i] = 1;
1266                   }
1267               }
1268         }
1269     }
1270 }
1271
1272
1273 /* Set up ELIMINABLE_REGSET, IRA_NO_ALLOC_REGS, and REGS_EVER_LIVE.  */
1274 static void
1275 setup_eliminable_regset (void)
1276 {
1277   /* Like regs_ever_live, but 1 if a reg is set or clobbered from an
1278      asm.  Unlike regs_ever_live, elements of this array corresponding
1279      to eliminable regs (like the frame pointer) are set if an asm
1280      sets them.  */
1281   char *regs_asm_clobbered
1282     = (char *) alloca (FIRST_PSEUDO_REGISTER * sizeof (char));
1283 #ifdef ELIMINABLE_REGS
1284   int i;
1285   static const struct {const int from, to; } eliminables[] = ELIMINABLE_REGS;
1286 #endif
1287   /* FIXME: If EXIT_IGNORE_STACK is set, we will not save and restore
1288      sp for alloca.  So we can't eliminate the frame pointer in that
1289      case.  At some point, we should improve this by emitting the
1290      sp-adjusting insns for this case.  */
1291   int need_fp
1292     = (! flag_omit_frame_pointer
1293        || (cfun->calls_alloca && EXIT_IGNORE_STACK)
1294        || crtl->accesses_prior_frames
1295        || crtl->stack_realign_needed
1296        || FRAME_POINTER_REQUIRED);
1297
1298   frame_pointer_needed = need_fp;
1299
1300   COPY_HARD_REG_SET (ira_no_alloc_regs, no_unit_alloc_regs);
1301   CLEAR_HARD_REG_SET (eliminable_regset);
1302
1303   compute_regs_asm_clobbered (regs_asm_clobbered);
1304   /* Build the regset of all eliminable registers and show we can't
1305      use those that we already know won't be eliminated.  */
1306 #ifdef ELIMINABLE_REGS
1307   for (i = 0; i < (int) ARRAY_SIZE (eliminables); i++)
1308     {
1309       bool cannot_elim
1310         = (! CAN_ELIMINATE (eliminables[i].from, eliminables[i].to)
1311            || (eliminables[i].to == STACK_POINTER_REGNUM && need_fp));
1312
1313       if (! regs_asm_clobbered[eliminables[i].from])
1314         {
1315             SET_HARD_REG_BIT (eliminable_regset, eliminables[i].from);
1316
1317             if (cannot_elim)
1318               SET_HARD_REG_BIT (ira_no_alloc_regs, eliminables[i].from);
1319         }
1320       else if (cannot_elim)
1321         error ("%s cannot be used in asm here",
1322                reg_names[eliminables[i].from]);
1323       else
1324         df_set_regs_ever_live (eliminables[i].from, true);
1325     }
1326 #if FRAME_POINTER_REGNUM != HARD_FRAME_POINTER_REGNUM
1327   if (! regs_asm_clobbered[HARD_FRAME_POINTER_REGNUM])
1328     {
1329       SET_HARD_REG_BIT (eliminable_regset, HARD_FRAME_POINTER_REGNUM);
1330       if (need_fp)
1331         SET_HARD_REG_BIT (ira_no_alloc_regs, HARD_FRAME_POINTER_REGNUM);
1332     }
1333   else if (need_fp)
1334     error ("%s cannot be used in asm here",
1335            reg_names[HARD_FRAME_POINTER_REGNUM]);
1336   else
1337     df_set_regs_ever_live (HARD_FRAME_POINTER_REGNUM, true);
1338 #endif
1339
1340 #else
1341   if (! regs_asm_clobbered[FRAME_POINTER_REGNUM])
1342     {
1343       SET_HARD_REG_BIT (eliminable_regset, FRAME_POINTER_REGNUM);
1344       if (need_fp)
1345         SET_HARD_REG_BIT (ira_no_alloc_regs, FRAME_POINTER_REGNUM);
1346     }
1347   else if (need_fp)
1348     error ("%s cannot be used in asm here", reg_names[FRAME_POINTER_REGNUM]);
1349   else
1350     df_set_regs_ever_live (FRAME_POINTER_REGNUM, true);
1351 #endif
1352 }
1353
1354 \f
1355
1356 /* The length of the following two arrays.  */
1357 int ira_reg_equiv_len;
1358
1359 /* The element value is TRUE if the corresponding regno value is
1360    invariant.  */
1361 bool *ira_reg_equiv_invariant_p;
1362
1363 /* The element value is equiv constant of given pseudo-register or
1364    NULL_RTX.  */
1365 rtx *ira_reg_equiv_const;
1366
1367 /* Set up the two arrays declared above.  */
1368 static void
1369 find_reg_equiv_invariant_const (void)
1370 {
1371   int i;
1372   bool invariant_p;
1373   rtx list, insn, note, constant, x;
1374
1375   for (i = FIRST_PSEUDO_REGISTER; i < reg_equiv_init_size; i++)
1376     {
1377       constant = NULL_RTX;
1378       invariant_p = false;
1379       for (list = reg_equiv_init[i]; list != NULL_RTX; list = XEXP (list, 1))
1380         {
1381           insn = XEXP (list, 0);
1382           note = find_reg_note (insn, REG_EQUIV, NULL_RTX);
1383           
1384           if (note == NULL_RTX)
1385             continue;
1386
1387           x = XEXP (note, 0);
1388           
1389           if (! function_invariant_p (x)
1390               || ! flag_pic
1391               /* A function invariant is often CONSTANT_P but may
1392                  include a register.  We promise to only pass CONSTANT_P
1393                  objects to LEGITIMATE_PIC_OPERAND_P.  */
1394               || (CONSTANT_P (x) && LEGITIMATE_PIC_OPERAND_P (x)))
1395             {
1396               /* It can happen that a REG_EQUIV note contains a MEM
1397                  that is not a legitimate memory operand.  As later
1398                  stages of the reload assume that all addresses found
1399                  in the reg_equiv_* arrays were originally legitimate,
1400                  we ignore such REG_EQUIV notes.  */
1401               if (memory_operand (x, VOIDmode))
1402                 invariant_p = MEM_READONLY_P (x);
1403               else if (function_invariant_p (x))
1404                 {
1405                   if (GET_CODE (x) == PLUS
1406                       || x == frame_pointer_rtx || x == arg_pointer_rtx)
1407                     invariant_p = true;
1408                   else
1409                     constant = x;
1410                 }
1411             }
1412         }
1413       ira_reg_equiv_invariant_p[i] = invariant_p;
1414       ira_reg_equiv_const[i] = constant;
1415     }
1416 }
1417
1418 \f
1419
1420 /* Set up REG_RENUMBER and CALLER_SAVE_NEEDED (used by reload) from
1421    the allocation found by IRA.  */
1422 static void
1423 setup_reg_renumber (void)
1424 {
1425   int regno, hard_regno;
1426   ira_allocno_t a;
1427   ira_allocno_iterator ai;
1428
1429   caller_save_needed = 0;
1430   FOR_EACH_ALLOCNO (a, ai)
1431     {
1432       /* There are no caps at this point.  */
1433       ira_assert (ALLOCNO_CAP_MEMBER (a) == NULL);
1434       if (! ALLOCNO_ASSIGNED_P (a))
1435         /* It can happen if A is not referenced but partially anticipated
1436            somewhere in a region.  */
1437         ALLOCNO_ASSIGNED_P (a) = true;
1438       ira_free_allocno_updated_costs (a);
1439       hard_regno = ALLOCNO_HARD_REGNO (a);
1440       regno = (int) REGNO (ALLOCNO_REG (a));
1441       reg_renumber[regno] = (hard_regno < 0 ? -1 : hard_regno);
1442       if (hard_regno >= 0 && ALLOCNO_CALLS_CROSSED_NUM (a) != 0
1443           && ! ira_hard_reg_not_in_set_p (hard_regno, ALLOCNO_MODE (a),
1444                                           call_used_reg_set))
1445         {
1446           ira_assert (!optimize || flag_caller_saves
1447                       || regno >= ira_reg_equiv_len
1448                       || ira_reg_equiv_const[regno]
1449                       || ira_reg_equiv_invariant_p[regno]);
1450           caller_save_needed = 1;
1451         }
1452     }
1453 }
1454
1455 /* Set up allocno assignment flags for further allocation
1456    improvements.  */
1457 static void
1458 setup_allocno_assignment_flags (void)
1459 {
1460   int hard_regno;
1461   ira_allocno_t a;
1462   ira_allocno_iterator ai;
1463
1464   FOR_EACH_ALLOCNO (a, ai)
1465     {
1466       if (! ALLOCNO_ASSIGNED_P (a))
1467         /* It can happen if A is not referenced but partially anticipated
1468            somewhere in a region.  */
1469         ira_free_allocno_updated_costs (a);
1470       hard_regno = ALLOCNO_HARD_REGNO (a);
1471       /* Don't assign hard registers to allocnos which are destination
1472          of removed store at the end of loop.  It has no sense to keep
1473          the same value in different hard registers.  It is also
1474          impossible to assign hard registers correctly to such
1475          allocnos because the cost info and info about intersected
1476          calls are incorrect for them.  */
1477       ALLOCNO_ASSIGNED_P (a) = (hard_regno >= 0
1478                                 || ALLOCNO_MEM_OPTIMIZED_DEST_P (a)
1479                                 || (ALLOCNO_MEMORY_COST (a)
1480                                     - ALLOCNO_COVER_CLASS_COST (a)) < 0);
1481       ira_assert (hard_regno < 0
1482                   || ! ira_hard_reg_not_in_set_p (hard_regno, ALLOCNO_MODE (a),
1483                                                   reg_class_contents
1484                                                   [ALLOCNO_COVER_CLASS (a)]));
1485     }
1486 }
1487
1488 /* Evaluate overall allocation cost and the costs for using hard
1489    registers and memory for allocnos.  */
1490 static void
1491 calculate_allocation_cost (void)
1492 {
1493   int hard_regno, cost;
1494   ira_allocno_t a;
1495   ira_allocno_iterator ai;
1496
1497   ira_overall_cost = ira_reg_cost = ira_mem_cost = 0;
1498   FOR_EACH_ALLOCNO (a, ai)
1499     {
1500       hard_regno = ALLOCNO_HARD_REGNO (a);
1501       ira_assert (hard_regno < 0
1502                   || ! ira_hard_reg_not_in_set_p
1503                        (hard_regno, ALLOCNO_MODE (a),
1504                         reg_class_contents[ALLOCNO_COVER_CLASS (a)])); 
1505       if (hard_regno < 0)
1506         {
1507           cost = ALLOCNO_MEMORY_COST (a);
1508           ira_mem_cost += cost;
1509         }
1510       else if (ALLOCNO_HARD_REG_COSTS (a) != NULL)
1511         {
1512           cost = (ALLOCNO_HARD_REG_COSTS (a)
1513                   [ira_class_hard_reg_index
1514                    [ALLOCNO_COVER_CLASS (a)][hard_regno]]);
1515           ira_reg_cost += cost;
1516         }
1517       else
1518         {
1519           cost = ALLOCNO_COVER_CLASS_COST (a);
1520           ira_reg_cost += cost;
1521         }
1522       ira_overall_cost += cost;
1523     }
1524
1525   if (internal_flag_ira_verbose > 0 && ira_dump_file != NULL)
1526     {
1527       fprintf (ira_dump_file,
1528                "+++Costs: overall %d, reg %d, mem %d, ld %d, st %d, move %d\n",
1529                ira_overall_cost, ira_reg_cost, ira_mem_cost,
1530                ira_load_cost, ira_store_cost, ira_shuffle_cost);
1531       fprintf (ira_dump_file, "+++       move loops %d, new jumps %d\n",
1532                ira_move_loops_num, ira_additional_jumps_num);
1533     }
1534
1535 }
1536
1537 #ifdef ENABLE_IRA_CHECKING
1538 /* Check the correctness of the allocation.  We do need this because
1539    of complicated code to transform more one region internal
1540    representation into one region representation.  */
1541 static void
1542 check_allocation (void)
1543 {
1544   ira_allocno_t a, conflict_a;
1545   int hard_regno, conflict_hard_regno, nregs, conflict_nregs;
1546   ira_allocno_conflict_iterator aci;
1547   ira_allocno_iterator ai;
1548
1549   FOR_EACH_ALLOCNO (a, ai)
1550     {
1551       if (ALLOCNO_CAP_MEMBER (a) != NULL
1552           || (hard_regno = ALLOCNO_HARD_REGNO (a)) < 0)
1553         continue;
1554       nregs = hard_regno_nregs[hard_regno][ALLOCNO_MODE (a)];
1555       FOR_EACH_ALLOCNO_CONFLICT (a, conflict_a, aci)
1556         if ((conflict_hard_regno = ALLOCNO_HARD_REGNO (conflict_a)) >= 0)
1557           {
1558             conflict_nregs
1559               = (hard_regno_nregs
1560                  [conflict_hard_regno][ALLOCNO_MODE (conflict_a)]);
1561             if ((conflict_hard_regno <= hard_regno
1562                  && hard_regno < conflict_hard_regno + conflict_nregs)
1563                 || (hard_regno <= conflict_hard_regno
1564                     && conflict_hard_regno < hard_regno + nregs))
1565               {
1566                 fprintf (stderr, "bad allocation for %d and %d\n",
1567                          ALLOCNO_REGNO (a), ALLOCNO_REGNO (conflict_a));
1568                 gcc_unreachable ();
1569               }
1570           }
1571     }
1572 }
1573 #endif
1574
1575 /* Fix values of array REG_EQUIV_INIT after live range splitting done
1576    by IRA.  */
1577 static void
1578 fix_reg_equiv_init (void)
1579 {
1580   int max_regno = max_reg_num ();
1581   int i, new_regno;
1582   rtx x, prev, next, insn, set;
1583   
1584   if (reg_equiv_init_size < max_regno)
1585     {
1586       reg_equiv_init
1587         = (rtx *) ggc_realloc (reg_equiv_init, max_regno * sizeof (rtx));
1588       while (reg_equiv_init_size < max_regno)
1589         reg_equiv_init[reg_equiv_init_size++] = NULL_RTX;
1590       for (i = FIRST_PSEUDO_REGISTER; i < reg_equiv_init_size; i++)
1591         for (prev = NULL_RTX, x = reg_equiv_init[i]; x != NULL_RTX; x = next)
1592           {
1593             next = XEXP (x, 1);
1594             insn = XEXP (x, 0);
1595             set = single_set (insn);
1596             ira_assert (set != NULL_RTX
1597                         && (REG_P (SET_DEST (set)) || REG_P (SET_SRC (set))));
1598             if (REG_P (SET_DEST (set))
1599                 && ((int) REGNO (SET_DEST (set)) == i
1600                     || (int) ORIGINAL_REGNO (SET_DEST (set)) == i))
1601               new_regno = REGNO (SET_DEST (set));
1602             else if (REG_P (SET_SRC (set))
1603                      && ((int) REGNO (SET_SRC (set)) == i
1604                          || (int) ORIGINAL_REGNO (SET_SRC (set)) == i))
1605               new_regno = REGNO (SET_SRC (set));
1606             else
1607               gcc_unreachable ();
1608             if (new_regno == i)
1609               prev = x;
1610             else
1611               {
1612                 if (prev == NULL_RTX)
1613                   reg_equiv_init[i] = next;
1614                 else
1615                   XEXP (prev, 1) = next;
1616                 XEXP (x, 1) = reg_equiv_init[new_regno];
1617                 reg_equiv_init[new_regno] = x;
1618               }
1619           }
1620     }
1621 }
1622
1623 #ifdef ENABLE_IRA_CHECKING
1624 /* Print redundant memory-memory copies.  */
1625 static void
1626 print_redundant_copies (void)
1627 {
1628   int hard_regno;
1629   ira_allocno_t a;
1630   ira_copy_t cp, next_cp;
1631   ira_allocno_iterator ai;
1632   
1633   FOR_EACH_ALLOCNO (a, ai)
1634     {
1635       if (ALLOCNO_CAP_MEMBER (a) != NULL)
1636         /* It is a cap. */
1637         continue;
1638       hard_regno = ALLOCNO_HARD_REGNO (a);
1639       if (hard_regno >= 0)
1640         continue;
1641       for (cp = ALLOCNO_COPIES (a); cp != NULL; cp = next_cp)
1642         if (cp->first == a)
1643           next_cp = cp->next_first_allocno_copy;
1644         else
1645           {
1646             next_cp = cp->next_second_allocno_copy;
1647             if (internal_flag_ira_verbose > 4 && ira_dump_file != NULL
1648                 && cp->insn != NULL_RTX
1649                 && ALLOCNO_HARD_REGNO (cp->first) == hard_regno)
1650               fprintf (ira_dump_file,
1651                        "        Redundant move from %d(freq %d):%d\n",
1652                        INSN_UID (cp->insn), cp->freq, hard_regno);
1653           }
1654     }
1655 }
1656 #endif
1657
1658 /* Setup preferred and alternative classes for new pseudo-registers
1659    created by IRA starting with START.  */
1660 static void
1661 setup_preferred_alternate_classes_for_new_pseudos (int start)
1662 {
1663   int i, old_regno;
1664   int max_regno = max_reg_num ();
1665
1666   for (i = start; i < max_regno; i++)
1667     {
1668       old_regno = ORIGINAL_REGNO (regno_reg_rtx[i]);
1669       ira_assert (i != old_regno); 
1670       setup_reg_classes (i, reg_preferred_class (old_regno),
1671                          reg_alternate_class (old_regno));
1672       if (internal_flag_ira_verbose > 2 && ira_dump_file != NULL)
1673         fprintf (ira_dump_file,
1674                  "    New r%d: setting preferred %s, alternative %s\n",
1675                  i, reg_class_names[reg_preferred_class (old_regno)],
1676                  reg_class_names[reg_alternate_class (old_regno)]);
1677     }
1678 }
1679
1680 \f
1681
1682 /* Regional allocation can create new pseudo-registers.  This function
1683    expands some arrays for pseudo-registers.  */
1684 static void
1685 expand_reg_info (int old_size)
1686 {
1687   int i;
1688   int size = max_reg_num ();
1689
1690   resize_reg_info ();
1691   for (i = old_size; i < size; i++)
1692     {
1693       reg_renumber[i] = -1;
1694       setup_reg_classes (i, GENERAL_REGS, ALL_REGS);
1695     }
1696 }
1697
1698 /* Return TRUE if there is too high register pressure in the function.
1699    It is used to decide when stack slot sharing is worth to do.  */
1700 static bool
1701 too_high_register_pressure_p (void)
1702 {
1703   int i;
1704   enum reg_class cover_class;
1705   
1706   for (i = 0; i < ira_reg_class_cover_size; i++)
1707     {
1708       cover_class = ira_reg_class_cover[i];
1709       if (ira_loop_tree_root->reg_pressure[cover_class] > 10000)
1710         return true;
1711     }
1712   return false;
1713 }
1714
1715 \f
1716
1717 /* All natural loops.  */
1718 struct loops ira_loops;
1719
1720 /* This is the main entry of IRA.  */
1721 static void
1722 ira (FILE *f)
1723 {
1724   int overall_cost_before, allocated_reg_info_size;
1725   bool loops_p;
1726   int max_regno_before_ira, ira_max_point_before_emit;
1727   int rebuild_p;
1728   int saved_flag_ira_share_spill_slots;
1729   basic_block bb;
1730
1731   timevar_push (TV_IRA);
1732
1733   if (flag_ira_verbose < 10)
1734     {
1735       internal_flag_ira_verbose = flag_ira_verbose;
1736       ira_dump_file = f;
1737     }
1738   else
1739     {
1740       internal_flag_ira_verbose = flag_ira_verbose - 10;
1741       ira_dump_file = stderr;
1742     }
1743
1744   setup_prohibited_mode_move_regs ();
1745
1746   df_note_add_problem ();
1747
1748   if (optimize == 1)
1749     {
1750       df_live_add_problem ();
1751       df_live_set_all_dirty ();
1752     }
1753 #ifdef ENABLE_CHECKING
1754   df->changeable_flags |= DF_VERIFY_SCHEDULED;
1755 #endif
1756   df_analyze ();
1757   df_clear_flags (DF_NO_INSN_RESCAN);
1758   regstat_init_n_sets_and_refs ();
1759   regstat_compute_ri ();
1760
1761   /* If we are not optimizing, then this is the only place before
1762      register allocation where dataflow is done.  And that is needed
1763      to generate these warnings.  */
1764   if (warn_clobbered)
1765     generate_setjmp_warnings ();
1766
1767   rebuild_p = update_equiv_regs ();
1768
1769 #ifndef IRA_NO_OBSTACK
1770   gcc_obstack_init (&ira_obstack);
1771 #endif
1772   bitmap_obstack_initialize (&ira_bitmap_obstack);
1773   if (optimize)
1774     {      
1775       max_regno = max_reg_num ();
1776       ira_reg_equiv_len = max_regno;
1777       ira_reg_equiv_invariant_p
1778         = (bool *) ira_allocate (max_regno * sizeof (bool));
1779       memset (ira_reg_equiv_invariant_p, 0, max_regno * sizeof (bool));
1780       ira_reg_equiv_const = (rtx *) ira_allocate (max_regno * sizeof (rtx));
1781       memset (ira_reg_equiv_const, 0, max_regno * sizeof (rtx));
1782       find_reg_equiv_invariant_const ();
1783       if (rebuild_p)
1784         {
1785           timevar_push (TV_JUMP);
1786           rebuild_jump_labels (get_insns ());
1787           purge_all_dead_edges ();
1788           timevar_pop (TV_JUMP);
1789         }
1790     }
1791
1792   max_regno_before_ira = allocated_reg_info_size = max_reg_num ();
1793   allocate_reg_info ();
1794   setup_eliminable_regset ();
1795       
1796   ira_overall_cost = ira_reg_cost = ira_mem_cost = 0;
1797   ira_load_cost = ira_store_cost = ira_shuffle_cost = 0;
1798   ira_move_loops_num = ira_additional_jumps_num = 0;
1799   
1800   ira_assert (current_loops == NULL);
1801   flow_loops_find (&ira_loops);
1802   current_loops = &ira_loops;
1803       
1804   if (internal_flag_ira_verbose > 0 && ira_dump_file != NULL)
1805     fprintf (ira_dump_file, "Building IRA IR\n");
1806   loops_p = ira_build (optimize
1807                        && (flag_ira_algorithm == IRA_ALGORITHM_REGIONAL
1808                            || flag_ira_algorithm == IRA_ALGORITHM_MIXED));
1809
1810   saved_flag_ira_share_spill_slots = flag_ira_share_spill_slots;
1811   if (too_high_register_pressure_p ())
1812     /* It is just wasting compiler's time to pack spilled pseudos into
1813        stack slots in this case -- prohibit it.  */ 
1814     flag_ira_share_spill_slots = FALSE;
1815
1816   ira_color ();
1817       
1818   ira_max_point_before_emit = ira_max_point;
1819       
1820   ira_emit (loops_p);
1821   
1822   if (optimize)
1823     {
1824       max_regno = max_reg_num ();
1825       
1826       if (! loops_p)
1827         ira_initiate_assign ();
1828       else
1829         {
1830           expand_reg_info (allocated_reg_info_size);
1831           setup_preferred_alternate_classes_for_new_pseudos
1832             (allocated_reg_info_size);
1833           allocated_reg_info_size = max_regno;
1834           
1835           if (internal_flag_ira_verbose > 0 && ira_dump_file != NULL)
1836             fprintf (ira_dump_file, "Flattening IR\n");
1837           ira_flattening (max_regno_before_ira, ira_max_point_before_emit);
1838           /* New insns were generated: add notes and recalculate live
1839              info.  */
1840           df_analyze ();
1841           
1842           flow_loops_find (&ira_loops);
1843           current_loops = &ira_loops;
1844
1845           setup_allocno_assignment_flags ();
1846           ira_initiate_assign ();
1847           ira_reassign_conflict_allocnos (max_regno);
1848         }
1849     }
1850
1851   setup_reg_renumber ();
1852   
1853   calculate_allocation_cost ();
1854   
1855 #ifdef ENABLE_IRA_CHECKING
1856   if (optimize)
1857     check_allocation ();
1858 #endif
1859       
1860   delete_trivially_dead_insns (get_insns (), max_reg_num ());
1861   max_regno = max_reg_num ();
1862   
1863   /* Determine if the current function is a leaf before running IRA
1864      since this can impact optimizations done by the prologue and
1865      epilogue thus changing register elimination offsets.  */
1866   current_function_is_leaf = leaf_function_p ();
1867   
1868   /* And the reg_equiv_memory_loc array.  */
1869   VEC_safe_grow (rtx, gc, reg_equiv_memory_loc_vec, max_regno);
1870   memset (VEC_address (rtx, reg_equiv_memory_loc_vec), 0,
1871           sizeof (rtx) * max_regno);
1872   reg_equiv_memory_loc = VEC_address (rtx, reg_equiv_memory_loc_vec);
1873
1874   if (max_regno != max_regno_before_ira)
1875     {
1876       regstat_free_n_sets_and_refs ();
1877       regstat_free_ri ();
1878       regstat_init_n_sets_and_refs ();
1879       regstat_compute_ri ();
1880     }
1881
1882   allocate_initial_values (reg_equiv_memory_loc);
1883
1884   overall_cost_before = ira_overall_cost;
1885   if (optimize)
1886     {
1887       fix_reg_equiv_init ();
1888       
1889 #ifdef ENABLE_IRA_CHECKING
1890       print_redundant_copies ();
1891 #endif
1892
1893       ira_spilled_reg_stack_slots_num = 0;
1894       ira_spilled_reg_stack_slots
1895         = ((struct ira_spilled_reg_stack_slot *)
1896            ira_allocate (max_regno
1897                          * sizeof (struct ira_spilled_reg_stack_slot)));
1898       memset (ira_spilled_reg_stack_slots, 0,
1899               max_regno * sizeof (struct ira_spilled_reg_stack_slot));
1900     }
1901   
1902   timevar_pop (TV_IRA);
1903
1904   timevar_push (TV_RELOAD);
1905   df_set_flags (DF_NO_INSN_RESCAN);
1906   build_insn_chain ();
1907
1908   reload_completed = !reload (get_insns (), optimize > 0);
1909
1910   timevar_pop (TV_RELOAD);
1911
1912   timevar_push (TV_IRA);
1913
1914   if (optimize)
1915     {
1916       ira_free (ira_spilled_reg_stack_slots);
1917       
1918       ira_finish_assign ();
1919       
1920     }  
1921   if (internal_flag_ira_verbose > 0 && ira_dump_file != NULL
1922       && overall_cost_before != ira_overall_cost)
1923     fprintf (ira_dump_file, "+++Overall after reload %d\n", ira_overall_cost);
1924   ira_destroy ();
1925   
1926   flag_ira_share_spill_slots = saved_flag_ira_share_spill_slots;
1927
1928   flow_loops_free (&ira_loops);
1929   free_dominance_info (CDI_DOMINATORS);
1930   FOR_ALL_BB (bb)
1931     bb->loop_father = NULL;
1932   current_loops = NULL;
1933
1934   regstat_free_ri ();
1935   regstat_free_n_sets_and_refs ();
1936       
1937   if (optimize)
1938     {
1939       cleanup_cfg (CLEANUP_EXPENSIVE);
1940       
1941       ira_free (ira_reg_equiv_invariant_p);
1942       ira_free (ira_reg_equiv_const);
1943     }
1944
1945   bitmap_obstack_release (&ira_bitmap_obstack);
1946 #ifndef IRA_NO_OBSTACK
1947   obstack_free (&ira_obstack, NULL);
1948 #endif
1949
1950   /* The code after the reload has changed so much that at this point
1951      we might as well just rescan everything.  Not that
1952      df_rescan_all_insns is not going to help here because it does not
1953      touch the artificial uses and defs.  */
1954   df_finish_pass (true);
1955   if (optimize > 1)
1956     df_live_add_problem ();
1957   df_scan_alloc (NULL);
1958   df_scan_blocks ();
1959
1960   if (optimize)
1961     df_analyze ();
1962
1963   timevar_pop (TV_IRA);
1964 }
1965
1966 \f
1967
1968 static bool
1969 gate_ira (void)
1970 {
1971   return flag_ira != 0;
1972 }
1973
1974 /* Run the integrated register allocator.  */
1975 static unsigned int
1976 rest_of_handle_ira (void)
1977 {
1978   ira (dump_file);
1979   return 0;
1980 }
1981
1982 struct rtl_opt_pass pass_ira =
1983 {
1984  {
1985   RTL_PASS,
1986   "ira",                                /* name */
1987   gate_ira,                             /* gate */
1988   rest_of_handle_ira,                   /* execute */
1989   NULL,                                 /* sub */
1990   NULL,                                 /* next */
1991   0,                                    /* static_pass_number */
1992   0,                                    /* tv_id */
1993   0,                                    /* properties_required */
1994   0,                                    /* properties_provided */
1995   0,                                    /* properties_destroyed */
1996   0,                                    /* todo_flags_start */
1997   TODO_dump_func |
1998   TODO_ggc_collect                      /* todo_flags_finish */
1999  }
2000 };