PR libstdc++/56278
[official-gcc.git] / gcc / ira.c
blobd3bd2bae4bffb1917676706b1c2e5391c920284a
1 /* Integrated Register Allocator (IRA) entry point.
2 Copyright (C) 2006-2013 Free Software Foundation, Inc.
3 Contributed by Vladimir Makarov <vmakarov@redhat.com>.
5 This file is part of GCC.
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.
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.
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/>. */
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.
31 Major IRA notions are:
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.
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.
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.
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:
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.
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.
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.
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.
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.
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.
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.
144 IRA major passes are:
146 o Building IRA internal representation which consists of the
147 following subpasses:
149 * First, IRA builds regions and creates allocnos (file
150 ira-build.c) and initializes most of their attributes.
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).
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).
161 * IRA removes low register pressure loops from the regions
162 mostly to speed IRA up (file ira-build.c).
164 * IRA propagates accumulated allocno info from lower region
165 allocnos to corresponding upper region allocnos (file
166 ira-build.c).
168 * IRA creates all caps (file ira-build.c).
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.
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:
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.
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.
197 We also use a modification of Chaitin-Briggs algorithm which
198 works for intersected register classes of allocnos. To
199 figure out trivial colorability of allocnos, the mentioned
200 above tree of hard register sets is used. To get an idea how
201 the algorithm works in i386 example, let us consider an
202 allocno to which any general hard register can be assigned.
203 If the allocno conflicts with eight allocnos to which only
204 EAX register can be assigned, given allocno is still
205 trivially colorable because all conflicting allocnos might be
206 assigned only to EAX and all other general hard registers are
207 still free.
209 To get an idea of the used trivial colorability criterion, it
210 is also useful to read article "Graph-Coloring Register
211 Allocation for Irregular Architectures" by Michael D. Smith
212 and Glen Holloway. Major difference between the article
213 approach and approach used in IRA is that Smith's approach
214 takes register classes only from machine description and IRA
215 calculate register classes from intermediate code too
216 (e.g. an explicit usage of hard registers in RTL code for
217 parameter passing can result in creation of additional
218 register classes which contain or exclude the hard
219 registers). That makes IRA approach useful for improving
220 coloring even for architectures with regular register files
221 and in fact some benchmarking shows the improvement for
222 regular class architectures is even bigger than for irregular
223 ones. Another difference is that Smith's approach chooses
224 intersection of classes of all insn operands in which a given
225 pseudo occurs. IRA can use bigger classes if it is still
226 more profitable than memory usage.
228 * Popping the allocnos from the stack and assigning them hard
229 registers. If IRA can not assign a hard register to an
230 allocno and the allocno is coalesced, IRA undoes the
231 coalescing and puts the uncoalesced allocnos onto the stack in
232 the hope that some such allocnos will get a hard register
233 separately. If IRA fails to assign hard register or memory
234 is more profitable for it, IRA spills the allocno. IRA
235 assigns the allocno the hard-register with minimal full
236 allocation cost which reflects the cost of usage of the
237 hard-register for the allocno and cost of usage of the
238 hard-register for allocnos conflicting with given allocno.
240 * Chaitin-Briggs coloring assigns as many pseudos as possible
241 to hard registers. After coloringh we try to improve
242 allocation with cost point of view. We improve the
243 allocation by spilling some allocnos and assigning the freed
244 hard registers to other allocnos if it decreases the overall
245 allocation cost.
247 * After allono assigning in the region, IRA modifies the hard
248 register and memory costs for the corresponding allocnos in
249 the subregions to reflect the cost of possible loads, stores,
250 or moves on the border of the region and its subregions.
251 When default regional allocation algorithm is used
252 (-fira-algorithm=mixed), IRA just propagates the assignment
253 for allocnos if the register pressure in the region for the
254 corresponding pressure class is less than number of available
255 hard registers for given pressure class.
257 o Spill/restore code moving. When IRA performs an allocation
258 by traversing regions in top-down order, it does not know what
259 happens below in the region tree. Therefore, sometimes IRA
260 misses opportunities to perform a better allocation. A simple
261 optimization tries to improve allocation in a region having
262 subregions and containing in another region. If the
263 corresponding allocnos in the subregion are spilled, it spills
264 the region allocno if it is profitable. The optimization
265 implements a simple iterative algorithm performing profitable
266 transformations while they are still possible. It is fast in
267 practice, so there is no real need for a better time complexity
268 algorithm.
270 o Code change. After coloring, two allocnos representing the
271 same pseudo-register outside and inside a region respectively
272 may be assigned to different locations (hard-registers or
273 memory). In this case IRA creates and uses a new
274 pseudo-register inside the region and adds code to move allocno
275 values on the region's borders. This is done during top-down
276 traversal of the regions (file ira-emit.c). In some
277 complicated cases IRA can create a new allocno to move allocno
278 values (e.g. when a swap of values stored in two hard-registers
279 is needed). At this stage, the new allocno is marked as
280 spilled. IRA still creates the pseudo-register and the moves
281 on the region borders even when both allocnos were assigned to
282 the same hard-register. If the reload pass spills a
283 pseudo-register for some reason, the effect will be smaller
284 because another allocno will still be in the hard-register. In
285 most cases, this is better then spilling both allocnos. If
286 reload does not change the allocation for the two
287 pseudo-registers, the trivial move will be removed by
288 post-reload optimizations. IRA does not generate moves for
289 allocnos assigned to the same hard register when the default
290 regional allocation algorithm is used and the register pressure
291 in the region for the corresponding pressure class is less than
292 number of available hard registers for given pressure class.
293 IRA also does some optimizations to remove redundant stores and
294 to reduce code duplication on the region borders.
296 o Flattening internal representation. After changing code, IRA
297 transforms its internal representation for several regions into
298 one region representation (file ira-build.c). This process is
299 called IR flattening. Such process is more complicated than IR
300 rebuilding would be, but is much faster.
302 o After IR flattening, IRA tries to assign hard registers to all
303 spilled allocnos. This is impelemented by a simple and fast
304 priority coloring algorithm (see function
305 ira_reassign_conflict_allocnos::ira-color.c). Here new allocnos
306 created during the code change pass can be assigned to hard
307 registers.
309 o At the end IRA calls the reload pass. The reload pass
310 communicates with IRA through several functions in file
311 ira-color.c to improve its decisions in
313 * sharing stack slots for the spilled pseudos based on IRA info
314 about pseudo-register conflicts.
316 * reassigning hard-registers to all spilled pseudos at the end
317 of each reload iteration.
319 * choosing a better hard-register to spill based on IRA info
320 about pseudo-register live ranges and the register pressure
321 in places where the pseudo-register lives.
323 IRA uses a lot of data representing the target processors. These
324 data are initilized in file ira.c.
326 If function has no loops (or the loops are ignored when
327 -fira-algorithm=CB is used), we have classic Chaitin-Briggs
328 coloring (only instead of separate pass of coalescing, we use hard
329 register preferencing). In such case, IRA works much faster
330 because many things are not made (like IR flattening, the
331 spill/restore optimization, and the code change).
333 Literature is worth to read for better understanding the code:
335 o Preston Briggs, Keith D. Cooper, Linda Torczon. Improvements to
336 Graph Coloring Register Allocation.
338 o David Callahan, Brian Koblenz. Register allocation via
339 hierarchical graph coloring.
341 o Keith Cooper, Anshuman Dasgupta, Jason Eckhardt. Revisiting Graph
342 Coloring Register Allocation: A Study of the Chaitin-Briggs and
343 Callahan-Koblenz Algorithms.
345 o Guei-Yuan Lueh, Thomas Gross, and Ali-Reza Adl-Tabatabai. Global
346 Register Allocation Based on Graph Fusion.
348 o Michael D. Smith and Glenn Holloway. Graph-Coloring Register
349 Allocation for Irregular Architectures
351 o Vladimir Makarov. The Integrated Register Allocator for GCC.
353 o Vladimir Makarov. The top-down register allocator for irregular
354 register file architectures.
359 #include "config.h"
360 #include "system.h"
361 #include "coretypes.h"
362 #include "tm.h"
363 #include "regs.h"
364 #include "rtl.h"
365 #include "tm_p.h"
366 #include "target.h"
367 #include "flags.h"
368 #include "obstack.h"
369 #include "bitmap.h"
370 #include "hard-reg-set.h"
371 #include "basic-block.h"
372 #include "df.h"
373 #include "expr.h"
374 #include "recog.h"
375 #include "params.h"
376 #include "tree-pass.h"
377 #include "output.h"
378 #include "except.h"
379 #include "reload.h"
380 #include "diagnostic-core.h"
381 #include "function.h"
382 #include "ggc.h"
383 #include "ira-int.h"
384 #include "lra.h"
385 #include "dce.h"
386 #include "dbgcnt.h"
388 struct target_ira default_target_ira;
389 struct target_ira_int default_target_ira_int;
390 #if SWITCHABLE_TARGET
391 struct target_ira *this_target_ira = &default_target_ira;
392 struct target_ira_int *this_target_ira_int = &default_target_ira_int;
393 #endif
395 /* A modified value of flag `-fira-verbose' used internally. */
396 int internal_flag_ira_verbose;
398 /* Dump file of the allocator if it is not NULL. */
399 FILE *ira_dump_file;
401 /* The number of elements in the following array. */
402 int ira_spilled_reg_stack_slots_num;
404 /* The following array contains info about spilled pseudo-registers
405 stack slots used in current function so far. */
406 struct ira_spilled_reg_stack_slot *ira_spilled_reg_stack_slots;
408 /* Correspondingly overall cost of the allocation, overall cost before
409 reload, cost of the allocnos assigned to hard-registers, cost of
410 the allocnos assigned to memory, cost of loads, stores and register
411 move insns generated for pseudo-register live range splitting (see
412 ira-emit.c). */
413 int ira_overall_cost, overall_cost_before;
414 int ira_reg_cost, ira_mem_cost;
415 int ira_load_cost, ira_store_cost, ira_shuffle_cost;
416 int ira_move_loops_num, ira_additional_jumps_num;
418 /* All registers that can be eliminated. */
420 HARD_REG_SET eliminable_regset;
422 /* Temporary hard reg set used for a different calculation. */
423 static HARD_REG_SET temp_hard_regset;
425 #define last_mode_for_init_move_cost \
426 (this_target_ira_int->x_last_mode_for_init_move_cost)
429 /* The function sets up the map IRA_REG_MODE_HARD_REGSET. */
430 static void
431 setup_reg_mode_hard_regset (void)
433 int i, m, hard_regno;
435 for (m = 0; m < NUM_MACHINE_MODES; m++)
436 for (hard_regno = 0; hard_regno < FIRST_PSEUDO_REGISTER; hard_regno++)
438 CLEAR_HARD_REG_SET (ira_reg_mode_hard_regset[hard_regno][m]);
439 for (i = hard_regno_nregs[hard_regno][m] - 1; i >= 0; i--)
440 if (hard_regno + i < FIRST_PSEUDO_REGISTER)
441 SET_HARD_REG_BIT (ira_reg_mode_hard_regset[hard_regno][m],
442 hard_regno + i);
447 #define no_unit_alloc_regs \
448 (this_target_ira_int->x_no_unit_alloc_regs)
450 /* The function sets up the three arrays declared above. */
451 static void
452 setup_class_hard_regs (void)
454 int cl, i, hard_regno, n;
455 HARD_REG_SET processed_hard_reg_set;
457 ira_assert (SHRT_MAX >= FIRST_PSEUDO_REGISTER);
458 for (cl = (int) N_REG_CLASSES - 1; cl >= 0; cl--)
460 COPY_HARD_REG_SET (temp_hard_regset, reg_class_contents[cl]);
461 AND_COMPL_HARD_REG_SET (temp_hard_regset, no_unit_alloc_regs);
462 CLEAR_HARD_REG_SET (processed_hard_reg_set);
463 for (i = 0; i < FIRST_PSEUDO_REGISTER; i++)
465 ira_non_ordered_class_hard_regs[cl][i] = -1;
466 ira_class_hard_reg_index[cl][i] = -1;
468 for (n = 0, i = 0; i < FIRST_PSEUDO_REGISTER; i++)
470 #ifdef REG_ALLOC_ORDER
471 hard_regno = reg_alloc_order[i];
472 #else
473 hard_regno = i;
474 #endif
475 if (TEST_HARD_REG_BIT (processed_hard_reg_set, hard_regno))
476 continue;
477 SET_HARD_REG_BIT (processed_hard_reg_set, hard_regno);
478 if (! TEST_HARD_REG_BIT (temp_hard_regset, hard_regno))
479 ira_class_hard_reg_index[cl][hard_regno] = -1;
480 else
482 ira_class_hard_reg_index[cl][hard_regno] = n;
483 ira_class_hard_regs[cl][n++] = hard_regno;
486 ira_class_hard_regs_num[cl] = n;
487 for (n = 0, i = 0; i < FIRST_PSEUDO_REGISTER; i++)
488 if (TEST_HARD_REG_BIT (temp_hard_regset, i))
489 ira_non_ordered_class_hard_regs[cl][n++] = i;
490 ira_assert (ira_class_hard_regs_num[cl] == n);
494 /* Set up global variables defining info about hard registers for the
495 allocation. These depend on USE_HARD_FRAME_P whose TRUE value means
496 that we can use the hard frame pointer for the allocation. */
497 static void
498 setup_alloc_regs (bool use_hard_frame_p)
500 #ifdef ADJUST_REG_ALLOC_ORDER
501 ADJUST_REG_ALLOC_ORDER;
502 #endif
503 COPY_HARD_REG_SET (no_unit_alloc_regs, fixed_reg_set);
504 if (! use_hard_frame_p)
505 SET_HARD_REG_BIT (no_unit_alloc_regs, HARD_FRAME_POINTER_REGNUM);
506 setup_class_hard_regs ();
511 #define alloc_reg_class_subclasses \
512 (this_target_ira_int->x_alloc_reg_class_subclasses)
514 /* Initialize the table of subclasses of each reg class. */
515 static void
516 setup_reg_subclasses (void)
518 int i, j;
519 HARD_REG_SET temp_hard_regset2;
521 for (i = 0; i < N_REG_CLASSES; i++)
522 for (j = 0; j < N_REG_CLASSES; j++)
523 alloc_reg_class_subclasses[i][j] = LIM_REG_CLASSES;
525 for (i = 0; i < N_REG_CLASSES; i++)
527 if (i == (int) NO_REGS)
528 continue;
530 COPY_HARD_REG_SET (temp_hard_regset, reg_class_contents[i]);
531 AND_COMPL_HARD_REG_SET (temp_hard_regset, no_unit_alloc_regs);
532 if (hard_reg_set_empty_p (temp_hard_regset))
533 continue;
534 for (j = 0; j < N_REG_CLASSES; j++)
535 if (i != j)
537 enum reg_class *p;
539 COPY_HARD_REG_SET (temp_hard_regset2, reg_class_contents[j]);
540 AND_COMPL_HARD_REG_SET (temp_hard_regset2, no_unit_alloc_regs);
541 if (! hard_reg_set_subset_p (temp_hard_regset,
542 temp_hard_regset2))
543 continue;
544 p = &alloc_reg_class_subclasses[j][0];
545 while (*p != LIM_REG_CLASSES) p++;
546 *p = (enum reg_class) i;
553 /* Set up IRA_MEMORY_MOVE_COST and IRA_MAX_MEMORY_MOVE_COST. */
554 static void
555 setup_class_subset_and_memory_move_costs (void)
557 int cl, cl2, mode, cost;
558 HARD_REG_SET temp_hard_regset2;
560 for (mode = 0; mode < MAX_MACHINE_MODE; mode++)
561 ira_memory_move_cost[mode][NO_REGS][0]
562 = ira_memory_move_cost[mode][NO_REGS][1] = SHRT_MAX;
563 for (cl = (int) N_REG_CLASSES - 1; cl >= 0; cl--)
565 if (cl != (int) NO_REGS)
566 for (mode = 0; mode < MAX_MACHINE_MODE; mode++)
568 ira_max_memory_move_cost[mode][cl][0]
569 = ira_memory_move_cost[mode][cl][0]
570 = memory_move_cost ((enum machine_mode) mode,
571 (reg_class_t) cl, false);
572 ira_max_memory_move_cost[mode][cl][1]
573 = ira_memory_move_cost[mode][cl][1]
574 = memory_move_cost ((enum machine_mode) mode,
575 (reg_class_t) cl, true);
576 /* Costs for NO_REGS are used in cost calculation on the
577 1st pass when the preferred register classes are not
578 known yet. In this case we take the best scenario. */
579 if (ira_memory_move_cost[mode][NO_REGS][0]
580 > ira_memory_move_cost[mode][cl][0])
581 ira_max_memory_move_cost[mode][NO_REGS][0]
582 = ira_memory_move_cost[mode][NO_REGS][0]
583 = ira_memory_move_cost[mode][cl][0];
584 if (ira_memory_move_cost[mode][NO_REGS][1]
585 > ira_memory_move_cost[mode][cl][1])
586 ira_max_memory_move_cost[mode][NO_REGS][1]
587 = ira_memory_move_cost[mode][NO_REGS][1]
588 = ira_memory_move_cost[mode][cl][1];
591 for (cl = (int) N_REG_CLASSES - 1; cl >= 0; cl--)
592 for (cl2 = (int) N_REG_CLASSES - 1; cl2 >= 0; cl2--)
594 COPY_HARD_REG_SET (temp_hard_regset, reg_class_contents[cl]);
595 AND_COMPL_HARD_REG_SET (temp_hard_regset, no_unit_alloc_regs);
596 COPY_HARD_REG_SET (temp_hard_regset2, reg_class_contents[cl2]);
597 AND_COMPL_HARD_REG_SET (temp_hard_regset2, no_unit_alloc_regs);
598 ira_class_subset_p[cl][cl2]
599 = hard_reg_set_subset_p (temp_hard_regset, temp_hard_regset2);
600 if (! hard_reg_set_empty_p (temp_hard_regset2)
601 && hard_reg_set_subset_p (reg_class_contents[cl2],
602 reg_class_contents[cl]))
603 for (mode = 0; mode < MAX_MACHINE_MODE; mode++)
605 cost = ira_memory_move_cost[mode][cl2][0];
606 if (cost > ira_max_memory_move_cost[mode][cl][0])
607 ira_max_memory_move_cost[mode][cl][0] = cost;
608 cost = ira_memory_move_cost[mode][cl2][1];
609 if (cost > ira_max_memory_move_cost[mode][cl][1])
610 ira_max_memory_move_cost[mode][cl][1] = cost;
613 for (cl = (int) N_REG_CLASSES - 1; cl >= 0; cl--)
614 for (mode = 0; mode < MAX_MACHINE_MODE; mode++)
616 ira_memory_move_cost[mode][cl][0]
617 = ira_max_memory_move_cost[mode][cl][0];
618 ira_memory_move_cost[mode][cl][1]
619 = ira_max_memory_move_cost[mode][cl][1];
621 setup_reg_subclasses ();
626 /* Define the following macro if allocation through malloc if
627 preferable. */
628 #define IRA_NO_OBSTACK
630 #ifndef IRA_NO_OBSTACK
631 /* Obstack used for storing all dynamic data (except bitmaps) of the
632 IRA. */
633 static struct obstack ira_obstack;
634 #endif
636 /* Obstack used for storing all bitmaps of the IRA. */
637 static struct bitmap_obstack ira_bitmap_obstack;
639 /* Allocate memory of size LEN for IRA data. */
640 void *
641 ira_allocate (size_t len)
643 void *res;
645 #ifndef IRA_NO_OBSTACK
646 res = obstack_alloc (&ira_obstack, len);
647 #else
648 res = xmalloc (len);
649 #endif
650 return res;
653 /* Free memory ADDR allocated for IRA data. */
654 void
655 ira_free (void *addr ATTRIBUTE_UNUSED)
657 #ifndef IRA_NO_OBSTACK
658 /* do nothing */
659 #else
660 free (addr);
661 #endif
665 /* Allocate and returns bitmap for IRA. */
666 bitmap
667 ira_allocate_bitmap (void)
669 return BITMAP_ALLOC (&ira_bitmap_obstack);
672 /* Free bitmap B allocated for IRA. */
673 void
674 ira_free_bitmap (bitmap b ATTRIBUTE_UNUSED)
676 /* do nothing */
681 /* Output information about allocation of all allocnos (except for
682 caps) into file F. */
683 void
684 ira_print_disposition (FILE *f)
686 int i, n, max_regno;
687 ira_allocno_t a;
688 basic_block bb;
690 fprintf (f, "Disposition:");
691 max_regno = max_reg_num ();
692 for (n = 0, i = FIRST_PSEUDO_REGISTER; i < max_regno; i++)
693 for (a = ira_regno_allocno_map[i];
694 a != NULL;
695 a = ALLOCNO_NEXT_REGNO_ALLOCNO (a))
697 if (n % 4 == 0)
698 fprintf (f, "\n");
699 n++;
700 fprintf (f, " %4d:r%-4d", ALLOCNO_NUM (a), ALLOCNO_REGNO (a));
701 if ((bb = ALLOCNO_LOOP_TREE_NODE (a)->bb) != NULL)
702 fprintf (f, "b%-3d", bb->index);
703 else
704 fprintf (f, "l%-3d", ALLOCNO_LOOP_TREE_NODE (a)->loop_num);
705 if (ALLOCNO_HARD_REGNO (a) >= 0)
706 fprintf (f, " %3d", ALLOCNO_HARD_REGNO (a));
707 else
708 fprintf (f, " mem");
710 fprintf (f, "\n");
713 /* Outputs information about allocation of all allocnos into
714 stderr. */
715 void
716 ira_debug_disposition (void)
718 ira_print_disposition (stderr);
723 /* Set up ira_stack_reg_pressure_class which is the biggest pressure
724 register class containing stack registers or NO_REGS if there are
725 no stack registers. To find this class, we iterate through all
726 register pressure classes and choose the first register pressure
727 class containing all the stack registers and having the biggest
728 size. */
729 static void
730 setup_stack_reg_pressure_class (void)
732 ira_stack_reg_pressure_class = NO_REGS;
733 #ifdef STACK_REGS
735 int i, best, size;
736 enum reg_class cl;
737 HARD_REG_SET temp_hard_regset2;
739 CLEAR_HARD_REG_SET (temp_hard_regset);
740 for (i = FIRST_STACK_REG; i <= LAST_STACK_REG; i++)
741 SET_HARD_REG_BIT (temp_hard_regset, i);
742 best = 0;
743 for (i = 0; i < ira_pressure_classes_num; i++)
745 cl = ira_pressure_classes[i];
746 COPY_HARD_REG_SET (temp_hard_regset2, temp_hard_regset);
747 AND_HARD_REG_SET (temp_hard_regset2, reg_class_contents[cl]);
748 size = hard_reg_set_size (temp_hard_regset2);
749 if (best < size)
751 best = size;
752 ira_stack_reg_pressure_class = cl;
756 #endif
759 /* Find pressure classes which are register classes for which we
760 calculate register pressure in IRA, register pressure sensitive
761 insn scheduling, and register pressure sensitive loop invariant
762 motion.
764 To make register pressure calculation easy, we always use
765 non-intersected register pressure classes. A move of hard
766 registers from one register pressure class is not more expensive
767 than load and store of the hard registers. Most likely an allocno
768 class will be a subset of a register pressure class and in many
769 cases a register pressure class. That makes usage of register
770 pressure classes a good approximation to find a high register
771 pressure. */
772 static void
773 setup_pressure_classes (void)
775 int cost, i, n, curr;
776 int cl, cl2;
777 enum reg_class pressure_classes[N_REG_CLASSES];
778 int m;
779 HARD_REG_SET temp_hard_regset2;
780 bool insert_p;
782 n = 0;
783 for (cl = 0; cl < N_REG_CLASSES; cl++)
785 if (ira_class_hard_regs_num[cl] == 0)
786 continue;
787 if (ira_class_hard_regs_num[cl] != 1
788 /* A register class without subclasses may contain a few
789 hard registers and movement between them is costly
790 (e.g. SPARC FPCC registers). We still should consider it
791 as a candidate for a pressure class. */
792 && alloc_reg_class_subclasses[cl][0] < cl)
794 /* Check that the moves between any hard registers of the
795 current class are not more expensive for a legal mode
796 than load/store of the hard registers of the current
797 class. Such class is a potential candidate to be a
798 register pressure class. */
799 for (m = 0; m < NUM_MACHINE_MODES; m++)
801 COPY_HARD_REG_SET (temp_hard_regset, reg_class_contents[cl]);
802 AND_COMPL_HARD_REG_SET (temp_hard_regset, no_unit_alloc_regs);
803 AND_COMPL_HARD_REG_SET (temp_hard_regset,
804 ira_prohibited_class_mode_regs[cl][m]);
805 if (hard_reg_set_empty_p (temp_hard_regset))
806 continue;
807 ira_init_register_move_cost_if_necessary ((enum machine_mode) m);
808 cost = ira_register_move_cost[m][cl][cl];
809 if (cost <= ira_max_memory_move_cost[m][cl][1]
810 || cost <= ira_max_memory_move_cost[m][cl][0])
811 break;
813 if (m >= NUM_MACHINE_MODES)
814 continue;
816 curr = 0;
817 insert_p = true;
818 COPY_HARD_REG_SET (temp_hard_regset, reg_class_contents[cl]);
819 AND_COMPL_HARD_REG_SET (temp_hard_regset, no_unit_alloc_regs);
820 /* Remove so far added pressure classes which are subset of the
821 current candidate class. Prefer GENERAL_REGS as a pressure
822 register class to another class containing the same
823 allocatable hard registers. We do this because machine
824 dependent cost hooks might give wrong costs for the latter
825 class but always give the right cost for the former class
826 (GENERAL_REGS). */
827 for (i = 0; i < n; i++)
829 cl2 = pressure_classes[i];
830 COPY_HARD_REG_SET (temp_hard_regset2, reg_class_contents[cl2]);
831 AND_COMPL_HARD_REG_SET (temp_hard_regset2, no_unit_alloc_regs);
832 if (hard_reg_set_subset_p (temp_hard_regset, temp_hard_regset2)
833 && (! hard_reg_set_equal_p (temp_hard_regset, temp_hard_regset2)
834 || cl2 == (int) GENERAL_REGS))
836 pressure_classes[curr++] = (enum reg_class) cl2;
837 insert_p = false;
838 continue;
840 if (hard_reg_set_subset_p (temp_hard_regset2, temp_hard_regset)
841 && (! hard_reg_set_equal_p (temp_hard_regset2, temp_hard_regset)
842 || cl == (int) GENERAL_REGS))
843 continue;
844 if (hard_reg_set_equal_p (temp_hard_regset2, temp_hard_regset))
845 insert_p = false;
846 pressure_classes[curr++] = (enum reg_class) cl2;
848 /* If the current candidate is a subset of a so far added
849 pressure class, don't add it to the list of the pressure
850 classes. */
851 if (insert_p)
852 pressure_classes[curr++] = (enum reg_class) cl;
853 n = curr;
855 #ifdef ENABLE_IRA_CHECKING
857 HARD_REG_SET ignore_hard_regs;
859 /* Check pressure classes correctness: here we check that hard
860 registers from all register pressure classes contains all hard
861 registers available for the allocation. */
862 CLEAR_HARD_REG_SET (temp_hard_regset);
863 CLEAR_HARD_REG_SET (temp_hard_regset2);
864 COPY_HARD_REG_SET (ignore_hard_regs, no_unit_alloc_regs);
865 for (cl = 0; cl < LIM_REG_CLASSES; cl++)
867 /* For some targets (like MIPS with MD_REGS), there are some
868 classes with hard registers available for allocation but
869 not able to hold value of any mode. */
870 for (m = 0; m < NUM_MACHINE_MODES; m++)
871 if (contains_reg_of_mode[cl][m])
872 break;
873 if (m >= NUM_MACHINE_MODES)
875 IOR_HARD_REG_SET (ignore_hard_regs, reg_class_contents[cl]);
876 continue;
878 for (i = 0; i < n; i++)
879 if ((int) pressure_classes[i] == cl)
880 break;
881 IOR_HARD_REG_SET (temp_hard_regset2, reg_class_contents[cl]);
882 if (i < n)
883 IOR_HARD_REG_SET (temp_hard_regset, reg_class_contents[cl]);
885 for (i = 0; i < FIRST_PSEUDO_REGISTER; i++)
886 /* Some targets (like SPARC with ICC reg) have alocatable regs
887 for which no reg class is defined. */
888 if (REGNO_REG_CLASS (i) == NO_REGS)
889 SET_HARD_REG_BIT (ignore_hard_regs, i);
890 AND_COMPL_HARD_REG_SET (temp_hard_regset, ignore_hard_regs);
891 AND_COMPL_HARD_REG_SET (temp_hard_regset2, ignore_hard_regs);
892 ira_assert (hard_reg_set_subset_p (temp_hard_regset2, temp_hard_regset));
894 #endif
895 ira_pressure_classes_num = 0;
896 for (i = 0; i < n; i++)
898 cl = (int) pressure_classes[i];
899 ira_reg_pressure_class_p[cl] = true;
900 ira_pressure_classes[ira_pressure_classes_num++] = (enum reg_class) cl;
902 setup_stack_reg_pressure_class ();
905 /* Set up IRA_UNIFORM_CLASS_P. Uniform class is a register class
906 whose register move cost between any registers of the class is the
907 same as for all its subclasses. We use the data to speed up the
908 2nd pass of calculations of allocno costs. */
909 static void
910 setup_uniform_class_p (void)
912 int i, cl, cl2, m;
914 for (cl = 0; cl < N_REG_CLASSES; cl++)
916 ira_uniform_class_p[cl] = false;
917 if (ira_class_hard_regs_num[cl] == 0)
918 continue;
919 /* We can not use alloc_reg_class_subclasses here because move
920 cost hooks does not take into account that some registers are
921 unavailable for the subtarget. E.g. for i686, INT_SSE_REGS
922 is element of alloc_reg_class_subclasses for GENERAL_REGS
923 because SSE regs are unavailable. */
924 for (i = 0; (cl2 = reg_class_subclasses[cl][i]) != LIM_REG_CLASSES; i++)
926 if (ira_class_hard_regs_num[cl2] == 0)
927 continue;
928 for (m = 0; m < NUM_MACHINE_MODES; m++)
929 if (contains_reg_of_mode[cl][m] && contains_reg_of_mode[cl2][m])
931 ira_init_register_move_cost_if_necessary ((enum machine_mode) m);
932 if (ira_register_move_cost[m][cl][cl]
933 != ira_register_move_cost[m][cl2][cl2])
934 break;
936 if (m < NUM_MACHINE_MODES)
937 break;
939 if (cl2 == LIM_REG_CLASSES)
940 ira_uniform_class_p[cl] = true;
944 /* Set up IRA_ALLOCNO_CLASSES, IRA_ALLOCNO_CLASSES_NUM,
945 IRA_IMPORTANT_CLASSES, and IRA_IMPORTANT_CLASSES_NUM.
947 Target may have many subtargets and not all target hard regiters can
948 be used for allocation, e.g. x86 port in 32-bit mode can not use
949 hard registers introduced in x86-64 like r8-r15). Some classes
950 might have the same allocatable hard registers, e.g. INDEX_REGS
951 and GENERAL_REGS in x86 port in 32-bit mode. To decrease different
952 calculations efforts we introduce allocno classes which contain
953 unique non-empty sets of allocatable hard-registers.
955 Pseudo class cost calculation in ira-costs.c is very expensive.
956 Therefore we are trying to decrease number of classes involved in
957 such calculation. Register classes used in the cost calculation
958 are called important classes. They are allocno classes and other
959 non-empty classes whose allocatable hard register sets are inside
960 of an allocno class hard register set. From the first sight, it
961 looks like that they are just allocno classes. It is not true. In
962 example of x86-port in 32-bit mode, allocno classes will contain
963 GENERAL_REGS but not LEGACY_REGS (because allocatable hard
964 registers are the same for the both classes). The important
965 classes will contain GENERAL_REGS and LEGACY_REGS. It is done
966 because a machine description insn constraint may refers for
967 LEGACY_REGS and code in ira-costs.c is mostly base on investigation
968 of the insn constraints. */
969 static void
970 setup_allocno_and_important_classes (void)
972 int i, j, n, cl;
973 bool set_p;
974 HARD_REG_SET temp_hard_regset2;
975 static enum reg_class classes[LIM_REG_CLASSES + 1];
977 n = 0;
978 /* Collect classes which contain unique sets of allocatable hard
979 registers. Prefer GENERAL_REGS to other classes containing the
980 same set of hard registers. */
981 for (i = 0; i < LIM_REG_CLASSES; i++)
983 COPY_HARD_REG_SET (temp_hard_regset, reg_class_contents[i]);
984 AND_COMPL_HARD_REG_SET (temp_hard_regset, no_unit_alloc_regs);
985 for (j = 0; j < n; j++)
987 cl = classes[j];
988 COPY_HARD_REG_SET (temp_hard_regset2, reg_class_contents[cl]);
989 AND_COMPL_HARD_REG_SET (temp_hard_regset2,
990 no_unit_alloc_regs);
991 if (hard_reg_set_equal_p (temp_hard_regset,
992 temp_hard_regset2))
993 break;
995 if (j >= n)
996 classes[n++] = (enum reg_class) i;
997 else if (i == GENERAL_REGS)
998 /* Prefer general regs. For i386 example, it means that
999 we prefer GENERAL_REGS over INDEX_REGS or LEGACY_REGS
1000 (all of them consists of the same available hard
1001 registers). */
1002 classes[j] = (enum reg_class) i;
1004 classes[n] = LIM_REG_CLASSES;
1006 /* Set up classes which can be used for allocnos as classes
1007 conatining non-empty unique sets of allocatable hard
1008 registers. */
1009 ira_allocno_classes_num = 0;
1010 for (i = 0; (cl = classes[i]) != LIM_REG_CLASSES; i++)
1011 if (ira_class_hard_regs_num[cl] > 0)
1012 ira_allocno_classes[ira_allocno_classes_num++] = (enum reg_class) cl;
1013 ira_important_classes_num = 0;
1014 /* Add non-allocno classes containing to non-empty set of
1015 allocatable hard regs. */
1016 for (cl = 0; cl < N_REG_CLASSES; cl++)
1017 if (ira_class_hard_regs_num[cl] > 0)
1019 COPY_HARD_REG_SET (temp_hard_regset, reg_class_contents[cl]);
1020 AND_COMPL_HARD_REG_SET (temp_hard_regset, no_unit_alloc_regs);
1021 set_p = false;
1022 for (j = 0; j < ira_allocno_classes_num; j++)
1024 COPY_HARD_REG_SET (temp_hard_regset2,
1025 reg_class_contents[ira_allocno_classes[j]]);
1026 AND_COMPL_HARD_REG_SET (temp_hard_regset2, no_unit_alloc_regs);
1027 if ((enum reg_class) cl == ira_allocno_classes[j])
1028 break;
1029 else if (hard_reg_set_subset_p (temp_hard_regset,
1030 temp_hard_regset2))
1031 set_p = true;
1033 if (set_p && j >= ira_allocno_classes_num)
1034 ira_important_classes[ira_important_classes_num++]
1035 = (enum reg_class) cl;
1037 /* Now add allocno classes to the important classes. */
1038 for (j = 0; j < ira_allocno_classes_num; j++)
1039 ira_important_classes[ira_important_classes_num++]
1040 = ira_allocno_classes[j];
1041 for (cl = 0; cl < N_REG_CLASSES; cl++)
1043 ira_reg_allocno_class_p[cl] = false;
1044 ira_reg_pressure_class_p[cl] = false;
1046 for (j = 0; j < ira_allocno_classes_num; j++)
1047 ira_reg_allocno_class_p[ira_allocno_classes[j]] = true;
1048 setup_pressure_classes ();
1049 setup_uniform_class_p ();
1052 /* Setup translation in CLASS_TRANSLATE of all classes into a class
1053 given by array CLASSES of length CLASSES_NUM. The function is used
1054 make translation any reg class to an allocno class or to an
1055 pressure class. This translation is necessary for some
1056 calculations when we can use only allocno or pressure classes and
1057 such translation represents an approximate representation of all
1058 classes.
1060 The translation in case when allocatable hard register set of a
1061 given class is subset of allocatable hard register set of a class
1062 in CLASSES is pretty simple. We use smallest classes from CLASSES
1063 containing a given class. If allocatable hard register set of a
1064 given class is not a subset of any corresponding set of a class
1065 from CLASSES, we use the cheapest (with load/store point of view)
1066 class from CLASSES whose set intersects with given class set */
1067 static void
1068 setup_class_translate_array (enum reg_class *class_translate,
1069 int classes_num, enum reg_class *classes)
1071 int cl, mode;
1072 enum reg_class aclass, best_class, *cl_ptr;
1073 int i, cost, min_cost, best_cost;
1075 for (cl = 0; cl < N_REG_CLASSES; cl++)
1076 class_translate[cl] = NO_REGS;
1078 for (i = 0; i < classes_num; i++)
1080 aclass = classes[i];
1081 for (cl_ptr = &alloc_reg_class_subclasses[aclass][0];
1082 (cl = *cl_ptr) != LIM_REG_CLASSES;
1083 cl_ptr++)
1084 if (class_translate[cl] == NO_REGS)
1085 class_translate[cl] = aclass;
1086 class_translate[aclass] = aclass;
1088 /* For classes which are not fully covered by one of given classes
1089 (in other words covered by more one given class), use the
1090 cheapest class. */
1091 for (cl = 0; cl < N_REG_CLASSES; cl++)
1093 if (cl == NO_REGS || class_translate[cl] != NO_REGS)
1094 continue;
1095 best_class = NO_REGS;
1096 best_cost = INT_MAX;
1097 for (i = 0; i < classes_num; i++)
1099 aclass = classes[i];
1100 COPY_HARD_REG_SET (temp_hard_regset,
1101 reg_class_contents[aclass]);
1102 AND_HARD_REG_SET (temp_hard_regset, reg_class_contents[cl]);
1103 AND_COMPL_HARD_REG_SET (temp_hard_regset, no_unit_alloc_regs);
1104 if (! hard_reg_set_empty_p (temp_hard_regset))
1106 min_cost = INT_MAX;
1107 for (mode = 0; mode < MAX_MACHINE_MODE; mode++)
1109 cost = (ira_memory_move_cost[mode][cl][0]
1110 + ira_memory_move_cost[mode][cl][1]);
1111 if (min_cost > cost)
1112 min_cost = cost;
1114 if (best_class == NO_REGS || best_cost > min_cost)
1116 best_class = aclass;
1117 best_cost = min_cost;
1121 class_translate[cl] = best_class;
1125 /* Set up array IRA_ALLOCNO_CLASS_TRANSLATE and
1126 IRA_PRESSURE_CLASS_TRANSLATE. */
1127 static void
1128 setup_class_translate (void)
1130 setup_class_translate_array (ira_allocno_class_translate,
1131 ira_allocno_classes_num, ira_allocno_classes);
1132 setup_class_translate_array (ira_pressure_class_translate,
1133 ira_pressure_classes_num, ira_pressure_classes);
1136 /* Order numbers of allocno classes in original target allocno class
1137 array, -1 for non-allocno classes. */
1138 static int allocno_class_order[N_REG_CLASSES];
1140 /* The function used to sort the important classes. */
1141 static int
1142 comp_reg_classes_func (const void *v1p, const void *v2p)
1144 enum reg_class cl1 = *(const enum reg_class *) v1p;
1145 enum reg_class cl2 = *(const enum reg_class *) v2p;
1146 enum reg_class tcl1, tcl2;
1147 int diff;
1149 tcl1 = ira_allocno_class_translate[cl1];
1150 tcl2 = ira_allocno_class_translate[cl2];
1151 if (tcl1 != NO_REGS && tcl2 != NO_REGS
1152 && (diff = allocno_class_order[tcl1] - allocno_class_order[tcl2]) != 0)
1153 return diff;
1154 return (int) cl1 - (int) cl2;
1157 /* For correct work of function setup_reg_class_relation we need to
1158 reorder important classes according to the order of their allocno
1159 classes. It places important classes containing the same
1160 allocatable hard register set adjacent to each other and allocno
1161 class with the allocatable hard register set right after the other
1162 important classes with the same set.
1164 In example from comments of function
1165 setup_allocno_and_important_classes, it places LEGACY_REGS and
1166 GENERAL_REGS close to each other and GENERAL_REGS is after
1167 LEGACY_REGS. */
1168 static void
1169 reorder_important_classes (void)
1171 int i;
1173 for (i = 0; i < N_REG_CLASSES; i++)
1174 allocno_class_order[i] = -1;
1175 for (i = 0; i < ira_allocno_classes_num; i++)
1176 allocno_class_order[ira_allocno_classes[i]] = i;
1177 qsort (ira_important_classes, ira_important_classes_num,
1178 sizeof (enum reg_class), comp_reg_classes_func);
1179 for (i = 0; i < ira_important_classes_num; i++)
1180 ira_important_class_nums[ira_important_classes[i]] = i;
1183 /* Set up IRA_REG_CLASS_SUBUNION, IRA_REG_CLASS_SUPERUNION,
1184 IRA_REG_CLASS_SUPER_CLASSES, IRA_REG_CLASSES_INTERSECT, and
1185 IRA_REG_CLASSES_INTERSECT_P. For the meaning of the relations,
1186 please see corresponding comments in ira-int.h. */
1187 static void
1188 setup_reg_class_relations (void)
1190 int i, cl1, cl2, cl3;
1191 HARD_REG_SET intersection_set, union_set, temp_set2;
1192 bool important_class_p[N_REG_CLASSES];
1194 memset (important_class_p, 0, sizeof (important_class_p));
1195 for (i = 0; i < ira_important_classes_num; i++)
1196 important_class_p[ira_important_classes[i]] = true;
1197 for (cl1 = 0; cl1 < N_REG_CLASSES; cl1++)
1199 ira_reg_class_super_classes[cl1][0] = LIM_REG_CLASSES;
1200 for (cl2 = 0; cl2 < N_REG_CLASSES; cl2++)
1202 ira_reg_classes_intersect_p[cl1][cl2] = false;
1203 ira_reg_class_intersect[cl1][cl2] = NO_REGS;
1204 ira_reg_class_subset[cl1][cl2] = NO_REGS;
1205 COPY_HARD_REG_SET (temp_hard_regset, reg_class_contents[cl1]);
1206 AND_COMPL_HARD_REG_SET (temp_hard_regset, no_unit_alloc_regs);
1207 COPY_HARD_REG_SET (temp_set2, reg_class_contents[cl2]);
1208 AND_COMPL_HARD_REG_SET (temp_set2, no_unit_alloc_regs);
1209 if (hard_reg_set_empty_p (temp_hard_regset)
1210 && hard_reg_set_empty_p (temp_set2))
1212 /* The both classes have no allocatable hard registers
1213 -- take all class hard registers into account and use
1214 reg_class_subunion and reg_class_superunion. */
1215 for (i = 0;; i++)
1217 cl3 = reg_class_subclasses[cl1][i];
1218 if (cl3 == LIM_REG_CLASSES)
1219 break;
1220 if (reg_class_subset_p (ira_reg_class_intersect[cl1][cl2],
1221 (enum reg_class) cl3))
1222 ira_reg_class_intersect[cl1][cl2] = (enum reg_class) cl3;
1224 ira_reg_class_subunion[cl1][cl2] = reg_class_subunion[cl1][cl2];
1225 ira_reg_class_superunion[cl1][cl2] = reg_class_superunion[cl1][cl2];
1226 continue;
1228 ira_reg_classes_intersect_p[cl1][cl2]
1229 = hard_reg_set_intersect_p (temp_hard_regset, temp_set2);
1230 if (important_class_p[cl1] && important_class_p[cl2]
1231 && hard_reg_set_subset_p (temp_hard_regset, temp_set2))
1233 /* CL1 and CL2 are important classes and CL1 allocatable
1234 hard register set is inside of CL2 allocatable hard
1235 registers -- make CL1 a superset of CL2. */
1236 enum reg_class *p;
1238 p = &ira_reg_class_super_classes[cl1][0];
1239 while (*p != LIM_REG_CLASSES)
1240 p++;
1241 *p++ = (enum reg_class) cl2;
1242 *p = LIM_REG_CLASSES;
1244 ira_reg_class_subunion[cl1][cl2] = NO_REGS;
1245 ira_reg_class_superunion[cl1][cl2] = NO_REGS;
1246 COPY_HARD_REG_SET (intersection_set, reg_class_contents[cl1]);
1247 AND_HARD_REG_SET (intersection_set, reg_class_contents[cl2]);
1248 AND_COMPL_HARD_REG_SET (intersection_set, no_unit_alloc_regs);
1249 COPY_HARD_REG_SET (union_set, reg_class_contents[cl1]);
1250 IOR_HARD_REG_SET (union_set, reg_class_contents[cl2]);
1251 AND_COMPL_HARD_REG_SET (union_set, no_unit_alloc_regs);
1252 for (cl3 = 0; cl3 < N_REG_CLASSES; cl3++)
1254 COPY_HARD_REG_SET (temp_hard_regset, reg_class_contents[cl3]);
1255 AND_COMPL_HARD_REG_SET (temp_hard_regset, no_unit_alloc_regs);
1256 if (hard_reg_set_subset_p (temp_hard_regset, intersection_set))
1258 /* CL3 allocatable hard register set is inside of
1259 intersection of allocatable hard register sets
1260 of CL1 and CL2. */
1261 if (important_class_p[cl3])
1263 COPY_HARD_REG_SET
1264 (temp_set2,
1265 reg_class_contents
1266 [(int) ira_reg_class_intersect[cl1][cl2]]);
1267 AND_COMPL_HARD_REG_SET (temp_set2, no_unit_alloc_regs);
1268 if (! hard_reg_set_subset_p (temp_hard_regset, temp_set2)
1269 /* If the allocatable hard register sets are
1270 the same, prefer GENERAL_REGS or the
1271 smallest class for debugging
1272 purposes. */
1273 || (hard_reg_set_equal_p (temp_hard_regset, temp_set2)
1274 && (cl3 == GENERAL_REGS
1275 || ((ira_reg_class_intersect[cl1][cl2]
1276 != GENERAL_REGS)
1277 && hard_reg_set_subset_p
1278 (reg_class_contents[cl3],
1279 reg_class_contents
1280 [(int)
1281 ira_reg_class_intersect[cl1][cl2]])))))
1282 ira_reg_class_intersect[cl1][cl2] = (enum reg_class) cl3;
1284 COPY_HARD_REG_SET
1285 (temp_set2,
1286 reg_class_contents[(int) ira_reg_class_subset[cl1][cl2]]);
1287 AND_COMPL_HARD_REG_SET (temp_set2, no_unit_alloc_regs);
1288 if (! hard_reg_set_subset_p (temp_hard_regset, temp_set2)
1289 /* Ignore unavailable hard registers and prefer
1290 smallest class for debugging purposes. */
1291 || (hard_reg_set_equal_p (temp_hard_regset, temp_set2)
1292 && hard_reg_set_subset_p
1293 (reg_class_contents[cl3],
1294 reg_class_contents
1295 [(int) ira_reg_class_subset[cl1][cl2]])))
1296 ira_reg_class_subset[cl1][cl2] = (enum reg_class) cl3;
1298 if (important_class_p[cl3]
1299 && hard_reg_set_subset_p (temp_hard_regset, union_set))
1301 /* CL3 allocatbale hard register set is inside of
1302 union of allocatable hard register sets of CL1
1303 and CL2. */
1304 COPY_HARD_REG_SET
1305 (temp_set2,
1306 reg_class_contents[(int) ira_reg_class_subunion[cl1][cl2]]);
1307 AND_COMPL_HARD_REG_SET (temp_set2, no_unit_alloc_regs);
1308 if (ira_reg_class_subunion[cl1][cl2] == NO_REGS
1309 || (hard_reg_set_subset_p (temp_set2, temp_hard_regset)
1311 && (! hard_reg_set_equal_p (temp_set2,
1312 temp_hard_regset)
1313 || cl3 == GENERAL_REGS
1314 /* If the allocatable hard register sets are the
1315 same, prefer GENERAL_REGS or the smallest
1316 class for debugging purposes. */
1317 || (ira_reg_class_subunion[cl1][cl2] != GENERAL_REGS
1318 && hard_reg_set_subset_p
1319 (reg_class_contents[cl3],
1320 reg_class_contents
1321 [(int) ira_reg_class_subunion[cl1][cl2]])))))
1322 ira_reg_class_subunion[cl1][cl2] = (enum reg_class) cl3;
1324 if (hard_reg_set_subset_p (union_set, temp_hard_regset))
1326 /* CL3 allocatable hard register set contains union
1327 of allocatable hard register sets of CL1 and
1328 CL2. */
1329 COPY_HARD_REG_SET
1330 (temp_set2,
1331 reg_class_contents[(int) ira_reg_class_superunion[cl1][cl2]]);
1332 AND_COMPL_HARD_REG_SET (temp_set2, no_unit_alloc_regs);
1333 if (ira_reg_class_superunion[cl1][cl2] == NO_REGS
1334 || (hard_reg_set_subset_p (temp_hard_regset, temp_set2)
1336 && (! hard_reg_set_equal_p (temp_set2,
1337 temp_hard_regset)
1338 || cl3 == GENERAL_REGS
1339 /* If the allocatable hard register sets are the
1340 same, prefer GENERAL_REGS or the smallest
1341 class for debugging purposes. */
1342 || (ira_reg_class_superunion[cl1][cl2] != GENERAL_REGS
1343 && hard_reg_set_subset_p
1344 (reg_class_contents[cl3],
1345 reg_class_contents
1346 [(int) ira_reg_class_superunion[cl1][cl2]])))))
1347 ira_reg_class_superunion[cl1][cl2] = (enum reg_class) cl3;
1354 /* Output all unifrom and important classes into file F. */
1355 static void
1356 print_unform_and_important_classes (FILE *f)
1358 static const char *const reg_class_names[] = REG_CLASS_NAMES;
1359 int i, cl;
1361 fprintf (f, "Uniform classes:\n");
1362 for (cl = 0; cl < N_REG_CLASSES; cl++)
1363 if (ira_uniform_class_p[cl])
1364 fprintf (f, " %s", reg_class_names[cl]);
1365 fprintf (f, "\nImportant classes:\n");
1366 for (i = 0; i < ira_important_classes_num; i++)
1367 fprintf (f, " %s", reg_class_names[ira_important_classes[i]]);
1368 fprintf (f, "\n");
1371 /* Output all possible allocno or pressure classes and their
1372 translation map into file F. */
1373 static void
1374 print_translated_classes (FILE *f, bool pressure_p)
1376 int classes_num = (pressure_p
1377 ? ira_pressure_classes_num : ira_allocno_classes_num);
1378 enum reg_class *classes = (pressure_p
1379 ? ira_pressure_classes : ira_allocno_classes);
1380 enum reg_class *class_translate = (pressure_p
1381 ? ira_pressure_class_translate
1382 : ira_allocno_class_translate);
1383 static const char *const reg_class_names[] = REG_CLASS_NAMES;
1384 int i;
1386 fprintf (f, "%s classes:\n", pressure_p ? "Pressure" : "Allocno");
1387 for (i = 0; i < classes_num; i++)
1388 fprintf (f, " %s", reg_class_names[classes[i]]);
1389 fprintf (f, "\nClass translation:\n");
1390 for (i = 0; i < N_REG_CLASSES; i++)
1391 fprintf (f, " %s -> %s\n", reg_class_names[i],
1392 reg_class_names[class_translate[i]]);
1395 /* Output all possible allocno and translation classes and the
1396 translation maps into stderr. */
1397 void
1398 ira_debug_allocno_classes (void)
1400 print_unform_and_important_classes (stderr);
1401 print_translated_classes (stderr, false);
1402 print_translated_classes (stderr, true);
1405 /* Set up different arrays concerning class subsets, allocno and
1406 important classes. */
1407 static void
1408 find_reg_classes (void)
1410 setup_allocno_and_important_classes ();
1411 setup_class_translate ();
1412 reorder_important_classes ();
1413 setup_reg_class_relations ();
1418 /* Set up the array above. */
1419 static void
1420 setup_hard_regno_aclass (void)
1422 int i;
1424 for (i = 0; i < FIRST_PSEUDO_REGISTER; i++)
1426 #if 1
1427 ira_hard_regno_allocno_class[i]
1428 = (TEST_HARD_REG_BIT (no_unit_alloc_regs, i)
1429 ? NO_REGS
1430 : ira_allocno_class_translate[REGNO_REG_CLASS (i)]);
1431 #else
1432 int j;
1433 enum reg_class cl;
1434 ira_hard_regno_allocno_class[i] = NO_REGS;
1435 for (j = 0; j < ira_allocno_classes_num; j++)
1437 cl = ira_allocno_classes[j];
1438 if (ira_class_hard_reg_index[cl][i] >= 0)
1440 ira_hard_regno_allocno_class[i] = cl;
1441 break;
1444 #endif
1450 /* Form IRA_REG_CLASS_MAX_NREGS and IRA_REG_CLASS_MIN_NREGS maps. */
1451 static void
1452 setup_reg_class_nregs (void)
1454 int i, cl, cl2, m;
1456 for (m = 0; m < MAX_MACHINE_MODE; m++)
1458 for (cl = 0; cl < N_REG_CLASSES; cl++)
1459 ira_reg_class_max_nregs[cl][m]
1460 = ira_reg_class_min_nregs[cl][m]
1461 = targetm.class_max_nregs ((reg_class_t) cl, (enum machine_mode) m);
1462 for (cl = 0; cl < N_REG_CLASSES; cl++)
1463 for (i = 0;
1464 (cl2 = alloc_reg_class_subclasses[cl][i]) != LIM_REG_CLASSES;
1465 i++)
1466 if (ira_reg_class_min_nregs[cl2][m]
1467 < ira_reg_class_min_nregs[cl][m])
1468 ira_reg_class_min_nregs[cl][m] = ira_reg_class_min_nregs[cl2][m];
1474 /* Set up IRA_PROHIBITED_CLASS_MODE_REGS and IRA_CLASS_SINGLETON.
1475 This function is called once IRA_CLASS_HARD_REGS has been initialized. */
1476 static void
1477 setup_prohibited_class_mode_regs (void)
1479 int j, k, hard_regno, cl, last_hard_regno, count;
1481 for (cl = (int) N_REG_CLASSES - 1; cl >= 0; cl--)
1483 COPY_HARD_REG_SET (temp_hard_regset, reg_class_contents[cl]);
1484 AND_COMPL_HARD_REG_SET (temp_hard_regset, no_unit_alloc_regs);
1485 for (j = 0; j < NUM_MACHINE_MODES; j++)
1487 count = 0;
1488 last_hard_regno = -1;
1489 CLEAR_HARD_REG_SET (ira_prohibited_class_mode_regs[cl][j]);
1490 for (k = ira_class_hard_regs_num[cl] - 1; k >= 0; k--)
1492 hard_regno = ira_class_hard_regs[cl][k];
1493 if (! HARD_REGNO_MODE_OK (hard_regno, (enum machine_mode) j))
1494 SET_HARD_REG_BIT (ira_prohibited_class_mode_regs[cl][j],
1495 hard_regno);
1496 else if (in_hard_reg_set_p (temp_hard_regset,
1497 (enum machine_mode) j, hard_regno))
1499 last_hard_regno = hard_regno;
1500 count++;
1503 ira_class_singleton[cl][j] = (count == 1 ? last_hard_regno : -1);
1508 /* Clarify IRA_PROHIBITED_CLASS_MODE_REGS by excluding hard registers
1509 spanning from one register pressure class to another one. It is
1510 called after defining the pressure classes. */
1511 static void
1512 clarify_prohibited_class_mode_regs (void)
1514 int j, k, hard_regno, cl, pclass, nregs;
1516 for (cl = (int) N_REG_CLASSES - 1; cl >= 0; cl--)
1517 for (j = 0; j < NUM_MACHINE_MODES; j++)
1519 CLEAR_HARD_REG_SET (ira_useful_class_mode_regs[cl][j]);
1520 for (k = ira_class_hard_regs_num[cl] - 1; k >= 0; k--)
1522 hard_regno = ira_class_hard_regs[cl][k];
1523 if (TEST_HARD_REG_BIT (ira_prohibited_class_mode_regs[cl][j], hard_regno))
1524 continue;
1525 nregs = hard_regno_nregs[hard_regno][j];
1526 if (hard_regno + nregs > FIRST_PSEUDO_REGISTER)
1528 SET_HARD_REG_BIT (ira_prohibited_class_mode_regs[cl][j],
1529 hard_regno);
1530 continue;
1532 pclass = ira_pressure_class_translate[REGNO_REG_CLASS (hard_regno)];
1533 for (nregs-- ;nregs >= 0; nregs--)
1534 if (((enum reg_class) pclass
1535 != ira_pressure_class_translate[REGNO_REG_CLASS
1536 (hard_regno + nregs)]))
1538 SET_HARD_REG_BIT (ira_prohibited_class_mode_regs[cl][j],
1539 hard_regno);
1540 break;
1542 if (!TEST_HARD_REG_BIT (ira_prohibited_class_mode_regs[cl][j],
1543 hard_regno))
1544 add_to_hard_reg_set (&ira_useful_class_mode_regs[cl][j],
1545 (enum machine_mode) j, hard_regno);
1550 /* Allocate and initialize IRA_REGISTER_MOVE_COST, IRA_MAY_MOVE_IN_COST
1551 and IRA_MAY_MOVE_OUT_COST for MODE. */
1552 void
1553 ira_init_register_move_cost (enum machine_mode mode)
1555 static unsigned short last_move_cost[N_REG_CLASSES][N_REG_CLASSES];
1556 bool all_match = true;
1557 unsigned int cl1, cl2;
1559 ira_assert (ira_register_move_cost[mode] == NULL
1560 && ira_may_move_in_cost[mode] == NULL
1561 && ira_may_move_out_cost[mode] == NULL);
1562 ira_assert (have_regs_of_mode[mode]);
1563 for (cl1 = 0; cl1 < N_REG_CLASSES; cl1++)
1564 if (contains_reg_of_mode[cl1][mode])
1565 for (cl2 = 0; cl2 < N_REG_CLASSES; cl2++)
1567 int cost;
1568 if (!contains_reg_of_mode[cl2][mode])
1569 cost = 65535;
1570 else
1572 cost = register_move_cost (mode, (enum reg_class) cl1,
1573 (enum reg_class) cl2);
1574 ira_assert (cost < 65535);
1576 all_match &= (last_move_cost[cl1][cl2] == cost);
1577 last_move_cost[cl1][cl2] = cost;
1579 if (all_match && last_mode_for_init_move_cost != -1)
1581 ira_register_move_cost[mode]
1582 = ira_register_move_cost[last_mode_for_init_move_cost];
1583 ira_may_move_in_cost[mode]
1584 = ira_may_move_in_cost[last_mode_for_init_move_cost];
1585 ira_may_move_out_cost[mode]
1586 = ira_may_move_out_cost[last_mode_for_init_move_cost];
1587 return;
1589 last_mode_for_init_move_cost = mode;
1590 ira_register_move_cost[mode] = XNEWVEC (move_table, N_REG_CLASSES);
1591 ira_may_move_in_cost[mode] = XNEWVEC (move_table, N_REG_CLASSES);
1592 ira_may_move_out_cost[mode] = XNEWVEC (move_table, N_REG_CLASSES);
1593 for (cl1 = 0; cl1 < N_REG_CLASSES; cl1++)
1594 if (contains_reg_of_mode[cl1][mode])
1595 for (cl2 = 0; cl2 < N_REG_CLASSES; cl2++)
1597 int cost;
1598 enum reg_class *p1, *p2;
1600 if (last_move_cost[cl1][cl2] == 65535)
1602 ira_register_move_cost[mode][cl1][cl2] = 65535;
1603 ira_may_move_in_cost[mode][cl1][cl2] = 65535;
1604 ira_may_move_out_cost[mode][cl1][cl2] = 65535;
1606 else
1608 cost = last_move_cost[cl1][cl2];
1610 for (p2 = &reg_class_subclasses[cl2][0];
1611 *p2 != LIM_REG_CLASSES; p2++)
1612 if (ira_class_hard_regs_num[*p2] > 0
1613 && (ira_reg_class_max_nregs[*p2][mode]
1614 <= ira_class_hard_regs_num[*p2]))
1615 cost = MAX (cost, ira_register_move_cost[mode][cl1][*p2]);
1617 for (p1 = &reg_class_subclasses[cl1][0];
1618 *p1 != LIM_REG_CLASSES; p1++)
1619 if (ira_class_hard_regs_num[*p1] > 0
1620 && (ira_reg_class_max_nregs[*p1][mode]
1621 <= ira_class_hard_regs_num[*p1]))
1622 cost = MAX (cost, ira_register_move_cost[mode][*p1][cl2]);
1624 ira_assert (cost <= 65535);
1625 ira_register_move_cost[mode][cl1][cl2] = cost;
1627 if (ira_class_subset_p[cl1][cl2])
1628 ira_may_move_in_cost[mode][cl1][cl2] = 0;
1629 else
1630 ira_may_move_in_cost[mode][cl1][cl2] = cost;
1632 if (ira_class_subset_p[cl2][cl1])
1633 ira_may_move_out_cost[mode][cl1][cl2] = 0;
1634 else
1635 ira_may_move_out_cost[mode][cl1][cl2] = cost;
1638 else
1639 for (cl2 = 0; cl2 < N_REG_CLASSES; cl2++)
1641 ira_register_move_cost[mode][cl1][cl2] = 65535;
1642 ira_may_move_in_cost[mode][cl1][cl2] = 65535;
1643 ira_may_move_out_cost[mode][cl1][cl2] = 65535;
1648 /* This is called once during compiler work. It sets up
1649 different arrays whose values don't depend on the compiled
1650 function. */
1651 void
1652 ira_init_once (void)
1654 ira_init_costs_once ();
1655 lra_init_once ();
1658 /* Free ira_max_register_move_cost, ira_may_move_in_cost and
1659 ira_may_move_out_cost for each mode. */
1660 static void
1661 free_register_move_costs (void)
1663 int mode, i;
1665 /* Reset move_cost and friends, making sure we only free shared
1666 table entries once. */
1667 for (mode = 0; mode < MAX_MACHINE_MODE; mode++)
1668 if (ira_register_move_cost[mode])
1670 for (i = 0;
1671 i < mode && (ira_register_move_cost[i]
1672 != ira_register_move_cost[mode]);
1673 i++)
1675 if (i == mode)
1677 free (ira_register_move_cost[mode]);
1678 free (ira_may_move_in_cost[mode]);
1679 free (ira_may_move_out_cost[mode]);
1682 memset (ira_register_move_cost, 0, sizeof ira_register_move_cost);
1683 memset (ira_may_move_in_cost, 0, sizeof ira_may_move_in_cost);
1684 memset (ira_may_move_out_cost, 0, sizeof ira_may_move_out_cost);
1685 last_mode_for_init_move_cost = -1;
1688 /* This is called every time when register related information is
1689 changed. */
1690 void
1691 ira_init (void)
1693 free_register_move_costs ();
1694 setup_reg_mode_hard_regset ();
1695 setup_alloc_regs (flag_omit_frame_pointer != 0);
1696 setup_class_subset_and_memory_move_costs ();
1697 setup_reg_class_nregs ();
1698 setup_prohibited_class_mode_regs ();
1699 find_reg_classes ();
1700 clarify_prohibited_class_mode_regs ();
1701 setup_hard_regno_aclass ();
1702 ira_init_costs ();
1703 lra_init ();
1706 /* Function called once at the end of compiler work. */
1707 void
1708 ira_finish_once (void)
1710 ira_finish_costs_once ();
1711 free_register_move_costs ();
1712 lra_finish_once ();
1716 #define ira_prohibited_mode_move_regs_initialized_p \
1717 (this_target_ira_int->x_ira_prohibited_mode_move_regs_initialized_p)
1719 /* Set up IRA_PROHIBITED_MODE_MOVE_REGS. */
1720 static void
1721 setup_prohibited_mode_move_regs (void)
1723 int i, j;
1724 rtx test_reg1, test_reg2, move_pat, move_insn;
1726 if (ira_prohibited_mode_move_regs_initialized_p)
1727 return;
1728 ira_prohibited_mode_move_regs_initialized_p = true;
1729 test_reg1 = gen_rtx_REG (VOIDmode, 0);
1730 test_reg2 = gen_rtx_REG (VOIDmode, 0);
1731 move_pat = gen_rtx_SET (VOIDmode, test_reg1, test_reg2);
1732 move_insn = gen_rtx_INSN (VOIDmode, 0, 0, 0, 0, move_pat, 0, -1, 0);
1733 for (i = 0; i < NUM_MACHINE_MODES; i++)
1735 SET_HARD_REG_SET (ira_prohibited_mode_move_regs[i]);
1736 for (j = 0; j < FIRST_PSEUDO_REGISTER; j++)
1738 if (! HARD_REGNO_MODE_OK (j, (enum machine_mode) i))
1739 continue;
1740 SET_REGNO_RAW (test_reg1, j);
1741 PUT_MODE (test_reg1, (enum machine_mode) i);
1742 SET_REGNO_RAW (test_reg2, j);
1743 PUT_MODE (test_reg2, (enum machine_mode) i);
1744 INSN_CODE (move_insn) = -1;
1745 recog_memoized (move_insn);
1746 if (INSN_CODE (move_insn) < 0)
1747 continue;
1748 extract_insn (move_insn);
1749 if (! constrain_operands (1))
1750 continue;
1751 CLEAR_HARD_REG_BIT (ira_prohibited_mode_move_regs[i], j);
1758 /* Return nonzero if REGNO is a particularly bad choice for reloading X. */
1759 static bool
1760 ira_bad_reload_regno_1 (int regno, rtx x)
1762 int x_regno, n, i;
1763 ira_allocno_t a;
1764 enum reg_class pref;
1766 /* We only deal with pseudo regs. */
1767 if (! x || GET_CODE (x) != REG)
1768 return false;
1770 x_regno = REGNO (x);
1771 if (x_regno < FIRST_PSEUDO_REGISTER)
1772 return false;
1774 /* If the pseudo prefers REGNO explicitly, then do not consider
1775 REGNO a bad spill choice. */
1776 pref = reg_preferred_class (x_regno);
1777 if (reg_class_size[pref] == 1)
1778 return !TEST_HARD_REG_BIT (reg_class_contents[pref], regno);
1780 /* If the pseudo conflicts with REGNO, then we consider REGNO a
1781 poor choice for a reload regno. */
1782 a = ira_regno_allocno_map[x_regno];
1783 n = ALLOCNO_NUM_OBJECTS (a);
1784 for (i = 0; i < n; i++)
1786 ira_object_t obj = ALLOCNO_OBJECT (a, i);
1787 if (TEST_HARD_REG_BIT (OBJECT_TOTAL_CONFLICT_HARD_REGS (obj), regno))
1788 return true;
1790 return false;
1793 /* Return nonzero if REGNO is a particularly bad choice for reloading
1794 IN or OUT. */
1795 bool
1796 ira_bad_reload_regno (int regno, rtx in, rtx out)
1798 return (ira_bad_reload_regno_1 (regno, in)
1799 || ira_bad_reload_regno_1 (regno, out));
1802 /* Return TRUE if *LOC contains an asm. */
1803 static int
1804 insn_contains_asm_1 (rtx *loc, void *data ATTRIBUTE_UNUSED)
1806 if ( !*loc)
1807 return FALSE;
1808 if (GET_CODE (*loc) == ASM_OPERANDS)
1809 return TRUE;
1810 return FALSE;
1814 /* Return TRUE if INSN contains an ASM. */
1815 static bool
1816 insn_contains_asm (rtx insn)
1818 return for_each_rtx (&insn, insn_contains_asm_1, NULL);
1821 /* Add register clobbers from asm statements. */
1822 static void
1823 compute_regs_asm_clobbered (void)
1825 basic_block bb;
1827 FOR_EACH_BB (bb)
1829 rtx insn;
1830 FOR_BB_INSNS_REVERSE (bb, insn)
1832 df_ref *def_rec;
1834 if (insn_contains_asm (insn))
1835 for (def_rec = DF_INSN_DEFS (insn); *def_rec; def_rec++)
1837 df_ref def = *def_rec;
1838 unsigned int dregno = DF_REF_REGNO (def);
1839 if (HARD_REGISTER_NUM_P (dregno))
1840 add_to_hard_reg_set (&crtl->asm_clobbers,
1841 GET_MODE (DF_REF_REAL_REG (def)),
1842 dregno);
1849 /* Set up ELIMINABLE_REGSET, IRA_NO_ALLOC_REGS, and REGS_EVER_LIVE.
1850 If the function is called from IRA (not from the insn scheduler or
1851 RTL loop invariant motion), FROM_IRA_P is true. */
1852 void
1853 ira_setup_eliminable_regset (bool from_ira_p)
1855 #ifdef ELIMINABLE_REGS
1856 int i;
1857 static const struct {const int from, to; } eliminables[] = ELIMINABLE_REGS;
1858 #endif
1859 /* FIXME: If EXIT_IGNORE_STACK is set, we will not save and restore
1860 sp for alloca. So we can't eliminate the frame pointer in that
1861 case. At some point, we should improve this by emitting the
1862 sp-adjusting insns for this case. */
1863 frame_pointer_needed
1864 = (! flag_omit_frame_pointer
1865 || (cfun->calls_alloca && EXIT_IGNORE_STACK)
1866 /* We need the frame pointer to catch stack overflow exceptions
1867 if the stack pointer is moving. */
1868 || (flag_stack_check && STACK_CHECK_MOVING_SP)
1869 || crtl->accesses_prior_frames
1870 || crtl->stack_realign_needed
1871 || targetm.frame_pointer_required ());
1873 if (from_ira_p && ira_use_lra_p)
1874 /* It can change FRAME_POINTER_NEEDED. We call it only from IRA
1875 because it is expensive. */
1876 lra_init_elimination ();
1878 if (frame_pointer_needed)
1879 df_set_regs_ever_live (HARD_FRAME_POINTER_REGNUM, true);
1881 COPY_HARD_REG_SET (ira_no_alloc_regs, no_unit_alloc_regs);
1882 CLEAR_HARD_REG_SET (eliminable_regset);
1884 compute_regs_asm_clobbered ();
1886 /* Build the regset of all eliminable registers and show we can't
1887 use those that we already know won't be eliminated. */
1888 #ifdef ELIMINABLE_REGS
1889 for (i = 0; i < (int) ARRAY_SIZE (eliminables); i++)
1891 bool cannot_elim
1892 = (! targetm.can_eliminate (eliminables[i].from, eliminables[i].to)
1893 || (eliminables[i].to == STACK_POINTER_REGNUM && frame_pointer_needed));
1895 if (!TEST_HARD_REG_BIT (crtl->asm_clobbers, eliminables[i].from))
1897 SET_HARD_REG_BIT (eliminable_regset, eliminables[i].from);
1899 if (cannot_elim)
1900 SET_HARD_REG_BIT (ira_no_alloc_regs, eliminables[i].from);
1902 else if (cannot_elim)
1903 error ("%s cannot be used in asm here",
1904 reg_names[eliminables[i].from]);
1905 else
1906 df_set_regs_ever_live (eliminables[i].from, true);
1908 #if !HARD_FRAME_POINTER_IS_FRAME_POINTER
1909 if (!TEST_HARD_REG_BIT (crtl->asm_clobbers, HARD_FRAME_POINTER_REGNUM))
1911 SET_HARD_REG_BIT (eliminable_regset, HARD_FRAME_POINTER_REGNUM);
1912 if (frame_pointer_needed)
1913 SET_HARD_REG_BIT (ira_no_alloc_regs, HARD_FRAME_POINTER_REGNUM);
1915 else if (frame_pointer_needed)
1916 error ("%s cannot be used in asm here",
1917 reg_names[HARD_FRAME_POINTER_REGNUM]);
1918 else
1919 df_set_regs_ever_live (HARD_FRAME_POINTER_REGNUM, true);
1920 #endif
1922 #else
1923 if (!TEST_HARD_REG_BIT (crtl->asm_clobbers, HARD_FRAME_POINTER_REGNUM))
1925 SET_HARD_REG_BIT (eliminable_regset, FRAME_POINTER_REGNUM);
1926 if (frame_pointer_needed)
1927 SET_HARD_REG_BIT (ira_no_alloc_regs, FRAME_POINTER_REGNUM);
1929 else if (frame_pointer_needed)
1930 error ("%s cannot be used in asm here", reg_names[FRAME_POINTER_REGNUM]);
1931 else
1932 df_set_regs_ever_live (FRAME_POINTER_REGNUM, true);
1933 #endif
1938 /* Vector of substitutions of register numbers,
1939 used to map pseudo regs into hardware regs.
1940 This is set up as a result of register allocation.
1941 Element N is the hard reg assigned to pseudo reg N,
1942 or is -1 if no hard reg was assigned.
1943 If N is a hard reg number, element N is N. */
1944 short *reg_renumber;
1946 /* Set up REG_RENUMBER and CALLER_SAVE_NEEDED (used by reload) from
1947 the allocation found by IRA. */
1948 static void
1949 setup_reg_renumber (void)
1951 int regno, hard_regno;
1952 ira_allocno_t a;
1953 ira_allocno_iterator ai;
1955 caller_save_needed = 0;
1956 FOR_EACH_ALLOCNO (a, ai)
1958 if (ira_use_lra_p && ALLOCNO_CAP_MEMBER (a) != NULL)
1959 continue;
1960 /* There are no caps at this point. */
1961 ira_assert (ALLOCNO_CAP_MEMBER (a) == NULL);
1962 if (! ALLOCNO_ASSIGNED_P (a))
1963 /* It can happen if A is not referenced but partially anticipated
1964 somewhere in a region. */
1965 ALLOCNO_ASSIGNED_P (a) = true;
1966 ira_free_allocno_updated_costs (a);
1967 hard_regno = ALLOCNO_HARD_REGNO (a);
1968 regno = ALLOCNO_REGNO (a);
1969 reg_renumber[regno] = (hard_regno < 0 ? -1 : hard_regno);
1970 if (hard_regno >= 0)
1972 int i, nwords;
1973 enum reg_class pclass;
1974 ira_object_t obj;
1976 pclass = ira_pressure_class_translate[REGNO_REG_CLASS (hard_regno)];
1977 nwords = ALLOCNO_NUM_OBJECTS (a);
1978 for (i = 0; i < nwords; i++)
1980 obj = ALLOCNO_OBJECT (a, i);
1981 IOR_COMPL_HARD_REG_SET (OBJECT_TOTAL_CONFLICT_HARD_REGS (obj),
1982 reg_class_contents[pclass]);
1984 if (ALLOCNO_CALLS_CROSSED_NUM (a) != 0
1985 && ira_hard_reg_set_intersection_p (hard_regno, ALLOCNO_MODE (a),
1986 call_used_reg_set))
1988 ira_assert (!optimize || flag_caller_saves
1989 || (ALLOCNO_CALLS_CROSSED_NUM (a)
1990 == ALLOCNO_CHEAP_CALLS_CROSSED_NUM (a))
1991 || regno >= ira_reg_equiv_len
1992 || ira_equiv_no_lvalue_p (regno));
1993 caller_save_needed = 1;
1999 /* Set up allocno assignment flags for further allocation
2000 improvements. */
2001 static void
2002 setup_allocno_assignment_flags (void)
2004 int hard_regno;
2005 ira_allocno_t a;
2006 ira_allocno_iterator ai;
2008 FOR_EACH_ALLOCNO (a, ai)
2010 if (! ALLOCNO_ASSIGNED_P (a))
2011 /* It can happen if A is not referenced but partially anticipated
2012 somewhere in a region. */
2013 ira_free_allocno_updated_costs (a);
2014 hard_regno = ALLOCNO_HARD_REGNO (a);
2015 /* Don't assign hard registers to allocnos which are destination
2016 of removed store at the end of loop. It has no sense to keep
2017 the same value in different hard registers. It is also
2018 impossible to assign hard registers correctly to such
2019 allocnos because the cost info and info about intersected
2020 calls are incorrect for them. */
2021 ALLOCNO_ASSIGNED_P (a) = (hard_regno >= 0
2022 || ALLOCNO_EMIT_DATA (a)->mem_optimized_dest_p
2023 || (ALLOCNO_MEMORY_COST (a)
2024 - ALLOCNO_CLASS_COST (a)) < 0);
2025 ira_assert
2026 (hard_regno < 0
2027 || ira_hard_reg_in_set_p (hard_regno, ALLOCNO_MODE (a),
2028 reg_class_contents[ALLOCNO_CLASS (a)]));
2032 /* Evaluate overall allocation cost and the costs for using hard
2033 registers and memory for allocnos. */
2034 static void
2035 calculate_allocation_cost (void)
2037 int hard_regno, cost;
2038 ira_allocno_t a;
2039 ira_allocno_iterator ai;
2041 ira_overall_cost = ira_reg_cost = ira_mem_cost = 0;
2042 FOR_EACH_ALLOCNO (a, ai)
2044 hard_regno = ALLOCNO_HARD_REGNO (a);
2045 ira_assert (hard_regno < 0
2046 || (ira_hard_reg_in_set_p
2047 (hard_regno, ALLOCNO_MODE (a),
2048 reg_class_contents[ALLOCNO_CLASS (a)])));
2049 if (hard_regno < 0)
2051 cost = ALLOCNO_MEMORY_COST (a);
2052 ira_mem_cost += cost;
2054 else if (ALLOCNO_HARD_REG_COSTS (a) != NULL)
2056 cost = (ALLOCNO_HARD_REG_COSTS (a)
2057 [ira_class_hard_reg_index
2058 [ALLOCNO_CLASS (a)][hard_regno]]);
2059 ira_reg_cost += cost;
2061 else
2063 cost = ALLOCNO_CLASS_COST (a);
2064 ira_reg_cost += cost;
2066 ira_overall_cost += cost;
2069 if (internal_flag_ira_verbose > 0 && ira_dump_file != NULL)
2071 fprintf (ira_dump_file,
2072 "+++Costs: overall %d, reg %d, mem %d, ld %d, st %d, move %d\n",
2073 ira_overall_cost, ira_reg_cost, ira_mem_cost,
2074 ira_load_cost, ira_store_cost, ira_shuffle_cost);
2075 fprintf (ira_dump_file, "+++ move loops %d, new jumps %d\n",
2076 ira_move_loops_num, ira_additional_jumps_num);
2081 #ifdef ENABLE_IRA_CHECKING
2082 /* Check the correctness of the allocation. We do need this because
2083 of complicated code to transform more one region internal
2084 representation into one region representation. */
2085 static void
2086 check_allocation (void)
2088 ira_allocno_t a;
2089 int hard_regno, nregs, conflict_nregs;
2090 ira_allocno_iterator ai;
2092 FOR_EACH_ALLOCNO (a, ai)
2094 int n = ALLOCNO_NUM_OBJECTS (a);
2095 int i;
2097 if (ALLOCNO_CAP_MEMBER (a) != NULL
2098 || (hard_regno = ALLOCNO_HARD_REGNO (a)) < 0)
2099 continue;
2100 nregs = hard_regno_nregs[hard_regno][ALLOCNO_MODE (a)];
2101 if (nregs == 1)
2102 /* We allocated a single hard register. */
2103 n = 1;
2104 else if (n > 1)
2105 /* We allocated multiple hard registers, and we will test
2106 conflicts in a granularity of single hard regs. */
2107 nregs = 1;
2109 for (i = 0; i < n; i++)
2111 ira_object_t obj = ALLOCNO_OBJECT (a, i);
2112 ira_object_t conflict_obj;
2113 ira_object_conflict_iterator oci;
2114 int this_regno = hard_regno;
2115 if (n > 1)
2117 if (REG_WORDS_BIG_ENDIAN)
2118 this_regno += n - i - 1;
2119 else
2120 this_regno += i;
2122 FOR_EACH_OBJECT_CONFLICT (obj, conflict_obj, oci)
2124 ira_allocno_t conflict_a = OBJECT_ALLOCNO (conflict_obj);
2125 int conflict_hard_regno = ALLOCNO_HARD_REGNO (conflict_a);
2126 if (conflict_hard_regno < 0)
2127 continue;
2129 conflict_nregs
2130 = (hard_regno_nregs
2131 [conflict_hard_regno][ALLOCNO_MODE (conflict_a)]);
2133 if (ALLOCNO_NUM_OBJECTS (conflict_a) > 1
2134 && conflict_nregs == ALLOCNO_NUM_OBJECTS (conflict_a))
2136 if (REG_WORDS_BIG_ENDIAN)
2137 conflict_hard_regno += (ALLOCNO_NUM_OBJECTS (conflict_a)
2138 - OBJECT_SUBWORD (conflict_obj) - 1);
2139 else
2140 conflict_hard_regno += OBJECT_SUBWORD (conflict_obj);
2141 conflict_nregs = 1;
2144 if ((conflict_hard_regno <= this_regno
2145 && this_regno < conflict_hard_regno + conflict_nregs)
2146 || (this_regno <= conflict_hard_regno
2147 && conflict_hard_regno < this_regno + nregs))
2149 fprintf (stderr, "bad allocation for %d and %d\n",
2150 ALLOCNO_REGNO (a), ALLOCNO_REGNO (conflict_a));
2151 gcc_unreachable ();
2157 #endif
2159 /* Allocate REG_EQUIV_INIT. Set up it from IRA_REG_EQUIV which should
2160 be already calculated. */
2161 static void
2162 setup_reg_equiv_init (void)
2164 int i;
2165 int max_regno = max_reg_num ();
2167 for (i = 0; i < max_regno; i++)
2168 reg_equiv_init (i) = ira_reg_equiv[i].init_insns;
2171 /* Update equiv regno from movement of FROM_REGNO to TO_REGNO. INSNS
2172 are insns which were generated for such movement. It is assumed
2173 that FROM_REGNO and TO_REGNO always have the same value at the
2174 point of any move containing such registers. This function is used
2175 to update equiv info for register shuffles on the region borders
2176 and for caller save/restore insns. */
2177 void
2178 ira_update_equiv_info_by_shuffle_insn (int to_regno, int from_regno, rtx insns)
2180 rtx insn, x, note;
2182 if (! ira_reg_equiv[from_regno].defined_p
2183 && (! ira_reg_equiv[to_regno].defined_p
2184 || ((x = ira_reg_equiv[to_regno].memory) != NULL_RTX
2185 && ! MEM_READONLY_P (x))))
2186 return;
2187 insn = insns;
2188 if (NEXT_INSN (insn) != NULL_RTX)
2190 if (! ira_reg_equiv[to_regno].defined_p)
2192 ira_assert (ira_reg_equiv[to_regno].init_insns == NULL_RTX);
2193 return;
2195 ira_reg_equiv[to_regno].defined_p = false;
2196 ira_reg_equiv[to_regno].memory
2197 = ira_reg_equiv[to_regno].constant
2198 = ira_reg_equiv[to_regno].invariant
2199 = ira_reg_equiv[to_regno].init_insns = NULL_RTX;
2200 if (internal_flag_ira_verbose > 3 && ira_dump_file != NULL)
2201 fprintf (ira_dump_file,
2202 " Invalidating equiv info for reg %d\n", to_regno);
2203 return;
2205 /* It is possible that FROM_REGNO still has no equivalence because
2206 in shuffles to_regno<-from_regno and from_regno<-to_regno the 2nd
2207 insn was not processed yet. */
2208 if (ira_reg_equiv[from_regno].defined_p)
2210 ira_reg_equiv[to_regno].defined_p = true;
2211 if ((x = ira_reg_equiv[from_regno].memory) != NULL_RTX)
2213 ira_assert (ira_reg_equiv[from_regno].invariant == NULL_RTX
2214 && ira_reg_equiv[from_regno].constant == NULL_RTX);
2215 ira_assert (ira_reg_equiv[to_regno].memory == NULL_RTX
2216 || rtx_equal_p (ira_reg_equiv[to_regno].memory, x));
2217 ira_reg_equiv[to_regno].memory = x;
2218 if (! MEM_READONLY_P (x))
2219 /* We don't add the insn to insn init list because memory
2220 equivalence is just to say what memory is better to use
2221 when the pseudo is spilled. */
2222 return;
2224 else if ((x = ira_reg_equiv[from_regno].constant) != NULL_RTX)
2226 ira_assert (ira_reg_equiv[from_regno].invariant == NULL_RTX);
2227 ira_assert (ira_reg_equiv[to_regno].constant == NULL_RTX
2228 || rtx_equal_p (ira_reg_equiv[to_regno].constant, x));
2229 ira_reg_equiv[to_regno].constant = x;
2231 else
2233 x = ira_reg_equiv[from_regno].invariant;
2234 ira_assert (x != NULL_RTX);
2235 ira_assert (ira_reg_equiv[to_regno].invariant == NULL_RTX
2236 || rtx_equal_p (ira_reg_equiv[to_regno].invariant, x));
2237 ira_reg_equiv[to_regno].invariant = x;
2239 if (find_reg_note (insn, REG_EQUIV, x) == NULL_RTX)
2241 note = set_unique_reg_note (insn, REG_EQUIV, x);
2242 gcc_assert (note != NULL_RTX);
2243 if (internal_flag_ira_verbose > 3 && ira_dump_file != NULL)
2245 fprintf (ira_dump_file,
2246 " Adding equiv note to insn %u for reg %d ",
2247 INSN_UID (insn), to_regno);
2248 dump_value_slim (ira_dump_file, x, 1);
2249 fprintf (ira_dump_file, "\n");
2253 ira_reg_equiv[to_regno].init_insns
2254 = gen_rtx_INSN_LIST (VOIDmode, insn,
2255 ira_reg_equiv[to_regno].init_insns);
2256 if (internal_flag_ira_verbose > 3 && ira_dump_file != NULL)
2257 fprintf (ira_dump_file,
2258 " Adding equiv init move insn %u to reg %d\n",
2259 INSN_UID (insn), to_regno);
2262 /* Fix values of array REG_EQUIV_INIT after live range splitting done
2263 by IRA. */
2264 static void
2265 fix_reg_equiv_init (void)
2267 unsigned int max_regno = max_reg_num ();
2268 int i, new_regno, max;
2269 rtx x, prev, next, insn, set;
2271 if (vec_safe_length (reg_equivs) < max_regno)
2273 max = vec_safe_length (reg_equivs);
2274 grow_reg_equivs ();
2275 for (i = FIRST_PSEUDO_REGISTER; i < max; i++)
2276 for (prev = NULL_RTX, x = reg_equiv_init (i);
2277 x != NULL_RTX;
2278 x = next)
2280 next = XEXP (x, 1);
2281 insn = XEXP (x, 0);
2282 set = single_set (insn);
2283 ira_assert (set != NULL_RTX
2284 && (REG_P (SET_DEST (set)) || REG_P (SET_SRC (set))));
2285 if (REG_P (SET_DEST (set))
2286 && ((int) REGNO (SET_DEST (set)) == i
2287 || (int) ORIGINAL_REGNO (SET_DEST (set)) == i))
2288 new_regno = REGNO (SET_DEST (set));
2289 else if (REG_P (SET_SRC (set))
2290 && ((int) REGNO (SET_SRC (set)) == i
2291 || (int) ORIGINAL_REGNO (SET_SRC (set)) == i))
2292 new_regno = REGNO (SET_SRC (set));
2293 else
2294 gcc_unreachable ();
2295 if (new_regno == i)
2296 prev = x;
2297 else
2299 /* Remove the wrong list element. */
2300 if (prev == NULL_RTX)
2301 reg_equiv_init (i) = next;
2302 else
2303 XEXP (prev, 1) = next;
2304 XEXP (x, 1) = reg_equiv_init (new_regno);
2305 reg_equiv_init (new_regno) = x;
2311 #ifdef ENABLE_IRA_CHECKING
2312 /* Print redundant memory-memory copies. */
2313 static void
2314 print_redundant_copies (void)
2316 int hard_regno;
2317 ira_allocno_t a;
2318 ira_copy_t cp, next_cp;
2319 ira_allocno_iterator ai;
2321 FOR_EACH_ALLOCNO (a, ai)
2323 if (ALLOCNO_CAP_MEMBER (a) != NULL)
2324 /* It is a cap. */
2325 continue;
2326 hard_regno = ALLOCNO_HARD_REGNO (a);
2327 if (hard_regno >= 0)
2328 continue;
2329 for (cp = ALLOCNO_COPIES (a); cp != NULL; cp = next_cp)
2330 if (cp->first == a)
2331 next_cp = cp->next_first_allocno_copy;
2332 else
2334 next_cp = cp->next_second_allocno_copy;
2335 if (internal_flag_ira_verbose > 4 && ira_dump_file != NULL
2336 && cp->insn != NULL_RTX
2337 && ALLOCNO_HARD_REGNO (cp->first) == hard_regno)
2338 fprintf (ira_dump_file,
2339 " Redundant move from %d(freq %d):%d\n",
2340 INSN_UID (cp->insn), cp->freq, hard_regno);
2344 #endif
2346 /* Setup preferred and alternative classes for new pseudo-registers
2347 created by IRA starting with START. */
2348 static void
2349 setup_preferred_alternate_classes_for_new_pseudos (int start)
2351 int i, old_regno;
2352 int max_regno = max_reg_num ();
2354 for (i = start; i < max_regno; i++)
2356 old_regno = ORIGINAL_REGNO (regno_reg_rtx[i]);
2357 ira_assert (i != old_regno);
2358 setup_reg_classes (i, reg_preferred_class (old_regno),
2359 reg_alternate_class (old_regno),
2360 reg_allocno_class (old_regno));
2361 if (internal_flag_ira_verbose > 2 && ira_dump_file != NULL)
2362 fprintf (ira_dump_file,
2363 " New r%d: setting preferred %s, alternative %s\n",
2364 i, reg_class_names[reg_preferred_class (old_regno)],
2365 reg_class_names[reg_alternate_class (old_regno)]);
2370 /* The number of entries allocated in teg_info. */
2371 static int allocated_reg_info_size;
2373 /* Regional allocation can create new pseudo-registers. This function
2374 expands some arrays for pseudo-registers. */
2375 static void
2376 expand_reg_info (void)
2378 int i;
2379 int size = max_reg_num ();
2381 resize_reg_info ();
2382 for (i = allocated_reg_info_size; i < size; i++)
2383 setup_reg_classes (i, GENERAL_REGS, ALL_REGS, GENERAL_REGS);
2384 setup_preferred_alternate_classes_for_new_pseudos (allocated_reg_info_size);
2385 allocated_reg_info_size = size;
2388 /* Return TRUE if there is too high register pressure in the function.
2389 It is used to decide when stack slot sharing is worth to do. */
2390 static bool
2391 too_high_register_pressure_p (void)
2393 int i;
2394 enum reg_class pclass;
2396 for (i = 0; i < ira_pressure_classes_num; i++)
2398 pclass = ira_pressure_classes[i];
2399 if (ira_loop_tree_root->reg_pressure[pclass] > 10000)
2400 return true;
2402 return false;
2407 /* Indicate that hard register number FROM was eliminated and replaced with
2408 an offset from hard register number TO. The status of hard registers live
2409 at the start of a basic block is updated by replacing a use of FROM with
2410 a use of TO. */
2412 void
2413 mark_elimination (int from, int to)
2415 basic_block bb;
2416 bitmap r;
2418 FOR_EACH_BB (bb)
2420 r = DF_LR_IN (bb);
2421 if (bitmap_bit_p (r, from))
2423 bitmap_clear_bit (r, from);
2424 bitmap_set_bit (r, to);
2426 if (! df_live)
2427 continue;
2428 r = DF_LIVE_IN (bb);
2429 if (bitmap_bit_p (r, from))
2431 bitmap_clear_bit (r, from);
2432 bitmap_set_bit (r, to);
2439 /* The length of the following array. */
2440 int ira_reg_equiv_len;
2442 /* Info about equiv. info for each register. */
2443 struct ira_reg_equiv *ira_reg_equiv;
2445 /* Expand ira_reg_equiv if necessary. */
2446 void
2447 ira_expand_reg_equiv (void)
2449 int old = ira_reg_equiv_len;
2451 if (ira_reg_equiv_len > max_reg_num ())
2452 return;
2453 ira_reg_equiv_len = max_reg_num () * 3 / 2 + 1;
2454 ira_reg_equiv
2455 = (struct ira_reg_equiv *) xrealloc (ira_reg_equiv,
2456 ira_reg_equiv_len
2457 * sizeof (struct ira_reg_equiv));
2458 gcc_assert (old < ira_reg_equiv_len);
2459 memset (ira_reg_equiv + old, 0,
2460 sizeof (struct ira_reg_equiv) * (ira_reg_equiv_len - old));
2463 static void
2464 init_reg_equiv (void)
2466 ira_reg_equiv_len = 0;
2467 ira_reg_equiv = NULL;
2468 ira_expand_reg_equiv ();
2471 static void
2472 finish_reg_equiv (void)
2474 free (ira_reg_equiv);
2479 struct equivalence
2481 /* Set when a REG_EQUIV note is found or created. Use to
2482 keep track of what memory accesses might be created later,
2483 e.g. by reload. */
2484 rtx replacement;
2485 rtx *src_p;
2486 /* The list of each instruction which initializes this register. */
2487 rtx init_insns;
2488 /* Loop depth is used to recognize equivalences which appear
2489 to be present within the same loop (or in an inner loop). */
2490 int loop_depth;
2491 /* Nonzero if this had a preexisting REG_EQUIV note. */
2492 int is_arg_equivalence;
2493 /* Set when an attempt should be made to replace a register
2494 with the associated src_p entry. */
2495 char replace;
2498 /* reg_equiv[N] (where N is a pseudo reg number) is the equivalence
2499 structure for that register. */
2500 static struct equivalence *reg_equiv;
2502 /* Used for communication between the following two functions: contains
2503 a MEM that we wish to ensure remains unchanged. */
2504 static rtx equiv_mem;
2506 /* Set nonzero if EQUIV_MEM is modified. */
2507 static int equiv_mem_modified;
2509 /* If EQUIV_MEM is modified by modifying DEST, indicate that it is modified.
2510 Called via note_stores. */
2511 static void
2512 validate_equiv_mem_from_store (rtx dest, const_rtx set ATTRIBUTE_UNUSED,
2513 void *data ATTRIBUTE_UNUSED)
2515 if ((REG_P (dest)
2516 && reg_overlap_mentioned_p (dest, equiv_mem))
2517 || (MEM_P (dest)
2518 && true_dependence (dest, VOIDmode, equiv_mem)))
2519 equiv_mem_modified = 1;
2522 /* Verify that no store between START and the death of REG invalidates
2523 MEMREF. MEMREF is invalidated by modifying a register used in MEMREF,
2524 by storing into an overlapping memory location, or with a non-const
2525 CALL_INSN.
2527 Return 1 if MEMREF remains valid. */
2528 static int
2529 validate_equiv_mem (rtx start, rtx reg, rtx memref)
2531 rtx insn;
2532 rtx note;
2534 equiv_mem = memref;
2535 equiv_mem_modified = 0;
2537 /* If the memory reference has side effects or is volatile, it isn't a
2538 valid equivalence. */
2539 if (side_effects_p (memref))
2540 return 0;
2542 for (insn = start; insn && ! equiv_mem_modified; insn = NEXT_INSN (insn))
2544 if (! INSN_P (insn))
2545 continue;
2547 if (find_reg_note (insn, REG_DEAD, reg))
2548 return 1;
2550 /* This used to ignore readonly memory and const/pure calls. The problem
2551 is the equivalent form may reference a pseudo which gets assigned a
2552 call clobbered hard reg. When we later replace REG with its
2553 equivalent form, the value in the call-clobbered reg has been
2554 changed and all hell breaks loose. */
2555 if (CALL_P (insn))
2556 return 0;
2558 note_stores (PATTERN (insn), validate_equiv_mem_from_store, NULL);
2560 /* If a register mentioned in MEMREF is modified via an
2561 auto-increment, we lose the equivalence. Do the same if one
2562 dies; although we could extend the life, it doesn't seem worth
2563 the trouble. */
2565 for (note = REG_NOTES (insn); note; note = XEXP (note, 1))
2566 if ((REG_NOTE_KIND (note) == REG_INC
2567 || REG_NOTE_KIND (note) == REG_DEAD)
2568 && REG_P (XEXP (note, 0))
2569 && reg_overlap_mentioned_p (XEXP (note, 0), memref))
2570 return 0;
2573 return 0;
2576 /* Returns zero if X is known to be invariant. */
2577 static int
2578 equiv_init_varies_p (rtx x)
2580 RTX_CODE code = GET_CODE (x);
2581 int i;
2582 const char *fmt;
2584 switch (code)
2586 case MEM:
2587 return !MEM_READONLY_P (x) || equiv_init_varies_p (XEXP (x, 0));
2589 case CONST:
2590 CASE_CONST_ANY:
2591 case SYMBOL_REF:
2592 case LABEL_REF:
2593 return 0;
2595 case REG:
2596 return reg_equiv[REGNO (x)].replace == 0 && rtx_varies_p (x, 0);
2598 case ASM_OPERANDS:
2599 if (MEM_VOLATILE_P (x))
2600 return 1;
2602 /* Fall through. */
2604 default:
2605 break;
2608 fmt = GET_RTX_FORMAT (code);
2609 for (i = GET_RTX_LENGTH (code) - 1; i >= 0; i--)
2610 if (fmt[i] == 'e')
2612 if (equiv_init_varies_p (XEXP (x, i)))
2613 return 1;
2615 else if (fmt[i] == 'E')
2617 int j;
2618 for (j = 0; j < XVECLEN (x, i); j++)
2619 if (equiv_init_varies_p (XVECEXP (x, i, j)))
2620 return 1;
2623 return 0;
2626 /* Returns nonzero if X (used to initialize register REGNO) is movable.
2627 X is only movable if the registers it uses have equivalent initializations
2628 which appear to be within the same loop (or in an inner loop) and movable
2629 or if they are not candidates for local_alloc and don't vary. */
2630 static int
2631 equiv_init_movable_p (rtx x, int regno)
2633 int i, j;
2634 const char *fmt;
2635 enum rtx_code code = GET_CODE (x);
2637 switch (code)
2639 case SET:
2640 return equiv_init_movable_p (SET_SRC (x), regno);
2642 case CC0:
2643 case CLOBBER:
2644 return 0;
2646 case PRE_INC:
2647 case PRE_DEC:
2648 case POST_INC:
2649 case POST_DEC:
2650 case PRE_MODIFY:
2651 case POST_MODIFY:
2652 return 0;
2654 case REG:
2655 return ((reg_equiv[REGNO (x)].loop_depth >= reg_equiv[regno].loop_depth
2656 && reg_equiv[REGNO (x)].replace)
2657 || (REG_BASIC_BLOCK (REGNO (x)) < NUM_FIXED_BLOCKS
2658 && ! rtx_varies_p (x, 0)));
2660 case UNSPEC_VOLATILE:
2661 return 0;
2663 case ASM_OPERANDS:
2664 if (MEM_VOLATILE_P (x))
2665 return 0;
2667 /* Fall through. */
2669 default:
2670 break;
2673 fmt = GET_RTX_FORMAT (code);
2674 for (i = GET_RTX_LENGTH (code) - 1; i >= 0; i--)
2675 switch (fmt[i])
2677 case 'e':
2678 if (! equiv_init_movable_p (XEXP (x, i), regno))
2679 return 0;
2680 break;
2681 case 'E':
2682 for (j = XVECLEN (x, i) - 1; j >= 0; j--)
2683 if (! equiv_init_movable_p (XVECEXP (x, i, j), regno))
2684 return 0;
2685 break;
2688 return 1;
2691 /* TRUE if X uses any registers for which reg_equiv[REGNO].replace is
2692 true. */
2693 static int
2694 contains_replace_regs (rtx x)
2696 int i, j;
2697 const char *fmt;
2698 enum rtx_code code = GET_CODE (x);
2700 switch (code)
2702 case CONST:
2703 case LABEL_REF:
2704 case SYMBOL_REF:
2705 CASE_CONST_ANY:
2706 case PC:
2707 case CC0:
2708 case HIGH:
2709 return 0;
2711 case REG:
2712 return reg_equiv[REGNO (x)].replace;
2714 default:
2715 break;
2718 fmt = GET_RTX_FORMAT (code);
2719 for (i = GET_RTX_LENGTH (code) - 1; i >= 0; i--)
2720 switch (fmt[i])
2722 case 'e':
2723 if (contains_replace_regs (XEXP (x, i)))
2724 return 1;
2725 break;
2726 case 'E':
2727 for (j = XVECLEN (x, i) - 1; j >= 0; j--)
2728 if (contains_replace_regs (XVECEXP (x, i, j)))
2729 return 1;
2730 break;
2733 return 0;
2736 /* TRUE if X references a memory location that would be affected by a store
2737 to MEMREF. */
2738 static int
2739 memref_referenced_p (rtx memref, rtx x)
2741 int i, j;
2742 const char *fmt;
2743 enum rtx_code code = GET_CODE (x);
2745 switch (code)
2747 case CONST:
2748 case LABEL_REF:
2749 case SYMBOL_REF:
2750 CASE_CONST_ANY:
2751 case PC:
2752 case CC0:
2753 case HIGH:
2754 case LO_SUM:
2755 return 0;
2757 case REG:
2758 return (reg_equiv[REGNO (x)].replacement
2759 && memref_referenced_p (memref,
2760 reg_equiv[REGNO (x)].replacement));
2762 case MEM:
2763 if (true_dependence (memref, VOIDmode, x))
2764 return 1;
2765 break;
2767 case SET:
2768 /* If we are setting a MEM, it doesn't count (its address does), but any
2769 other SET_DEST that has a MEM in it is referencing the MEM. */
2770 if (MEM_P (SET_DEST (x)))
2772 if (memref_referenced_p (memref, XEXP (SET_DEST (x), 0)))
2773 return 1;
2775 else if (memref_referenced_p (memref, SET_DEST (x)))
2776 return 1;
2778 return memref_referenced_p (memref, SET_SRC (x));
2780 default:
2781 break;
2784 fmt = GET_RTX_FORMAT (code);
2785 for (i = GET_RTX_LENGTH (code) - 1; i >= 0; i--)
2786 switch (fmt[i])
2788 case 'e':
2789 if (memref_referenced_p (memref, XEXP (x, i)))
2790 return 1;
2791 break;
2792 case 'E':
2793 for (j = XVECLEN (x, i) - 1; j >= 0; j--)
2794 if (memref_referenced_p (memref, XVECEXP (x, i, j)))
2795 return 1;
2796 break;
2799 return 0;
2802 /* TRUE if some insn in the range (START, END] references a memory location
2803 that would be affected by a store to MEMREF. */
2804 static int
2805 memref_used_between_p (rtx memref, rtx start, rtx end)
2807 rtx insn;
2809 for (insn = NEXT_INSN (start); insn != NEXT_INSN (end);
2810 insn = NEXT_INSN (insn))
2812 if (!NONDEBUG_INSN_P (insn))
2813 continue;
2815 if (memref_referenced_p (memref, PATTERN (insn)))
2816 return 1;
2818 /* Nonconst functions may access memory. */
2819 if (CALL_P (insn) && (! RTL_CONST_CALL_P (insn)))
2820 return 1;
2823 return 0;
2826 /* Mark REG as having no known equivalence.
2827 Some instructions might have been processed before and furnished
2828 with REG_EQUIV notes for this register; these notes will have to be
2829 removed.
2830 STORE is the piece of RTL that does the non-constant / conflicting
2831 assignment - a SET, CLOBBER or REG_INC note. It is currently not used,
2832 but needs to be there because this function is called from note_stores. */
2833 static void
2834 no_equiv (rtx reg, const_rtx store ATTRIBUTE_UNUSED,
2835 void *data ATTRIBUTE_UNUSED)
2837 int regno;
2838 rtx list;
2840 if (!REG_P (reg))
2841 return;
2842 regno = REGNO (reg);
2843 list = reg_equiv[regno].init_insns;
2844 if (list == const0_rtx)
2845 return;
2846 reg_equiv[regno].init_insns = const0_rtx;
2847 reg_equiv[regno].replacement = NULL_RTX;
2848 /* This doesn't matter for equivalences made for argument registers, we
2849 should keep their initialization insns. */
2850 if (reg_equiv[regno].is_arg_equivalence)
2851 return;
2852 ira_reg_equiv[regno].defined_p = false;
2853 ira_reg_equiv[regno].init_insns = NULL_RTX;
2854 for (; list; list = XEXP (list, 1))
2856 rtx insn = XEXP (list, 0);
2857 remove_note (insn, find_reg_note (insn, REG_EQUIV, NULL_RTX));
2861 /* In DEBUG_INSN location adjust REGs from CLEARED_REGS bitmap to the
2862 equivalent replacement. */
2864 static rtx
2865 adjust_cleared_regs (rtx loc, const_rtx old_rtx ATTRIBUTE_UNUSED, void *data)
2867 if (REG_P (loc))
2869 bitmap cleared_regs = (bitmap) data;
2870 if (bitmap_bit_p (cleared_regs, REGNO (loc)))
2871 return simplify_replace_fn_rtx (*reg_equiv[REGNO (loc)].src_p,
2872 NULL_RTX, adjust_cleared_regs, data);
2874 return NULL_RTX;
2877 /* Nonzero if we recorded an equivalence for a LABEL_REF. */
2878 static int recorded_label_ref;
2880 /* Find registers that are equivalent to a single value throughout the
2881 compilation (either because they can be referenced in memory or are
2882 set once from a single constant). Lower their priority for a
2883 register.
2885 If such a register is only referenced once, try substituting its
2886 value into the using insn. If it succeeds, we can eliminate the
2887 register completely.
2889 Initialize init_insns in ira_reg_equiv array.
2891 Return non-zero if jump label rebuilding should be done. */
2892 static int
2893 update_equiv_regs (void)
2895 rtx insn;
2896 basic_block bb;
2897 int loop_depth;
2898 bitmap cleared_regs;
2900 /* We need to keep track of whether or not we recorded a LABEL_REF so
2901 that we know if the jump optimizer needs to be rerun. */
2902 recorded_label_ref = 0;
2904 reg_equiv = XCNEWVEC (struct equivalence, max_regno);
2905 grow_reg_equivs ();
2907 init_alias_analysis ();
2909 /* Scan the insns and find which registers have equivalences. Do this
2910 in a separate scan of the insns because (due to -fcse-follow-jumps)
2911 a register can be set below its use. */
2912 FOR_EACH_BB (bb)
2914 loop_depth = bb_loop_depth (bb);
2916 for (insn = BB_HEAD (bb);
2917 insn != NEXT_INSN (BB_END (bb));
2918 insn = NEXT_INSN (insn))
2920 rtx note;
2921 rtx set;
2922 rtx dest, src;
2923 int regno;
2925 if (! INSN_P (insn))
2926 continue;
2928 for (note = REG_NOTES (insn); note; note = XEXP (note, 1))
2929 if (REG_NOTE_KIND (note) == REG_INC)
2930 no_equiv (XEXP (note, 0), note, NULL);
2932 set = single_set (insn);
2934 /* If this insn contains more (or less) than a single SET,
2935 only mark all destinations as having no known equivalence. */
2936 if (set == 0)
2938 note_stores (PATTERN (insn), no_equiv, NULL);
2939 continue;
2941 else if (GET_CODE (PATTERN (insn)) == PARALLEL)
2943 int i;
2945 for (i = XVECLEN (PATTERN (insn), 0) - 1; i >= 0; i--)
2947 rtx part = XVECEXP (PATTERN (insn), 0, i);
2948 if (part != set)
2949 note_stores (part, no_equiv, NULL);
2953 dest = SET_DEST (set);
2954 src = SET_SRC (set);
2956 /* See if this is setting up the equivalence between an argument
2957 register and its stack slot. */
2958 note = find_reg_note (insn, REG_EQUIV, NULL_RTX);
2959 if (note)
2961 gcc_assert (REG_P (dest));
2962 regno = REGNO (dest);
2964 /* Note that we don't want to clear init_insns in
2965 ira_reg_equiv even if there are multiple sets of this
2966 register. */
2967 reg_equiv[regno].is_arg_equivalence = 1;
2969 /* Record for reload that this is an equivalencing insn. */
2970 if (rtx_equal_p (src, XEXP (note, 0)))
2971 ira_reg_equiv[regno].init_insns
2972 = gen_rtx_INSN_LIST (VOIDmode, insn,
2973 ira_reg_equiv[regno].init_insns);
2975 /* Continue normally in case this is a candidate for
2976 replacements. */
2979 if (!optimize)
2980 continue;
2982 /* We only handle the case of a pseudo register being set
2983 once, or always to the same value. */
2984 /* ??? The mn10200 port breaks if we add equivalences for
2985 values that need an ADDRESS_REGS register and set them equivalent
2986 to a MEM of a pseudo. The actual problem is in the over-conservative
2987 handling of INPADDR_ADDRESS / INPUT_ADDRESS / INPUT triples in
2988 calculate_needs, but we traditionally work around this problem
2989 here by rejecting equivalences when the destination is in a register
2990 that's likely spilled. This is fragile, of course, since the
2991 preferred class of a pseudo depends on all instructions that set
2992 or use it. */
2994 if (!REG_P (dest)
2995 || (regno = REGNO (dest)) < FIRST_PSEUDO_REGISTER
2996 || reg_equiv[regno].init_insns == const0_rtx
2997 || (targetm.class_likely_spilled_p (reg_preferred_class (regno))
2998 && MEM_P (src) && ! reg_equiv[regno].is_arg_equivalence))
3000 /* This might be setting a SUBREG of a pseudo, a pseudo that is
3001 also set somewhere else to a constant. */
3002 note_stores (set, no_equiv, NULL);
3003 continue;
3006 note = find_reg_note (insn, REG_EQUAL, NULL_RTX);
3008 /* cse sometimes generates function invariants, but doesn't put a
3009 REG_EQUAL note on the insn. Since this note would be redundant,
3010 there's no point creating it earlier than here. */
3011 if (! note && ! rtx_varies_p (src, 0))
3012 note = set_unique_reg_note (insn, REG_EQUAL, copy_rtx (src));
3014 /* Don't bother considering a REG_EQUAL note containing an EXPR_LIST
3015 since it represents a function call */
3016 if (note && GET_CODE (XEXP (note, 0)) == EXPR_LIST)
3017 note = NULL_RTX;
3019 if (DF_REG_DEF_COUNT (regno) != 1
3020 && (! note
3021 || rtx_varies_p (XEXP (note, 0), 0)
3022 || (reg_equiv[regno].replacement
3023 && ! rtx_equal_p (XEXP (note, 0),
3024 reg_equiv[regno].replacement))))
3026 no_equiv (dest, set, NULL);
3027 continue;
3029 /* Record this insn as initializing this register. */
3030 reg_equiv[regno].init_insns
3031 = gen_rtx_INSN_LIST (VOIDmode, insn, reg_equiv[regno].init_insns);
3033 /* If this register is known to be equal to a constant, record that
3034 it is always equivalent to the constant. */
3035 if (DF_REG_DEF_COUNT (regno) == 1
3036 && note && ! rtx_varies_p (XEXP (note, 0), 0))
3038 rtx note_value = XEXP (note, 0);
3039 remove_note (insn, note);
3040 set_unique_reg_note (insn, REG_EQUIV, note_value);
3043 /* If this insn introduces a "constant" register, decrease the priority
3044 of that register. Record this insn if the register is only used once
3045 more and the equivalence value is the same as our source.
3047 The latter condition is checked for two reasons: First, it is an
3048 indication that it may be more efficient to actually emit the insn
3049 as written (if no registers are available, reload will substitute
3050 the equivalence). Secondly, it avoids problems with any registers
3051 dying in this insn whose death notes would be missed.
3053 If we don't have a REG_EQUIV note, see if this insn is loading
3054 a register used only in one basic block from a MEM. If so, and the
3055 MEM remains unchanged for the life of the register, add a REG_EQUIV
3056 note. */
3058 note = find_reg_note (insn, REG_EQUIV, NULL_RTX);
3060 if (note == 0 && REG_BASIC_BLOCK (regno) >= NUM_FIXED_BLOCKS
3061 && MEM_P (SET_SRC (set))
3062 && validate_equiv_mem (insn, dest, SET_SRC (set)))
3063 note = set_unique_reg_note (insn, REG_EQUIV, copy_rtx (SET_SRC (set)));
3065 if (note)
3067 int regno = REGNO (dest);
3068 rtx x = XEXP (note, 0);
3070 /* If we haven't done so, record for reload that this is an
3071 equivalencing insn. */
3072 if (!reg_equiv[regno].is_arg_equivalence)
3073 ira_reg_equiv[regno].init_insns
3074 = gen_rtx_INSN_LIST (VOIDmode, insn,
3075 ira_reg_equiv[regno].init_insns);
3077 /* Record whether or not we created a REG_EQUIV note for a LABEL_REF.
3078 We might end up substituting the LABEL_REF for uses of the
3079 pseudo here or later. That kind of transformation may turn an
3080 indirect jump into a direct jump, in which case we must rerun the
3081 jump optimizer to ensure that the JUMP_LABEL fields are valid. */
3082 if (GET_CODE (x) == LABEL_REF
3083 || (GET_CODE (x) == CONST
3084 && GET_CODE (XEXP (x, 0)) == PLUS
3085 && (GET_CODE (XEXP (XEXP (x, 0), 0)) == LABEL_REF)))
3086 recorded_label_ref = 1;
3088 reg_equiv[regno].replacement = x;
3089 reg_equiv[regno].src_p = &SET_SRC (set);
3090 reg_equiv[regno].loop_depth = loop_depth;
3092 /* Don't mess with things live during setjmp. */
3093 if (REG_LIVE_LENGTH (regno) >= 0 && optimize)
3095 /* Note that the statement below does not affect the priority
3096 in local-alloc! */
3097 REG_LIVE_LENGTH (regno) *= 2;
3099 /* If the register is referenced exactly twice, meaning it is
3100 set once and used once, indicate that the reference may be
3101 replaced by the equivalence we computed above. Do this
3102 even if the register is only used in one block so that
3103 dependencies can be handled where the last register is
3104 used in a different block (i.e. HIGH / LO_SUM sequences)
3105 and to reduce the number of registers alive across
3106 calls. */
3108 if (REG_N_REFS (regno) == 2
3109 && (rtx_equal_p (x, src)
3110 || ! equiv_init_varies_p (src))
3111 && NONJUMP_INSN_P (insn)
3112 && equiv_init_movable_p (PATTERN (insn), regno))
3113 reg_equiv[regno].replace = 1;
3119 if (!optimize)
3120 goto out;
3122 /* A second pass, to gather additional equivalences with memory. This needs
3123 to be done after we know which registers we are going to replace. */
3125 for (insn = get_insns (); insn; insn = NEXT_INSN (insn))
3127 rtx set, src, dest;
3128 unsigned regno;
3130 if (! INSN_P (insn))
3131 continue;
3133 set = single_set (insn);
3134 if (! set)
3135 continue;
3137 dest = SET_DEST (set);
3138 src = SET_SRC (set);
3140 /* If this sets a MEM to the contents of a REG that is only used
3141 in a single basic block, see if the register is always equivalent
3142 to that memory location and if moving the store from INSN to the
3143 insn that set REG is safe. If so, put a REG_EQUIV note on the
3144 initializing insn.
3146 Don't add a REG_EQUIV note if the insn already has one. The existing
3147 REG_EQUIV is likely more useful than the one we are adding.
3149 If one of the regs in the address has reg_equiv[REGNO].replace set,
3150 then we can't add this REG_EQUIV note. The reg_equiv[REGNO].replace
3151 optimization may move the set of this register immediately before
3152 insn, which puts it after reg_equiv[REGNO].init_insns, and hence
3153 the mention in the REG_EQUIV note would be to an uninitialized
3154 pseudo. */
3156 if (MEM_P (dest) && REG_P (src)
3157 && (regno = REGNO (src)) >= FIRST_PSEUDO_REGISTER
3158 && REG_BASIC_BLOCK (regno) >= NUM_FIXED_BLOCKS
3159 && DF_REG_DEF_COUNT (regno) == 1
3160 && reg_equiv[regno].init_insns != 0
3161 && reg_equiv[regno].init_insns != const0_rtx
3162 && ! find_reg_note (XEXP (reg_equiv[regno].init_insns, 0),
3163 REG_EQUIV, NULL_RTX)
3164 && ! contains_replace_regs (XEXP (dest, 0)))
3166 rtx init_insn = XEXP (reg_equiv[regno].init_insns, 0);
3167 if (validate_equiv_mem (init_insn, src, dest)
3168 && ! memref_used_between_p (dest, init_insn, insn)
3169 /* Attaching a REG_EQUIV note will fail if INIT_INSN has
3170 multiple sets. */
3171 && set_unique_reg_note (init_insn, REG_EQUIV, copy_rtx (dest)))
3173 /* This insn makes the equivalence, not the one initializing
3174 the register. */
3175 ira_reg_equiv[regno].init_insns
3176 = gen_rtx_INSN_LIST (VOIDmode, insn, NULL_RTX);
3177 df_notes_rescan (init_insn);
3182 cleared_regs = BITMAP_ALLOC (NULL);
3183 /* Now scan all regs killed in an insn to see if any of them are
3184 registers only used that once. If so, see if we can replace the
3185 reference with the equivalent form. If we can, delete the
3186 initializing reference and this register will go away. If we
3187 can't replace the reference, and the initializing reference is
3188 within the same loop (or in an inner loop), then move the register
3189 initialization just before the use, so that they are in the same
3190 basic block. */
3191 FOR_EACH_BB_REVERSE (bb)
3193 loop_depth = bb_loop_depth (bb);
3194 for (insn = BB_END (bb);
3195 insn != PREV_INSN (BB_HEAD (bb));
3196 insn = PREV_INSN (insn))
3198 rtx link;
3200 if (! INSN_P (insn))
3201 continue;
3203 /* Don't substitute into a non-local goto, this confuses CFG. */
3204 if (JUMP_P (insn)
3205 && find_reg_note (insn, REG_NON_LOCAL_GOTO, NULL_RTX))
3206 continue;
3208 for (link = REG_NOTES (insn); link; link = XEXP (link, 1))
3210 if (REG_NOTE_KIND (link) == REG_DEAD
3211 /* Make sure this insn still refers to the register. */
3212 && reg_mentioned_p (XEXP (link, 0), PATTERN (insn)))
3214 int regno = REGNO (XEXP (link, 0));
3215 rtx equiv_insn;
3217 if (! reg_equiv[regno].replace
3218 || reg_equiv[regno].loop_depth < loop_depth
3219 /* There is no sense to move insns if we did
3220 register pressure-sensitive scheduling was
3221 done because it will not improve allocation
3222 but worsen insn schedule with a big
3223 probability. */
3224 || (flag_sched_pressure && flag_schedule_insns))
3225 continue;
3227 /* reg_equiv[REGNO].replace gets set only when
3228 REG_N_REFS[REGNO] is 2, i.e. the register is set
3229 once and used once. (If it were only set, but
3230 not used, flow would have deleted the setting
3231 insns.) Hence there can only be one insn in
3232 reg_equiv[REGNO].init_insns. */
3233 gcc_assert (reg_equiv[regno].init_insns
3234 && !XEXP (reg_equiv[regno].init_insns, 1));
3235 equiv_insn = XEXP (reg_equiv[regno].init_insns, 0);
3237 /* We may not move instructions that can throw, since
3238 that changes basic block boundaries and we are not
3239 prepared to adjust the CFG to match. */
3240 if (can_throw_internal (equiv_insn))
3241 continue;
3243 if (asm_noperands (PATTERN (equiv_insn)) < 0
3244 && validate_replace_rtx (regno_reg_rtx[regno],
3245 *(reg_equiv[regno].src_p), insn))
3247 rtx equiv_link;
3248 rtx last_link;
3249 rtx note;
3251 /* Find the last note. */
3252 for (last_link = link; XEXP (last_link, 1);
3253 last_link = XEXP (last_link, 1))
3256 /* Append the REG_DEAD notes from equiv_insn. */
3257 equiv_link = REG_NOTES (equiv_insn);
3258 while (equiv_link)
3260 note = equiv_link;
3261 equiv_link = XEXP (equiv_link, 1);
3262 if (REG_NOTE_KIND (note) == REG_DEAD)
3264 remove_note (equiv_insn, note);
3265 XEXP (last_link, 1) = note;
3266 XEXP (note, 1) = NULL_RTX;
3267 last_link = note;
3271 remove_death (regno, insn);
3272 SET_REG_N_REFS (regno, 0);
3273 REG_FREQ (regno) = 0;
3274 delete_insn (equiv_insn);
3276 reg_equiv[regno].init_insns
3277 = XEXP (reg_equiv[regno].init_insns, 1);
3279 ira_reg_equiv[regno].init_insns = NULL_RTX;
3280 bitmap_set_bit (cleared_regs, regno);
3282 /* Move the initialization of the register to just before
3283 INSN. Update the flow information. */
3284 else if (prev_nondebug_insn (insn) != equiv_insn)
3286 rtx new_insn;
3288 new_insn = emit_insn_before (PATTERN (equiv_insn), insn);
3289 REG_NOTES (new_insn) = REG_NOTES (equiv_insn);
3290 REG_NOTES (equiv_insn) = 0;
3291 /* Rescan it to process the notes. */
3292 df_insn_rescan (new_insn);
3294 /* Make sure this insn is recognized before
3295 reload begins, otherwise
3296 eliminate_regs_in_insn will die. */
3297 INSN_CODE (new_insn) = INSN_CODE (equiv_insn);
3299 delete_insn (equiv_insn);
3301 XEXP (reg_equiv[regno].init_insns, 0) = new_insn;
3303 REG_BASIC_BLOCK (regno) = bb->index;
3304 REG_N_CALLS_CROSSED (regno) = 0;
3305 REG_FREQ_CALLS_CROSSED (regno) = 0;
3306 REG_N_THROWING_CALLS_CROSSED (regno) = 0;
3307 REG_LIVE_LENGTH (regno) = 2;
3309 if (insn == BB_HEAD (bb))
3310 BB_HEAD (bb) = PREV_INSN (insn);
3312 ira_reg_equiv[regno].init_insns
3313 = gen_rtx_INSN_LIST (VOIDmode, new_insn, NULL_RTX);
3314 bitmap_set_bit (cleared_regs, regno);
3321 if (!bitmap_empty_p (cleared_regs))
3323 FOR_EACH_BB (bb)
3325 bitmap_and_compl_into (DF_LR_IN (bb), cleared_regs);
3326 bitmap_and_compl_into (DF_LR_OUT (bb), cleared_regs);
3327 if (! df_live)
3328 continue;
3329 bitmap_and_compl_into (DF_LIVE_IN (bb), cleared_regs);
3330 bitmap_and_compl_into (DF_LIVE_OUT (bb), cleared_regs);
3333 /* Last pass - adjust debug insns referencing cleared regs. */
3334 if (MAY_HAVE_DEBUG_INSNS)
3335 for (insn = get_insns (); insn; insn = NEXT_INSN (insn))
3336 if (DEBUG_INSN_P (insn))
3338 rtx old_loc = INSN_VAR_LOCATION_LOC (insn);
3339 INSN_VAR_LOCATION_LOC (insn)
3340 = simplify_replace_fn_rtx (old_loc, NULL_RTX,
3341 adjust_cleared_regs,
3342 (void *) cleared_regs);
3343 if (old_loc != INSN_VAR_LOCATION_LOC (insn))
3344 df_insn_rescan (insn);
3348 BITMAP_FREE (cleared_regs);
3350 out:
3351 /* Clean up. */
3353 end_alias_analysis ();
3354 free (reg_equiv);
3355 return recorded_label_ref;
3360 /* Set up fields memory, constant, and invariant from init_insns in
3361 the structures of array ira_reg_equiv. */
3362 static void
3363 setup_reg_equiv (void)
3365 int i;
3366 rtx elem, insn, set, x;
3368 for (i = FIRST_PSEUDO_REGISTER; i < ira_reg_equiv_len; i++)
3369 for (elem = ira_reg_equiv[i].init_insns; elem; elem = XEXP (elem, 1))
3371 insn = XEXP (elem, 0);
3372 set = single_set (insn);
3374 /* Init insns can set up equivalence when the reg is a destination or
3375 a source (in this case the destination is memory). */
3376 if (set != 0 && (REG_P (SET_DEST (set)) || REG_P (SET_SRC (set))))
3378 if ((x = find_reg_note (insn, REG_EQUIV, NULL_RTX)) != NULL)
3379 x = XEXP (x, 0);
3380 else if (REG_P (SET_DEST (set))
3381 && REGNO (SET_DEST (set)) == (unsigned int) i)
3382 x = SET_SRC (set);
3383 else
3385 gcc_assert (REG_P (SET_SRC (set))
3386 && REGNO (SET_SRC (set)) == (unsigned int) i);
3387 x = SET_DEST (set);
3389 if (! function_invariant_p (x)
3390 || ! flag_pic
3391 /* A function invariant is often CONSTANT_P but may
3392 include a register. We promise to only pass
3393 CONSTANT_P objects to LEGITIMATE_PIC_OPERAND_P. */
3394 || (CONSTANT_P (x) && LEGITIMATE_PIC_OPERAND_P (x)))
3396 /* It can happen that a REG_EQUIV note contains a MEM
3397 that is not a legitimate memory operand. As later
3398 stages of reload assume that all addresses found in
3399 the lra_regno_equiv_* arrays were originally
3400 legitimate, we ignore such REG_EQUIV notes. */
3401 if (memory_operand (x, VOIDmode))
3403 ira_reg_equiv[i].defined_p = true;
3404 ira_reg_equiv[i].memory = x;
3405 continue;
3407 else if (function_invariant_p (x))
3409 enum machine_mode mode;
3411 mode = GET_MODE (SET_DEST (set));
3412 if (GET_CODE (x) == PLUS
3413 || x == frame_pointer_rtx || x == arg_pointer_rtx)
3414 /* This is PLUS of frame pointer and a constant,
3415 or fp, or argp. */
3416 ira_reg_equiv[i].invariant = x;
3417 else if (targetm.legitimate_constant_p (mode, x))
3418 ira_reg_equiv[i].constant = x;
3419 else
3421 ira_reg_equiv[i].memory = force_const_mem (mode, x);
3422 if (ira_reg_equiv[i].memory == NULL_RTX)
3424 ira_reg_equiv[i].defined_p = false;
3425 ira_reg_equiv[i].init_insns = NULL_RTX;
3426 break;
3429 ira_reg_equiv[i].defined_p = true;
3430 continue;
3434 ira_reg_equiv[i].defined_p = false;
3435 ira_reg_equiv[i].init_insns = NULL_RTX;
3436 break;
3442 /* Print chain C to FILE. */
3443 static void
3444 print_insn_chain (FILE *file, struct insn_chain *c)
3446 fprintf (file, "insn=%d, ", INSN_UID(c->insn));
3447 bitmap_print (file, &c->live_throughout, "live_throughout: ", ", ");
3448 bitmap_print (file, &c->dead_or_set, "dead_or_set: ", "\n");
3452 /* Print all reload_insn_chains to FILE. */
3453 static void
3454 print_insn_chains (FILE *file)
3456 struct insn_chain *c;
3457 for (c = reload_insn_chain; c ; c = c->next)
3458 print_insn_chain (file, c);
3461 /* Return true if pseudo REGNO should be added to set live_throughout
3462 or dead_or_set of the insn chains for reload consideration. */
3463 static bool
3464 pseudo_for_reload_consideration_p (int regno)
3466 /* Consider spilled pseudos too for IRA because they still have a
3467 chance to get hard-registers in the reload when IRA is used. */
3468 return (reg_renumber[regno] >= 0 || ira_conflicts_p);
3471 /* Init LIVE_SUBREGS[ALLOCNUM] and LIVE_SUBREGS_USED[ALLOCNUM] using
3472 REG to the number of nregs, and INIT_VALUE to get the
3473 initialization. ALLOCNUM need not be the regno of REG. */
3474 static void
3475 init_live_subregs (bool init_value, sbitmap *live_subregs,
3476 bitmap live_subregs_used, int allocnum, rtx reg)
3478 unsigned int regno = REGNO (SUBREG_REG (reg));
3479 int size = GET_MODE_SIZE (GET_MODE (regno_reg_rtx[regno]));
3481 gcc_assert (size > 0);
3483 /* Been there, done that. */
3484 if (bitmap_bit_p (live_subregs_used, allocnum))
3485 return;
3487 /* Create a new one. */
3488 if (live_subregs[allocnum] == NULL)
3489 live_subregs[allocnum] = sbitmap_alloc (size);
3491 /* If the entire reg was live before blasting into subregs, we need
3492 to init all of the subregs to ones else init to 0. */
3493 if (init_value)
3494 bitmap_ones (live_subregs[allocnum]);
3495 else
3496 bitmap_clear (live_subregs[allocnum]);
3498 bitmap_set_bit (live_subregs_used, allocnum);
3501 /* Walk the insns of the current function and build reload_insn_chain,
3502 and record register life information. */
3503 static void
3504 build_insn_chain (void)
3506 unsigned int i;
3507 struct insn_chain **p = &reload_insn_chain;
3508 basic_block bb;
3509 struct insn_chain *c = NULL;
3510 struct insn_chain *next = NULL;
3511 bitmap live_relevant_regs = BITMAP_ALLOC (NULL);
3512 bitmap elim_regset = BITMAP_ALLOC (NULL);
3513 /* live_subregs is a vector used to keep accurate information about
3514 which hardregs are live in multiword pseudos. live_subregs and
3515 live_subregs_used are indexed by pseudo number. The live_subreg
3516 entry for a particular pseudo is only used if the corresponding
3517 element is non zero in live_subregs_used. The sbitmap size of
3518 live_subreg[allocno] is number of bytes that the pseudo can
3519 occupy. */
3520 sbitmap *live_subregs = XCNEWVEC (sbitmap, max_regno);
3521 bitmap live_subregs_used = BITMAP_ALLOC (NULL);
3523 for (i = 0; i < FIRST_PSEUDO_REGISTER; i++)
3524 if (TEST_HARD_REG_BIT (eliminable_regset, i))
3525 bitmap_set_bit (elim_regset, i);
3526 FOR_EACH_BB_REVERSE (bb)
3528 bitmap_iterator bi;
3529 rtx insn;
3531 CLEAR_REG_SET (live_relevant_regs);
3532 bitmap_clear (live_subregs_used);
3534 EXECUTE_IF_SET_IN_BITMAP (df_get_live_out (bb), 0, i, bi)
3536 if (i >= FIRST_PSEUDO_REGISTER)
3537 break;
3538 bitmap_set_bit (live_relevant_regs, i);
3541 EXECUTE_IF_SET_IN_BITMAP (df_get_live_out (bb),
3542 FIRST_PSEUDO_REGISTER, i, bi)
3544 if (pseudo_for_reload_consideration_p (i))
3545 bitmap_set_bit (live_relevant_regs, i);
3548 FOR_BB_INSNS_REVERSE (bb, insn)
3550 if (!NOTE_P (insn) && !BARRIER_P (insn))
3552 unsigned int uid = INSN_UID (insn);
3553 df_ref *def_rec;
3554 df_ref *use_rec;
3556 c = new_insn_chain ();
3557 c->next = next;
3558 next = c;
3559 *p = c;
3560 p = &c->prev;
3562 c->insn = insn;
3563 c->block = bb->index;
3565 if (NONDEBUG_INSN_P (insn))
3566 for (def_rec = DF_INSN_UID_DEFS (uid); *def_rec; def_rec++)
3568 df_ref def = *def_rec;
3569 unsigned int regno = DF_REF_REGNO (def);
3571 /* Ignore may clobbers because these are generated
3572 from calls. However, every other kind of def is
3573 added to dead_or_set. */
3574 if (!DF_REF_FLAGS_IS_SET (def, DF_REF_MAY_CLOBBER))
3576 if (regno < FIRST_PSEUDO_REGISTER)
3578 if (!fixed_regs[regno])
3579 bitmap_set_bit (&c->dead_or_set, regno);
3581 else if (pseudo_for_reload_consideration_p (regno))
3582 bitmap_set_bit (&c->dead_or_set, regno);
3585 if ((regno < FIRST_PSEUDO_REGISTER
3586 || reg_renumber[regno] >= 0
3587 || ira_conflicts_p)
3588 && (!DF_REF_FLAGS_IS_SET (def, DF_REF_CONDITIONAL)))
3590 rtx reg = DF_REF_REG (def);
3592 /* We can model subregs, but not if they are
3593 wrapped in ZERO_EXTRACTS. */
3594 if (GET_CODE (reg) == SUBREG
3595 && !DF_REF_FLAGS_IS_SET (def, DF_REF_ZERO_EXTRACT))
3597 unsigned int start = SUBREG_BYTE (reg);
3598 unsigned int last = start
3599 + GET_MODE_SIZE (GET_MODE (reg));
3601 init_live_subregs
3602 (bitmap_bit_p (live_relevant_regs, regno),
3603 live_subregs, live_subregs_used, regno, reg);
3605 if (!DF_REF_FLAGS_IS_SET
3606 (def, DF_REF_STRICT_LOW_PART))
3608 /* Expand the range to cover entire words.
3609 Bytes added here are "don't care". */
3610 start
3611 = start / UNITS_PER_WORD * UNITS_PER_WORD;
3612 last = ((last + UNITS_PER_WORD - 1)
3613 / UNITS_PER_WORD * UNITS_PER_WORD);
3616 /* Ignore the paradoxical bits. */
3617 if (last > SBITMAP_SIZE (live_subregs[regno]))
3618 last = SBITMAP_SIZE (live_subregs[regno]);
3620 while (start < last)
3622 bitmap_clear_bit (live_subregs[regno], start);
3623 start++;
3626 if (bitmap_empty_p (live_subregs[regno]))
3628 bitmap_clear_bit (live_subregs_used, regno);
3629 bitmap_clear_bit (live_relevant_regs, regno);
3631 else
3632 /* Set live_relevant_regs here because
3633 that bit has to be true to get us to
3634 look at the live_subregs fields. */
3635 bitmap_set_bit (live_relevant_regs, regno);
3637 else
3639 /* DF_REF_PARTIAL is generated for
3640 subregs, STRICT_LOW_PART, and
3641 ZERO_EXTRACT. We handle the subreg
3642 case above so here we have to keep from
3643 modeling the def as a killing def. */
3644 if (!DF_REF_FLAGS_IS_SET (def, DF_REF_PARTIAL))
3646 bitmap_clear_bit (live_subregs_used, regno);
3647 bitmap_clear_bit (live_relevant_regs, regno);
3653 bitmap_and_compl_into (live_relevant_regs, elim_regset);
3654 bitmap_copy (&c->live_throughout, live_relevant_regs);
3656 if (NONDEBUG_INSN_P (insn))
3657 for (use_rec = DF_INSN_UID_USES (uid); *use_rec; use_rec++)
3659 df_ref use = *use_rec;
3660 unsigned int regno = DF_REF_REGNO (use);
3661 rtx reg = DF_REF_REG (use);
3663 /* DF_REF_READ_WRITE on a use means that this use
3664 is fabricated from a def that is a partial set
3665 to a multiword reg. Here, we only model the
3666 subreg case that is not wrapped in ZERO_EXTRACT
3667 precisely so we do not need to look at the
3668 fabricated use. */
3669 if (DF_REF_FLAGS_IS_SET (use, DF_REF_READ_WRITE)
3670 && !DF_REF_FLAGS_IS_SET (use, DF_REF_ZERO_EXTRACT)
3671 && DF_REF_FLAGS_IS_SET (use, DF_REF_SUBREG))
3672 continue;
3674 /* Add the last use of each var to dead_or_set. */
3675 if (!bitmap_bit_p (live_relevant_regs, regno))
3677 if (regno < FIRST_PSEUDO_REGISTER)
3679 if (!fixed_regs[regno])
3680 bitmap_set_bit (&c->dead_or_set, regno);
3682 else if (pseudo_for_reload_consideration_p (regno))
3683 bitmap_set_bit (&c->dead_or_set, regno);
3686 if (regno < FIRST_PSEUDO_REGISTER
3687 || pseudo_for_reload_consideration_p (regno))
3689 if (GET_CODE (reg) == SUBREG
3690 && !DF_REF_FLAGS_IS_SET (use,
3691 DF_REF_SIGN_EXTRACT
3692 | DF_REF_ZERO_EXTRACT))
3694 unsigned int start = SUBREG_BYTE (reg);
3695 unsigned int last = start
3696 + GET_MODE_SIZE (GET_MODE (reg));
3698 init_live_subregs
3699 (bitmap_bit_p (live_relevant_regs, regno),
3700 live_subregs, live_subregs_used, regno, reg);
3702 /* Ignore the paradoxical bits. */
3703 if (last > SBITMAP_SIZE (live_subregs[regno]))
3704 last = SBITMAP_SIZE (live_subregs[regno]);
3706 while (start < last)
3708 bitmap_set_bit (live_subregs[regno], start);
3709 start++;
3712 else
3713 /* Resetting the live_subregs_used is
3714 effectively saying do not use the subregs
3715 because we are reading the whole
3716 pseudo. */
3717 bitmap_clear_bit (live_subregs_used, regno);
3718 bitmap_set_bit (live_relevant_regs, regno);
3724 /* FIXME!! The following code is a disaster. Reload needs to see the
3725 labels and jump tables that are just hanging out in between
3726 the basic blocks. See pr33676. */
3727 insn = BB_HEAD (bb);
3729 /* Skip over the barriers and cruft. */
3730 while (insn && (BARRIER_P (insn) || NOTE_P (insn)
3731 || BLOCK_FOR_INSN (insn) == bb))
3732 insn = PREV_INSN (insn);
3734 /* While we add anything except barriers and notes, the focus is
3735 to get the labels and jump tables into the
3736 reload_insn_chain. */
3737 while (insn)
3739 if (!NOTE_P (insn) && !BARRIER_P (insn))
3741 if (BLOCK_FOR_INSN (insn))
3742 break;
3744 c = new_insn_chain ();
3745 c->next = next;
3746 next = c;
3747 *p = c;
3748 p = &c->prev;
3750 /* The block makes no sense here, but it is what the old
3751 code did. */
3752 c->block = bb->index;
3753 c->insn = insn;
3754 bitmap_copy (&c->live_throughout, live_relevant_regs);
3756 insn = PREV_INSN (insn);
3760 reload_insn_chain = c;
3761 *p = NULL;
3763 for (i = 0; i < (unsigned int) max_regno; i++)
3764 if (live_subregs[i] != NULL)
3765 sbitmap_free (live_subregs[i]);
3766 free (live_subregs);
3767 BITMAP_FREE (live_subregs_used);
3768 BITMAP_FREE (live_relevant_regs);
3769 BITMAP_FREE (elim_regset);
3771 if (dump_file)
3772 print_insn_chains (dump_file);
3775 /* Examine the rtx found in *LOC, which is read or written to as determined
3776 by TYPE. Return false if we find a reason why an insn containing this
3777 rtx should not be moved (such as accesses to non-constant memory), true
3778 otherwise. */
3779 static bool
3780 rtx_moveable_p (rtx *loc, enum op_type type)
3782 const char *fmt;
3783 rtx x = *loc;
3784 enum rtx_code code = GET_CODE (x);
3785 int i, j;
3787 code = GET_CODE (x);
3788 switch (code)
3790 case CONST:
3791 CASE_CONST_ANY:
3792 case SYMBOL_REF:
3793 case LABEL_REF:
3794 return true;
3796 case PC:
3797 return type == OP_IN;
3799 case CC0:
3800 return false;
3802 case REG:
3803 if (x == frame_pointer_rtx)
3804 return true;
3805 if (HARD_REGISTER_P (x))
3806 return false;
3808 return true;
3810 case MEM:
3811 if (type == OP_IN && MEM_READONLY_P (x))
3812 return rtx_moveable_p (&XEXP (x, 0), OP_IN);
3813 return false;
3815 case SET:
3816 return (rtx_moveable_p (&SET_SRC (x), OP_IN)
3817 && rtx_moveable_p (&SET_DEST (x), OP_OUT));
3819 case STRICT_LOW_PART:
3820 return rtx_moveable_p (&XEXP (x, 0), OP_OUT);
3822 case ZERO_EXTRACT:
3823 case SIGN_EXTRACT:
3824 return (rtx_moveable_p (&XEXP (x, 0), type)
3825 && rtx_moveable_p (&XEXP (x, 1), OP_IN)
3826 && rtx_moveable_p (&XEXP (x, 2), OP_IN));
3828 case CLOBBER:
3829 return rtx_moveable_p (&SET_DEST (x), OP_OUT);
3831 default:
3832 break;
3835 fmt = GET_RTX_FORMAT (code);
3836 for (i = GET_RTX_LENGTH (code) - 1; i >= 0; i--)
3838 if (fmt[i] == 'e')
3840 if (!rtx_moveable_p (&XEXP (x, i), type))
3841 return false;
3843 else if (fmt[i] == 'E')
3844 for (j = XVECLEN (x, i) - 1; j >= 0; j--)
3846 if (!rtx_moveable_p (&XVECEXP (x, i, j), type))
3847 return false;
3850 return true;
3853 /* A wrapper around dominated_by_p, which uses the information in UID_LUID
3854 to give dominance relationships between two insns I1 and I2. */
3855 static bool
3856 insn_dominated_by_p (rtx i1, rtx i2, int *uid_luid)
3858 basic_block bb1 = BLOCK_FOR_INSN (i1);
3859 basic_block bb2 = BLOCK_FOR_INSN (i2);
3861 if (bb1 == bb2)
3862 return uid_luid[INSN_UID (i2)] < uid_luid[INSN_UID (i1)];
3863 return dominated_by_p (CDI_DOMINATORS, bb1, bb2);
3866 /* Record the range of register numbers added by find_moveable_pseudos. */
3867 int first_moveable_pseudo, last_moveable_pseudo;
3869 /* These two vectors hold data for every register added by
3870 find_movable_pseudos, with index 0 holding data for the
3871 first_moveable_pseudo. */
3872 /* The original home register. */
3873 static vec<rtx> pseudo_replaced_reg;
3875 /* Look for instances where we have an instruction that is known to increase
3876 register pressure, and whose result is not used immediately. If it is
3877 possible to move the instruction downwards to just before its first use,
3878 split its lifetime into two ranges. We create a new pseudo to compute the
3879 value, and emit a move instruction just before the first use. If, after
3880 register allocation, the new pseudo remains unallocated, the function
3881 move_unallocated_pseudos then deletes the move instruction and places
3882 the computation just before the first use.
3884 Such a move is safe and profitable if all the input registers remain live
3885 and unchanged between the original computation and its first use. In such
3886 a situation, the computation is known to increase register pressure, and
3887 moving it is known to at least not worsen it.
3889 We restrict moves to only those cases where a register remains unallocated,
3890 in order to avoid interfering too much with the instruction schedule. As
3891 an exception, we may move insns which only modify their input register
3892 (typically induction variables), as this increases the freedom for our
3893 intended transformation, and does not limit the second instruction
3894 scheduler pass. */
3896 static void
3897 find_moveable_pseudos (void)
3899 unsigned i;
3900 int max_regs = max_reg_num ();
3901 int max_uid = get_max_uid ();
3902 basic_block bb;
3903 int *uid_luid = XNEWVEC (int, max_uid);
3904 rtx *closest_uses = XNEWVEC (rtx, max_regs);
3905 /* A set of registers which are live but not modified throughout a block. */
3906 bitmap_head *bb_transp_live = XNEWVEC (bitmap_head, last_basic_block);
3907 /* A set of registers which only exist in a given basic block. */
3908 bitmap_head *bb_local = XNEWVEC (bitmap_head, last_basic_block);
3909 /* A set of registers which are set once, in an instruction that can be
3910 moved freely downwards, but are otherwise transparent to a block. */
3911 bitmap_head *bb_moveable_reg_sets = XNEWVEC (bitmap_head, last_basic_block);
3912 bitmap_head live, used, set, interesting, unusable_as_input;
3913 bitmap_iterator bi;
3914 bitmap_initialize (&interesting, 0);
3916 first_moveable_pseudo = max_regs;
3917 pseudo_replaced_reg.release ();
3918 pseudo_replaced_reg.safe_grow_cleared (max_regs);
3920 df_analyze ();
3921 calculate_dominance_info (CDI_DOMINATORS);
3923 i = 0;
3924 bitmap_initialize (&live, 0);
3925 bitmap_initialize (&used, 0);
3926 bitmap_initialize (&set, 0);
3927 bitmap_initialize (&unusable_as_input, 0);
3928 FOR_EACH_BB (bb)
3930 rtx insn;
3931 bitmap transp = bb_transp_live + bb->index;
3932 bitmap moveable = bb_moveable_reg_sets + bb->index;
3933 bitmap local = bb_local + bb->index;
3935 bitmap_initialize (local, 0);
3936 bitmap_initialize (transp, 0);
3937 bitmap_initialize (moveable, 0);
3938 bitmap_copy (&live, df_get_live_out (bb));
3939 bitmap_and_into (&live, df_get_live_in (bb));
3940 bitmap_copy (transp, &live);
3941 bitmap_clear (moveable);
3942 bitmap_clear (&live);
3943 bitmap_clear (&used);
3944 bitmap_clear (&set);
3945 FOR_BB_INSNS (bb, insn)
3946 if (NONDEBUG_INSN_P (insn))
3948 df_ref *u_rec, *d_rec;
3950 uid_luid[INSN_UID (insn)] = i++;
3952 u_rec = DF_INSN_USES (insn);
3953 d_rec = DF_INSN_DEFS (insn);
3954 if (d_rec[0] != NULL && d_rec[1] == NULL
3955 && u_rec[0] != NULL && u_rec[1] == NULL
3956 && DF_REF_REGNO (*u_rec) == DF_REF_REGNO (*d_rec)
3957 && !bitmap_bit_p (&set, DF_REF_REGNO (*u_rec))
3958 && rtx_moveable_p (&PATTERN (insn), OP_IN))
3960 unsigned regno = DF_REF_REGNO (*u_rec);
3961 bitmap_set_bit (moveable, regno);
3962 bitmap_set_bit (&set, regno);
3963 bitmap_set_bit (&used, regno);
3964 bitmap_clear_bit (transp, regno);
3965 continue;
3967 while (*u_rec)
3969 unsigned regno = DF_REF_REGNO (*u_rec);
3970 bitmap_set_bit (&used, regno);
3971 if (bitmap_clear_bit (moveable, regno))
3972 bitmap_clear_bit (transp, regno);
3973 u_rec++;
3976 while (*d_rec)
3978 unsigned regno = DF_REF_REGNO (*d_rec);
3979 bitmap_set_bit (&set, regno);
3980 bitmap_clear_bit (transp, regno);
3981 bitmap_clear_bit (moveable, regno);
3982 d_rec++;
3987 bitmap_clear (&live);
3988 bitmap_clear (&used);
3989 bitmap_clear (&set);
3991 FOR_EACH_BB (bb)
3993 bitmap local = bb_local + bb->index;
3994 rtx insn;
3996 FOR_BB_INSNS (bb, insn)
3997 if (NONDEBUG_INSN_P (insn))
3999 rtx def_insn, closest_use, note;
4000 df_ref *def_rec, def, use;
4001 unsigned regno;
4002 bool all_dominated, all_local;
4003 enum machine_mode mode;
4005 def_rec = DF_INSN_DEFS (insn);
4006 /* There must be exactly one def in this insn. */
4007 def = *def_rec;
4008 if (!def || def_rec[1] || !single_set (insn))
4009 continue;
4010 /* This must be the only definition of the reg. We also limit
4011 which modes we deal with so that we can assume we can generate
4012 move instructions. */
4013 regno = DF_REF_REGNO (def);
4014 mode = GET_MODE (DF_REF_REG (def));
4015 if (DF_REG_DEF_COUNT (regno) != 1
4016 || !DF_REF_INSN_INFO (def)
4017 || HARD_REGISTER_NUM_P (regno)
4018 || DF_REG_EQ_USE_COUNT (regno) > 0
4019 || (!INTEGRAL_MODE_P (mode) && !FLOAT_MODE_P (mode)))
4020 continue;
4021 def_insn = DF_REF_INSN (def);
4023 for (note = REG_NOTES (def_insn); note; note = XEXP (note, 1))
4024 if (REG_NOTE_KIND (note) == REG_EQUIV && MEM_P (XEXP (note, 0)))
4025 break;
4027 if (note)
4029 if (dump_file)
4030 fprintf (dump_file, "Ignoring reg %d, has equiv memory\n",
4031 regno);
4032 bitmap_set_bit (&unusable_as_input, regno);
4033 continue;
4036 use = DF_REG_USE_CHAIN (regno);
4037 all_dominated = true;
4038 all_local = true;
4039 closest_use = NULL_RTX;
4040 for (; use; use = DF_REF_NEXT_REG (use))
4042 rtx insn;
4043 if (!DF_REF_INSN_INFO (use))
4045 all_dominated = false;
4046 all_local = false;
4047 break;
4049 insn = DF_REF_INSN (use);
4050 if (DEBUG_INSN_P (insn))
4051 continue;
4052 if (BLOCK_FOR_INSN (insn) != BLOCK_FOR_INSN (def_insn))
4053 all_local = false;
4054 if (!insn_dominated_by_p (insn, def_insn, uid_luid))
4055 all_dominated = false;
4056 if (closest_use != insn && closest_use != const0_rtx)
4058 if (closest_use == NULL_RTX)
4059 closest_use = insn;
4060 else if (insn_dominated_by_p (closest_use, insn, uid_luid))
4061 closest_use = insn;
4062 else if (!insn_dominated_by_p (insn, closest_use, uid_luid))
4063 closest_use = const0_rtx;
4066 if (!all_dominated)
4068 if (dump_file)
4069 fprintf (dump_file, "Reg %d not all uses dominated by set\n",
4070 regno);
4071 continue;
4073 if (all_local)
4074 bitmap_set_bit (local, regno);
4075 if (closest_use == const0_rtx || closest_use == NULL
4076 || next_nonnote_nondebug_insn (def_insn) == closest_use)
4078 if (dump_file)
4079 fprintf (dump_file, "Reg %d uninteresting%s\n", regno,
4080 closest_use == const0_rtx || closest_use == NULL
4081 ? " (no unique first use)" : "");
4082 continue;
4084 #ifdef HAVE_cc0
4085 if (reg_referenced_p (cc0_rtx, PATTERN (closest_use)))
4087 if (dump_file)
4088 fprintf (dump_file, "Reg %d: closest user uses cc0\n",
4089 regno);
4090 continue;
4092 #endif
4093 bitmap_set_bit (&interesting, regno);
4094 closest_uses[regno] = closest_use;
4096 if (dump_file && (all_local || all_dominated))
4098 fprintf (dump_file, "Reg %u:", regno);
4099 if (all_local)
4100 fprintf (dump_file, " local to bb %d", bb->index);
4101 if (all_dominated)
4102 fprintf (dump_file, " def dominates all uses");
4103 if (closest_use != const0_rtx)
4104 fprintf (dump_file, " has unique first use");
4105 fputs ("\n", dump_file);
4110 EXECUTE_IF_SET_IN_BITMAP (&interesting, 0, i, bi)
4112 df_ref def = DF_REG_DEF_CHAIN (i);
4113 rtx def_insn = DF_REF_INSN (def);
4114 basic_block def_block = BLOCK_FOR_INSN (def_insn);
4115 bitmap def_bb_local = bb_local + def_block->index;
4116 bitmap def_bb_moveable = bb_moveable_reg_sets + def_block->index;
4117 bitmap def_bb_transp = bb_transp_live + def_block->index;
4118 bool local_to_bb_p = bitmap_bit_p (def_bb_local, i);
4119 rtx use_insn = closest_uses[i];
4120 df_ref *def_insn_use_rec = DF_INSN_USES (def_insn);
4121 bool all_ok = true;
4122 bool all_transp = true;
4124 if (!REG_P (DF_REF_REG (def)))
4125 continue;
4127 if (!local_to_bb_p)
4129 if (dump_file)
4130 fprintf (dump_file, "Reg %u not local to one basic block\n",
4132 continue;
4134 if (reg_equiv_init (i) != NULL_RTX)
4136 if (dump_file)
4137 fprintf (dump_file, "Ignoring reg %u with equiv init insn\n",
4139 continue;
4141 if (!rtx_moveable_p (&PATTERN (def_insn), OP_IN))
4143 if (dump_file)
4144 fprintf (dump_file, "Found def insn %d for %d to be not moveable\n",
4145 INSN_UID (def_insn), i);
4146 continue;
4148 if (dump_file)
4149 fprintf (dump_file, "Examining insn %d, def for %d\n",
4150 INSN_UID (def_insn), i);
4151 while (*def_insn_use_rec != NULL)
4153 df_ref use = *def_insn_use_rec;
4154 unsigned regno = DF_REF_REGNO (use);
4155 if (bitmap_bit_p (&unusable_as_input, regno))
4157 all_ok = false;
4158 if (dump_file)
4159 fprintf (dump_file, " found unusable input reg %u.\n", regno);
4160 break;
4162 if (!bitmap_bit_p (def_bb_transp, regno))
4164 if (bitmap_bit_p (def_bb_moveable, regno)
4165 && !control_flow_insn_p (use_insn)
4166 #ifdef HAVE_cc0
4167 && !sets_cc0_p (use_insn)
4168 #endif
4171 if (modified_between_p (DF_REF_REG (use), def_insn, use_insn))
4173 rtx x = NEXT_INSN (def_insn);
4174 while (!modified_in_p (DF_REF_REG (use), x))
4176 gcc_assert (x != use_insn);
4177 x = NEXT_INSN (x);
4179 if (dump_file)
4180 fprintf (dump_file, " input reg %u modified but insn %d moveable\n",
4181 regno, INSN_UID (x));
4182 emit_insn_after (PATTERN (x), use_insn);
4183 set_insn_deleted (x);
4185 else
4187 if (dump_file)
4188 fprintf (dump_file, " input reg %u modified between def and use\n",
4189 regno);
4190 all_transp = false;
4193 else
4194 all_transp = false;
4197 def_insn_use_rec++;
4199 if (!all_ok)
4200 continue;
4201 if (!dbg_cnt (ira_move))
4202 break;
4203 if (dump_file)
4204 fprintf (dump_file, " all ok%s\n", all_transp ? " and transp" : "");
4206 if (all_transp)
4208 rtx def_reg = DF_REF_REG (def);
4209 rtx newreg = ira_create_new_reg (def_reg);
4210 if (validate_change (def_insn, DF_REF_LOC (def), newreg, 0))
4212 unsigned nregno = REGNO (newreg);
4213 emit_insn_before (gen_move_insn (def_reg, newreg), use_insn);
4214 nregno -= max_regs;
4215 pseudo_replaced_reg[nregno] = def_reg;
4220 FOR_EACH_BB (bb)
4222 bitmap_clear (bb_local + bb->index);
4223 bitmap_clear (bb_transp_live + bb->index);
4224 bitmap_clear (bb_moveable_reg_sets + bb->index);
4226 bitmap_clear (&interesting);
4227 bitmap_clear (&unusable_as_input);
4228 free (uid_luid);
4229 free (closest_uses);
4230 free (bb_local);
4231 free (bb_transp_live);
4232 free (bb_moveable_reg_sets);
4234 last_moveable_pseudo = max_reg_num ();
4236 fix_reg_equiv_init ();
4237 expand_reg_info ();
4238 regstat_free_n_sets_and_refs ();
4239 regstat_free_ri ();
4240 regstat_init_n_sets_and_refs ();
4241 regstat_compute_ri ();
4242 free_dominance_info (CDI_DOMINATORS);
4245 /* Perform the second half of the transformation started in
4246 find_moveable_pseudos. We look for instances where the newly introduced
4247 pseudo remains unallocated, and remove it by moving the definition to
4248 just before its use, replacing the move instruction generated by
4249 find_moveable_pseudos. */
4250 static void
4251 move_unallocated_pseudos (void)
4253 int i;
4254 for (i = first_moveable_pseudo; i < last_moveable_pseudo; i++)
4255 if (reg_renumber[i] < 0)
4257 int idx = i - first_moveable_pseudo;
4258 rtx other_reg = pseudo_replaced_reg[idx];
4259 rtx def_insn = DF_REF_INSN (DF_REG_DEF_CHAIN (i));
4260 /* The use must follow all definitions of OTHER_REG, so we can
4261 insert the new definition immediately after any of them. */
4262 df_ref other_def = DF_REG_DEF_CHAIN (REGNO (other_reg));
4263 rtx move_insn = DF_REF_INSN (other_def);
4264 rtx newinsn = emit_insn_after (PATTERN (def_insn), move_insn);
4265 rtx set;
4266 int success;
4268 if (dump_file)
4269 fprintf (dump_file, "moving def of %d (insn %d now) ",
4270 REGNO (other_reg), INSN_UID (def_insn));
4272 delete_insn (move_insn);
4273 while ((other_def = DF_REG_DEF_CHAIN (REGNO (other_reg))))
4274 delete_insn (DF_REF_INSN (other_def));
4275 delete_insn (def_insn);
4277 set = single_set (newinsn);
4278 success = validate_change (newinsn, &SET_DEST (set), other_reg, 0);
4279 gcc_assert (success);
4280 if (dump_file)
4281 fprintf (dump_file, " %d) rather than keep unallocated replacement %d\n",
4282 INSN_UID (newinsn), i);
4283 SET_REG_N_REFS (i, 0);
4287 /* If the backend knows where to allocate pseudos for hard
4288 register initial values, register these allocations now. */
4289 static void
4290 allocate_initial_values (void)
4292 if (targetm.allocate_initial_value)
4294 rtx hreg, preg, x;
4295 int i, regno;
4297 for (i = 0; HARD_REGISTER_NUM_P (i); i++)
4299 if (! initial_value_entry (i, &hreg, &preg))
4300 break;
4302 x = targetm.allocate_initial_value (hreg);
4303 regno = REGNO (preg);
4304 if (x && REG_N_SETS (regno) <= 1)
4306 if (MEM_P (x))
4307 reg_equiv_memory_loc (regno) = x;
4308 else
4310 basic_block bb;
4311 int new_regno;
4313 gcc_assert (REG_P (x));
4314 new_regno = REGNO (x);
4315 reg_renumber[regno] = new_regno;
4316 /* Poke the regno right into regno_reg_rtx so that even
4317 fixed regs are accepted. */
4318 SET_REGNO (preg, new_regno);
4319 /* Update global register liveness information. */
4320 FOR_EACH_BB (bb)
4322 if (REGNO_REG_SET_P(df_get_live_in (bb), regno))
4323 SET_REGNO_REG_SET (df_get_live_in (bb), new_regno);
4324 if (REGNO_REG_SET_P(df_get_live_out (bb), regno))
4325 SET_REGNO_REG_SET (df_get_live_out (bb), new_regno);
4331 gcc_checking_assert (! initial_value_entry (FIRST_PSEUDO_REGISTER,
4332 &hreg, &preg));
4337 /* True when we use LRA instead of reload pass for the current
4338 function. */
4339 bool ira_use_lra_p;
4341 /* True if we have allocno conflicts. It is false for non-optimized
4342 mode or when the conflict table is too big. */
4343 bool ira_conflicts_p;
4345 /* Saved between IRA and reload. */
4346 static int saved_flag_ira_share_spill_slots;
4348 /* This is the main entry of IRA. */
4349 static void
4350 ira (FILE *f)
4352 bool loops_p;
4353 int max_regno_before_ira, ira_max_point_before_emit;
4354 int rebuild_p;
4355 bool saved_flag_caller_saves = flag_caller_saves;
4356 enum ira_region saved_flag_ira_region = flag_ira_region;
4358 ira_conflicts_p = optimize > 0;
4360 ira_use_lra_p = targetm.lra_p ();
4361 /* If there are too many pseudos and/or basic blocks (e.g. 10K
4362 pseudos and 10K blocks or 100K pseudos and 1K blocks), we will
4363 use simplified and faster algorithms in LRA. */
4364 lra_simple_p
4365 = (ira_use_lra_p && max_reg_num () >= (1 << 26) / last_basic_block);
4366 if (lra_simple_p)
4368 /* It permits to skip live range splitting in LRA. */
4369 flag_caller_saves = false;
4370 /* There is no sense to do regional allocation when we use
4371 simplified LRA. */
4372 flag_ira_region = IRA_REGION_ONE;
4373 ira_conflicts_p = false;
4376 #ifndef IRA_NO_OBSTACK
4377 gcc_obstack_init (&ira_obstack);
4378 #endif
4379 bitmap_obstack_initialize (&ira_bitmap_obstack);
4381 if (flag_caller_saves)
4382 init_caller_save ();
4384 if (flag_ira_verbose < 10)
4386 internal_flag_ira_verbose = flag_ira_verbose;
4387 ira_dump_file = f;
4389 else
4391 internal_flag_ira_verbose = flag_ira_verbose - 10;
4392 ira_dump_file = stderr;
4395 setup_prohibited_mode_move_regs ();
4397 df_note_add_problem ();
4399 /* DF_LIVE can't be used in the register allocator, too many other
4400 parts of the compiler depend on using the "classic" liveness
4401 interpretation of the DF_LR problem. See PR38711.
4402 Remove the problem, so that we don't spend time updating it in
4403 any of the df_analyze() calls during IRA/LRA. */
4404 if (optimize > 1)
4405 df_remove_problem (df_live);
4406 gcc_checking_assert (df_live == NULL);
4408 #ifdef ENABLE_CHECKING
4409 df->changeable_flags |= DF_VERIFY_SCHEDULED;
4410 #endif
4411 df_analyze ();
4412 df_clear_flags (DF_NO_INSN_RESCAN);
4413 regstat_init_n_sets_and_refs ();
4414 regstat_compute_ri ();
4416 /* If we are not optimizing, then this is the only place before
4417 register allocation where dataflow is done. And that is needed
4418 to generate these warnings. */
4419 if (warn_clobbered)
4420 generate_setjmp_warnings ();
4422 /* Determine if the current function is a leaf before running IRA
4423 since this can impact optimizations done by the prologue and
4424 epilogue thus changing register elimination offsets. */
4425 crtl->is_leaf = leaf_function_p ();
4427 if (resize_reg_info () && flag_ira_loop_pressure)
4428 ira_set_pseudo_classes (true, ira_dump_file);
4430 init_reg_equiv ();
4431 rebuild_p = update_equiv_regs ();
4432 setup_reg_equiv ();
4433 setup_reg_equiv_init ();
4435 if (optimize && rebuild_p)
4437 timevar_push (TV_JUMP);
4438 rebuild_jump_labels (get_insns ());
4439 if (purge_all_dead_edges ())
4440 delete_unreachable_blocks ();
4441 timevar_pop (TV_JUMP);
4444 allocated_reg_info_size = max_reg_num ();
4446 if (delete_trivially_dead_insns (get_insns (), max_reg_num ()))
4447 df_analyze ();
4449 /* It is not worth to do such improvement when we use a simple
4450 allocation because of -O0 usage or because the function is too
4451 big. */
4452 if (ira_conflicts_p)
4453 find_moveable_pseudos ();
4455 max_regno_before_ira = max_reg_num ();
4456 ira_setup_eliminable_regset (true);
4458 ira_overall_cost = ira_reg_cost = ira_mem_cost = 0;
4459 ira_load_cost = ira_store_cost = ira_shuffle_cost = 0;
4460 ira_move_loops_num = ira_additional_jumps_num = 0;
4462 ira_assert (current_loops == NULL);
4463 if (flag_ira_region == IRA_REGION_ALL || flag_ira_region == IRA_REGION_MIXED)
4464 loop_optimizer_init (AVOID_CFG_MODIFICATIONS | LOOPS_HAVE_RECORDED_EXITS);
4466 if (internal_flag_ira_verbose > 0 && ira_dump_file != NULL)
4467 fprintf (ira_dump_file, "Building IRA IR\n");
4468 loops_p = ira_build ();
4470 ira_assert (ira_conflicts_p || !loops_p);
4472 saved_flag_ira_share_spill_slots = flag_ira_share_spill_slots;
4473 if (too_high_register_pressure_p () || cfun->calls_setjmp)
4474 /* It is just wasting compiler's time to pack spilled pseudos into
4475 stack slots in this case -- prohibit it. We also do this if
4476 there is setjmp call because a variable not modified between
4477 setjmp and longjmp the compiler is required to preserve its
4478 value and sharing slots does not guarantee it. */
4479 flag_ira_share_spill_slots = FALSE;
4481 ira_color ();
4483 ira_max_point_before_emit = ira_max_point;
4485 ira_initiate_emit_data ();
4487 ira_emit (loops_p);
4489 max_regno = max_reg_num ();
4490 if (ira_conflicts_p)
4492 if (! loops_p)
4494 if (! ira_use_lra_p)
4495 ira_initiate_assign ();
4497 else
4499 expand_reg_info ();
4501 if (ira_use_lra_p)
4503 ira_allocno_t a;
4504 ira_allocno_iterator ai;
4506 FOR_EACH_ALLOCNO (a, ai)
4507 ALLOCNO_REGNO (a) = REGNO (ALLOCNO_EMIT_DATA (a)->reg);
4509 else
4511 if (internal_flag_ira_verbose > 0 && ira_dump_file != NULL)
4512 fprintf (ira_dump_file, "Flattening IR\n");
4513 ira_flattening (max_regno_before_ira, ira_max_point_before_emit);
4515 /* New insns were generated: add notes and recalculate live
4516 info. */
4517 df_analyze ();
4519 /* ??? Rebuild the loop tree, but why? Does the loop tree
4520 change if new insns were generated? Can that be handled
4521 by updating the loop tree incrementally? */
4522 loop_optimizer_finalize ();
4523 free_dominance_info (CDI_DOMINATORS);
4524 loop_optimizer_init (AVOID_CFG_MODIFICATIONS
4525 | LOOPS_HAVE_RECORDED_EXITS);
4527 if (! ira_use_lra_p)
4529 setup_allocno_assignment_flags ();
4530 ira_initiate_assign ();
4531 ira_reassign_conflict_allocnos (max_regno);
4536 ira_finish_emit_data ();
4538 setup_reg_renumber ();
4540 calculate_allocation_cost ();
4542 #ifdef ENABLE_IRA_CHECKING
4543 if (ira_conflicts_p)
4544 check_allocation ();
4545 #endif
4547 if (max_regno != max_regno_before_ira)
4549 regstat_free_n_sets_and_refs ();
4550 regstat_free_ri ();
4551 regstat_init_n_sets_and_refs ();
4552 regstat_compute_ri ();
4555 overall_cost_before = ira_overall_cost;
4556 if (! ira_conflicts_p)
4557 grow_reg_equivs ();
4558 else
4560 fix_reg_equiv_init ();
4562 #ifdef ENABLE_IRA_CHECKING
4563 print_redundant_copies ();
4564 #endif
4566 ira_spilled_reg_stack_slots_num = 0;
4567 ira_spilled_reg_stack_slots
4568 = ((struct ira_spilled_reg_stack_slot *)
4569 ira_allocate (max_regno
4570 * sizeof (struct ira_spilled_reg_stack_slot)));
4571 memset (ira_spilled_reg_stack_slots, 0,
4572 max_regno * sizeof (struct ira_spilled_reg_stack_slot));
4574 allocate_initial_values ();
4576 /* See comment for find_moveable_pseudos call. */
4577 if (ira_conflicts_p)
4578 move_unallocated_pseudos ();
4580 /* Restore original values. */
4581 if (lra_simple_p)
4583 flag_caller_saves = saved_flag_caller_saves;
4584 flag_ira_region = saved_flag_ira_region;
4588 static void
4589 do_reload (void)
4591 basic_block bb;
4592 bool need_dce;
4594 if (flag_ira_verbose < 10)
4595 ira_dump_file = dump_file;
4597 timevar_push (TV_RELOAD);
4598 if (ira_use_lra_p)
4600 if (current_loops != NULL)
4602 loop_optimizer_finalize ();
4603 free_dominance_info (CDI_DOMINATORS);
4605 FOR_ALL_BB (bb)
4606 bb->loop_father = NULL;
4607 current_loops = NULL;
4609 if (ira_conflicts_p)
4610 ira_free (ira_spilled_reg_stack_slots);
4612 ira_destroy ();
4614 lra (ira_dump_file);
4615 /* ???!!! Move it before lra () when we use ira_reg_equiv in
4616 LRA. */
4617 vec_free (reg_equivs);
4618 reg_equivs = NULL;
4619 need_dce = false;
4621 else
4623 df_set_flags (DF_NO_INSN_RESCAN);
4624 build_insn_chain ();
4626 need_dce = reload (get_insns (), ira_conflicts_p);
4630 timevar_pop (TV_RELOAD);
4632 timevar_push (TV_IRA);
4634 if (ira_conflicts_p && ! ira_use_lra_p)
4636 ira_free (ira_spilled_reg_stack_slots);
4637 ira_finish_assign ();
4640 if (internal_flag_ira_verbose > 0 && ira_dump_file != NULL
4641 && overall_cost_before != ira_overall_cost)
4642 fprintf (ira_dump_file, "+++Overall after reload %d\n", ira_overall_cost);
4644 flag_ira_share_spill_slots = saved_flag_ira_share_spill_slots;
4646 if (! ira_use_lra_p)
4648 ira_destroy ();
4649 if (current_loops != NULL)
4651 loop_optimizer_finalize ();
4652 free_dominance_info (CDI_DOMINATORS);
4654 FOR_ALL_BB (bb)
4655 bb->loop_father = NULL;
4656 current_loops = NULL;
4658 regstat_free_ri ();
4659 regstat_free_n_sets_and_refs ();
4662 if (optimize)
4663 cleanup_cfg (CLEANUP_EXPENSIVE);
4665 finish_reg_equiv ();
4667 bitmap_obstack_release (&ira_bitmap_obstack);
4668 #ifndef IRA_NO_OBSTACK
4669 obstack_free (&ira_obstack, NULL);
4670 #endif
4672 /* The code after the reload has changed so much that at this point
4673 we might as well just rescan everything. Note that
4674 df_rescan_all_insns is not going to help here because it does not
4675 touch the artificial uses and defs. */
4676 df_finish_pass (true);
4677 df_scan_alloc (NULL);
4678 df_scan_blocks ();
4680 if (optimize > 1)
4682 df_live_add_problem ();
4683 df_live_set_all_dirty ();
4686 if (optimize)
4687 df_analyze ();
4689 if (need_dce && optimize)
4690 run_fast_dce ();
4692 timevar_pop (TV_IRA);
4695 /* Run the integrated register allocator. */
4696 static unsigned int
4697 rest_of_handle_ira (void)
4699 ira (dump_file);
4700 return 0;
4703 struct rtl_opt_pass pass_ira =
4706 RTL_PASS,
4707 "ira", /* name */
4708 OPTGROUP_NONE, /* optinfo_flags */
4709 NULL, /* gate */
4710 rest_of_handle_ira, /* execute */
4711 NULL, /* sub */
4712 NULL, /* next */
4713 0, /* static_pass_number */
4714 TV_IRA, /* tv_id */
4715 0, /* properties_required */
4716 0, /* properties_provided */
4717 0, /* properties_destroyed */
4718 0, /* todo_flags_start */
4719 0, /* todo_flags_finish */
4723 static unsigned int
4724 rest_of_handle_reload (void)
4726 do_reload ();
4727 return 0;
4730 struct rtl_opt_pass pass_reload =
4733 RTL_PASS,
4734 "reload", /* name */
4735 OPTGROUP_NONE, /* optinfo_flags */
4736 NULL, /* gate */
4737 rest_of_handle_reload, /* execute */
4738 NULL, /* sub */
4739 NULL, /* next */
4740 0, /* static_pass_number */
4741 TV_RELOAD, /* tv_id */
4742 0, /* properties_required */
4743 0, /* properties_provided */
4744 0, /* properties_destroyed */
4745 0, /* todo_flags_start */
4746 TODO_ggc_collect /* todo_flags_finish */