ira-int.h revision 1.3 1 1.1 mrg /* Integrated Register Allocator (IRA) intercommunication header file.
2 1.3 mrg Copyright (C) 2006-2013 Free Software Foundation, Inc.
3 1.1 mrg Contributed by Vladimir Makarov <vmakarov (at) redhat.com>.
4 1.1 mrg
5 1.1 mrg This file is part of GCC.
6 1.1 mrg
7 1.1 mrg GCC is free software; you can redistribute it and/or modify it under
8 1.1 mrg the terms of the GNU General Public License as published by the Free
9 1.1 mrg Software Foundation; either version 3, or (at your option) any later
10 1.1 mrg version.
11 1.1 mrg
12 1.1 mrg GCC is distributed in the hope that it will be useful, but WITHOUT ANY
13 1.1 mrg WARRANTY; without even the implied warranty of MERCHANTABILITY or
14 1.1 mrg FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
15 1.1 mrg for more details.
16 1.1 mrg
17 1.1 mrg You should have received a copy of the GNU General Public License
18 1.1 mrg along with GCC; see the file COPYING3. If not see
19 1.1 mrg <http://www.gnu.org/licenses/>. */
20 1.1 mrg
21 1.1 mrg #include "cfgloop.h"
22 1.1 mrg #include "ira.h"
23 1.1 mrg #include "alloc-pool.h"
24 1.1 mrg
25 1.1 mrg /* To provide consistency in naming, all IRA external variables,
26 1.1 mrg functions, common typedefs start with prefix ira_. */
27 1.1 mrg
28 1.1 mrg #ifdef ENABLE_CHECKING
29 1.1 mrg #define ENABLE_IRA_CHECKING
30 1.1 mrg #endif
31 1.1 mrg
32 1.1 mrg #ifdef ENABLE_IRA_CHECKING
33 1.1 mrg #define ira_assert(c) gcc_assert (c)
34 1.1 mrg #else
35 1.1 mrg /* Always define and include C, so that warnings for empty body in an
36 1.1 mrg if statement and unused variable do not occur. */
37 1.1 mrg #define ira_assert(c) ((void)(0 && (c)))
38 1.1 mrg #endif
39 1.1 mrg
40 1.1 mrg /* Compute register frequency from edge frequency FREQ. It is
41 1.1 mrg analogous to REG_FREQ_FROM_BB. When optimizing for size, or
42 1.1 mrg profile driven feedback is available and the function is never
43 1.1 mrg executed, frequency is always equivalent. Otherwise rescale the
44 1.1 mrg edge frequency. */
45 1.3 mrg #define REG_FREQ_FROM_EDGE_FREQ(freq) \
46 1.3 mrg (optimize_size || (flag_branch_probabilities && !ENTRY_BLOCK_PTR->count) \
47 1.3 mrg ? REG_FREQ_MAX : (freq * REG_FREQ_MAX / BB_FREQ_MAX) \
48 1.1 mrg ? (freq * REG_FREQ_MAX / BB_FREQ_MAX) : 1)
49 1.1 mrg
50 1.1 mrg /* A modified value of flag `-fira-verbose' used internally. */
51 1.1 mrg extern int internal_flag_ira_verbose;
52 1.1 mrg
53 1.1 mrg /* Dump file of the allocator if it is not NULL. */
54 1.1 mrg extern FILE *ira_dump_file;
55 1.1 mrg
56 1.1 mrg /* Typedefs for pointers to allocno live range, allocno, and copy of
57 1.1 mrg allocnos. */
58 1.3 mrg typedef struct live_range *live_range_t;
59 1.1 mrg typedef struct ira_allocno *ira_allocno_t;
60 1.1 mrg typedef struct ira_allocno_copy *ira_copy_t;
61 1.3 mrg typedef struct ira_object *ira_object_t;
62 1.1 mrg
63 1.1 mrg /* Definition of vector of allocnos and copies. */
64 1.1 mrg
65 1.1 mrg /* Typedef for pointer to the subsequent structure. */
66 1.1 mrg typedef struct ira_loop_tree_node *ira_loop_tree_node_t;
67 1.1 mrg
68 1.3 mrg typedef unsigned short move_table[N_REG_CLASSES];
69 1.3 mrg
70 1.1 mrg /* In general case, IRA is a regional allocator. The regions are
71 1.1 mrg nested and form a tree. Currently regions are natural loops. The
72 1.1 mrg following structure describes loop tree node (representing basic
73 1.1 mrg block or loop). We need such tree because the loop tree from
74 1.1 mrg cfgloop.h is not convenient for the optimization: basic blocks are
75 1.1 mrg not a part of the tree from cfgloop.h. We also use the nodes for
76 1.1 mrg storing additional information about basic blocks/loops for the
77 1.1 mrg register allocation purposes. */
78 1.1 mrg struct ira_loop_tree_node
79 1.1 mrg {
80 1.1 mrg /* The node represents basic block if children == NULL. */
81 1.1 mrg basic_block bb; /* NULL for loop. */
82 1.3 mrg /* NULL for BB or for loop tree root if we did not build CFG loop tree. */
83 1.3 mrg struct loop *loop;
84 1.1 mrg /* NEXT/SUBLOOP_NEXT is the next node/loop-node of the same parent.
85 1.1 mrg SUBLOOP_NEXT is always NULL for BBs. */
86 1.1 mrg ira_loop_tree_node_t subloop_next, next;
87 1.1 mrg /* CHILDREN/SUBLOOPS is the first node/loop-node immediately inside
88 1.1 mrg the node. They are NULL for BBs. */
89 1.1 mrg ira_loop_tree_node_t subloops, children;
90 1.1 mrg /* The node immediately containing given node. */
91 1.1 mrg ira_loop_tree_node_t parent;
92 1.1 mrg
93 1.1 mrg /* Loop level in range [0, ira_loop_tree_height). */
94 1.1 mrg int level;
95 1.1 mrg
96 1.1 mrg /* All the following members are defined only for nodes representing
97 1.1 mrg loops. */
98 1.1 mrg
99 1.3 mrg /* The loop number from CFG loop tree. The root number is 0. */
100 1.3 mrg int loop_num;
101 1.3 mrg
102 1.1 mrg /* True if the loop was marked for removal from the register
103 1.1 mrg allocation. */
104 1.1 mrg bool to_remove_p;
105 1.1 mrg
106 1.1 mrg /* Allocnos in the loop corresponding to their regnos. If it is
107 1.1 mrg NULL the loop does not form a separate register allocation region
108 1.1 mrg (e.g. because it has abnormal enter/exit edges and we can not put
109 1.1 mrg code for register shuffling on the edges if a different
110 1.1 mrg allocation is used for a pseudo-register on different sides of
111 1.1 mrg the edges). Caps are not in the map (remember we can have more
112 1.1 mrg one cap with the same regno in a region). */
113 1.1 mrg ira_allocno_t *regno_allocno_map;
114 1.1 mrg
115 1.1 mrg /* True if there is an entry to given loop not from its parent (or
116 1.1 mrg grandparent) basic block. For example, it is possible for two
117 1.1 mrg adjacent loops inside another loop. */
118 1.1 mrg bool entered_from_non_parent_p;
119 1.1 mrg
120 1.1 mrg /* Maximal register pressure inside loop for given register class
121 1.3 mrg (defined only for the pressure classes). */
122 1.1 mrg int reg_pressure[N_REG_CLASSES];
123 1.1 mrg
124 1.1 mrg /* Numbers of allocnos referred or living in the loop node (except
125 1.1 mrg for its subloops). */
126 1.1 mrg bitmap all_allocnos;
127 1.1 mrg
128 1.1 mrg /* Numbers of allocnos living at the loop borders. */
129 1.1 mrg bitmap border_allocnos;
130 1.1 mrg
131 1.1 mrg /* Regnos of pseudos modified in the loop node (including its
132 1.1 mrg subloops). */
133 1.1 mrg bitmap modified_regnos;
134 1.1 mrg
135 1.1 mrg /* Numbers of copies referred in the corresponding loop. */
136 1.1 mrg bitmap local_copies;
137 1.1 mrg };
138 1.1 mrg
139 1.1 mrg /* The root of the loop tree corresponding to the all function. */
140 1.1 mrg extern ira_loop_tree_node_t ira_loop_tree_root;
141 1.1 mrg
142 1.1 mrg /* Height of the loop tree. */
143 1.1 mrg extern int ira_loop_tree_height;
144 1.1 mrg
145 1.1 mrg /* All nodes representing basic blocks are referred through the
146 1.1 mrg following array. We can not use basic block member `aux' for this
147 1.1 mrg because it is used for insertion of insns on edges. */
148 1.1 mrg extern ira_loop_tree_node_t ira_bb_nodes;
149 1.1 mrg
150 1.1 mrg /* Two access macros to the nodes representing basic blocks. */
151 1.1 mrg #if defined ENABLE_IRA_CHECKING && (GCC_VERSION >= 2007)
152 1.1 mrg #define IRA_BB_NODE_BY_INDEX(index) __extension__ \
153 1.3 mrg (({ ira_loop_tree_node_t _node = (&ira_bb_nodes[index]); \
154 1.1 mrg if (_node->children != NULL || _node->loop != NULL || _node->bb == NULL)\
155 1.1 mrg { \
156 1.1 mrg fprintf (stderr, \
157 1.1 mrg "\n%s: %d: error in %s: it is not a block node\n", \
158 1.1 mrg __FILE__, __LINE__, __FUNCTION__); \
159 1.1 mrg gcc_unreachable (); \
160 1.1 mrg } \
161 1.1 mrg _node; }))
162 1.1 mrg #else
163 1.1 mrg #define IRA_BB_NODE_BY_INDEX(index) (&ira_bb_nodes[index])
164 1.1 mrg #endif
165 1.1 mrg
166 1.1 mrg #define IRA_BB_NODE(bb) IRA_BB_NODE_BY_INDEX ((bb)->index)
167 1.1 mrg
168 1.1 mrg /* All nodes representing loops are referred through the following
169 1.1 mrg array. */
170 1.1 mrg extern ira_loop_tree_node_t ira_loop_nodes;
171 1.1 mrg
172 1.1 mrg /* Two access macros to the nodes representing loops. */
173 1.1 mrg #if defined ENABLE_IRA_CHECKING && (GCC_VERSION >= 2007)
174 1.1 mrg #define IRA_LOOP_NODE_BY_INDEX(index) __extension__ \
175 1.3 mrg (({ ira_loop_tree_node_t const _node = (&ira_loop_nodes[index]); \
176 1.3 mrg if (_node->children == NULL || _node->bb != NULL \
177 1.3 mrg || (_node->loop == NULL && current_loops != NULL)) \
178 1.1 mrg { \
179 1.1 mrg fprintf (stderr, \
180 1.1 mrg "\n%s: %d: error in %s: it is not a loop node\n", \
181 1.1 mrg __FILE__, __LINE__, __FUNCTION__); \
182 1.1 mrg gcc_unreachable (); \
183 1.1 mrg } \
184 1.1 mrg _node; }))
185 1.1 mrg #else
186 1.1 mrg #define IRA_LOOP_NODE_BY_INDEX(index) (&ira_loop_nodes[index])
187 1.1 mrg #endif
188 1.1 mrg
189 1.1 mrg #define IRA_LOOP_NODE(loop) IRA_LOOP_NODE_BY_INDEX ((loop)->num)
190 1.1 mrg
191 1.1 mrg
192 1.1 mrg /* The structure describes program points where a given allocno lives.
194 1.3 mrg If the live ranges of two allocnos are intersected, the allocnos
195 1.3 mrg are in conflict. */
196 1.1 mrg struct live_range
197 1.3 mrg {
198 1.3 mrg /* Object whose live range is described by given structure. */
199 1.1 mrg ira_object_t object;
200 1.1 mrg /* Program point range. */
201 1.1 mrg int start, finish;
202 1.1 mrg /* Next structure describing program points where the allocno
203 1.3 mrg lives. */
204 1.1 mrg live_range_t next;
205 1.3 mrg /* Pointer to structures with the same start/finish. */
206 1.1 mrg live_range_t start_next, finish_next;
207 1.1 mrg };
208 1.1 mrg
209 1.1 mrg /* Program points are enumerated by numbers from range
210 1.1 mrg 0..IRA_MAX_POINT-1. There are approximately two times more program
211 1.1 mrg points than insns. Program points are places in the program where
212 1.1 mrg liveness info can be changed. In most general case (there are more
213 1.1 mrg complicated cases too) some program points correspond to places
214 1.1 mrg where input operand dies and other ones correspond to places where
215 1.1 mrg output operands are born. */
216 1.1 mrg extern int ira_max_point;
217 1.1 mrg
218 1.1 mrg /* Arrays of size IRA_MAX_POINT mapping a program point to the allocno
219 1.3 mrg live ranges with given start/finish point. */
220 1.3 mrg extern live_range_t *ira_start_point_ranges, *ira_finish_point_ranges;
221 1.3 mrg
222 1.3 mrg /* A structure representing conflict information for an allocno
223 1.3 mrg (or one of its subwords). */
224 1.3 mrg struct ira_object
225 1.3 mrg {
226 1.3 mrg /* The allocno associated with this record. */
227 1.3 mrg ira_allocno_t allocno;
228 1.3 mrg /* Vector of accumulated conflicting conflict_redords with NULL end
229 1.3 mrg marker (if OBJECT_CONFLICT_VEC_P is true) or conflict bit vector
230 1.3 mrg otherwise. */
231 1.3 mrg void *conflicts_array;
232 1.3 mrg /* Pointer to structures describing at what program point the
233 1.3 mrg object lives. We always maintain the list in such way that *the
234 1.3 mrg ranges in the list are not intersected and ordered by decreasing
235 1.3 mrg their program points*. */
236 1.3 mrg live_range_t live_ranges;
237 1.3 mrg /* The subword within ALLOCNO which is represented by this object.
238 1.3 mrg Zero means the lowest-order subword (or the entire allocno in case
239 1.3 mrg it is not being tracked in subwords). */
240 1.3 mrg int subword;
241 1.3 mrg /* Allocated size of the conflicts array. */
242 1.3 mrg unsigned int conflicts_array_size;
243 1.3 mrg /* A unique number for every instance of this structure, which is used
244 1.3 mrg to represent it in conflict bit vectors. */
245 1.3 mrg int id;
246 1.3 mrg /* Before building conflicts, MIN and MAX are initialized to
247 1.3 mrg correspondingly minimal and maximal points of the accumulated
248 1.3 mrg live ranges. Afterwards, they hold the minimal and maximal ids
249 1.3 mrg of other ira_objects that this one can conflict with. */
250 1.3 mrg int min, max;
251 1.3 mrg /* Initial and accumulated hard registers conflicting with this
252 1.3 mrg object and as a consequences can not be assigned to the allocno.
253 1.3 mrg All non-allocatable hard regs and hard regs of register classes
254 1.3 mrg different from given allocno one are included in the sets. */
255 1.3 mrg HARD_REG_SET conflict_hard_regs, total_conflict_hard_regs;
256 1.3 mrg /* Number of accumulated conflicts in the vector of conflicting
257 1.3 mrg objects. */
258 1.3 mrg int num_accumulated_conflicts;
259 1.3 mrg /* TRUE if conflicts are represented by a vector of pointers to
260 1.3 mrg ira_object structures. Otherwise, we use a bit vector indexed
261 1.3 mrg by conflict ID numbers. */
262 1.3 mrg unsigned int conflict_vec_p : 1;
263 1.1 mrg };
264 1.1 mrg
265 1.1 mrg /* A structure representing an allocno (allocation entity). Allocno
266 1.1 mrg represents a pseudo-register in an allocation region. If
267 1.1 mrg pseudo-register does not live in a region but it lives in the
268 1.1 mrg nested regions, it is represented in the region by special allocno
269 1.1 mrg called *cap*. There may be more one cap representing the same
270 1.1 mrg pseudo-register in region. It means that the corresponding
271 1.1 mrg pseudo-register lives in more one non-intersected subregion. */
272 1.1 mrg struct ira_allocno
273 1.1 mrg {
274 1.1 mrg /* The allocno order number starting with 0. Each allocno has an
275 1.1 mrg unique number and the number is never changed for the
276 1.1 mrg allocno. */
277 1.1 mrg int num;
278 1.1 mrg /* Regno for allocno or cap. */
279 1.1 mrg int regno;
280 1.1 mrg /* Mode of the allocno which is the mode of the corresponding
281 1.3 mrg pseudo-register. */
282 1.3 mrg ENUM_BITFIELD (machine_mode) mode : 8;
283 1.3 mrg /* Register class which should be used for allocation for given
284 1.3 mrg allocno. NO_REGS means that we should use memory. */
285 1.3 mrg ENUM_BITFIELD (reg_class) aclass : 16;
286 1.3 mrg /* During the reload, value TRUE means that we should not reassign a
287 1.3 mrg hard register to the allocno got memory earlier. It is set up
288 1.3 mrg when we removed memory-memory move insn before each iteration of
289 1.3 mrg the reload. */
290 1.3 mrg unsigned int dont_reassign_p : 1;
291 1.3 mrg #ifdef STACK_REGS
292 1.3 mrg /* Set to TRUE if allocno can't be assigned to the stack hard
293 1.3 mrg register correspondingly in this region and area including the
294 1.3 mrg region and all its subregions recursively. */
295 1.3 mrg unsigned int no_stack_reg_p : 1, total_no_stack_reg_p : 1;
296 1.3 mrg #endif
297 1.3 mrg /* TRUE value means that there is no sense to spill the allocno
298 1.3 mrg during coloring because the spill will result in additional
299 1.3 mrg reloads in reload pass. */
300 1.3 mrg unsigned int bad_spill_p : 1;
301 1.3 mrg /* TRUE if a hard register or memory has been assigned to the
302 1.3 mrg allocno. */
303 1.3 mrg unsigned int assigned_p : 1;
304 1.3 mrg /* TRUE if conflicts for given allocno are represented by vector of
305 1.3 mrg pointers to the conflicting allocnos. Otherwise, we use a bit
306 1.3 mrg vector where a bit with given index represents allocno with the
307 1.3 mrg same number. */
308 1.1 mrg unsigned int conflict_vec_p : 1;
309 1.1 mrg /* Hard register assigned to given allocno. Negative value means
310 1.1 mrg that memory was allocated to the allocno. During the reload,
311 1.1 mrg spilled allocno has value equal to the corresponding stack slot
312 1.1 mrg number (0, ...) - 2. Value -1 is used for allocnos spilled by the
313 1.1 mrg reload (at this point pseudo-register has only one allocno) which
314 1.3 mrg did not get stack slot yet. */
315 1.1 mrg short int hard_regno;
316 1.1 mrg /* Allocnos with the same regno are linked by the following member.
317 1.1 mrg Allocnos corresponding to inner loops are first in the list (it
318 1.1 mrg corresponds to depth-first traverse of the loops). */
319 1.1 mrg ira_allocno_t next_regno_allocno;
320 1.1 mrg /* There may be different allocnos with the same regno in different
321 1.1 mrg regions. Allocnos are bound to the corresponding loop tree node.
322 1.1 mrg Pseudo-register may have only one regular allocno with given loop
323 1.1 mrg tree node but more than one cap (see comments above). */
324 1.1 mrg ira_loop_tree_node_t loop_tree_node;
325 1.1 mrg /* Accumulated usage references of the allocno. Here and below,
326 1.1 mrg word 'accumulated' means info for given region and all nested
327 1.1 mrg subregions. In this case, 'accumulated' means sum of references
328 1.1 mrg of the corresponding pseudo-register in this region and in all
329 1.1 mrg nested subregions recursively. */
330 1.1 mrg int nrefs;
331 1.1 mrg /* Accumulated frequency of usage of the allocno. */
332 1.1 mrg int freq;
333 1.3 mrg /* Minimal accumulated and updated costs of usage register of the
334 1.3 mrg allocno class. */
335 1.1 mrg int class_cost, updated_class_cost;
336 1.1 mrg /* Minimal accumulated, and updated costs of memory for the allocno.
337 1.1 mrg At the allocation start, the original and updated costs are
338 1.1 mrg equal. The updated cost may be changed after finishing
339 1.1 mrg allocation in a region and starting allocation in a subregion.
340 1.1 mrg The change reflects the cost of spill/restore code on the
341 1.1 mrg subregion border if we assign memory to the pseudo in the
342 1.1 mrg subregion. */
343 1.1 mrg int memory_cost, updated_memory_cost;
344 1.1 mrg /* Accumulated number of points where the allocno lives and there is
345 1.1 mrg excess pressure for its class. Excess pressure for a register
346 1.1 mrg class at some point means that there are more allocnos of given
347 1.1 mrg register class living at the point than number of hard-registers
348 1.1 mrg of the class available for the allocation. */
349 1.1 mrg int excess_pressure_points_num;
350 1.1 mrg /* Copies to other non-conflicting allocnos. The copies can
351 1.1 mrg represent move insn or potential move insn usually because of two
352 1.1 mrg operand insn constraints. */
353 1.1 mrg ira_copy_t allocno_copies;
354 1.1 mrg /* It is a allocno (cap) representing given allocno on upper loop tree
355 1.1 mrg level. */
356 1.1 mrg ira_allocno_t cap;
357 1.1 mrg /* It is a link to allocno (cap) on lower loop level represented by
358 1.1 mrg given cap. Null if given allocno is not a cap. */
359 1.3 mrg ira_allocno_t cap_member;
360 1.3 mrg /* The number of objects tracked in the following array. */
361 1.3 mrg int num_objects;
362 1.3 mrg /* An array of structures describing conflict information and live
363 1.3 mrg ranges for each object associated with the allocno. There may be
364 1.3 mrg more than one such object in cases where the allocno represents a
365 1.3 mrg multi-word register. */
366 1.1 mrg ira_object_t objects[2];
367 1.1 mrg /* Accumulated frequency of calls which given allocno
368 1.1 mrg intersects. */
369 1.1 mrg int call_freq;
370 1.1 mrg /* Accumulated number of the intersected calls. */
371 1.3 mrg int calls_crossed_num;
372 1.3 mrg /* The number of calls across which it is live, but which should not
373 1.3 mrg affect register preferences. */
374 1.1 mrg int cheap_calls_crossed_num;
375 1.3 mrg /* Array of usage costs (accumulated and the one updated during
376 1.1 mrg coloring) for each hard register of the allocno class. The
377 1.3 mrg member value can be NULL if all costs are the same and equal to
378 1.1 mrg CLASS_COST. For example, the costs of two different hard
379 1.1 mrg registers can be different if one hard register is callee-saved
380 1.1 mrg and another one is callee-used and the allocno lives through
381 1.1 mrg calls. Another example can be case when for some insn the
382 1.1 mrg corresponding pseudo-register value should be put in specific
383 1.3 mrg register class (e.g. AREG for x86) which is a strict subset of
384 1.3 mrg the allocno class (GENERAL_REGS for x86). We have updated costs
385 1.3 mrg to reflect the situation when the usage cost of a hard register
386 1.3 mrg is decreased because the allocno is connected to another allocno
387 1.3 mrg by a copy and the another allocno has been assigned to the hard
388 1.1 mrg register. */
389 1.1 mrg int *hard_reg_costs, *updated_hard_reg_costs;
390 1.1 mrg /* Array of decreasing costs (accumulated and the one updated during
391 1.3 mrg coloring) for allocnos conflicting with given allocno for hard
392 1.3 mrg regno of the allocno class. The member value can be NULL if all
393 1.3 mrg costs are the same. These costs are used to reflect preferences
394 1.3 mrg of other allocnos not assigned yet during assigning to given
395 1.1 mrg allocno. */
396 1.3 mrg int *conflict_hard_reg_costs, *updated_conflict_hard_reg_costs;
397 1.3 mrg /* Different additional data. It is used to decrease size of
398 1.3 mrg allocno data footprint. */
399 1.1 mrg void *add_data;
400 1.1 mrg };
401 1.3 mrg
402 1.1 mrg
403 1.1 mrg /* All members of the allocno structures should be accessed only
404 1.1 mrg through the following macros. */
405 1.1 mrg #define ALLOCNO_NUM(A) ((A)->num)
406 1.1 mrg #define ALLOCNO_REGNO(A) ((A)->regno)
407 1.1 mrg #define ALLOCNO_REG(A) ((A)->reg)
408 1.1 mrg #define ALLOCNO_NEXT_REGNO_ALLOCNO(A) ((A)->next_regno_allocno)
409 1.1 mrg #define ALLOCNO_LOOP_TREE_NODE(A) ((A)->loop_tree_node)
410 1.1 mrg #define ALLOCNO_CAP(A) ((A)->cap)
411 1.1 mrg #define ALLOCNO_CAP_MEMBER(A) ((A)->cap_member)
412 1.1 mrg #define ALLOCNO_NREFS(A) ((A)->nrefs)
413 1.1 mrg #define ALLOCNO_FREQ(A) ((A)->freq)
414 1.1 mrg #define ALLOCNO_HARD_REGNO(A) ((A)->hard_regno)
415 1.1 mrg #define ALLOCNO_CALL_FREQ(A) ((A)->call_freq)
416 1.3 mrg #define ALLOCNO_CALLS_CROSSED_NUM(A) ((A)->calls_crossed_num)
417 1.1 mrg #define ALLOCNO_CHEAP_CALLS_CROSSED_NUM(A) ((A)->cheap_calls_crossed_num)
418 1.1 mrg #define ALLOCNO_MEM_OPTIMIZED_DEST(A) ((A)->mem_optimized_dest)
419 1.1 mrg #define ALLOCNO_MEM_OPTIMIZED_DEST_P(A) ((A)->mem_optimized_dest_p)
420 1.1 mrg #define ALLOCNO_SOMEWHERE_RENAMED_P(A) ((A)->somewhere_renamed_p)
421 1.1 mrg #define ALLOCNO_CHILD_RENAMED_P(A) ((A)->child_renamed_p)
422 1.1 mrg #define ALLOCNO_DONT_REASSIGN_P(A) ((A)->dont_reassign_p)
423 1.1 mrg #ifdef STACK_REGS
424 1.1 mrg #define ALLOCNO_NO_STACK_REG_P(A) ((A)->no_stack_reg_p)
425 1.1 mrg #define ALLOCNO_TOTAL_NO_STACK_REG_P(A) ((A)->total_no_stack_reg_p)
426 1.1 mrg #endif
427 1.1 mrg #define ALLOCNO_BAD_SPILL_P(A) ((A)->bad_spill_p)
428 1.1 mrg #define ALLOCNO_ASSIGNED_P(A) ((A)->assigned_p)
429 1.1 mrg #define ALLOCNO_MODE(A) ((A)->mode)
430 1.1 mrg #define ALLOCNO_COPIES(A) ((A)->allocno_copies)
431 1.1 mrg #define ALLOCNO_HARD_REG_COSTS(A) ((A)->hard_reg_costs)
432 1.1 mrg #define ALLOCNO_UPDATED_HARD_REG_COSTS(A) ((A)->updated_hard_reg_costs)
433 1.1 mrg #define ALLOCNO_CONFLICT_HARD_REG_COSTS(A) \
434 1.1 mrg ((A)->conflict_hard_reg_costs)
435 1.1 mrg #define ALLOCNO_UPDATED_CONFLICT_HARD_REG_COSTS(A) \
436 1.3 mrg ((A)->updated_conflict_hard_reg_costs)
437 1.3 mrg #define ALLOCNO_CLASS(A) ((A)->aclass)
438 1.3 mrg #define ALLOCNO_CLASS_COST(A) ((A)->class_cost)
439 1.1 mrg #define ALLOCNO_UPDATED_CLASS_COST(A) ((A)->updated_class_cost)
440 1.1 mrg #define ALLOCNO_MEMORY_COST(A) ((A)->memory_cost)
441 1.3 mrg #define ALLOCNO_UPDATED_MEMORY_COST(A) ((A)->updated_memory_cost)
442 1.3 mrg #define ALLOCNO_EXCESS_PRESSURE_POINTS_NUM(A) \
443 1.3 mrg ((A)->excess_pressure_points_num)
444 1.3 mrg #define ALLOCNO_OBJECT(A,N) ((A)->objects[N])
445 1.3 mrg #define ALLOCNO_NUM_OBJECTS(A) ((A)->num_objects)
446 1.3 mrg #define ALLOCNO_ADD_DATA(A) ((A)->add_data)
447 1.3 mrg
448 1.3 mrg /* Typedef for pointer to the subsequent structure. */
449 1.3 mrg typedef struct ira_emit_data *ira_emit_data_t;
450 1.3 mrg
451 1.3 mrg /* Allocno bound data used for emit pseudo live range split insns and
452 1.3 mrg to flattening IR. */
453 1.3 mrg struct ira_emit_data
454 1.3 mrg {
455 1.3 mrg /* TRUE if the allocno assigned to memory was a destination of
456 1.3 mrg removed move (see ira-emit.c) at loop exit because the value of
457 1.3 mrg the corresponding pseudo-register is not changed inside the
458 1.3 mrg loop. */
459 1.3 mrg unsigned int mem_optimized_dest_p : 1;
460 1.3 mrg /* TRUE if the corresponding pseudo-register has disjoint live
461 1.3 mrg ranges and the other allocnos of the pseudo-register except this
462 1.3 mrg one changed REG. */
463 1.3 mrg unsigned int somewhere_renamed_p : 1;
464 1.3 mrg /* TRUE if allocno with the same REGNO in a subregion has been
465 1.3 mrg renamed, in other words, got a new pseudo-register. */
466 1.3 mrg unsigned int child_renamed_p : 1;
467 1.3 mrg /* Final rtx representation of the allocno. */
468 1.3 mrg rtx reg;
469 1.3 mrg /* Non NULL if we remove restoring value from given allocno to
470 1.3 mrg MEM_OPTIMIZED_DEST at loop exit (see ira-emit.c) because the
471 1.3 mrg allocno value is not changed inside the loop. */
472 1.3 mrg ira_allocno_t mem_optimized_dest;
473 1.3 mrg };
474 1.3 mrg
475 1.3 mrg #define ALLOCNO_EMIT_DATA(a) ((ira_emit_data_t) ALLOCNO_ADD_DATA (a))
476 1.3 mrg
477 1.3 mrg /* Data used to emit live range split insns and to flattening IR. */
478 1.3 mrg extern ira_emit_data_t ira_allocno_emit_data;
479 1.3 mrg
480 1.3 mrg /* Abbreviation for frequent emit data access. */
481 1.3 mrg static inline rtx
482 1.3 mrg allocno_emit_reg (ira_allocno_t a)
483 1.3 mrg {
484 1.3 mrg return ALLOCNO_EMIT_DATA (a)->reg;
485 1.3 mrg }
486 1.3 mrg
487 1.3 mrg #define OBJECT_ALLOCNO(O) ((O)->allocno)
488 1.3 mrg #define OBJECT_SUBWORD(O) ((O)->subword)
489 1.3 mrg #define OBJECT_CONFLICT_ARRAY(O) ((O)->conflicts_array)
490 1.3 mrg #define OBJECT_CONFLICT_VEC(O) ((ira_object_t *)(O)->conflicts_array)
491 1.3 mrg #define OBJECT_CONFLICT_BITVEC(O) ((IRA_INT_TYPE *)(O)->conflicts_array)
492 1.3 mrg #define OBJECT_CONFLICT_ARRAY_SIZE(O) ((O)->conflicts_array_size)
493 1.3 mrg #define OBJECT_CONFLICT_VEC_P(O) ((O)->conflict_vec_p)
494 1.3 mrg #define OBJECT_NUM_CONFLICTS(O) ((O)->num_accumulated_conflicts)
495 1.3 mrg #define OBJECT_CONFLICT_HARD_REGS(O) ((O)->conflict_hard_regs)
496 1.3 mrg #define OBJECT_TOTAL_CONFLICT_HARD_REGS(O) ((O)->total_conflict_hard_regs)
497 1.3 mrg #define OBJECT_MIN(O) ((O)->min)
498 1.3 mrg #define OBJECT_MAX(O) ((O)->max)
499 1.3 mrg #define OBJECT_CONFLICT_ID(O) ((O)->id)
500 1.1 mrg #define OBJECT_LIVE_RANGES(O) ((O)->live_ranges)
501 1.1 mrg
502 1.1 mrg /* Map regno -> allocnos with given regno (see comments for
503 1.1 mrg allocno member `next_regno_allocno'). */
504 1.1 mrg extern ira_allocno_t *ira_regno_allocno_map;
505 1.1 mrg
506 1.1 mrg /* Array of references to all allocnos. The order number of the
507 1.1 mrg allocno corresponds to the index in the array. Removed allocnos
508 1.1 mrg have NULL element value. */
509 1.1 mrg extern ira_allocno_t *ira_allocnos;
510 1.3 mrg
511 1.1 mrg /* The size of the previous array. */
512 1.1 mrg extern int ira_allocnos_num;
513 1.3 mrg
514 1.3 mrg /* Map a conflict id to its corresponding ira_object structure. */
515 1.3 mrg extern ira_object_t *ira_object_id_map;
516 1.3 mrg
517 1.3 mrg /* The size of the previous array. */
518 1.1 mrg extern int ira_objects_num;
519 1.1 mrg
520 1.1 mrg /* The following structure represents a copy of two allocnos. The
521 1.1 mrg copies represent move insns or potential move insns usually because
522 1.1 mrg of two operand insn constraints. To remove register shuffle, we
523 1.1 mrg also create copies between allocno which is output of an insn and
524 1.1 mrg allocno becoming dead in the insn. */
525 1.1 mrg struct ira_allocno_copy
526 1.1 mrg {
527 1.1 mrg /* The unique order number of the copy node starting with 0. */
528 1.1 mrg int num;
529 1.1 mrg /* Allocnos connected by the copy. The first allocno should have
530 1.1 mrg smaller order number than the second one. */
531 1.1 mrg ira_allocno_t first, second;
532 1.1 mrg /* Execution frequency of the copy. */
533 1.1 mrg int freq;
534 1.1 mrg bool constraint_p;
535 1.1 mrg /* It is a move insn which is an origin of the copy. The member
536 1.1 mrg value for the copy representing two operand insn constraints or
537 1.1 mrg for the copy created to remove register shuffle is NULL. In last
538 1.1 mrg case the copy frequency is smaller than the corresponding insn
539 1.1 mrg execution frequency. */
540 1.1 mrg rtx insn;
541 1.1 mrg /* All copies with the same allocno as FIRST are linked by the two
542 1.1 mrg following members. */
543 1.1 mrg ira_copy_t prev_first_allocno_copy, next_first_allocno_copy;
544 1.1 mrg /* All copies with the same allocno as SECOND are linked by the two
545 1.1 mrg following members. */
546 1.1 mrg ira_copy_t prev_second_allocno_copy, next_second_allocno_copy;
547 1.1 mrg /* Region from which given copy is originated. */
548 1.1 mrg ira_loop_tree_node_t loop_tree_node;
549 1.1 mrg };
550 1.1 mrg
551 1.1 mrg /* Array of references to all copies. The order number of the copy
552 1.1 mrg corresponds to the index in the array. Removed copies have NULL
553 1.1 mrg element value. */
554 1.1 mrg extern ira_copy_t *ira_copies;
555 1.1 mrg
556 1.1 mrg /* Size of the previous array. */
557 1.1 mrg extern int ira_copies_num;
558 1.1 mrg
559 1.1 mrg /* The following structure describes a stack slot used for spilled
560 1.1 mrg pseudo-registers. */
561 1.1 mrg struct ira_spilled_reg_stack_slot
562 1.1 mrg {
563 1.3 mrg /* pseudo-registers assigned to the stack slot. */
564 1.1 mrg bitmap_head spilled_regs;
565 1.1 mrg /* RTL representation of the stack slot. */
566 1.1 mrg rtx mem;
567 1.1 mrg /* Size of the stack slot. */
568 1.1 mrg unsigned int width;
569 1.1 mrg };
570 1.1 mrg
571 1.1 mrg /* The number of elements in the following array. */
572 1.1 mrg extern int ira_spilled_reg_stack_slots_num;
573 1.1 mrg
574 1.1 mrg /* The following array contains info about spilled pseudo-registers
575 1.1 mrg stack slots used in current function so far. */
576 1.1 mrg extern struct ira_spilled_reg_stack_slot *ira_spilled_reg_stack_slots;
577 1.1 mrg
578 1.1 mrg /* Correspondingly overall cost of the allocation, cost of the
579 1.1 mrg allocnos assigned to hard-registers, cost of the allocnos assigned
580 1.1 mrg to memory, cost of loads, stores and register move insns generated
581 1.1 mrg for pseudo-register live range splitting (see ira-emit.c). */
582 1.1 mrg extern int ira_overall_cost;
583 1.1 mrg extern int ira_reg_cost, ira_mem_cost;
584 1.1 mrg extern int ira_load_cost, ira_store_cost, ira_shuffle_cost;
585 1.1 mrg extern int ira_move_loops_num, ira_additional_jumps_num;
586 1.3 mrg
587 1.3 mrg
588 1.3 mrg /* This page contains a bitset implementation called 'min/max sets' used to
590 1.3 mrg record conflicts in IRA.
591 1.3 mrg They are named min/maxs set since we keep track of a minimum and a maximum
592 1.3 mrg bit number for each set representing the bounds of valid elements. Otherwise,
593 1.3 mrg the implementation resembles sbitmaps in that we store an array of integers
594 1.3 mrg whose bits directly represent the members of the set. */
595 1.3 mrg
596 1.1 mrg /* The type used as elements in the array, and the number of bits in
597 1.1 mrg this type. */
598 1.1 mrg
599 1.1 mrg #define IRA_INT_BITS HOST_BITS_PER_WIDE_INT
600 1.1 mrg #define IRA_INT_TYPE HOST_WIDE_INT
601 1.1 mrg
602 1.1 mrg /* Set, clear or test bit number I in R, a bit vector of elements with
603 1.1 mrg minimal index and maximal index equal correspondingly to MIN and
604 1.1 mrg MAX. */
605 1.3 mrg #if defined ENABLE_IRA_CHECKING && (GCC_VERSION >= 2007)
606 1.1 mrg
607 1.1 mrg #define SET_MINMAX_SET_BIT(R, I, MIN, MAX) __extension__ \
608 1.1 mrg (({ int _min = (MIN), _max = (MAX), _i = (I); \
609 1.1 mrg if (_i < _min || _i > _max) \
610 1.1 mrg { \
611 1.1 mrg fprintf (stderr, \
612 1.1 mrg "\n%s: %d: error in %s: %d not in range [%d,%d]\n", \
613 1.1 mrg __FILE__, __LINE__, __FUNCTION__, _i, _min, _max); \
614 1.1 mrg gcc_unreachable (); \
615 1.1 mrg } \
616 1.1 mrg ((R)[(unsigned) (_i - _min) / IRA_INT_BITS] \
617 1.1 mrg |= ((IRA_INT_TYPE) 1 << ((unsigned) (_i - _min) % IRA_INT_BITS))); }))
618 1.3 mrg
619 1.1 mrg
620 1.1 mrg #define CLEAR_MINMAX_SET_BIT(R, I, MIN, MAX) __extension__ \
621 1.1 mrg (({ int _min = (MIN), _max = (MAX), _i = (I); \
622 1.1 mrg if (_i < _min || _i > _max) \
623 1.1 mrg { \
624 1.1 mrg fprintf (stderr, \
625 1.1 mrg "\n%s: %d: error in %s: %d not in range [%d,%d]\n", \
626 1.1 mrg __FILE__, __LINE__, __FUNCTION__, _i, _min, _max); \
627 1.1 mrg gcc_unreachable (); \
628 1.1 mrg } \
629 1.1 mrg ((R)[(unsigned) (_i - _min) / IRA_INT_BITS] \
630 1.3 mrg &= ~((IRA_INT_TYPE) 1 << ((unsigned) (_i - _min) % IRA_INT_BITS))); }))
631 1.1 mrg
632 1.1 mrg #define TEST_MINMAX_SET_BIT(R, I, MIN, MAX) __extension__ \
633 1.1 mrg (({ int _min = (MIN), _max = (MAX), _i = (I); \
634 1.1 mrg if (_i < _min || _i > _max) \
635 1.1 mrg { \
636 1.1 mrg fprintf (stderr, \
637 1.1 mrg "\n%s: %d: error in %s: %d not in range [%d,%d]\n", \
638 1.1 mrg __FILE__, __LINE__, __FUNCTION__, _i, _min, _max); \
639 1.1 mrg gcc_unreachable (); \
640 1.1 mrg } \
641 1.1 mrg ((R)[(unsigned) (_i - _min) / IRA_INT_BITS] \
642 1.1 mrg & ((IRA_INT_TYPE) 1 << ((unsigned) (_i - _min) % IRA_INT_BITS))); }))
643 1.1 mrg
644 1.3 mrg #else
645 1.1 mrg
646 1.1 mrg #define SET_MINMAX_SET_BIT(R, I, MIN, MAX) \
647 1.1 mrg ((R)[(unsigned) ((I) - (MIN)) / IRA_INT_BITS] \
648 1.3 mrg |= ((IRA_INT_TYPE) 1 << ((unsigned) ((I) - (MIN)) % IRA_INT_BITS)))
649 1.1 mrg
650 1.1 mrg #define CLEAR_MINMAX_SET_BIT(R, I, MIN, MAX) \
651 1.1 mrg ((R)[(unsigned) ((I) - (MIN)) / IRA_INT_BITS] \
652 1.3 mrg &= ~((IRA_INT_TYPE) 1 << ((unsigned) ((I) - (MIN)) % IRA_INT_BITS)))
653 1.1 mrg
654 1.1 mrg #define TEST_MINMAX_SET_BIT(R, I, MIN, MAX) \
655 1.1 mrg ((R)[(unsigned) ((I) - (MIN)) / IRA_INT_BITS] \
656 1.1 mrg & ((IRA_INT_TYPE) 1 << ((unsigned) ((I) - (MIN)) % IRA_INT_BITS)))
657 1.1 mrg
658 1.3 mrg #endif
659 1.1 mrg
660 1.1 mrg /* The iterator for min/max sets. */
661 1.3 mrg typedef struct {
662 1.1 mrg
663 1.1 mrg /* Array containing the bit vector. */
664 1.1 mrg IRA_INT_TYPE *vec;
665 1.1 mrg
666 1.1 mrg /* The number of the current element in the vector. */
667 1.1 mrg unsigned int word_num;
668 1.1 mrg
669 1.1 mrg /* The number of bits in the bit vector. */
670 1.1 mrg unsigned int nel;
671 1.1 mrg
672 1.1 mrg /* The current bit index of the bit vector. */
673 1.1 mrg unsigned int bit_num;
674 1.1 mrg
675 1.1 mrg /* Index corresponding to the 1st bit of the bit vector. */
676 1.1 mrg int start_val;
677 1.1 mrg
678 1.3 mrg /* The word of the bit vector currently visited. */
679 1.1 mrg unsigned IRA_INT_TYPE word;
680 1.3 mrg } minmax_set_iterator;
681 1.3 mrg
682 1.1 mrg /* Initialize the iterator I for bit vector VEC containing minimal and
683 1.3 mrg maximal values MIN and MAX. */
684 1.3 mrg static inline void
685 1.1 mrg minmax_set_iter_init (minmax_set_iterator *i, IRA_INT_TYPE *vec, int min,
686 1.1 mrg int max)
687 1.1 mrg {
688 1.1 mrg i->vec = vec;
689 1.1 mrg i->word_num = 0;
690 1.1 mrg i->nel = max < min ? 0 : max - min + 1;
691 1.1 mrg i->start_val = min;
692 1.1 mrg i->bit_num = 0;
693 1.1 mrg i->word = i->nel == 0 ? 0 : vec[0];
694 1.1 mrg }
695 1.3 mrg
696 1.1 mrg /* Return TRUE if we have more allocnos to visit, in which case *N is
697 1.1 mrg set to the number of the element to be visited. Otherwise, return
698 1.3 mrg FALSE. */
699 1.1 mrg static inline bool
700 1.1 mrg minmax_set_iter_cond (minmax_set_iterator *i, int *n)
701 1.1 mrg {
702 1.1 mrg /* Skip words that are zeros. */
703 1.1 mrg for (; i->word == 0; i->word = i->vec[i->word_num])
704 1.1 mrg {
705 1.1 mrg i->word_num++;
706 1.1 mrg i->bit_num = i->word_num * IRA_INT_BITS;
707 1.1 mrg
708 1.1 mrg /* If we have reached the end, break. */
709 1.1 mrg if (i->bit_num >= i->nel)
710 1.1 mrg return false;
711 1.1 mrg }
712 1.1 mrg
713 1.1 mrg /* Skip bits that are zero. */
714 1.1 mrg for (; (i->word & 1) == 0; i->word >>= 1)
715 1.1 mrg i->bit_num++;
716 1.1 mrg
717 1.1 mrg *n = (int) i->bit_num + i->start_val;
718 1.1 mrg
719 1.1 mrg return true;
720 1.3 mrg }
721 1.1 mrg
722 1.3 mrg /* Advance to the next element in the set. */
723 1.1 mrg static inline void
724 1.1 mrg minmax_set_iter_next (minmax_set_iterator *i)
725 1.1 mrg {
726 1.1 mrg i->word >>= 1;
727 1.1 mrg i->bit_num++;
728 1.3 mrg }
729 1.1 mrg
730 1.1 mrg /* Loop over all elements of a min/max set given by bit vector VEC and
731 1.3 mrg their minimal and maximal values MIN and MAX. In each iteration, N
732 1.3 mrg is set to the number of next allocno. ITER is an instance of
733 1.3 mrg minmax_set_iterator used to iterate over the set. */
734 1.3 mrg #define FOR_EACH_BIT_IN_MINMAX_SET(VEC, MIN, MAX, N, ITER) \
735 1.3 mrg for (minmax_set_iter_init (&(ITER), (VEC), (MIN), (MAX)); \
736 1.3 mrg minmax_set_iter_cond (&(ITER), &(N)); \
737 1.3 mrg minmax_set_iter_next (&(ITER)))
738 1.3 mrg
739 1.3 mrg struct target_ira_int {
741 1.3 mrg /* Initialized once. It is a maximal possible size of the allocated
742 1.3 mrg struct costs. */
743 1.3 mrg int x_max_struct_costs_size;
744 1.3 mrg
745 1.3 mrg /* Allocated and initialized once, and used to initialize cost values
746 1.3 mrg for each insn. */
747 1.3 mrg struct costs *x_init_cost;
748 1.3 mrg
749 1.3 mrg /* Allocated once, and used for temporary purposes. */
750 1.3 mrg struct costs *x_temp_costs;
751 1.3 mrg
752 1.3 mrg /* Allocated once, and used for the cost calculation. */
753 1.3 mrg struct costs *x_op_costs[MAX_RECOG_OPERANDS];
754 1.3 mrg struct costs *x_this_op_costs[MAX_RECOG_OPERANDS];
755 1.3 mrg
756 1.3 mrg /* Hard registers that can not be used for the register allocator for
757 1.3 mrg all functions of the current compilation unit. */
758 1.3 mrg HARD_REG_SET x_no_unit_alloc_regs;
759 1.3 mrg
760 1.3 mrg /* Map: hard regs X modes -> set of hard registers for storing value
761 1.3 mrg of given mode starting with given hard register. */
762 1.3 mrg HARD_REG_SET (x_ira_reg_mode_hard_regset
763 1.3 mrg [FIRST_PSEUDO_REGISTER][NUM_MACHINE_MODES]);
764 1.3 mrg
765 1.3 mrg /* Maximum cost of moving from a register in one class to a register
766 1.3 mrg in another class. Based on TARGET_REGISTER_MOVE_COST. */
767 1.3 mrg move_table *x_ira_register_move_cost[MAX_MACHINE_MODE];
768 1.3 mrg
769 1.3 mrg /* Similar, but here we don't have to move if the first index is a
770 1.3 mrg subset of the second so in that case the cost is zero. */
771 1.3 mrg move_table *x_ira_may_move_in_cost[MAX_MACHINE_MODE];
772 1.3 mrg
773 1.3 mrg /* Similar, but here we don't have to move if the first index is a
774 1.3 mrg superset of the second so in that case the cost is zero. */
775 1.3 mrg move_table *x_ira_may_move_out_cost[MAX_MACHINE_MODE];
776 1.3 mrg
777 1.3 mrg /* Keep track of the last mode we initialized move costs for. */
778 1.3 mrg int x_last_mode_for_init_move_cost;
779 1.3 mrg
780 1.3 mrg /* Array analog of the macro MEMORY_MOVE_COST but they contain maximal
781 1.3 mrg cost not minimal. */
782 1.3 mrg short int x_ira_max_memory_move_cost[MAX_MACHINE_MODE][N_REG_CLASSES][2];
783 1.3 mrg
784 1.3 mrg /* Map class->true if class is a possible allocno class, false
785 1.3 mrg otherwise. */
786 1.3 mrg bool x_ira_reg_allocno_class_p[N_REG_CLASSES];
787 1.3 mrg
788 1.3 mrg /* Map class->true if class is a pressure class, false otherwise. */
789 1.3 mrg bool x_ira_reg_pressure_class_p[N_REG_CLASSES];
790 1.3 mrg
791 1.3 mrg /* Array of the number of hard registers of given class which are
792 1.3 mrg available for allocation. The order is defined by the hard
793 1.3 mrg register numbers. */
794 1.3 mrg short x_ira_non_ordered_class_hard_regs[N_REG_CLASSES][FIRST_PSEUDO_REGISTER];
795 1.3 mrg
796 1.3 mrg /* Index (in ira_class_hard_regs; for given register class and hard
797 1.3 mrg register (in general case a hard register can belong to several
798 1.3 mrg register classes;. The index is negative for hard registers
799 1.3 mrg unavailable for the allocation. */
800 1.3 mrg short x_ira_class_hard_reg_index[N_REG_CLASSES][FIRST_PSEUDO_REGISTER];
801 1.3 mrg
802 1.3 mrg /* Array whose values are hard regset of hard registers available for
803 1.3 mrg the allocation of given register class whose HARD_REGNO_MODE_OK
804 1.3 mrg values for given mode are zero. */
805 1.3 mrg HARD_REG_SET x_ira_prohibited_class_mode_regs[N_REG_CLASSES][NUM_MACHINE_MODES];
806 1.3 mrg
807 1.3 mrg /* Index [CL][M] contains R if R appears somewhere in a register of the form:
808 1.3 mrg
809 1.3 mrg (reg:M R'), R' not in x_ira_prohibited_class_mode_regs[CL][M]
810 1.3 mrg
811 1.3 mrg For example, if:
812 1.3 mrg
813 1.3 mrg - (reg:M 2) is valid and occupies two registers;
814 1.3 mrg - register 2 belongs to CL; and
815 1.3 mrg - register 3 belongs to the same pressure class as CL
816 1.3 mrg
817 1.3 mrg then (reg:M 2) contributes to [CL][M] and registers 2 and 3 will be
818 1.3 mrg in the set. */
819 1.3 mrg HARD_REG_SET x_ira_useful_class_mode_regs[N_REG_CLASSES][NUM_MACHINE_MODES];
820 1.3 mrg
821 1.3 mrg /* The value is number of elements in the subsequent array. */
822 1.3 mrg int x_ira_important_classes_num;
823 1.3 mrg
824 1.3 mrg /* The array containing all non-empty classes. Such classes is
825 1.3 mrg important for calculation of the hard register usage costs. */
826 1.3 mrg enum reg_class x_ira_important_classes[N_REG_CLASSES];
827 1.3 mrg
828 1.3 mrg /* The array containing indexes of important classes in the previous
829 1.3 mrg array. The array elements are defined only for important
830 1.3 mrg classes. */
831 1.3 mrg int x_ira_important_class_nums[N_REG_CLASSES];
832 1.3 mrg
833 1.3 mrg /* Map class->true if class is an uniform class, false otherwise. */
834 1.3 mrg bool x_ira_uniform_class_p[N_REG_CLASSES];
835 1.3 mrg
836 1.3 mrg /* The biggest important class inside of intersection of the two
837 1.3 mrg classes (that is calculated taking only hard registers available
838 1.3 mrg for allocation into account;. If the both classes contain no hard
839 1.3 mrg registers available for allocation, the value is calculated with
840 1.3 mrg taking all hard-registers including fixed ones into account. */
841 1.3 mrg enum reg_class x_ira_reg_class_intersect[N_REG_CLASSES][N_REG_CLASSES];
842 1.3 mrg
843 1.3 mrg /* Classes with end marker LIM_REG_CLASSES which are intersected with
844 1.3 mrg given class (the first index). That includes given class itself.
845 1.3 mrg This is calculated taking only hard registers available for
846 1.3 mrg allocation into account. */
847 1.3 mrg enum reg_class x_ira_reg_class_super_classes[N_REG_CLASSES][N_REG_CLASSES];
848 1.3 mrg
849 1.3 mrg /* The biggest (smallest) important class inside of (covering) union
850 1.3 mrg of the two classes (that is calculated taking only hard registers
851 1.3 mrg available for allocation into account). If the both classes
852 1.3 mrg contain no hard registers available for allocation, the value is
853 1.3 mrg calculated with taking all hard-registers including fixed ones
854 1.3 mrg into account. In other words, the value is the corresponding
855 1.3 mrg reg_class_subunion (reg_class_superunion) value. */
856 1.3 mrg enum reg_class x_ira_reg_class_subunion[N_REG_CLASSES][N_REG_CLASSES];
857 1.3 mrg enum reg_class x_ira_reg_class_superunion[N_REG_CLASSES][N_REG_CLASSES];
858 1.3 mrg
859 1.3 mrg /* For each reg class, table listing all the classes contained in it
860 1.3 mrg (excluding the class itself. Non-allocatable registers are
861 1.3 mrg excluded from the consideration). */
862 1.3 mrg enum reg_class x_alloc_reg_class_subclasses[N_REG_CLASSES][N_REG_CLASSES];
863 1.3 mrg
864 1.3 mrg /* Array whose values are hard regset of hard registers for which
865 1.3 mrg move of the hard register in given mode into itself is
866 1.3 mrg prohibited. */
867 1.3 mrg HARD_REG_SET x_ira_prohibited_mode_move_regs[NUM_MACHINE_MODES];
868 1.3 mrg
869 1.3 mrg /* Flag of that the above array has been initialized. */
870 1.3 mrg bool x_ira_prohibited_mode_move_regs_initialized_p;
871 1.3 mrg };
872 1.3 mrg
873 1.3 mrg extern struct target_ira_int default_target_ira_int;
874 1.3 mrg #if SWITCHABLE_TARGET
875 1.3 mrg extern struct target_ira_int *this_target_ira_int;
876 1.1 mrg #else
877 1.3 mrg #define this_target_ira_int (&default_target_ira_int)
878 1.3 mrg #endif
879 1.3 mrg
880 1.3 mrg #define ira_reg_mode_hard_regset \
881 1.3 mrg (this_target_ira_int->x_ira_reg_mode_hard_regset)
882 1.3 mrg #define ira_register_move_cost \
883 1.3 mrg (this_target_ira_int->x_ira_register_move_cost)
884 1.3 mrg #define ira_max_memory_move_cost \
885 1.3 mrg (this_target_ira_int->x_ira_max_memory_move_cost)
886 1.3 mrg #define ira_may_move_in_cost \
887 1.3 mrg (this_target_ira_int->x_ira_may_move_in_cost)
888 1.3 mrg #define ira_may_move_out_cost \
889 1.3 mrg (this_target_ira_int->x_ira_may_move_out_cost)
890 1.3 mrg #define ira_reg_allocno_class_p \
891 1.3 mrg (this_target_ira_int->x_ira_reg_allocno_class_p)
892 1.3 mrg #define ira_reg_pressure_class_p \
893 1.3 mrg (this_target_ira_int->x_ira_reg_pressure_class_p)
894 1.3 mrg #define ira_non_ordered_class_hard_regs \
895 1.3 mrg (this_target_ira_int->x_ira_non_ordered_class_hard_regs)
896 1.3 mrg #define ira_class_hard_reg_index \
897 1.3 mrg (this_target_ira_int->x_ira_class_hard_reg_index)
898 1.3 mrg #define ira_prohibited_class_mode_regs \
899 1.3 mrg (this_target_ira_int->x_ira_prohibited_class_mode_regs)
900 1.3 mrg #define ira_useful_class_mode_regs \
901 1.3 mrg (this_target_ira_int->x_ira_useful_class_mode_regs)
902 1.3 mrg #define ira_important_classes_num \
903 1.3 mrg (this_target_ira_int->x_ira_important_classes_num)
904 1.3 mrg #define ira_important_classes \
905 1.3 mrg (this_target_ira_int->x_ira_important_classes)
906 1.3 mrg #define ira_important_class_nums \
907 1.3 mrg (this_target_ira_int->x_ira_important_class_nums)
908 1.3 mrg #define ira_uniform_class_p \
909 1.3 mrg (this_target_ira_int->x_ira_uniform_class_p)
910 1.3 mrg #define ira_reg_class_intersect \
911 1.3 mrg (this_target_ira_int->x_ira_reg_class_intersect)
912 1.3 mrg #define ira_reg_class_super_classes \
913 1.3 mrg (this_target_ira_int->x_ira_reg_class_super_classes)
914 1.3 mrg #define ira_reg_class_subunion \
915 1.3 mrg (this_target_ira_int->x_ira_reg_class_subunion)
916 1.3 mrg #define ira_reg_class_superunion \
917 1.3 mrg (this_target_ira_int->x_ira_reg_class_superunion)
918 1.1 mrg #define ira_prohibited_mode_move_regs \
919 1.1 mrg (this_target_ira_int->x_ira_prohibited_mode_move_regs)
920 1.1 mrg
921 1.1 mrg /* ira.c: */
923 1.1 mrg
924 1.1 mrg extern void *ira_allocate (size_t);
925 1.1 mrg extern void ira_free (void *addr);
926 1.3 mrg extern bitmap ira_allocate_bitmap (void);
927 1.1 mrg extern void ira_free_bitmap (bitmap);
928 1.1 mrg extern void ira_print_disposition (FILE *);
929 1.1 mrg extern void ira_debug_disposition (void);
930 1.1 mrg extern void ira_debug_allocno_classes (void);
931 1.1 mrg extern void ira_init_register_move_cost (enum machine_mode);
932 1.1 mrg
933 1.1 mrg /* ira-build.c */
934 1.1 mrg
935 1.1 mrg /* The current loop tree node and its regno allocno map. */
936 1.1 mrg extern ira_loop_tree_node_t ira_curr_loop_tree_node;
937 1.1 mrg extern ira_allocno_t *ira_curr_regno_allocno_map;
938 1.1 mrg
939 1.1 mrg extern void ira_debug_copy (ira_copy_t);
940 1.1 mrg extern void ira_debug_copies (void);
941 1.1 mrg extern void ira_debug_allocno_copies (ira_allocno_t);
942 1.3 mrg
943 1.3 mrg extern void ira_traverse_loop_tree (bool, ira_loop_tree_node_t,
944 1.1 mrg void (*) (ira_loop_tree_node_t),
945 1.3 mrg void (*) (ira_loop_tree_node_t));
946 1.3 mrg extern ira_allocno_t ira_parent_allocno (ira_allocno_t);
947 1.3 mrg extern ira_allocno_t ira_parent_or_cap_allocno (ira_allocno_t);
948 1.3 mrg extern ira_allocno_t ira_create_allocno (int, bool, ira_loop_tree_node_t);
949 1.3 mrg extern void ira_create_allocno_objects (ira_allocno_t);
950 1.3 mrg extern void ira_set_allocno_class (ira_allocno_t, enum reg_class);
951 1.1 mrg extern bool ira_conflict_vector_profitable_p (ira_object_t, int);
952 1.3 mrg extern void ira_allocate_conflict_vec (ira_object_t, int);
953 1.3 mrg extern void ira_allocate_object_conflicts (ira_object_t, int);
954 1.3 mrg extern void ior_hard_reg_conflicts (ira_allocno_t, HARD_REG_SET *);
955 1.3 mrg extern void ira_print_expanded_allocno (ira_allocno_t);
956 1.3 mrg extern void ira_add_live_range_to_object (ira_object_t, int, int);
957 1.3 mrg extern live_range_t ira_create_live_range (ira_object_t, int, int,
958 1.3 mrg live_range_t);
959 1.3 mrg extern live_range_t ira_copy_live_range_list (live_range_t);
960 1.1 mrg extern live_range_t ira_merge_live_ranges (live_range_t, live_range_t);
961 1.1 mrg extern bool ira_live_ranges_intersect_p (live_range_t, live_range_t);
962 1.1 mrg extern void ira_finish_live_range (live_range_t);
963 1.1 mrg extern void ira_finish_live_range_list (live_range_t);
964 1.1 mrg extern void ira_free_allocno_updated_costs (ira_allocno_t);
965 1.1 mrg extern ira_copy_t ira_create_copy (ira_allocno_t, ira_allocno_t,
966 1.1 mrg int, bool, rtx, ira_loop_tree_node_t);
967 1.1 mrg extern void ira_add_allocno_copy_to_list (ira_copy_t);
968 1.3 mrg extern void ira_swap_allocno_copy_ends_if_necessary (ira_copy_t);
969 1.3 mrg extern ira_copy_t ira_add_allocno_copy (ira_allocno_t, ira_allocno_t, int,
970 1.1 mrg bool, rtx, ira_loop_tree_node_t);
971 1.1 mrg
972 1.3 mrg extern int *ira_allocate_cost_vector (reg_class_t);
973 1.1 mrg extern void ira_free_cost_vector (int *, reg_class_t);
974 1.1 mrg
975 1.1 mrg extern void ira_flattening (int, int);
976 1.1 mrg extern bool ira_build (void);
977 1.1 mrg extern void ira_destroy (void);
978 1.1 mrg
979 1.1 mrg /* ira-costs.c */
980 1.3 mrg extern void ira_init_costs_once (void);
981 1.1 mrg extern void ira_init_costs (void);
982 1.1 mrg extern void ira_finish_costs_once (void);
983 1.1 mrg extern void ira_costs (void);
984 1.1 mrg extern void ira_tune_allocno_costs (void);
985 1.3 mrg
986 1.3 mrg /* ira-lives.c */
987 1.1 mrg
988 1.1 mrg extern void ira_rebuild_start_finish_chains (void);
989 1.1 mrg extern void ira_print_live_range_list (FILE *, live_range_t);
990 1.1 mrg extern void ira_debug_live_range_list (live_range_t);
991 1.1 mrg extern void ira_debug_allocno_live_ranges (ira_allocno_t);
992 1.1 mrg extern void ira_debug_live_ranges (void);
993 1.1 mrg extern void ira_create_allocno_live_ranges (void);
994 1.1 mrg extern void ira_compress_allocno_live_ranges (void);
995 1.1 mrg extern void ira_finish_allocno_live_ranges (void);
996 1.1 mrg
997 1.1 mrg /* ira-conflicts.c */
998 1.3 mrg extern void ira_debug_conflicts (bool);
999 1.1 mrg extern void ira_build_conflicts (void);
1000 1.1 mrg
1001 1.1 mrg /* ira-color.c */
1002 1.1 mrg extern void ira_debug_hard_regs_forest (void);
1003 1.1 mrg extern int ira_loop_edge_freq (ira_loop_tree_node_t, int, bool);
1004 1.1 mrg extern void ira_reassign_conflict_allocnos (int);
1005 1.1 mrg extern void ira_initiate_assign (void);
1006 1.3 mrg extern void ira_finish_assign (void);
1007 1.3 mrg extern void ira_color (void);
1008 1.1 mrg
1009 1.1 mrg /* ira-emit.c */
1010 1.1 mrg extern void ira_initiate_emit_data (void);
1011 1.1 mrg extern void ira_finish_emit_data (void);
1012 1.3 mrg extern void ira_emit (bool);
1013 1.3 mrg
1014 1.3 mrg
1015 1.1 mrg
1017 1.3 mrg /* Return true if equivalence of pseudo REGNO is not a lvalue. */
1018 1.3 mrg static inline bool
1019 1.3 mrg ira_equiv_no_lvalue_p (int regno)
1020 1.3 mrg {
1021 1.3 mrg if (regno >= ira_reg_equiv_len)
1022 1.1 mrg return false;
1023 1.1 mrg return (ira_reg_equiv[regno].constant != NULL_RTX
1024 1.3 mrg || ira_reg_equiv[regno].invariant != NULL_RTX
1025 1.3 mrg || (ira_reg_equiv[regno].memory != NULL_RTX
1026 1.3 mrg && MEM_READONLY_P (ira_reg_equiv[regno].memory)));
1027 1.3 mrg }
1028 1.3 mrg
1029 1.1 mrg
1030 1.1 mrg
1032 1.1 mrg /* Initialize register costs for MODE if necessary. */
1033 1.1 mrg static inline void
1034 1.1 mrg ira_init_register_move_cost_if_necessary (enum machine_mode mode)
1035 1.1 mrg {
1036 1.1 mrg if (ira_register_move_cost[mode] == NULL)
1037 1.1 mrg ira_init_register_move_cost (mode);
1038 1.1 mrg }
1039 1.1 mrg
1040 1.1 mrg
1041 1.1 mrg
1043 1.1 mrg /* The iterator for all allocnos. */
1044 1.1 mrg typedef struct {
1045 1.1 mrg /* The number of the current element in IRA_ALLOCNOS. */
1046 1.1 mrg int n;
1047 1.1 mrg } ira_allocno_iterator;
1048 1.1 mrg
1049 1.1 mrg /* Initialize the iterator I. */
1050 1.1 mrg static inline void
1051 1.1 mrg ira_allocno_iter_init (ira_allocno_iterator *i)
1052 1.1 mrg {
1053 1.1 mrg i->n = 0;
1054 1.1 mrg }
1055 1.1 mrg
1056 1.1 mrg /* Return TRUE if we have more allocnos to visit, in which case *A is
1057 1.1 mrg set to the allocno to be visited. Otherwise, return FALSE. */
1058 1.1 mrg static inline bool
1059 1.1 mrg ira_allocno_iter_cond (ira_allocno_iterator *i, ira_allocno_t *a)
1060 1.1 mrg {
1061 1.1 mrg int n;
1062 1.1 mrg
1063 1.1 mrg for (n = i->n; n < ira_allocnos_num; n++)
1064 1.1 mrg if (ira_allocnos[n] != NULL)
1065 1.1 mrg {
1066 1.1 mrg *a = ira_allocnos[n];
1067 1.1 mrg i->n = n + 1;
1068 1.1 mrg return true;
1069 1.1 mrg }
1070 1.1 mrg return false;
1071 1.1 mrg }
1072 1.3 mrg
1073 1.3 mrg /* Loop over all allocnos. In each iteration, A is set to the next
1074 1.3 mrg allocno. ITER is an instance of ira_allocno_iterator used to iterate
1075 1.3 mrg the allocnos. */
1076 1.3 mrg #define FOR_EACH_ALLOCNO(A, ITER) \
1077 1.3 mrg for (ira_allocno_iter_init (&(ITER)); \
1078 1.3 mrg ira_allocno_iter_cond (&(ITER), &(A));)
1079 1.3 mrg
1080 1.3 mrg /* The iterator for all objects. */
1082 1.3 mrg typedef struct {
1083 1.3 mrg /* The number of the current element in ira_object_id_map. */
1084 1.3 mrg int n;
1085 1.3 mrg } ira_object_iterator;
1086 1.3 mrg
1087 1.3 mrg /* Initialize the iterator I. */
1088 1.3 mrg static inline void
1089 1.3 mrg ira_object_iter_init (ira_object_iterator *i)
1090 1.3 mrg {
1091 1.3 mrg i->n = 0;
1092 1.3 mrg }
1093 1.3 mrg
1094 1.3 mrg /* Return TRUE if we have more objects to visit, in which case *OBJ is
1095 1.3 mrg set to the object to be visited. Otherwise, return FALSE. */
1096 1.3 mrg static inline bool
1097 1.3 mrg ira_object_iter_cond (ira_object_iterator *i, ira_object_t *obj)
1098 1.3 mrg {
1099 1.3 mrg int n;
1100 1.3 mrg
1101 1.3 mrg for (n = i->n; n < ira_objects_num; n++)
1102 1.1 mrg if (ira_object_id_map[n] != NULL)
1103 1.3 mrg {
1104 1.3 mrg *obj = ira_object_id_map[n];
1105 1.3 mrg i->n = n + 1;
1106 1.3 mrg return true;
1107 1.3 mrg }
1108 1.3 mrg return false;
1109 1.3 mrg }
1110 1.3 mrg
1111 1.3 mrg /* Loop over all objects. In each iteration, OBJ is set to the next
1112 1.3 mrg object. ITER is an instance of ira_object_iterator used to iterate
1113 1.3 mrg the objects. */
1114 1.3 mrg #define FOR_EACH_OBJECT(OBJ, ITER) \
1115 1.1 mrg for (ira_object_iter_init (&(ITER)); \
1116 1.3 mrg ira_object_iter_cond (&(ITER), &(OBJ));)
1117 1.3 mrg
1118 1.3 mrg /* The iterator for objects associated with an allocno. */
1120 1.3 mrg typedef struct {
1121 1.3 mrg /* The number of the element the allocno's object array. */
1122 1.3 mrg int n;
1123 1.3 mrg } ira_allocno_object_iterator;
1124 1.3 mrg
1125 1.3 mrg /* Initialize the iterator I. */
1126 1.3 mrg static inline void
1127 1.3 mrg ira_allocno_object_iter_init (ira_allocno_object_iterator *i)
1128 1.3 mrg {
1129 1.3 mrg i->n = 0;
1130 1.3 mrg }
1131 1.3 mrg
1132 1.3 mrg /* Return TRUE if we have more objects to visit in allocno A, in which
1133 1.3 mrg case *O is set to the object to be visited. Otherwise, return
1134 1.3 mrg FALSE. */
1135 1.3 mrg static inline bool
1136 1.3 mrg ira_allocno_object_iter_cond (ira_allocno_object_iterator *i, ira_allocno_t a,
1137 1.3 mrg ira_object_t *o)
1138 1.3 mrg {
1139 1.3 mrg int n = i->n++;
1140 1.3 mrg if (n < ALLOCNO_NUM_OBJECTS (a))
1141 1.3 mrg {
1142 1.3 mrg *o = ALLOCNO_OBJECT (a, n);
1143 1.3 mrg return true;
1144 1.3 mrg }
1145 1.1 mrg return false;
1146 1.1 mrg }
1147 1.1 mrg
1148 1.1 mrg /* Loop over all objects associated with allocno A. In each
1149 1.1 mrg iteration, O is set to the next object. ITER is an instance of
1150 1.1 mrg ira_allocno_object_iterator used to iterate the conflicts. */
1151 1.1 mrg #define FOR_EACH_ALLOCNO_OBJECT(A, O, ITER) \
1152 1.1 mrg for (ira_allocno_object_iter_init (&(ITER)); \
1153 1.1 mrg ira_allocno_object_iter_cond (&(ITER), (A), &(O));)
1154 1.1 mrg
1155 1.1 mrg
1157 1.1 mrg /* The iterator for copies. */
1158 1.1 mrg typedef struct {
1159 1.1 mrg /* The number of the current element in IRA_COPIES. */
1160 1.1 mrg int n;
1161 1.1 mrg } ira_copy_iterator;
1162 1.1 mrg
1163 1.1 mrg /* Initialize the iterator I. */
1164 1.1 mrg static inline void
1165 1.1 mrg ira_copy_iter_init (ira_copy_iterator *i)
1166 1.1 mrg {
1167 1.1 mrg i->n = 0;
1168 1.1 mrg }
1169 1.1 mrg
1170 1.1 mrg /* Return TRUE if we have more copies to visit, in which case *CP is
1171 1.1 mrg set to the copy to be visited. Otherwise, return FALSE. */
1172 1.1 mrg static inline bool
1173 1.1 mrg ira_copy_iter_cond (ira_copy_iterator *i, ira_copy_t *cp)
1174 1.1 mrg {
1175 1.1 mrg int n;
1176 1.1 mrg
1177 1.1 mrg for (n = i->n; n < ira_copies_num; n++)
1178 1.1 mrg if (ira_copies[n] != NULL)
1179 1.1 mrg {
1180 1.1 mrg *cp = ira_copies[n];
1181 1.1 mrg i->n = n + 1;
1182 1.1 mrg return true;
1183 1.1 mrg }
1184 1.3 mrg return false;
1185 1.1 mrg }
1186 1.1 mrg
1187 1.1 mrg /* Loop over all copies. In each iteration, C is set to the next
1188 1.3 mrg copy. ITER is an instance of ira_copy_iterator used to iterate
1189 1.1 mrg the copies. */
1190 1.1 mrg #define FOR_EACH_COPY(C, ITER) \
1191 1.1 mrg for (ira_copy_iter_init (&(ITER)); \
1192 1.1 mrg ira_copy_iter_cond (&(ITER), &(C));)
1193 1.1 mrg
1194 1.3 mrg /* The iterator for object conflicts. */
1196 1.1 mrg typedef struct {
1197 1.1 mrg
1198 1.3 mrg /* TRUE if the conflicts are represented by vector of allocnos. */
1199 1.1 mrg bool conflict_vec_p;
1200 1.1 mrg
1201 1.1 mrg /* The conflict vector or conflict bit vector. */
1202 1.3 mrg void *vec;
1203 1.1 mrg
1204 1.1 mrg /* The number of the current element in the vector (of type
1205 1.3 mrg ira_object_t or IRA_INT_TYPE). */
1206 1.3 mrg unsigned int word_num;
1207 1.1 mrg
1208 1.1 mrg /* The bit vector size. It is defined only if
1209 1.1 mrg OBJECT_CONFLICT_VEC_P is FALSE. */
1210 1.3 mrg unsigned int size;
1211 1.1 mrg
1212 1.3 mrg /* The current bit index of bit vector. It is defined only if
1213 1.1 mrg OBJECT_CONFLICT_VEC_P is FALSE. */
1214 1.1 mrg unsigned int bit_num;
1215 1.1 mrg
1216 1.3 mrg /* The object id corresponding to the 1st bit of the bit vector. It
1217 1.3 mrg is defined only if OBJECT_CONFLICT_VEC_P is FALSE. */
1218 1.1 mrg int base_conflict_id;
1219 1.3 mrg
1220 1.3 mrg /* The word of bit vector currently visited. It is defined only if
1221 1.1 mrg OBJECT_CONFLICT_VEC_P is FALSE. */
1222 1.3 mrg unsigned IRA_INT_TYPE word;
1223 1.1 mrg } ira_object_conflict_iterator;
1224 1.1 mrg
1225 1.1 mrg /* Initialize the iterator I with ALLOCNO conflicts. */
1226 1.3 mrg static inline void
1227 1.1 mrg ira_object_conflict_iter_init (ira_object_conflict_iterator *i,
1228 1.1 mrg ira_object_t obj)
1229 1.3 mrg {
1230 1.1 mrg i->conflict_vec_p = OBJECT_CONFLICT_VEC_P (obj);
1231 1.1 mrg i->vec = OBJECT_CONFLICT_ARRAY (obj);
1232 1.1 mrg i->word_num = 0;
1233 1.3 mrg if (i->conflict_vec_p)
1234 1.1 mrg i->size = i->bit_num = i->base_conflict_id = i->word = 0;
1235 1.1 mrg else
1236 1.1 mrg {
1237 1.1 mrg if (OBJECT_MIN (obj) > OBJECT_MAX (obj))
1238 1.1 mrg i->size = 0;
1239 1.1 mrg else
1240 1.1 mrg i->size = ((OBJECT_MAX (obj) - OBJECT_MIN (obj)
1241 1.1 mrg + IRA_INT_BITS)
1242 1.3 mrg / IRA_INT_BITS) * sizeof (IRA_INT_TYPE);
1243 1.3 mrg i->bit_num = 0;
1244 1.1 mrg i->base_conflict_id = OBJECT_MIN (obj);
1245 1.3 mrg i->word = (i->size == 0 ? 0 : ((IRA_INT_TYPE *) i->vec)[0]);
1246 1.1 mrg }
1247 1.3 mrg }
1248 1.1 mrg
1249 1.3 mrg /* Return TRUE if we have more conflicting allocnos to visit, in which
1250 1.3 mrg case *A is set to the allocno to be visited. Otherwise, return
1251 1.1 mrg FALSE. */
1252 1.1 mrg static inline bool
1253 1.1 mrg ira_object_conflict_iter_cond (ira_object_conflict_iterator *i,
1254 1.1 mrg ira_object_t *pobj)
1255 1.3 mrg {
1256 1.3 mrg ira_object_t obj;
1257 1.3 mrg
1258 1.1 mrg if (i->conflict_vec_p)
1259 1.3 mrg {
1260 1.1 mrg obj = ((ira_object_t *) i->vec)[i->word_num++];
1261 1.1 mrg if (obj == NULL)
1262 1.1 mrg return false;
1263 1.1 mrg }
1264 1.1 mrg else
1265 1.1 mrg {
1266 1.1 mrg unsigned IRA_INT_TYPE word = i->word;
1267 1.3 mrg unsigned int bit_num = i->bit_num;
1268 1.1 mrg
1269 1.1 mrg /* Skip words that are zeros. */
1270 1.1 mrg for (; word == 0; word = ((IRA_INT_TYPE *) i->vec)[i->word_num])
1271 1.3 mrg {
1272 1.3 mrg i->word_num++;
1273 1.1 mrg
1274 1.3 mrg /* If we have reached the end, break. */
1275 1.3 mrg if (i->word_num * sizeof (IRA_INT_TYPE) >= i->size)
1276 1.3 mrg return false;
1277 1.3 mrg
1278 1.1 mrg bit_num = i->word_num * IRA_INT_BITS;
1279 1.3 mrg }
1280 1.3 mrg
1281 1.1 mrg /* Skip bits that are zero. */
1282 1.1 mrg for (; (word & 1) == 0; word >>= 1)
1283 1.3 mrg bit_num++;
1284 1.3 mrg
1285 1.3 mrg obj = ira_object_id_map[bit_num + i->base_conflict_id];
1286 1.3 mrg i->bit_num = bit_num + 1;
1287 1.3 mrg i->word = word >> 1;
1288 1.3 mrg }
1289 1.3 mrg
1290 1.3 mrg *pobj = obj;
1291 1.3 mrg return true;
1292 1.3 mrg }
1293 1.3 mrg
1294 1.3 mrg /* Loop over all objects conflicting with OBJ. In each iteration,
1295 1.3 mrg CONF is set to the next conflicting object. ITER is an instance
1296 1.3 mrg of ira_object_conflict_iterator used to iterate the conflicts. */
1297 1.3 mrg #define FOR_EACH_OBJECT_CONFLICT(OBJ, CONF, ITER) \
1298 1.1 mrg for (ira_object_conflict_iter_init (&(ITER), (OBJ)); \
1299 1.3 mrg ira_object_conflict_iter_cond (&(ITER), &(CONF));)
1300 1.3 mrg
1301 1.3 mrg
1302 1.3 mrg
1304 1.3 mrg /* The function returns TRUE if at least one hard register from ones
1305 1.3 mrg starting with HARD_REGNO and containing value of MODE are in set
1306 1.1 mrg HARD_REGSET. */
1307 1.1 mrg static inline bool
1308 1.3 mrg ira_hard_reg_set_intersection_p (int hard_regno, enum machine_mode mode,
1309 1.3 mrg HARD_REG_SET hard_regset)
1310 1.3 mrg {
1311 1.3 mrg int i;
1312 1.3 mrg
1313 1.1 mrg gcc_assert (hard_regno >= 0);
1314 1.3 mrg for (i = hard_regno_nregs[hard_regno][mode] - 1; i >= 0; i--)
1315 1.3 mrg if (TEST_HARD_REG_BIT (hard_regset, hard_regno + i))
1316 1.3 mrg return true;
1317 1.3 mrg return false;
1318 1.3 mrg }
1319 1.1 mrg
1320 1.1 mrg /* Return number of hard registers in hard register SET. */
1321 1.3 mrg static inline int
1322 1.1 mrg hard_reg_set_size (HARD_REG_SET set)
1323 1.1 mrg {
1324 1.3 mrg int i, size;
1325 1.3 mrg
1326 1.1 mrg for (size = i = 0; i < FIRST_PSEUDO_REGISTER; i++)
1327 1.1 mrg if (TEST_HARD_REG_BIT (set, i))
1328 1.1 mrg size++;
1329 1.1 mrg return size;
1330 1.1 mrg }
1331 1.3 mrg
1332 1.1 mrg /* The function returns TRUE if hard registers starting with
1333 1.1 mrg HARD_REGNO and containing value of MODE are fully in set
1334 1.1 mrg HARD_REGSET. */
1335 1.1 mrg static inline bool
1336 1.1 mrg ira_hard_reg_in_set_p (int hard_regno, enum machine_mode mode,
1337 1.1 mrg HARD_REG_SET hard_regset)
1338 1.1 mrg {
1339 1.1 mrg int i;
1340 1.1 mrg
1341 1.1 mrg ira_assert (hard_regno >= 0);
1342 1.3 mrg for (i = hard_regno_nregs[hard_regno][mode] - 1; i >= 0; i--)
1343 1.1 mrg if (!TEST_HARD_REG_BIT (hard_regset, hard_regno + i))
1344 1.1 mrg return false;
1345 1.3 mrg return true;
1346 1.1 mrg }
1347 1.1 mrg
1348 1.1 mrg
1349 1.1 mrg
1351 1.1 mrg /* To save memory we use a lazy approach for allocation and
1352 1.3 mrg initialization of the cost vectors. We do this only when it is
1353 1.3 mrg really necessary. */
1354 1.1 mrg
1355 1.1 mrg /* Allocate cost vector *VEC for hard registers of ACLASS and
1356 1.1 mrg initialize the elements by VAL if it is necessary */
1357 1.1 mrg static inline void
1358 1.3 mrg ira_allocate_and_set_costs (int **vec, reg_class_t aclass, int val)
1359 1.3 mrg {
1360 1.1 mrg int i, *reg_costs;
1361 1.3 mrg int len;
1362 1.1 mrg
1363 1.1 mrg if (*vec != NULL)
1364 1.1 mrg return;
1365 1.1 mrg *vec = reg_costs = ira_allocate_cost_vector (aclass);
1366 1.1 mrg len = ira_class_hard_regs_num[(int) aclass];
1367 1.3 mrg for (i = 0; i < len; i++)
1368 1.3 mrg reg_costs[i] = val;
1369 1.1 mrg }
1370 1.1 mrg
1371 1.1 mrg /* Allocate cost vector *VEC for hard registers of ACLASS and copy
1372 1.3 mrg values of vector SRC into the vector if it is necessary */
1373 1.3 mrg static inline void
1374 1.1 mrg ira_allocate_and_copy_costs (int **vec, enum reg_class aclass, int *src)
1375 1.3 mrg {
1376 1.1 mrg int len;
1377 1.1 mrg
1378 1.1 mrg if (*vec != NULL || src == NULL)
1379 1.1 mrg return;
1380 1.1 mrg *vec = ira_allocate_cost_vector (aclass);
1381 1.3 mrg len = ira_class_hard_regs_num[aclass];
1382 1.1 mrg memcpy (*vec, src, sizeof (int) * len);
1383 1.1 mrg }
1384 1.3 mrg
1385 1.1 mrg /* Allocate cost vector *VEC for hard registers of ACLASS and add
1386 1.1 mrg values of vector SRC into the vector if it is necessary */
1387 1.1 mrg static inline void
1388 1.1 mrg ira_allocate_and_accumulate_costs (int **vec, enum reg_class aclass, int *src)
1389 1.1 mrg {
1390 1.1 mrg int i, len;
1391 1.3 mrg
1392 1.3 mrg if (src == NULL)
1393 1.3 mrg return;
1394 1.1 mrg len = ira_class_hard_regs_num[aclass];
1395 1.3 mrg if (*vec == NULL)
1396 1.1 mrg {
1397 1.1 mrg *vec = ira_allocate_cost_vector (aclass);
1398 1.1 mrg memset (*vec, 0, sizeof (int) * len);
1399 1.1 mrg }
1400 1.1 mrg for (i = 0; i < len; i++)
1401 1.1 mrg (*vec)[i] += src[i];
1402 1.1 mrg }
1403 1.3 mrg
1404 1.3 mrg /* Allocate cost vector *VEC for hard registers of ACLASS and copy
1405 1.1 mrg values of vector SRC into the vector or initialize it by VAL (if
1406 1.1 mrg SRC is null). */
1407 1.1 mrg static inline void
1408 1.1 mrg ira_allocate_and_set_or_copy_costs (int **vec, enum reg_class aclass,
1409 1.1 mrg int val, int *src)
1410 1.1 mrg {
1411 1.1 mrg int i, *reg_costs;
1412 1.1 mrg int len;
1413 1.3 mrg
1414 1.3 mrg if (*vec != NULL)
1415 1.3 mrg return;
1416 *vec = reg_costs = ira_allocate_cost_vector (aclass);
1417 len = ira_class_hard_regs_num[aclass];
1418 if (src != NULL)
1419 memcpy (reg_costs, src, sizeof (int) * len);
1420 else
1421 {
1422 for (i = 0; i < len; i++)
1423 reg_costs[i] = val;
1424 }
1425 }
1426
1427 extern rtx ira_create_new_reg (rtx);
1428 extern int first_moveable_pseudo, last_moveable_pseudo;
1429