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.

136 lines
7.1KB

  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>GENERIC (GNU Compiler Collection (GCC) Internals)</title>
  21. <meta name="description" content="GENERIC (GNU Compiler Collection (GCC) Internals)">
  22. <meta name="keywords" content="GENERIC (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="Deficiencies.html#Deficiencies" rel="next" title="Deficiencies">
  31. <link href="Guidelines-for-using-poly_005fint.html#Guidelines-for-using-poly_005fint" rel="prev" title="Guidelines for using poly_int">
  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="GENERIC"></a>
  62. <div class="header">
  63. <p>
  64. Next: <a href="GIMPLE.html#GIMPLE" accesskey="n" rel="next">GIMPLE</a>, Previous: <a href="poly_005fint.html#poly_005fint" accesskey="p" rel="prev">poly_int</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="GENERIC-1"></a>
  68. <h2 class="chapter">11 GENERIC</h2>
  69. <a name="index-GENERIC-1"></a>
  70. <p>The purpose of GENERIC is simply to provide a
  71. language-independent way of representing an entire function in
  72. trees. To this end, it was necessary to add a few new tree codes
  73. to the back end, but almost everything was already there. If you
  74. can express it with the codes in <code>gcc/tree.def</code>, it&rsquo;s
  75. GENERIC.
  76. </p>
  77. <p>Early on, there was a great deal of debate about how to think
  78. about statements in a tree IL. In GENERIC, a statement is
  79. defined as any expression whose value, if any, is ignored. A
  80. statement will always have <code>TREE_SIDE_EFFECTS</code> set (or it
  81. will be discarded), but a non-statement expression may also have
  82. side effects. A <code>CALL_EXPR</code>, for instance.
  83. </p>
  84. <p>It would be possible for some local optimizations to work on the
  85. GENERIC form of a function; indeed, the adapted tree inliner
  86. works fine on GENERIC, but the current compiler performs inlining
  87. after lowering to GIMPLE (a restricted form described in the next
  88. section). Indeed, currently the frontends perform this lowering
  89. before handing off to <code>tree_rest_of_compilation</code>, but this
  90. seems inelegant.
  91. </p>
  92. <table class="menu" border="0" cellspacing="0">
  93. <tr><td align="left" valign="top">&bull; <a href="Deficiencies.html#Deficiencies" accesskey="1">Deficiencies</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">Topics net yet covered in this document.
  94. </td></tr>
  95. <tr><td align="left" valign="top">&bull; <a href="Tree-overview.html#Tree-overview" accesskey="2">Tree overview</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">All about <code>tree</code>s.
  96. </td></tr>
  97. <tr><td align="left" valign="top">&bull; <a href="Types.html#Types" accesskey="3">Types</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">Fundamental and aggregate types.
  98. </td></tr>
  99. <tr><td align="left" valign="top">&bull; <a href="Declarations.html#Declarations" accesskey="4">Declarations</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">Type declarations and variables.
  100. </td></tr>
  101. <tr><td align="left" valign="top">&bull; <a href="Attributes.html#Attributes" accesskey="5">Attributes</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">Declaration and type attributes.
  102. </td></tr>
  103. <tr><td align="left" valign="top">&bull; <a href="Expression-trees.html#Expression-trees" accesskey="6">Expressions</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">Operating on data.
  104. </td></tr>
  105. <tr><td align="left" valign="top">&bull; <a href="Statements.html#Statements" accesskey="7">Statements</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">Control flow and related trees.
  106. </td></tr>
  107. <tr><td align="left" valign="top">&bull; <a href="Functions.html#Functions" accesskey="8">Functions</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">Function bodies, linkage, and other aspects.
  108. </td></tr>
  109. <tr><td align="left" valign="top">&bull; <a href="Language_002ddependent-trees.html#Language_002ddependent-trees" accesskey="9">Language-dependent trees</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">Topics and trees specific to language front ends.
  110. </td></tr>
  111. <tr><td align="left" valign="top">&bull; <a href="C-and-C_002b_002b-Trees.html#C-and-C_002b_002b-Trees">C and C++ Trees</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">Trees specific to C and C++.
  112. </td></tr>
  113. </table>
  114. <hr>
  115. <div class="header">
  116. <p>
  117. Next: <a href="GIMPLE.html#GIMPLE" accesskey="n" rel="next">GIMPLE</a>, Previous: <a href="poly_005fint.html#poly_005fint" accesskey="p" rel="prev">poly_int</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>
  118. </div>
  119. </body>
  120. </html>