OSDN Git Service

d83e992e32023e1213d1a807e7724c42265d20d2
[pf3gnuchains/gcc-fork.git] / gcc / doc / cfg.texi
1 @c -*-texinfo-*-
2 @c Copyright (C) 2001, 2003, 2004 Free Software Foundation, Inc.
3 @c This is part of the GCC manual.
4 @c For copying conditions, see the file gcc.texi.
5
6 @c ---------------------------------------------------------------------
7 @c Control Flow Graph
8 @c ---------------------------------------------------------------------
9
10 @node Control Flow
11 @chapter Control Flow Graph
12 @cindex CFG, Control Flow Graph
13 @findex basic-block.h
14
15 A control flow graph (CFG) is a data structure built on top of the
16 intermediate code representation (the RTL or @code{tree} instruction
17 stream) abstracting the control flow behavior of a function that is
18 being compiled.  The CFG is a directed graph where the vertices
19 represent basic blocks and edges represent possible transfer of
20 control flow from one basic block to another.  The data structures
21 used to represent the control flow graph are defined in
22 @file{basic-block.h}.
23
24 @menu
25 * Basic Blocks::           The definition and representation of basic blocks.
26 * Edges::                  Types of edges and their representation.
27 * Profile information::    Representation of frequencies and probabilities.
28 * Maintaining the CFG::    Keeping the control flow graph and up to date.
29 * Liveness information::   Using and maintaining liveness information.
30 @end menu
31
32
33 @node Basic Blocks
34 @section Basic Blocks
35
36 @cindex basic block
37 @findex basic_block
38 A basic block is a straight-line sequence of code with only one entry
39 point and only one exit.  In GCC, basic blocks are represented using
40 the @code{basic_block} data type.
41
42 @findex next_bb, prev_bb, FOR_EACH_BB
43 Two pointer members of the @code{basic_block} structure are the
44 pointers @code{next_bb} and @code{prev_bb}.  These are used to keep
45 doubly linked chain of basic blocks in the same order as the
46 underlying instruction stream.  The chain of basic blocks is updated
47 transparently by the provided API for manipulating the CFG.  The macro
48 @code{FOR_EACH_BB} can be used to visit all the basic blocks in
49 lexicographical order.  Dominator traversals are also possible using
50 @code{walk_dominator_tree}.  Given two basic blocks A and B, block A
51 dominates block B if A is @emph{always} executed before B.
52
53 @findex BASIC_BLOCK
54 The @code{BASIC_BLOCK} array contains all basic blocks in an
55 unspecified order.  Each @code{basic_block} structure has a field
56 that holds a unique integer identifier @code{index} that is the
57 index of the block in the @code{BASIC_BLOCK} array.
58 The total number of basic blocks in the function is
59 @code{n_basic_blocks}.  Both the basic block indices and
60 the total number of basic blocks may vary during the compilation
61 process, as passes reorder, create, duplicate, and destroy basic
62 blocks.  The index for any block should never be greater than
63 @code{last_basic_block}.
64
65 @findex ENTRY_BLOCK_PTR, EXIT_BLOCK_PTR
66 Special basic blocks represent possible entry and exit points of a
67 function.  These blocks are called @code{ENTRY_BLOCK_PTR} and
68 @code{EXIT_BLOCK_PTR}.  These blocks do not contain any code, and are
69 not elements of the @code{BASIC_BLOCK} array.  Therefore they have
70 been assigned unique, negative index numbers.
71
72 Each @code{basic_block} also contains pointers to the first
73 instruction (the @dfn{head}) and the last instruction (the @dfn{tail})
74 or @dfn{end} of the instruction stream contained in a basic block.  In
75 fact, since the @code{basic_block} data type is used to represent
76 blocks in both major intermediate representations of GCC (@code{tree}
77 and RTL), there are pointers to the head and end of a basic block for
78 both representations.
79
80 @findex NOTE_INSN_BASIC_BLOCK, CODE_LABEL, notes
81 For RTL, these pointers are @code{rtx head, end}.  In the RTL function
82 representation, the head pointer always points either to a
83 @code{NOTE_INSN_BASIC_BLOCK} or to a @code{CODE_LABEL}, if present.
84 In the RTL representation of a function, the instruction stream
85 contains not only the ``real'' instructions, but also @dfn{notes}.
86 Any function that moves or duplicates the basic blocks needs
87 to take care of updating of these notes.  Many of these notes expect
88 that the instruction stream consists of linear regions, making such
89 updates difficult.   The @code{NOTE_INSN_BASIC_BLOCK} note is the only
90 kind of note that may appear in the instruction stream contained in a
91 basic block.  The instruction stream of a basic block always follows a
92 @code{NOTE_INSN_BASIC_BLOCK},  but zero or more @code{CODE_LABEL}
93 nodes can precede the block note.   A basic block ends by control flow
94 instruction or last instruction before following @code{CODE_LABEL} or
95 @code{NOTE_INSN_BASIC_BLOCK}.  A @code{CODE_LABEL} cannot appear in
96 the instruction stream of a basic block.
97
98 @findex can_fallthru
99 @cindex table jump
100 In addition to notes, the jump table vectors are also represented as
101 ``pseudo-instructions'' inside the insn stream.  These vectors never
102 appear in the basic block and should always be placed just after the
103 table jump instructions referencing them.  After removing the
104 table-jump it is often difficult to eliminate the code computing the
105 address and referencing the vector, so cleaning up these vectors is
106 postponed until after liveness analysis.   Thus the jump table vectors
107 may appear in the insn stream unreferenced and without any purpose.
108 Before any edge is made @dfn{fall-thru}, the existence of such
109 construct in the way needs to be checked by calling
110 @code{can_fallthru} function.
111
112 @cindex block statement iterators
113 For the @code{tree} representation, the head and end of the basic block
114 are being pointed to by the @code{stmt_list} field, but this special
115 @code{tree} should never be referenced directly.  Instead, at the tree
116 level abstract containers and iterators are used to access statements
117 and expressions in basic blocks.  These iterators are called
118 @dfn{block statement iterators} (BSIs).  Grep for @code{^bsi}
119 in the various @file{tree-*} files.
120 The following snippet will pretty-print all the statements of the
121 program in the GIMPLE representation.
122
123 @smallexample
124 FOR_EACH_BB (bb)
125   @{
126      block_stmt_iterator si;
127
128      for (si = bsi_start (bb); !bsi_end_p (si); bsi_next (&si))
129        @{
130           tree stmt = bsi_stmt (si);
131           print_generic_stmt (stderr, stmt, 0);
132        @}
133   @}
134 @end smallexample
135
136
137 @node Edges
138 @section Edges
139
140 @cindex edge in the flow graph
141 @findex edge
142 Edges represent possible control flow transfers from the end of some
143 basic block A to the head of another basic block B.  We say that A is
144 a predecessor of B, and B is a successor of A.  Edges are represented
145 in GCC with the @code{edge} data type.  Each @code{edge} acts as a
146 link between two basic blocks: the @code{src} member of an edge
147 points to the predecessor basic block of the @code{dest} basic block.
148 The members @code{pred} and @code{succ} of the @code{basic_block} data
149 type point to singly linked lists of edges to the predecessors and
150 successors of the block.  The edges are linked via the
151 @code{succ_next} and @code{pred_next} members of the @code{edge} data
152 type.
153
154 @findex fall-thru
155 There are various reasons why control flow may transfer from one block
156 to another.  One possibility is that some instruction, for example a
157 @code{CODE_LABEL}, in a linearized instruction stream just always
158 starts a new basic block.  In this case a @dfn{fall-thru} edge links
159 the basic block to the first following basic block.  But there are
160 several other reasons why edges may be created.  The @code{flags}
161 field of the @code{edge} data type is used to store information
162 about the type of edge we are dealing with.  Each edge is of one of
163 the following types:
164
165 @table @emph
166 @item jump
167 No type flags are set for edges corresponding to jump instructions.
168 These edges are used for unconditional or conditional jumps and in
169 RTL also for table jumps.  They are the easiest to manipulate as they
170 may be freely redirected when the flow graph is not in SSA form.
171
172 @item fall-thru
173 @findex EDGE_FALLTHRU, force_nonfallthru
174 Fall-thru edges are present in case where the basic block may continue
175 execution to the following one without branching.  These edges have
176 the @code{EDGE_FALLTHRU} flag set. Unlike other types of edges, these
177 edges must come into the basic block immediately following in the
178 instruction stream.  The function @code{force_nonfallthru} is
179 available to insert an unconditional jump in the case that redirection
180 is needed.  Note that this may require creation of a new basic block.
181
182 @item exception handling
183 @cindex exception handling
184 @findex EDGE_ABNORMAL, EDGE_EH
185 Exception handling edges represent possible control transfers from a
186 trapping instruction to an exception handler.  The definition of
187 ``trapping'' varies.  In C++, only function calls can throw, but for
188 Java, exceptions like division by zero or segmentation fault are
189 defined and thus each instruction possibly throwing this kind of
190 exception needs to be handled as control flow instruction.  Exception
191 edges have the @code{EDGE_ABNORMAL} and @code{EDGE_EH} flags set.
192
193 @findex purge_dead_edges
194 When updating the instruction stream it is easy to change possibly
195 trapping instruction to non-trapping, by simply removing the exception
196 edge. The opposite conversion is difficult, but should not happen
197 anyway.  The edges can be eliminated via @code{purge_dead_edges} call.
198
199 @findex REG_EH_REGION, EDGE_ABNORMAL_CALL
200 In the RTL representation, the destination of an exception edge is
201 specified by @code{REG_EH_REGION} note attached to the insn.
202 In case of a trapping call the @code{EDGE_ABNORMAL_CALL} flag is set
203 too.  In the @code{tree} representation, this extra flag is not set.
204
205 @findex may_trap_p, tree_could_trap_p
206 In the RTL representation, the predicate @code{may_trap_p} may be used
207 to check whether instruction still may trap or not.  For the tree
208 representation, the @code{tree_could_trap_p} predicate is available,
209 but this predicate only checks for possible memory traps, as in
210 dereferencing an invalid pointer location.
211
212
213 @item sibling calls
214 @cindex sibling call
215 @findex EDGE_ABNORMAL, EDGE_SIBCALL
216 Sibling calls or tail calls terminate the function in a non-standard
217 way and thus an edge to the exit must be present.
218 @code{EDGE_SIBCALL} and @code{EDGE_ABNORMAL} are set in such case.
219 These edges only exist in the RTL representation.
220
221 @item computed jumps
222 @cindex computed jump
223 @findex EDGE_ABNORMAL
224 Computed jumps contain edges to all labels in the function referenced
225 from the code.  All those edges have @code{EDGE_ABNORMAL} flag set.
226 The edges used to represent computed jumps often cause compile time
227 performance problems, since functions consisting of many taken labels
228 and many computed jumps may have @emph{very} dense flow graphs, so
229 these edges need to be handled with special care.  During the earlier
230 stages of the compilation process, GCC tries to avoid such dense flow
231 graphs by factoring computed jumps.  For example, given the following
232 series of jumps,
233
234 @smallexample
235   goto *x;
236   [ ... ]
237
238   goto *x;
239   [ ... ]
240
241   goto *x;
242   [ ... ]
243 @end smallexample
244
245 @noindent
246 factoring the computed jumps results in the following code sequence
247 which has a much simpler flow graph:
248
249 @smallexample
250   goto y;
251   [ ... ]
252
253   goto y;
254   [ ... ]
255
256   goto y;
257   [ ... ]
258
259 y:
260   goto *x;
261 @end smallexample
262
263 However, the classic problem with this transformation is that it has a
264 runtime cost in there resulting code: An extra jump.  Therefore, the
265 computed jumps are un-factored in the later passes of the compiler.
266 Be aware of that when you work on passes in that area.  There have
267 been numerous examples already where the compile time for code with
268 unfactored computed jumps caused some serious headaches.
269
270 @item nonlocal goto handlers
271 @cindex nonlocal goto handler
272 @findex EDGE_ABNORMAL, EDGE_ABNORMAL_CALL
273 GCC allows nested functions to return into caller using a @code{goto}
274 to a label passed to as an argument to the callee.  The labels passed
275 to nested functions contain special code to cleanup after function
276 call.  Such sections of code are referred to as ``nonlocal goto
277 receivers''.  If a function contains such nonlocal goto receivers, an
278 edge from the call to the label is created with the
279 @code{EDGE_ABNORMAL} and @code{EDGE_ABNORMAL_CALL} flags set.
280
281 @item function entry points
282 @cindex function entry point, alternate function entry point
283 @findex LABEL_ALTERNATE_NAME
284 By definition, execution of function starts at basic block 0, so there
285 is always an edge from the @code{ENTRY_BLOCK_PTR} to basic block 0.
286 There is no @code{tree} representation for alternate entry points at
287 this moment.  In RTL, alternate entry points are specified by
288 @code{CODE_LABEL} with @code{LABEL_ALTERNATE_NAME} defined.  This
289 feature is currently used for multiple entry point prologues and is
290 limited to post-reload passes only.  This can be used by back-ends to
291 emit alternate prologues for functions called from different contexts.
292 In future full support for multiple entry functions defined by Fortran
293 90 needs to be implemented.
294
295 @item function exits
296 In the pre-reload representation a function terminates after the last
297 instruction in the insn chain and no explicit return instructions are
298 used.  This corresponds to the fall-thru edge into exit block.  After
299 reload, optimal RTL epilogues are used that use explicit (conditional)
300 return instructions that are represented by edges with no flags set.
301
302 @end table
303
304
305 @node Profile information
306 @section Profile information
307
308 @cindex profile representation
309 In many cases a compiler must make a choice whether to trade speed in
310 one part of code for speed in another, or to trade code size for code
311 speed.  In such cases it is useful to know information about how often
312 some given block will be executed.  That is the purpose for
313 maintaining profile within the flow graph.
314 GCC can handle profile information obtained through @dfn{profile
315 feedback}, but it can also  estimate branch probabilities based on
316 statics and heuristics.
317
318 @cindex profile feedback
319 The feedback based profile is produced by compiling the program with
320 instrumentation, executing it on a train run and reading the numbers
321 of executions of basic blocks and edges back to the compiler while
322 re-compiling the program to produce the final executable.  This method
323 provides very accurate information about where a program spends most
324 of its time on the train run.  Whether it matches the average run of
325 course depends on the choice of train data set, but several studies
326 have shown that the behavior of a program usually changes just
327 marginally over different data sets.
328
329 @cindex Static profile estimation
330 @cindex branch prediction
331 @findex predict.def
332 When profile feedback is not available, the compiler may be asked to
333 attempt to predict the behavior of each branch in the program using a
334 set of heuristics (see @file{predict.def} for details) and compute
335 estimated frequencies of each basic block by propagating the
336 probabilities over the graph.
337
338 @findex frequency, count, BB_FREQ_BASE
339 Each @code{basic_block} contains two integer fields to represent
340 profile information: @code{frequency} and @code{count}.  The
341 @code{frequency} is an estimation how often is basic block executed
342 within a function.  It is represented as an integer scaled in the
343 range from 0 to @code{BB_FREQ_BASE}.  The most frequently executed
344 basic block in function is initially set to @code{BB_FREQ_BASE} and
345 the rest of frequencies are scaled accordingly.  During optimization,
346 the frequency of the most frequent basic block can both decrease (for
347 instance by loop unrolling) or grow (for instance by cross-jumping
348 optimization), so scaling sometimes has to be performed multiple
349 times.
350
351 @findex gcov_type
352 The @code{count} contains hard-counted numbers of execution measured
353 during training runs and is nonzero only when profile feedback is
354 available.  This value is represented as the host's widest integer
355 (typically a 64 bit integer) of the special type @code{gcov_type}.
356
357 Most optimization passes can use only the frequency information of a
358 basic block, but a few passes may want to know hard execution counts.
359 The frequencies should always match the counts after scaling, however
360 during updating of the profile information numerical error may
361 accumulate into quite large errors.
362
363 @findex REG_BR_PROB_BASE, EDGE_FREQUENCY
364 Each edge also contains a branch probability field: an integer in the
365 range from 0 to @code{REG_BR_PROB_BASE}.  It represents probability of
366 passing control from the end of the @code{src} basic block to the
367 @code{dest} basic block, i.e.@: the probability that control will flow
368 along this edge.   The @code{EDGE_FREQUENCY} macro is available to
369 compute how frequently a given edge is taken. There is a @code{count}
370 field for each edge as well, representing same information as for a
371 basic block.
372
373 The basic block frequencies are not represented in the instruction
374 stream, but in the RTL representation the edge frequencies are
375 represented for conditional jumps (via the @code{REG_BR_PROB}
376 macro) since they are used when instructions are output to the
377 assembly file and the flow graph is no longer maintained.
378
379 @cindex reverse probability
380 The probability that control flow arrives via a given edge to its
381 destination basic block is called @dfn{reverse probability} and is not
382 directly represented, but it may be easily computed from frequencies
383 of basic blocks.
384
385 @findex redirect_edge_and_branch
386 Updating profile information is a delicate task that can unfortunately
387 not be easily integrated with the CFG manipulation API.  Many of the
388 functions and hooks to modify the CFG, such as
389 @code{redirect_edge_and_branch}, do not have enough information to
390 easily update the profile, so updating it is in the majority of cases
391 left up to the caller.  It is difficult to uncover bugs in the profile
392 updating code, because they manifest themselves only by producing
393 worse code, and checking profile consistency is not possible because
394 of numeric error accumulation.  Hence special attention needs to be
395 given to this issue in each pass that modifies the CFG.
396
397 @findex REG_BR_PROB_BASE, BB_FREQ_BASE, count
398 It is important to point out that @code{REG_BR_PROB_BASE} and
399 @code{BB_FREQ_BASE} are both set low enough to be possible to compute
400 second power of any frequency or probability in the flow graph, it is
401 not possible to even square the @code{count} field, as modern CPUs are
402 fast enough to execute $2^32$ operations quickly.
403
404
405 @node Maintaining the CFG
406 @section Maintaining the CFG
407 @findex cfghooks.h
408
409 An important task of each compiler pass is to keep both the control
410 flow graph and all profile information up-to-date.  Reconstruction of
411 the control flow graph after each pass is not an option, since it may be
412 very expensive and lost profile information cannot be reconstructed at
413 all.
414
415 GCC has two major intermediate representations, and both use the
416 @code{basic_block} and @code{edge} data types to represent control
417 flow.  Both representations share as much of the CFG maintenance code
418 as possible.  For each representation, a set of @dfn{hooks} is defined
419 so that each representation can provide its own implementation of CFG
420 manipulation routines when necessary.  These hooks are defined in
421 @file{cfghooks.h}.  There are hooks for almost all common CFG
422 manipulations, including block splitting and merging, edge redirection
423 and creating and deleting basic blocks.  These hooks should provide
424 everything you need to maintain and manipulate the CFG in both the RTL
425 and @code{tree} representation.
426
427 At the moment, the basic block boundaries are maintained transparently
428 when modifying instructions, so there rarely is a need to move them
429 manually (such as in case someone wants to output instruction outside
430 basic block explicitly).
431 Often the CFG may be better viewed as integral part of instruction
432 chain, than structure built on the top of it.  However, in principle
433 the control flow graph for the @code{tree} representation is
434 @emph{not} an integral part of the representation, in that a function
435 tree may be expanded without first building a  flow graph for the
436 @code{tree} representation at all.  This happens when compiling
437 without any @code{tree} optimization enabled.  When the @code{tree}
438 optimizations are enabled and the instruction stream is rewritten in
439 SSA form, the CFG is very tightly coupled with the instruction stream.
440 In particular, statement insertion and removal has to be done with
441 care.  In fact, the whole @code{tree} representation can not be easily
442 used or maintained without proper maintenance of the CFG
443 simultaneously.
444
445 @findex BLOCK_FOR_INSN, bb_for_stmt
446 In the RTL representation, each instruction has a
447 @code{BLOCK_FOR_INSN} value that represents pointer to the basic block
448 that contains the instruction.  In the @code{tree} representation, the
449 function @code{bb_for_stmt} returns a pointer to the basic block
450 containing the queried statement.
451
452 @cindex block statement iterators
453 When changes need to be applied to a function in its @code{tree}
454 representation, @dfn{block statement iterators} should be used.  These
455 iterators provide an integrated abstraction of the flow graph and the
456 instruction stream.  Block statement iterators iterators are
457 constructed using the @code{block_stmt_iterator} data structure and
458 several modifier are available, including the following:
459
460 @table @code
461 @item bsi_start
462 @findex bsi_start
463 This function initializes a @code{block_stmt_iterator} that points to
464 the first non-empty statement in a basic block.
465
466 @item bsi_last
467 @findex bsi_last
468 This function initializes a @code{block_stmt_iterator} that points to
469 the last statement in a basic block.
470
471 @item bsi_end_p
472 @findex bsi_end_p
473 This predicate is @code{true} if a @code{block_stmt_iterator}
474 represents the end of a basic block.
475
476 @item bsi_next
477 @findex bsi_next
478 This function takes a @code{block_stmt_iterator} and makes it point to
479 its successor.
480
481 @item bsi_prev
482 @item bsi_prev
483 This function takes a @code{block_stmt_iterator} and makes it point to
484 its predecessor.
485
486 @item bsi_insert_after
487 @findex bsi_insert_after
488 This function inserts a statement after the @code{block_stmt_iterator}
489 passed in.  The final parameter determines whether the statement
490 iterator is updated to point to the newly inserted statement, or left
491 pointing to the original statement.
492
493 @item bsi_insert_before
494 @findex bsi_insert_before
495 This function inserts a statement before the @code{block_stmt_iterator}
496 passed in.  The final parameter determines whether the statement
497 iterator is updated to point to the newly inserted statement, or left
498 pointing to the original  statement.
499
500 @item bsi_remove
501 This function removes the @code{block_stmt_iterator} passed in and
502 rechains the remaining statements in a basic block, if any.
503
504 @end table
505
506 @findex BB_HEAD, BB_END
507 In the RTL representation, the macros @code{BB_HEAD} and @code{BB_END}
508 may be used to get the head and end @code{rtx} of a basic block.  No
509 abstract iterators are defined for traversing the insn chain, but you
510 can just use @code{NEXT_INSN} and @code{PREV_INSN} instead.  See
511 @xref{Insns}.
512
513 @findex purge_dead_edges
514 Usually a code manipulating pass simplifies the instruction stream and
515 the flow of control, possibly eliminating some edges.  This may for
516 example happen when a conditional jump is replaced with an
517 unconditional jump, but also when simplifying possibly trapping
518 instruction to non-trapping while compiling Java.  Updating of edges
519 is not transparent and each optimization pass is required to do so
520 manually.  However only few cases occur in practice.  The pass may
521 call @code{purge_dead_edges} on a given basic block to remove
522 superfluous edges, if any.
523
524 @findex redirect_edge_and_branch, redirect_jump
525 Another common scenario is redirection of branch instructions, but
526 this is best modeled as redirection of edges in the control flow graph
527 and thus use of @code{redirect_edge_and_branch} is preferred over more
528 low level functions, such as @code{redirect_jump} that operate on RTL
529 chain only.  The CFG hooks defined in @file{cfghooks.h} should provide
530 the complete API required for manipulating and maintaining the CFG.
531
532 @findex find_sub_basic_blocks, split_block
533 It is also possible that a pass has to insert control flow instruction
534 into the middle of a basic block, thus creating an entry point in the
535 middle of the basic block, which is impossible by definition: The
536 block must be split to make sure it only has one entry point, i.e.@: the
537 head of the basic block.  In the RTL representation, the
538 @code{find_sub_basic_blocks} may be used to split existing basic block
539 and add necessary edges.  The CFG hook @code{split_block} may be used
540 when an instruction in the middle of a basic block has to become the
541 target of a jump or branch instruction.
542
543 @findex insert_insn_on_edge, commit_edge_insertions
544 @findex bsi_insert_on_edge, bsi_commit_edge_inserts
545 @cindex edge splitting
546 For a global optimizer, a common operation is to split edges in the
547 flow graph and insert instructions on them.  In the RTL
548 representation, this can be easily done using the
549 @code{insert_insn_on_edge} function that emits an instruction
550 ``on the edge'', caching it for a later @code{commit_edge_insertions}
551 call that will take care of moving the inserted instructions off the
552 edge into the instruction stream contained in a basic block.  This
553 includes the creation of new basic blocks where needed.  In the
554 @code{tree} representation, the equivalent functions are
555 @code{bsi_insert_on_edge} which inserts a block statement
556 iterator on an edge, and @code{bsi_commit_edge_inserts} which flushes
557 the instruction to actual instruction stream.
558
559 While debugging the optimization pass, an @code{verify_flow_info}
560 function may be useful to find bugs in the control flow graph updating
561 code.
562
563 Note that at present, the representation of control flow in the
564 @code{tree} representation is discarded before expanding to RTL.
565 Long term the CFG should be maintained and ``expanded'' to the
566 RTL representation along with the function @code{tree} itself.
567
568
569 @node Liveness information
570 @section Liveness information
571 @cindex Liveness representation
572 Liveness information is useful to determine whether some register is
573 ``live'' at given point of program, i.e.@: that it contains a value that
574 may be used at a later point in the program.  This information is
575 used, for instance, during register allocation, as the pseudo
576 registers only need to be assigned to a unique hard register or to a
577 stack slot if they are live.  The hard registers and stack slots may
578 be freely reused for other values when a register is dead.
579
580 @findex REG_DEAD, REG_UNUSED
581 The liveness information is stored partly in the RTL instruction
582 stream and partly in the flow graph.  Local information is stored in
583 the instruction stream:
584 Each instruction may contain @code{REG_DEAD} notes representing that
585 the value of a given register is no longer needed, or
586 @code{REG_UNUSED} notes representing that the value computed by the
587 instruction is never used.  The second is useful for instructions
588 computing multiple values at once.
589
590 @findex global_live_at_start, global_live_at_end
591 Global liveness information is stored in the control flow graph.
592 Each basic block contains two bitmaps, @code{global_live_at_start} and
593 @code{global_live_at_end} representing liveness of each register at
594 the entry and exit of the basic block.  The file @code{flow.c}
595 contains functions to compute liveness of each register at any given
596 place in the instruction stream using this information.
597
598 @findex BB_DIRTY, clear_bb_flags, update_life_info_in_dirty_blocks
599 Liveness is expensive to compute and thus it is desirable to keep it
600 up to date during code modifying passes.  This can be easily
601 accomplished using the @code{flags} field of a basic block.  Functions
602 modifying the instruction stream automatically set the @code{BB_DIRTY}
603 flag of a modifies basic block, so the pass may simply
604 use@code{clear_bb_flags} before doing any modifications and then ask
605 the data flow module to have liveness updated via the
606 @code{update_life_info_in_dirty_blocks} function.
607
608 This scheme works reliably as long as no control flow graph
609 transformations are done.  The task of updating liveness after control
610 flow graph changes is more difficult as normal iterative data flow
611 analysis may produce invalid results or get into an infinite cycle
612 when the initial solution is not below the desired one.  Only simple
613 transformations, like splitting basic blocks or inserting on edges,
614 are safe, as functions to implement them already know how to update
615 liveness information locally.