You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

128 line
6.5KB

  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-2020 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 6.5, http://www.gnu.org/software/texinfo/ -->
  18. <head>
  19. <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
  20. <title>Control Flow (GNU Compiler Collection (GCC) Internals)</title>
  21. <meta name="description" content="Control Flow (GNU Compiler Collection (GCC) Internals)">
  22. <meta name="keywords" content="Control Flow (GNU Compiler Collection (GCC) Internals)">
  23. <meta name="resource-type" content="document">
  24. <meta name="distribution" content="global">
  25. <meta name="Generator" content="makeinfo">
  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.indentedblock {margin-right: 0em}
  36. blockquote.smallindentedblock {margin-right: 0em; font-size: smaller}
  37. blockquote.smallquotation {font-size: smaller}
  38. div.display {margin-left: 3.2em}
  39. div.example {margin-left: 3.2em}
  40. div.lisp {margin-left: 3.2em}
  41. div.smalldisplay {margin-left: 3.2em}
  42. div.smallexample {margin-left: 3.2em}
  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.nolinebreak {white-space: nowrap}
  54. span.roman {font-family: initial; font-weight: normal}
  55. span.sansserif {font-family: sans-serif; font-weight: normal}
  56. ul.no-bullet {list-style: none}
  57. -->
  58. </style>
  59. </head>
  60. <body lang="en">
  61. <a name="Control-Flow"></a>
  62. <div class="header">
  63. <p>
  64. 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>
  65. </div>
  66. <hr>
  67. <a name="Control-Flow-Graph"></a>
  68. <h2 class="chapter">15 Control Flow Graph</h2>
  69. <a name="index-CFG_002c-Control-Flow-Graph"></a>
  70. <a name="index-basic_002dblock_002eh"></a>
  71. <p>A control flow graph (CFG) is a data structure built on top of the
  72. intermediate code representation (the RTL or <code>GIMPLE</code> instruction
  73. stream) abstracting the control flow behavior of a function that is
  74. being compiled. The CFG is a directed graph where the vertices
  75. represent basic blocks and edges represent possible transfer of
  76. control flow from one basic block to another. The data structures
  77. used to represent the control flow graph are defined in
  78. <samp>basic-block.h</samp>.
  79. </p>
  80. <p>In GCC, the representation of control flow is maintained throughout
  81. the compilation process, from constructing the CFG early in
  82. <code>pass_build_cfg</code> to <code>pass_free_cfg</code> (see <samp>passes.def</samp>).
  83. The CFG takes various different modes and may undergo extensive
  84. manipulations, but the graph is always valid between its construction
  85. and its release. This way, transfer of information such as data flow,
  86. a measured profile, or the loop tree, can be propagated through the
  87. passes pipeline, and even from <code>GIMPLE</code> to <code>RTL</code>.
  88. </p>
  89. <p>Often the CFG may be better viewed as integral part of instruction
  90. chain, than structure built on the top of it. Updating the compiler&rsquo;s
  91. intermediate representation for instructions cannot be easily done
  92. without proper maintenance of the CFG simultaneously.
  93. </p>
  94. <table class="menu" border="0" cellspacing="0">
  95. <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.
  96. </td></tr>
  97. <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.
  98. </td></tr>
  99. <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.
  100. </td></tr>
  101. <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.
  102. </td></tr>
  103. <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.
  104. </td></tr>
  105. </table>
  106. <hr>
  107. <div class="header">
  108. <p>
  109. 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>
  110. </div>
  111. </body>
  112. </html>