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.

122 line
5.7KB

  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>Pass manager (GNU Compiler Collection (GCC) Internals)</title>
  21. <meta name="description" content="Pass manager (GNU Compiler Collection (GCC) Internals)">
  22. <meta name="keywords" content="Pass manager (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="Passes.html#Passes" rel="up" title="Passes">
  30. <link href="IPA-passes.html#IPA-passes" rel="next" title="IPA passes">
  31. <link href="Gimplification-pass.html#Gimplification-pass" rel="prev" title="Gimplification pass">
  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="Pass-manager"></a>
  62. <div class="header">
  63. <p>
  64. Next: <a href="IPA-passes.html#IPA-passes" accesskey="n" rel="next">IPA passes</a>, Previous: <a href="Gimplification-pass.html#Gimplification-pass" accesskey="p" rel="prev">Gimplification pass</a>, Up: <a href="Passes.html#Passes" accesskey="u" rel="up">Passes</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="Pass-manager-1"></a>
  68. <h3 class="section">9.3 Pass manager</h3>
  69. <p>The pass manager is located in <samp>passes.c</samp>, <samp>tree-optimize.c</samp>
  70. and <samp>tree-pass.h</samp>.
  71. It processes passes as described in <samp>passes.def</samp>.
  72. Its job is to run all of the individual passes in the correct order,
  73. and take care of standard bookkeeping that applies to every pass.
  74. </p>
  75. <p>The theory of operation is that each pass defines a structure that
  76. represents everything we need to know about that pass&mdash;when it
  77. should be run, how it should be run, what intermediate language
  78. form or on-the-side data structures it needs. We register the pass
  79. to be run in some particular order, and the pass manager arranges
  80. for everything to happen in the correct order.
  81. </p>
  82. <p>The actuality doesn&rsquo;t completely live up to the theory at present.
  83. Command-line switches and <code>timevar_id_t</code> enumerations must still
  84. be defined elsewhere. The pass manager validates constraints but does
  85. not attempt to (re-)generate data structures or lower intermediate
  86. language form based on the requirements of the next pass. Nevertheless,
  87. what is present is useful, and a far sight better than nothing at all.
  88. </p>
  89. <p>Each pass should have a unique name.
  90. Each pass may have its own dump file (for GCC debugging purposes).
  91. Passes with a name starting with a star do not dump anything.
  92. Sometimes passes are supposed to share a dump file / option name.
  93. To still give these unique names, you can use a prefix that is delimited
  94. by a space from the part that is used for the dump file / option name.
  95. E.g. When the pass name is &quot;ud dce&quot;, the name used for dump file/options
  96. is &quot;dce&quot;.
  97. </p>
  98. <p>TODO: describe the global variables set up by the pass manager,
  99. and a brief description of how a new pass should use it.
  100. I need to look at what info RTL passes use first<small class="enddots">...</small>
  101. </p>
  102. <hr>
  103. <div class="header">
  104. <p>
  105. Next: <a href="IPA-passes.html#IPA-passes" accesskey="n" rel="next">IPA passes</a>, Previous: <a href="Gimplification-pass.html#Gimplification-pass" accesskey="p" rel="prev">Gimplification pass</a>, Up: <a href="Passes.html#Passes" accesskey="u" rel="up">Passes</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>
  106. </div>
  107. </body>
  108. </html>