OSDN Git Service

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