Mercurial > hg > CbC > CbC_gcc
comparison gcc/doc/generic.texi @ 131:84e7813d76e9
gcc-8.2
author | mir3636 |
---|---|
date | Thu, 25 Oct 2018 07:37:49 +0900 |
parents | 04ced10e8804 |
children | 1830386684a0 |
comparison
equal
deleted
inserted
replaced
111:04ced10e8804 | 131:84e7813d76e9 |
---|---|
1 @c Copyright (C) 2004-2017 Free Software Foundation, Inc. | 1 @c Copyright (C) 2004-2018 Free Software Foundation, Inc. |
2 @c This is part of the GCC manual. | 2 @c This is part of the GCC manual. |
3 @c For copying conditions, see the file gcc.texi. | 3 @c For copying conditions, see the file gcc.texi. |
4 | 4 |
5 @c --------------------------------------------------------------------- | 5 @c --------------------------------------------------------------------- |
6 @c GENERIC | 6 @c GENERIC |
1035 @tindex REAL_CST | 1035 @tindex REAL_CST |
1036 @tindex FIXED_CST | 1036 @tindex FIXED_CST |
1037 @tindex COMPLEX_CST | 1037 @tindex COMPLEX_CST |
1038 @tindex VECTOR_CST | 1038 @tindex VECTOR_CST |
1039 @tindex STRING_CST | 1039 @tindex STRING_CST |
1040 @tindex POLY_INT_CST | |
1040 @findex TREE_STRING_LENGTH | 1041 @findex TREE_STRING_LENGTH |
1041 @findex TREE_STRING_POINTER | 1042 @findex TREE_STRING_POINTER |
1042 | 1043 |
1043 The table below begins with constants, moves on to unary expressions, | 1044 The table below begins with constants, moves on to unary expressions, |
1044 then proceeds to binary expressions, and concludes with various other | 1045 then proceeds to binary expressions, and concludes with various other |
1082 @code{__complex__} whose parts are constant nodes. The | 1083 @code{__complex__} whose parts are constant nodes. The |
1083 @code{TREE_REALPART} and @code{TREE_IMAGPART} return the real and the | 1084 @code{TREE_REALPART} and @code{TREE_IMAGPART} return the real and the |
1084 imaginary parts respectively. | 1085 imaginary parts respectively. |
1085 | 1086 |
1086 @item VECTOR_CST | 1087 @item VECTOR_CST |
1087 These nodes are used to represent vector constants, whose parts are | 1088 These nodes are used to represent vector constants. Each vector |
1088 constant nodes. Each individual constant node is either an integer or a | 1089 constant @var{v} is treated as a specific instance of an arbitrary-length |
1089 double constant node. The first operand is a @code{TREE_LIST} of the | 1090 sequence that itself contains @samp{VECTOR_CST_NPATTERNS (@var{v})} |
1090 constant nodes and is accessed through @code{TREE_VECTOR_CST_ELTS}. | 1091 interleaved patterns. Each pattern has the form: |
1092 | |
1093 @smallexample | |
1094 @{ @var{base0}, @var{base1}, @var{base1} + @var{step}, @var{base1} + @var{step} * 2, @dots{} @} | |
1095 @end smallexample | |
1096 | |
1097 The first three elements in each pattern are enough to determine the | |
1098 values of the other elements. However, if all @var{step}s are zero, | |
1099 only the first two elements are needed. If in addition each @var{base1} | |
1100 is equal to the corresponding @var{base0}, only the first element in | |
1101 each pattern is needed. The number of encoded elements per pattern | |
1102 is given by @samp{VECTOR_CST_NELTS_PER_PATTERN (@var{v})}. | |
1103 | |
1104 For example, the constant: | |
1105 | |
1106 @smallexample | |
1107 @{ 0, 1, 2, 6, 3, 8, 4, 10, 5, 12, 6, 14, 7, 16, 8, 18 @} | |
1108 @end smallexample | |
1109 | |
1110 is interpreted as an interleaving of the sequences: | |
1111 | |
1112 @smallexample | |
1113 @{ 0, 2, 3, 4, 5, 6, 7, 8 @} | |
1114 @{ 1, 6, 8, 10, 12, 14, 16, 18 @} | |
1115 @end smallexample | |
1116 | |
1117 where the sequences are represented by the following patterns: | |
1118 | |
1119 @smallexample | |
1120 @var{base0} == 0, @var{base1} == 2, @var{step} == 1 | |
1121 @var{base0} == 1, @var{base1} == 6, @var{step} == 2 | |
1122 @end smallexample | |
1123 | |
1124 In this case: | |
1125 | |
1126 @smallexample | |
1127 VECTOR_CST_NPATTERNS (@var{v}) == 2 | |
1128 VECTOR_CST_NELTS_PER_PATTERN (@var{v}) == 3 | |
1129 @end smallexample | |
1130 | |
1131 The vector is therefore encoded using the first 6 elements | |
1132 (@samp{@{ 0, 1, 2, 6, 3, 8 @}}), with the remaining 10 elements | |
1133 being implicit extensions of them. | |
1134 | |
1135 Sometimes this scheme can create two possible encodings of the same | |
1136 vector. For example @{ 0, 1 @} could be seen as two patterns with | |
1137 one element each or one pattern with two elements (@var{base0} and | |
1138 @var{base1}). The canonical encoding is always the one with the | |
1139 fewest patterns or (if both encodings have the same number of | |
1140 petterns) the one with the fewest encoded elements. | |
1141 | |
1142 @samp{vector_cst_encoding_nelts (@var{v})} gives the total number of | |
1143 encoded elements in @var{v}, which is 6 in the example above. | |
1144 @code{VECTOR_CST_ENCODED_ELTS (@var{v})} gives a pointer to the elements | |
1145 encoded in @var{v} and @code{VECTOR_CST_ENCODED_ELT (@var{v}, @var{i})} | |
1146 accesses the value of encoded element @var{i}. | |
1147 | |
1148 @samp{VECTOR_CST_DUPLICATE_P (@var{v})} is true if @var{v} simply contains | |
1149 repeated instances of @samp{VECTOR_CST_NPATTERNS (@var{v})} values. This is | |
1150 a shorthand for testing @samp{VECTOR_CST_NELTS_PER_PATTERN (@var{v}) == 1}. | |
1151 | |
1152 @samp{VECTOR_CST_STEPPED_P (@var{v})} is true if at least one | |
1153 pattern in @var{v} has a nonzero step. This is a shorthand for | |
1154 testing @samp{VECTOR_CST_NELTS_PER_PATTERN (@var{v}) == 3}. | |
1155 | |
1156 The utility function @code{vector_cst_elt} gives the value of an | |
1157 arbitrary index as a @code{tree}. @code{vector_cst_int_elt} gives | |
1158 the same value as a @code{wide_int}. | |
1091 | 1159 |
1092 @item STRING_CST | 1160 @item STRING_CST |
1093 These nodes represent string-constants. The @code{TREE_STRING_LENGTH} | 1161 These nodes represent string-constants. The @code{TREE_STRING_LENGTH} |
1094 returns the length of the string, as an @code{int}. The | 1162 returns the length of the string, as an @code{int}. The |
1095 @code{TREE_STRING_POINTER} is a @code{char*} containing the string | 1163 @code{TREE_STRING_POINTER} is a @code{char*} containing the string |
1105 non-wide string constants are distinguished only by the @code{TREE_TYPE} | 1173 non-wide string constants are distinguished only by the @code{TREE_TYPE} |
1106 of the @code{STRING_CST}. | 1174 of the @code{STRING_CST}. |
1107 | 1175 |
1108 FIXME: The formats of string constants are not well-defined when the | 1176 FIXME: The formats of string constants are not well-defined when the |
1109 target system bytes are not the same width as host system bytes. | 1177 target system bytes are not the same width as host system bytes. |
1178 | |
1179 @item POLY_INT_CST | |
1180 These nodes represent invariants that depend on some target-specific | |
1181 runtime parameters. They consist of @code{NUM_POLY_INT_COEFFS} | |
1182 coefficients, with the first coefficient being the constant term and | |
1183 the others being multipliers that are applied to the runtime parameters. | |
1184 | |
1185 @code{POLY_INT_CST_ELT (@var{x}, @var{i})} references coefficient number | |
1186 @var{i} of @code{POLY_INT_CST} node @var{x}. Each coefficient is an | |
1187 @code{INTEGER_CST}. | |
1110 | 1188 |
1111 @end table | 1189 @end table |
1112 | 1190 |
1113 @node Storage References | 1191 @node Storage References |
1114 @subsection References to storage | 1192 @subsection References to storage |
1222 @tindex TRUTH_ORIF_EXPR | 1300 @tindex TRUTH_ORIF_EXPR |
1223 @tindex TRUTH_AND_EXPR | 1301 @tindex TRUTH_AND_EXPR |
1224 @tindex TRUTH_OR_EXPR | 1302 @tindex TRUTH_OR_EXPR |
1225 @tindex TRUTH_XOR_EXPR | 1303 @tindex TRUTH_XOR_EXPR |
1226 @tindex POINTER_PLUS_EXPR | 1304 @tindex POINTER_PLUS_EXPR |
1305 @tindex POINTER_DIFF_EXPR | |
1227 @tindex PLUS_EXPR | 1306 @tindex PLUS_EXPR |
1228 @tindex MINUS_EXPR | 1307 @tindex MINUS_EXPR |
1229 @tindex MULT_EXPR | 1308 @tindex MULT_EXPR |
1230 @tindex MULT_HIGHPART_EXPR | 1309 @tindex MULT_HIGHPART_EXPR |
1231 @tindex RDIV_EXPR | 1310 @tindex RDIV_EXPR |
1411 always of @code{BOOLEAN_TYPE} or @code{INTEGER_TYPE}. | 1490 always of @code{BOOLEAN_TYPE} or @code{INTEGER_TYPE}. |
1412 | 1491 |
1413 @item POINTER_PLUS_EXPR | 1492 @item POINTER_PLUS_EXPR |
1414 This node represents pointer arithmetic. The first operand is always | 1493 This node represents pointer arithmetic. The first operand is always |
1415 a pointer/reference type. The second operand is always an unsigned | 1494 a pointer/reference type. The second operand is always an unsigned |
1416 integer type compatible with sizetype. This is the only binary | 1495 integer type compatible with sizetype. This and POINTER_DIFF_EXPR are |
1417 arithmetic operand that can operate on pointer types. | 1496 the only binary arithmetic operators that can operate on pointer types. |
1497 | |
1498 @item POINTER_DIFF_EXPR | |
1499 This node represents pointer subtraction. The two operands always | |
1500 have pointer/reference type. It returns a signed integer of the same | |
1501 precision as the pointers. The behavior is undefined if the difference | |
1502 of the two pointers, seen as infinite precision non-negative integers, | |
1503 does not fit in the result type. The result does not depend on the | |
1504 pointer type, it is not divided by the size of the pointed-to type. | |
1418 | 1505 |
1419 @item PLUS_EXPR | 1506 @item PLUS_EXPR |
1420 @itemx MINUS_EXPR | 1507 @itemx MINUS_EXPR |
1421 @itemx MULT_EXPR | 1508 @itemx MULT_EXPR |
1422 These nodes represent various binary arithmetic operations. | 1509 These nodes represent various binary arithmetic operations. |
1555 represented conveniently as @code{(i >= 0 && i < 10) ? i : abort()}. | 1642 represented conveniently as @code{(i >= 0 && i < 10) ? i : abort()}. |
1556 | 1643 |
1557 As a GNU extension, the C language front-ends allow the second | 1644 As a GNU extension, the C language front-ends allow the second |
1558 operand of the @code{?:} operator may be omitted in the source. | 1645 operand of the @code{?:} operator may be omitted in the source. |
1559 For example, @code{x ? : 3} is equivalent to @code{x ? x : 3}, | 1646 For example, @code{x ? : 3} is equivalent to @code{x ? x : 3}, |
1560 assuming that @code{x} is an expression without side-effects. | 1647 assuming that @code{x} is an expression without side effects. |
1561 In the tree representation, however, the second operand is always | 1648 In the tree representation, however, the second operand is always |
1562 present, possibly protected by @code{SAVE_EXPR} if the first | 1649 present, possibly protected by @code{SAVE_EXPR} if the first |
1563 argument does cause side-effects. | 1650 argument does cause side effects. |
1564 | 1651 |
1565 @item CALL_EXPR | 1652 @item CALL_EXPR |
1566 These nodes are used to represent calls to functions, including | 1653 These nodes are used to represent calls to functions, including |
1567 non-static member functions. @code{CALL_EXPR}s are implemented as | 1654 non-static member functions. @code{CALL_EXPR}s are implemented as |
1568 expression nodes with a variable number of operands. Rather than using | 1655 expression nodes with a variable number of operands. Rather than using |
1643 by the @code{COMPOUND_LITERAL_EXPR_DECL} macro. | 1730 by the @code{COMPOUND_LITERAL_EXPR_DECL} macro. |
1644 | 1731 |
1645 @item SAVE_EXPR | 1732 @item SAVE_EXPR |
1646 | 1733 |
1647 A @code{SAVE_EXPR} represents an expression (possibly involving | 1734 A @code{SAVE_EXPR} represents an expression (possibly involving |
1648 side-effects) that is used more than once. The side-effects should | 1735 side effects) that is used more than once. The side effects should |
1649 occur only the first time the expression is evaluated. Subsequent uses | 1736 occur only the first time the expression is evaluated. Subsequent uses |
1650 should just reuse the computed value. The first operand to the | 1737 should just reuse the computed value. The first operand to the |
1651 @code{SAVE_EXPR} is the expression to evaluate. The side-effects should | 1738 @code{SAVE_EXPR} is the expression to evaluate. The side effects should |
1652 be executed where the @code{SAVE_EXPR} is first encountered in a | 1739 be executed where the @code{SAVE_EXPR} is first encountered in a |
1653 depth-first preorder traversal of the expression tree. | 1740 depth-first preorder traversal of the expression tree. |
1654 | 1741 |
1655 @item TARGET_EXPR | 1742 @item TARGET_EXPR |
1656 A @code{TARGET_EXPR} represents a temporary object. The first operand | 1743 A @code{TARGET_EXPR} represents a temporary object. The first operand |
1684 its sole argument yields the representation for @code{ap}. | 1771 its sole argument yields the representation for @code{ap}. |
1685 | 1772 |
1686 @item ANNOTATE_EXPR | 1773 @item ANNOTATE_EXPR |
1687 This node is used to attach markers to an expression. The first operand | 1774 This node is used to attach markers to an expression. The first operand |
1688 is the annotated expression, the second is an @code{INTEGER_CST} with | 1775 is the annotated expression, the second is an @code{INTEGER_CST} with |
1689 a value from @code{enum annot_expr_kind}. | 1776 a value from @code{enum annot_expr_kind}, the third is an @code{INTEGER_CST}. |
1690 @end table | 1777 @end table |
1691 | 1778 |
1692 | 1779 |
1693 @node Vectors | 1780 @node Vectors |
1694 @subsection Vectors | 1781 @subsection Vectors |
1782 @tindex VEC_DUPLICATE_EXPR | |
1783 @tindex VEC_SERIES_EXPR | |
1695 @tindex VEC_LSHIFT_EXPR | 1784 @tindex VEC_LSHIFT_EXPR |
1696 @tindex VEC_RSHIFT_EXPR | 1785 @tindex VEC_RSHIFT_EXPR |
1697 @tindex VEC_WIDEN_MULT_HI_EXPR | 1786 @tindex VEC_WIDEN_MULT_HI_EXPR |
1698 @tindex VEC_WIDEN_MULT_LO_EXPR | 1787 @tindex VEC_WIDEN_MULT_LO_EXPR |
1699 @tindex VEC_UNPACK_HI_EXPR | 1788 @tindex VEC_UNPACK_HI_EXPR |
1700 @tindex VEC_UNPACK_LO_EXPR | 1789 @tindex VEC_UNPACK_LO_EXPR |
1701 @tindex VEC_UNPACK_FLOAT_HI_EXPR | 1790 @tindex VEC_UNPACK_FLOAT_HI_EXPR |
1702 @tindex VEC_UNPACK_FLOAT_LO_EXPR | 1791 @tindex VEC_UNPACK_FLOAT_LO_EXPR |
1792 @tindex VEC_UNPACK_FIX_TRUNC_HI_EXPR | |
1793 @tindex VEC_UNPACK_FIX_TRUNC_LO_EXPR | |
1703 @tindex VEC_PACK_TRUNC_EXPR | 1794 @tindex VEC_PACK_TRUNC_EXPR |
1704 @tindex VEC_PACK_SAT_EXPR | 1795 @tindex VEC_PACK_SAT_EXPR |
1705 @tindex VEC_PACK_FIX_TRUNC_EXPR | 1796 @tindex VEC_PACK_FIX_TRUNC_EXPR |
1797 @tindex VEC_PACK_FLOAT_EXPR | |
1798 @tindex VEC_COND_EXPR | |
1706 @tindex SAD_EXPR | 1799 @tindex SAD_EXPR |
1707 | 1800 |
1708 @table @code | 1801 @table @code |
1802 @item VEC_DUPLICATE_EXPR | |
1803 This node has a single operand and represents a vector in which every | |
1804 element is equal to that operand. | |
1805 | |
1806 @item VEC_SERIES_EXPR | |
1807 This node represents a vector formed from a scalar base and step, | |
1808 given as the first and second operands respectively. Element @var{i} | |
1809 of the result is equal to @samp{@var{base} + @var{i}*@var{step}}. | |
1810 | |
1811 This node is restricted to integral types, in order to avoid | |
1812 specifying the rounding behavior for floating-point types. | |
1813 | |
1709 @item VEC_LSHIFT_EXPR | 1814 @item VEC_LSHIFT_EXPR |
1710 @itemx VEC_RSHIFT_EXPR | 1815 @itemx VEC_RSHIFT_EXPR |
1711 These nodes represent whole vector left and right shifts, respectively. | 1816 These nodes represent whole vector left and right shifts, respectively. |
1712 The first operand is the vector to shift; it will always be of vector type. | 1817 The first operand is the vector to shift; it will always be of vector type. |
1713 The second operand is an expression for the number of bits by which to | 1818 The second operand is an expression for the number of bits by which to |
1742 These nodes represent unpacking of the high and low parts of the input vector, | 1847 These nodes represent unpacking of the high and low parts of the input vector, |
1743 where the values are converted from fixed point to floating point. The | 1848 where the values are converted from fixed point to floating point. The |
1744 single operand is a vector that contains @code{N} elements of the same | 1849 single operand is a vector that contains @code{N} elements of the same |
1745 integral type. The result is a vector that contains half as many elements | 1850 integral type. The result is a vector that contains half as many elements |
1746 of a floating point type whose size is twice as wide. In the case of | 1851 of a floating point type whose size is twice as wide. In the case of |
1747 @code{VEC_UNPACK_HI_EXPR} the high @code{N/2} elements of the vector are | 1852 @code{VEC_UNPACK_FLOAT_HI_EXPR} the high @code{N/2} elements of the vector are |
1748 extracted, converted and widened. In the case of @code{VEC_UNPACK_LO_EXPR} | 1853 extracted, converted and widened. In the case of @code{VEC_UNPACK_FLOAT_LO_EXPR} |
1749 the low @code{N/2} elements of the vector are extracted, converted and widened. | 1854 the low @code{N/2} elements of the vector are extracted, converted and widened. |
1855 | |
1856 @item VEC_UNPACK_FIX_TRUNC_HI_EXPR | |
1857 @itemx VEC_UNPACK_FIX_TRUNC_LO_EXPR | |
1858 These nodes represent unpacking of the high and low parts of the input vector, | |
1859 where the values are truncated from floating point to fixed point. The | |
1860 single operand is a vector that contains @code{N} elements of the same | |
1861 floating point type. The result is a vector that contains half as many | |
1862 elements of an integral type whose size is twice as wide. In the case of | |
1863 @code{VEC_UNPACK_FIX_TRUNC_HI_EXPR} the high @code{N/2} elements of the | |
1864 vector are extracted and converted with truncation. In the case of | |
1865 @code{VEC_UNPACK_FIX_TRUNC_LO_EXPR} the low @code{N/2} elements of the | |
1866 vector are extracted and converted with truncation. | |
1750 | 1867 |
1751 @item VEC_PACK_TRUNC_EXPR | 1868 @item VEC_PACK_TRUNC_EXPR |
1752 This node represents packing of truncated elements of the two input vectors | 1869 This node represents packing of truncated elements of the two input vectors |
1753 into the output vector. Input operands are vectors that contain the same | 1870 into the output vector. Input operands are vectors that contain the same |
1754 number of elements of the same integral or floating point type. The result | 1871 number of elements of the same integral or floating point type. The result |
1770 to fixed point. Input operands are vectors that contain the same number | 1887 to fixed point. Input operands are vectors that contain the same number |
1771 of elements of a floating point type. The result is a vector that contains | 1888 of elements of a floating point type. The result is a vector that contains |
1772 twice as many elements of an integral type whose size is half as wide. The | 1889 twice as many elements of an integral type whose size is half as wide. The |
1773 elements of the two vectors are merged (concatenated) to form the output | 1890 elements of the two vectors are merged (concatenated) to form the output |
1774 vector. | 1891 vector. |
1892 | |
1893 @item VEC_PACK_FLOAT_EXPR | |
1894 This node represents packing of elements of the two input vectors into the | |
1895 output vector, where the values are converted from fixed point to floating | |
1896 point. Input operands are vectors that contain the same number of elements | |
1897 of an integral type. The result is a vector that contains twice as many | |
1898 elements of floating point type whose size is half as wide. The elements of | |
1899 the two vectors are merged (concatenated) to form the output vector. | |
1775 | 1900 |
1776 @item VEC_COND_EXPR | 1901 @item VEC_COND_EXPR |
1777 These nodes represent @code{?:} expressions. The three operands must be | 1902 These nodes represent @code{?:} expressions. The three operands must be |
1778 vectors of the same size and number of elements. The second and third | 1903 vectors of the same size and number of elements. The second and third |
1779 operands must have the same type as the entire expression. The first | 1904 operands must have the same type as the entire expression. The first |
1928 case 2 ... 5: | 2053 case 2 ... 5: |
1929 @end smallexample | 2054 @end smallexample |
1930 The first value will be @code{CASE_LOW}, while the second will be | 2055 The first value will be @code{CASE_LOW}, while the second will be |
1931 @code{CASE_HIGH}. | 2056 @code{CASE_HIGH}. |
1932 | 2057 |
2058 @item DEBUG_BEGIN_STMT | |
2059 | |
2060 Marks the beginning of a source statement, for purposes of debug | |
2061 information generation. | |
2062 | |
1933 @end table | 2063 @end table |
1934 | 2064 |
1935 | 2065 |
1936 @node Blocks | 2066 @node Blocks |
1937 @subsection Blocks | 2067 @subsection Blocks |
2066 @tindex OMP_CONTINUE | 2196 @tindex OMP_CONTINUE |
2067 @tindex OMP_ATOMIC | 2197 @tindex OMP_ATOMIC |
2068 @tindex OMP_CLAUSE | 2198 @tindex OMP_CLAUSE |
2069 | 2199 |
2070 All the statements starting with @code{OMP_} represent directives and | 2200 All the statements starting with @code{OMP_} represent directives and |
2071 clauses used by the OpenMP API @w{@uref{http://www.openmp.org/}}. | 2201 clauses used by the OpenMP API @w{@uref{https://www.openmp.org}}. |
2072 | 2202 |
2073 @table @code | 2203 @table @code |
2074 @item OMP_PARALLEL | 2204 @item OMP_PARALLEL |
2075 | 2205 |
2076 Represents @code{#pragma omp parallel [clause1 @dots{} clauseN]}. It | 2206 Represents @code{#pragma omp parallel [clause1 @dots{} clauseN]}. It |
2113 of the form @code{VAR @{<,>,<=,>=@} N2}. | 2243 of the form @code{VAR @{<,>,<=,>=@} N2}. |
2114 | 2244 |
2115 Operand @code{OMP_FOR_INCR} is the loop index increment of the | 2245 Operand @code{OMP_FOR_INCR} is the loop index increment of the |
2116 form @code{VAR @{+=,-=@} INCR}. | 2246 form @code{VAR @{+=,-=@} INCR}. |
2117 | 2247 |
2118 Operand @code{OMP_FOR_PRE_BODY} contains side-effect code from | 2248 Operand @code{OMP_FOR_PRE_BODY} contains side effect code from |
2119 operands @code{OMP_FOR_INIT}, @code{OMP_FOR_COND} and | 2249 operands @code{OMP_FOR_INIT}, @code{OMP_FOR_COND} and |
2120 @code{OMP_FOR_INC}. These side-effects are part of the | 2250 @code{OMP_FOR_INC}. These side effects are part of the |
2121 @code{OMP_FOR} block but must be evaluated before the start of | 2251 @code{OMP_FOR} block but must be evaluated before the start of |
2122 loop body. | 2252 loop body. |
2123 | 2253 |
2124 The loop index variable @code{VAR} must be a signed integer variable, | 2254 The loop index variable @code{VAR} must be a signed integer variable, |
2125 which is implicitly private to each thread. Bounds | 2255 which is implicitly private to each thread. Bounds |
2126 @code{N1} and @code{N2} and the increment expression | 2256 @code{N1} and @code{N2} and the increment expression |
2127 @code{INCR} are required to be loop invariant integer | 2257 @code{INCR} are required to be loop invariant integer |
2128 expressions that are evaluated without any synchronization. The | 2258 expressions that are evaluated without any synchronization. The |
2129 evaluation order, frequency of evaluation and side-effects are | 2259 evaluation order, frequency of evaluation and side effects are |
2130 unspecified by the standard. | 2260 unspecified by the standard. |
2131 | 2261 |
2132 @item OMP_SECTIONS | 2262 @item OMP_SECTIONS |
2133 | 2263 |
2134 Represents @code{#pragma omp sections [clause1 @dots{} clauseN]}. | 2264 Represents @code{#pragma omp sections [clause1 @dots{} clauseN]}. |
3223 @item BREAK_STMT | 3353 @item BREAK_STMT |
3224 | 3354 |
3225 Used to represent a @code{break} statement. There are no additional | 3355 Used to represent a @code{break} statement. There are no additional |
3226 fields. | 3356 fields. |
3227 | 3357 |
3228 @item CILK_SPAWN_STMT | |
3229 | |
3230 Used to represent a spawning function in the Cilk Plus language extension. | |
3231 This tree has one field that holds the name of the spawning function. | |
3232 @code{_Cilk_spawn} can be written in C in the following way: | |
3233 | |
3234 @smallexample | |
3235 @code{_Cilk_spawn} <function_name> (<parameters>); | |
3236 @end smallexample | |
3237 | |
3238 Detailed description for usage and functionality of @code{_Cilk_spawn} can be | |
3239 found at @uref{https://www.cilkplus.org}. | |
3240 | |
3241 @item CILK_SYNC_STMT | |
3242 | |
3243 This statement is part of the Cilk Plus language extension. It indicates that | |
3244 the current function cannot continue in parallel with its spawned children. | |
3245 There are no additional fields. @code{_Cilk_sync} can be written in C in the | |
3246 following way: | |
3247 | |
3248 @smallexample | |
3249 @code{_Cilk_sync}; | |
3250 @end smallexample | |
3251 | |
3252 @item CLEANUP_STMT | 3358 @item CLEANUP_STMT |
3253 | 3359 |
3254 Used to represent an action that should take place upon exit from the | 3360 Used to represent an action that should take place upon exit from the |
3255 enclosing scope. Typically, these actions are calls to destructors for | 3361 enclosing scope. Typically, these actions are calls to destructors for |
3256 local objects, but back ends cannot rely on this fact. If these nodes | 3362 local objects, but back ends cannot rely on this fact. If these nodes |