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.

151 lines
7.3KB

  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>Scalar evolutions (GNU Compiler Collection (GCC) Internals)</title>
  21. <meta name="description" content="Scalar evolutions (GNU Compiler Collection (GCC) Internals)">
  22. <meta name="keywords" content="Scalar evolutions (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="Loop-Analysis-and-Representation.html#Loop-Analysis-and-Representation" rel="up" title="Loop Analysis and Representation">
  30. <link href="loop_002div.html#loop_002div" rel="next" title="loop-iv">
  31. <link href="LCSSA.html#LCSSA" rel="prev" title="LCSSA">
  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="Scalar-evolutions"></a>
  62. <div class="header">
  63. <p>
  64. Next: <a href="loop_002div.html#loop_002div" accesskey="n" rel="next">loop-iv</a>, Previous: <a href="LCSSA.html#LCSSA" accesskey="p" rel="prev">LCSSA</a>, Up: <a href="Loop-Analysis-and-Representation.html#Loop-Analysis-and-Representation" accesskey="u" rel="up">Loop Analysis and Representation</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="Scalar-evolutions-1"></a>
  68. <h3 class="section">16.5 Scalar evolutions</h3>
  69. <a name="index-Scalar-evolutions"></a>
  70. <a name="index-IV-analysis-on-GIMPLE"></a>
  71. <p>Scalar evolutions (SCEV) are used to represent results of induction
  72. variable analysis on GIMPLE. They enable us to represent variables with
  73. complicated behavior in a simple and consistent way (we only use it to
  74. express values of polynomial induction variables, but it is possible to
  75. extend it). The interfaces to SCEV analysis are declared in
  76. <samp>tree-scalar-evolution.h</samp>. To use scalar evolutions analysis,
  77. <code>scev_initialize</code> must be used. To stop using SCEV,
  78. <code>scev_finalize</code> should be used. SCEV analysis caches results in
  79. order to save time and memory. This cache however is made invalid by
  80. most of the loop transformations, including removal of code. If such a
  81. transformation is performed, <code>scev_reset</code> must be called to clean
  82. the caches.
  83. </p>
  84. <p>Given an SSA name, its behavior in loops can be analyzed using the
  85. <code>analyze_scalar_evolution</code> function. The returned SCEV however
  86. does not have to be fully analyzed and it may contain references to
  87. other SSA names defined in the loop. To resolve these (potentially
  88. recursive) references, <code>instantiate_parameters</code> or
  89. <code>resolve_mixers</code> functions must be used.
  90. <code>instantiate_parameters</code> is useful when you use the results of SCEV
  91. only for some analysis, and when you work with whole nest of loops at
  92. once. It will try replacing all SSA names by their SCEV in all loops,
  93. including the super-loops of the current loop, thus providing a complete
  94. information about the behavior of the variable in the loop nest.
  95. <code>resolve_mixers</code> is useful if you work with only one loop at a
  96. time, and if you possibly need to create code based on the value of the
  97. induction variable. It will only resolve the SSA names defined in the
  98. current loop, leaving the SSA names defined outside unchanged, even if
  99. their evolution in the outer loops is known.
  100. </p>
  101. <p>The SCEV is a normal tree expression, except for the fact that it may
  102. contain several special tree nodes. One of them is
  103. <code>SCEV_NOT_KNOWN</code>, used for SSA names whose value cannot be
  104. expressed. The other one is <code>POLYNOMIAL_CHREC</code>. Polynomial chrec
  105. has three arguments &ndash; base, step and loop (both base and step may
  106. contain further polynomial chrecs). Type of the expression and of base
  107. and step must be the same. A variable has evolution
  108. <code>POLYNOMIAL_CHREC(base, step, loop)</code> if it is (in the specified
  109. loop) equivalent to <code>x_1</code> in the following example
  110. </p>
  111. <div class="smallexample">
  112. <pre class="smallexample">while (&hellip;)
  113. {
  114. x_1 = phi (base, x_2);
  115. x_2 = x_1 + step;
  116. }
  117. </pre></div>
  118. <p>Note that this includes the language restrictions on the operations.
  119. For example, if we compile C code and <code>x</code> has signed type, then the
  120. overflow in addition would cause undefined behavior, and we may assume
  121. that this does not happen. Hence, the value with this SCEV cannot
  122. overflow (which restricts the number of iterations of such a loop).
  123. </p>
  124. <p>In many cases, one wants to restrict the attention just to affine
  125. induction variables. In this case, the extra expressive power of SCEV
  126. is not useful, and may complicate the optimizations. In this case,
  127. <code>simple_iv</code> function may be used to analyze a value &ndash; the result
  128. is a loop-invariant base and step.
  129. </p>
  130. <hr>
  131. <div class="header">
  132. <p>
  133. Next: <a href="loop_002div.html#loop_002div" accesskey="n" rel="next">loop-iv</a>, Previous: <a href="LCSSA.html#LCSSA" accesskey="p" rel="prev">LCSSA</a>, Up: <a href="Loop-Analysis-and-Representation.html#Loop-Analysis-and-Representation" accesskey="u" rel="up">Loop Analysis and Representation</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>
  134. </div>
  135. </body>
  136. </html>