Control-Flow.html 6.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128
  1. <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
  2. <html>
  3. <!-- Copyright (C) 1988-2017 Free Software Foundation, Inc.
  4. Permission is granted to copy, distribute and/or modify this document
  5. under the terms of the GNU Free Documentation License, Version 1.3 or
  6. any later version published by the Free Software Foundation; with the
  7. Invariant Sections being "Funding Free Software", the Front-Cover
  8. Texts being (a) (see below), and with the Back-Cover Texts being (b)
  9. (see below). A copy of the license is included in the section entitled
  10. "GNU Free Documentation License".
  11. (a) The FSF's Front-Cover Text is:
  12. A GNU Manual
  13. (b) The FSF's Back-Cover Text is:
  14. You have freedom to copy and modify this GNU Manual, like GNU
  15. software. Copies published by the Free Software Foundation raise
  16. funds for GNU development. -->
  17. <!-- Created by GNU Texinfo 5.2, http://www.gnu.org/software/texinfo/ -->
  18. <head>
  19. <title>GNU Compiler Collection (GCC) Internals: Control Flow</title>
  20. <meta name="description" content="GNU Compiler Collection (GCC) Internals: Control Flow">
  21. <meta name="keywords" content="GNU Compiler Collection (GCC) Internals: Control Flow">
  22. <meta name="resource-type" content="document">
  23. <meta name="distribution" content="global">
  24. <meta name="Generator" content="makeinfo">
  25. <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
  26. <link href="index.html#Top" rel="start" title="Top">
  27. <link href="Option-Index.html#Option-Index" rel="index" title="Option Index">
  28. <link href="index.html#SEC_Contents" rel="contents" title="Table of Contents">
  29. <link href="index.html#Top" rel="up" title="Top">
  30. <link href="Basic-Blocks.html#Basic-Blocks" rel="next" title="Basic Blocks">
  31. <link href="Reading-RTL.html#Reading-RTL" rel="prev" title="Reading RTL">
  32. <style type="text/css">
  33. <!--
  34. a.summary-letter {text-decoration: none}
  35. blockquote.smallquotation {font-size: smaller}
  36. div.display {margin-left: 3.2em}
  37. div.example {margin-left: 3.2em}
  38. div.indentedblock {margin-left: 3.2em}
  39. div.lisp {margin-left: 3.2em}
  40. div.smalldisplay {margin-left: 3.2em}
  41. div.smallexample {margin-left: 3.2em}
  42. div.smallindentedblock {margin-left: 3.2em; font-size: smaller}
  43. div.smalllisp {margin-left: 3.2em}
  44. kbd {font-style:oblique}
  45. pre.display {font-family: inherit}
  46. pre.format {font-family: inherit}
  47. pre.menu-comment {font-family: serif}
  48. pre.menu-preformatted {font-family: serif}
  49. pre.smalldisplay {font-family: inherit; font-size: smaller}
  50. pre.smallexample {font-size: smaller}
  51. pre.smallformat {font-family: inherit; font-size: smaller}
  52. pre.smalllisp {font-size: smaller}
  53. span.nocodebreak {white-space:nowrap}
  54. span.nolinebreak {white-space:nowrap}
  55. span.roman {font-family:serif; font-weight:normal}
  56. span.sansserif {font-family:sans-serif; font-weight:normal}
  57. ul.no-bullet {list-style: none}
  58. -->
  59. </style>
  60. </head>
  61. <body lang="en" bgcolor="#FFFFFF" text="#000000" link="#0000FF" vlink="#800080" alink="#FF0000">
  62. <a name="Control-Flow"></a>
  63. <div class="header">
  64. <p>
  65. Next: <a href="Loop-Analysis-and-Representation.html#Loop-Analysis-and-Representation" accesskey="n" rel="next">Loop Analysis and Representation</a>, Previous: <a href="RTL.html#RTL" accesskey="p" rel="prev">RTL</a>, Up: <a href="index.html#Top" accesskey="u" rel="up">Top</a> &nbsp; [<a href="index.html#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="Option-Index.html#Option-Index" title="Index" rel="index">Index</a>]</p>
  66. </div>
  67. <hr>
  68. <a name="Control-Flow-Graph"></a>
  69. <h2 class="chapter">14 Control Flow Graph</h2>
  70. <a name="index-CFG_002c-Control-Flow-Graph"></a>
  71. <a name="index-basic_002dblock_002eh"></a>
  72. <p>A control flow graph (CFG) is a data structure built on top of the
  73. intermediate code representation (the RTL or <code>GIMPLE</code> instruction
  74. stream) abstracting the control flow behavior of a function that is
  75. being compiled. The CFG is a directed graph where the vertices
  76. represent basic blocks and edges represent possible transfer of
  77. control flow from one basic block to another. The data structures
  78. used to represent the control flow graph are defined in
  79. <samp>basic-block.h</samp>.
  80. </p>
  81. <p>In GCC, the representation of control flow is maintained throughout
  82. the compilation process, from constructing the CFG early in
  83. <code>pass_build_cfg</code> to <code>pass_free_cfg</code> (see <samp>passes.def</samp>).
  84. The CFG takes various different modes and may undergo extensive
  85. manipulations, but the graph is always valid between its construction
  86. and its release. This way, transfer of information such as data flow,
  87. a measured profile, or the loop tree, can be propagated through the
  88. passes pipeline, and even from <code>GIMPLE</code> to <code>RTL</code>.
  89. </p>
  90. <p>Often the CFG may be better viewed as integral part of instruction
  91. chain, than structure built on the top of it. Updating the compiler&rsquo;s
  92. intermediate representation for instructions can not be easily done
  93. without proper maintenance of the CFG simultaneously.
  94. </p>
  95. <table class="menu" border="0" cellspacing="0">
  96. <tr><td align="left" valign="top">&bull; <a href="Basic-Blocks.html#Basic-Blocks" accesskey="1">Basic Blocks</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">The definition and representation of basic blocks.
  97. </td></tr>
  98. <tr><td align="left" valign="top">&bull; <a href="Edges.html#Edges" accesskey="2">Edges</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">Types of edges and their representation.
  99. </td></tr>
  100. <tr><td align="left" valign="top">&bull; <a href="Profile-information.html#Profile-information" accesskey="3">Profile information</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">Representation of frequencies and probabilities.
  101. </td></tr>
  102. <tr><td align="left" valign="top">&bull; <a href="Maintaining-the-CFG.html#Maintaining-the-CFG" accesskey="4">Maintaining the CFG</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">Keeping the control flow graph and up to date.
  103. </td></tr>
  104. <tr><td align="left" valign="top">&bull; <a href="Liveness-information.html#Liveness-information" accesskey="5">Liveness information</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">Using and maintaining liveness information.
  105. </td></tr>
  106. </table>
  107. <hr>
  108. <div class="header">
  109. <p>
  110. Next: <a href="Loop-Analysis-and-Representation.html#Loop-Analysis-and-Representation" accesskey="n" rel="next">Loop Analysis and Representation</a>, Previous: <a href="RTL.html#RTL" accesskey="p" rel="prev">RTL</a>, Up: <a href="index.html#Top" accesskey="u" rel="up">Top</a> &nbsp; [<a href="index.html#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="Option-Index.html#Option-Index" title="Index" rel="index">Index</a>]</p>
  111. </div>
  112. </body>
  113. </html>