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.

130 lines
5.8KB

  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>Overview (GNU Compiler Collection (GCC) Internals)</title>
  21. <meta name="description" content="Overview (GNU Compiler Collection (GCC) Internals)">
  22. <meta name="keywords" content="Overview (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="Machine-Desc.html#Machine-Desc" rel="up" title="Machine Desc">
  30. <link href="Patterns.html#Patterns" rel="next" title="Patterns">
  31. <link href="Machine-Desc.html#Machine-Desc" rel="prev" title="Machine Desc">
  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="Overview"></a>
  62. <div class="header">
  63. <p>
  64. Next: <a href="Patterns.html#Patterns" accesskey="n" rel="next">Patterns</a>, Up: <a href="Machine-Desc.html#Machine-Desc" accesskey="u" rel="up">Machine Desc</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="Overview-of-How-the-Machine-Description-is-Used"></a>
  68. <h3 class="section">17.1 Overview of How the Machine Description is Used</h3>
  69. <p>There are three main conversions that happen in the compiler:
  70. </p>
  71. <ol>
  72. <li> The front end reads the source code and builds a parse tree.
  73. </li><li> The parse tree is used to generate an RTL insn list based on named
  74. instruction patterns.
  75. </li><li> The insn list is matched against the RTL templates to produce assembler
  76. code.
  77. </li></ol>
  78. <p>For the generate pass, only the names of the insns matter, from either a
  79. named <code>define_insn</code> or a <code>define_expand</code>. The compiler will
  80. choose the pattern with the right name and apply the operands according
  81. to the documentation later in this chapter, without regard for the RTL
  82. template or operand constraints. Note that the names the compiler looks
  83. for are hard-coded in the compiler&mdash;it will ignore unnamed patterns and
  84. patterns with names it doesn&rsquo;t know about, but if you don&rsquo;t provide a
  85. named pattern it needs, it will abort.
  86. </p>
  87. <p>If a <code>define_insn</code> is used, the template given is inserted into the
  88. insn list. If a <code>define_expand</code> is used, one of three things
  89. happens, based on the condition logic. The condition logic may manually
  90. create new insns for the insn list, say via <code>emit_insn()</code>, and
  91. invoke <code>DONE</code>. For certain named patterns, it may invoke <code>FAIL</code> to tell the
  92. compiler to use an alternate way of performing that task. If it invokes
  93. neither <code>DONE</code> nor <code>FAIL</code>, the template given in the pattern
  94. is inserted, as if the <code>define_expand</code> were a <code>define_insn</code>.
  95. </p>
  96. <p>Once the insn list is generated, various optimization passes convert,
  97. replace, and rearrange the insns in the insn list. This is where the
  98. <code>define_split</code> and <code>define_peephole</code> patterns get used, for
  99. example.
  100. </p>
  101. <p>Finally, the insn list&rsquo;s RTL is matched up with the RTL templates in the
  102. <code>define_insn</code> patterns, and those patterns are used to emit the
  103. final assembly code. For this purpose, each named <code>define_insn</code>
  104. acts like it&rsquo;s unnamed, since the names are ignored.
  105. </p>
  106. <hr>
  107. <div class="header">
  108. <p>
  109. Next: <a href="Patterns.html#Patterns" accesskey="n" rel="next">Patterns</a>, Up: <a href="Machine-Desc.html#Machine-Desc" accesskey="u" rel="up">Machine Desc</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>