aarch64 - Set the mode for the unspec in speculation_tracker insn.
[platform/upstream/linaro-gcc.git] / gcc / ira.c
1 /* Integrated Register Allocator (IRA) entry point.
2    Copyright (C) 2006-2016 Free Software Foundation, Inc.
3    Contributed by Vladimir Makarov <vmakarov@redhat.com>.
4
5 This file is part of GCC.
6
7 GCC is free software; you can redistribute it and/or modify it under
8 the terms of the GNU General Public License as published by the Free
9 Software Foundation; either version 3, or (at your option) any later
10 version.
11
12 GCC is distributed in the hope that it will be useful, but WITHOUT ANY
13 WARRANTY; without even the implied warranty of MERCHANTABILITY or
14 FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
15 for more details.
16
17 You should have received a copy of the GNU General Public License
18 along with GCC; see the file COPYING3.  If not see
19 <http://www.gnu.org/licenses/>.  */
20
21 /* The integrated register allocator (IRA) is a
22    regional register allocator performing graph coloring on a top-down
23    traversal of nested regions.  Graph coloring in a region is based
24    on Chaitin-Briggs algorithm.  It is called integrated because
25    register coalescing, register live range splitting, and choosing a
26    better hard register are done on-the-fly during coloring.  Register
27    coalescing and choosing a cheaper hard register is done by hard
28    register preferencing during hard register assigning.  The live
29    range splitting is a byproduct of the regional register allocation.
30
31    Major IRA notions are:
32
33      o *Region* is a part of CFG where graph coloring based on
34        Chaitin-Briggs algorithm is done.  IRA can work on any set of
35        nested CFG regions forming a tree.  Currently the regions are
36        the entire function for the root region and natural loops for
37        the other regions.  Therefore data structure representing a
38        region is called loop_tree_node.
39
40      o *Allocno class* is a register class used for allocation of
41        given allocno.  It means that only hard register of given
42        register class can be assigned to given allocno.  In reality,
43        even smaller subset of (*profitable*) hard registers can be
44        assigned.  In rare cases, the subset can be even smaller
45        because our modification of Chaitin-Briggs algorithm requires
46        that sets of hard registers can be assigned to allocnos forms a
47        forest, i.e. the sets can be ordered in a way where any
48        previous set is not intersected with given set or is a superset
49        of given set.
50
51      o *Pressure class* is a register class belonging to a set of
52        register classes containing all of the hard-registers available
53        for register allocation.  The set of all pressure classes for a
54        target is defined in the corresponding machine-description file
55        according some criteria.  Register pressure is calculated only
56        for pressure classes and it affects some IRA decisions as
57        forming allocation regions.
58
59      o *Allocno* represents the live range of a pseudo-register in a
60        region.  Besides the obvious attributes like the corresponding
61        pseudo-register number, allocno class, conflicting allocnos and
62        conflicting hard-registers, there are a few allocno attributes
63        which are important for understanding the allocation algorithm:
64
65        - *Live ranges*.  This is a list of ranges of *program points*
66          where the allocno lives.  Program points represent places
67          where a pseudo can be born or become dead (there are
68          approximately two times more program points than the insns)
69          and they are represented by integers starting with 0.  The
70          live ranges are used to find conflicts between allocnos.
71          They also play very important role for the transformation of
72          the IRA internal representation of several regions into a one
73          region representation.  The later is used during the reload
74          pass work because each allocno represents all of the
75          corresponding pseudo-registers.
76
77        - *Hard-register costs*.  This is a vector of size equal to the
78          number of available hard-registers of the allocno class.  The
79          cost of a callee-clobbered hard-register for an allocno is
80          increased by the cost of save/restore code around the calls
81          through the given allocno's life.  If the allocno is a move
82          instruction operand and another operand is a hard-register of
83          the allocno class, the cost of the hard-register is decreased
84          by the move cost.
85
86          When an allocno is assigned, the hard-register with minimal
87          full cost is used.  Initially, a hard-register's full cost is
88          the corresponding value from the hard-register's cost vector.
89          If the allocno is connected by a *copy* (see below) to
90          another allocno which has just received a hard-register, the
91          cost of the hard-register is decreased.  Before choosing a
92          hard-register for an allocno, the allocno's current costs of
93          the hard-registers are modified by the conflict hard-register
94          costs of all of the conflicting allocnos which are not
95          assigned yet.
96
97        - *Conflict hard-register costs*.  This is a vector of the same
98          size as the hard-register costs vector.  To permit an
99          unassigned allocno to get a better hard-register, IRA uses
100          this vector to calculate the final full cost of the
101          available hard-registers.  Conflict hard-register costs of an
102          unassigned allocno are also changed with a change of the
103          hard-register cost of the allocno when a copy involving the
104          allocno is processed as described above.  This is done to
105          show other unassigned allocnos that a given allocno prefers
106          some hard-registers in order to remove the move instruction
107          corresponding to the copy.
108
109      o *Cap*.  If a pseudo-register does not live in a region but
110        lives in a nested region, IRA creates a special allocno called
111        a cap in the outer region.  A region cap is also created for a
112        subregion cap.
113
114      o *Copy*.  Allocnos can be connected by copies.  Copies are used
115        to modify hard-register costs for allocnos during coloring.
116        Such modifications reflects a preference to use the same
117        hard-register for the allocnos connected by copies.  Usually
118        copies are created for move insns (in this case it results in
119        register coalescing).  But IRA also creates copies for operands
120        of an insn which should be assigned to the same hard-register
121        due to constraints in the machine description (it usually
122        results in removing a move generated in reload to satisfy
123        the constraints) and copies referring to the allocno which is
124        the output operand of an instruction and the allocno which is
125        an input operand dying in the instruction (creation of such
126        copies results in less register shuffling).  IRA *does not*
127        create copies between the same register allocnos from different
128        regions because we use another technique for propagating
129        hard-register preference on the borders of regions.
130
131    Allocnos (including caps) for the upper region in the region tree
132    *accumulate* information important for coloring from allocnos with
133    the same pseudo-register from nested regions.  This includes
134    hard-register and memory costs, conflicts with hard-registers,
135    allocno conflicts, allocno copies and more.  *Thus, attributes for
136    allocnos in a region have the same values as if the region had no
137    subregions*.  It means that attributes for allocnos in the
138    outermost region corresponding to the function have the same values
139    as though the allocation used only one region which is the entire
140    function.  It also means that we can look at IRA work as if the
141    first IRA did allocation for all function then it improved the
142    allocation for loops then their subloops and so on.
143
144    IRA major passes are:
145
146      o Building IRA internal representation which consists of the
147        following subpasses:
148
149        * First, IRA builds regions and creates allocnos (file
150          ira-build.c) and initializes most of their attributes.
151
152        * Then IRA finds an allocno class for each allocno and
153          calculates its initial (non-accumulated) cost of memory and
154          each hard-register of its allocno class (file ira-cost.c).
155
156        * IRA creates live ranges of each allocno, calculates register
157          pressure for each pressure class in each region, sets up
158          conflict hard registers for each allocno and info about calls
159          the allocno lives through (file ira-lives.c).
160
161        * IRA removes low register pressure loops from the regions
162          mostly to speed IRA up (file ira-build.c).
163
164        * IRA propagates accumulated allocno info from lower region
165          allocnos to corresponding upper region allocnos (file
166          ira-build.c).
167
168        * IRA creates all caps (file ira-build.c).
169
170        * Having live-ranges of allocnos and their classes, IRA creates
171          conflicting allocnos for each allocno.  Conflicting allocnos
172          are stored as a bit vector or array of pointers to the
173          conflicting allocnos whatever is more profitable (file
174          ira-conflicts.c).  At this point IRA creates allocno copies.
175
176      o Coloring.  Now IRA has all necessary info to start graph coloring
177        process.  It is done in each region on top-down traverse of the
178        region tree (file ira-color.c).  There are following subpasses:
179
180        * Finding profitable hard registers of corresponding allocno
181          class for each allocno.  For example, only callee-saved hard
182          registers are frequently profitable for allocnos living
183          through colors.  If the profitable hard register set of
184          allocno does not form a tree based on subset relation, we use
185          some approximation to form the tree.  This approximation is
186          used to figure out trivial colorability of allocnos.  The
187          approximation is a pretty rare case.
188
189        * Putting allocnos onto the coloring stack.  IRA uses Briggs
190          optimistic coloring which is a major improvement over
191          Chaitin's coloring.  Therefore IRA does not spill allocnos at
192          this point.  There is some freedom in the order of putting
193          allocnos on the stack which can affect the final result of
194          the allocation.  IRA uses some heuristics to improve the
195          order.  The major one is to form *threads* from colorable
196          allocnos and push them on the stack by threads.  Thread is a
197          set of non-conflicting colorable allocnos connected by
198          copies.  The thread contains allocnos from the colorable
199          bucket or colorable allocnos already pushed onto the coloring
200          stack.  Pushing thread allocnos one after another onto the
201          stack increases chances of removing copies when the allocnos
202          get the same hard reg.
203          
204          We also use a modification of Chaitin-Briggs algorithm which
205          works for intersected register classes of allocnos.  To
206          figure out trivial colorability of allocnos, the mentioned
207          above tree of hard register sets is used.  To get an idea how
208          the algorithm works in i386 example, let us consider an
209          allocno to which any general hard register can be assigned.
210          If the allocno conflicts with eight allocnos to which only
211          EAX register can be assigned, given allocno is still
212          trivially colorable because all conflicting allocnos might be
213          assigned only to EAX and all other general hard registers are
214          still free.
215
216          To get an idea of the used trivial colorability criterion, it
217          is also useful to read article "Graph-Coloring Register
218          Allocation for Irregular Architectures" by Michael D. Smith
219          and Glen Holloway.  Major difference between the article
220          approach and approach used in IRA is that Smith's approach
221          takes register classes only from machine description and IRA
222          calculate register classes from intermediate code too
223          (e.g. an explicit usage of hard registers in RTL code for
224          parameter passing can result in creation of additional
225          register classes which contain or exclude the hard
226          registers).  That makes IRA approach useful for improving
227          coloring even for architectures with regular register files
228          and in fact some benchmarking shows the improvement for
229          regular class architectures is even bigger than for irregular
230          ones.  Another difference is that Smith's approach chooses
231          intersection of classes of all insn operands in which a given
232          pseudo occurs.  IRA can use bigger classes if it is still
233          more profitable than memory usage.
234
235        * Popping the allocnos from the stack and assigning them hard
236          registers.  If IRA can not assign a hard register to an
237          allocno and the allocno is coalesced, IRA undoes the
238          coalescing and puts the uncoalesced allocnos onto the stack in
239          the hope that some such allocnos will get a hard register
240          separately.  If IRA fails to assign hard register or memory
241          is more profitable for it, IRA spills the allocno.  IRA
242          assigns the allocno the hard-register with minimal full
243          allocation cost which reflects the cost of usage of the
244          hard-register for the allocno and cost of usage of the
245          hard-register for allocnos conflicting with given allocno.
246
247        * Chaitin-Briggs coloring assigns as many pseudos as possible
248          to hard registers.  After coloring we try to improve
249          allocation with cost point of view.  We improve the
250          allocation by spilling some allocnos and assigning the freed
251          hard registers to other allocnos if it decreases the overall
252          allocation cost.
253
254        * After allocno assigning in the region, IRA modifies the hard
255          register and memory costs for the corresponding allocnos in
256          the subregions to reflect the cost of possible loads, stores,
257          or moves on the border of the region and its subregions.
258          When default regional allocation algorithm is used
259          (-fira-algorithm=mixed), IRA just propagates the assignment
260          for allocnos if the register pressure in the region for the
261          corresponding pressure class is less than number of available
262          hard registers for given pressure class.
263
264      o Spill/restore code moving.  When IRA performs an allocation
265        by traversing regions in top-down order, it does not know what
266        happens below in the region tree.  Therefore, sometimes IRA
267        misses opportunities to perform a better allocation.  A simple
268        optimization tries to improve allocation in a region having
269        subregions and containing in another region.  If the
270        corresponding allocnos in the subregion are spilled, it spills
271        the region allocno if it is profitable.  The optimization
272        implements a simple iterative algorithm performing profitable
273        transformations while they are still possible.  It is fast in
274        practice, so there is no real need for a better time complexity
275        algorithm.
276
277      o Code change.  After coloring, two allocnos representing the
278        same pseudo-register outside and inside a region respectively
279        may be assigned to different locations (hard-registers or
280        memory).  In this case IRA creates and uses a new
281        pseudo-register inside the region and adds code to move allocno
282        values on the region's borders.  This is done during top-down
283        traversal of the regions (file ira-emit.c).  In some
284        complicated cases IRA can create a new allocno to move allocno
285        values (e.g. when a swap of values stored in two hard-registers
286        is needed).  At this stage, the new allocno is marked as
287        spilled.  IRA still creates the pseudo-register and the moves
288        on the region borders even when both allocnos were assigned to
289        the same hard-register.  If the reload pass spills a
290        pseudo-register for some reason, the effect will be smaller
291        because another allocno will still be in the hard-register.  In
292        most cases, this is better then spilling both allocnos.  If
293        reload does not change the allocation for the two
294        pseudo-registers, the trivial move will be removed by
295        post-reload optimizations.  IRA does not generate moves for
296        allocnos assigned to the same hard register when the default
297        regional allocation algorithm is used and the register pressure
298        in the region for the corresponding pressure class is less than
299        number of available hard registers for given pressure class.
300        IRA also does some optimizations to remove redundant stores and
301        to reduce code duplication on the region borders.
302
303      o Flattening internal representation.  After changing code, IRA
304        transforms its internal representation for several regions into
305        one region representation (file ira-build.c).  This process is
306        called IR flattening.  Such process is more complicated than IR
307        rebuilding would be, but is much faster.
308
309      o After IR flattening, IRA tries to assign hard registers to all
310        spilled allocnos.  This is implemented by a simple and fast
311        priority coloring algorithm (see function
312        ira_reassign_conflict_allocnos::ira-color.c).  Here new allocnos
313        created during the code change pass can be assigned to hard
314        registers.
315
316      o At the end IRA calls the reload pass.  The reload pass
317        communicates with IRA through several functions in file
318        ira-color.c to improve its decisions in
319
320        * sharing stack slots for the spilled pseudos based on IRA info
321          about pseudo-register conflicts.
322
323        * reassigning hard-registers to all spilled pseudos at the end
324          of each reload iteration.
325
326        * choosing a better hard-register to spill based on IRA info
327          about pseudo-register live ranges and the register pressure
328          in places where the pseudo-register lives.
329
330    IRA uses a lot of data representing the target processors.  These
331    data are initialized in file ira.c.
332
333    If function has no loops (or the loops are ignored when
334    -fira-algorithm=CB is used), we have classic Chaitin-Briggs
335    coloring (only instead of separate pass of coalescing, we use hard
336    register preferencing).  In such case, IRA works much faster
337    because many things are not made (like IR flattening, the
338    spill/restore optimization, and the code change).
339
340    Literature is worth to read for better understanding the code:
341
342    o Preston Briggs, Keith D. Cooper, Linda Torczon.  Improvements to
343      Graph Coloring Register Allocation.
344
345    o David Callahan, Brian Koblenz.  Register allocation via
346      hierarchical graph coloring.
347
348    o Keith Cooper, Anshuman Dasgupta, Jason Eckhardt. Revisiting Graph
349      Coloring Register Allocation: A Study of the Chaitin-Briggs and
350      Callahan-Koblenz Algorithms.
351
352    o Guei-Yuan Lueh, Thomas Gross, and Ali-Reza Adl-Tabatabai. Global
353      Register Allocation Based on Graph Fusion.
354
355    o Michael D. Smith and Glenn Holloway.  Graph-Coloring Register
356      Allocation for Irregular Architectures
357
358    o Vladimir Makarov. The Integrated Register Allocator for GCC.
359
360    o Vladimir Makarov.  The top-down register allocator for irregular
361      register file architectures.
362
363 */
364
365
366 #include "config.h"
367 #include "system.h"
368 #include "coretypes.h"
369 #include "backend.h"
370 #include "target.h"
371 #include "rtl.h"
372 #include "tree.h"
373 #include "df.h"
374 #include "tm_p.h"
375 #include "insn-config.h"
376 #include "regs.h"
377 #include "ira.h"
378 #include "ira-int.h"
379 #include "diagnostic-core.h"
380 #include "cfgrtl.h"
381 #include "cfgbuild.h"
382 #include "cfgcleanup.h"
383 #include "expr.h"
384 #include "tree-pass.h"
385 #include "output.h"
386 #include "reload.h"
387 #include "cfgloop.h"
388 #include "lra.h"
389 #include "dce.h"
390 #include "dbgcnt.h"
391 #include "rtl-iter.h"
392 #include "shrink-wrap.h"
393 #include "print-rtl.h"
394
395 struct target_ira default_target_ira;
396 struct target_ira_int default_target_ira_int;
397 #if SWITCHABLE_TARGET
398 struct target_ira *this_target_ira = &default_target_ira;
399 struct target_ira_int *this_target_ira_int = &default_target_ira_int;
400 #endif
401
402 /* A modified value of flag `-fira-verbose' used internally.  */
403 int internal_flag_ira_verbose;
404
405 /* Dump file of the allocator if it is not NULL.  */
406 FILE *ira_dump_file;
407
408 /* The number of elements in the following array.  */
409 int ira_spilled_reg_stack_slots_num;
410
411 /* The following array contains info about spilled pseudo-registers
412    stack slots used in current function so far.  */
413 struct ira_spilled_reg_stack_slot *ira_spilled_reg_stack_slots;
414
415 /* Correspondingly overall cost of the allocation, overall cost before
416    reload, cost of the allocnos assigned to hard-registers, cost of
417    the allocnos assigned to memory, cost of loads, stores and register
418    move insns generated for pseudo-register live range splitting (see
419    ira-emit.c).  */
420 int64_t ira_overall_cost, overall_cost_before;
421 int64_t ira_reg_cost, ira_mem_cost;
422 int64_t ira_load_cost, ira_store_cost, ira_shuffle_cost;
423 int ira_move_loops_num, ira_additional_jumps_num;
424
425 /* All registers that can be eliminated.  */
426
427 HARD_REG_SET eliminable_regset;
428
429 /* Value of max_reg_num () before IRA work start.  This value helps
430    us to recognize a situation when new pseudos were created during
431    IRA work.  */
432 static int max_regno_before_ira;
433
434 /* Temporary hard reg set used for a different calculation.  */
435 static HARD_REG_SET temp_hard_regset;
436
437 #define last_mode_for_init_move_cost \
438   (this_target_ira_int->x_last_mode_for_init_move_cost)
439 \f
440
441 /* The function sets up the map IRA_REG_MODE_HARD_REGSET.  */
442 static void
443 setup_reg_mode_hard_regset (void)
444 {
445   int i, m, hard_regno;
446
447   for (m = 0; m < NUM_MACHINE_MODES; m++)
448     for (hard_regno = 0; hard_regno < FIRST_PSEUDO_REGISTER; hard_regno++)
449       {
450         CLEAR_HARD_REG_SET (ira_reg_mode_hard_regset[hard_regno][m]);
451         for (i = hard_regno_nregs[hard_regno][m] - 1; i >= 0; i--)
452           if (hard_regno + i < FIRST_PSEUDO_REGISTER)
453             SET_HARD_REG_BIT (ira_reg_mode_hard_regset[hard_regno][m],
454                               hard_regno + i);
455       }
456 }
457
458 \f
459 #define no_unit_alloc_regs \
460   (this_target_ira_int->x_no_unit_alloc_regs)
461
462 /* The function sets up the three arrays declared above.  */
463 static void
464 setup_class_hard_regs (void)
465 {
466   int cl, i, hard_regno, n;
467   HARD_REG_SET processed_hard_reg_set;
468
469   ira_assert (SHRT_MAX >= FIRST_PSEUDO_REGISTER);
470   for (cl = (int) N_REG_CLASSES - 1; cl >= 0; cl--)
471     {
472       COPY_HARD_REG_SET (temp_hard_regset, reg_class_contents[cl]);
473       AND_COMPL_HARD_REG_SET (temp_hard_regset, no_unit_alloc_regs);
474       CLEAR_HARD_REG_SET (processed_hard_reg_set);
475       for (i = 0; i < FIRST_PSEUDO_REGISTER; i++)
476         {
477           ira_non_ordered_class_hard_regs[cl][i] = -1;
478           ira_class_hard_reg_index[cl][i] = -1;
479         }
480       for (n = 0, i = 0; i < FIRST_PSEUDO_REGISTER; i++)
481         {
482 #ifdef REG_ALLOC_ORDER
483           hard_regno = reg_alloc_order[i];
484 #else
485           hard_regno = i;
486 #endif
487           if (TEST_HARD_REG_BIT (processed_hard_reg_set, hard_regno))
488             continue;
489           SET_HARD_REG_BIT (processed_hard_reg_set, hard_regno);
490           if (! TEST_HARD_REG_BIT (temp_hard_regset, hard_regno))
491             ira_class_hard_reg_index[cl][hard_regno] = -1;
492           else
493             {
494               ira_class_hard_reg_index[cl][hard_regno] = n;
495               ira_class_hard_regs[cl][n++] = hard_regno;
496             }
497         }
498       ira_class_hard_regs_num[cl] = n;
499       for (n = 0, i = 0; i < FIRST_PSEUDO_REGISTER; i++)
500         if (TEST_HARD_REG_BIT (temp_hard_regset, i))
501           ira_non_ordered_class_hard_regs[cl][n++] = i;
502       ira_assert (ira_class_hard_regs_num[cl] == n);
503     }
504 }
505
506 /* Set up global variables defining info about hard registers for the
507    allocation.  These depend on USE_HARD_FRAME_P whose TRUE value means
508    that we can use the hard frame pointer for the allocation.  */
509 static void
510 setup_alloc_regs (bool use_hard_frame_p)
511 {
512 #ifdef ADJUST_REG_ALLOC_ORDER
513   ADJUST_REG_ALLOC_ORDER;
514 #endif
515   COPY_HARD_REG_SET (no_unit_alloc_regs, fixed_reg_set);
516   if (! use_hard_frame_p)
517     SET_HARD_REG_BIT (no_unit_alloc_regs, HARD_FRAME_POINTER_REGNUM);
518   setup_class_hard_regs ();
519 }
520
521 \f
522
523 #define alloc_reg_class_subclasses \
524   (this_target_ira_int->x_alloc_reg_class_subclasses)
525
526 /* Initialize the table of subclasses of each reg class.  */
527 static void
528 setup_reg_subclasses (void)
529 {
530   int i, j;
531   HARD_REG_SET temp_hard_regset2;
532
533   for (i = 0; i < N_REG_CLASSES; i++)
534     for (j = 0; j < N_REG_CLASSES; j++)
535       alloc_reg_class_subclasses[i][j] = LIM_REG_CLASSES;
536
537   for (i = 0; i < N_REG_CLASSES; i++)
538     {
539       if (i == (int) NO_REGS)
540         continue;
541
542       COPY_HARD_REG_SET (temp_hard_regset, reg_class_contents[i]);
543       AND_COMPL_HARD_REG_SET (temp_hard_regset, no_unit_alloc_regs);
544       if (hard_reg_set_empty_p (temp_hard_regset))
545         continue;
546       for (j = 0; j < N_REG_CLASSES; j++)
547         if (i != j)
548           {
549             enum reg_class *p;
550
551             COPY_HARD_REG_SET (temp_hard_regset2, reg_class_contents[j]);
552             AND_COMPL_HARD_REG_SET (temp_hard_regset2, no_unit_alloc_regs);
553             if (! hard_reg_set_subset_p (temp_hard_regset,
554                                          temp_hard_regset2))
555               continue;
556             p = &alloc_reg_class_subclasses[j][0];
557             while (*p != LIM_REG_CLASSES) p++;
558             *p = (enum reg_class) i;
559           }
560     }
561 }
562
563 \f
564
565 /* Set up IRA_MEMORY_MOVE_COST and IRA_MAX_MEMORY_MOVE_COST.  */
566 static void
567 setup_class_subset_and_memory_move_costs (void)
568 {
569   int cl, cl2, mode, cost;
570   HARD_REG_SET temp_hard_regset2;
571
572   for (mode = 0; mode < MAX_MACHINE_MODE; mode++)
573     ira_memory_move_cost[mode][NO_REGS][0]
574       = ira_memory_move_cost[mode][NO_REGS][1] = SHRT_MAX;
575   for (cl = (int) N_REG_CLASSES - 1; cl >= 0; cl--)
576     {
577       if (cl != (int) NO_REGS)
578         for (mode = 0; mode < MAX_MACHINE_MODE; mode++)
579           {
580             ira_max_memory_move_cost[mode][cl][0]
581               = ira_memory_move_cost[mode][cl][0]
582               = memory_move_cost ((machine_mode) mode,
583                                   (reg_class_t) cl, false);
584             ira_max_memory_move_cost[mode][cl][1]
585               = ira_memory_move_cost[mode][cl][1]
586               = memory_move_cost ((machine_mode) mode,
587                                   (reg_class_t) cl, true);
588             /* Costs for NO_REGS are used in cost calculation on the
589                1st pass when the preferred register classes are not
590                known yet.  In this case we take the best scenario.  */
591             if (ira_memory_move_cost[mode][NO_REGS][0]
592                 > ira_memory_move_cost[mode][cl][0])
593               ira_max_memory_move_cost[mode][NO_REGS][0]
594                 = ira_memory_move_cost[mode][NO_REGS][0]
595                 = ira_memory_move_cost[mode][cl][0];
596             if (ira_memory_move_cost[mode][NO_REGS][1]
597                 > ira_memory_move_cost[mode][cl][1])
598               ira_max_memory_move_cost[mode][NO_REGS][1]
599                 = ira_memory_move_cost[mode][NO_REGS][1]
600                 = ira_memory_move_cost[mode][cl][1];
601           }
602     }
603   for (cl = (int) N_REG_CLASSES - 1; cl >= 0; cl--)
604     for (cl2 = (int) N_REG_CLASSES - 1; cl2 >= 0; cl2--)
605       {
606         COPY_HARD_REG_SET (temp_hard_regset, reg_class_contents[cl]);
607         AND_COMPL_HARD_REG_SET (temp_hard_regset, no_unit_alloc_regs);
608         COPY_HARD_REG_SET (temp_hard_regset2, reg_class_contents[cl2]);
609         AND_COMPL_HARD_REG_SET (temp_hard_regset2, no_unit_alloc_regs);
610         ira_class_subset_p[cl][cl2]
611           = hard_reg_set_subset_p (temp_hard_regset, temp_hard_regset2);
612         if (! hard_reg_set_empty_p (temp_hard_regset2)
613             && hard_reg_set_subset_p (reg_class_contents[cl2],
614                                       reg_class_contents[cl]))
615           for (mode = 0; mode < MAX_MACHINE_MODE; mode++)
616             {
617               cost = ira_memory_move_cost[mode][cl2][0];
618               if (cost > ira_max_memory_move_cost[mode][cl][0])
619                 ira_max_memory_move_cost[mode][cl][0] = cost;
620               cost = ira_memory_move_cost[mode][cl2][1];
621               if (cost > ira_max_memory_move_cost[mode][cl][1])
622                 ira_max_memory_move_cost[mode][cl][1] = cost;
623             }
624       }
625   for (cl = (int) N_REG_CLASSES - 1; cl >= 0; cl--)
626     for (mode = 0; mode < MAX_MACHINE_MODE; mode++)
627       {
628         ira_memory_move_cost[mode][cl][0]
629           = ira_max_memory_move_cost[mode][cl][0];
630         ira_memory_move_cost[mode][cl][1]
631           = ira_max_memory_move_cost[mode][cl][1];
632       }
633   setup_reg_subclasses ();
634 }
635
636 \f
637
638 /* Define the following macro if allocation through malloc if
639    preferable.  */
640 #define IRA_NO_OBSTACK
641
642 #ifndef IRA_NO_OBSTACK
643 /* Obstack used for storing all dynamic data (except bitmaps) of the
644    IRA.  */
645 static struct obstack ira_obstack;
646 #endif
647
648 /* Obstack used for storing all bitmaps of the IRA.  */
649 static struct bitmap_obstack ira_bitmap_obstack;
650
651 /* Allocate memory of size LEN for IRA data.  */
652 void *
653 ira_allocate (size_t len)
654 {
655   void *res;
656
657 #ifndef IRA_NO_OBSTACK
658   res = obstack_alloc (&ira_obstack, len);
659 #else
660   res = xmalloc (len);
661 #endif
662   return res;
663 }
664
665 /* Free memory ADDR allocated for IRA data.  */
666 void
667 ira_free (void *addr ATTRIBUTE_UNUSED)
668 {
669 #ifndef IRA_NO_OBSTACK
670   /* do nothing */
671 #else
672   free (addr);
673 #endif
674 }
675
676
677 /* Allocate and returns bitmap for IRA.  */
678 bitmap
679 ira_allocate_bitmap (void)
680 {
681   return BITMAP_ALLOC (&ira_bitmap_obstack);
682 }
683
684 /* Free bitmap B allocated for IRA.  */
685 void
686 ira_free_bitmap (bitmap b ATTRIBUTE_UNUSED)
687 {
688   /* do nothing */
689 }
690
691 \f
692
693 /* Output information about allocation of all allocnos (except for
694    caps) into file F.  */
695 void
696 ira_print_disposition (FILE *f)
697 {
698   int i, n, max_regno;
699   ira_allocno_t a;
700   basic_block bb;
701
702   fprintf (f, "Disposition:");
703   max_regno = max_reg_num ();
704   for (n = 0, i = FIRST_PSEUDO_REGISTER; i < max_regno; i++)
705     for (a = ira_regno_allocno_map[i];
706          a != NULL;
707          a = ALLOCNO_NEXT_REGNO_ALLOCNO (a))
708       {
709         if (n % 4 == 0)
710           fprintf (f, "\n");
711         n++;
712         fprintf (f, " %4d:r%-4d", ALLOCNO_NUM (a), ALLOCNO_REGNO (a));
713         if ((bb = ALLOCNO_LOOP_TREE_NODE (a)->bb) != NULL)
714           fprintf (f, "b%-3d", bb->index);
715         else
716           fprintf (f, "l%-3d", ALLOCNO_LOOP_TREE_NODE (a)->loop_num);
717         if (ALLOCNO_HARD_REGNO (a) >= 0)
718           fprintf (f, " %3d", ALLOCNO_HARD_REGNO (a));
719         else
720           fprintf (f, " mem");
721       }
722   fprintf (f, "\n");
723 }
724
725 /* Outputs information about allocation of all allocnos into
726    stderr.  */
727 void
728 ira_debug_disposition (void)
729 {
730   ira_print_disposition (stderr);
731 }
732
733 \f
734
735 /* Set up ira_stack_reg_pressure_class which is the biggest pressure
736    register class containing stack registers or NO_REGS if there are
737    no stack registers.  To find this class, we iterate through all
738    register pressure classes and choose the first register pressure
739    class containing all the stack registers and having the biggest
740    size.  */
741 static void
742 setup_stack_reg_pressure_class (void)
743 {
744   ira_stack_reg_pressure_class = NO_REGS;
745 #ifdef STACK_REGS
746   {
747     int i, best, size;
748     enum reg_class cl;
749     HARD_REG_SET temp_hard_regset2;
750
751     CLEAR_HARD_REG_SET (temp_hard_regset);
752     for (i = FIRST_STACK_REG; i <= LAST_STACK_REG; i++)
753       SET_HARD_REG_BIT (temp_hard_regset, i);
754     best = 0;
755     for (i = 0; i < ira_pressure_classes_num; i++)
756       {
757         cl = ira_pressure_classes[i];
758         COPY_HARD_REG_SET (temp_hard_regset2, temp_hard_regset);
759         AND_HARD_REG_SET (temp_hard_regset2, reg_class_contents[cl]);
760         size = hard_reg_set_size (temp_hard_regset2);
761         if (best < size)
762           {
763             best = size;
764             ira_stack_reg_pressure_class = cl;
765           }
766       }
767   }
768 #endif
769 }
770
771 /* Find pressure classes which are register classes for which we
772    calculate register pressure in IRA, register pressure sensitive
773    insn scheduling, and register pressure sensitive loop invariant
774    motion.
775
776    To make register pressure calculation easy, we always use
777    non-intersected register pressure classes.  A move of hard
778    registers from one register pressure class is not more expensive
779    than load and store of the hard registers.  Most likely an allocno
780    class will be a subset of a register pressure class and in many
781    cases a register pressure class.  That makes usage of register
782    pressure classes a good approximation to find a high register
783    pressure.  */
784 static void
785 setup_pressure_classes (void)
786 {
787   int cost, i, n, curr;
788   int cl, cl2;
789   enum reg_class pressure_classes[N_REG_CLASSES];
790   int m;
791   HARD_REG_SET temp_hard_regset2;
792   bool insert_p;
793
794   n = 0;
795   for (cl = 0; cl < N_REG_CLASSES; cl++)
796     {
797       if (ira_class_hard_regs_num[cl] == 0)
798         continue;
799       if (ira_class_hard_regs_num[cl] != 1
800           /* A register class without subclasses may contain a few
801              hard registers and movement between them is costly
802              (e.g. SPARC FPCC registers).  We still should consider it
803              as a candidate for a pressure class.  */
804           && alloc_reg_class_subclasses[cl][0] < cl)
805         {
806           /* Check that the moves between any hard registers of the
807              current class are not more expensive for a legal mode
808              than load/store of the hard registers of the current
809              class.  Such class is a potential candidate to be a
810              register pressure class.  */
811           for (m = 0; m < NUM_MACHINE_MODES; m++)
812             {
813               COPY_HARD_REG_SET (temp_hard_regset, reg_class_contents[cl]);
814               AND_COMPL_HARD_REG_SET (temp_hard_regset, no_unit_alloc_regs);
815               AND_COMPL_HARD_REG_SET (temp_hard_regset,
816                                       ira_prohibited_class_mode_regs[cl][m]);
817               if (hard_reg_set_empty_p (temp_hard_regset))
818                 continue;
819               ira_init_register_move_cost_if_necessary ((machine_mode) m);
820               cost = ira_register_move_cost[m][cl][cl];
821               if (cost <= ira_max_memory_move_cost[m][cl][1]
822                   || cost <= ira_max_memory_move_cost[m][cl][0])
823                 break;
824             }
825           if (m >= NUM_MACHINE_MODES)
826             continue;
827         }
828       curr = 0;
829       insert_p = true;
830       COPY_HARD_REG_SET (temp_hard_regset, reg_class_contents[cl]);
831       AND_COMPL_HARD_REG_SET (temp_hard_regset, no_unit_alloc_regs);
832       /* Remove so far added pressure classes which are subset of the
833          current candidate class.  Prefer GENERAL_REGS as a pressure
834          register class to another class containing the same
835          allocatable hard registers.  We do this because machine
836          dependent cost hooks might give wrong costs for the latter
837          class but always give the right cost for the former class
838          (GENERAL_REGS).  */
839       for (i = 0; i < n; i++)
840         {
841           cl2 = pressure_classes[i];
842           COPY_HARD_REG_SET (temp_hard_regset2, reg_class_contents[cl2]);
843           AND_COMPL_HARD_REG_SET (temp_hard_regset2, no_unit_alloc_regs);
844           if (hard_reg_set_subset_p (temp_hard_regset, temp_hard_regset2)
845               && (! hard_reg_set_equal_p (temp_hard_regset, temp_hard_regset2)
846                   || cl2 == (int) GENERAL_REGS))
847             {
848               pressure_classes[curr++] = (enum reg_class) cl2;
849               insert_p = false;
850               continue;
851             }
852           if (hard_reg_set_subset_p (temp_hard_regset2, temp_hard_regset)
853               && (! hard_reg_set_equal_p (temp_hard_regset2, temp_hard_regset)
854                   || cl == (int) GENERAL_REGS))
855             continue;
856           if (hard_reg_set_equal_p (temp_hard_regset2, temp_hard_regset))
857             insert_p = false;
858           pressure_classes[curr++] = (enum reg_class) cl2;
859         }
860       /* If the current candidate is a subset of a so far added
861          pressure class, don't add it to the list of the pressure
862          classes.  */
863       if (insert_p)
864         pressure_classes[curr++] = (enum reg_class) cl;
865       n = curr;
866     }
867 #ifdef ENABLE_IRA_CHECKING
868   {
869     HARD_REG_SET ignore_hard_regs;
870
871     /* Check pressure classes correctness: here we check that hard
872        registers from all register pressure classes contains all hard
873        registers available for the allocation.  */
874     CLEAR_HARD_REG_SET (temp_hard_regset);
875     CLEAR_HARD_REG_SET (temp_hard_regset2);
876     COPY_HARD_REG_SET (ignore_hard_regs, no_unit_alloc_regs);
877     for (cl = 0; cl < LIM_REG_CLASSES; cl++)
878       {
879         /* For some targets (like MIPS with MD_REGS), there are some
880            classes with hard registers available for allocation but
881            not able to hold value of any mode.  */
882         for (m = 0; m < NUM_MACHINE_MODES; m++)
883           if (contains_reg_of_mode[cl][m])
884             break;
885         if (m >= NUM_MACHINE_MODES)
886           {
887             IOR_HARD_REG_SET (ignore_hard_regs, reg_class_contents[cl]);
888             continue;
889           }
890         for (i = 0; i < n; i++)
891           if ((int) pressure_classes[i] == cl)
892             break;
893         IOR_HARD_REG_SET (temp_hard_regset2, reg_class_contents[cl]);
894         if (i < n)
895           IOR_HARD_REG_SET (temp_hard_regset, reg_class_contents[cl]);
896       }
897     for (i = 0; i < FIRST_PSEUDO_REGISTER; i++)
898       /* Some targets (like SPARC with ICC reg) have allocatable regs
899          for which no reg class is defined.  */
900       if (REGNO_REG_CLASS (i) == NO_REGS)
901         SET_HARD_REG_BIT (ignore_hard_regs, i);
902     AND_COMPL_HARD_REG_SET (temp_hard_regset, ignore_hard_regs);
903     AND_COMPL_HARD_REG_SET (temp_hard_regset2, ignore_hard_regs);
904     ira_assert (hard_reg_set_subset_p (temp_hard_regset2, temp_hard_regset));
905   }
906 #endif
907   ira_pressure_classes_num = 0;
908   for (i = 0; i < n; i++)
909     {
910       cl = (int) pressure_classes[i];
911       ira_reg_pressure_class_p[cl] = true;
912       ira_pressure_classes[ira_pressure_classes_num++] = (enum reg_class) cl;
913     }
914   setup_stack_reg_pressure_class ();
915 }
916
917 /* Set up IRA_UNIFORM_CLASS_P.  Uniform class is a register class
918    whose register move cost between any registers of the class is the
919    same as for all its subclasses.  We use the data to speed up the
920    2nd pass of calculations of allocno costs.  */
921 static void
922 setup_uniform_class_p (void)
923 {
924   int i, cl, cl2, m;
925
926   for (cl = 0; cl < N_REG_CLASSES; cl++)
927     {
928       ira_uniform_class_p[cl] = false;
929       if (ira_class_hard_regs_num[cl] == 0)
930         continue;
931       /* We can not use alloc_reg_class_subclasses here because move
932          cost hooks does not take into account that some registers are
933          unavailable for the subtarget.  E.g. for i686, INT_SSE_REGS
934          is element of alloc_reg_class_subclasses for GENERAL_REGS
935          because SSE regs are unavailable.  */
936       for (i = 0; (cl2 = reg_class_subclasses[cl][i]) != LIM_REG_CLASSES; i++)
937         {
938           if (ira_class_hard_regs_num[cl2] == 0)
939             continue;
940           for (m = 0; m < NUM_MACHINE_MODES; m++)
941             if (contains_reg_of_mode[cl][m] && contains_reg_of_mode[cl2][m])
942               {
943                 ira_init_register_move_cost_if_necessary ((machine_mode) m);
944                 if (ira_register_move_cost[m][cl][cl]
945                     != ira_register_move_cost[m][cl2][cl2])
946                   break;
947               }
948           if (m < NUM_MACHINE_MODES)
949             break;
950         }
951       if (cl2 == LIM_REG_CLASSES)
952         ira_uniform_class_p[cl] = true;
953     }
954 }
955
956 /* Set up IRA_ALLOCNO_CLASSES, IRA_ALLOCNO_CLASSES_NUM,
957    IRA_IMPORTANT_CLASSES, and IRA_IMPORTANT_CLASSES_NUM.
958
959    Target may have many subtargets and not all target hard registers can
960    be used for allocation, e.g. x86 port in 32-bit mode can not use
961    hard registers introduced in x86-64 like r8-r15).  Some classes
962    might have the same allocatable hard registers, e.g.  INDEX_REGS
963    and GENERAL_REGS in x86 port in 32-bit mode.  To decrease different
964    calculations efforts we introduce allocno classes which contain
965    unique non-empty sets of allocatable hard-registers.
966
967    Pseudo class cost calculation in ira-costs.c is very expensive.
968    Therefore we are trying to decrease number of classes involved in
969    such calculation.  Register classes used in the cost calculation
970    are called important classes.  They are allocno classes and other
971    non-empty classes whose allocatable hard register sets are inside
972    of an allocno class hard register set.  From the first sight, it
973    looks like that they are just allocno classes.  It is not true.  In
974    example of x86-port in 32-bit mode, allocno classes will contain
975    GENERAL_REGS but not LEGACY_REGS (because allocatable hard
976    registers are the same for the both classes).  The important
977    classes will contain GENERAL_REGS and LEGACY_REGS.  It is done
978    because a machine description insn constraint may refers for
979    LEGACY_REGS and code in ira-costs.c is mostly base on investigation
980    of the insn constraints.  */
981 static void
982 setup_allocno_and_important_classes (void)
983 {
984   int i, j, n, cl;
985   bool set_p;
986   HARD_REG_SET temp_hard_regset2;
987   static enum reg_class classes[LIM_REG_CLASSES + 1];
988
989   n = 0;
990   /* Collect classes which contain unique sets of allocatable hard
991      registers.  Prefer GENERAL_REGS to other classes containing the
992      same set of hard registers.  */
993   for (i = 0; i < LIM_REG_CLASSES; i++)
994     {
995       COPY_HARD_REG_SET (temp_hard_regset, reg_class_contents[i]);
996       AND_COMPL_HARD_REG_SET (temp_hard_regset, no_unit_alloc_regs);
997       for (j = 0; j < n; j++)
998         {
999           cl = classes[j];
1000           COPY_HARD_REG_SET (temp_hard_regset2, reg_class_contents[cl]);
1001           AND_COMPL_HARD_REG_SET (temp_hard_regset2,
1002                                   no_unit_alloc_regs);
1003           if (hard_reg_set_equal_p (temp_hard_regset,
1004                                     temp_hard_regset2))
1005             break;
1006         }
1007       if (j >= n)
1008         classes[n++] = (enum reg_class) i;
1009       else if (i == GENERAL_REGS)
1010         /* Prefer general regs.  For i386 example, it means that
1011            we prefer GENERAL_REGS over INDEX_REGS or LEGACY_REGS
1012            (all of them consists of the same available hard
1013            registers).  */
1014         classes[j] = (enum reg_class) i;
1015     }
1016   classes[n] = LIM_REG_CLASSES;
1017
1018   /* Set up classes which can be used for allocnos as classes
1019      containing non-empty unique sets of allocatable hard
1020      registers.  */
1021   ira_allocno_classes_num = 0;
1022   for (i = 0; (cl = classes[i]) != LIM_REG_CLASSES; i++)
1023     if (ira_class_hard_regs_num[cl] > 0)
1024       ira_allocno_classes[ira_allocno_classes_num++] = (enum reg_class) cl;
1025   ira_important_classes_num = 0;
1026   /* Add non-allocno classes containing to non-empty set of
1027      allocatable hard regs.  */
1028   for (cl = 0; cl < N_REG_CLASSES; cl++)
1029     if (ira_class_hard_regs_num[cl] > 0)
1030       {
1031         COPY_HARD_REG_SET (temp_hard_regset, reg_class_contents[cl]);
1032         AND_COMPL_HARD_REG_SET (temp_hard_regset, no_unit_alloc_regs);
1033         set_p = false;
1034         for (j = 0; j < ira_allocno_classes_num; j++)
1035           {
1036             COPY_HARD_REG_SET (temp_hard_regset2,
1037                                reg_class_contents[ira_allocno_classes[j]]);
1038             AND_COMPL_HARD_REG_SET (temp_hard_regset2, no_unit_alloc_regs);
1039             if ((enum reg_class) cl == ira_allocno_classes[j])
1040               break;
1041             else if (hard_reg_set_subset_p (temp_hard_regset,
1042                                             temp_hard_regset2))
1043               set_p = true;
1044           }
1045         if (set_p && j >= ira_allocno_classes_num)
1046           ira_important_classes[ira_important_classes_num++]
1047             = (enum reg_class) cl;
1048       }
1049   /* Now add allocno classes to the important classes.  */
1050   for (j = 0; j < ira_allocno_classes_num; j++)
1051     ira_important_classes[ira_important_classes_num++]
1052       = ira_allocno_classes[j];
1053   for (cl = 0; cl < N_REG_CLASSES; cl++)
1054     {
1055       ira_reg_allocno_class_p[cl] = false;
1056       ira_reg_pressure_class_p[cl] = false;
1057     }
1058   for (j = 0; j < ira_allocno_classes_num; j++)
1059     ira_reg_allocno_class_p[ira_allocno_classes[j]] = true;
1060   setup_pressure_classes ();
1061   setup_uniform_class_p ();
1062 }
1063
1064 /* Setup translation in CLASS_TRANSLATE of all classes into a class
1065    given by array CLASSES of length CLASSES_NUM.  The function is used
1066    make translation any reg class to an allocno class or to an
1067    pressure class.  This translation is necessary for some
1068    calculations when we can use only allocno or pressure classes and
1069    such translation represents an approximate representation of all
1070    classes.
1071
1072    The translation in case when allocatable hard register set of a
1073    given class is subset of allocatable hard register set of a class
1074    in CLASSES is pretty simple.  We use smallest classes from CLASSES
1075    containing a given class.  If allocatable hard register set of a
1076    given class is not a subset of any corresponding set of a class
1077    from CLASSES, we use the cheapest (with load/store point of view)
1078    class from CLASSES whose set intersects with given class set.  */
1079 static void
1080 setup_class_translate_array (enum reg_class *class_translate,
1081                              int classes_num, enum reg_class *classes)
1082 {
1083   int cl, mode;
1084   enum reg_class aclass, best_class, *cl_ptr;
1085   int i, cost, min_cost, best_cost;
1086
1087   for (cl = 0; cl < N_REG_CLASSES; cl++)
1088     class_translate[cl] = NO_REGS;
1089
1090   for (i = 0; i < classes_num; i++)
1091     {
1092       aclass = classes[i];
1093       for (cl_ptr = &alloc_reg_class_subclasses[aclass][0];
1094            (cl = *cl_ptr) != LIM_REG_CLASSES;
1095            cl_ptr++)
1096         if (class_translate[cl] == NO_REGS)
1097           class_translate[cl] = aclass;
1098       class_translate[aclass] = aclass;
1099     }
1100   /* For classes which are not fully covered by one of given classes
1101      (in other words covered by more one given class), use the
1102      cheapest class.  */
1103   for (cl = 0; cl < N_REG_CLASSES; cl++)
1104     {
1105       if (cl == NO_REGS || class_translate[cl] != NO_REGS)
1106         continue;
1107       best_class = NO_REGS;
1108       best_cost = INT_MAX;
1109       for (i = 0; i < classes_num; i++)
1110         {
1111           aclass = classes[i];
1112           COPY_HARD_REG_SET (temp_hard_regset,
1113                              reg_class_contents[aclass]);
1114           AND_HARD_REG_SET (temp_hard_regset, reg_class_contents[cl]);
1115           AND_COMPL_HARD_REG_SET (temp_hard_regset, no_unit_alloc_regs);
1116           if (! hard_reg_set_empty_p (temp_hard_regset))
1117             {
1118               min_cost = INT_MAX;
1119               for (mode = 0; mode < MAX_MACHINE_MODE; mode++)
1120                 {
1121                   cost = (ira_memory_move_cost[mode][aclass][0]
1122                           + ira_memory_move_cost[mode][aclass][1]);
1123                   if (min_cost > cost)
1124                     min_cost = cost;
1125                 }
1126               if (best_class == NO_REGS || best_cost > min_cost)
1127                 {
1128                   best_class = aclass;
1129                   best_cost = min_cost;
1130                 }
1131             }
1132         }
1133       class_translate[cl] = best_class;
1134     }
1135 }
1136
1137 /* Set up array IRA_ALLOCNO_CLASS_TRANSLATE and
1138    IRA_PRESSURE_CLASS_TRANSLATE.  */
1139 static void
1140 setup_class_translate (void)
1141 {
1142   setup_class_translate_array (ira_allocno_class_translate,
1143                                ira_allocno_classes_num, ira_allocno_classes);
1144   setup_class_translate_array (ira_pressure_class_translate,
1145                                ira_pressure_classes_num, ira_pressure_classes);
1146 }
1147
1148 /* Order numbers of allocno classes in original target allocno class
1149    array, -1 for non-allocno classes.  */
1150 static int allocno_class_order[N_REG_CLASSES];
1151
1152 /* The function used to sort the important classes.  */
1153 static int
1154 comp_reg_classes_func (const void *v1p, const void *v2p)
1155 {
1156   enum reg_class cl1 = *(const enum reg_class *) v1p;
1157   enum reg_class cl2 = *(const enum reg_class *) v2p;
1158   enum reg_class tcl1, tcl2;
1159   int diff;
1160
1161   tcl1 = ira_allocno_class_translate[cl1];
1162   tcl2 = ira_allocno_class_translate[cl2];
1163   if (tcl1 != NO_REGS && tcl2 != NO_REGS
1164       && (diff = allocno_class_order[tcl1] - allocno_class_order[tcl2]) != 0)
1165     return diff;
1166   return (int) cl1 - (int) cl2;
1167 }
1168
1169 /* For correct work of function setup_reg_class_relation we need to
1170    reorder important classes according to the order of their allocno
1171    classes.  It places important classes containing the same
1172    allocatable hard register set adjacent to each other and allocno
1173    class with the allocatable hard register set right after the other
1174    important classes with the same set.
1175
1176    In example from comments of function
1177    setup_allocno_and_important_classes, it places LEGACY_REGS and
1178    GENERAL_REGS close to each other and GENERAL_REGS is after
1179    LEGACY_REGS.  */
1180 static void
1181 reorder_important_classes (void)
1182 {
1183   int i;
1184
1185   for (i = 0; i < N_REG_CLASSES; i++)
1186     allocno_class_order[i] = -1;
1187   for (i = 0; i < ira_allocno_classes_num; i++)
1188     allocno_class_order[ira_allocno_classes[i]] = i;
1189   qsort (ira_important_classes, ira_important_classes_num,
1190          sizeof (enum reg_class), comp_reg_classes_func);
1191   for (i = 0; i < ira_important_classes_num; i++)
1192     ira_important_class_nums[ira_important_classes[i]] = i;
1193 }
1194
1195 /* Set up IRA_REG_CLASS_SUBUNION, IRA_REG_CLASS_SUPERUNION,
1196    IRA_REG_CLASS_SUPER_CLASSES, IRA_REG_CLASSES_INTERSECT, and
1197    IRA_REG_CLASSES_INTERSECT_P.  For the meaning of the relations,
1198    please see corresponding comments in ira-int.h.  */
1199 static void
1200 setup_reg_class_relations (void)
1201 {
1202   int i, cl1, cl2, cl3;
1203   HARD_REG_SET intersection_set, union_set, temp_set2;
1204   bool important_class_p[N_REG_CLASSES];
1205
1206   memset (important_class_p, 0, sizeof (important_class_p));
1207   for (i = 0; i < ira_important_classes_num; i++)
1208     important_class_p[ira_important_classes[i]] = true;
1209   for (cl1 = 0; cl1 < N_REG_CLASSES; cl1++)
1210     {
1211       ira_reg_class_super_classes[cl1][0] = LIM_REG_CLASSES;
1212       for (cl2 = 0; cl2 < N_REG_CLASSES; cl2++)
1213         {
1214           ira_reg_classes_intersect_p[cl1][cl2] = false;
1215           ira_reg_class_intersect[cl1][cl2] = NO_REGS;
1216           ira_reg_class_subset[cl1][cl2] = NO_REGS;
1217           COPY_HARD_REG_SET (temp_hard_regset, reg_class_contents[cl1]);
1218           AND_COMPL_HARD_REG_SET (temp_hard_regset, no_unit_alloc_regs);
1219           COPY_HARD_REG_SET (temp_set2, reg_class_contents[cl2]);
1220           AND_COMPL_HARD_REG_SET (temp_set2, no_unit_alloc_regs);
1221           if (hard_reg_set_empty_p (temp_hard_regset)
1222               && hard_reg_set_empty_p (temp_set2))
1223             {
1224               /* The both classes have no allocatable hard registers
1225                  -- take all class hard registers into account and use
1226                  reg_class_subunion and reg_class_superunion.  */
1227               for (i = 0;; i++)
1228                 {
1229                   cl3 = reg_class_subclasses[cl1][i];
1230                   if (cl3 == LIM_REG_CLASSES)
1231                     break;
1232                   if (reg_class_subset_p (ira_reg_class_intersect[cl1][cl2],
1233                                           (enum reg_class) cl3))
1234                     ira_reg_class_intersect[cl1][cl2] = (enum reg_class) cl3;
1235                 }
1236               ira_reg_class_subunion[cl1][cl2] = reg_class_subunion[cl1][cl2];
1237               ira_reg_class_superunion[cl1][cl2] = reg_class_superunion[cl1][cl2];
1238               continue;
1239             }
1240           ira_reg_classes_intersect_p[cl1][cl2]
1241             = hard_reg_set_intersect_p (temp_hard_regset, temp_set2);
1242           if (important_class_p[cl1] && important_class_p[cl2]
1243               && hard_reg_set_subset_p (temp_hard_regset, temp_set2))
1244             {
1245               /* CL1 and CL2 are important classes and CL1 allocatable
1246                  hard register set is inside of CL2 allocatable hard
1247                  registers -- make CL1 a superset of CL2.  */
1248               enum reg_class *p;
1249
1250               p = &ira_reg_class_super_classes[cl1][0];
1251               while (*p != LIM_REG_CLASSES)
1252                 p++;
1253               *p++ = (enum reg_class) cl2;
1254               *p = LIM_REG_CLASSES;
1255             }
1256           ira_reg_class_subunion[cl1][cl2] = NO_REGS;
1257           ira_reg_class_superunion[cl1][cl2] = NO_REGS;
1258           COPY_HARD_REG_SET (intersection_set, reg_class_contents[cl1]);
1259           AND_HARD_REG_SET (intersection_set, reg_class_contents[cl2]);
1260           AND_COMPL_HARD_REG_SET (intersection_set, no_unit_alloc_regs);
1261           COPY_HARD_REG_SET (union_set, reg_class_contents[cl1]);
1262           IOR_HARD_REG_SET (union_set, reg_class_contents[cl2]);
1263           AND_COMPL_HARD_REG_SET (union_set, no_unit_alloc_regs);
1264           for (cl3 = 0; cl3 < N_REG_CLASSES; cl3++)
1265             {
1266               COPY_HARD_REG_SET (temp_hard_regset, reg_class_contents[cl3]);
1267               AND_COMPL_HARD_REG_SET (temp_hard_regset, no_unit_alloc_regs);
1268               if (hard_reg_set_subset_p (temp_hard_regset, intersection_set))
1269                 {
1270                   /* CL3 allocatable hard register set is inside of
1271                      intersection of allocatable hard register sets
1272                      of CL1 and CL2.  */
1273                   if (important_class_p[cl3])
1274                     {
1275                       COPY_HARD_REG_SET
1276                         (temp_set2,
1277                          reg_class_contents
1278                          [(int) ira_reg_class_intersect[cl1][cl2]]);
1279                       AND_COMPL_HARD_REG_SET (temp_set2, no_unit_alloc_regs);
1280                       if (! hard_reg_set_subset_p (temp_hard_regset, temp_set2)
1281                           /* If the allocatable hard register sets are
1282                              the same, prefer GENERAL_REGS or the
1283                              smallest class for debugging
1284                              purposes.  */
1285                           || (hard_reg_set_equal_p (temp_hard_regset, temp_set2)
1286                               && (cl3 == GENERAL_REGS
1287                                   || ((ira_reg_class_intersect[cl1][cl2]
1288                                        != GENERAL_REGS)
1289                                       && hard_reg_set_subset_p
1290                                          (reg_class_contents[cl3],
1291                                           reg_class_contents
1292                                           [(int)
1293                                            ira_reg_class_intersect[cl1][cl2]])))))
1294                         ira_reg_class_intersect[cl1][cl2] = (enum reg_class) cl3;
1295                     }
1296                   COPY_HARD_REG_SET
1297                     (temp_set2,
1298                      reg_class_contents[(int) ira_reg_class_subset[cl1][cl2]]);
1299                   AND_COMPL_HARD_REG_SET (temp_set2, no_unit_alloc_regs);
1300                   if (! hard_reg_set_subset_p (temp_hard_regset, temp_set2)
1301                       /* Ignore unavailable hard registers and prefer
1302                          smallest class for debugging purposes.  */
1303                       || (hard_reg_set_equal_p (temp_hard_regset, temp_set2)
1304                           && hard_reg_set_subset_p
1305                              (reg_class_contents[cl3],
1306                               reg_class_contents
1307                               [(int) ira_reg_class_subset[cl1][cl2]])))
1308                     ira_reg_class_subset[cl1][cl2] = (enum reg_class) cl3;
1309                 }
1310               if (important_class_p[cl3]
1311                   && hard_reg_set_subset_p (temp_hard_regset, union_set))
1312                 {
1313                   /* CL3 allocatable hard register set is inside of
1314                      union of allocatable hard register sets of CL1
1315                      and CL2.  */
1316                   COPY_HARD_REG_SET
1317                     (temp_set2,
1318                      reg_class_contents[(int) ira_reg_class_subunion[cl1][cl2]]);
1319                   AND_COMPL_HARD_REG_SET (temp_set2, no_unit_alloc_regs);
1320                   if (ira_reg_class_subunion[cl1][cl2] == NO_REGS
1321                       || (hard_reg_set_subset_p (temp_set2, temp_hard_regset)
1322                           
1323                           && (! hard_reg_set_equal_p (temp_set2,
1324                                                       temp_hard_regset)
1325                               || cl3 == GENERAL_REGS
1326                               /* If the allocatable hard register sets are the
1327                                  same, prefer GENERAL_REGS or the smallest
1328                                  class for debugging purposes.  */
1329                               || (ira_reg_class_subunion[cl1][cl2] != GENERAL_REGS
1330                                   && hard_reg_set_subset_p
1331                                      (reg_class_contents[cl3],
1332                                       reg_class_contents
1333                                       [(int) ira_reg_class_subunion[cl1][cl2]])))))
1334                     ira_reg_class_subunion[cl1][cl2] = (enum reg_class) cl3;
1335                 }
1336               if (hard_reg_set_subset_p (union_set, temp_hard_regset))
1337                 {
1338                   /* CL3 allocatable hard register set contains union
1339                      of allocatable hard register sets of CL1 and
1340                      CL2.  */
1341                   COPY_HARD_REG_SET
1342                     (temp_set2,
1343                      reg_class_contents[(int) ira_reg_class_superunion[cl1][cl2]]);
1344                   AND_COMPL_HARD_REG_SET (temp_set2, no_unit_alloc_regs);
1345                   if (ira_reg_class_superunion[cl1][cl2] == NO_REGS
1346                       || (hard_reg_set_subset_p (temp_hard_regset, temp_set2)
1347
1348                           && (! hard_reg_set_equal_p (temp_set2,
1349                                                       temp_hard_regset)
1350                               || cl3 == GENERAL_REGS
1351                               /* If the allocatable hard register sets are the
1352                                  same, prefer GENERAL_REGS or the smallest
1353                                  class for debugging purposes.  */
1354                               || (ira_reg_class_superunion[cl1][cl2] != GENERAL_REGS
1355                                   && hard_reg_set_subset_p
1356                                      (reg_class_contents[cl3],
1357                                       reg_class_contents
1358                                       [(int) ira_reg_class_superunion[cl1][cl2]])))))
1359                     ira_reg_class_superunion[cl1][cl2] = (enum reg_class) cl3;
1360                 }
1361             }
1362         }
1363     }
1364 }
1365
1366 /* Output all uniform and important classes into file F.  */
1367 static void
1368 print_uniform_and_important_classes (FILE *f)
1369 {
1370   int i, cl;
1371
1372   fprintf (f, "Uniform classes:\n");
1373   for (cl = 0; cl < N_REG_CLASSES; cl++)
1374     if (ira_uniform_class_p[cl])
1375       fprintf (f, " %s", reg_class_names[cl]);
1376   fprintf (f, "\nImportant classes:\n");
1377   for (i = 0; i < ira_important_classes_num; i++)
1378     fprintf (f, " %s", reg_class_names[ira_important_classes[i]]);
1379   fprintf (f, "\n");
1380 }
1381
1382 /* Output all possible allocno or pressure classes and their
1383    translation map into file F.  */
1384 static void
1385 print_translated_classes (FILE *f, bool pressure_p)
1386 {
1387   int classes_num = (pressure_p
1388                      ? ira_pressure_classes_num : ira_allocno_classes_num);
1389   enum reg_class *classes = (pressure_p
1390                              ? ira_pressure_classes : ira_allocno_classes);
1391   enum reg_class *class_translate = (pressure_p
1392                                      ? ira_pressure_class_translate
1393                                      : ira_allocno_class_translate);
1394   int i;
1395
1396   fprintf (f, "%s classes:\n", pressure_p ? "Pressure" : "Allocno");
1397   for (i = 0; i < classes_num; i++)
1398     fprintf (f, " %s", reg_class_names[classes[i]]);
1399   fprintf (f, "\nClass translation:\n");
1400   for (i = 0; i < N_REG_CLASSES; i++)
1401     fprintf (f, " %s -> %s\n", reg_class_names[i],
1402              reg_class_names[class_translate[i]]);
1403 }
1404
1405 /* Output all possible allocno and translation classes and the
1406    translation maps into stderr.  */
1407 void
1408 ira_debug_allocno_classes (void)
1409 {
1410   print_uniform_and_important_classes (stderr);
1411   print_translated_classes (stderr, false);
1412   print_translated_classes (stderr, true);
1413 }
1414
1415 /* Set up different arrays concerning class subsets, allocno and
1416    important classes.  */
1417 static void
1418 find_reg_classes (void)
1419 {
1420   setup_allocno_and_important_classes ();
1421   setup_class_translate ();
1422   reorder_important_classes ();
1423   setup_reg_class_relations ();
1424 }
1425
1426 \f
1427
1428 /* Set up the array above.  */
1429 static void
1430 setup_hard_regno_aclass (void)
1431 {
1432   int i;
1433
1434   for (i = 0; i < FIRST_PSEUDO_REGISTER; i++)
1435     {
1436 #if 1
1437       ira_hard_regno_allocno_class[i]
1438         = (TEST_HARD_REG_BIT (no_unit_alloc_regs, i)
1439            ? NO_REGS
1440            : ira_allocno_class_translate[REGNO_REG_CLASS (i)]);
1441 #else
1442       int j;
1443       enum reg_class cl;
1444       ira_hard_regno_allocno_class[i] = NO_REGS;
1445       for (j = 0; j < ira_allocno_classes_num; j++)
1446         {
1447           cl = ira_allocno_classes[j];
1448           if (ira_class_hard_reg_index[cl][i] >= 0)
1449             {
1450               ira_hard_regno_allocno_class[i] = cl;
1451               break;
1452             }
1453         }
1454 #endif
1455     }
1456 }
1457
1458 \f
1459
1460 /* Form IRA_REG_CLASS_MAX_NREGS and IRA_REG_CLASS_MIN_NREGS maps.  */
1461 static void
1462 setup_reg_class_nregs (void)
1463 {
1464   int i, cl, cl2, m;
1465
1466   for (m = 0; m < MAX_MACHINE_MODE; m++)
1467     {
1468       for (cl = 0; cl < N_REG_CLASSES; cl++)
1469         ira_reg_class_max_nregs[cl][m]
1470           = ira_reg_class_min_nregs[cl][m]
1471           = targetm.class_max_nregs ((reg_class_t) cl, (machine_mode) m);
1472       for (cl = 0; cl < N_REG_CLASSES; cl++)
1473         for (i = 0;
1474              (cl2 = alloc_reg_class_subclasses[cl][i]) != LIM_REG_CLASSES;
1475              i++)
1476           if (ira_reg_class_min_nregs[cl2][m]
1477               < ira_reg_class_min_nregs[cl][m])
1478             ira_reg_class_min_nregs[cl][m] = ira_reg_class_min_nregs[cl2][m];
1479     }
1480 }
1481
1482 \f
1483
1484 /* Set up IRA_PROHIBITED_CLASS_MODE_REGS and IRA_CLASS_SINGLETON.
1485    This function is called once IRA_CLASS_HARD_REGS has been initialized.  */
1486 static void
1487 setup_prohibited_class_mode_regs (void)
1488 {
1489   int j, k, hard_regno, cl, last_hard_regno, count;
1490
1491   for (cl = (int) N_REG_CLASSES - 1; cl >= 0; cl--)
1492     {
1493       COPY_HARD_REG_SET (temp_hard_regset, reg_class_contents[cl]);
1494       AND_COMPL_HARD_REG_SET (temp_hard_regset, no_unit_alloc_regs);
1495       for (j = 0; j < NUM_MACHINE_MODES; j++)
1496         {
1497           count = 0;
1498           last_hard_regno = -1;
1499           CLEAR_HARD_REG_SET (ira_prohibited_class_mode_regs[cl][j]);
1500           for (k = ira_class_hard_regs_num[cl] - 1; k >= 0; k--)
1501             {
1502               hard_regno = ira_class_hard_regs[cl][k];
1503               if (! HARD_REGNO_MODE_OK (hard_regno, (machine_mode) j))
1504                 SET_HARD_REG_BIT (ira_prohibited_class_mode_regs[cl][j],
1505                                   hard_regno);
1506               else if (in_hard_reg_set_p (temp_hard_regset,
1507                                           (machine_mode) j, hard_regno))
1508                 {
1509                   last_hard_regno = hard_regno;
1510                   count++;
1511                 }
1512             }
1513           ira_class_singleton[cl][j] = (count == 1 ? last_hard_regno : -1);
1514         }
1515     }
1516 }
1517
1518 /* Clarify IRA_PROHIBITED_CLASS_MODE_REGS by excluding hard registers
1519    spanning from one register pressure class to another one.  It is
1520    called after defining the pressure classes.  */
1521 static void
1522 clarify_prohibited_class_mode_regs (void)
1523 {
1524   int j, k, hard_regno, cl, pclass, nregs;
1525
1526   for (cl = (int) N_REG_CLASSES - 1; cl >= 0; cl--)
1527     for (j = 0; j < NUM_MACHINE_MODES; j++)
1528       {
1529         CLEAR_HARD_REG_SET (ira_useful_class_mode_regs[cl][j]);
1530         for (k = ira_class_hard_regs_num[cl] - 1; k >= 0; k--)
1531           {
1532             hard_regno = ira_class_hard_regs[cl][k];
1533             if (TEST_HARD_REG_BIT (ira_prohibited_class_mode_regs[cl][j], hard_regno))
1534               continue;
1535             nregs = hard_regno_nregs[hard_regno][j];
1536             if (hard_regno + nregs > FIRST_PSEUDO_REGISTER)
1537               {
1538                 SET_HARD_REG_BIT (ira_prohibited_class_mode_regs[cl][j],
1539                                   hard_regno);
1540                  continue;
1541               }
1542             pclass = ira_pressure_class_translate[REGNO_REG_CLASS (hard_regno)];
1543             for (nregs-- ;nregs >= 0; nregs--)
1544               if (((enum reg_class) pclass
1545                    != ira_pressure_class_translate[REGNO_REG_CLASS
1546                                                    (hard_regno + nregs)]))
1547                 {
1548                   SET_HARD_REG_BIT (ira_prohibited_class_mode_regs[cl][j],
1549                                     hard_regno);
1550                   break;
1551                 }
1552             if (!TEST_HARD_REG_BIT (ira_prohibited_class_mode_regs[cl][j],
1553                                     hard_regno))
1554               add_to_hard_reg_set (&ira_useful_class_mode_regs[cl][j],
1555                                    (machine_mode) j, hard_regno);
1556           }
1557       }
1558 }
1559 \f
1560 /* Allocate and initialize IRA_REGISTER_MOVE_COST, IRA_MAY_MOVE_IN_COST
1561    and IRA_MAY_MOVE_OUT_COST for MODE.  */
1562 void
1563 ira_init_register_move_cost (machine_mode mode)
1564 {
1565   static unsigned short last_move_cost[N_REG_CLASSES][N_REG_CLASSES];
1566   bool all_match = true;
1567   unsigned int cl1, cl2;
1568
1569   ira_assert (ira_register_move_cost[mode] == NULL
1570               && ira_may_move_in_cost[mode] == NULL
1571               && ira_may_move_out_cost[mode] == NULL);
1572   ira_assert (have_regs_of_mode[mode]);
1573   for (cl1 = 0; cl1 < N_REG_CLASSES; cl1++)
1574     for (cl2 = 0; cl2 < N_REG_CLASSES; cl2++)
1575       {
1576         int cost;
1577         if (!contains_reg_of_mode[cl1][mode]
1578             || !contains_reg_of_mode[cl2][mode])
1579           {
1580             if ((ira_reg_class_max_nregs[cl1][mode]
1581                  > ira_class_hard_regs_num[cl1])
1582                 || (ira_reg_class_max_nregs[cl2][mode]
1583                     > ira_class_hard_regs_num[cl2]))
1584               cost = 65535;
1585             else
1586               cost = (ira_memory_move_cost[mode][cl1][0]
1587                       + ira_memory_move_cost[mode][cl2][1]) * 2;
1588           }
1589         else
1590           {
1591             cost = register_move_cost (mode, (enum reg_class) cl1,
1592                                        (enum reg_class) cl2);
1593             ira_assert (cost < 65535);
1594           }
1595         all_match &= (last_move_cost[cl1][cl2] == cost);
1596         last_move_cost[cl1][cl2] = cost;
1597       }
1598   if (all_match && last_mode_for_init_move_cost != -1)
1599     {
1600       ira_register_move_cost[mode]
1601         = ira_register_move_cost[last_mode_for_init_move_cost];
1602       ira_may_move_in_cost[mode]
1603         = ira_may_move_in_cost[last_mode_for_init_move_cost];
1604       ira_may_move_out_cost[mode]
1605         = ira_may_move_out_cost[last_mode_for_init_move_cost];
1606       return;
1607     }
1608   last_mode_for_init_move_cost = mode;
1609   ira_register_move_cost[mode] = XNEWVEC (move_table, N_REG_CLASSES);
1610   ira_may_move_in_cost[mode] = XNEWVEC (move_table, N_REG_CLASSES);
1611   ira_may_move_out_cost[mode] = XNEWVEC (move_table, N_REG_CLASSES);
1612   for (cl1 = 0; cl1 < N_REG_CLASSES; cl1++)
1613     for (cl2 = 0; cl2 < N_REG_CLASSES; cl2++)
1614       {
1615         int cost;
1616         enum reg_class *p1, *p2;
1617         
1618         if (last_move_cost[cl1][cl2] == 65535)
1619           {
1620             ira_register_move_cost[mode][cl1][cl2] = 65535;
1621             ira_may_move_in_cost[mode][cl1][cl2] = 65535;
1622             ira_may_move_out_cost[mode][cl1][cl2] = 65535;
1623           }
1624         else
1625           {
1626             cost = last_move_cost[cl1][cl2];
1627             
1628             for (p2 = &reg_class_subclasses[cl2][0];
1629                  *p2 != LIM_REG_CLASSES; p2++)
1630               if (ira_class_hard_regs_num[*p2] > 0
1631                   && (ira_reg_class_max_nregs[*p2][mode]
1632                       <= ira_class_hard_regs_num[*p2]))
1633                 cost = MAX (cost, ira_register_move_cost[mode][cl1][*p2]);
1634             
1635             for (p1 = &reg_class_subclasses[cl1][0];
1636                  *p1 != LIM_REG_CLASSES; p1++)
1637               if (ira_class_hard_regs_num[*p1] > 0
1638                   && (ira_reg_class_max_nregs[*p1][mode]
1639                       <= ira_class_hard_regs_num[*p1]))
1640                 cost = MAX (cost, ira_register_move_cost[mode][*p1][cl2]);
1641             
1642             ira_assert (cost <= 65535);
1643             ira_register_move_cost[mode][cl1][cl2] = cost;
1644             
1645             if (ira_class_subset_p[cl1][cl2])
1646               ira_may_move_in_cost[mode][cl1][cl2] = 0;
1647             else
1648               ira_may_move_in_cost[mode][cl1][cl2] = cost;
1649             
1650             if (ira_class_subset_p[cl2][cl1])
1651               ira_may_move_out_cost[mode][cl1][cl2] = 0;
1652             else
1653               ira_may_move_out_cost[mode][cl1][cl2] = cost;
1654           }
1655       }
1656 }
1657
1658 \f
1659
1660 /* This is called once during compiler work.  It sets up
1661    different arrays whose values don't depend on the compiled
1662    function.  */
1663 void
1664 ira_init_once (void)
1665 {
1666   ira_init_costs_once ();
1667   lra_init_once ();
1668 }
1669
1670 /* Free ira_max_register_move_cost, ira_may_move_in_cost and
1671    ira_may_move_out_cost for each mode.  */
1672 void
1673 target_ira_int::free_register_move_costs (void)
1674 {
1675   int mode, i;
1676
1677   /* Reset move_cost and friends, making sure we only free shared
1678      table entries once.  */
1679   for (mode = 0; mode < MAX_MACHINE_MODE; mode++)
1680     if (x_ira_register_move_cost[mode])
1681       {
1682         for (i = 0;
1683              i < mode && (x_ira_register_move_cost[i]
1684                           != x_ira_register_move_cost[mode]);
1685              i++)
1686           ;
1687         if (i == mode)
1688           {
1689             free (x_ira_register_move_cost[mode]);
1690             free (x_ira_may_move_in_cost[mode]);
1691             free (x_ira_may_move_out_cost[mode]);
1692           }
1693       }
1694   memset (x_ira_register_move_cost, 0, sizeof x_ira_register_move_cost);
1695   memset (x_ira_may_move_in_cost, 0, sizeof x_ira_may_move_in_cost);
1696   memset (x_ira_may_move_out_cost, 0, sizeof x_ira_may_move_out_cost);
1697   last_mode_for_init_move_cost = -1;
1698 }
1699
1700 target_ira_int::~target_ira_int ()
1701 {
1702   free_ira_costs ();
1703   free_register_move_costs ();
1704 }
1705
1706 /* This is called every time when register related information is
1707    changed.  */
1708 void
1709 ira_init (void)
1710 {
1711   this_target_ira_int->free_register_move_costs ();
1712   setup_reg_mode_hard_regset ();
1713   setup_alloc_regs (flag_omit_frame_pointer != 0);
1714   setup_class_subset_and_memory_move_costs ();
1715   setup_reg_class_nregs ();
1716   setup_prohibited_class_mode_regs ();
1717   find_reg_classes ();
1718   clarify_prohibited_class_mode_regs ();
1719   setup_hard_regno_aclass ();
1720   ira_init_costs ();
1721 }
1722
1723 \f
1724 #define ira_prohibited_mode_move_regs_initialized_p \
1725   (this_target_ira_int->x_ira_prohibited_mode_move_regs_initialized_p)
1726
1727 /* Set up IRA_PROHIBITED_MODE_MOVE_REGS.  */
1728 static void
1729 setup_prohibited_mode_move_regs (void)
1730 {
1731   int i, j;
1732   rtx test_reg1, test_reg2, move_pat;
1733   rtx_insn *move_insn;
1734
1735   if (ira_prohibited_mode_move_regs_initialized_p)
1736     return;
1737   ira_prohibited_mode_move_regs_initialized_p = true;
1738   test_reg1 = gen_rtx_REG (word_mode, LAST_VIRTUAL_REGISTER + 1);
1739   test_reg2 = gen_rtx_REG (word_mode, LAST_VIRTUAL_REGISTER + 2);
1740   move_pat = gen_rtx_SET (test_reg1, test_reg2);
1741   move_insn = gen_rtx_INSN (VOIDmode, 0, 0, 0, move_pat, 0, -1, 0);
1742   for (i = 0; i < NUM_MACHINE_MODES; i++)
1743     {
1744       SET_HARD_REG_SET (ira_prohibited_mode_move_regs[i]);
1745       for (j = 0; j < FIRST_PSEUDO_REGISTER; j++)
1746         {
1747           if (! HARD_REGNO_MODE_OK (j, (machine_mode) i))
1748             continue;
1749           set_mode_and_regno (test_reg1, (machine_mode) i, j);
1750           set_mode_and_regno (test_reg2, (machine_mode) i, j);
1751           INSN_CODE (move_insn) = -1;
1752           recog_memoized (move_insn);
1753           if (INSN_CODE (move_insn) < 0)
1754             continue;
1755           extract_insn (move_insn);
1756           /* We don't know whether the move will be in code that is optimized
1757              for size or speed, so consider all enabled alternatives.  */
1758           if (! constrain_operands (1, get_enabled_alternatives (move_insn)))
1759             continue;
1760           CLEAR_HARD_REG_BIT (ira_prohibited_mode_move_regs[i], j);
1761         }
1762     }
1763 }
1764
1765 \f
1766
1767 /* Setup possible alternatives in ALTS for INSN.  */
1768 void
1769 ira_setup_alts (rtx_insn *insn, HARD_REG_SET &alts)
1770 {
1771   /* MAP nalt * nop -> start of constraints for given operand and
1772      alternative.  */
1773   static vec<const char *> insn_constraints;
1774   int nop, nalt;
1775   bool curr_swapped;
1776   const char *p;
1777   int commutative = -1;
1778
1779   extract_insn (insn);
1780   alternative_mask preferred = get_preferred_alternatives (insn);
1781   CLEAR_HARD_REG_SET (alts);
1782   insn_constraints.release ();
1783   insn_constraints.safe_grow_cleared (recog_data.n_operands
1784                                       * recog_data.n_alternatives + 1);
1785   /* Check that the hard reg set is enough for holding all
1786      alternatives.  It is hard to imagine the situation when the
1787      assertion is wrong.  */
1788   ira_assert (recog_data.n_alternatives
1789               <= (int) MAX (sizeof (HARD_REG_ELT_TYPE) * CHAR_BIT,
1790                             FIRST_PSEUDO_REGISTER));
1791   for (curr_swapped = false;; curr_swapped = true)
1792     {
1793       /* Calculate some data common for all alternatives to speed up the
1794          function.  */
1795       for (nop = 0; nop < recog_data.n_operands; nop++)
1796         {
1797           for (nalt = 0, p = recog_data.constraints[nop];
1798                nalt < recog_data.n_alternatives;
1799                nalt++)
1800             {
1801               insn_constraints[nop * recog_data.n_alternatives + nalt] = p;
1802               while (*p && *p != ',')
1803                 {
1804                   /* We only support one commutative marker, the first
1805                      one.  We already set commutative above.  */
1806                   if (*p == '%' && commutative < 0)
1807                     commutative = nop;
1808                   p++;
1809                 }
1810               if (*p)
1811                 p++;
1812             }
1813         }
1814       for (nalt = 0; nalt < recog_data.n_alternatives; nalt++)
1815         {
1816           if (!TEST_BIT (preferred, nalt)
1817               || TEST_HARD_REG_BIT (alts, nalt))
1818             continue;
1819
1820           for (nop = 0; nop < recog_data.n_operands; nop++)
1821             {
1822               int c, len;
1823
1824               rtx op = recog_data.operand[nop];
1825               p = insn_constraints[nop * recog_data.n_alternatives + nalt];
1826               if (*p == 0 || *p == ',')
1827                 continue;
1828               
1829               do
1830                 switch (c = *p, len = CONSTRAINT_LEN (c, p), c)
1831                   {
1832                   case '#':
1833                   case ',':
1834                     c = '\0';
1835                     /* FALLTHRU */
1836                   case '\0':
1837                     len = 0;
1838                     break;
1839                   
1840                   case '%':
1841                     /* The commutative modifier is handled above.  */
1842                     break;
1843
1844                   case '0':  case '1':  case '2':  case '3':  case '4':
1845                   case '5':  case '6':  case '7':  case '8':  case '9':
1846                     goto op_success;
1847                     break;
1848                     
1849                   case 'g':
1850                     goto op_success;
1851                     break;
1852                     
1853                   default:
1854                     {
1855                       enum constraint_num cn = lookup_constraint (p);
1856                       switch (get_constraint_type (cn))
1857                         {
1858                         case CT_REGISTER:
1859                           if (reg_class_for_constraint (cn) != NO_REGS)
1860                             goto op_success;
1861                           break;
1862
1863                         case CT_CONST_INT:
1864                           if (CONST_INT_P (op)
1865                               && (insn_const_int_ok_for_constraint
1866                                   (INTVAL (op), cn)))
1867                             goto op_success;
1868                           break;
1869
1870                         case CT_ADDRESS:
1871                         case CT_MEMORY:
1872                         case CT_SPECIAL_MEMORY:
1873                           goto op_success;
1874
1875                         case CT_FIXED_FORM:
1876                           if (constraint_satisfied_p (op, cn))
1877                             goto op_success;
1878                           break;
1879                         }
1880                       break;
1881                     }
1882                   }
1883               while (p += len, c);
1884               break;
1885             op_success:
1886               ;
1887             }
1888           if (nop >= recog_data.n_operands)
1889             SET_HARD_REG_BIT (alts, nalt);
1890         }
1891       if (commutative < 0)
1892         break;
1893       /* Swap forth and back to avoid changing recog_data.  */
1894       std::swap (recog_data.operand[commutative],
1895                  recog_data.operand[commutative + 1]);
1896       if (curr_swapped)
1897         break;
1898     }
1899 }
1900
1901 /* Return the number of the output non-early clobber operand which
1902    should be the same in any case as operand with number OP_NUM (or
1903    negative value if there is no such operand).  The function takes
1904    only really possible alternatives into consideration.  */
1905 int
1906 ira_get_dup_out_num (int op_num, HARD_REG_SET &alts)
1907 {
1908   int curr_alt, c, original, dup;
1909   bool ignore_p, use_commut_op_p;
1910   const char *str;
1911
1912   if (op_num < 0 || recog_data.n_alternatives == 0)
1913     return -1;
1914   /* We should find duplications only for input operands.  */
1915   if (recog_data.operand_type[op_num] != OP_IN)
1916     return -1;
1917   str = recog_data.constraints[op_num];
1918   use_commut_op_p = false;
1919   for (;;)
1920     {
1921       rtx op = recog_data.operand[op_num];
1922       
1923       for (curr_alt = 0, ignore_p = !TEST_HARD_REG_BIT (alts, curr_alt),
1924            original = -1;;)
1925         {
1926           c = *str;
1927           if (c == '\0')
1928             break;
1929           if (c == '#')
1930             ignore_p = true;
1931           else if (c == ',')
1932             {
1933               curr_alt++;
1934               ignore_p = !TEST_HARD_REG_BIT (alts, curr_alt);
1935             }
1936           else if (! ignore_p)
1937             switch (c)
1938               {
1939               case 'g':
1940                 goto fail;
1941               default:
1942                 {
1943                   enum constraint_num cn = lookup_constraint (str);
1944                   enum reg_class cl = reg_class_for_constraint (cn);
1945                   if (cl != NO_REGS
1946                       && !targetm.class_likely_spilled_p (cl))
1947                     goto fail;
1948                   if (constraint_satisfied_p (op, cn))
1949                     goto fail;
1950                   break;
1951                 }
1952                 
1953               case '0': case '1': case '2': case '3': case '4':
1954               case '5': case '6': case '7': case '8': case '9':
1955                 if (original != -1 && original != c)
1956                   goto fail;
1957                 original = c;
1958                 break;
1959               }
1960           str += CONSTRAINT_LEN (c, str);
1961         }
1962       if (original == -1)
1963         goto fail;
1964       dup = -1;
1965       for (ignore_p = false, str = recog_data.constraints[original - '0'];
1966            *str != 0;
1967            str++)
1968         if (ignore_p)
1969           {
1970             if (*str == ',')
1971               ignore_p = false;
1972           }
1973         else if (*str == '#')
1974           ignore_p = true;
1975         else if (! ignore_p)
1976           {
1977             if (*str == '=')
1978               dup = original - '0';
1979             /* It is better ignore an alternative with early clobber.  */
1980             else if (*str == '&')
1981               goto fail;
1982           }
1983       if (dup >= 0)
1984         return dup;
1985     fail:
1986       if (use_commut_op_p)
1987         break;
1988       use_commut_op_p = true;
1989       if (recog_data.constraints[op_num][0] == '%')
1990         str = recog_data.constraints[op_num + 1];
1991       else if (op_num > 0 && recog_data.constraints[op_num - 1][0] == '%')
1992         str = recog_data.constraints[op_num - 1];
1993       else
1994         break;
1995     }
1996   return -1;
1997 }
1998
1999 \f
2000
2001 /* Search forward to see if the source register of a copy insn dies
2002    before either it or the destination register is modified, but don't
2003    scan past the end of the basic block.  If so, we can replace the
2004    source with the destination and let the source die in the copy
2005    insn.
2006
2007    This will reduce the number of registers live in that range and may
2008    enable the destination and the source coalescing, thus often saving
2009    one register in addition to a register-register copy.  */
2010
2011 static void
2012 decrease_live_ranges_number (void)
2013 {
2014   basic_block bb;
2015   rtx_insn *insn;
2016   rtx set, src, dest, dest_death, note;
2017   rtx_insn *p, *q;
2018   int sregno, dregno;
2019
2020   if (! flag_expensive_optimizations)
2021     return;
2022
2023   if (ira_dump_file)
2024     fprintf (ira_dump_file, "Starting decreasing number of live ranges...\n");
2025
2026   FOR_EACH_BB_FN (bb, cfun)
2027     FOR_BB_INSNS (bb, insn)
2028       {
2029         set = single_set (insn);
2030         if (! set)
2031           continue;
2032         src = SET_SRC (set);
2033         dest = SET_DEST (set);
2034         if (! REG_P (src) || ! REG_P (dest)
2035             || find_reg_note (insn, REG_DEAD, src))
2036           continue;
2037         sregno = REGNO (src);
2038         dregno = REGNO (dest);
2039         
2040         /* We don't want to mess with hard regs if register classes
2041            are small.  */
2042         if (sregno == dregno
2043             || (targetm.small_register_classes_for_mode_p (GET_MODE (src))
2044                 && (sregno < FIRST_PSEUDO_REGISTER
2045                     || dregno < FIRST_PSEUDO_REGISTER))
2046             /* We don't see all updates to SP if they are in an
2047                auto-inc memory reference, so we must disallow this
2048                optimization on them.  */
2049             || sregno == STACK_POINTER_REGNUM
2050             || dregno == STACK_POINTER_REGNUM)
2051           continue;
2052         
2053         dest_death = NULL_RTX;
2054
2055         for (p = NEXT_INSN (insn); p; p = NEXT_INSN (p))
2056           {
2057             if (! INSN_P (p))
2058               continue;
2059             if (BLOCK_FOR_INSN (p) != bb)
2060               break;
2061             
2062             if (reg_set_p (src, p) || reg_set_p (dest, p)
2063                 /* If SRC is an asm-declared register, it must not be
2064                    replaced in any asm.  Unfortunately, the REG_EXPR
2065                    tree for the asm variable may be absent in the SRC
2066                    rtx, so we can't check the actual register
2067                    declaration easily (the asm operand will have it,
2068                    though).  To avoid complicating the test for a rare
2069                    case, we just don't perform register replacement
2070                    for a hard reg mentioned in an asm.  */
2071                 || (sregno < FIRST_PSEUDO_REGISTER
2072                     && asm_noperands (PATTERN (p)) >= 0
2073                     && reg_overlap_mentioned_p (src, PATTERN (p)))
2074                 /* Don't change hard registers used by a call.  */
2075                 || (CALL_P (p) && sregno < FIRST_PSEUDO_REGISTER
2076                     && find_reg_fusage (p, USE, src))
2077                 /* Don't change a USE of a register.  */
2078                 || (GET_CODE (PATTERN (p)) == USE
2079                     && reg_overlap_mentioned_p (src, XEXP (PATTERN (p), 0))))
2080               break;
2081             
2082             /* See if all of SRC dies in P.  This test is slightly
2083                more conservative than it needs to be.  */
2084             if ((note = find_regno_note (p, REG_DEAD, sregno))
2085                 && GET_MODE (XEXP (note, 0)) == GET_MODE (src))
2086               {
2087                 int failed = 0;
2088                 
2089                 /* We can do the optimization.  Scan forward from INSN
2090                    again, replacing regs as we go.  Set FAILED if a
2091                    replacement can't be done.  In that case, we can't
2092                    move the death note for SRC.  This should be
2093                    rare.  */
2094                 
2095                 /* Set to stop at next insn.  */
2096                 for (q = next_real_insn (insn);
2097                      q != next_real_insn (p);
2098                      q = next_real_insn (q))
2099                   {
2100                     if (reg_overlap_mentioned_p (src, PATTERN (q)))
2101                       {
2102                         /* If SRC is a hard register, we might miss
2103                            some overlapping registers with
2104                            validate_replace_rtx, so we would have to
2105                            undo it.  We can't if DEST is present in
2106                            the insn, so fail in that combination of
2107                            cases.  */
2108                         if (sregno < FIRST_PSEUDO_REGISTER
2109                             && reg_mentioned_p (dest, PATTERN (q)))
2110                           failed = 1;
2111                         
2112                         /* Attempt to replace all uses.  */
2113                         else if (!validate_replace_rtx (src, dest, q))
2114                           failed = 1;
2115                         
2116                         /* If this succeeded, but some part of the
2117                            register is still present, undo the
2118                            replacement.  */
2119                         else if (sregno < FIRST_PSEUDO_REGISTER
2120                                  && reg_overlap_mentioned_p (src, PATTERN (q)))
2121                           {
2122                             validate_replace_rtx (dest, src, q);
2123                             failed = 1;
2124                           }
2125                       }
2126                     
2127                     /* If DEST dies here, remove the death note and
2128                        save it for later.  Make sure ALL of DEST dies
2129                        here; again, this is overly conservative.  */
2130                     if (! dest_death
2131                         && (dest_death = find_regno_note (q, REG_DEAD, dregno)))
2132                       {
2133                         if (GET_MODE (XEXP (dest_death, 0)) == GET_MODE (dest))
2134                           remove_note (q, dest_death);
2135                         else
2136                           {
2137                             failed = 1;
2138                             dest_death = 0;
2139                           }
2140                       }
2141                   }
2142                 
2143                 if (! failed)
2144                   {
2145                     /* Move death note of SRC from P to INSN.  */
2146                     remove_note (p, note);
2147                     XEXP (note, 1) = REG_NOTES (insn);
2148                     REG_NOTES (insn) = note;
2149                   }
2150                 
2151                 /* DEST is also dead if INSN has a REG_UNUSED note for
2152                    DEST.  */
2153                 if (! dest_death
2154                     && (dest_death
2155                         = find_regno_note (insn, REG_UNUSED, dregno)))
2156                   {
2157                     PUT_REG_NOTE_KIND (dest_death, REG_DEAD);
2158                     remove_note (insn, dest_death);
2159                   }
2160                 
2161                 /* Put death note of DEST on P if we saw it die.  */
2162                 if (dest_death)
2163                   {
2164                     XEXP (dest_death, 1) = REG_NOTES (p);
2165                     REG_NOTES (p) = dest_death;
2166                   }
2167                 break;
2168               }
2169             
2170             /* If SRC is a hard register which is set or killed in
2171                some other way, we can't do this optimization.  */
2172             else if (sregno < FIRST_PSEUDO_REGISTER && dead_or_set_p (p, src))
2173               break;
2174           }
2175       }
2176 }
2177
2178 \f
2179
2180 /* Return nonzero if REGNO is a particularly bad choice for reloading X.  */
2181 static bool
2182 ira_bad_reload_regno_1 (int regno, rtx x)
2183 {
2184   int x_regno, n, i;
2185   ira_allocno_t a;
2186   enum reg_class pref;
2187
2188   /* We only deal with pseudo regs.  */
2189   if (! x || GET_CODE (x) != REG)
2190     return false;
2191
2192   x_regno = REGNO (x);
2193   if (x_regno < FIRST_PSEUDO_REGISTER)
2194     return false;
2195
2196   /* If the pseudo prefers REGNO explicitly, then do not consider
2197      REGNO a bad spill choice.  */
2198   pref = reg_preferred_class (x_regno);
2199   if (reg_class_size[pref] == 1)
2200     return !TEST_HARD_REG_BIT (reg_class_contents[pref], regno);
2201
2202   /* If the pseudo conflicts with REGNO, then we consider REGNO a
2203      poor choice for a reload regno.  */
2204   a = ira_regno_allocno_map[x_regno];
2205   n = ALLOCNO_NUM_OBJECTS (a);
2206   for (i = 0; i < n; i++)
2207     {
2208       ira_object_t obj = ALLOCNO_OBJECT (a, i);
2209       if (TEST_HARD_REG_BIT (OBJECT_TOTAL_CONFLICT_HARD_REGS (obj), regno))
2210         return true;
2211     }
2212   return false;
2213 }
2214
2215 /* Return nonzero if REGNO is a particularly bad choice for reloading
2216    IN or OUT.  */
2217 bool
2218 ira_bad_reload_regno (int regno, rtx in, rtx out)
2219 {
2220   return (ira_bad_reload_regno_1 (regno, in)
2221           || ira_bad_reload_regno_1 (regno, out));
2222 }
2223
2224 /* Add register clobbers from asm statements.  */
2225 static void
2226 compute_regs_asm_clobbered (void)
2227 {
2228   basic_block bb;
2229
2230   FOR_EACH_BB_FN (bb, cfun)
2231     {
2232       rtx_insn *insn;
2233       FOR_BB_INSNS_REVERSE (bb, insn)
2234         {
2235           df_ref def;
2236
2237           if (NONDEBUG_INSN_P (insn) && extract_asm_operands (PATTERN (insn)))
2238             FOR_EACH_INSN_DEF (def, insn)
2239               {
2240                 unsigned int dregno = DF_REF_REGNO (def);
2241                 if (HARD_REGISTER_NUM_P (dregno))
2242                   add_to_hard_reg_set (&crtl->asm_clobbers,
2243                                        GET_MODE (DF_REF_REAL_REG (def)),
2244                                        dregno);
2245               }
2246         }
2247     }
2248 }
2249
2250
2251 /* Set up ELIMINABLE_REGSET, IRA_NO_ALLOC_REGS, and
2252    REGS_EVER_LIVE.  */
2253 void
2254 ira_setup_eliminable_regset (void)
2255 {
2256 #ifdef ELIMINABLE_REGS
2257   int i;
2258   static const struct {const int from, to; } eliminables[] = ELIMINABLE_REGS;
2259 #endif
2260   /* FIXME: If EXIT_IGNORE_STACK is set, we will not save and restore
2261      sp for alloca.  So we can't eliminate the frame pointer in that
2262      case.  At some point, we should improve this by emitting the
2263      sp-adjusting insns for this case.  */
2264   frame_pointer_needed
2265     = (! flag_omit_frame_pointer
2266        || (cfun->calls_alloca && EXIT_IGNORE_STACK)
2267        /* We need the frame pointer to catch stack overflow exceptions if
2268           the stack pointer is moving (as for the alloca case just above).  */
2269        || (STACK_CHECK_MOVING_SP
2270            && flag_stack_check
2271            && flag_exceptions
2272            && cfun->can_throw_non_call_exceptions)
2273        || crtl->accesses_prior_frames
2274        || (SUPPORTS_STACK_ALIGNMENT && crtl->stack_realign_needed)
2275        /* We need a frame pointer for all Cilk Plus functions that use
2276           Cilk keywords.  */
2277        || (flag_cilkplus && cfun->is_cilk_function)
2278        || targetm.frame_pointer_required ());
2279
2280     /* The chance that FRAME_POINTER_NEEDED is changed from inspecting
2281        RTL is very small.  So if we use frame pointer for RA and RTL
2282        actually prevents this, we will spill pseudos assigned to the
2283        frame pointer in LRA.  */
2284
2285   if (frame_pointer_needed)
2286     df_set_regs_ever_live (HARD_FRAME_POINTER_REGNUM, true);
2287     
2288   COPY_HARD_REG_SET (ira_no_alloc_regs, no_unit_alloc_regs);
2289   CLEAR_HARD_REG_SET (eliminable_regset);
2290
2291   compute_regs_asm_clobbered ();
2292
2293   /* Build the regset of all eliminable registers and show we can't
2294      use those that we already know won't be eliminated.  */
2295 #ifdef ELIMINABLE_REGS
2296   for (i = 0; i < (int) ARRAY_SIZE (eliminables); i++)
2297     {
2298       bool cannot_elim
2299         = (! targetm.can_eliminate (eliminables[i].from, eliminables[i].to)
2300            || (eliminables[i].to == STACK_POINTER_REGNUM && frame_pointer_needed));
2301
2302       if (!TEST_HARD_REG_BIT (crtl->asm_clobbers, eliminables[i].from))
2303         {
2304             SET_HARD_REG_BIT (eliminable_regset, eliminables[i].from);
2305
2306             if (cannot_elim)
2307               SET_HARD_REG_BIT (ira_no_alloc_regs, eliminables[i].from);
2308         }
2309       else if (cannot_elim)
2310         error ("%s cannot be used in asm here",
2311                reg_names[eliminables[i].from]);
2312       else
2313         df_set_regs_ever_live (eliminables[i].from, true);
2314     }
2315   if (!HARD_FRAME_POINTER_IS_FRAME_POINTER)
2316     {
2317       if (!TEST_HARD_REG_BIT (crtl->asm_clobbers, HARD_FRAME_POINTER_REGNUM))
2318         {
2319           SET_HARD_REG_BIT (eliminable_regset, HARD_FRAME_POINTER_REGNUM);
2320           if (frame_pointer_needed)
2321             SET_HARD_REG_BIT (ira_no_alloc_regs, HARD_FRAME_POINTER_REGNUM);
2322         }
2323       else if (frame_pointer_needed)
2324         error ("%s cannot be used in asm here",
2325                reg_names[HARD_FRAME_POINTER_REGNUM]);
2326       else
2327         df_set_regs_ever_live (HARD_FRAME_POINTER_REGNUM, true);
2328     }
2329
2330 #else
2331   if (!TEST_HARD_REG_BIT (crtl->asm_clobbers, HARD_FRAME_POINTER_REGNUM))
2332     {
2333       SET_HARD_REG_BIT (eliminable_regset, FRAME_POINTER_REGNUM);
2334       if (frame_pointer_needed)
2335         SET_HARD_REG_BIT (ira_no_alloc_regs, FRAME_POINTER_REGNUM);
2336     }
2337   else if (frame_pointer_needed)
2338     error ("%s cannot be used in asm here", reg_names[FRAME_POINTER_REGNUM]);
2339   else
2340     df_set_regs_ever_live (FRAME_POINTER_REGNUM, true);
2341 #endif
2342 }
2343
2344 \f
2345
2346 /* Vector of substitutions of register numbers,
2347    used to map pseudo regs into hardware regs.
2348    This is set up as a result of register allocation.
2349    Element N is the hard reg assigned to pseudo reg N,
2350    or is -1 if no hard reg was assigned.
2351    If N is a hard reg number, element N is N.  */
2352 short *reg_renumber;
2353
2354 /* Set up REG_RENUMBER and CALLER_SAVE_NEEDED (used by reload) from
2355    the allocation found by IRA.  */
2356 static void
2357 setup_reg_renumber (void)
2358 {
2359   int regno, hard_regno;
2360   ira_allocno_t a;
2361   ira_allocno_iterator ai;
2362
2363   caller_save_needed = 0;
2364   FOR_EACH_ALLOCNO (a, ai)
2365     {
2366       if (ira_use_lra_p && ALLOCNO_CAP_MEMBER (a) != NULL)
2367         continue;
2368       /* There are no caps at this point.  */
2369       ira_assert (ALLOCNO_CAP_MEMBER (a) == NULL);
2370       if (! ALLOCNO_ASSIGNED_P (a))
2371         /* It can happen if A is not referenced but partially anticipated
2372            somewhere in a region.  */
2373         ALLOCNO_ASSIGNED_P (a) = true;
2374       ira_free_allocno_updated_costs (a);
2375       hard_regno = ALLOCNO_HARD_REGNO (a);
2376       regno = ALLOCNO_REGNO (a);
2377       reg_renumber[regno] = (hard_regno < 0 ? -1 : hard_regno);
2378       if (hard_regno >= 0)
2379         {
2380           int i, nwords;
2381           enum reg_class pclass;
2382           ira_object_t obj;
2383           
2384           pclass = ira_pressure_class_translate[REGNO_REG_CLASS (hard_regno)];
2385           nwords = ALLOCNO_NUM_OBJECTS (a);
2386           for (i = 0; i < nwords; i++)
2387             {
2388               obj = ALLOCNO_OBJECT (a, i);
2389               IOR_COMPL_HARD_REG_SET (OBJECT_TOTAL_CONFLICT_HARD_REGS (obj),
2390                                       reg_class_contents[pclass]);
2391             }
2392           if (ALLOCNO_CALLS_CROSSED_NUM (a) != 0
2393               && ira_hard_reg_set_intersection_p (hard_regno, ALLOCNO_MODE (a),
2394                                                   call_used_reg_set))
2395             {
2396               ira_assert (!optimize || flag_caller_saves
2397                           || (ALLOCNO_CALLS_CROSSED_NUM (a)
2398                               == ALLOCNO_CHEAP_CALLS_CROSSED_NUM (a))
2399                           || regno >= ira_reg_equiv_len
2400                           || ira_equiv_no_lvalue_p (regno));
2401               caller_save_needed = 1;
2402             }
2403         }
2404     }
2405 }
2406
2407 /* Set up allocno assignment flags for further allocation
2408    improvements.  */
2409 static void
2410 setup_allocno_assignment_flags (void)
2411 {
2412   int hard_regno;
2413   ira_allocno_t a;
2414   ira_allocno_iterator ai;
2415
2416   FOR_EACH_ALLOCNO (a, ai)
2417     {
2418       if (! ALLOCNO_ASSIGNED_P (a))
2419         /* It can happen if A is not referenced but partially anticipated
2420            somewhere in a region.  */
2421         ira_free_allocno_updated_costs (a);
2422       hard_regno = ALLOCNO_HARD_REGNO (a);
2423       /* Don't assign hard registers to allocnos which are destination
2424          of removed store at the end of loop.  It has no sense to keep
2425          the same value in different hard registers.  It is also
2426          impossible to assign hard registers correctly to such
2427          allocnos because the cost info and info about intersected
2428          calls are incorrect for them.  */
2429       ALLOCNO_ASSIGNED_P (a) = (hard_regno >= 0
2430                                 || ALLOCNO_EMIT_DATA (a)->mem_optimized_dest_p
2431                                 || (ALLOCNO_MEMORY_COST (a)
2432                                     - ALLOCNO_CLASS_COST (a)) < 0);
2433       ira_assert
2434         (hard_regno < 0
2435          || ira_hard_reg_in_set_p (hard_regno, ALLOCNO_MODE (a),
2436                                    reg_class_contents[ALLOCNO_CLASS (a)]));
2437     }
2438 }
2439
2440 /* Evaluate overall allocation cost and the costs for using hard
2441    registers and memory for allocnos.  */
2442 static void
2443 calculate_allocation_cost (void)
2444 {
2445   int hard_regno, cost;
2446   ira_allocno_t a;
2447   ira_allocno_iterator ai;
2448
2449   ira_overall_cost = ira_reg_cost = ira_mem_cost = 0;
2450   FOR_EACH_ALLOCNO (a, ai)
2451     {
2452       hard_regno = ALLOCNO_HARD_REGNO (a);
2453       ira_assert (hard_regno < 0
2454                   || (ira_hard_reg_in_set_p
2455                       (hard_regno, ALLOCNO_MODE (a),
2456                        reg_class_contents[ALLOCNO_CLASS (a)])));
2457       if (hard_regno < 0)
2458         {
2459           cost = ALLOCNO_MEMORY_COST (a);
2460           ira_mem_cost += cost;
2461         }
2462       else if (ALLOCNO_HARD_REG_COSTS (a) != NULL)
2463         {
2464           cost = (ALLOCNO_HARD_REG_COSTS (a)
2465                   [ira_class_hard_reg_index
2466                    [ALLOCNO_CLASS (a)][hard_regno]]);
2467           ira_reg_cost += cost;
2468         }
2469       else
2470         {
2471           cost = ALLOCNO_CLASS_COST (a);
2472           ira_reg_cost += cost;
2473         }
2474       ira_overall_cost += cost;
2475     }
2476
2477   if (internal_flag_ira_verbose > 0 && ira_dump_file != NULL)
2478     {
2479       fprintf (ira_dump_file,
2480                "+++Costs: overall %" PRId64
2481                ", reg %" PRId64
2482                ", mem %" PRId64
2483                ", ld %" PRId64
2484                ", st %" PRId64
2485                ", move %" PRId64,
2486                ira_overall_cost, ira_reg_cost, ira_mem_cost,
2487                ira_load_cost, ira_store_cost, ira_shuffle_cost);
2488       fprintf (ira_dump_file, "\n+++       move loops %d, new jumps %d\n",
2489                ira_move_loops_num, ira_additional_jumps_num);
2490     }
2491
2492 }
2493
2494 #ifdef ENABLE_IRA_CHECKING
2495 /* Check the correctness of the allocation.  We do need this because
2496    of complicated code to transform more one region internal
2497    representation into one region representation.  */
2498 static void
2499 check_allocation (void)
2500 {
2501   ira_allocno_t a;
2502   int hard_regno, nregs, conflict_nregs;
2503   ira_allocno_iterator ai;
2504
2505   FOR_EACH_ALLOCNO (a, ai)
2506     {
2507       int n = ALLOCNO_NUM_OBJECTS (a);
2508       int i;
2509
2510       if (ALLOCNO_CAP_MEMBER (a) != NULL
2511           || (hard_regno = ALLOCNO_HARD_REGNO (a)) < 0)
2512         continue;
2513       nregs = hard_regno_nregs[hard_regno][ALLOCNO_MODE (a)];
2514       if (nregs == 1)
2515         /* We allocated a single hard register.  */
2516         n = 1;
2517       else if (n > 1)
2518         /* We allocated multiple hard registers, and we will test
2519            conflicts in a granularity of single hard regs.  */
2520         nregs = 1;
2521
2522       for (i = 0; i < n; i++)
2523         {
2524           ira_object_t obj = ALLOCNO_OBJECT (a, i);
2525           ira_object_t conflict_obj;
2526           ira_object_conflict_iterator oci;
2527           int this_regno = hard_regno;
2528           if (n > 1)
2529             {
2530               if (REG_WORDS_BIG_ENDIAN)
2531                 this_regno += n - i - 1;
2532               else
2533                 this_regno += i;
2534             }
2535           FOR_EACH_OBJECT_CONFLICT (obj, conflict_obj, oci)
2536             {
2537               ira_allocno_t conflict_a = OBJECT_ALLOCNO (conflict_obj);
2538               int conflict_hard_regno = ALLOCNO_HARD_REGNO (conflict_a);
2539               if (conflict_hard_regno < 0)
2540                 continue;
2541
2542               conflict_nregs
2543                 = (hard_regno_nregs
2544                    [conflict_hard_regno][ALLOCNO_MODE (conflict_a)]);
2545
2546               if (ALLOCNO_NUM_OBJECTS (conflict_a) > 1
2547                   && conflict_nregs == ALLOCNO_NUM_OBJECTS (conflict_a))
2548                 {
2549                   if (REG_WORDS_BIG_ENDIAN)
2550                     conflict_hard_regno += (ALLOCNO_NUM_OBJECTS (conflict_a)
2551                                             - OBJECT_SUBWORD (conflict_obj) - 1);
2552                   else
2553                     conflict_hard_regno += OBJECT_SUBWORD (conflict_obj);
2554                   conflict_nregs = 1;
2555                 }
2556
2557               if ((conflict_hard_regno <= this_regno
2558                  && this_regno < conflict_hard_regno + conflict_nregs)
2559                 || (this_regno <= conflict_hard_regno
2560                     && conflict_hard_regno < this_regno + nregs))
2561                 {
2562                   fprintf (stderr, "bad allocation for %d and %d\n",
2563                            ALLOCNO_REGNO (a), ALLOCNO_REGNO (conflict_a));
2564                   gcc_unreachable ();
2565                 }
2566             }
2567         }
2568     }
2569 }
2570 #endif
2571
2572 /* Allocate REG_EQUIV_INIT.  Set up it from IRA_REG_EQUIV which should
2573    be already calculated.  */
2574 static void
2575 setup_reg_equiv_init (void)
2576 {
2577   int i;
2578   int max_regno = max_reg_num ();
2579
2580   for (i = 0; i < max_regno; i++)
2581     reg_equiv_init (i) = ira_reg_equiv[i].init_insns;
2582 }
2583
2584 /* Update equiv regno from movement of FROM_REGNO to TO_REGNO.  INSNS
2585    are insns which were generated for such movement.  It is assumed
2586    that FROM_REGNO and TO_REGNO always have the same value at the
2587    point of any move containing such registers. This function is used
2588    to update equiv info for register shuffles on the region borders
2589    and for caller save/restore insns.  */
2590 void
2591 ira_update_equiv_info_by_shuffle_insn (int to_regno, int from_regno, rtx_insn *insns)
2592 {
2593   rtx_insn *insn;
2594   rtx x, note;
2595
2596   if (! ira_reg_equiv[from_regno].defined_p
2597       && (! ira_reg_equiv[to_regno].defined_p
2598           || ((x = ira_reg_equiv[to_regno].memory) != NULL_RTX
2599               && ! MEM_READONLY_P (x))))
2600     return;
2601   insn = insns;
2602   if (NEXT_INSN (insn) != NULL_RTX)
2603     {
2604       if (! ira_reg_equiv[to_regno].defined_p)
2605         {
2606           ira_assert (ira_reg_equiv[to_regno].init_insns == NULL_RTX);
2607           return;
2608         }
2609       ira_reg_equiv[to_regno].defined_p = false;
2610       ira_reg_equiv[to_regno].memory
2611         = ira_reg_equiv[to_regno].constant
2612         = ira_reg_equiv[to_regno].invariant
2613         = ira_reg_equiv[to_regno].init_insns = NULL;
2614       if (internal_flag_ira_verbose > 3 && ira_dump_file != NULL)
2615         fprintf (ira_dump_file,
2616                  "      Invalidating equiv info for reg %d\n", to_regno);
2617       return;
2618     }
2619   /* It is possible that FROM_REGNO still has no equivalence because
2620      in shuffles to_regno<-from_regno and from_regno<-to_regno the 2nd
2621      insn was not processed yet.  */
2622   if (ira_reg_equiv[from_regno].defined_p)
2623     {
2624       ira_reg_equiv[to_regno].defined_p = true;
2625       if ((x = ira_reg_equiv[from_regno].memory) != NULL_RTX)
2626         {
2627           ira_assert (ira_reg_equiv[from_regno].invariant == NULL_RTX
2628                       && ira_reg_equiv[from_regno].constant == NULL_RTX);
2629           ira_assert (ira_reg_equiv[to_regno].memory == NULL_RTX
2630                       || rtx_equal_p (ira_reg_equiv[to_regno].memory, x));
2631           ira_reg_equiv[to_regno].memory = x;
2632           if (! MEM_READONLY_P (x))
2633             /* We don't add the insn to insn init list because memory
2634                equivalence is just to say what memory is better to use
2635                when the pseudo is spilled.  */
2636             return;
2637         }
2638       else if ((x = ira_reg_equiv[from_regno].constant) != NULL_RTX)
2639         {
2640           ira_assert (ira_reg_equiv[from_regno].invariant == NULL_RTX);
2641           ira_assert (ira_reg_equiv[to_regno].constant == NULL_RTX
2642                       || rtx_equal_p (ira_reg_equiv[to_regno].constant, x));
2643           ira_reg_equiv[to_regno].constant = x;
2644         }
2645       else
2646         {
2647           x = ira_reg_equiv[from_regno].invariant;
2648           ira_assert (x != NULL_RTX);
2649           ira_assert (ira_reg_equiv[to_regno].invariant == NULL_RTX
2650                       || rtx_equal_p (ira_reg_equiv[to_regno].invariant, x));
2651           ira_reg_equiv[to_regno].invariant = x;
2652         }
2653       if (find_reg_note (insn, REG_EQUIV, x) == NULL_RTX)
2654         {
2655           note = set_unique_reg_note (insn, REG_EQUIV, x);
2656           gcc_assert (note != NULL_RTX);
2657           if (internal_flag_ira_verbose > 3 && ira_dump_file != NULL)
2658             {
2659               fprintf (ira_dump_file,
2660                        "      Adding equiv note to insn %u for reg %d ",
2661                        INSN_UID (insn), to_regno);
2662               dump_value_slim (ira_dump_file, x, 1);
2663               fprintf (ira_dump_file, "\n");
2664             }
2665         }
2666     }
2667   ira_reg_equiv[to_regno].init_insns
2668     = gen_rtx_INSN_LIST (VOIDmode, insn,
2669                          ira_reg_equiv[to_regno].init_insns);
2670   if (internal_flag_ira_verbose > 3 && ira_dump_file != NULL)
2671     fprintf (ira_dump_file,
2672              "      Adding equiv init move insn %u to reg %d\n",
2673              INSN_UID (insn), to_regno);
2674 }
2675
2676 /* Fix values of array REG_EQUIV_INIT after live range splitting done
2677    by IRA.  */
2678 static void
2679 fix_reg_equiv_init (void)
2680 {
2681   int max_regno = max_reg_num ();
2682   int i, new_regno, max;
2683   rtx set;
2684   rtx_insn_list *x, *next, *prev;
2685   rtx_insn *insn;
2686
2687   if (max_regno_before_ira < max_regno)
2688     {
2689       max = vec_safe_length (reg_equivs);
2690       grow_reg_equivs ();
2691       for (i = FIRST_PSEUDO_REGISTER; i < max; i++)
2692         for (prev = NULL, x = reg_equiv_init (i);
2693              x != NULL_RTX;
2694              x = next)
2695           {
2696             next = x->next ();
2697             insn = x->insn ();
2698             set = single_set (insn);
2699             ira_assert (set != NULL_RTX
2700                         && (REG_P (SET_DEST (set)) || REG_P (SET_SRC (set))));
2701             if (REG_P (SET_DEST (set))
2702                 && ((int) REGNO (SET_DEST (set)) == i
2703                     || (int) ORIGINAL_REGNO (SET_DEST (set)) == i))
2704               new_regno = REGNO (SET_DEST (set));
2705             else if (REG_P (SET_SRC (set))
2706                      && ((int) REGNO (SET_SRC (set)) == i
2707                          || (int) ORIGINAL_REGNO (SET_SRC (set)) == i))
2708               new_regno = REGNO (SET_SRC (set));
2709             else
2710               gcc_unreachable ();
2711             if (new_regno == i)
2712               prev = x;
2713             else
2714               {
2715                 /* Remove the wrong list element.  */
2716                 if (prev == NULL_RTX)
2717                   reg_equiv_init (i) = next;
2718                 else
2719                   XEXP (prev, 1) = next;
2720                 XEXP (x, 1) = reg_equiv_init (new_regno);
2721                 reg_equiv_init (new_regno) = x;
2722               }
2723           }
2724     }
2725 }
2726
2727 #ifdef ENABLE_IRA_CHECKING
2728 /* Print redundant memory-memory copies.  */
2729 static void
2730 print_redundant_copies (void)
2731 {
2732   int hard_regno;
2733   ira_allocno_t a;
2734   ira_copy_t cp, next_cp;
2735   ira_allocno_iterator ai;
2736
2737   FOR_EACH_ALLOCNO (a, ai)
2738     {
2739       if (ALLOCNO_CAP_MEMBER (a) != NULL)
2740         /* It is a cap.  */
2741         continue;
2742       hard_regno = ALLOCNO_HARD_REGNO (a);
2743       if (hard_regno >= 0)
2744         continue;
2745       for (cp = ALLOCNO_COPIES (a); cp != NULL; cp = next_cp)
2746         if (cp->first == a)
2747           next_cp = cp->next_first_allocno_copy;
2748         else
2749           {
2750             next_cp = cp->next_second_allocno_copy;
2751             if (internal_flag_ira_verbose > 4 && ira_dump_file != NULL
2752                 && cp->insn != NULL_RTX
2753                 && ALLOCNO_HARD_REGNO (cp->first) == hard_regno)
2754               fprintf (ira_dump_file,
2755                        "        Redundant move from %d(freq %d):%d\n",
2756                        INSN_UID (cp->insn), cp->freq, hard_regno);
2757           }
2758     }
2759 }
2760 #endif
2761
2762 /* Setup preferred and alternative classes for new pseudo-registers
2763    created by IRA starting with START.  */
2764 static void
2765 setup_preferred_alternate_classes_for_new_pseudos (int start)
2766 {
2767   int i, old_regno;
2768   int max_regno = max_reg_num ();
2769
2770   for (i = start; i < max_regno; i++)
2771     {
2772       old_regno = ORIGINAL_REGNO (regno_reg_rtx[i]);
2773       ira_assert (i != old_regno);
2774       setup_reg_classes (i, reg_preferred_class (old_regno),
2775                          reg_alternate_class (old_regno),
2776                          reg_allocno_class (old_regno));
2777       if (internal_flag_ira_verbose > 2 && ira_dump_file != NULL)
2778         fprintf (ira_dump_file,
2779                  "    New r%d: setting preferred %s, alternative %s\n",
2780                  i, reg_class_names[reg_preferred_class (old_regno)],
2781                  reg_class_names[reg_alternate_class (old_regno)]);
2782     }
2783 }
2784
2785 \f
2786 /* The number of entries allocated in reg_info.  */
2787 static int allocated_reg_info_size;
2788
2789 /* Regional allocation can create new pseudo-registers.  This function
2790    expands some arrays for pseudo-registers.  */
2791 static void
2792 expand_reg_info (void)
2793 {
2794   int i;
2795   int size = max_reg_num ();
2796
2797   resize_reg_info ();
2798   for (i = allocated_reg_info_size; i < size; i++)
2799     setup_reg_classes (i, GENERAL_REGS, ALL_REGS, GENERAL_REGS);
2800   setup_preferred_alternate_classes_for_new_pseudos (allocated_reg_info_size);
2801   allocated_reg_info_size = size;
2802 }
2803
2804 /* Return TRUE if there is too high register pressure in the function.
2805    It is used to decide when stack slot sharing is worth to do.  */
2806 static bool
2807 too_high_register_pressure_p (void)
2808 {
2809   int i;
2810   enum reg_class pclass;
2811
2812   for (i = 0; i < ira_pressure_classes_num; i++)
2813     {
2814       pclass = ira_pressure_classes[i];
2815       if (ira_loop_tree_root->reg_pressure[pclass] > 10000)
2816         return true;
2817     }
2818   return false;
2819 }
2820
2821 \f
2822
2823 /* Indicate that hard register number FROM was eliminated and replaced with
2824    an offset from hard register number TO.  The status of hard registers live
2825    at the start of a basic block is updated by replacing a use of FROM with
2826    a use of TO.  */
2827
2828 void
2829 mark_elimination (int from, int to)
2830 {
2831   basic_block bb;
2832   bitmap r;
2833
2834   FOR_EACH_BB_FN (bb, cfun)
2835     {
2836       r = DF_LR_IN (bb);
2837       if (bitmap_bit_p (r, from))
2838         {
2839           bitmap_clear_bit (r, from);
2840           bitmap_set_bit (r, to);
2841         }
2842       if (! df_live)
2843         continue;
2844       r = DF_LIVE_IN (bb);
2845       if (bitmap_bit_p (r, from))
2846         {
2847           bitmap_clear_bit (r, from);
2848           bitmap_set_bit (r, to);
2849         }
2850     }
2851 }
2852
2853 \f
2854
2855 /* The length of the following array.  */
2856 int ira_reg_equiv_len;
2857
2858 /* Info about equiv. info for each register.  */
2859 struct ira_reg_equiv_s *ira_reg_equiv;
2860
2861 /* Expand ira_reg_equiv if necessary.  */
2862 void
2863 ira_expand_reg_equiv (void)
2864 {
2865   int old = ira_reg_equiv_len;
2866
2867   if (ira_reg_equiv_len > max_reg_num ())
2868     return;
2869   ira_reg_equiv_len = max_reg_num () * 3 / 2 + 1;
2870   ira_reg_equiv
2871     = (struct ira_reg_equiv_s *) xrealloc (ira_reg_equiv,
2872                                          ira_reg_equiv_len
2873                                          * sizeof (struct ira_reg_equiv_s));
2874   gcc_assert (old < ira_reg_equiv_len);
2875   memset (ira_reg_equiv + old, 0,
2876           sizeof (struct ira_reg_equiv_s) * (ira_reg_equiv_len - old));
2877 }
2878
2879 static void
2880 init_reg_equiv (void)
2881 {
2882   ira_reg_equiv_len = 0;
2883   ira_reg_equiv = NULL;
2884   ira_expand_reg_equiv ();
2885 }
2886
2887 static void
2888 finish_reg_equiv (void)
2889 {
2890   free (ira_reg_equiv);
2891 }
2892
2893 \f
2894
2895 struct equivalence
2896 {
2897   /* Set when a REG_EQUIV note is found or created.  Use to
2898      keep track of what memory accesses might be created later,
2899      e.g. by reload.  */
2900   rtx replacement;
2901   rtx *src_p;
2902
2903   /* The list of each instruction which initializes this register.
2904
2905      NULL indicates we know nothing about this register's equivalence
2906      properties.
2907
2908      An INSN_LIST with a NULL insn indicates this pseudo is already
2909      known to not have a valid equivalence.  */
2910   rtx_insn_list *init_insns;
2911
2912   /* Loop depth is used to recognize equivalences which appear
2913      to be present within the same loop (or in an inner loop).  */
2914   short loop_depth;
2915   /* Nonzero if this had a preexisting REG_EQUIV note.  */
2916   unsigned char is_arg_equivalence : 1;
2917   /* Set when an attempt should be made to replace a register
2918      with the associated src_p entry.  */
2919   unsigned char replace : 1;
2920   /* Set if this register has no known equivalence.  */
2921   unsigned char no_equiv : 1;
2922 };
2923
2924 /* reg_equiv[N] (where N is a pseudo reg number) is the equivalence
2925    structure for that register.  */
2926 static struct equivalence *reg_equiv;
2927
2928 /* Used for communication between the following two functions: contains
2929    a MEM that we wish to ensure remains unchanged.  */
2930 static rtx equiv_mem;
2931
2932 /* Set nonzero if EQUIV_MEM is modified.  */
2933 static int equiv_mem_modified;
2934
2935 /* If EQUIV_MEM is modified by modifying DEST, indicate that it is modified.
2936    Called via note_stores.  */
2937 static void
2938 validate_equiv_mem_from_store (rtx dest, const_rtx set ATTRIBUTE_UNUSED,
2939                                void *data ATTRIBUTE_UNUSED)
2940 {
2941   if ((REG_P (dest)
2942        && reg_overlap_mentioned_p (dest, equiv_mem))
2943       || (MEM_P (dest)
2944           && anti_dependence (equiv_mem, dest)))
2945     equiv_mem_modified = 1;
2946 }
2947
2948 /* Verify that no store between START and the death of REG invalidates
2949    MEMREF.  MEMREF is invalidated by modifying a register used in MEMREF,
2950    by storing into an overlapping memory location, or with a non-const
2951    CALL_INSN.
2952
2953    Return 1 if MEMREF remains valid.  */
2954 static int
2955 validate_equiv_mem (rtx_insn *start, rtx reg, rtx memref)
2956 {
2957   rtx_insn *insn;
2958   rtx note;
2959
2960   equiv_mem = memref;
2961   equiv_mem_modified = 0;
2962
2963   /* If the memory reference has side effects or is volatile, it isn't a
2964      valid equivalence.  */
2965   if (side_effects_p (memref))
2966     return 0;
2967
2968   for (insn = start; insn && ! equiv_mem_modified; insn = NEXT_INSN (insn))
2969     {
2970       if (! INSN_P (insn))
2971         continue;
2972
2973       if (find_reg_note (insn, REG_DEAD, reg))
2974         return 1;
2975
2976       /* This used to ignore readonly memory and const/pure calls.  The problem
2977          is the equivalent form may reference a pseudo which gets assigned a
2978          call clobbered hard reg.  When we later replace REG with its
2979          equivalent form, the value in the call-clobbered reg has been
2980          changed and all hell breaks loose.  */
2981       if (CALL_P (insn))
2982         return 0;
2983
2984       note_stores (PATTERN (insn), validate_equiv_mem_from_store, NULL);
2985
2986       /* If a register mentioned in MEMREF is modified via an
2987          auto-increment, we lose the equivalence.  Do the same if one
2988          dies; although we could extend the life, it doesn't seem worth
2989          the trouble.  */
2990
2991       for (note = REG_NOTES (insn); note; note = XEXP (note, 1))
2992         if ((REG_NOTE_KIND (note) == REG_INC
2993              || REG_NOTE_KIND (note) == REG_DEAD)
2994             && REG_P (XEXP (note, 0))
2995             && reg_overlap_mentioned_p (XEXP (note, 0), memref))
2996           return 0;
2997     }
2998
2999   return 0;
3000 }
3001
3002 /* Returns zero if X is known to be invariant.  */
3003 static int
3004 equiv_init_varies_p (rtx x)
3005 {
3006   RTX_CODE code = GET_CODE (x);
3007   int i;
3008   const char *fmt;
3009
3010   switch (code)
3011     {
3012     case MEM:
3013       return !MEM_READONLY_P (x) || equiv_init_varies_p (XEXP (x, 0));
3014
3015     case CONST:
3016     CASE_CONST_ANY:
3017     case SYMBOL_REF:
3018     case LABEL_REF:
3019       return 0;
3020
3021     case REG:
3022       return reg_equiv[REGNO (x)].replace == 0 && rtx_varies_p (x, 0);
3023
3024     case ASM_OPERANDS:
3025       if (MEM_VOLATILE_P (x))
3026         return 1;
3027
3028       /* Fall through.  */
3029
3030     default:
3031       break;
3032     }
3033
3034   fmt = GET_RTX_FORMAT (code);
3035   for (i = GET_RTX_LENGTH (code) - 1; i >= 0; i--)
3036     if (fmt[i] == 'e')
3037       {
3038         if (equiv_init_varies_p (XEXP (x, i)))
3039           return 1;
3040       }
3041     else if (fmt[i] == 'E')
3042       {
3043         int j;
3044         for (j = 0; j < XVECLEN (x, i); j++)
3045           if (equiv_init_varies_p (XVECEXP (x, i, j)))
3046             return 1;
3047       }
3048
3049   return 0;
3050 }
3051
3052 /* Returns nonzero if X (used to initialize register REGNO) is movable.
3053    X is only movable if the registers it uses have equivalent initializations
3054    which appear to be within the same loop (or in an inner loop) and movable
3055    or if they are not candidates for local_alloc and don't vary.  */
3056 static int
3057 equiv_init_movable_p (rtx x, int regno)
3058 {
3059   int i, j;
3060   const char *fmt;
3061   enum rtx_code code = GET_CODE (x);
3062
3063   switch (code)
3064     {
3065     case SET:
3066       return equiv_init_movable_p (SET_SRC (x), regno);
3067
3068     case CC0:
3069     case CLOBBER:
3070       return 0;
3071
3072     case PRE_INC:
3073     case PRE_DEC:
3074     case POST_INC:
3075     case POST_DEC:
3076     case PRE_MODIFY:
3077     case POST_MODIFY:
3078       return 0;
3079
3080     case REG:
3081       return ((reg_equiv[REGNO (x)].loop_depth >= reg_equiv[regno].loop_depth
3082                && reg_equiv[REGNO (x)].replace)
3083               || (REG_BASIC_BLOCK (REGNO (x)) < NUM_FIXED_BLOCKS
3084                   && ! rtx_varies_p (x, 0)));
3085
3086     case UNSPEC_VOLATILE:
3087       return 0;
3088
3089     case ASM_OPERANDS:
3090       if (MEM_VOLATILE_P (x))
3091         return 0;
3092
3093       /* Fall through.  */
3094
3095     default:
3096       break;
3097     }
3098
3099   fmt = GET_RTX_FORMAT (code);
3100   for (i = GET_RTX_LENGTH (code) - 1; i >= 0; i--)
3101     switch (fmt[i])
3102       {
3103       case 'e':
3104         if (! equiv_init_movable_p (XEXP (x, i), regno))
3105           return 0;
3106         break;
3107       case 'E':
3108         for (j = XVECLEN (x, i) - 1; j >= 0; j--)
3109           if (! equiv_init_movable_p (XVECEXP (x, i, j), regno))
3110             return 0;
3111         break;
3112       }
3113
3114   return 1;
3115 }
3116
3117 /* TRUE if X uses any registers for which reg_equiv[REGNO].replace is
3118    true.  */
3119 static int
3120 contains_replace_regs (rtx x)
3121 {
3122   int i, j;
3123   const char *fmt;
3124   enum rtx_code code = GET_CODE (x);
3125
3126   switch (code)
3127     {
3128     case CONST:
3129     case LABEL_REF:
3130     case SYMBOL_REF:
3131     CASE_CONST_ANY:
3132     case PC:
3133     case CC0:
3134     case HIGH:
3135       return 0;
3136
3137     case REG:
3138       return reg_equiv[REGNO (x)].replace;
3139
3140     default:
3141       break;
3142     }
3143
3144   fmt = GET_RTX_FORMAT (code);
3145   for (i = GET_RTX_LENGTH (code) - 1; i >= 0; i--)
3146     switch (fmt[i])
3147       {
3148       case 'e':
3149         if (contains_replace_regs (XEXP (x, i)))
3150           return 1;
3151         break;
3152       case 'E':
3153         for (j = XVECLEN (x, i) - 1; j >= 0; j--)
3154           if (contains_replace_regs (XVECEXP (x, i, j)))
3155             return 1;
3156         break;
3157       }
3158
3159   return 0;
3160 }
3161
3162 /* TRUE if X references a memory location that would be affected by a store
3163    to MEMREF.  */
3164 static int
3165 memref_referenced_p (rtx memref, rtx x)
3166 {
3167   int i, j;
3168   const char *fmt;
3169   enum rtx_code code = GET_CODE (x);
3170
3171   switch (code)
3172     {
3173     case CONST:
3174     case LABEL_REF:
3175     case SYMBOL_REF:
3176     CASE_CONST_ANY:
3177     case PC:
3178     case CC0:
3179     case HIGH:
3180     case LO_SUM:
3181       return 0;
3182
3183     case REG:
3184       return (reg_equiv[REGNO (x)].replacement
3185               && memref_referenced_p (memref,
3186                                       reg_equiv[REGNO (x)].replacement));
3187
3188     case MEM:
3189       if (true_dependence (memref, VOIDmode, x))
3190         return 1;
3191       break;
3192
3193     case SET:
3194       /* If we are setting a MEM, it doesn't count (its address does), but any
3195          other SET_DEST that has a MEM in it is referencing the MEM.  */
3196       if (MEM_P (SET_DEST (x)))
3197         {
3198           if (memref_referenced_p (memref, XEXP (SET_DEST (x), 0)))
3199             return 1;
3200         }
3201       else if (memref_referenced_p (memref, SET_DEST (x)))
3202         return 1;
3203
3204       return memref_referenced_p (memref, SET_SRC (x));
3205
3206     default:
3207       break;
3208     }
3209
3210   fmt = GET_RTX_FORMAT (code);
3211   for (i = GET_RTX_LENGTH (code) - 1; i >= 0; i--)
3212     switch (fmt[i])
3213       {
3214       case 'e':
3215         if (memref_referenced_p (memref, XEXP (x, i)))
3216           return 1;
3217         break;
3218       case 'E':
3219         for (j = XVECLEN (x, i) - 1; j >= 0; j--)
3220           if (memref_referenced_p (memref, XVECEXP (x, i, j)))
3221             return 1;
3222         break;
3223       }
3224
3225   return 0;
3226 }
3227
3228 /* TRUE if some insn in the range (START, END] references a memory location
3229    that would be affected by a store to MEMREF.
3230
3231    Callers should not call this routine if START is after END in the
3232    RTL chain.  */
3233
3234 static int
3235 memref_used_between_p (rtx memref, rtx_insn *start, rtx_insn *end)
3236 {
3237   rtx_insn *insn;
3238
3239   for (insn = NEXT_INSN (start);
3240        insn && insn != NEXT_INSN (end);
3241        insn = NEXT_INSN (insn))
3242     {
3243       if (!NONDEBUG_INSN_P (insn))
3244         continue;
3245
3246       if (memref_referenced_p (memref, PATTERN (insn)))
3247         return 1;
3248
3249       /* Nonconst functions may access memory.  */
3250       if (CALL_P (insn) && (! RTL_CONST_CALL_P (insn)))
3251         return 1;
3252     }
3253
3254   gcc_assert (insn == NEXT_INSN (end));
3255   return 0;
3256 }
3257
3258 /* Mark REG as having no known equivalence.
3259    Some instructions might have been processed before and furnished
3260    with REG_EQUIV notes for this register; these notes will have to be
3261    removed.
3262    STORE is the piece of RTL that does the non-constant / conflicting
3263    assignment - a SET, CLOBBER or REG_INC note.  It is currently not used,
3264    but needs to be there because this function is called from note_stores.  */
3265 static void
3266 no_equiv (rtx reg, const_rtx store ATTRIBUTE_UNUSED,
3267           void *data ATTRIBUTE_UNUSED)
3268 {
3269   int regno;
3270   rtx_insn_list *list;
3271
3272   if (!REG_P (reg))
3273     return;
3274   regno = REGNO (reg);
3275   reg_equiv[regno].no_equiv = 1;
3276   list = reg_equiv[regno].init_insns;
3277   if (list && list->insn () == NULL)
3278     return;
3279   reg_equiv[regno].init_insns = gen_rtx_INSN_LIST (VOIDmode, NULL_RTX, NULL);
3280   reg_equiv[regno].replacement = NULL_RTX;
3281   /* This doesn't matter for equivalences made for argument registers, we
3282      should keep their initialization insns.  */
3283   if (reg_equiv[regno].is_arg_equivalence)
3284     return;
3285   ira_reg_equiv[regno].defined_p = false;
3286   ira_reg_equiv[regno].init_insns = NULL;
3287   for (; list; list = list->next ())
3288     {
3289       rtx_insn *insn = list->insn ();
3290       remove_note (insn, find_reg_note (insn, REG_EQUIV, NULL_RTX));
3291     }
3292 }
3293
3294 /* Check whether the SUBREG is a paradoxical subreg and set the result
3295    in PDX_SUBREGS.  */
3296
3297 static void
3298 set_paradoxical_subreg (rtx_insn *insn, bool *pdx_subregs)
3299 {
3300   subrtx_iterator::array_type array;
3301   FOR_EACH_SUBRTX (iter, array, PATTERN (insn), NONCONST)
3302     {
3303       const_rtx subreg = *iter;
3304       if (GET_CODE (subreg) == SUBREG)
3305         {
3306           const_rtx reg = SUBREG_REG (subreg);
3307           if (REG_P (reg) && paradoxical_subreg_p (subreg))
3308             pdx_subregs[REGNO (reg)] = true;
3309         }
3310     }
3311 }
3312
3313 /* In DEBUG_INSN location adjust REGs from CLEARED_REGS bitmap to the
3314    equivalent replacement.  */
3315
3316 static rtx
3317 adjust_cleared_regs (rtx loc, const_rtx old_rtx ATTRIBUTE_UNUSED, void *data)
3318 {
3319   if (REG_P (loc))
3320     {
3321       bitmap cleared_regs = (bitmap) data;
3322       if (bitmap_bit_p (cleared_regs, REGNO (loc)))
3323         return simplify_replace_fn_rtx (copy_rtx (*reg_equiv[REGNO (loc)].src_p),
3324                                         NULL_RTX, adjust_cleared_regs, data);
3325     }
3326   return NULL_RTX;
3327 }
3328
3329 /* Find registers that are equivalent to a single value throughout the
3330    compilation (either because they can be referenced in memory or are
3331    set once from a single constant).  Lower their priority for a
3332    register.
3333
3334    If such a register is only referenced once, try substituting its
3335    value into the using insn.  If it succeeds, we can eliminate the
3336    register completely.
3337
3338    Initialize init_insns in ira_reg_equiv array.  */
3339 static void
3340 update_equiv_regs (void)
3341 {
3342   rtx_insn *insn;
3343   basic_block bb;
3344   int loop_depth;
3345   bitmap cleared_regs;
3346   bool *pdx_subregs;
3347   bitmap_head seen_insns;
3348
3349   /* Use pdx_subregs to show whether a reg is used in a paradoxical
3350      subreg.  */
3351   pdx_subregs = XCNEWVEC (bool, max_regno);
3352
3353   reg_equiv = XCNEWVEC (struct equivalence, max_regno);
3354   grow_reg_equivs ();
3355
3356   init_alias_analysis ();
3357
3358   /* Scan insns and set pdx_subregs[regno] if the reg is used in a
3359      paradoxical subreg. Don't set such reg equivalent to a mem,
3360      because lra will not substitute such equiv memory in order to
3361      prevent access beyond allocated memory for paradoxical memory subreg.  */
3362   FOR_EACH_BB_FN (bb, cfun)
3363     FOR_BB_INSNS (bb, insn)
3364       if (NONDEBUG_INSN_P (insn))
3365         set_paradoxical_subreg (insn, pdx_subregs);
3366
3367   /* Scan the insns and find which registers have equivalences.  Do this
3368      in a separate scan of the insns because (due to -fcse-follow-jumps)
3369      a register can be set below its use.  */
3370   FOR_EACH_BB_FN (bb, cfun)
3371     {
3372       loop_depth = bb_loop_depth (bb);
3373
3374       for (insn = BB_HEAD (bb);
3375            insn != NEXT_INSN (BB_END (bb));
3376            insn = NEXT_INSN (insn))
3377         {
3378           rtx note;
3379           rtx set;
3380           rtx dest, src;
3381           int regno;
3382
3383           if (! INSN_P (insn))
3384             continue;
3385
3386           for (note = REG_NOTES (insn); note; note = XEXP (note, 1))
3387             if (REG_NOTE_KIND (note) == REG_INC)
3388               no_equiv (XEXP (note, 0), note, NULL);
3389
3390           set = single_set (insn);
3391
3392           /* If this insn contains more (or less) than a single SET,
3393              only mark all destinations as having no known equivalence.  */
3394           if (set == NULL_RTX
3395               || side_effects_p (SET_SRC (set)))
3396             {
3397               note_stores (PATTERN (insn), no_equiv, NULL);
3398               continue;
3399             }
3400           else if (GET_CODE (PATTERN (insn)) == PARALLEL)
3401             {
3402               int i;
3403
3404               for (i = XVECLEN (PATTERN (insn), 0) - 1; i >= 0; i--)
3405                 {
3406                   rtx part = XVECEXP (PATTERN (insn), 0, i);
3407                   if (part != set)
3408                     note_stores (part, no_equiv, NULL);
3409                 }
3410             }
3411
3412           dest = SET_DEST (set);
3413           src = SET_SRC (set);
3414
3415           /* See if this is setting up the equivalence between an argument
3416              register and its stack slot.  */
3417           note = find_reg_note (insn, REG_EQUIV, NULL_RTX);
3418           if (note)
3419             {
3420               gcc_assert (REG_P (dest));
3421               regno = REGNO (dest);
3422
3423               /* Note that we don't want to clear init_insns in
3424                  ira_reg_equiv even if there are multiple sets of this
3425                  register.  */
3426               reg_equiv[regno].is_arg_equivalence = 1;
3427
3428               /* The insn result can have equivalence memory although
3429                  the equivalence is not set up by the insn.  We add
3430                  this insn to init insns as it is a flag for now that
3431                  regno has an equivalence.  We will remove the insn
3432                  from init insn list later.  */
3433               if (rtx_equal_p (src, XEXP (note, 0)) || MEM_P (XEXP (note, 0)))
3434                 ira_reg_equiv[regno].init_insns
3435                   = gen_rtx_INSN_LIST (VOIDmode, insn,
3436                                        ira_reg_equiv[regno].init_insns);
3437
3438               /* Continue normally in case this is a candidate for
3439                  replacements.  */
3440             }
3441
3442           if (!optimize)
3443             continue;
3444
3445           /* We only handle the case of a pseudo register being set
3446              once, or always to the same value.  */
3447           /* ??? The mn10200 port breaks if we add equivalences for
3448              values that need an ADDRESS_REGS register and set them equivalent
3449              to a MEM of a pseudo.  The actual problem is in the over-conservative
3450              handling of INPADDR_ADDRESS / INPUT_ADDRESS / INPUT triples in
3451              calculate_needs, but we traditionally work around this problem
3452              here by rejecting equivalences when the destination is in a register
3453              that's likely spilled.  This is fragile, of course, since the
3454              preferred class of a pseudo depends on all instructions that set
3455              or use it.  */
3456
3457           if (!REG_P (dest)
3458               || (regno = REGNO (dest)) < FIRST_PSEUDO_REGISTER
3459               || (reg_equiv[regno].init_insns
3460                   && reg_equiv[regno].init_insns->insn () == NULL)
3461               || (targetm.class_likely_spilled_p (reg_preferred_class (regno))
3462                   && MEM_P (src) && ! reg_equiv[regno].is_arg_equivalence))
3463             {
3464               /* This might be setting a SUBREG of a pseudo, a pseudo that is
3465                  also set somewhere else to a constant.  */
3466               note_stores (set, no_equiv, NULL);
3467               continue;
3468             }
3469
3470           /* Don't set reg (if pdx_subregs[regno] == true) equivalent to a mem.  */
3471           if (MEM_P (src) && pdx_subregs[regno])
3472             {
3473               note_stores (set, no_equiv, NULL);
3474               continue;
3475             }
3476
3477           note = find_reg_note (insn, REG_EQUAL, NULL_RTX);
3478
3479           /* cse sometimes generates function invariants, but doesn't put a
3480              REG_EQUAL note on the insn.  Since this note would be redundant,
3481              there's no point creating it earlier than here.  */
3482           if (! note && ! rtx_varies_p (src, 0))
3483             note = set_unique_reg_note (insn, REG_EQUAL, copy_rtx (src));
3484
3485           /* Don't bother considering a REG_EQUAL note containing an EXPR_LIST
3486              since it represents a function call.  */
3487           if (note && GET_CODE (XEXP (note, 0)) == EXPR_LIST)
3488             note = NULL_RTX;
3489
3490           if (DF_REG_DEF_COUNT (regno) != 1)
3491             {
3492               bool equal_p = true;
3493               rtx_insn_list *list;
3494
3495               /* If we have already processed this pseudo and determined it
3496                  can not have an equivalence, then honor that decision.  */
3497               if (reg_equiv[regno].no_equiv)
3498                 continue;
3499
3500               if (! note
3501                   || rtx_varies_p (XEXP (note, 0), 0)
3502                   || (reg_equiv[regno].replacement
3503                       && ! rtx_equal_p (XEXP (note, 0),
3504                                         reg_equiv[regno].replacement)))
3505                 {
3506                   no_equiv (dest, set, NULL);
3507                   continue;
3508                 }
3509
3510               list = reg_equiv[regno].init_insns;
3511               for (; list; list = list->next ())
3512                 {
3513                   rtx note_tmp;
3514                   rtx_insn *insn_tmp;
3515
3516                   insn_tmp = list->insn ();
3517                   note_tmp = find_reg_note (insn_tmp, REG_EQUAL, NULL_RTX);
3518                   gcc_assert (note_tmp);
3519                   if (! rtx_equal_p (XEXP (note, 0), XEXP (note_tmp, 0)))
3520                     {
3521                       equal_p = false;
3522                       break;
3523                     }
3524                 }
3525
3526               if (! equal_p)
3527                 {
3528                   no_equiv (dest, set, NULL);
3529                   continue;
3530                 }
3531             }
3532
3533           /* Record this insn as initializing this register.  */
3534           reg_equiv[regno].init_insns
3535             = gen_rtx_INSN_LIST (VOIDmode, insn, reg_equiv[regno].init_insns);
3536
3537           /* If this register is known to be equal to a constant, record that
3538              it is always equivalent to the constant.  */
3539           if (DF_REG_DEF_COUNT (regno) == 1
3540               && note && ! rtx_varies_p (XEXP (note, 0), 0))
3541             {
3542               rtx note_value = XEXP (note, 0);
3543               remove_note (insn, note);
3544               set_unique_reg_note (insn, REG_EQUIV, note_value);
3545             }
3546
3547           /* If this insn introduces a "constant" register, decrease the priority
3548              of that register.  Record this insn if the register is only used once
3549              more and the equivalence value is the same as our source.
3550
3551              The latter condition is checked for two reasons:  First, it is an
3552              indication that it may be more efficient to actually emit the insn
3553              as written (if no registers are available, reload will substitute
3554              the equivalence).  Secondly, it avoids problems with any registers
3555              dying in this insn whose death notes would be missed.
3556
3557              If we don't have a REG_EQUIV note, see if this insn is loading
3558              a register used only in one basic block from a MEM.  If so, and the
3559              MEM remains unchanged for the life of the register, add a REG_EQUIV
3560              note.  */
3561           note = find_reg_note (insn, REG_EQUIV, NULL_RTX);
3562
3563           if (note == NULL_RTX && REG_BASIC_BLOCK (regno) >= NUM_FIXED_BLOCKS
3564               && MEM_P (SET_SRC (set))
3565               && validate_equiv_mem (insn, dest, SET_SRC (set)))
3566             note = set_unique_reg_note (insn, REG_EQUIV, copy_rtx (SET_SRC (set)));
3567
3568           if (note)
3569             {
3570               int regno = REGNO (dest);
3571               rtx x = XEXP (note, 0);
3572
3573               /* If we haven't done so, record for reload that this is an
3574                  equivalencing insn.  */
3575               if (!reg_equiv[regno].is_arg_equivalence)
3576                 ira_reg_equiv[regno].init_insns
3577                   = gen_rtx_INSN_LIST (VOIDmode, insn,
3578                                        ira_reg_equiv[regno].init_insns);
3579
3580               reg_equiv[regno].replacement = x;
3581               reg_equiv[regno].src_p = &SET_SRC (set);
3582               reg_equiv[regno].loop_depth = (short) loop_depth;
3583
3584               /* Don't mess with things live during setjmp.  */
3585               if (REG_LIVE_LENGTH (regno) >= 0 && optimize)
3586                 {
3587                   /* Note that the statement below does not affect the priority
3588                      in local-alloc!  */
3589                   REG_LIVE_LENGTH (regno) *= 2;
3590
3591                   /* If the register is referenced exactly twice, meaning it is
3592                      set once and used once, indicate that the reference may be
3593                      replaced by the equivalence we computed above.  Do this
3594                      even if the register is only used in one block so that
3595                      dependencies can be handled where the last register is
3596                      used in a different block (i.e. HIGH / LO_SUM sequences)
3597                      and to reduce the number of registers alive across
3598                      calls.  */
3599
3600                   if (REG_N_REFS (regno) == 2
3601                       && (rtx_equal_p (x, src)
3602                           || ! equiv_init_varies_p (src))
3603                       && NONJUMP_INSN_P (insn)
3604                       && equiv_init_movable_p (PATTERN (insn), regno))
3605                     reg_equiv[regno].replace = 1;
3606                 }
3607             }
3608         }
3609     }
3610
3611   if (!optimize)
3612     goto out;
3613
3614   /* A second pass, to gather additional equivalences with memory.  This needs
3615      to be done after we know which registers we are going to replace.  */
3616
3617   bitmap_initialize (&seen_insns, NULL);
3618   for (insn = get_insns (); insn; insn = NEXT_INSN (insn))
3619     {
3620       rtx set, src, dest;
3621       unsigned regno;
3622
3623       bitmap_set_bit (&seen_insns, INSN_UID (insn));
3624
3625       if (! INSN_P (insn))
3626         continue;
3627
3628       set = single_set (insn);
3629       if (! set)
3630         continue;
3631
3632       dest = SET_DEST (set);
3633       src = SET_SRC (set);
3634
3635       /* If this sets a MEM to the contents of a REG that is only used
3636          in a single basic block, see if the register is always equivalent
3637          to that memory location and if moving the store from INSN to the
3638          insn that set REG is safe.  If so, put a REG_EQUIV note on the
3639          initializing insn.
3640
3641          Don't add a REG_EQUIV note if the insn already has one.  The existing
3642          REG_EQUIV is likely more useful than the one we are adding.
3643
3644          If one of the regs in the address has reg_equiv[REGNO].replace set,
3645          then we can't add this REG_EQUIV note.  The reg_equiv[REGNO].replace
3646          optimization may move the set of this register immediately before
3647          insn, which puts it after reg_equiv[REGNO].init_insns, and hence
3648          the mention in the REG_EQUIV note would be to an uninitialized
3649          pseudo.  */
3650
3651       if (MEM_P (dest) && REG_P (src)
3652           && (regno = REGNO (src)) >= FIRST_PSEUDO_REGISTER
3653           && REG_BASIC_BLOCK (regno) >= NUM_FIXED_BLOCKS
3654           && DF_REG_DEF_COUNT (regno) == 1
3655           && reg_equiv[regno].init_insns != NULL
3656           && reg_equiv[regno].init_insns->insn () != NULL
3657           && ! find_reg_note (XEXP (reg_equiv[regno].init_insns, 0),
3658                               REG_EQUIV, NULL_RTX)
3659           && ! contains_replace_regs (XEXP (dest, 0))
3660           && ! pdx_subregs[regno])
3661         {
3662           rtx_insn *init_insn =
3663             as_a <rtx_insn *> (XEXP (reg_equiv[regno].init_insns, 0));
3664           if (validate_equiv_mem (init_insn, src, dest)
3665               && bitmap_bit_p (&seen_insns, INSN_UID (init_insn))
3666               && ! memref_used_between_p (dest, init_insn, insn)
3667               /* Attaching a REG_EQUIV note will fail if INIT_INSN has
3668                  multiple sets.  */
3669               && set_unique_reg_note (init_insn, REG_EQUIV, copy_rtx (dest)))
3670             {
3671               /* This insn makes the equivalence, not the one initializing
3672                  the register.  */
3673               ira_reg_equiv[regno].init_insns
3674                 = gen_rtx_INSN_LIST (VOIDmode, insn, NULL_RTX);
3675               df_notes_rescan (init_insn);
3676               if (dump_file)
3677                 fprintf (dump_file,
3678                          "Adding REG_EQUIV to insn %d for source of insn %d\n",
3679                          INSN_UID (init_insn),
3680                          INSN_UID (insn));
3681             }
3682         }
3683     }
3684   bitmap_clear (&seen_insns);
3685
3686   cleared_regs = BITMAP_ALLOC (NULL);
3687   /* Now scan all regs killed in an insn to see if any of them are
3688      registers only used that once.  If so, see if we can replace the
3689      reference with the equivalent form.  If we can, delete the
3690      initializing reference and this register will go away.  If we
3691      can't replace the reference, and the initializing reference is
3692      within the same loop (or in an inner loop), then move the register
3693      initialization just before the use, so that they are in the same
3694      basic block.  */
3695   FOR_EACH_BB_REVERSE_FN (bb, cfun)
3696     {
3697       loop_depth = bb_loop_depth (bb);
3698       for (insn = BB_END (bb);
3699            insn != PREV_INSN (BB_HEAD (bb));
3700            insn = PREV_INSN (insn))
3701         {
3702           rtx link;
3703
3704           if (! INSN_P (insn))
3705             continue;
3706
3707           /* Don't substitute into jumps.  indirect_jump_optimize does
3708              this for anything we are prepared to handle.  */
3709           if (JUMP_P (insn))
3710             continue;
3711
3712           for (link = REG_NOTES (insn); link; link = XEXP (link, 1))
3713             {
3714               if (REG_NOTE_KIND (link) == REG_DEAD
3715                   /* Make sure this insn still refers to the register.  */
3716                   && reg_mentioned_p (XEXP (link, 0), PATTERN (insn)))
3717                 {
3718                   int regno = REGNO (XEXP (link, 0));
3719                   rtx equiv_insn;
3720
3721                   if (! reg_equiv[regno].replace
3722                       || reg_equiv[regno].loop_depth < (short) loop_depth
3723                       /* There is no sense to move insns if live range
3724                          shrinkage or register pressure-sensitive
3725                          scheduling were done because it will not
3726                          improve allocation but worsen insn schedule
3727                          with a big probability.  */
3728                       || flag_live_range_shrinkage
3729                       || (flag_sched_pressure && flag_schedule_insns))
3730                     continue;
3731
3732                   /* reg_equiv[REGNO].replace gets set only when
3733                      REG_N_REFS[REGNO] is 2, i.e. the register is set
3734                      once and used once.  (If it were only set, but
3735                      not used, flow would have deleted the setting
3736                      insns.)  Hence there can only be one insn in
3737                      reg_equiv[REGNO].init_insns.  */
3738                   gcc_assert (reg_equiv[regno].init_insns
3739                               && !XEXP (reg_equiv[regno].init_insns, 1));
3740                   equiv_insn = XEXP (reg_equiv[regno].init_insns, 0);
3741
3742                   /* We may not move instructions that can throw, since
3743                      that changes basic block boundaries and we are not
3744                      prepared to adjust the CFG to match.  */
3745                   if (can_throw_internal (equiv_insn))
3746                     continue;
3747
3748                   if (asm_noperands (PATTERN (equiv_insn)) < 0
3749                       && validate_replace_rtx (regno_reg_rtx[regno],
3750                                                *(reg_equiv[regno].src_p), insn))
3751                     {
3752                       rtx equiv_link;
3753                       rtx last_link;
3754                       rtx note;
3755
3756                       /* Find the last note.  */
3757                       for (last_link = link; XEXP (last_link, 1);
3758                            last_link = XEXP (last_link, 1))
3759                         ;
3760
3761                       /* Append the REG_DEAD notes from equiv_insn.  */
3762                       equiv_link = REG_NOTES (equiv_insn);
3763                       while (equiv_link)
3764                         {
3765                           note = equiv_link;
3766                           equiv_link = XEXP (equiv_link, 1);
3767                           if (REG_NOTE_KIND (note) == REG_DEAD)
3768                             {
3769                               remove_note (equiv_insn, note);
3770                               XEXP (last_link, 1) = note;
3771                               XEXP (note, 1) = NULL_RTX;
3772                               last_link = note;
3773                             }
3774                         }
3775
3776                       remove_death (regno, insn);
3777                       SET_REG_N_REFS (regno, 0);
3778                       REG_FREQ (regno) = 0;
3779                       delete_insn (equiv_insn);
3780
3781                       reg_equiv[regno].init_insns
3782                         = reg_equiv[regno].init_insns->next ();
3783
3784                       ira_reg_equiv[regno].init_insns = NULL;
3785                       bitmap_set_bit (cleared_regs, regno);
3786                     }
3787                   /* Move the initialization of the register to just before
3788                      INSN.  Update the flow information.  */
3789                   else if (prev_nondebug_insn (insn) != equiv_insn)
3790                     {
3791                       rtx_insn *new_insn;
3792
3793                       new_insn = emit_insn_before (PATTERN (equiv_insn), insn);
3794                       REG_NOTES (new_insn) = REG_NOTES (equiv_insn);
3795                       REG_NOTES (equiv_insn) = 0;
3796                       /* Rescan it to process the notes.  */
3797                       df_insn_rescan (new_insn);
3798
3799                       /* Make sure this insn is recognized before
3800                          reload begins, otherwise
3801                          eliminate_regs_in_insn will die.  */
3802                       INSN_CODE (new_insn) = INSN_CODE (equiv_insn);
3803
3804                       delete_insn (equiv_insn);
3805
3806                       XEXP (reg_equiv[regno].init_insns, 0) = new_insn;
3807
3808                       REG_BASIC_BLOCK (regno) = bb->index;
3809                       REG_N_CALLS_CROSSED (regno) = 0;
3810                       REG_FREQ_CALLS_CROSSED (regno) = 0;
3811                       REG_N_THROWING_CALLS_CROSSED (regno) = 0;
3812                       REG_LIVE_LENGTH (regno) = 2;
3813
3814                       if (insn == BB_HEAD (bb))
3815                         BB_HEAD (bb) = PREV_INSN (insn);
3816
3817                       ira_reg_equiv[regno].init_insns
3818                         = gen_rtx_INSN_LIST (VOIDmode, new_insn, NULL_RTX);
3819                       bitmap_set_bit (cleared_regs, regno);
3820                     }
3821                 }
3822             }
3823         }
3824     }
3825
3826   if (!bitmap_empty_p (cleared_regs))
3827     {
3828       FOR_EACH_BB_FN (bb, cfun)
3829         {
3830           bitmap_and_compl_into (DF_LR_IN (bb), cleared_regs);
3831           bitmap_and_compl_into (DF_LR_OUT (bb), cleared_regs);
3832           if (! df_live)
3833             continue;
3834           bitmap_and_compl_into (DF_LIVE_IN (bb), cleared_regs);
3835           bitmap_and_compl_into (DF_LIVE_OUT (bb), cleared_regs);
3836         }
3837
3838       /* Last pass - adjust debug insns referencing cleared regs.  */
3839       if (MAY_HAVE_DEBUG_INSNS)
3840         for (insn = get_insns (); insn; insn = NEXT_INSN (insn))
3841           if (DEBUG_INSN_P (insn))
3842             {
3843               rtx old_loc = INSN_VAR_LOCATION_LOC (insn);
3844               INSN_VAR_LOCATION_LOC (insn)
3845                 = simplify_replace_fn_rtx (old_loc, NULL_RTX,
3846                                            adjust_cleared_regs,
3847                                            (void *) cleared_regs);
3848               if (old_loc != INSN_VAR_LOCATION_LOC (insn))
3849                 df_insn_rescan (insn);
3850             }
3851     }
3852
3853   BITMAP_FREE (cleared_regs);
3854
3855   out:
3856   /* Clean up.  */
3857
3858   end_alias_analysis ();
3859   free (reg_equiv);
3860   free (pdx_subregs);
3861 }
3862
3863 /* A pass over indirect jumps, converting simple cases to direct jumps.
3864    Combine does this optimization too, but only within a basic block.  */
3865 static void
3866 indirect_jump_optimize (void)
3867 {
3868   basic_block bb;
3869   bool rebuild_p = false;
3870
3871   FOR_EACH_BB_REVERSE_FN (bb, cfun)
3872     {
3873       rtx_insn *insn = BB_END (bb);
3874       if (!JUMP_P (insn)
3875           || find_reg_note (insn, REG_NON_LOCAL_GOTO, NULL_RTX))
3876         continue;
3877
3878       rtx x = pc_set (insn);
3879       if (!x || !REG_P (SET_SRC (x)))
3880         continue;
3881
3882       int regno = REGNO (SET_SRC (x));
3883       if (DF_REG_DEF_COUNT (regno) == 1)
3884         {
3885           df_ref def = DF_REG_DEF_CHAIN (regno);
3886           if (!DF_REF_IS_ARTIFICIAL (def))
3887             {
3888               rtx_insn *def_insn = DF_REF_INSN (def);
3889               rtx lab = NULL_RTX;
3890               rtx set = single_set (def_insn);
3891               if (set && GET_CODE (SET_SRC (set)) == LABEL_REF)
3892                 lab = SET_SRC (set);
3893               else
3894                 {
3895                   rtx eqnote = find_reg_note (def_insn, REG_EQUAL, NULL_RTX);
3896                   if (eqnote && GET_CODE (XEXP (eqnote, 0)) == LABEL_REF)
3897                     lab = XEXP (eqnote, 0);
3898                 }
3899               if (lab && validate_replace_rtx (SET_SRC (x), lab, insn))
3900                 rebuild_p = true;
3901             }
3902         }
3903     }
3904
3905   if (rebuild_p)
3906     {
3907       timevar_push (TV_JUMP);
3908       rebuild_jump_labels (get_insns ());
3909       if (purge_all_dead_edges ())
3910         delete_unreachable_blocks ();
3911       timevar_pop (TV_JUMP);
3912     }
3913 }
3914 \f
3915 /* Set up fields memory, constant, and invariant from init_insns in
3916    the structures of array ira_reg_equiv.  */
3917 static void
3918 setup_reg_equiv (void)
3919 {
3920   int i;
3921   rtx_insn_list *elem, *prev_elem, *next_elem;
3922   rtx_insn *insn;
3923   rtx set, x;
3924
3925   for (i = FIRST_PSEUDO_REGISTER; i < ira_reg_equiv_len; i++)
3926     for (prev_elem = NULL, elem = ira_reg_equiv[i].init_insns;
3927          elem;
3928          prev_elem = elem, elem = next_elem)
3929       {
3930         next_elem = elem->next ();
3931         insn = elem->insn ();
3932         set = single_set (insn);
3933         
3934         /* Init insns can set up equivalence when the reg is a destination or
3935            a source (in this case the destination is memory).  */
3936         if (set != 0 && (REG_P (SET_DEST (set)) || REG_P (SET_SRC (set))))
3937           {
3938             if ((x = find_reg_note (insn, REG_EQUIV, NULL_RTX)) != NULL)
3939               {
3940                 x = XEXP (x, 0);
3941                 if (REG_P (SET_DEST (set))
3942                     && REGNO (SET_DEST (set)) == (unsigned int) i
3943                     && ! rtx_equal_p (SET_SRC (set), x) && MEM_P (x))
3944                   {
3945                     /* This insn reporting the equivalence but
3946                        actually not setting it.  Remove it from the
3947                        list.  */
3948                     if (prev_elem == NULL)
3949                       ira_reg_equiv[i].init_insns = next_elem;
3950                     else
3951                       XEXP (prev_elem, 1) = next_elem;
3952                     elem = prev_elem;
3953                   }
3954               }
3955             else if (REG_P (SET_DEST (set))
3956                      && REGNO (SET_DEST (set)) == (unsigned int) i)
3957               x = SET_SRC (set);
3958             else
3959               {      
3960                 gcc_assert (REG_P (SET_SRC (set))
3961                             && REGNO (SET_SRC (set)) == (unsigned int) i);
3962                 x = SET_DEST (set);
3963               }
3964             if (! function_invariant_p (x)
3965                 || ! flag_pic
3966                 /* A function invariant is often CONSTANT_P but may
3967                    include a register.  We promise to only pass
3968                    CONSTANT_P objects to LEGITIMATE_PIC_OPERAND_P.  */
3969                 || (CONSTANT_P (x) && LEGITIMATE_PIC_OPERAND_P (x)))
3970               {
3971                 /* It can happen that a REG_EQUIV note contains a MEM
3972                    that is not a legitimate memory operand.  As later
3973                    stages of reload assume that all addresses found in
3974                    the lra_regno_equiv_* arrays were originally
3975                    legitimate, we ignore such REG_EQUIV notes.  */
3976                 if (memory_operand (x, VOIDmode))
3977                   {
3978                     ira_reg_equiv[i].defined_p = true;
3979                     ira_reg_equiv[i].memory = x;
3980                     continue;
3981                   }
3982                 else if (function_invariant_p (x))
3983                   {
3984                     machine_mode mode;
3985                     
3986                     mode = GET_MODE (SET_DEST (set));
3987                     if (GET_CODE (x) == PLUS
3988                         || x == frame_pointer_rtx || x == arg_pointer_rtx)
3989                       /* This is PLUS of frame pointer and a constant,
3990                          or fp, or argp.  */
3991                       ira_reg_equiv[i].invariant = x;
3992                     else if (targetm.legitimate_constant_p (mode, x))
3993                       ira_reg_equiv[i].constant = x;
3994                     else
3995                       {
3996                         ira_reg_equiv[i].memory = force_const_mem (mode, x);
3997                         if (ira_reg_equiv[i].memory == NULL_RTX)
3998                           {
3999                             ira_reg_equiv[i].defined_p = false;
4000                             ira_reg_equiv[i].init_insns = NULL;
4001                             break;
4002                           }
4003                       }
4004                     ira_reg_equiv[i].defined_p = true;
4005                     continue;
4006                   }
4007               }
4008           }
4009         ira_reg_equiv[i].defined_p = false;
4010         ira_reg_equiv[i].init_insns = NULL;
4011         break;
4012       }
4013 }
4014
4015 \f
4016
4017 /* Print chain C to FILE.  */
4018 static void
4019 print_insn_chain (FILE *file, struct insn_chain *c)
4020 {
4021   fprintf (file, "insn=%d, ", INSN_UID (c->insn));
4022   bitmap_print (file, &c->live_throughout, "live_throughout: ", ", ");
4023   bitmap_print (file, &c->dead_or_set, "dead_or_set: ", "\n");
4024 }
4025
4026
4027 /* Print all reload_insn_chains to FILE.  */
4028 static void
4029 print_insn_chains (FILE *file)
4030 {
4031   struct insn_chain *c;
4032   for (c = reload_insn_chain; c ; c = c->next)
4033     print_insn_chain (file, c);
4034 }
4035
4036 /* Return true if pseudo REGNO should be added to set live_throughout
4037    or dead_or_set of the insn chains for reload consideration.  */
4038 static bool
4039 pseudo_for_reload_consideration_p (int regno)
4040 {
4041   /* Consider spilled pseudos too for IRA because they still have a
4042      chance to get hard-registers in the reload when IRA is used.  */
4043   return (reg_renumber[regno] >= 0 || ira_conflicts_p);
4044 }
4045
4046 /* Init LIVE_SUBREGS[ALLOCNUM] and LIVE_SUBREGS_USED[ALLOCNUM] using
4047    REG to the number of nregs, and INIT_VALUE to get the
4048    initialization.  ALLOCNUM need not be the regno of REG.  */
4049 static void
4050 init_live_subregs (bool init_value, sbitmap *live_subregs,
4051                    bitmap live_subregs_used, int allocnum, rtx reg)
4052 {
4053   unsigned int regno = REGNO (SUBREG_REG (reg));
4054   int size = GET_MODE_SIZE (GET_MODE (regno_reg_rtx[regno]));
4055
4056   gcc_assert (size > 0);
4057
4058   /* Been there, done that.  */
4059   if (bitmap_bit_p (live_subregs_used, allocnum))
4060     return;
4061
4062   /* Create a new one.  */
4063   if (live_subregs[allocnum] == NULL)
4064     live_subregs[allocnum] = sbitmap_alloc (size);
4065
4066   /* If the entire reg was live before blasting into subregs, we need
4067      to init all of the subregs to ones else init to 0.  */
4068   if (init_value)
4069     bitmap_ones (live_subregs[allocnum]);
4070   else
4071     bitmap_clear (live_subregs[allocnum]);
4072
4073   bitmap_set_bit (live_subregs_used, allocnum);
4074 }
4075
4076 /* Walk the insns of the current function and build reload_insn_chain,
4077    and record register life information.  */
4078 static void
4079 build_insn_chain (void)
4080 {
4081   unsigned int i;
4082   struct insn_chain **p = &reload_insn_chain;
4083   basic_block bb;
4084   struct insn_chain *c = NULL;
4085   struct insn_chain *next = NULL;
4086   bitmap live_relevant_regs = BITMAP_ALLOC (NULL);
4087   bitmap elim_regset = BITMAP_ALLOC (NULL);
4088   /* live_subregs is a vector used to keep accurate information about
4089      which hardregs are live in multiword pseudos.  live_subregs and
4090      live_subregs_used are indexed by pseudo number.  The live_subreg
4091      entry for a particular pseudo is only used if the corresponding
4092      element is non zero in live_subregs_used.  The sbitmap size of
4093      live_subreg[allocno] is number of bytes that the pseudo can
4094      occupy.  */
4095   sbitmap *live_subregs = XCNEWVEC (sbitmap, max_regno);
4096   bitmap live_subregs_used = BITMAP_ALLOC (NULL);
4097
4098   for (i = 0; i < FIRST_PSEUDO_REGISTER; i++)
4099     if (TEST_HARD_REG_BIT (eliminable_regset, i))
4100       bitmap_set_bit (elim_regset, i);
4101   FOR_EACH_BB_REVERSE_FN (bb, cfun)
4102     {
4103       bitmap_iterator bi;
4104       rtx_insn *insn;
4105
4106       CLEAR_REG_SET (live_relevant_regs);
4107       bitmap_clear (live_subregs_used);
4108
4109       EXECUTE_IF_SET_IN_BITMAP (df_get_live_out (bb), 0, i, bi)
4110         {
4111           if (i >= FIRST_PSEUDO_REGISTER)
4112             break;
4113           bitmap_set_bit (live_relevant_regs, i);
4114         }
4115
4116       EXECUTE_IF_SET_IN_BITMAP (df_get_live_out (bb),
4117                                 FIRST_PSEUDO_REGISTER, i, bi)
4118         {
4119           if (pseudo_for_reload_consideration_p (i))
4120             bitmap_set_bit (live_relevant_regs, i);
4121         }
4122
4123       FOR_BB_INSNS_REVERSE (bb, insn)
4124         {
4125           if (!NOTE_P (insn) && !BARRIER_P (insn))
4126             {
4127               struct df_insn_info *insn_info = DF_INSN_INFO_GET (insn);
4128               df_ref def, use;
4129
4130               c = new_insn_chain ();
4131               c->next = next;
4132               next = c;
4133               *p = c;
4134               p = &c->prev;
4135
4136               c->insn = insn;
4137               c->block = bb->index;
4138
4139               if (NONDEBUG_INSN_P (insn))
4140                 FOR_EACH_INSN_INFO_DEF (def, insn_info)
4141                   {
4142                     unsigned int regno = DF_REF_REGNO (def);
4143
4144                     /* Ignore may clobbers because these are generated
4145                        from calls. However, every other kind of def is
4146                        added to dead_or_set.  */
4147                     if (!DF_REF_FLAGS_IS_SET (def, DF_REF_MAY_CLOBBER))
4148                       {
4149                         if (regno < FIRST_PSEUDO_REGISTER)
4150                           {
4151                             if (!fixed_regs[regno])
4152                               bitmap_set_bit (&c->dead_or_set, regno);
4153                           }
4154                         else if (pseudo_for_reload_consideration_p (regno))
4155                           bitmap_set_bit (&c->dead_or_set, regno);
4156                       }
4157
4158                     if ((regno < FIRST_PSEUDO_REGISTER
4159                          || reg_renumber[regno] >= 0
4160                          || ira_conflicts_p)
4161                         && (!DF_REF_FLAGS_IS_SET (def, DF_REF_CONDITIONAL)))
4162                       {
4163                         rtx reg = DF_REF_REG (def);
4164
4165                         /* We can model subregs, but not if they are
4166                            wrapped in ZERO_EXTRACTS.  */
4167                         if (GET_CODE (reg) == SUBREG
4168                             && !DF_REF_FLAGS_IS_SET (def, DF_REF_ZERO_EXTRACT))
4169                           {
4170                             unsigned int start = SUBREG_BYTE (reg);
4171                             unsigned int last = start
4172                               + GET_MODE_SIZE (GET_MODE (reg));
4173
4174                             init_live_subregs
4175                               (bitmap_bit_p (live_relevant_regs, regno),
4176                                live_subregs, live_subregs_used, regno, reg);
4177
4178                             if (!DF_REF_FLAGS_IS_SET
4179                                 (def, DF_REF_STRICT_LOW_PART))
4180                               {
4181                                 /* Expand the range to cover entire words.
4182                                    Bytes added here are "don't care".  */
4183                                 start
4184                                   = start / UNITS_PER_WORD * UNITS_PER_WORD;
4185                                 last = ((last + UNITS_PER_WORD - 1)
4186                                         / UNITS_PER_WORD * UNITS_PER_WORD);
4187                               }
4188
4189                             /* Ignore the paradoxical bits.  */
4190                             if (last > SBITMAP_SIZE (live_subregs[regno]))
4191                               last = SBITMAP_SIZE (live_subregs[regno]);
4192
4193                             while (start < last)
4194                               {
4195                                 bitmap_clear_bit (live_subregs[regno], start);
4196                                 start++;
4197                               }
4198
4199                             if (bitmap_empty_p (live_subregs[regno]))
4200                               {
4201                                 bitmap_clear_bit (live_subregs_used, regno);
4202                                 bitmap_clear_bit (live_relevant_regs, regno);
4203                               }
4204                             else
4205                               /* Set live_relevant_regs here because
4206                                  that bit has to be true to get us to
4207                                  look at the live_subregs fields.  */
4208                               bitmap_set_bit (live_relevant_regs, regno);
4209                           }
4210                         else
4211                           {
4212                             /* DF_REF_PARTIAL is generated for
4213                                subregs, STRICT_LOW_PART, and
4214                                ZERO_EXTRACT.  We handle the subreg
4215                                case above so here we have to keep from
4216                                modeling the def as a killing def.  */
4217                             if (!DF_REF_FLAGS_IS_SET (def, DF_REF_PARTIAL))
4218                               {
4219                                 bitmap_clear_bit (live_subregs_used, regno);
4220                                 bitmap_clear_bit (live_relevant_regs, regno);
4221                               }
4222                           }
4223                       }
4224                   }
4225
4226               bitmap_and_compl_into (live_relevant_regs, elim_regset);
4227               bitmap_copy (&c->live_throughout, live_relevant_regs);
4228
4229               if (NONDEBUG_INSN_P (insn))
4230                 FOR_EACH_INSN_INFO_USE (use, insn_info)
4231                   {
4232                     unsigned int regno = DF_REF_REGNO (use);
4233                     rtx reg = DF_REF_REG (use);
4234
4235                     /* DF_REF_READ_WRITE on a use means that this use
4236                        is fabricated from a def that is a partial set
4237                        to a multiword reg.  Here, we only model the
4238                        subreg case that is not wrapped in ZERO_EXTRACT
4239                        precisely so we do not need to look at the
4240                        fabricated use.  */
4241                     if (DF_REF_FLAGS_IS_SET (use, DF_REF_READ_WRITE)
4242                         && !DF_REF_FLAGS_IS_SET (use, DF_REF_ZERO_EXTRACT)
4243                         && DF_REF_FLAGS_IS_SET (use, DF_REF_SUBREG))
4244                       continue;
4245
4246                     /* Add the last use of each var to dead_or_set.  */
4247                     if (!bitmap_bit_p (live_relevant_regs, regno))
4248                       {
4249                         if (regno < FIRST_PSEUDO_REGISTER)
4250                           {
4251                             if (!fixed_regs[regno])
4252                               bitmap_set_bit (&c->dead_or_set, regno);
4253                           }
4254                         else if (pseudo_for_reload_consideration_p (regno))
4255                           bitmap_set_bit (&c->dead_or_set, regno);
4256                       }
4257
4258                     if (regno < FIRST_PSEUDO_REGISTER
4259                         || pseudo_for_reload_consideration_p (regno))
4260                       {
4261                         if (GET_CODE (reg) == SUBREG
4262                             && !DF_REF_FLAGS_IS_SET (use,
4263                                                      DF_REF_SIGN_EXTRACT
4264                                                      | DF_REF_ZERO_EXTRACT))
4265                           {
4266                             unsigned int start = SUBREG_BYTE (reg);
4267                             unsigned int last = start
4268                               + GET_MODE_SIZE (GET_MODE (reg));
4269
4270                             init_live_subregs
4271                               (bitmap_bit_p (live_relevant_regs, regno),
4272                                live_subregs, live_subregs_used, regno, reg);
4273
4274                             /* Ignore the paradoxical bits.  */
4275                             if (last > SBITMAP_SIZE (live_subregs[regno]))
4276                               last = SBITMAP_SIZE (live_subregs[regno]);
4277
4278                             while (start < last)
4279                               {
4280                                 bitmap_set_bit (live_subregs[regno], start);
4281                                 start++;
4282                               }
4283                           }
4284                         else
4285                           /* Resetting the live_subregs_used is
4286                              effectively saying do not use the subregs
4287                              because we are reading the whole
4288                              pseudo.  */
4289                           bitmap_clear_bit (live_subregs_used, regno);
4290                         bitmap_set_bit (live_relevant_regs, regno);
4291                       }
4292                   }
4293             }
4294         }
4295
4296       /* FIXME!! The following code is a disaster.  Reload needs to see the
4297          labels and jump tables that are just hanging out in between
4298          the basic blocks.  See pr33676.  */
4299       insn = BB_HEAD (bb);
4300
4301       /* Skip over the barriers and cruft.  */
4302       while (insn && (BARRIER_P (insn) || NOTE_P (insn)
4303                       || BLOCK_FOR_INSN (insn) == bb))
4304         insn = PREV_INSN (insn);
4305
4306       /* While we add anything except barriers and notes, the focus is
4307          to get the labels and jump tables into the
4308          reload_insn_chain.  */
4309       while (insn)
4310         {
4311           if (!NOTE_P (insn) && !BARRIER_P (insn))
4312             {
4313               if (BLOCK_FOR_INSN (insn))
4314                 break;
4315
4316               c = new_insn_chain ();
4317               c->next = next;
4318               next = c;
4319               *p = c;
4320               p = &c->prev;
4321
4322               /* The block makes no sense here, but it is what the old
4323                  code did.  */
4324               c->block = bb->index;
4325               c->insn = insn;
4326               bitmap_copy (&c->live_throughout, live_relevant_regs);
4327             }
4328           insn = PREV_INSN (insn);
4329         }
4330     }
4331
4332   reload_insn_chain = c;
4333   *p = NULL;
4334
4335   for (i = 0; i < (unsigned int) max_regno; i++)
4336     if (live_subregs[i] != NULL)
4337       sbitmap_free (live_subregs[i]);
4338   free (live_subregs);
4339   BITMAP_FREE (live_subregs_used);
4340   BITMAP_FREE (live_relevant_regs);
4341   BITMAP_FREE (elim_regset);
4342
4343   if (dump_file)
4344     print_insn_chains (dump_file);
4345 }
4346  \f
4347 /* Examine the rtx found in *LOC, which is read or written to as determined
4348    by TYPE.  Return false if we find a reason why an insn containing this
4349    rtx should not be moved (such as accesses to non-constant memory), true
4350    otherwise.  */
4351 static bool
4352 rtx_moveable_p (rtx *loc, enum op_type type)
4353 {
4354   const char *fmt;
4355   rtx x = *loc;
4356   enum rtx_code code = GET_CODE (x);
4357   int i, j;
4358
4359   code = GET_CODE (x);
4360   switch (code)
4361     {
4362     case CONST:
4363     CASE_CONST_ANY:
4364     case SYMBOL_REF:
4365     case LABEL_REF:
4366       return true;
4367
4368     case PC:
4369       return type == OP_IN;
4370
4371     case CC0:
4372       return false;
4373
4374     case REG:
4375       if (x == frame_pointer_rtx)
4376         return true;
4377       if (HARD_REGISTER_P (x))
4378         return false;
4379       
4380       return true;
4381
4382     case MEM:
4383       if (type == OP_IN && MEM_READONLY_P (x))
4384         return rtx_moveable_p (&XEXP (x, 0), OP_IN);
4385       return false;
4386
4387     case SET:
4388       return (rtx_moveable_p (&SET_SRC (x), OP_IN)
4389               && rtx_moveable_p (&SET_DEST (x), OP_OUT));
4390
4391     case STRICT_LOW_PART:
4392       return rtx_moveable_p (&XEXP (x, 0), OP_OUT);
4393
4394     case ZERO_EXTRACT:
4395     case SIGN_EXTRACT:
4396       return (rtx_moveable_p (&XEXP (x, 0), type)
4397               && rtx_moveable_p (&XEXP (x, 1), OP_IN)
4398               && rtx_moveable_p (&XEXP (x, 2), OP_IN));
4399
4400     case CLOBBER:
4401       return rtx_moveable_p (&SET_DEST (x), OP_OUT);
4402
4403     case UNSPEC_VOLATILE:
4404       /* It is a bad idea to consider insns with such rtl
4405          as moveable ones.  The insn scheduler also considers them as barrier
4406          for a reason.  */
4407       return false;
4408
4409     default:
4410       break;
4411     }
4412
4413   fmt = GET_RTX_FORMAT (code);
4414   for (i = GET_RTX_LENGTH (code) - 1; i >= 0; i--)
4415     {
4416       if (fmt[i] == 'e')
4417         {
4418           if (!rtx_moveable_p (&XEXP (x, i), type))
4419             return false;
4420         }
4421       else if (fmt[i] == 'E')
4422         for (j = XVECLEN (x, i) - 1; j >= 0; j--)
4423           {
4424             if (!rtx_moveable_p (&XVECEXP (x, i, j), type))
4425               return false;
4426           }
4427     }
4428   return true;
4429 }
4430
4431 /* A wrapper around dominated_by_p, which uses the information in UID_LUID
4432    to give dominance relationships between two insns I1 and I2.  */
4433 static bool
4434 insn_dominated_by_p (rtx i1, rtx i2, int *uid_luid)
4435 {
4436   basic_block bb1 = BLOCK_FOR_INSN (i1);
4437   basic_block bb2 = BLOCK_FOR_INSN (i2);
4438
4439   if (bb1 == bb2)
4440     return uid_luid[INSN_UID (i2)] < uid_luid[INSN_UID (i1)];
4441   return dominated_by_p (CDI_DOMINATORS, bb1, bb2);
4442 }
4443
4444 /* Record the range of register numbers added by find_moveable_pseudos.  */
4445 int first_moveable_pseudo, last_moveable_pseudo;
4446
4447 /* These two vectors hold data for every register added by
4448    find_movable_pseudos, with index 0 holding data for the
4449    first_moveable_pseudo.  */
4450 /* The original home register.  */
4451 static vec<rtx> pseudo_replaced_reg;
4452
4453 /* Look for instances where we have an instruction that is known to increase
4454    register pressure, and whose result is not used immediately.  If it is
4455    possible to move the instruction downwards to just before its first use,
4456    split its lifetime into two ranges.  We create a new pseudo to compute the
4457    value, and emit a move instruction just before the first use.  If, after
4458    register allocation, the new pseudo remains unallocated, the function
4459    move_unallocated_pseudos then deletes the move instruction and places
4460    the computation just before the first use.
4461
4462    Such a move is safe and profitable if all the input registers remain live
4463    and unchanged between the original computation and its first use.  In such
4464    a situation, the computation is known to increase register pressure, and
4465    moving it is known to at least not worsen it.
4466
4467    We restrict moves to only those cases where a register remains unallocated,
4468    in order to avoid interfering too much with the instruction schedule.  As
4469    an exception, we may move insns which only modify their input register
4470    (typically induction variables), as this increases the freedom for our
4471    intended transformation, and does not limit the second instruction
4472    scheduler pass.  */
4473    
4474 static void
4475 find_moveable_pseudos (void)
4476 {
4477   unsigned i;
4478   int max_regs = max_reg_num ();
4479   int max_uid = get_max_uid ();
4480   basic_block bb;
4481   int *uid_luid = XNEWVEC (int, max_uid);
4482   rtx_insn **closest_uses = XNEWVEC (rtx_insn *, max_regs);
4483   /* A set of registers which are live but not modified throughout a block.  */
4484   bitmap_head *bb_transp_live = XNEWVEC (bitmap_head,
4485                                          last_basic_block_for_fn (cfun));
4486   /* A set of registers which only exist in a given basic block.  */
4487   bitmap_head *bb_local = XNEWVEC (bitmap_head,
4488                                    last_basic_block_for_fn (cfun));
4489   /* A set of registers which are set once, in an instruction that can be
4490      moved freely downwards, but are otherwise transparent to a block.  */
4491   bitmap_head *bb_moveable_reg_sets = XNEWVEC (bitmap_head,
4492                                                last_basic_block_for_fn (cfun));
4493   bitmap_head live, used, set, interesting, unusable_as_input;
4494   bitmap_iterator bi;
4495   bitmap_initialize (&interesting, 0);
4496
4497   first_moveable_pseudo = max_regs;
4498   pseudo_replaced_reg.release ();
4499   pseudo_replaced_reg.safe_grow_cleared (max_regs);
4500
4501   df_analyze ();
4502   calculate_dominance_info (CDI_DOMINATORS);
4503
4504   i = 0;
4505   bitmap_initialize (&live, 0);
4506   bitmap_initialize (&used, 0);
4507   bitmap_initialize (&set, 0);
4508   bitmap_initialize (&unusable_as_input, 0);
4509   FOR_EACH_BB_FN (bb, cfun)
4510     {
4511       rtx_insn *insn;
4512       bitmap transp = bb_transp_live + bb->index;
4513       bitmap moveable = bb_moveable_reg_sets + bb->index;
4514       bitmap local = bb_local + bb->index;
4515
4516       bitmap_initialize (local, 0);
4517       bitmap_initialize (transp, 0);
4518       bitmap_initialize (moveable, 0);
4519       bitmap_copy (&live, df_get_live_out (bb));
4520       bitmap_and_into (&live, df_get_live_in (bb));
4521       bitmap_copy (transp, &live);
4522       bitmap_clear (moveable);
4523       bitmap_clear (&live);
4524       bitmap_clear (&used);
4525       bitmap_clear (&set);
4526       FOR_BB_INSNS (bb, insn)
4527         if (NONDEBUG_INSN_P (insn))
4528           {
4529             df_insn_info *insn_info = DF_INSN_INFO_GET (insn);
4530             df_ref def, use;
4531
4532             uid_luid[INSN_UID (insn)] = i++;
4533             
4534             def = df_single_def (insn_info);
4535             use = df_single_use (insn_info);
4536             if (use
4537                 && def
4538                 && DF_REF_REGNO (use) == DF_REF_REGNO (def)
4539                 && !bitmap_bit_p (&set, DF_REF_REGNO (use))
4540                 && rtx_moveable_p (&PATTERN (insn), OP_IN))
4541               {
4542                 unsigned regno = DF_REF_REGNO (use);
4543                 bitmap_set_bit (moveable, regno);
4544                 bitmap_set_bit (&set, regno);
4545                 bitmap_set_bit (&used, regno);
4546                 bitmap_clear_bit (transp, regno);
4547                 continue;
4548               }
4549             FOR_EACH_INSN_INFO_USE (use, insn_info)
4550               {
4551                 unsigned regno = DF_REF_REGNO (use);
4552                 bitmap_set_bit (&used, regno);
4553                 if (bitmap_clear_bit (moveable, regno))
4554                   bitmap_clear_bit (transp, regno);
4555               }
4556
4557             FOR_EACH_INSN_INFO_DEF (def, insn_info)
4558               {
4559                 unsigned regno = DF_REF_REGNO (def);
4560                 bitmap_set_bit (&set, regno);
4561                 bitmap_clear_bit (transp, regno);
4562                 bitmap_clear_bit (moveable, regno);
4563               }
4564           }
4565     }
4566
4567   bitmap_clear (&live);
4568   bitmap_clear (&used);
4569   bitmap_clear (&set);
4570
4571   FOR_EACH_BB_FN (bb, cfun)
4572     {
4573       bitmap local = bb_local + bb->index;
4574       rtx_insn *insn;
4575
4576       FOR_BB_INSNS (bb, insn)
4577         if (NONDEBUG_INSN_P (insn))
4578           {
4579             df_insn_info *insn_info = DF_INSN_INFO_GET (insn);
4580             rtx_insn *def_insn;
4581             rtx closest_use, note;
4582             df_ref def, use;
4583             unsigned regno;
4584             bool all_dominated, all_local;
4585             machine_mode mode;
4586
4587             def = df_single_def (insn_info);
4588             /* There must be exactly one def in this insn.  */
4589             if (!def || !single_set (insn))
4590               continue;
4591             /* This must be the only definition of the reg.  We also limit
4592                which modes we deal with so that we can assume we can generate
4593                move instructions.  */
4594             regno = DF_REF_REGNO (def);
4595             mode = GET_MODE (DF_REF_REG (def));
4596             if (DF_REG_DEF_COUNT (regno) != 1
4597                 || !DF_REF_INSN_INFO (def)
4598                 || HARD_REGISTER_NUM_P (regno)
4599                 || DF_REG_EQ_USE_COUNT (regno) > 0
4600                 || (!INTEGRAL_MODE_P (mode) && !FLOAT_MODE_P (mode)))
4601               continue;
4602             def_insn = DF_REF_INSN (def);
4603
4604             for (note = REG_NOTES (def_insn); note; note = XEXP (note, 1))
4605               if (REG_NOTE_KIND (note) == REG_EQUIV && MEM_P (XEXP (note, 0)))
4606                 break;
4607                 
4608             if (note)
4609               {
4610                 if (dump_file)
4611                   fprintf (dump_file, "Ignoring reg %d, has equiv memory\n",
4612                            regno);
4613                 bitmap_set_bit (&unusable_as_input, regno);
4614                 continue;
4615               }
4616
4617             use = DF_REG_USE_CHAIN (regno);
4618             all_dominated = true;
4619             all_local = true;
4620             closest_use = NULL_RTX;
4621             for (; use; use = DF_REF_NEXT_REG (use))
4622               {
4623                 rtx_insn *insn;
4624                 if (!DF_REF_INSN_INFO (use))
4625                   {
4626                     all_dominated = false;
4627                     all_local = false;
4628                     break;
4629                   }
4630                 insn = DF_REF_INSN (use);
4631                 if (DEBUG_INSN_P (insn))
4632                   continue;
4633                 if (BLOCK_FOR_INSN (insn) != BLOCK_FOR_INSN (def_insn))
4634                   all_local = false;
4635                 if (!insn_dominated_by_p (insn, def_insn, uid_luid))
4636                   all_dominated = false;
4637                 if (closest_use != insn && closest_use != const0_rtx)
4638                   {
4639                     if (closest_use == NULL_RTX)
4640                       closest_use = insn;
4641                     else if (insn_dominated_by_p (closest_use, insn, uid_luid))
4642                       closest_use = insn;
4643                     else if (!insn_dominated_by_p (insn, closest_use, uid_luid))
4644                       closest_use = const0_rtx;
4645                   }
4646               }
4647             if (!all_dominated)
4648               {
4649                 if (dump_file)
4650                   fprintf (dump_file, "Reg %d not all uses dominated by set\n",
4651                            regno);
4652                 continue;
4653               }
4654             if (all_local)
4655               bitmap_set_bit (local, regno);
4656             if (closest_use == const0_rtx || closest_use == NULL
4657                 || next_nonnote_nondebug_insn (def_insn) == closest_use)
4658               {
4659                 if (dump_file)
4660                   fprintf (dump_file, "Reg %d uninteresting%s\n", regno,
4661                            closest_use == const0_rtx || closest_use == NULL
4662                            ? " (no unique first use)" : "");
4663                 continue;
4664               }
4665             if (HAVE_cc0 && reg_referenced_p (cc0_rtx, PATTERN (closest_use)))
4666               {
4667                 if (dump_file)
4668                   fprintf (dump_file, "Reg %d: closest user uses cc0\n",
4669                            regno);
4670                 continue;
4671               }
4672
4673             bitmap_set_bit (&interesting, regno);
4674             /* If we get here, we know closest_use is a non-NULL insn
4675                (as opposed to const_0_rtx).  */
4676             closest_uses[regno] = as_a <rtx_insn *> (closest_use);
4677
4678             if (dump_file && (all_local || all_dominated))
4679               {
4680                 fprintf (dump_file, "Reg %u:", regno);
4681                 if (all_local)
4682                   fprintf (dump_file, " local to bb %d", bb->index);
4683                 if (all_dominated)
4684                   fprintf (dump_file, " def dominates all uses");
4685                 if (closest_use != const0_rtx)
4686                   fprintf (dump_file, " has unique first use");
4687                 fputs ("\n", dump_file);
4688               }
4689           }
4690     }
4691
4692   EXECUTE_IF_SET_IN_BITMAP (&interesting, 0, i, bi)
4693     {
4694       df_ref def = DF_REG_DEF_CHAIN (i);
4695       rtx_insn *def_insn = DF_REF_INSN (def);
4696       basic_block def_block = BLOCK_FOR_INSN (def_insn);
4697       bitmap def_bb_local = bb_local + def_block->index;
4698       bitmap def_bb_moveable = bb_moveable_reg_sets + def_block->index;
4699       bitmap def_bb_transp = bb_transp_live + def_block->index;
4700       bool local_to_bb_p = bitmap_bit_p (def_bb_local, i);
4701       rtx_insn *use_insn = closest_uses[i];
4702       df_ref use;
4703       bool all_ok = true;
4704       bool all_transp = true;
4705
4706       if (!REG_P (DF_REF_REG (def)))
4707         continue;
4708
4709       if (!local_to_bb_p)
4710         {
4711           if (dump_file)
4712             fprintf (dump_file, "Reg %u not local to one basic block\n",
4713                      i);
4714           continue;
4715         }
4716       if (reg_equiv_init (i) != NULL_RTX)
4717         {
4718           if (dump_file)
4719             fprintf (dump_file, "Ignoring reg %u with equiv init insn\n",
4720                      i);
4721           continue;
4722         }
4723       if (!rtx_moveable_p (&PATTERN (def_insn), OP_IN))
4724         {
4725           if (dump_file)
4726             fprintf (dump_file, "Found def insn %d for %d to be not moveable\n",
4727                      INSN_UID (def_insn), i);
4728           continue;
4729         }
4730       if (dump_file)
4731         fprintf (dump_file, "Examining insn %d, def for %d\n",
4732                  INSN_UID (def_insn), i);
4733       FOR_EACH_INSN_USE (use, def_insn)
4734         {
4735           unsigned regno = DF_REF_REGNO (use);
4736           if (bitmap_bit_p (&unusable_as_input, regno))
4737             {
4738               all_ok = false;
4739               if (dump_file)
4740                 fprintf (dump_file, "  found unusable input reg %u.\n", regno);
4741               break;
4742             }
4743           if (!bitmap_bit_p (def_bb_transp, regno))
4744             {
4745               if (bitmap_bit_p (def_bb_moveable, regno)
4746                   && !control_flow_insn_p (use_insn)
4747                   && (!HAVE_cc0 || !sets_cc0_p (use_insn)))
4748                 {
4749                   if (modified_between_p (DF_REF_REG (use), def_insn, use_insn))
4750                     {
4751                       rtx_insn *x = NEXT_INSN (def_insn);
4752                       while (!modified_in_p (DF_REF_REG (use), x))
4753                         {
4754                           gcc_assert (x != use_insn);
4755                           x = NEXT_INSN (x);
4756                         }
4757                       if (dump_file)
4758                         fprintf (dump_file, "  input reg %u modified but insn %d moveable\n",
4759                                  regno, INSN_UID (x));
4760                       emit_insn_after (PATTERN (x), use_insn);
4761                       set_insn_deleted (x);
4762                     }
4763                   else
4764                     {
4765                       if (dump_file)
4766                         fprintf (dump_file, "  input reg %u modified between def and use\n",
4767                                  regno);
4768                       all_transp = false;
4769                     }
4770                 }
4771               else
4772                 all_transp = false;
4773             }
4774         }
4775       if (!all_ok)
4776         continue;
4777       if (!dbg_cnt (ira_move))
4778         break;
4779       if (dump_file)
4780         fprintf (dump_file, "  all ok%s\n", all_transp ? " and transp" : "");
4781
4782       if (all_transp)
4783         {
4784           rtx def_reg = DF_REF_REG (def);
4785           rtx newreg = ira_create_new_reg (def_reg);
4786           if (validate_change (def_insn, DF_REF_REAL_LOC (def), newreg, 0))
4787             {
4788               unsigned nregno = REGNO (newreg);
4789               emit_insn_before (gen_move_insn (def_reg, newreg), use_insn);
4790               nregno -= max_regs;
4791               pseudo_replaced_reg[nregno] = def_reg;
4792             }
4793         }
4794     }
4795   
4796   FOR_EACH_BB_FN (bb, cfun)
4797     {
4798       bitmap_clear (bb_local + bb->index);
4799       bitmap_clear (bb_transp_live + bb->index);
4800       bitmap_clear (bb_moveable_reg_sets + bb->index);
4801     }
4802   bitmap_clear (&interesting);
4803   bitmap_clear (&unusable_as_input);
4804   free (uid_luid);
4805   free (closest_uses);
4806   free (bb_local);
4807   free (bb_transp_live);
4808   free (bb_moveable_reg_sets);
4809
4810   last_moveable_pseudo = max_reg_num ();
4811
4812   fix_reg_equiv_init ();
4813   expand_reg_info ();
4814   regstat_free_n_sets_and_refs ();
4815   regstat_free_ri ();
4816   regstat_init_n_sets_and_refs ();
4817   regstat_compute_ri ();
4818   free_dominance_info (CDI_DOMINATORS);
4819 }
4820
4821 /* If SET pattern SET is an assignment from a hard register to a pseudo which
4822    is live at CALL_DOM (if non-NULL, otherwise this check is omitted), return
4823    the destination.  Otherwise return NULL.  */
4824
4825 static rtx
4826 interesting_dest_for_shprep_1 (rtx set, basic_block call_dom)
4827 {
4828   rtx src = SET_SRC (set);
4829   rtx dest = SET_DEST (set);
4830   if (!REG_P (src) || !HARD_REGISTER_P (src)
4831       || !REG_P (dest) || HARD_REGISTER_P (dest)
4832       || (call_dom && !bitmap_bit_p (df_get_live_in (call_dom), REGNO (dest))))
4833     return NULL;
4834   return dest;
4835 }
4836
4837 /* If insn is interesting for parameter range-splitting shrink-wrapping
4838    preparation, i.e. it is a single set from a hard register to a pseudo, which
4839    is live at CALL_DOM (if non-NULL, otherwise this check is omitted), or a
4840    parallel statement with only one such statement, return the destination.
4841    Otherwise return NULL.  */
4842
4843 static rtx
4844 interesting_dest_for_shprep (rtx_insn *insn, basic_block call_dom)
4845 {
4846   if (!INSN_P (insn))
4847     return NULL;
4848   rtx pat = PATTERN (insn);
4849   if (GET_CODE (pat) == SET)
4850     return interesting_dest_for_shprep_1 (pat, call_dom);
4851
4852   if (GET_CODE (pat) != PARALLEL)
4853     return NULL;
4854   rtx ret = NULL;
4855   for (int i = 0; i < XVECLEN (pat, 0); i++)
4856     {
4857       rtx sub = XVECEXP (pat, 0, i);
4858       if (GET_CODE (sub) == USE || GET_CODE (sub) == CLOBBER)
4859         continue;
4860       if (GET_CODE (sub) != SET
4861           || side_effects_p (sub))
4862         return NULL;
4863       rtx dest = interesting_dest_for_shprep_1 (sub, call_dom);
4864       if (dest && ret)
4865         return NULL;
4866       if (dest)
4867         ret = dest;
4868     }
4869   return ret;
4870 }
4871
4872 /* Split live ranges of pseudos that are loaded from hard registers in the
4873    first BB in a BB that dominates all non-sibling call if such a BB can be
4874    found and is not in a loop.  Return true if the function has made any
4875    changes.  */
4876
4877 static bool
4878 split_live_ranges_for_shrink_wrap (void)
4879 {
4880   basic_block bb, call_dom = NULL;
4881   basic_block first = single_succ (ENTRY_BLOCK_PTR_FOR_FN (cfun));
4882   rtx_insn *insn, *last_interesting_insn = NULL;
4883   bitmap_head need_new, reachable;
4884   vec<basic_block> queue;
4885
4886   if (!SHRINK_WRAPPING_ENABLED)
4887     return false;
4888
4889   bitmap_initialize (&need_new, 0);
4890   bitmap_initialize (&reachable, 0);
4891   queue.create (n_basic_blocks_for_fn (cfun));
4892
4893   FOR_EACH_BB_FN (bb, cfun)
4894     FOR_BB_INSNS (bb, insn)
4895       if (CALL_P (insn) && !SIBLING_CALL_P (insn))
4896         {
4897           if (bb == first)
4898             {
4899               bitmap_clear (&need_new);
4900               bitmap_clear (&reachable);
4901               queue.release ();
4902               return false;
4903             }
4904
4905           bitmap_set_bit (&need_new, bb->index);
4906           bitmap_set_bit (&reachable, bb->index);
4907           queue.quick_push (bb);
4908           break;
4909         }
4910
4911   if (queue.is_empty ())
4912     {
4913       bitmap_clear (&need_new);
4914       bitmap_clear (&reachable);
4915       queue.release ();
4916       return false;
4917     }
4918
4919   while (!queue.is_empty ())
4920     {
4921       edge e;
4922       edge_iterator ei;
4923
4924       bb = queue.pop ();
4925       FOR_EACH_EDGE (e, ei, bb->succs)
4926         if (e->dest != EXIT_BLOCK_PTR_FOR_FN (cfun)
4927             && bitmap_set_bit (&reachable, e->dest->index))
4928           queue.quick_push (e->dest);
4929     }
4930   queue.release ();
4931
4932   FOR_BB_INSNS (first, insn)
4933     {
4934       rtx dest = interesting_dest_for_shprep (insn, NULL);
4935       if (!dest)
4936         continue;
4937
4938       if (DF_REG_DEF_COUNT (REGNO (dest)) > 1)
4939         {
4940           bitmap_clear (&need_new);
4941           bitmap_clear (&reachable);
4942           return false;
4943         }
4944
4945       for (df_ref use = DF_REG_USE_CHAIN (REGNO(dest));
4946            use;
4947            use = DF_REF_NEXT_REG (use))
4948         {
4949           int ubbi = DF_REF_BB (use)->index;
4950           if (bitmap_bit_p (&reachable, ubbi))
4951             bitmap_set_bit (&need_new, ubbi);
4952         }
4953       last_interesting_insn = insn;
4954     }
4955
4956   bitmap_clear (&reachable);
4957   if (!last_interesting_insn)
4958     {
4959       bitmap_clear (&need_new);
4960       return false;
4961     }
4962
4963   call_dom = nearest_common_dominator_for_set (CDI_DOMINATORS, &need_new);
4964   bitmap_clear (&need_new);
4965   if (call_dom == first)
4966     return false;
4967
4968   loop_optimizer_init (AVOID_CFG_MODIFICATIONS);
4969   while (bb_loop_depth (call_dom) > 0)
4970     call_dom = get_immediate_dominator (CDI_DOMINATORS, call_dom);
4971   loop_optimizer_finalize ();
4972
4973   if (call_dom == first)
4974     return false;
4975
4976   calculate_dominance_info (CDI_POST_DOMINATORS);
4977   if (dominated_by_p (CDI_POST_DOMINATORS, first, call_dom))
4978     {
4979       free_dominance_info (CDI_POST_DOMINATORS);
4980       return false;
4981     }
4982   free_dominance_info (CDI_POST_DOMINATORS);
4983
4984   if (dump_file)
4985     fprintf (dump_file, "Will split live ranges of parameters at BB %i\n",
4986              call_dom->index);
4987
4988   bool ret = false;
4989   FOR_BB_INSNS (first, insn)
4990     {
4991       rtx dest = interesting_dest_for_shprep (insn, call_dom);
4992       if (!dest || dest == pic_offset_table_rtx)
4993         continue;
4994
4995       rtx newreg = NULL_RTX;
4996       df_ref use, next;
4997       for (use = DF_REG_USE_CHAIN (REGNO (dest)); use; use = next)
4998         {
4999           rtx_insn *uin = DF_REF_INSN (use);
5000           next = DF_REF_NEXT_REG (use);
5001
5002           basic_block ubb = BLOCK_FOR_INSN (uin);
5003           if (ubb == call_dom
5004               || dominated_by_p (CDI_DOMINATORS, ubb, call_dom))
5005             {
5006               if (!newreg)
5007                 newreg = ira_create_new_reg (dest);
5008               validate_change (uin, DF_REF_REAL_LOC (use), newreg, true);
5009             }
5010         }
5011
5012       if (newreg)
5013         {
5014           rtx_insn *new_move = gen_move_insn (newreg, dest);
5015           emit_insn_after (new_move, bb_note (call_dom));
5016           if (dump_file)
5017             {
5018               fprintf (dump_file, "Split live-range of register ");
5019               print_rtl_single (dump_file, dest);
5020             }
5021           ret = true;
5022         }
5023
5024       if (insn == last_interesting_insn)
5025         break;
5026     }
5027   apply_change_group ();
5028   return ret;
5029 }
5030
5031 /* Perform the second half of the transformation started in
5032    find_moveable_pseudos.  We look for instances where the newly introduced
5033    pseudo remains unallocated, and remove it by moving the definition to
5034    just before its use, replacing the move instruction generated by
5035    find_moveable_pseudos.  */
5036 static void
5037 move_unallocated_pseudos (void)
5038 {
5039   int i;
5040   for (i = first_moveable_pseudo; i < last_moveable_pseudo; i++)
5041     if (reg_renumber[i] < 0)
5042       {
5043         int idx = i - first_moveable_pseudo;
5044         rtx other_reg = pseudo_replaced_reg[idx];
5045         rtx_insn *def_insn = DF_REF_INSN (DF_REG_DEF_CHAIN (i));
5046         /* The use must follow all definitions of OTHER_REG, so we can
5047            insert the new definition immediately after any of them.  */
5048         df_ref other_def = DF_REG_DEF_CHAIN (REGNO (other_reg));
5049         rtx_insn *move_insn = DF_REF_INSN (other_def);
5050         rtx_insn *newinsn = emit_insn_after (PATTERN (def_insn), move_insn);
5051         rtx set;
5052         int success;
5053
5054         if (dump_file)
5055           fprintf (dump_file, "moving def of %d (insn %d now) ",
5056                    REGNO (other_reg), INSN_UID (def_insn));
5057
5058         delete_insn (move_insn);
5059         while ((other_def = DF_REG_DEF_CHAIN (REGNO (other_reg))))
5060           delete_insn (DF_REF_INSN (other_def));
5061         delete_insn (def_insn);
5062
5063         set = single_set (newinsn);
5064         success = validate_change (newinsn, &SET_DEST (set), other_reg, 0);
5065         gcc_assert (success);
5066         if (dump_file)
5067           fprintf (dump_file, " %d) rather than keep unallocated replacement %d\n",
5068                    INSN_UID (newinsn), i);
5069         SET_REG_N_REFS (i, 0);
5070       }
5071 }
5072 \f
5073 /* If the backend knows where to allocate pseudos for hard
5074    register initial values, register these allocations now.  */
5075 static void
5076 allocate_initial_values (void)
5077 {
5078   if (targetm.allocate_initial_value)
5079     {
5080       rtx hreg, preg, x;
5081       int i, regno;
5082
5083       for (i = 0; HARD_REGISTER_NUM_P (i); i++)
5084         {
5085           if (! initial_value_entry (i, &hreg, &preg))
5086             break;
5087
5088           x = targetm.allocate_initial_value (hreg);
5089           regno = REGNO (preg);
5090           if (x && REG_N_SETS (regno) <= 1)
5091             {
5092               if (MEM_P (x))
5093                 reg_equiv_memory_loc (regno) = x;
5094               else
5095                 {
5096                   basic_block bb;
5097                   int new_regno;
5098
5099                   gcc_assert (REG_P (x));
5100                   new_regno = REGNO (x);
5101                   reg_renumber[regno] = new_regno;
5102                   /* Poke the regno right into regno_reg_rtx so that even
5103                      fixed regs are accepted.  */
5104                   SET_REGNO (preg, new_regno);
5105                   /* Update global register liveness information.  */
5106                   FOR_EACH_BB_FN (bb, cfun)
5107                     {
5108                       if (REGNO_REG_SET_P (df_get_live_in (bb), regno))
5109                         SET_REGNO_REG_SET (df_get_live_in (bb), new_regno);
5110                       if (REGNO_REG_SET_P (df_get_live_out (bb), regno))
5111                         SET_REGNO_REG_SET (df_get_live_out (bb), new_regno);
5112                     }
5113                 }
5114             }
5115         }
5116
5117       gcc_checking_assert (! initial_value_entry (FIRST_PSEUDO_REGISTER,
5118                                                   &hreg, &preg));
5119     }
5120 }
5121 \f
5122
5123 /* True when we use LRA instead of reload pass for the current
5124    function.  */
5125 bool ira_use_lra_p;
5126
5127 /* True if we have allocno conflicts.  It is false for non-optimized
5128    mode or when the conflict table is too big.  */
5129 bool ira_conflicts_p;
5130
5131 /* Saved between IRA and reload.  */
5132 static int saved_flag_ira_share_spill_slots;
5133
5134 /* This is the main entry of IRA.  */
5135 static void
5136 ira (FILE *f)
5137 {
5138   bool loops_p;
5139   int ira_max_point_before_emit;
5140   bool saved_flag_caller_saves = flag_caller_saves;
5141   enum ira_region saved_flag_ira_region = flag_ira_region;
5142
5143   /* Perform target specific PIC register initialization.  */
5144   targetm.init_pic_reg ();
5145
5146   ira_conflicts_p = optimize > 0;
5147
5148   ira_use_lra_p = targetm.lra_p ();
5149   /* If there are too many pseudos and/or basic blocks (e.g. 10K
5150      pseudos and 10K blocks or 100K pseudos and 1K blocks), we will
5151      use simplified and faster algorithms in LRA.  */
5152   lra_simple_p
5153     = (ira_use_lra_p
5154        && max_reg_num () >= (1 << 26) / last_basic_block_for_fn (cfun));
5155   if (lra_simple_p)
5156     {
5157       /* It permits to skip live range splitting in LRA.  */
5158       flag_caller_saves = false;
5159       /* There is no sense to do regional allocation when we use
5160          simplified LRA.  */
5161       flag_ira_region = IRA_REGION_ONE;
5162       ira_conflicts_p = false;
5163     }
5164
5165 #ifndef IRA_NO_OBSTACK
5166   gcc_obstack_init (&ira_obstack);
5167 #endif
5168   bitmap_obstack_initialize (&ira_bitmap_obstack);
5169
5170   /* LRA uses its own infrastructure to handle caller save registers.  */
5171   if (flag_caller_saves && !ira_use_lra_p)
5172     init_caller_save ();
5173
5174   if (flag_ira_verbose < 10)
5175     {
5176       internal_flag_ira_verbose = flag_ira_verbose;
5177       ira_dump_file = f;
5178     }
5179   else
5180     {
5181       internal_flag_ira_verbose = flag_ira_verbose - 10;
5182       ira_dump_file = stderr;
5183     }
5184
5185   setup_prohibited_mode_move_regs ();
5186   decrease_live_ranges_number ();
5187   df_note_add_problem ();
5188
5189   /* DF_LIVE can't be used in the register allocator, too many other
5190      parts of the compiler depend on using the "classic" liveness
5191      interpretation of the DF_LR problem.  See PR38711.
5192      Remove the problem, so that we don't spend time updating it in
5193      any of the df_analyze() calls during IRA/LRA.  */
5194   if (optimize > 1)
5195     df_remove_problem (df_live);
5196   gcc_checking_assert (df_live == NULL);
5197
5198   if (flag_checking)
5199     df->changeable_flags |= DF_VERIFY_SCHEDULED;
5200
5201   df_analyze ();
5202
5203   init_reg_equiv ();
5204   if (ira_conflicts_p)
5205     {
5206       calculate_dominance_info (CDI_DOMINATORS);
5207
5208       if (split_live_ranges_for_shrink_wrap ())
5209         df_analyze ();
5210
5211       free_dominance_info (CDI_DOMINATORS);
5212     }
5213
5214   df_clear_flags (DF_NO_INSN_RESCAN);
5215
5216   indirect_jump_optimize ();
5217   if (delete_trivially_dead_insns (get_insns (), max_reg_num ()))
5218     df_analyze ();
5219
5220   regstat_init_n_sets_and_refs ();
5221   regstat_compute_ri ();
5222
5223   /* If we are not optimizing, then this is the only place before
5224      register allocation where dataflow is done.  And that is needed
5225      to generate these warnings.  */
5226   if (warn_clobbered)
5227     generate_setjmp_warnings ();
5228
5229   /* Determine if the current function is a leaf before running IRA
5230      since this can impact optimizations done by the prologue and
5231      epilogue thus changing register elimination offsets.  */
5232   crtl->is_leaf = leaf_function_p ();
5233
5234   if (resize_reg_info () && flag_ira_loop_pressure)
5235     ira_set_pseudo_classes (true, ira_dump_file);
5236
5237   update_equiv_regs ();
5238   setup_reg_equiv ();
5239   setup_reg_equiv_init ();
5240
5241   allocated_reg_info_size = max_reg_num ();
5242
5243   /* It is not worth to do such improvement when we use a simple
5244      allocation because of -O0 usage or because the function is too
5245      big.  */
5246   if (ira_conflicts_p)
5247     find_moveable_pseudos ();
5248
5249   max_regno_before_ira = max_reg_num ();
5250   ira_setup_eliminable_regset ();
5251
5252   ira_overall_cost = ira_reg_cost = ira_mem_cost = 0;
5253   ira_load_cost = ira_store_cost = ira_shuffle_cost = 0;
5254   ira_move_loops_num = ira_additional_jumps_num = 0;
5255
5256   ira_assert (current_loops == NULL);
5257   if (flag_ira_region == IRA_REGION_ALL || flag_ira_region == IRA_REGION_MIXED)
5258     loop_optimizer_init (AVOID_CFG_MODIFICATIONS | LOOPS_HAVE_RECORDED_EXITS);
5259
5260   if (internal_flag_ira_verbose > 0 && ira_dump_file != NULL)
5261     fprintf (ira_dump_file, "Building IRA IR\n");
5262   loops_p = ira_build ();
5263
5264   ira_assert (ira_conflicts_p || !loops_p);
5265
5266   saved_flag_ira_share_spill_slots = flag_ira_share_spill_slots;
5267   if (too_high_register_pressure_p () || cfun->calls_setjmp)
5268     /* It is just wasting compiler's time to pack spilled pseudos into
5269        stack slots in this case -- prohibit it.  We also do this if
5270        there is setjmp call because a variable not modified between
5271        setjmp and longjmp the compiler is required to preserve its
5272        value and sharing slots does not guarantee it.  */
5273     flag_ira_share_spill_slots = FALSE;
5274
5275   ira_color ();
5276
5277   ira_max_point_before_emit = ira_max_point;
5278
5279   ira_initiate_emit_data ();
5280
5281   ira_emit (loops_p);
5282
5283   max_regno = max_reg_num ();
5284   if (ira_conflicts_p)
5285     {
5286       if (! loops_p)
5287         {
5288           if (! ira_use_lra_p)
5289             ira_initiate_assign ();
5290         }
5291       else
5292         {
5293           expand_reg_info ();
5294
5295           if (ira_use_lra_p)
5296             {
5297               ira_allocno_t a;
5298               ira_allocno_iterator ai;
5299
5300               FOR_EACH_ALLOCNO (a, ai)
5301                 {
5302                   int old_regno = ALLOCNO_REGNO (a);
5303                   int new_regno = REGNO (ALLOCNO_EMIT_DATA (a)->reg);
5304
5305                   ALLOCNO_REGNO (a) = new_regno;
5306
5307                   if (old_regno != new_regno)
5308                     setup_reg_classes (new_regno, reg_preferred_class (old_regno),
5309                                        reg_alternate_class (old_regno),
5310                                        reg_allocno_class (old_regno));
5311                 }
5312
5313             }
5314           else
5315             {
5316               if (internal_flag_ira_verbose > 0 && ira_dump_file != NULL)
5317                 fprintf (ira_dump_file, "Flattening IR\n");
5318               ira_flattening (max_regno_before_ira, ira_max_point_before_emit);
5319             }
5320           /* New insns were generated: add notes and recalculate live
5321              info.  */
5322           df_analyze ();
5323
5324           /* ??? Rebuild the loop tree, but why?  Does the loop tree
5325              change if new insns were generated?  Can that be handled
5326              by updating the loop tree incrementally?  */
5327           loop_optimizer_finalize ();
5328           free_dominance_info (CDI_DOMINATORS);
5329           loop_optimizer_init (AVOID_CFG_MODIFICATIONS
5330                                | LOOPS_HAVE_RECORDED_EXITS);
5331
5332           if (! ira_use_lra_p)
5333             {
5334               setup_allocno_assignment_flags ();
5335               ira_initiate_assign ();
5336               ira_reassign_conflict_allocnos (max_regno);
5337             }
5338         }
5339     }
5340
5341   ira_finish_emit_data ();
5342
5343   setup_reg_renumber ();
5344
5345   calculate_allocation_cost ();
5346
5347 #ifdef ENABLE_IRA_CHECKING
5348   if (ira_conflicts_p)
5349     check_allocation ();
5350 #endif
5351
5352   if (max_regno != max_regno_before_ira)
5353     {
5354       regstat_free_n_sets_and_refs ();
5355       regstat_free_ri ();
5356       regstat_init_n_sets_and_refs ();
5357       regstat_compute_ri ();
5358     }
5359
5360   overall_cost_before = ira_overall_cost;
5361   if (! ira_conflicts_p)
5362     grow_reg_equivs ();
5363   else
5364     {
5365       fix_reg_equiv_init ();
5366
5367 #ifdef ENABLE_IRA_CHECKING
5368       print_redundant_copies ();
5369 #endif
5370       if (! ira_use_lra_p)
5371         {
5372           ira_spilled_reg_stack_slots_num = 0;
5373           ira_spilled_reg_stack_slots
5374             = ((struct ira_spilled_reg_stack_slot *)
5375                ira_allocate (max_regno
5376                              * sizeof (struct ira_spilled_reg_stack_slot)));
5377           memset (ira_spilled_reg_stack_slots, 0,
5378                   max_regno * sizeof (struct ira_spilled_reg_stack_slot));
5379         }
5380     }
5381   allocate_initial_values ();
5382
5383   /* See comment for find_moveable_pseudos call.  */
5384   if (ira_conflicts_p)
5385     move_unallocated_pseudos ();
5386
5387   /* Restore original values.  */
5388   if (lra_simple_p)
5389     {
5390       flag_caller_saves = saved_flag_caller_saves;
5391       flag_ira_region = saved_flag_ira_region;
5392     }
5393 }
5394
5395 static void
5396 do_reload (void)
5397 {
5398   basic_block bb;
5399   bool need_dce;
5400   unsigned pic_offset_table_regno = INVALID_REGNUM;
5401
5402   if (flag_ira_verbose < 10)
5403     ira_dump_file = dump_file;
5404
5405   /* If pic_offset_table_rtx is a pseudo register, then keep it so
5406      after reload to avoid possible wrong usages of hard reg assigned
5407      to it.  */
5408   if (pic_offset_table_rtx
5409       && REGNO (pic_offset_table_rtx) >= FIRST_PSEUDO_REGISTER)
5410     pic_offset_table_regno = REGNO (pic_offset_table_rtx);
5411
5412   timevar_push (TV_RELOAD);
5413   if (ira_use_lra_p)
5414     {
5415       if (current_loops != NULL)
5416         {
5417           loop_optimizer_finalize ();
5418           free_dominance_info (CDI_DOMINATORS);
5419         }
5420       FOR_ALL_BB_FN (bb, cfun)
5421         bb->loop_father = NULL;
5422       current_loops = NULL;
5423
5424       ira_destroy ();
5425
5426       lra (ira_dump_file);
5427       /* ???!!! Move it before lra () when we use ira_reg_equiv in
5428          LRA.  */
5429       vec_free (reg_equivs);
5430       reg_equivs = NULL;
5431       need_dce = false;
5432     }
5433   else
5434     {
5435       df_set_flags (DF_NO_INSN_RESCAN);
5436       build_insn_chain ();
5437
5438       need_dce = reload (get_insns (), ira_conflicts_p);
5439     }
5440
5441   timevar_pop (TV_RELOAD);
5442
5443   timevar_push (TV_IRA);
5444
5445   if (ira_conflicts_p && ! ira_use_lra_p)
5446     {
5447       ira_free (ira_spilled_reg_stack_slots);
5448       ira_finish_assign ();
5449     }
5450
5451   if (internal_flag_ira_verbose > 0 && ira_dump_file != NULL
5452       && overall_cost_before != ira_overall_cost)
5453     fprintf (ira_dump_file, "+++Overall after reload %" PRId64 "\n",
5454              ira_overall_cost);
5455
5456   flag_ira_share_spill_slots = saved_flag_ira_share_spill_slots;
5457
5458   if (! ira_use_lra_p)
5459     {
5460       ira_destroy ();
5461       if (current_loops != NULL)
5462         {
5463           loop_optimizer_finalize ();
5464           free_dominance_info (CDI_DOMINATORS);
5465         }
5466       FOR_ALL_BB_FN (bb, cfun)
5467         bb->loop_father = NULL;
5468       current_loops = NULL;
5469       
5470       regstat_free_ri ();
5471       regstat_free_n_sets_and_refs ();
5472     }
5473
5474   if (optimize)
5475     cleanup_cfg (CLEANUP_EXPENSIVE);
5476
5477   finish_reg_equiv ();
5478
5479   bitmap_obstack_release (&ira_bitmap_obstack);
5480 #ifndef IRA_NO_OBSTACK
5481   obstack_free (&ira_obstack, NULL);
5482 #endif
5483
5484   /* The code after the reload has changed so much that at this point
5485      we might as well just rescan everything.  Note that
5486      df_rescan_all_insns is not going to help here because it does not
5487      touch the artificial uses and defs.  */
5488   df_finish_pass (true);
5489   df_scan_alloc (NULL);
5490   df_scan_blocks ();
5491
5492   if (optimize > 1)
5493     {
5494       df_live_add_problem ();
5495       df_live_set_all_dirty ();
5496     }
5497
5498   if (optimize)
5499     df_analyze ();
5500
5501   if (need_dce && optimize)
5502     run_fast_dce ();
5503
5504   /* Diagnose uses of the hard frame pointer when it is used as a global
5505      register.  Often we can get away with letting the user appropriate
5506      the frame pointer, but we should let them know when code generation
5507      makes that impossible.  */
5508   if (global_regs[HARD_FRAME_POINTER_REGNUM] && frame_pointer_needed)
5509     {
5510       tree decl = global_regs_decl[HARD_FRAME_POINTER_REGNUM];
5511       error_at (DECL_SOURCE_LOCATION (current_function_decl),
5512                 "frame pointer required, but reserved");
5513       inform (DECL_SOURCE_LOCATION (decl), "for %qD", decl);
5514     }
5515
5516   /* If we are doing generic stack checking, give a warning if this
5517      function's frame size is larger than we expect.  */
5518   if (flag_stack_check == GENERIC_STACK_CHECK)
5519     {
5520       HOST_WIDE_INT size = get_frame_size () + STACK_CHECK_FIXED_FRAME_SIZE;
5521
5522       for (int i = 0; i < FIRST_PSEUDO_REGISTER; i++)
5523         if (df_regs_ever_live_p (i) && !fixed_regs[i] && call_used_regs[i])
5524           size += UNITS_PER_WORD;
5525
5526       if (size > STACK_CHECK_MAX_FRAME_SIZE)
5527         warning (0, "frame size too large for reliable stack checking");
5528     }
5529
5530   if (pic_offset_table_regno != INVALID_REGNUM)
5531     pic_offset_table_rtx = gen_rtx_REG (Pmode, pic_offset_table_regno);
5532
5533   timevar_pop (TV_IRA);
5534 }
5535 \f
5536 /* Run the integrated register allocator.  */
5537
5538 namespace {
5539
5540 const pass_data pass_data_ira =
5541 {
5542   RTL_PASS, /* type */
5543   "ira", /* name */
5544   OPTGROUP_NONE, /* optinfo_flags */
5545   TV_IRA, /* tv_id */
5546   0, /* properties_required */
5547   0, /* properties_provided */
5548   0, /* properties_destroyed */
5549   0, /* todo_flags_start */
5550   TODO_do_not_ggc_collect, /* todo_flags_finish */
5551 };
5552
5553 class pass_ira : public rtl_opt_pass
5554 {
5555 public:
5556   pass_ira (gcc::context *ctxt)
5557     : rtl_opt_pass (pass_data_ira, ctxt)
5558   {}
5559
5560   /* opt_pass methods: */
5561   virtual bool gate (function *)
5562     {
5563       return !targetm.no_register_allocation;
5564     }
5565   virtual unsigned int execute (function *)
5566     {
5567       ira (dump_file);
5568       return 0;
5569     }
5570
5571 }; // class pass_ira
5572
5573 } // anon namespace
5574
5575 rtl_opt_pass *
5576 make_pass_ira (gcc::context *ctxt)
5577 {
5578   return new pass_ira (ctxt);
5579 }
5580
5581 namespace {
5582
5583 const pass_data pass_data_reload =
5584 {
5585   RTL_PASS, /* type */
5586   "reload", /* name */
5587   OPTGROUP_NONE, /* optinfo_flags */
5588   TV_RELOAD, /* tv_id */
5589   0, /* properties_required */
5590   0, /* properties_provided */
5591   0, /* properties_destroyed */
5592   0, /* todo_flags_start */
5593   0, /* todo_flags_finish */
5594 };
5595
5596 class pass_reload : public rtl_opt_pass
5597 {
5598 public:
5599   pass_reload (gcc::context *ctxt)
5600     : rtl_opt_pass (pass_data_reload, ctxt)
5601   {}
5602
5603   /* opt_pass methods: */
5604   virtual bool gate (function *)
5605     {
5606       return !targetm.no_register_allocation;
5607     }
5608   virtual unsigned int execute (function *)
5609     {
5610       do_reload ();
5611       return 0;
5612     }
5613
5614 }; // class pass_reload
5615
5616 } // anon namespace
5617
5618 rtl_opt_pass *
5619 make_pass_reload (gcc::context *ctxt)
5620 {
5621   return new pass_reload (ctxt);
5622 }