1 | /**************************************************************************** |
2 | * * |
3 | * GNAT COMPILER COMPONENTS * |
4 | * * |
5 | * GNAT-SPECIFIC GCC TREE CODES * |
6 | * * |
7 | * Specification * |
8 | * * |
9 | * Copyright (C) 1992-2023, Free Software Foundation, Inc. * |
10 | * * |
11 | * GNAT is free software; you can redistribute it and/or modify it under * |
12 | * terms of the GNU General Public License as published by the Free Soft- * |
13 | * ware Foundation; either version 3, or (at your option) any later ver- * |
14 | * sion. GNAT is distributed in the hope that it will be useful, but WITH- * |
15 | * OUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY * |
16 | * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License * |
17 | * for more details. You should have received a copy of the GNU General * |
18 | * Public License along with GCC; see the file COPYING3. If not see * |
19 | * <http://www.gnu.org/licenses/>. * |
20 | * * |
21 | * GNAT was originally developed by the GNAT team at New York University. * |
22 | * Extensive contributions were provided by Ada Core Technologies Inc. * |
23 | * * |
24 | ****************************************************************************/ |
25 | |
26 | /* A type that is an unconstrained array. This node is never passed to GCC. |
27 | TREE_TYPE is the type of the fat pointer and TYPE_OBJECT_RECORD_TYPE is |
28 | the type of a record containing the template and data. */ |
29 | DEFTREECODE (UNCONSTRAINED_ARRAY_TYPE, "unconstrained_array_type" , tcc_type, 0) |
30 | |
31 | /* A reference to an unconstrained array. This node only exists as an |
32 | intermediate node during the translation of a GNAT tree to a GCC tree; |
33 | it is never passed to GCC. The only field used is operand 0, which |
34 | is the fat pointer object. */ |
35 | DEFTREECODE (UNCONSTRAINED_ARRAY_REF, "unconstrained_array_ref" , |
36 | tcc_reference, 1) |
37 | |
38 | /* Same as SAVE_EXPR, but operand 1 contains the statement used to initialize |
39 | the temporary instead of using the value of operand 0 directly. */ |
40 | DEFTREECODE (LOAD_EXPR, "load_expr" , tcc_expression, 2) |
41 | |
42 | /* An expression that returns an RTL suitable for its type. Operand 0 |
43 | is an expression to be evaluated for side effects only. */ |
44 | DEFTREECODE (NULL_EXPR, "null_expr" , tcc_expression, 1) |
45 | |
46 | /* Same as PLUS_EXPR, except that no modulo reduction is applied. |
47 | This is used for loops and never shows up in the tree. */ |
48 | DEFTREECODE (PLUS_NOMOD_EXPR, "plus_nomod_expr" , tcc_binary, 2) |
49 | |
50 | /* Same as MINUS_EXPR, except that no modulo reduction is applied. |
51 | This is used for loops and never shows up in the tree. */ |
52 | DEFTREECODE (MINUS_NOMOD_EXPR, "minus_nomod_expr" , tcc_binary, 2) |
53 | |
54 | /* An expression that computes an exponentiation. Operand 0 is the base and |
55 | Operand 1 is the exponent. This node is never passed to GCC: it is only |
56 | used internally to describe fixed point types scale factors. */ |
57 | DEFTREECODE (POWER_EXPR, "power_expr" , tcc_binary, 2) |
58 | |
59 | /* Same as ADDR_EXPR, except that if the operand represents a bit field, |
60 | return the address of the byte containing the bit. This is used |
61 | for the Address attribute and never shows up in the tree. */ |
62 | DEFTREECODE (ATTR_ADDR_EXPR, "attr_addr_expr" , tcc_reference, 1) |
63 | |
64 | /* Here are the tree codes for the statement types known to Ada. These |
65 | must be at the end of this file to allow IS_ADA_STMT to work. */ |
66 | |
67 | /* This is how record_code_position and insert_code_for work. The former |
68 | makes this tree node, whose operand is a statement. The latter inserts |
69 | the actual statements into this node. Gimplification consists of |
70 | just returning the inner statement. */ |
71 | DEFTREECODE (STMT_STMT, "stmt_stmt" , tcc_statement, 1) |
72 | |
73 | /* A loop. LOOP_STMT_COND is the test to exit the loop. LOOP_STMT_UPDATE |
74 | is the statement to update the loop iteration variable at the continue |
75 | point. LOOP_STMT_BODY are the statements in the body of the loop. And |
76 | LOOP_STMT_LABEL points to the LABEL_DECL of the end label of the loop. */ |
77 | DEFTREECODE (LOOP_STMT, "loop_stmt" , tcc_statement, 4) |
78 | |
79 | /* Conditionally exit a loop. EXIT_STMT_COND is the condition, which, if |
80 | true, will cause the loop to be exited. If no condition is specified, |
81 | the loop is unconditionally exited. EXIT_STMT_LABEL is the end label |
82 | corresponding to the loop to exit. */ |
83 | DEFTREECODE (EXIT_STMT, "exit_stmt" , tcc_statement, 2) |
84 | |