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