comparison gcc/doc/generic.texi @ 145:1830386684a0

gcc-9.2.0
author anatofuz
date Thu, 13 Feb 2020 11:34:05 +0900
parents 84e7813d76e9
children
comparison
equal deleted inserted replaced
131:84e7813d76e9 145:1830386684a0
1 @c Copyright (C) 2004-2018 Free Software Foundation, Inc. 1 @c Copyright (C) 2004-2020 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
41 * Expressions: Expression trees. Operating on data. 41 * Expressions: Expression trees. Operating on data.
42 * Statements:: Control flow and related trees. 42 * Statements:: Control flow and related trees.
43 * Functions:: Function bodies, linkage, and other aspects. 43 * Functions:: Function bodies, linkage, and other aspects.
44 * Language-dependent trees:: Topics and trees specific to language front ends. 44 * Language-dependent trees:: Topics and trees specific to language front ends.
45 * C and C++ Trees:: Trees specific to C and C++. 45 * C and C++ Trees:: Trees specific to C and C++.
46 * Java Trees:: Trees specific to Java.
47 @end menu 46 @end menu
48 47
49 @c --------------------------------------------------------------------- 48 @c ---------------------------------------------------------------------
50 @c Deficiencies 49 @c Deficiencies
51 @c --------------------------------------------------------------------- 50 @c ---------------------------------------------------------------------
1272 1271
1273 @node Unary and Binary Expressions 1272 @node Unary and Binary Expressions
1274 @subsection Unary and Binary Expressions 1273 @subsection Unary and Binary Expressions
1275 @tindex NEGATE_EXPR 1274 @tindex NEGATE_EXPR
1276 @tindex ABS_EXPR 1275 @tindex ABS_EXPR
1276 @tindex ABSU_EXPR
1277 @tindex BIT_NOT_EXPR 1277 @tindex BIT_NOT_EXPR
1278 @tindex TRUTH_NOT_EXPR 1278 @tindex TRUTH_NOT_EXPR
1279 @tindex PREDECREMENT_EXPR 1279 @tindex PREDECREMENT_EXPR
1280 @tindex PREINCREMENT_EXPR 1280 @tindex PREINCREMENT_EXPR
1281 @tindex POSTDECREMENT_EXPR 1281 @tindex POSTDECREMENT_EXPR
1369 or complex abs of a complex value, use the @code{BUILT_IN_CABS}, 1369 or complex abs of a complex value, use the @code{BUILT_IN_CABS},
1370 @code{BUILT_IN_CABSF} or @code{BUILT_IN_CABSL} builtins, as used 1370 @code{BUILT_IN_CABSF} or @code{BUILT_IN_CABSL} builtins, as used
1371 to implement the C99 @code{cabs}, @code{cabsf} and @code{cabsl} 1371 to implement the C99 @code{cabs}, @code{cabsf} and @code{cabsl}
1372 built-in functions. 1372 built-in functions.
1373 1373
1374 @item ABSU_EXPR
1375 These nodes represent the absolute value of the single operand in
1376 equivalent unsigned type such that @code{ABSU_EXPR} of @code{TYPE_MIN}
1377 is well defined.
1378
1374 @item BIT_NOT_EXPR 1379 @item BIT_NOT_EXPR
1375 These nodes represent bitwise complement, and will always have integral 1380 These nodes represent bitwise complement, and will always have integral
1376 type. The only operand is the value to be complemented. 1381 type. The only operand is the value to be complemented.
1377 1382
1378 @item TRUTH_NOT_EXPR 1383 @item TRUTH_NOT_EXPR
1557 1562
1558 @item LT_EXPR 1563 @item LT_EXPR
1559 @itemx LE_EXPR 1564 @itemx LE_EXPR
1560 @itemx GT_EXPR 1565 @itemx GT_EXPR
1561 @itemx GE_EXPR 1566 @itemx GE_EXPR
1567 @itemx LTGT_EXPR
1562 @itemx EQ_EXPR 1568 @itemx EQ_EXPR
1563 @itemx NE_EXPR 1569 @itemx NE_EXPR
1564 These nodes represent the less than, less than or equal to, greater 1570 These nodes represent the less than, less than or equal to, greater than,
1565 than, greater than or equal to, equal, and not equal comparison 1571 greater than or equal to, less or greater than, equal, and not equal
1566 operators. The first and second operands will either be both of integral 1572 comparison operators. The first and second operands will either be both
1567 type, both of floating type or both of vector type. The result type of 1573 of integral type, both of floating type or both of vector type, except for
1568 these expressions will always be of integral, boolean or signed integral 1574 LTGT_EXPR where they will only be both of floating type. The result type
1569 vector type. These operations return the result type's zero value for 1575 of these expressions will always be of integral, boolean or signed integral
1570 false, the result type's one value for true, and a vector whose elements 1576 vector type. These operations return the result type's zero value for false,
1571 are zero (false) or minus one (true) for vectors. 1577 the result type's one value for true, and a vector whose elements are zero
1578 (false) or minus one (true) for vectors.
1572 1579
1573 For floating point comparisons, if we honor IEEE NaNs and either operand 1580 For floating point comparisons, if we honor IEEE NaNs and either operand
1574 is NaN, then @code{NE_EXPR} always returns true and the remaining operators 1581 is NaN, then @code{NE_EXPR} always returns true and the remaining operators
1575 always return false. On some targets, comparisons against an IEEE NaN, 1582 always return false. On some targets, comparisons against an IEEE NaN,
1576 other than equality and inequality, may generate a floating point exception. 1583 other than equality and inequality, may generate a floating-point exception.
1577 1584
1578 @item ORDERED_EXPR 1585 @item ORDERED_EXPR
1579 @itemx UNORDERED_EXPR 1586 @itemx UNORDERED_EXPR
1580 These nodes represent non-trapping ordered and unordered comparison 1587 These nodes represent non-trapping ordered and unordered comparison
1581 operators. These operations take two floating point operands and 1588 operators. These operations take two floating point operands and
1589 @item UNLT_EXPR 1596 @item UNLT_EXPR
1590 @itemx UNLE_EXPR 1597 @itemx UNLE_EXPR
1591 @itemx UNGT_EXPR 1598 @itemx UNGT_EXPR
1592 @itemx UNGE_EXPR 1599 @itemx UNGE_EXPR
1593 @itemx UNEQ_EXPR 1600 @itemx UNEQ_EXPR
1594 @itemx LTGT_EXPR
1595 These nodes represent the unordered comparison operators. 1601 These nodes represent the unordered comparison operators.
1596 These operations take two floating point operands and determine whether 1602 These operations take two floating point operands and determine whether
1597 the operands are unordered or are less than, less than or equal to, 1603 the operands are unordered or are less than, less than or equal to,
1598 greater than, greater than or equal to, or equal respectively. For 1604 greater than, greater than or equal to, or equal respectively. For
1599 example, @code{UNLT_EXPR} returns true if either operand is an IEEE 1605 example, @code{UNLT_EXPR} returns true if either operand is an IEEE
1600 NaN or the first operand is less than the second. With the possible 1606 NaN or the first operand is less than the second. All these operations
1601 exception of @code{LTGT_EXPR}, all of these operations are guaranteed 1607 are guaranteed not to generate a floating point exception. The result
1602 not to generate a floating point exception. The result
1603 type of these expressions will always be of integral or boolean type. 1608 type of these expressions will always be of integral or boolean type.
1604 These operations return the result type's zero value for false, 1609 These operations return the result type's zero value for false,
1605 and the result type's one value for true. 1610 and the result type's one value for true.
1606 1611
1607 @item MODIFY_EXPR 1612 @item MODIFY_EXPR
2173 2178
2174 After the second sequence is executed, if it completes normally by 2179 After the second sequence is executed, if it completes normally by
2175 falling off the end, execution continues wherever the first sequence 2180 falling off the end, execution continues wherever the first sequence
2176 would have continued, by falling off the end, or doing a goto, etc. 2181 would have continued, by falling off the end, or doing a goto, etc.
2177 2182
2183 If the second sequence is an @code{EH_ELSE_EXPR} selector, then the
2184 sequence in its first operand is used when the first sequence completes
2185 normally, and that in its second operand is used for exceptional
2186 cleanups, i.e., when an exception propagates out of the first sequence.
2187
2178 @code{TRY_FINALLY_EXPR} complicates the flow graph, since the cleanup 2188 @code{TRY_FINALLY_EXPR} complicates the flow graph, since the cleanup
2179 needs to appear on every edge out of the controlled block; this 2189 needs to appear on every edge out of the controlled block; this
2180 reduces the freedom to move code across these edges. Therefore, the 2190 reduces the freedom to move code across these edges. Therefore, the
2181 EH lowering pass which runs before most of the optimization passes 2191 EH lowering pass which runs before most of the optimization passes
2182 eliminates these expressions by explicitly adding the cleanup to each 2192 eliminates these expressions by explicitly adding the cleanup to each
2376 @tindex OACC_EXIT_DATA 2386 @tindex OACC_EXIT_DATA
2377 @tindex OACC_HOST_DATA 2387 @tindex OACC_HOST_DATA
2378 @tindex OACC_KERNELS 2388 @tindex OACC_KERNELS
2379 @tindex OACC_LOOP 2389 @tindex OACC_LOOP
2380 @tindex OACC_PARALLEL 2390 @tindex OACC_PARALLEL
2391 @tindex OACC_SERIAL
2381 @tindex OACC_UPDATE 2392 @tindex OACC_UPDATE
2382 2393
2383 All the statements starting with @code{OACC_} represent directives and 2394 All the statements starting with @code{OACC_} represent directives and
2384 clauses used by the OpenACC API @w{@uref{https://www.openacc.org}}. 2395 clauses used by the OpenACC API @w{@uref{https://www.openacc.org}}.
2385 2396
2419 See the description of the @code{OMP_FOR} code. 2430 See the description of the @code{OMP_FOR} code.
2420 2431
2421 @item OACC_PARALLEL 2432 @item OACC_PARALLEL
2422 2433
2423 Represents @code{#pragma acc parallel [clause1 @dots{} clauseN]}. 2434 Represents @code{#pragma acc parallel [clause1 @dots{} clauseN]}.
2435
2436 @item OACC_SERIAL
2437
2438 Represents @code{#pragma acc serial [clause1 @dots{} clauseN]}.
2424 2439
2425 @item OACC_UPDATE 2440 @item OACC_UPDATE
2426 2441
2427 Represents @code{#pragma acc update [clause1 @dots{} clauseN]}. 2442 Represents @code{#pragma acc update [clause1 @dots{} clauseN]}.
2428 2443
3536 3551
3537 In either case, the expression is void. 3552 In either case, the expression is void.
3538 3553
3539 3554
3540 @end table 3555 @end table
3541
3542
3543 @node Java Trees
3544 @section Java Trees