GENERIC.html 7.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138
  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: GENERIC</title>
  20. <meta name="description" content="GNU Compiler Collection (GCC) Internals: GENERIC">
  21. <meta name="keywords" content="GNU Compiler Collection (GCC) Internals: GENERIC">
  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="Deficiencies.html#Deficiencies" rel="next" title="Deficiencies">
  31. <link href="Dump-examples.html#Dump-examples" rel="prev" title="Dump examples">
  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="GENERIC"></a>
  63. <div class="header">
  64. <p>
  65. Next: <a href="GIMPLE.html#GIMPLE" accesskey="n" rel="next">GIMPLE</a>, Previous: <a href="Passes.html#Passes" accesskey="p" rel="prev">Passes</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="GENERIC-1"></a>
  69. <h2 class="chapter">10 GENERIC</h2>
  70. <a name="index-GENERIC-1"></a>
  71. <p>The purpose of GENERIC is simply to provide a
  72. language-independent way of representing an entire function in
  73. trees. To this end, it was necessary to add a few new tree codes
  74. to the back end, but almost everything was already there. If you
  75. can express it with the codes in <code>gcc/tree.def</code>, it&rsquo;s
  76. GENERIC.
  77. </p>
  78. <p>Early on, there was a great deal of debate about how to think
  79. about statements in a tree IL. In GENERIC, a statement is
  80. defined as any expression whose value, if any, is ignored. A
  81. statement will always have <code>TREE_SIDE_EFFECTS</code> set (or it
  82. will be discarded), but a non-statement expression may also have
  83. side effects. A <code>CALL_EXPR</code>, for instance.
  84. </p>
  85. <p>It would be possible for some local optimizations to work on the
  86. GENERIC form of a function; indeed, the adapted tree inliner
  87. works fine on GENERIC, but the current compiler performs inlining
  88. after lowering to GIMPLE (a restricted form described in the next
  89. section). Indeed, currently the frontends perform this lowering
  90. before handing off to <code>tree_rest_of_compilation</code>, but this
  91. seems inelegant.
  92. </p>
  93. <table class="menu" border="0" cellspacing="0">
  94. <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.
  95. </td></tr>
  96. <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.
  97. </td></tr>
  98. <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.
  99. </td></tr>
  100. <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.
  101. </td></tr>
  102. <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.
  103. </td></tr>
  104. <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.
  105. </td></tr>
  106. <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.
  107. </td></tr>
  108. <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.
  109. </td></tr>
  110. <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.
  111. </td></tr>
  112. <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++.
  113. </td></tr>
  114. <tr><td align="left" valign="top">&bull; <a href="Java-Trees.html#Java-Trees">Java Trees</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">Trees specific to Java.
  115. </td></tr>
  116. </table>
  117. <hr>
  118. <div class="header">
  119. <p>
  120. Next: <a href="GIMPLE.html#GIMPLE" accesskey="n" rel="next">GIMPLE</a>, Previous: <a href="Passes.html#Passes" accesskey="p" rel="prev">Passes</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>
  121. </div>
  122. </body>
  123. </html>