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