diff options
Diffstat (limited to 'share/doc/gccint/Overview-of-poly_005fint.html')
-rw-r--r-- | share/doc/gccint/Overview-of-poly_005fint.html | 165 |
1 files changed, 165 insertions, 0 deletions
diff --git a/share/doc/gccint/Overview-of-poly_005fint.html b/share/doc/gccint/Overview-of-poly_005fint.html new file mode 100644 index 0000000..d07df4e --- /dev/null +++ b/share/doc/gccint/Overview-of-poly_005fint.html @@ -0,0 +1,165 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> +<html> +<!-- Copyright (C) 1988-2023 Free Software Foundation, Inc. + +Permission is granted to copy, distribute and/or modify this document +under the terms of the GNU Free Documentation License, Version 1.3 or +any later version published by the Free Software Foundation; with the +Invariant Sections being "Funding Free Software", the Front-Cover +Texts being (a) (see below), and with the Back-Cover Texts being (b) +(see below). A copy of the license is included in the section entitled +"GNU Free Documentation License". + +(a) The FSF's Front-Cover Text is: + +A GNU Manual + +(b) The FSF's Back-Cover Text is: + +You have freedom to copy and modify this GNU Manual, like GNU + software. Copies published by the Free Software Foundation raise + funds for GNU development. --> +<!-- Created by GNU Texinfo 5.1, http://www.gnu.org/software/texinfo/ --> +<head> +<title>GNU Compiler Collection (GCC) Internals: Overview of poly_int</title> + +<meta name="description" content="GNU Compiler Collection (GCC) Internals: Overview of poly_int"> +<meta name="keywords" content="GNU Compiler Collection (GCC) Internals: Overview of poly_int"> +<meta name="resource-type" content="document"> +<meta name="distribution" content="global"> +<meta name="Generator" content="makeinfo"> +<meta http-equiv="Content-Type" content="text/html; charset=utf-8"> +<link href="index.html#Top" rel="start" title="Top"> +<link href="Option-Index.html#Option-Index" rel="index" title="Option Index"> +<link href="index.html#SEC_Contents" rel="contents" title="Table of Contents"> +<link href="poly_005fint.html#poly_005fint" rel="up" title="poly_int"> +<link href="Consequences-of-using-poly_005fint.html#Consequences-of-using-poly_005fint" rel="next" title="Consequences of using poly_int"> +<link href="poly_005fint.html#poly_005fint" rel="previous" title="poly_int"> +<style type="text/css"> +<!-- +a.summary-letter {text-decoration: none} +blockquote.smallquotation {font-size: smaller} +div.display {margin-left: 3.2em} +div.example {margin-left: 3.2em} +div.indentedblock {margin-left: 3.2em} +div.lisp {margin-left: 3.2em} +div.smalldisplay {margin-left: 3.2em} +div.smallexample {margin-left: 3.2em} +div.smallindentedblock {margin-left: 3.2em; font-size: smaller} +div.smalllisp {margin-left: 3.2em} +kbd {font-style:oblique} +pre.display {font-family: inherit} +pre.format {font-family: inherit} +pre.menu-comment {font-family: serif} +pre.menu-preformatted {font-family: serif} +pre.smalldisplay {font-family: inherit; font-size: smaller} +pre.smallexample {font-size: smaller} +pre.smallformat {font-family: inherit; font-size: smaller} +pre.smalllisp {font-size: smaller} +span.nocodebreak {white-space:nowrap} +span.nolinebreak {white-space:nowrap} +span.roman {font-family:serif; font-weight:normal} +span.sansserif {font-family:sans-serif; font-weight:normal} +ul.no-bullet {list-style: none} +--> +</style> + + +</head> + +<body lang="en" bgcolor="#FFFFFF" text="#000000" link="#0000FF" vlink="#800080" alink="#FF0000"> +<a name="Overview-of-poly_005fint"></a> +<div class="header"> +<p> +Next: <a href="Consequences-of-using-poly_005fint.html#Consequences-of-using-poly_005fint" accesskey="n" rel="next">Consequences of using <code>poly_int</code></a>, Up: <a href="poly_005fint.html#poly_005fint" accesskey="u" rel="up">poly_int</a> [<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> +</div> +<hr> +<a name="Overview-of-poly_005fint-1"></a> +<h3 class="section">10.1 Overview of <code>poly_int</code></h3> + +<a name="index-poly_005fint_002c-runtime-value"></a> +<p>We define indeterminates <var>x1</var>, …, <var>xn</var> whose values are +only known at runtime and use polynomials of the form: +</p> +<div class="smallexample"> +<pre class="smallexample"><var>c0</var> + <var>c1</var> * <var>x1</var> + … + <var>cn</var> * <var>xn</var> +</pre></div> + +<p>to represent a size or offset whose value might depend on some +of these indeterminates. The coefficients <var>c0</var>, …, <var>cn</var> +are always known at compile time, with the <var>c0</var> term being the +“constant” part that does not depend on any runtime value. +</p> +<p>GCC uses the <code>poly_int</code> class to represent these coefficients. +The class has two template parameters: the first specifies the number of +coefficients (<var>n</var> + 1) and the second specifies the type of the +coefficients. For example, ‘<samp>poly_int<2, unsigned short></samp>’ represents +a polynomial with two coefficients (and thus one indeterminate), with each +coefficient having type <code>unsigned short</code>. When <var>n</var> is 0, +the class degenerates to a single compile-time constant <var>c0</var>. +</p> +<a name="index-poly_005fint_002c-template-parameters"></a> +<a name="index-NUM_005fPOLY_005fINT_005fCOEFFS"></a> +<p>The number of coefficients needed for compilation is a fixed +property of each target and is specified by the configuration macro +<code>NUM_POLY_INT_COEFFS</code>. The default value is 1, since most targets +do not have such runtime invariants. Targets that need a different +value should <code>#define</code> the macro in their <samp><var>cpu</var>-modes.def</samp> +file. See <a href="Back-End.html#Back-End">Back End</a>. +</p> +<a name="index-poly_005fint_002c-invariant-range"></a> +<p><code>poly_int</code> makes the simplifying requirement that each indeterminate +must be a nonnegative integer. An indeterminate value of 0 should usually +represent the minimum possible runtime value, with <var>c0</var> specifying +the value in that case. +</p> +<p>For example, when targetting the Arm SVE ISA, the single indeterminate +represents the number of 128-bit blocks in a vector <em>beyond the minimum +length of 128 bits</em>. Thus the number of 64-bit doublewords in a vector +is 2 + 2 * <var>x1</var>. If an aggregate has a single SVE vector and 16 +additional bytes, its total size is 32 + 16 * <var>x1</var> bytes. +</p> +<p>The header file <samp>poly-int-types.h</samp> provides typedefs for the +most common forms of <code>poly_int</code>, all having +<code>NUM_POLY_INT_COEFFS</code> coefficients: +</p> +<a name="index-poly_005fint_002c-main-typedefs"></a> +<dl compact="compact"> +<dt><code>poly_uint16</code></dt> +<dd><p>a ‘<samp>poly_int</samp>’ with <code>unsigned short</code> coefficients. +</p> +</dd> +<dt><code>poly_int64</code></dt> +<dd><p>a ‘<samp>poly_int</samp>’ with <code>HOST_WIDE_INT</code> coefficients. +</p> +</dd> +<dt><code>poly_uint64</code></dt> +<dd><p>a ‘<samp>poly_int</samp>’ with <code>unsigned HOST_WIDE_INT</code> coefficients. +</p> +</dd> +<dt><code>poly_offset_int</code></dt> +<dd><p>a ‘<samp>poly_int</samp>’ with <code>offset_int</code> coefficients. +</p> +</dd> +<dt><code>poly_wide_int</code></dt> +<dd><p>a ‘<samp>poly_int</samp>’ with <code>wide_int</code> coefficients. +</p> +</dd> +<dt><code>poly_widest_int</code></dt> +<dd><p>a ‘<samp>poly_int</samp>’ with <code>widest_int</code> coefficients. +</p></dd> +</dl> + +<p>Since the main purpose of <code>poly_int</code> is to represent sizes and +offsets, the last two typedefs are only rarely used. +</p> +<hr> +<div class="header"> +<p> +Next: <a href="Consequences-of-using-poly_005fint.html#Consequences-of-using-poly_005fint" accesskey="n" rel="next">Consequences of using <code>poly_int</code></a>, Up: <a href="poly_005fint.html#poly_005fint" accesskey="u" rel="up">poly_int</a> [<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> +</div> + + + +</body> +</html> |