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