1*404b540aSrobert/* This file contains the definitions and documentation for the 2*404b540aSrobert tree codes used in GCC. 3*404b540aSrobert Copyright (C) 1987, 1988, 1993, 1995, 1997, 1998, 2000, 2001, 2004, 2005, 4*404b540aSrobert 2006 Free Software Foundation, Inc. 5*404b540aSrobert 6*404b540aSrobertThis file is part of GCC. 7*404b540aSrobert 8*404b540aSrobertGCC is free software; you can redistribute it and/or modify it under 9*404b540aSrobertthe terms of the GNU General Public License as published by the Free 10*404b540aSrobertSoftware Foundation; either version 2, or (at your option) any later 11*404b540aSrobertversion. 12*404b540aSrobert 13*404b540aSrobertGCC is distributed in the hope that it will be useful, but WITHOUT ANY 14*404b540aSrobertWARRANTY; without even the implied warranty of MERCHANTABILITY or 15*404b540aSrobertFITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License 16*404b540aSrobertfor more details. 17*404b540aSrobert 18*404b540aSrobertYou should have received a copy of the GNU General Public License 19*404b540aSrobertalong with GCC; see the file COPYING. If not, write to the Free 20*404b540aSrobertSoftware Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 21*404b540aSrobert02110-1301, USA. */ 22*404b540aSrobert 23*404b540aSrobert 24*404b540aSrobert/* For tcc_references, tcc_expression, tcc_comparison, tcc_unary, 25*404b540aSrobert tcc_binary, and tcc_statement nodes, which use struct tree_exp, the 26*404b540aSrobert 4th element is the number of argument slots to allocate. This 27*404b540aSrobert determines the size of the tree node object. Other nodes use 28*404b540aSrobert different structures, and the size is determined by the tree_union 29*404b540aSrobert member structure; the 4th element should be zero. Languages that 30*404b540aSrobert define language-specific tcc_exceptional or tcc_constant codes must 31*404b540aSrobert define the tree_size langhook to say how big they are. 32*404b540aSrobert 33*404b540aSrobert These tree codes have been sorted so that the macros in tree.h that 34*404b540aSrobert check for various tree codes are optimized into range checks. This 35*404b540aSrobert gives a measurable performance improvement. When adding a new 36*404b540aSrobert code, consider its placement in relation to the other codes. */ 37*404b540aSrobert 38*404b540aSrobert/* Any erroneous construct is parsed into a node of this type. 39*404b540aSrobert This type of node is accepted without complaint in all contexts 40*404b540aSrobert by later parsing activities, to avoid multiple error messages 41*404b540aSrobert for one error. 42*404b540aSrobert No fields in these nodes are used except the TREE_CODE. */ 43*404b540aSrobertDEFTREECODE (ERROR_MARK, "error_mark", tcc_exceptional, 0) 44*404b540aSrobert 45*404b540aSrobert/* Used to represent a name (such as, in the DECL_NAME of a decl node). 46*404b540aSrobert Internally it looks like a STRING_CST node. 47*404b540aSrobert There is only one IDENTIFIER_NODE ever made for any particular name. 48*404b540aSrobert Use `get_identifier' to get it (or create it, the first time). */ 49*404b540aSrobertDEFTREECODE (IDENTIFIER_NODE, "identifier_node", tcc_exceptional, 0) 50*404b540aSrobert 51*404b540aSrobert/* Has the TREE_VALUE and TREE_PURPOSE fields. */ 52*404b540aSrobert/* These nodes are made into lists by chaining through the 53*404b540aSrobert TREE_CHAIN field. The elements of the list live in the 54*404b540aSrobert TREE_VALUE fields, while TREE_PURPOSE fields are occasionally 55*404b540aSrobert used as well to get the effect of Lisp association lists. */ 56*404b540aSrobertDEFTREECODE (TREE_LIST, "tree_list", tcc_exceptional, 0) 57*404b540aSrobert 58*404b540aSrobert/* These nodes contain an array of tree nodes. */ 59*404b540aSrobertDEFTREECODE (TREE_VEC, "tree_vec", tcc_exceptional, 0) 60*404b540aSrobert 61*404b540aSrobert/* A symbol binding block. These are arranged in a tree, 62*404b540aSrobert where the BLOCK_SUBBLOCKS field contains a chain of subblocks 63*404b540aSrobert chained through the BLOCK_CHAIN field. 64*404b540aSrobert BLOCK_SUPERCONTEXT points to the parent block. 65*404b540aSrobert For a block which represents the outermost scope of a function, it 66*404b540aSrobert points to the FUNCTION_DECL node. 67*404b540aSrobert BLOCK_VARS points to a chain of decl nodes. 68*404b540aSrobert BLOCK_CHAIN points to the next BLOCK at the same level. 69*404b540aSrobert BLOCK_ABSTRACT_ORIGIN points to the original (abstract) tree node which 70*404b540aSrobert this block is an instance of, or else is NULL to indicate that this 71*404b540aSrobert block is not an instance of anything else. When non-NULL, the value 72*404b540aSrobert could either point to another BLOCK node or it could point to a 73*404b540aSrobert FUNCTION_DECL node (e.g. in the case of a block representing the 74*404b540aSrobert outermost scope of a particular inlining of a function). 75*404b540aSrobert BLOCK_ABSTRACT is nonzero if the block represents an abstract 76*404b540aSrobert instance of a block (i.e. one which is nested within an abstract 77*404b540aSrobert instance of an inline function). 78*404b540aSrobert TREE_ASM_WRITTEN is nonzero if the block was actually referenced 79*404b540aSrobert in the generated assembly. */ 80*404b540aSrobertDEFTREECODE (BLOCK, "block", tcc_exceptional, 0) 81*404b540aSrobert 82*404b540aSrobert/* Each data type is represented by a tree node whose code is one of 83*404b540aSrobert the following: */ 84*404b540aSrobert/* Each node that represents a data type has a component TYPE_SIZE 85*404b540aSrobert containing a tree that is an expression for the size in bits. 86*404b540aSrobert The TYPE_MODE contains the machine mode for values of this type. 87*404b540aSrobert The TYPE_POINTER_TO field contains a type for a pointer to this type, 88*404b540aSrobert or zero if no such has been created yet. 89*404b540aSrobert The TYPE_NEXT_VARIANT field is used to chain together types 90*404b540aSrobert that are variants made by type modifiers such as "const" and "volatile". 91*404b540aSrobert The TYPE_MAIN_VARIANT field, in any member of such a chain, 92*404b540aSrobert points to the start of the chain. 93*404b540aSrobert The TYPE_NONCOPIED_PARTS field is a list specifying which parts 94*404b540aSrobert of an object of this type should *not* be copied by assignment. 95*404b540aSrobert The TREE_VALUE of each is a FIELD_DECL that should not be 96*404b540aSrobert copied. The TREE_PURPOSE is an initial value for that field when 97*404b540aSrobert an object of this type is initialized via an INIT_EXPR. It may 98*404b540aSrobert be NULL if no special value is required. Even the things in this 99*404b540aSrobert list are copied if the right-hand side of an assignment is known 100*404b540aSrobert to be a complete object (rather than being, perhaps, a subobject 101*404b540aSrobert of some other object.) The determination of what constitutes a 102*404b540aSrobert complete object is done by fixed_type_p. 103*404b540aSrobert The TYPE_NAME field contains info on the name used in the program 104*404b540aSrobert for this type (for GDB symbol table output). It is either a 105*404b540aSrobert TYPE_DECL node, for types that are typedefs, or an IDENTIFIER_NODE 106*404b540aSrobert in the case of structs, unions or enums that are known with a tag, 107*404b540aSrobert or zero for types that have no special name. 108*404b540aSrobert The TYPE_CONTEXT for any sort of type which could have a name or 109*404b540aSrobert which could have named members (e.g. tagged types in C/C++) will 110*404b540aSrobert point to the node which represents the scope of the given type, or 111*404b540aSrobert will be NULL_TREE if the type has "file scope". For most types, this 112*404b540aSrobert will point to a BLOCK node or a FUNCTION_DECL node, but it could also 113*404b540aSrobert point to a FUNCTION_TYPE node (for types whose scope is limited to the 114*404b540aSrobert formal parameter list of some function type specification) or it 115*404b540aSrobert could point to a RECORD_TYPE, UNION_TYPE or QUAL_UNION_TYPE node 116*404b540aSrobert (for C++ "member" types). 117*404b540aSrobert For non-tagged-types, TYPE_CONTEXT need not be set to anything in 118*404b540aSrobert particular, since any type which is of some type category (e.g. 119*404b540aSrobert an array type or a function type) which cannot either have a name 120*404b540aSrobert itself or have named members doesn't really have a "scope" per se. 121*404b540aSrobert The TREE_CHAIN field is used as a forward-references to names for 122*404b540aSrobert ENUMERAL_TYPE, RECORD_TYPE, UNION_TYPE, and QUAL_UNION_TYPE nodes; 123*404b540aSrobert see below. */ 124*404b540aSrobert 125*404b540aSrobert/* The ordering of the following codes is optimized for the checking 126*404b540aSrobert macros in tree.h. Changing the order will degrade the speed of the 127*404b540aSrobert compiler. OFFSET_TYPE, ENUMERAL_TYPE, BOOLEAN_TYPE, INTEGER_TYPE, 128*404b540aSrobert REAL_TYPE, POINTER_TYPE. */ 129*404b540aSrobert 130*404b540aSrobert/* An offset is a pointer relative to an object. 131*404b540aSrobert The TREE_TYPE field is the type of the object at the offset. 132*404b540aSrobert The TYPE_OFFSET_BASETYPE points to the node for the type of object 133*404b540aSrobert that the offset is relative to. */ 134*404b540aSrobertDEFTREECODE (OFFSET_TYPE, "offset_type", tcc_type, 0) 135*404b540aSrobert 136*404b540aSrobert/* C enums. The type node looks just like an INTEGER_TYPE node. 137*404b540aSrobert The symbols for the values of the enum type are defined by 138*404b540aSrobert CONST_DECL nodes, but the type does not point to them; 139*404b540aSrobert however, the TYPE_VALUES is a list in which each element's TREE_PURPOSE 140*404b540aSrobert is a name and the TREE_VALUE is the value (an INTEGER_CST node). */ 141*404b540aSrobert/* A forward reference `enum foo' when no enum named foo is defined yet 142*404b540aSrobert has zero (a null pointer) in its TYPE_SIZE. The tag name is in 143*404b540aSrobert the TYPE_NAME field. If the type is later defined, the normal 144*404b540aSrobert fields are filled in. 145*404b540aSrobert RECORD_TYPE, UNION_TYPE, and QUAL_UNION_TYPE forward refs are 146*404b540aSrobert treated similarly. */ 147*404b540aSrobertDEFTREECODE (ENUMERAL_TYPE, "enumeral_type", tcc_type, 0) 148*404b540aSrobert 149*404b540aSrobert/* Boolean type (true or false are the only values). Looks like an 150*404b540aSrobert INTEGRAL_TYPE. */ 151*404b540aSrobertDEFTREECODE (BOOLEAN_TYPE, "boolean_type", tcc_type, 0) 152*404b540aSrobert 153*404b540aSrobert/* Integer types in all languages, including char in C. 154*404b540aSrobert Also used for sub-ranges of other discrete types. 155*404b540aSrobert Has components TYPE_MIN_VALUE, TYPE_MAX_VALUE (expressions, inclusive) 156*404b540aSrobert and TYPE_PRECISION (number of bits used by this type). 157*404b540aSrobert In the case of a subrange type in Pascal, the TREE_TYPE 158*404b540aSrobert of this will point at the supertype (another INTEGER_TYPE, 159*404b540aSrobert or an ENUMERAL_TYPE or BOOLEAN_TYPE). 160*404b540aSrobert Otherwise, the TREE_TYPE is zero. */ 161*404b540aSrobertDEFTREECODE (INTEGER_TYPE, "integer_type", tcc_type, 0) 162*404b540aSrobert 163*404b540aSrobert/* C's float and double. Different floating types are distinguished 164*404b540aSrobert by machine mode and by the TYPE_SIZE and the TYPE_PRECISION. */ 165*404b540aSrobertDEFTREECODE (REAL_TYPE, "real_type", tcc_type, 0) 166*404b540aSrobert 167*404b540aSrobert/* The ordering of the following codes is optimized for the checking 168*404b540aSrobert macros in tree.h. Changing the order will degrade the speed of the 169*404b540aSrobert compiler. POINTER_TYPE, REFERENCE_TYPE. Note that this range 170*404b540aSrobert overlaps the previous range of ordered types. */ 171*404b540aSrobert 172*404b540aSrobert/* All pointer-to-x types have code POINTER_TYPE. 173*404b540aSrobert The TREE_TYPE points to the node for the type pointed to. */ 174*404b540aSrobertDEFTREECODE (POINTER_TYPE, "pointer_type", tcc_type, 0) 175*404b540aSrobert 176*404b540aSrobert/* A reference is like a pointer except that it is coerced 177*404b540aSrobert automatically to the value it points to. Used in C++. */ 178*404b540aSrobertDEFTREECODE (REFERENCE_TYPE, "reference_type", tcc_type, 0) 179*404b540aSrobert 180*404b540aSrobert/* The ordering of the following codes is optimized for the checking 181*404b540aSrobert macros in tree.h. Changing the order will degrade the speed of the 182*404b540aSrobert compiler. COMPLEX_TYPE, VECTOR_TYPE, ARRAY_TYPE. */ 183*404b540aSrobert 184*404b540aSrobert/* Complex number types. The TREE_TYPE field is the data type 185*404b540aSrobert of the real and imaginary parts. */ 186*404b540aSrobertDEFTREECODE (COMPLEX_TYPE, "complex_type", tcc_type, 0) 187*404b540aSrobert 188*404b540aSrobert/* Vector types. The TREE_TYPE field is the data type of the vector 189*404b540aSrobert elements. The TYPE_PRECISION field is the number of subparts of 190*404b540aSrobert the vector. */ 191*404b540aSrobertDEFTREECODE (VECTOR_TYPE, "vector_type", tcc_type, 0) 192*404b540aSrobert 193*404b540aSrobert/* The ordering of the following codes is optimized for the checking 194*404b540aSrobert macros in tree.h. Changing the order will degrade the speed of the 195*404b540aSrobert compiler. ARRAY_TYPE, RECORD_TYPE, UNION_TYPE, QUAL_UNION_TYPE. 196*404b540aSrobert Note that this range overlaps the previous range. */ 197*404b540aSrobert 198*404b540aSrobert/* Types of arrays. Special fields: 199*404b540aSrobert TREE_TYPE Type of an array element. 200*404b540aSrobert TYPE_DOMAIN Type to index by. 201*404b540aSrobert Its range of values specifies the array length. 202*404b540aSrobert The field TYPE_POINTER_TO (TREE_TYPE (array_type)) is always nonzero 203*404b540aSrobert and holds the type to coerce a value of that array type to in C. 204*404b540aSrobert TYPE_STRING_FLAG indicates a string (in contrast to an array of chars) 205*404b540aSrobert in languages (such as Chill) that make a distinction. */ 206*404b540aSrobert/* Array types in C or Pascal */ 207*404b540aSrobertDEFTREECODE (ARRAY_TYPE, "array_type", tcc_type, 0) 208*404b540aSrobert 209*404b540aSrobert/* Struct in C, or record in Pascal. */ 210*404b540aSrobert/* Special fields: 211*404b540aSrobert TYPE_FIELDS chain of FIELD_DECLs for the fields of the struct, 212*404b540aSrobert and VAR_DECLs, TYPE_DECLs and CONST_DECLs for record-scope variables, 213*404b540aSrobert types and enumerators. 214*404b540aSrobert A few may need to be added for Pascal. */ 215*404b540aSrobert/* See the comment above, before ENUMERAL_TYPE, for how 216*404b540aSrobert forward references to struct tags are handled in C. */ 217*404b540aSrobertDEFTREECODE (RECORD_TYPE, "record_type", tcc_type, 0) 218*404b540aSrobert 219*404b540aSrobert/* Union in C. Like a struct, except that the offsets of the fields 220*404b540aSrobert will all be zero. */ 221*404b540aSrobert/* See the comment above, before ENUMERAL_TYPE, for how 222*404b540aSrobert forward references to union tags are handled in C. */ 223*404b540aSrobertDEFTREECODE (UNION_TYPE, "union_type", tcc_type, 0) /* C union type */ 224*404b540aSrobert 225*404b540aSrobert/* Similar to UNION_TYPE, except that the expressions in DECL_QUALIFIER 226*404b540aSrobert in each FIELD_DECL determine what the union contains. The first 227*404b540aSrobert field whose DECL_QUALIFIER expression is true is deemed to occupy 228*404b540aSrobert the union. */ 229*404b540aSrobertDEFTREECODE (QUAL_UNION_TYPE, "qual_union_type", tcc_type, 0) 230*404b540aSrobert 231*404b540aSrobert/* The ordering of the following codes is optimized for the checking 232*404b540aSrobert macros in tree.h. Changing the order will degrade the speed of the 233*404b540aSrobert compiler. VOID_TYPE, FUNCTION_TYPE, METHOD_TYPE. */ 234*404b540aSrobert 235*404b540aSrobert/* The void type in C */ 236*404b540aSrobertDEFTREECODE (VOID_TYPE, "void_type", tcc_type, 0) 237*404b540aSrobert 238*404b540aSrobert/* Type of functions. Special fields: 239*404b540aSrobert TREE_TYPE type of value returned. 240*404b540aSrobert TYPE_ARG_TYPES list of types of arguments expected. 241*404b540aSrobert this list is made of TREE_LIST nodes. 242*404b540aSrobert Types of "Procedures" in languages where they are different from functions 243*404b540aSrobert have code FUNCTION_TYPE also, but then TREE_TYPE is zero or void type. */ 244*404b540aSrobertDEFTREECODE (FUNCTION_TYPE, "function_type", tcc_type, 0) 245*404b540aSrobert 246*404b540aSrobert/* METHOD_TYPE is the type of a function which takes an extra first 247*404b540aSrobert argument for "self", which is not present in the declared argument list. 248*404b540aSrobert The TREE_TYPE is the return type of the method. The TYPE_METHOD_BASETYPE 249*404b540aSrobert is the type of "self". TYPE_ARG_TYPES is the real argument list, which 250*404b540aSrobert includes the hidden argument for "self". */ 251*404b540aSrobertDEFTREECODE (METHOD_TYPE, "method_type", tcc_type, 0) 252*404b540aSrobert 253*404b540aSrobert/* This is a language-specific kind of type. 254*404b540aSrobert Its meaning is defined by the language front end. 255*404b540aSrobert layout_type does not know how to lay this out, 256*404b540aSrobert so the front-end must do so manually. */ 257*404b540aSrobertDEFTREECODE (LANG_TYPE, "lang_type", tcc_type, 0) 258*404b540aSrobert 259*404b540aSrobert/* Expressions */ 260*404b540aSrobert 261*404b540aSrobert/* First, the constants. */ 262*404b540aSrobert 263*404b540aSrobert/* Contents are in TREE_INT_CST_LOW and TREE_INT_CST_HIGH fields, 264*404b540aSrobert 32 bits each, giving us a 64 bit constant capability. INTEGER_CST 265*404b540aSrobert nodes can be shared, and therefore should be considered read only. 266*404b540aSrobert They should be copied, before setting a flag such as 267*404b540aSrobert TREE_OVERFLOW. If an INTEGER_CST has TREE_OVERFLOW or 268*404b540aSrobert TREE_CONSTANT_OVERFLOW already set, it is known to be unique. 269*404b540aSrobert INTEGER_CST nodes are created for the integral types, for pointer 270*404b540aSrobert types and for vector and float types in some circumstances. */ 271*404b540aSrobertDEFTREECODE (INTEGER_CST, "integer_cst", tcc_constant, 0) 272*404b540aSrobert 273*404b540aSrobert/* Contents are in TREE_REAL_CST field. */ 274*404b540aSrobertDEFTREECODE (REAL_CST, "real_cst", tcc_constant, 0) 275*404b540aSrobert 276*404b540aSrobert/* Contents are in TREE_REALPART and TREE_IMAGPART fields, 277*404b540aSrobert whose contents are other constant nodes. */ 278*404b540aSrobertDEFTREECODE (COMPLEX_CST, "complex_cst", tcc_constant, 0) 279*404b540aSrobert 280*404b540aSrobert/* Contents are in TREE_VECTOR_CST_ELTS field. */ 281*404b540aSrobertDEFTREECODE (VECTOR_CST, "vector_cst", tcc_constant, 0) 282*404b540aSrobert 283*404b540aSrobert/* Contents are TREE_STRING_LENGTH and the actual contents of the string. */ 284*404b540aSrobertDEFTREECODE (STRING_CST, "string_cst", tcc_constant, 0) 285*404b540aSrobert 286*404b540aSrobert/* Declarations. All references to names are represented as ..._DECL 287*404b540aSrobert nodes. The decls in one binding context are chained through the 288*404b540aSrobert TREE_CHAIN field. Each DECL has a DECL_NAME field which contains 289*404b540aSrobert an IDENTIFIER_NODE. (Some decls, most often labels, may have zero 290*404b540aSrobert as the DECL_NAME). DECL_CONTEXT points to the node representing 291*404b540aSrobert the context in which this declaration has its scope. For 292*404b540aSrobert FIELD_DECLs, this is the RECORD_TYPE, UNION_TYPE, or 293*404b540aSrobert QUAL_UNION_TYPE node that the field is a member of. For VAR_DECL, 294*404b540aSrobert PARM_DECL, FUNCTION_DECL, LABEL_DECL, and CONST_DECL nodes, this 295*404b540aSrobert points to either the FUNCTION_DECL for the containing function, the 296*404b540aSrobert RECORD_TYPE or UNION_TYPE for the containing type, or NULL_TREE or 297*404b540aSrobert a TRANSLATION_UNIT_DECL if the given decl has "file scope". 298*404b540aSrobert DECL_ABSTRACT_ORIGIN, if non-NULL, points to the original (abstract) 299*404b540aSrobert ..._DECL node of which this decl is an (inlined or template expanded) 300*404b540aSrobert instance. 301*404b540aSrobert The TREE_TYPE field holds the data type of the object, when relevant. 302*404b540aSrobert LABEL_DECLs have no data type. For TYPE_DECL, the TREE_TYPE field 303*404b540aSrobert contents are the type whose name is being declared. 304*404b540aSrobert The DECL_ALIGN, DECL_SIZE, 305*404b540aSrobert and DECL_MODE fields exist in decl nodes just as in type nodes. 306*404b540aSrobert They are unused in LABEL_DECL, TYPE_DECL and CONST_DECL nodes. 307*404b540aSrobert 308*404b540aSrobert DECL_FIELD_BIT_OFFSET holds an integer number of bits offset for 309*404b540aSrobert the location. DECL_VOFFSET holds an expression for a variable 310*404b540aSrobert offset; it is to be multiplied by DECL_VOFFSET_UNIT (an integer). 311*404b540aSrobert These fields are relevant only in FIELD_DECLs and PARM_DECLs. 312*404b540aSrobert 313*404b540aSrobert DECL_INITIAL holds the value to initialize a variable to, 314*404b540aSrobert or the value of a constant. For a function, it holds the body 315*404b540aSrobert (a node of type BLOCK representing the function's binding contour 316*404b540aSrobert and whose body contains the function's statements.) For a LABEL_DECL 317*404b540aSrobert in C, it is a flag, nonzero if the label's definition has been seen. 318*404b540aSrobert 319*404b540aSrobert PARM_DECLs use a special field: 320*404b540aSrobert DECL_ARG_TYPE is the type in which the argument is actually 321*404b540aSrobert passed, which may be different from its type within the function. 322*404b540aSrobert 323*404b540aSrobert FUNCTION_DECLs use four special fields: 324*404b540aSrobert DECL_ARGUMENTS holds a chain of PARM_DECL nodes for the arguments. 325*404b540aSrobert DECL_RESULT holds a RESULT_DECL node for the value of a function. 326*404b540aSrobert The DECL_RTL field is 0 for a function that returns no value. 327*404b540aSrobert (C functions returning void have zero here.) 328*404b540aSrobert The TREE_TYPE field is the type in which the result is actually 329*404b540aSrobert returned. This is usually the same as the return type of the 330*404b540aSrobert FUNCTION_DECL, but it may be a wider integer type because of 331*404b540aSrobert promotion. 332*404b540aSrobert DECL_FUNCTION_CODE is a code number that is nonzero for 333*404b540aSrobert built-in functions. Its value is an enum built_in_function 334*404b540aSrobert that says which built-in function it is. 335*404b540aSrobert 336*404b540aSrobert DECL_SOURCE_FILE holds a filename string and DECL_SOURCE_LINE 337*404b540aSrobert holds a line number. In some cases these can be the location of 338*404b540aSrobert a reference, if no definition has been seen. 339*404b540aSrobert 340*404b540aSrobert DECL_ABSTRACT is nonzero if the decl represents an abstract instance 341*404b540aSrobert of a decl (i.e. one which is nested within an abstract instance of a 342*404b540aSrobert inline function. */ 343*404b540aSrobert 344*404b540aSrobertDEFTREECODE (FUNCTION_DECL, "function_decl", tcc_declaration, 0) 345*404b540aSrobertDEFTREECODE (LABEL_DECL, "label_decl", tcc_declaration, 0) 346*404b540aSrobert/* The ordering of the following codes is optimized for the checking 347*404b540aSrobert macros in tree.h. Changing the order will degrade the speed of the 348*404b540aSrobert compiler. FIELD_DECL, VAR_DECL, CONST_DECL, PARM_DECL, 349*404b540aSrobert TYPE_DECL. */ 350*404b540aSrobertDEFTREECODE (FIELD_DECL, "field_decl", tcc_declaration, 0) 351*404b540aSrobertDEFTREECODE (VAR_DECL, "var_decl", tcc_declaration, 0) 352*404b540aSrobertDEFTREECODE (CONST_DECL, "const_decl", tcc_declaration, 0) 353*404b540aSrobertDEFTREECODE (PARM_DECL, "parm_decl", tcc_declaration, 0) 354*404b540aSrobertDEFTREECODE (TYPE_DECL, "type_decl", tcc_declaration, 0) 355*404b540aSrobertDEFTREECODE (RESULT_DECL, "result_decl", tcc_declaration, 0) 356*404b540aSrobert 357*404b540aSrobert/* Memory tags used in tree-ssa to represent memory locations in 358*404b540aSrobert virtual SSA. */ 359*404b540aSrobertDEFTREECODE (STRUCT_FIELD_TAG, "struct_field_tag", tcc_declaration, 0) 360*404b540aSrobertDEFTREECODE (NAME_MEMORY_TAG, "name_memory_tag", tcc_declaration, 0) 361*404b540aSrobertDEFTREECODE (SYMBOL_MEMORY_TAG, "symbol_memory_tag", tcc_declaration, 0) 362*404b540aSrobert 363*404b540aSrobert/* A namespace declaration. Namespaces appear in DECL_CONTEXT of other 364*404b540aSrobert _DECLs, providing a hierarchy of names. */ 365*404b540aSrobertDEFTREECODE (NAMESPACE_DECL, "namespace_decl", tcc_declaration, 0) 366*404b540aSrobert 367*404b540aSrobert/* A translation unit. This is not technically a declaration, since it 368*404b540aSrobert can't be looked up, but it's close enough. */ 369*404b540aSrobertDEFTREECODE (TRANSLATION_UNIT_DECL, "translation_unit_decl",\ 370*404b540aSrobert tcc_declaration, 0) 371*404b540aSrobert 372*404b540aSrobert/* References to storage. */ 373*404b540aSrobert 374*404b540aSrobert/* Value is structure or union component. 375*404b540aSrobert Operand 0 is the structure or union (an expression). 376*404b540aSrobert Operand 1 is the field (a node of type FIELD_DECL). 377*404b540aSrobert Operand 2, if present, is the value of DECL_FIELD_OFFSET, measured 378*404b540aSrobert in units of DECL_OFFSET_ALIGN / BITS_PER_UNIT. */ 379*404b540aSrobertDEFTREECODE (COMPONENT_REF, "component_ref", tcc_reference, 3) 380*404b540aSrobert 381*404b540aSrobert/* Reference to a group of bits within an object. Similar to COMPONENT_REF 382*404b540aSrobert except the position is given explicitly rather than via a FIELD_DECL. 383*404b540aSrobert Operand 0 is the structure or union expression; 384*404b540aSrobert operand 1 is a tree giving the number of bits being referenced; 385*404b540aSrobert operand 2 is a tree giving the position of the first referenced bit. 386*404b540aSrobert The field can be either a signed or unsigned field; 387*404b540aSrobert BIT_FIELD_REF_UNSIGNED says which. */ 388*404b540aSrobertDEFTREECODE (BIT_FIELD_REF, "bit_field_ref", tcc_reference, 3) 389*404b540aSrobert 390*404b540aSrobert/* The ordering of the following codes is optimized for the checking 391*404b540aSrobert macros in tree.h. Changing the order will degrade the speed of the 392*404b540aSrobert compiler. INDIRECT_REF, ALIGN_INDIRECT_REF, MISALIGNED_INDIRECT_REF. */ 393*404b540aSrobert 394*404b540aSrobert/* C unary `*' or Pascal `^'. One operand, an expression for a pointer. */ 395*404b540aSrobertDEFTREECODE (INDIRECT_REF, "indirect_ref", tcc_reference, 1) 396*404b540aSrobert 397*404b540aSrobert/* Like above, but aligns the referenced address (i.e, if the address 398*404b540aSrobert in P is not aligned on TYPE_ALIGN boundary, then &(*P) != P). */ 399*404b540aSrobertDEFTREECODE (ALIGN_INDIRECT_REF, "align_indirect_ref", tcc_reference, 1) 400*404b540aSrobert 401*404b540aSrobert/* Same as INDIRECT_REF, but also specifies the alignment of the referenced 402*404b540aSrobert address: 403*404b540aSrobert Operand 0 is the referenced address (a pointer); 404*404b540aSrobert Operand 1 is an INTEGER_CST which represents the alignment of the address, 405*404b540aSrobert or 0 if the alignment is unknown. */ 406*404b540aSrobertDEFTREECODE (MISALIGNED_INDIRECT_REF, "misaligned_indirect_ref", tcc_reference, 2) 407*404b540aSrobert 408*404b540aSrobert/* Array indexing. 409*404b540aSrobert Operand 0 is the array; operand 1 is a (single) array index. 410*404b540aSrobert Operand 2, if present, is a copy of TYPE_MIN_VALUE of the index. 411*404b540aSrobert Operand 3, if present, is the element size, measured in units of 412*404b540aSrobert the alignment of the element type. */ 413*404b540aSrobertDEFTREECODE (ARRAY_REF, "array_ref", tcc_reference, 4) 414*404b540aSrobert 415*404b540aSrobert/* Likewise, except that the result is a range ("slice") of the array. The 416*404b540aSrobert starting index of the resulting array is taken from operand 1 and the size 417*404b540aSrobert of the range is taken from the type of the expression. */ 418*404b540aSrobertDEFTREECODE (ARRAY_RANGE_REF, "array_range_ref", tcc_reference, 4) 419*404b540aSrobert 420*404b540aSrobert/* Used to represent lookup of runtime type dependent data. Often this is 421*404b540aSrobert a reference to a vtable, but it needn't be. Operands are: 422*404b540aSrobert OBJ_TYPE_REF_EXPR: An expression that evaluates the value to use. 423*404b540aSrobert OBJ_TYPE_REF_OBJECT: Is the object on whose behalf the lookup is 424*404b540aSrobert being performed. Through this the optimizers may be able to statically 425*404b540aSrobert determine the dynamic type of the object. 426*404b540aSrobert OBJ_TYPE_REF_TOKEN: Something front-end specific used to resolve the 427*404b540aSrobert reference to something simpler, usually to the address of a DECL. 428*404b540aSrobert Never touched by the middle-end. Good choices would be either an 429*404b540aSrobert identifier or a vtable index. */ 430*404b540aSrobertDEFTREECODE (OBJ_TYPE_REF, "obj_type_ref", tcc_expression, 3) 431*404b540aSrobert 432*404b540aSrobert/* The exception object from the runtime. */ 433*404b540aSrobertDEFTREECODE (EXC_PTR_EXPR, "exc_ptr_expr", tcc_expression, 0) 434*404b540aSrobert 435*404b540aSrobert/* The filter object from the runtime. */ 436*404b540aSrobertDEFTREECODE (FILTER_EXPR, "filter_expr", tcc_expression, 0) 437*404b540aSrobert 438*404b540aSrobert/* Constructor: return an aggregate value made from specified components. 439*404b540aSrobert In C, this is used only for structure and array initializers. 440*404b540aSrobert The operand is a sequence of component values made out of a VEC of 441*404b540aSrobert struct constructor_elt. 442*404b540aSrobert 443*404b540aSrobert For ARRAY_TYPE: 444*404b540aSrobert The field INDEX of each constructor_elt is the corresponding index. 445*404b540aSrobert If the index is a RANGE_EXPR, it is a short-hand for many nodes, 446*404b540aSrobert one for each index in the range. (If the corresponding field VALUE 447*404b540aSrobert has side-effects, they are evaluated once for each element. Wrap the 448*404b540aSrobert value in a SAVE_EXPR if you want to evaluate side effects only once.) 449*404b540aSrobert 450*404b540aSrobert For RECORD_TYPE, UNION_TYPE, or QUAL_UNION_TYPE: 451*404b540aSrobert The field INDEX of each node is a FIELD_DECL. */ 452*404b540aSrobertDEFTREECODE (CONSTRUCTOR, "constructor", tcc_exceptional, 0) 453*404b540aSrobert 454*404b540aSrobert/* The expression types are mostly straightforward, with the fourth argument 455*404b540aSrobert of DEFTREECODE saying how many operands there are. 456*404b540aSrobert Unless otherwise specified, the operands are expressions and the 457*404b540aSrobert types of all the operands and the expression must all be the same. */ 458*404b540aSrobert 459*404b540aSrobert/* Contains two expressions to compute, one followed by the other. 460*404b540aSrobert the first value is ignored. The second one's value is used. The 461*404b540aSrobert type of the first expression need not agree with the other types. */ 462*404b540aSrobertDEFTREECODE (COMPOUND_EXPR, "compound_expr", tcc_expression, 2) 463*404b540aSrobert 464*404b540aSrobert/* Assignment expression. Operand 0 is the what to set; 1, the new value. */ 465*404b540aSrobertDEFTREECODE (MODIFY_EXPR, "modify_expr", tcc_expression, 2) 466*404b540aSrobert 467*404b540aSrobert/* Initialization expression. Operand 0 is the variable to initialize; 468*404b540aSrobert Operand 1 is the initializer. This differs from MODIFY_EXPR in that any 469*404b540aSrobert reference to the referent of operand 0 within operand 1 is undefined. */ 470*404b540aSrobertDEFTREECODE (INIT_EXPR, "init_expr", tcc_expression, 2) 471*404b540aSrobert 472*404b540aSrobert/* For TARGET_EXPR, operand 0 is the target of an initialization, 473*404b540aSrobert operand 1 is the initializer for the target, which may be void 474*404b540aSrobert if simply expanding it initializes the target. 475*404b540aSrobert operand 2 is the cleanup for this node, if any. 476*404b540aSrobert operand 3 is the saved initializer after this node has been 477*404b540aSrobert expanded once; this is so we can re-expand the tree later. */ 478*404b540aSrobertDEFTREECODE (TARGET_EXPR, "target_expr", tcc_expression, 4) 479*404b540aSrobert 480*404b540aSrobert/* Conditional expression ( ... ? ... : ... in C). 481*404b540aSrobert Operand 0 is the condition. 482*404b540aSrobert Operand 1 is the then-value. 483*404b540aSrobert Operand 2 is the else-value. 484*404b540aSrobert Operand 0 may be of any type. 485*404b540aSrobert Operand 1 must have the same type as the entire expression, unless 486*404b540aSrobert it unconditionally throws an exception, in which case it should 487*404b540aSrobert have VOID_TYPE. The same constraints apply to operand 2. */ 488*404b540aSrobertDEFTREECODE (COND_EXPR, "cond_expr", tcc_expression, 3) 489*404b540aSrobert 490*404b540aSrobert/* Vector conditional expression. It is like COND_EXPR, but with 491*404b540aSrobert vector operands. 492*404b540aSrobert 493*404b540aSrobert A = VEC_COND_EXPR ( X < Y, B, C) 494*404b540aSrobert 495*404b540aSrobert means 496*404b540aSrobert 497*404b540aSrobert for (i=0; i<N; i++) 498*404b540aSrobert A[i] = X[i] < Y[i] ? B[i] : C[i]; 499*404b540aSrobert*/ 500*404b540aSrobertDEFTREECODE (VEC_COND_EXPR, "vec_cond_expr", tcc_expression, 3) 501*404b540aSrobert 502*404b540aSrobert/* Declare local variables, including making RTL and allocating space. 503*404b540aSrobert BIND_EXPR_VARS is a chain of VAR_DECL nodes for the variables. 504*404b540aSrobert BIND_EXPR_BODY is the body, the expression to be computed using 505*404b540aSrobert the variables. The value of operand 1 becomes that of the BIND_EXPR. 506*404b540aSrobert BIND_EXPR_BLOCK is the BLOCK that corresponds to these bindings 507*404b540aSrobert for debugging purposes. If this BIND_EXPR is actually expanded, 508*404b540aSrobert that sets the TREE_USED flag in the BLOCK. 509*404b540aSrobert 510*404b540aSrobert The BIND_EXPR is not responsible for informing parsers 511*404b540aSrobert about these variables. If the body is coming from the input file, 512*404b540aSrobert then the code that creates the BIND_EXPR is also responsible for 513*404b540aSrobert informing the parser of the variables. 514*404b540aSrobert 515*404b540aSrobert If the BIND_EXPR is ever expanded, its TREE_USED flag is set. 516*404b540aSrobert This tells the code for debugging symbol tables not to ignore the BIND_EXPR. 517*404b540aSrobert If the BIND_EXPR should be output for debugging but will not be expanded, 518*404b540aSrobert set the TREE_USED flag by hand. 519*404b540aSrobert 520*404b540aSrobert In order for the BIND_EXPR to be known at all, the code that creates it 521*404b540aSrobert must also install it as a subblock in the tree of BLOCK 522*404b540aSrobert nodes for the function. */ 523*404b540aSrobertDEFTREECODE (BIND_EXPR, "bind_expr", tcc_expression, 3) 524*404b540aSrobert 525*404b540aSrobert/* Function call. Operand 0 is the function. 526*404b540aSrobert Operand 1 is the argument list, a list of expressions 527*404b540aSrobert made out of a chain of TREE_LIST nodes. 528*404b540aSrobert Operand 2 is the static chain argument, or NULL. */ 529*404b540aSrobertDEFTREECODE (CALL_EXPR, "call_expr", tcc_expression, 3) 530*404b540aSrobert 531*404b540aSrobert/* Specify a value to compute along with its corresponding cleanup. 532*404b540aSrobert Operand 0 is the cleanup expression. 533*404b540aSrobert The cleanup is executed by the first enclosing CLEANUP_POINT_EXPR, 534*404b540aSrobert which must exist. This differs from TRY_CATCH_EXPR in that operand 1 535*404b540aSrobert is always evaluated when cleanups are run. */ 536*404b540aSrobertDEFTREECODE (WITH_CLEANUP_EXPR, "with_cleanup_expr", tcc_expression, 1) 537*404b540aSrobert 538*404b540aSrobert/* Specify a cleanup point. 539*404b540aSrobert Operand 0 is an expression that may have cleanups. If it does, those 540*404b540aSrobert cleanups are executed after the expression is expanded. 541*404b540aSrobert 542*404b540aSrobert Note that if the expression is a reference to storage, it is forced out 543*404b540aSrobert of memory before the cleanups are run. This is necessary to handle 544*404b540aSrobert cases where the cleanups modify the storage referenced; in the 545*404b540aSrobert expression 't.i', if 't' is a struct with an integer member 'i' and a 546*404b540aSrobert cleanup which modifies 'i', the value of the expression depends on 547*404b540aSrobert whether the cleanup is run before or after 't.i' is evaluated. When 548*404b540aSrobert expand_expr is run on 't.i', it returns a MEM. This is not good enough; 549*404b540aSrobert the value of 't.i' must be forced out of memory. 550*404b540aSrobert 551*404b540aSrobert As a consequence, the operand of a CLEANUP_POINT_EXPR must not have 552*404b540aSrobert BLKmode, because it will not be forced out of memory. */ 553*404b540aSrobertDEFTREECODE (CLEANUP_POINT_EXPR, "cleanup_point_expr", tcc_expression, 1) 554*404b540aSrobert 555*404b540aSrobert/* The following two codes are used in languages that have types where 556*404b540aSrobert some field in an object of the type contains a value that is used in 557*404b540aSrobert the computation of another field's offset or size and/or the size of 558*404b540aSrobert the type. The positions and/or sizes of fields can vary from object 559*404b540aSrobert to object of the same type or even for one and the same object within 560*404b540aSrobert its scope. 561*404b540aSrobert 562*404b540aSrobert Record types with discriminants in Ada or schema types in Pascal are 563*404b540aSrobert examples of such types. This mechanism is also used to create "fat 564*404b540aSrobert pointers" for unconstrained array types in Ada; the fat pointer is a 565*404b540aSrobert structure one of whose fields is a pointer to the actual array type 566*404b540aSrobert and the other field is a pointer to a template, which is a structure 567*404b540aSrobert containing the bounds of the array. The bounds in the type pointed 568*404b540aSrobert to by the first field in the fat pointer refer to the values in the 569*404b540aSrobert template. 570*404b540aSrobert 571*404b540aSrobert When you wish to construct such a type you need "self-references" 572*404b540aSrobert that allow you to reference the object having this type from the 573*404b540aSrobert TYPE node, i.e. without having a variable instantiating this type. 574*404b540aSrobert 575*404b540aSrobert Such a "self-references" is done using a PLACEHOLDER_EXPR. This is 576*404b540aSrobert a node that will later be replaced with the object being referenced. 577*404b540aSrobert Its type is that of the object and selects which object to use from 578*404b540aSrobert a chain of references (see below). No other slots are used in the 579*404b540aSrobert PLACEHOLDER_EXPR. 580*404b540aSrobert 581*404b540aSrobert For example, if your type FOO is a RECORD_TYPE with a field BAR, 582*404b540aSrobert and you need the value of <variable>.BAR to calculate TYPE_SIZE 583*404b540aSrobert (FOO), just substitute <variable> above with a PLACEHOLDER_EXPR 584*404b540aSrobert whose TREE_TYPE is FOO. Then construct your COMPONENT_REF with 585*404b540aSrobert the PLACEHOLDER_EXPR as the first operand (which has the correct 586*404b540aSrobert type). Later, when the size is needed in the program, the back-end 587*404b540aSrobert will find this PLACEHOLDER_EXPR and generate code to calculate the 588*404b540aSrobert actual size at run-time. In the following, we describe how this 589*404b540aSrobert calculation is done. 590*404b540aSrobert 591*404b540aSrobert When we wish to evaluate a size or offset, we check whether it contains a 592*404b540aSrobert PLACEHOLDER_EXPR. If it does, we call substitute_placeholder_in_expr 593*404b540aSrobert passing both that tree and an expression within which the object may be 594*404b540aSrobert found. The latter expression is the object itself in the simple case of 595*404b540aSrobert an Ada record with discriminant, but it can be the array in the case of an 596*404b540aSrobert unconstrained array. 597*404b540aSrobert 598*404b540aSrobert In the latter case, we need the fat pointer, because the bounds of 599*404b540aSrobert the array can only be accessed from it. However, we rely here on the 600*404b540aSrobert fact that the expression for the array contains the dereference of 601*404b540aSrobert the fat pointer that obtained the array pointer. */ 602*404b540aSrobert 603*404b540aSrobert/* Denotes a record to later be substituted before evaluating this expression. 604*404b540aSrobert The type of this expression is used to find the record to replace it. */ 605*404b540aSrobertDEFTREECODE (PLACEHOLDER_EXPR, "placeholder_expr", tcc_exceptional, 0) 606*404b540aSrobert 607*404b540aSrobert/* Simple arithmetic. */ 608*404b540aSrobertDEFTREECODE (PLUS_EXPR, "plus_expr", tcc_binary, 2) 609*404b540aSrobertDEFTREECODE (MINUS_EXPR, "minus_expr", tcc_binary, 2) 610*404b540aSrobertDEFTREECODE (MULT_EXPR, "mult_expr", tcc_binary, 2) 611*404b540aSrobert 612*404b540aSrobert/* Division for integer result that rounds the quotient toward zero. */ 613*404b540aSrobertDEFTREECODE (TRUNC_DIV_EXPR, "trunc_div_expr", tcc_binary, 2) 614*404b540aSrobert 615*404b540aSrobert/* Division for integer result that rounds the quotient toward infinity. */ 616*404b540aSrobertDEFTREECODE (CEIL_DIV_EXPR, "ceil_div_expr", tcc_binary, 2) 617*404b540aSrobert 618*404b540aSrobert/* Division for integer result that rounds toward minus infinity. */ 619*404b540aSrobertDEFTREECODE (FLOOR_DIV_EXPR, "floor_div_expr", tcc_binary, 2) 620*404b540aSrobert 621*404b540aSrobert/* Division for integer result that rounds toward nearest integer. */ 622*404b540aSrobertDEFTREECODE (ROUND_DIV_EXPR, "round_div_expr", tcc_binary, 2) 623*404b540aSrobert 624*404b540aSrobert/* Four kinds of remainder that go with the four kinds of division. */ 625*404b540aSrobertDEFTREECODE (TRUNC_MOD_EXPR, "trunc_mod_expr", tcc_binary, 2) 626*404b540aSrobertDEFTREECODE (CEIL_MOD_EXPR, "ceil_mod_expr", tcc_binary, 2) 627*404b540aSrobertDEFTREECODE (FLOOR_MOD_EXPR, "floor_mod_expr", tcc_binary, 2) 628*404b540aSrobertDEFTREECODE (ROUND_MOD_EXPR, "round_mod_expr", tcc_binary, 2) 629*404b540aSrobert 630*404b540aSrobert/* Division for real result. */ 631*404b540aSrobertDEFTREECODE (RDIV_EXPR, "rdiv_expr", tcc_binary, 2) 632*404b540aSrobert 633*404b540aSrobert/* Division which is not supposed to need rounding. 634*404b540aSrobert Used for pointer subtraction in C. */ 635*404b540aSrobertDEFTREECODE (EXACT_DIV_EXPR, "exact_div_expr", tcc_binary, 2) 636*404b540aSrobert 637*404b540aSrobert/* Conversion of real to fixed point: four ways to round, 638*404b540aSrobert like the four ways to divide. 639*404b540aSrobert CONVERT_EXPR can also be used to convert a real to an integer, 640*404b540aSrobert and that is what is used in languages that do not have ways of 641*404b540aSrobert specifying which of these is wanted. Maybe these are not needed. */ 642*404b540aSrobertDEFTREECODE (FIX_TRUNC_EXPR, "fix_trunc_expr", tcc_unary, 1) 643*404b540aSrobertDEFTREECODE (FIX_CEIL_EXPR, "fix_ceil_expr", tcc_unary, 1) 644*404b540aSrobertDEFTREECODE (FIX_FLOOR_EXPR, "fix_floor_expr", tcc_unary, 1) 645*404b540aSrobertDEFTREECODE (FIX_ROUND_EXPR, "fix_round_expr", tcc_unary, 1) 646*404b540aSrobert 647*404b540aSrobert/* Conversion of an integer to a real. */ 648*404b540aSrobertDEFTREECODE (FLOAT_EXPR, "float_expr", tcc_unary, 1) 649*404b540aSrobert 650*404b540aSrobert/* Unary negation. */ 651*404b540aSrobertDEFTREECODE (NEGATE_EXPR, "negate_expr", tcc_unary, 1) 652*404b540aSrobert 653*404b540aSrobert/* Minimum and maximum values. When used with floating point, if both 654*404b540aSrobert operands are zeros, or if either operand is NaN, then it is unspecified 655*404b540aSrobert which of the two operands is returned as the result. */ 656*404b540aSrobertDEFTREECODE (MIN_EXPR, "min_expr", tcc_binary, 2) 657*404b540aSrobertDEFTREECODE (MAX_EXPR, "max_expr", tcc_binary, 2) 658*404b540aSrobert 659*404b540aSrobert/* Represents the absolute value of the operand. 660*404b540aSrobert 661*404b540aSrobert An ABS_EXPR must have either an INTEGER_TYPE or a REAL_TYPE. The 662*404b540aSrobert operand of the ABS_EXPR must have the same type. */ 663*404b540aSrobertDEFTREECODE (ABS_EXPR, "abs_expr", tcc_unary, 1) 664*404b540aSrobert 665*404b540aSrobert/* Shift operations for shift and rotate. 666*404b540aSrobert Shift means logical shift if done on an 667*404b540aSrobert unsigned type, arithmetic shift if done on a signed type. 668*404b540aSrobert The second operand is the number of bits to 669*404b540aSrobert shift by; it need not be the same type as the first operand and result. 670*404b540aSrobert Note that the result is undefined if the second operand is larger 671*404b540aSrobert than or equal to the first operand's type size. */ 672*404b540aSrobertDEFTREECODE (LSHIFT_EXPR, "lshift_expr", tcc_binary, 2) 673*404b540aSrobertDEFTREECODE (RSHIFT_EXPR, "rshift_expr", tcc_binary, 2) 674*404b540aSrobertDEFTREECODE (LROTATE_EXPR, "lrotate_expr", tcc_binary, 2) 675*404b540aSrobertDEFTREECODE (RROTATE_EXPR, "rrotate_expr", tcc_binary, 2) 676*404b540aSrobert 677*404b540aSrobert/* Bitwise operations. Operands have same mode as result. */ 678*404b540aSrobertDEFTREECODE (BIT_IOR_EXPR, "bit_ior_expr", tcc_binary, 2) 679*404b540aSrobertDEFTREECODE (BIT_XOR_EXPR, "bit_xor_expr", tcc_binary, 2) 680*404b540aSrobertDEFTREECODE (BIT_AND_EXPR, "bit_and_expr", tcc_binary, 2) 681*404b540aSrobertDEFTREECODE (BIT_NOT_EXPR, "bit_not_expr", tcc_unary, 1) 682*404b540aSrobert 683*404b540aSrobert/* ANDIF and ORIF allow the second operand not to be computed if the 684*404b540aSrobert value of the expression is determined from the first operand. AND, 685*404b540aSrobert OR, and XOR always compute the second operand whether its value is 686*404b540aSrobert needed or not (for side effects). The operand may have 687*404b540aSrobert BOOLEAN_TYPE or INTEGER_TYPE. In either case, the argument will be 688*404b540aSrobert either zero or one. For example, a TRUTH_NOT_EXPR will never have 689*404b540aSrobert an INTEGER_TYPE VAR_DECL as its argument; instead, a NE_EXPR will be 690*404b540aSrobert used to compare the VAR_DECL to zero, thereby obtaining a node with 691*404b540aSrobert value zero or one. */ 692*404b540aSrobertDEFTREECODE (TRUTH_ANDIF_EXPR, "truth_andif_expr", tcc_expression, 2) 693*404b540aSrobertDEFTREECODE (TRUTH_ORIF_EXPR, "truth_orif_expr", tcc_expression, 2) 694*404b540aSrobertDEFTREECODE (TRUTH_AND_EXPR, "truth_and_expr", tcc_expression, 2) 695*404b540aSrobertDEFTREECODE (TRUTH_OR_EXPR, "truth_or_expr", tcc_expression, 2) 696*404b540aSrobertDEFTREECODE (TRUTH_XOR_EXPR, "truth_xor_expr", tcc_expression, 2) 697*404b540aSrobertDEFTREECODE (TRUTH_NOT_EXPR, "truth_not_expr", tcc_expression, 1) 698*404b540aSrobert 699*404b540aSrobert/* Relational operators. 700*404b540aSrobert `EQ_EXPR' and `NE_EXPR' are allowed for any types. 701*404b540aSrobert The others are allowed only for integer (or pointer or enumeral) 702*404b540aSrobert or real types. 703*404b540aSrobert In all cases the operands will have the same type, 704*404b540aSrobert and the value is always the type used by the language for booleans. */ 705*404b540aSrobertDEFTREECODE (LT_EXPR, "lt_expr", tcc_comparison, 2) 706*404b540aSrobertDEFTREECODE (LE_EXPR, "le_expr", tcc_comparison, 2) 707*404b540aSrobertDEFTREECODE (GT_EXPR, "gt_expr", tcc_comparison, 2) 708*404b540aSrobertDEFTREECODE (GE_EXPR, "ge_expr", tcc_comparison, 2) 709*404b540aSrobertDEFTREECODE (EQ_EXPR, "eq_expr", tcc_comparison, 2) 710*404b540aSrobertDEFTREECODE (NE_EXPR, "ne_expr", tcc_comparison, 2) 711*404b540aSrobert 712*404b540aSrobert/* Additional relational operators for floating point unordered. */ 713*404b540aSrobertDEFTREECODE (UNORDERED_EXPR, "unordered_expr", tcc_comparison, 2) 714*404b540aSrobertDEFTREECODE (ORDERED_EXPR, "ordered_expr", tcc_comparison, 2) 715*404b540aSrobert 716*404b540aSrobert/* These are equivalent to unordered or ... */ 717*404b540aSrobertDEFTREECODE (UNLT_EXPR, "unlt_expr", tcc_comparison, 2) 718*404b540aSrobertDEFTREECODE (UNLE_EXPR, "unle_expr", tcc_comparison, 2) 719*404b540aSrobertDEFTREECODE (UNGT_EXPR, "ungt_expr", tcc_comparison, 2) 720*404b540aSrobertDEFTREECODE (UNGE_EXPR, "unge_expr", tcc_comparison, 2) 721*404b540aSrobertDEFTREECODE (UNEQ_EXPR, "uneq_expr", tcc_comparison, 2) 722*404b540aSrobert 723*404b540aSrobert/* This is the reverse of uneq_expr. */ 724*404b540aSrobertDEFTREECODE (LTGT_EXPR, "ltgt_expr", tcc_comparison, 2) 725*404b540aSrobert 726*404b540aSrobertDEFTREECODE (RANGE_EXPR, "range_expr", tcc_binary, 2) 727*404b540aSrobert 728*404b540aSrobert/* Represents a conversion of type of a value. 729*404b540aSrobert All conversions, including implicit ones, must be 730*404b540aSrobert represented by CONVERT_EXPR or NOP_EXPR nodes. */ 731*404b540aSrobertDEFTREECODE (CONVERT_EXPR, "convert_expr", tcc_unary, 1) 732*404b540aSrobert 733*404b540aSrobert/* Represents a conversion expected to require no code to be generated. */ 734*404b540aSrobertDEFTREECODE (NOP_EXPR, "nop_expr", tcc_unary, 1) 735*404b540aSrobert 736*404b540aSrobert/* Value is same as argument, but guaranteed not an lvalue. */ 737*404b540aSrobertDEFTREECODE (NON_LVALUE_EXPR, "non_lvalue_expr", tcc_unary, 1) 738*404b540aSrobert 739*404b540aSrobert/* Represents viewing something of one type as being of a second type. 740*404b540aSrobert This corresponds to an "Unchecked Conversion" in Ada and roughly to 741*404b540aSrobert the idiom *(type2 *)&X in C. The only operand is the value to be 742*404b540aSrobert viewed as being of another type. It is undefined if the type of the 743*404b540aSrobert input and of the expression have different sizes. 744*404b540aSrobert 745*404b540aSrobert This code may also be used within the LHS of a MODIFY_EXPR, in which 746*404b540aSrobert case no actual data motion may occur. TREE_ADDRESSABLE will be set in 747*404b540aSrobert this case and GCC must abort if it could not do the operation without 748*404b540aSrobert generating insns. */ 749*404b540aSrobertDEFTREECODE (VIEW_CONVERT_EXPR, "view_convert_expr", tcc_reference, 1) 750*404b540aSrobert 751*404b540aSrobert/* Represents something we computed once and will use multiple times. 752*404b540aSrobert First operand is that expression. After it is evaluated once, it 753*404b540aSrobert will be replaced by the temporary variable that holds the value. */ 754*404b540aSrobertDEFTREECODE (SAVE_EXPR, "save_expr", tcc_expression, 1) 755*404b540aSrobert 756*404b540aSrobert/* & in C. Value is the address at which the operand's value resides. 757*404b540aSrobert Operand may have any mode. Result mode is Pmode. */ 758*404b540aSrobertDEFTREECODE (ADDR_EXPR, "addr_expr", tcc_expression, 1) 759*404b540aSrobert 760*404b540aSrobert/* Operand0 is a function constant; result is part N of a function 761*404b540aSrobert descriptor of type ptr_mode. */ 762*404b540aSrobertDEFTREECODE (FDESC_EXPR, "fdesc_expr", tcc_expression, 2) 763*404b540aSrobert 764*404b540aSrobert/* Given two real or integer operands of the same type, 765*404b540aSrobert returns a complex value of the corresponding complex type. */ 766*404b540aSrobertDEFTREECODE (COMPLEX_EXPR, "complex_expr", tcc_binary, 2) 767*404b540aSrobert 768*404b540aSrobert/* Complex conjugate of operand. Used only on complex types. */ 769*404b540aSrobertDEFTREECODE (CONJ_EXPR, "conj_expr", tcc_unary, 1) 770*404b540aSrobert 771*404b540aSrobert/* Used only on an operand of complex type, these return 772*404b540aSrobert a value of the corresponding component type. */ 773*404b540aSrobertDEFTREECODE (REALPART_EXPR, "realpart_expr", tcc_reference, 1) 774*404b540aSrobertDEFTREECODE (IMAGPART_EXPR, "imagpart_expr", tcc_reference, 1) 775*404b540aSrobert 776*404b540aSrobert/* Nodes for ++ and -- in C. 777*404b540aSrobert The second arg is how much to increment or decrement by. 778*404b540aSrobert For a pointer, it would be the size of the object pointed to. */ 779*404b540aSrobertDEFTREECODE (PREDECREMENT_EXPR, "predecrement_expr", tcc_expression, 2) 780*404b540aSrobertDEFTREECODE (PREINCREMENT_EXPR, "preincrement_expr", tcc_expression, 2) 781*404b540aSrobertDEFTREECODE (POSTDECREMENT_EXPR, "postdecrement_expr", tcc_expression, 2) 782*404b540aSrobertDEFTREECODE (POSTINCREMENT_EXPR, "postincrement_expr", tcc_expression, 2) 783*404b540aSrobert 784*404b540aSrobert/* Used to implement `va_arg'. */ 785*404b540aSrobertDEFTREECODE (VA_ARG_EXPR, "va_arg_expr", tcc_expression, 1) 786*404b540aSrobert 787*404b540aSrobert/* Evaluate operand 1. If and only if an exception is thrown during 788*404b540aSrobert the evaluation of operand 1, evaluate operand 2. 789*404b540aSrobert 790*404b540aSrobert This differs from TRY_FINALLY_EXPR in that operand 2 is not evaluated 791*404b540aSrobert on a normal or jump exit, only on an exception. */ 792*404b540aSrobertDEFTREECODE (TRY_CATCH_EXPR, "try_catch_expr", tcc_statement, 2) 793*404b540aSrobert 794*404b540aSrobert/* Evaluate the first operand. 795*404b540aSrobert The second operand is a cleanup expression which is evaluated 796*404b540aSrobert on any exit (normal, exception, or jump out) from this expression. */ 797*404b540aSrobertDEFTREECODE (TRY_FINALLY_EXPR, "try_finally", tcc_statement, 2) 798*404b540aSrobert 799*404b540aSrobert/* These types of expressions have no useful value, 800*404b540aSrobert and always have side effects. */ 801*404b540aSrobert 802*404b540aSrobert/* Used to represent a local declaration. The operand is DECL_EXPR_DECL. */ 803*404b540aSrobertDEFTREECODE (DECL_EXPR, "decl_expr", tcc_statement, 1) 804*404b540aSrobert 805*404b540aSrobert/* A label definition, encapsulated as a statement. 806*404b540aSrobert Operand 0 is the LABEL_DECL node for the label that appears here. 807*404b540aSrobert The type should be void and the value should be ignored. */ 808*404b540aSrobertDEFTREECODE (LABEL_EXPR, "label_expr", tcc_statement, 1) 809*404b540aSrobert 810*404b540aSrobert/* GOTO. Operand 0 is a LABEL_DECL node or an expression. 811*404b540aSrobert The type should be void and the value should be ignored. */ 812*404b540aSrobertDEFTREECODE (GOTO_EXPR, "goto_expr", tcc_statement, 1) 813*404b540aSrobert 814*404b540aSrobert/* RETURN. Evaluates operand 0, then returns from the current function. 815*404b540aSrobert Presumably that operand is an assignment that stores into the 816*404b540aSrobert RESULT_DECL that hold the value to be returned. 817*404b540aSrobert The operand may be null. 818*404b540aSrobert The type should be void and the value should be ignored. */ 819*404b540aSrobertDEFTREECODE (RETURN_EXPR, "return_expr", tcc_statement, 1) 820*404b540aSrobert 821*404b540aSrobert/* Exit the inner most loop conditionally. Operand 0 is the condition. 822*404b540aSrobert The type should be void and the value should be ignored. */ 823*404b540aSrobertDEFTREECODE (EXIT_EXPR, "exit_expr", tcc_statement, 1) 824*404b540aSrobert 825*404b540aSrobert/* A loop. Operand 0 is the body of the loop. 826*404b540aSrobert It must contain an EXIT_EXPR or is an infinite loop. 827*404b540aSrobert The type should be void and the value should be ignored. */ 828*404b540aSrobertDEFTREECODE (LOOP_EXPR, "loop_expr", tcc_statement, 1) 829*404b540aSrobert 830*404b540aSrobert/* Switch expression. 831*404b540aSrobert 832*404b540aSrobert TREE_TYPE is the original type of the condition, before any 833*404b540aSrobert language required type conversions. It may be NULL, in which case 834*404b540aSrobert the original type and final types are assumed to be the same. 835*404b540aSrobert 836*404b540aSrobert Operand 0 is the expression used to perform the branch, 837*404b540aSrobert Operand 1 is the body of the switch, which probably contains 838*404b540aSrobert CASE_LABEL_EXPRs. It may also be NULL, in which case operand 2 839*404b540aSrobert must not be NULL. 840*404b540aSrobert Operand 2 is either NULL_TREE or a TREE_VEC of the CASE_LABEL_EXPRs 841*404b540aSrobert of all the cases. */ 842*404b540aSrobertDEFTREECODE (SWITCH_EXPR, "switch_expr", tcc_statement, 3) 843*404b540aSrobert 844*404b540aSrobert/* Used to represent a case label. The operands are CASE_LOW and 845*404b540aSrobert CASE_HIGH, respectively. If CASE_LOW is NULL_TREE, the label is a 846*404b540aSrobert 'default' label. If CASE_HIGH is NULL_TREE, the label is a normal case 847*404b540aSrobert label. CASE_LABEL is the corresponding LABEL_DECL. */ 848*404b540aSrobertDEFTREECODE (CASE_LABEL_EXPR, "case_label_expr", tcc_statement, 3) 849*404b540aSrobert 850*404b540aSrobert/* RESX. Resume execution after an exception. Operand 0 is a 851*404b540aSrobert number indicating the exception region that is being left. */ 852*404b540aSrobertDEFTREECODE (RESX_EXPR, "resx_expr", tcc_statement, 1) 853*404b540aSrobert 854*404b540aSrobert/* Used to represent an inline assembly statement. ASM_STRING returns a 855*404b540aSrobert STRING_CST for the instruction (e.g., "mov x, y"). ASM_OUTPUTS, 856*404b540aSrobert ASM_INPUTS, and ASM_CLOBBERS represent the outputs, inputs, and clobbers 857*404b540aSrobert for the statement. */ 858*404b540aSrobertDEFTREECODE (ASM_EXPR, "asm_expr", tcc_statement, 4) 859*404b540aSrobert 860*404b540aSrobert/* Variable references for SSA analysis. New SSA names are created every 861*404b540aSrobert time a variable is assigned a new value. The SSA builder uses SSA_NAME 862*404b540aSrobert nodes to implement SSA versioning. */ 863*404b540aSrobertDEFTREECODE (SSA_NAME, "ssa_name", tcc_exceptional, 0) 864*404b540aSrobert 865*404b540aSrobert/* SSA PHI operator. PHI_RESULT is the new SSA_NAME node created by 866*404b540aSrobert the PHI node. PHI_ARG_LENGTH is the number of arguments. 867*404b540aSrobert PHI_ARG_ELT returns the Ith tuple <ssa_name, edge> from the 868*404b540aSrobert argument list. Each tuple contains the incoming reaching 869*404b540aSrobert definition (SSA_NAME node) and the edge via which that definition 870*404b540aSrobert is coming through. */ 871*404b540aSrobertDEFTREECODE (PHI_NODE, "phi_node", tcc_exceptional, 0) 872*404b540aSrobert 873*404b540aSrobert/* Used to represent a typed exception handler. CATCH_TYPES is the type (or 874*404b540aSrobert list of types) handled, and CATCH_BODY is the code for the handler. */ 875*404b540aSrobertDEFTREECODE (CATCH_EXPR, "catch_expr", tcc_statement, 2) 876*404b540aSrobert 877*404b540aSrobert/* Used to represent an exception specification. EH_FILTER_TYPES is a list 878*404b540aSrobert of allowed types, and EH_FILTER_FAILURE is an expression to evaluate on 879*404b540aSrobert failure. EH_FILTER_MUST_NOT_THROW controls which range type to use when 880*404b540aSrobert expanding. */ 881*404b540aSrobertDEFTREECODE (EH_FILTER_EXPR, "eh_filter_expr", tcc_statement, 2) 882*404b540aSrobert 883*404b540aSrobert/* Node used for describing a property that is known at compile 884*404b540aSrobert time. */ 885*404b540aSrobertDEFTREECODE (SCEV_KNOWN, "scev_known", tcc_expression, 0) 886*404b540aSrobert 887*404b540aSrobert/* Node used for describing a property that is not known at compile 888*404b540aSrobert time. */ 889*404b540aSrobertDEFTREECODE (SCEV_NOT_KNOWN, "scev_not_known", tcc_expression, 0) 890*404b540aSrobert 891*404b540aSrobert/* Polynomial chains of recurrences. 892*404b540aSrobert Under the form: cr = {CHREC_LEFT (cr), +, CHREC_RIGHT (cr)}. */ 893*404b540aSrobertDEFTREECODE (POLYNOMIAL_CHREC, "polynomial_chrec", tcc_expression, 3) 894*404b540aSrobert 895*404b540aSrobert/* Used to chain children of container statements together. 896*404b540aSrobert Use the interface in tree-iterator.h to access this node. */ 897*404b540aSrobertDEFTREECODE (STATEMENT_LIST, "statement_list", tcc_exceptional, 0) 898*404b540aSrobert 899*404b540aSrobert/* Value handles. Artificial nodes to represent expressions in 900*404b540aSrobert partial redundancy elimination (tree-ssa-pre.c). These nodes are 901*404b540aSrobert used for expression canonicalization. If two expressions compute 902*404b540aSrobert the same value, they will be assigned the same value handle. */ 903*404b540aSrobertDEFTREECODE (VALUE_HANDLE, "value_handle", tcc_exceptional, 0) 904*404b540aSrobert 905*404b540aSrobert/* Predicate assertion. Artificial expression generated by the optimizers 906*404b540aSrobert to keep track of predicate values. This expression may only appear on 907*404b540aSrobert the RHS of assignments. 908*404b540aSrobert 909*404b540aSrobert Given X = ASSERT_EXPR <Y, EXPR>, the optimizers can infer 910*404b540aSrobert two things: 911*404b540aSrobert 912*404b540aSrobert 1- X is a copy of Y. 913*404b540aSrobert 2- EXPR is a GIMPLE conditional expression (as defined by 914*404b540aSrobert is_gimple_condexpr) and is known to be true. 915*404b540aSrobert 916*404b540aSrobert The type of the expression is the same as Y. */ 917*404b540aSrobertDEFTREECODE (ASSERT_EXPR, "assert_expr", tcc_expression, 2) 918*404b540aSrobert 919*404b540aSrobert/* Base class information. Holds information about a class as a 920*404b540aSrobert baseclass of itself or another class. */ 921*404b540aSrobertDEFTREECODE (TREE_BINFO, "tree_binfo", tcc_exceptional, 0) 922*404b540aSrobert 923*404b540aSrobert/* Records the size for an expression of variable size type. This is 924*404b540aSrobert for use in contexts in which we are accessing the entire object, 925*404b540aSrobert such as for a function call, or block copy. 926*404b540aSrobert Operand 0 is the real expression. 927*404b540aSrobert Operand 1 is the size of the type in the expression. */ 928*404b540aSrobertDEFTREECODE (WITH_SIZE_EXPR, "with_size_expr", tcc_expression, 2) 929*404b540aSrobert 930*404b540aSrobert/* Extract elements from two input vectors Operand 0 and Operand 1 931*404b540aSrobert size VS, according to the offset OFF defined by Operand 2 as 932*404b540aSrobert follows: 933*404b540aSrobert If OFF > 0, the last VS - OFF elements of vector OP0 are concatenated to 934*404b540aSrobert the first OFF elements of the vector OP1. 935*404b540aSrobert If OFF == 0, then the returned vector is OP1. 936*404b540aSrobert On different targets OFF may take different forms; It can be an address, in 937*404b540aSrobert which case its low log2(VS)-1 bits define the offset, or it can be a mask 938*404b540aSrobert generated by the builtin targetm.vectorize.mask_for_load_builtin_decl. */ 939*404b540aSrobertDEFTREECODE (REALIGN_LOAD_EXPR, "realign_load", tcc_expression, 3) 940*404b540aSrobert 941*404b540aSrobert/* Low-level memory addressing. Operands are SYMBOL (static or global 942*404b540aSrobert variable), BASE (register), INDEX (register), STEP (integer constant), 943*404b540aSrobert OFFSET (integer constant). Corresponding address is 944*404b540aSrobert SYMBOL + BASE + STEP * INDEX + OFFSET. Only variations and values valid on 945*404b540aSrobert the target are allowed. 946*404b540aSrobert 947*404b540aSrobert The type of STEP, INDEX and OFFSET is sizetype. The type of BASE is 948*404b540aSrobert sizetype or a pointer type (if SYMBOL is NULL). 949*404b540aSrobert 950*404b540aSrobert The sixth argument is the reference to the original memory access, which 951*404b540aSrobert is preserved for the purposes of the RTL alias analysis. The seventh 952*404b540aSrobert argument is a tag representing results of the tree level alias analysis. */ 953*404b540aSrobert 954*404b540aSrobertDEFTREECODE (TARGET_MEM_REF, "target_mem_ref", tcc_reference, 7) 955*404b540aSrobert 956*404b540aSrobert/* The ordering of the codes between OMP_PARALLEL and OMP_CRITICAL is 957*404b540aSrobert exposed to TREE_RANGE_CHECK. */ 958*404b540aSrobert/* OpenMP - #pragma omp parallel [clause1 ... clauseN] 959*404b540aSrobert Operand 0: OMP_PARALLEL_BODY: Code to be executed by all threads. 960*404b540aSrobert Operand 1: OMP_PARALLEL_CLAUSES: List of clauses. 961*404b540aSrobert Operand 2: OMP_PARALLEL_FN: FUNCTION_DECL used when outlining the 962*404b540aSrobert body of the parallel region. Only valid after 963*404b540aSrobert pass_lower_omp. 964*404b540aSrobert Operand 3: OMP_PARALLEL_DATA_ARG: Local variable in the parent 965*404b540aSrobert function containing data to be shared with the child 966*404b540aSrobert function. */ 967*404b540aSrobert 968*404b540aSrobertDEFTREECODE (OMP_PARALLEL, "omp_parallel", tcc_statement, 4) 969*404b540aSrobert 970*404b540aSrobert/* OpenMP - #pragma omp for [clause1 ... clauseN] 971*404b540aSrobert Operand 0: OMP_FOR_BODY: Loop body. 972*404b540aSrobert Operand 1: OMP_FOR_CLAUSES: List of clauses. 973*404b540aSrobert Operand 2: OMP_FOR_INIT: Initialization code of the form 974*404b540aSrobert VAR = N1. 975*404b540aSrobert Operand 3: OMP_FOR_COND: Loop conditional expression of the form 976*404b540aSrobert VAR { <, >, <=, >= } N2. 977*404b540aSrobert Operand 4: OMP_FOR_INCR: Loop index increment of the form 978*404b540aSrobert VAR { +=, -= } INCR. 979*404b540aSrobert Operand 5: OMP_FOR_PRE_BODY: Filled by the gimplifier with things 980*404b540aSrobert from INIT, COND, and INCR that are technically part of the 981*404b540aSrobert OMP_FOR structured block, but are evaluated before the loop 982*404b540aSrobert body begins. 983*404b540aSrobert 984*404b540aSrobert VAR must be a signed integer variable, which is implicitly thread 985*404b540aSrobert private. N1, N2 and INCR are required to be loop invariant integer 986*404b540aSrobert expressions that are evaluated without any synchronization. 987*404b540aSrobert The evaluation order, frequency of evaluation and side-effects are 988*404b540aSrobert unspecified by the standard. */ 989*404b540aSrobertDEFTREECODE (OMP_FOR, "omp_for", tcc_statement, 6) 990*404b540aSrobert 991*404b540aSrobert/* OpenMP - #pragma omp sections [clause1 ... clauseN] 992*404b540aSrobert Operand 0: OMP_SECTIONS_BODY: Sections body. 993*404b540aSrobert Operand 1: OMP_SECTIONS_CLAUSES: List of clauses. */ 994*404b540aSrobertDEFTREECODE (OMP_SECTIONS, "omp_sections", tcc_statement, 2) 995*404b540aSrobert 996*404b540aSrobert/* OpenMP - #pragma omp single 997*404b540aSrobert Operand 0: OMP_SINGLE_BODY: Single section body. 998*404b540aSrobert Operand 1: OMP_SINGLE_CLAUSES: List of clauses. */ 999*404b540aSrobertDEFTREECODE (OMP_SINGLE, "omp_single", tcc_statement, 2) 1000*404b540aSrobert 1001*404b540aSrobert/* OpenMP - #pragma omp section 1002*404b540aSrobert Operand 0: OMP_SECTION_BODY: Section body. */ 1003*404b540aSrobertDEFTREECODE (OMP_SECTION, "omp_section", tcc_statement, 1) 1004*404b540aSrobert 1005*404b540aSrobert/* OpenMP - #pragma omp master 1006*404b540aSrobert Operand 0: OMP_MASTER_BODY: Master section body. */ 1007*404b540aSrobertDEFTREECODE (OMP_MASTER, "omp_master", tcc_statement, 1) 1008*404b540aSrobert 1009*404b540aSrobert/* OpenMP - #pragma omp ordered 1010*404b540aSrobert Operand 0: OMP_ORDERED_BODY: Master section body. */ 1011*404b540aSrobertDEFTREECODE (OMP_ORDERED, "omp_ordered", tcc_statement, 1) 1012*404b540aSrobert 1013*404b540aSrobert/* OpenMP - #pragma omp critical [name] 1014*404b540aSrobert Operand 0: OMP_CRITICAL_BODY: Critical section body. 1015*404b540aSrobert Operand 1: OMP_CRITICAL_NAME: Identifier for critical section. */ 1016*404b540aSrobertDEFTREECODE (OMP_CRITICAL, "omp_critical", tcc_statement, 2) 1017*404b540aSrobert 1018*404b540aSrobert/* Return from an OpenMP directive. */ 1019*404b540aSrobertDEFTREECODE (OMP_RETURN, "omp_return", tcc_statement, 0) 1020*404b540aSrobert 1021*404b540aSrobert/* OpenMP - An intermediate tree code to mark the location of the 1022*404b540aSrobert loop or sections iteration in the partially lowered code. */ 1023*404b540aSrobertDEFTREECODE (OMP_CONTINUE, "omp_continue", tcc_statement, 0) 1024*404b540aSrobert 1025*404b540aSrobert/* OpenMP - #pragma omp atomic 1026*404b540aSrobert Operand 0: The address at which the atomic operation is to be performed. 1027*404b540aSrobert This address should be stabilized with save_expr. 1028*404b540aSrobert Operand 1: The expression to evaluate. When the old value of the object 1029*404b540aSrobert at the address is used in the expression, it should appear as if 1030*404b540aSrobert build_fold_indirect_ref of the address. */ 1031*404b540aSrobertDEFTREECODE (OMP_ATOMIC, "omp_atomic", tcc_statement, 2) 1032*404b540aSrobert 1033*404b540aSrobert/* OpenMP clauses. */ 1034*404b540aSrobertDEFTREECODE (OMP_CLAUSE, "omp_clause", tcc_exceptional, 0) 1035*404b540aSrobert 1036*404b540aSrobert/* Reduction operations. 1037*404b540aSrobert Operations that take a vector of elements and "reduce" it to a scalar 1038*404b540aSrobert result (e.g. summing the elements of the vector, finding the minimum over 1039*404b540aSrobert the vector elements, etc). 1040*404b540aSrobert Operand 0 is a vector; the first element in the vector has the result. 1041*404b540aSrobert Operand 1 is a vector. */ 1042*404b540aSrobertDEFTREECODE (REDUC_MAX_EXPR, "reduc_max_expr", tcc_unary, 1) 1043*404b540aSrobertDEFTREECODE (REDUC_MIN_EXPR, "reduc_min_expr", tcc_unary, 1) 1044*404b540aSrobertDEFTREECODE (REDUC_PLUS_EXPR, "reduc_plus_expr", tcc_unary, 1) 1045*404b540aSrobert 1046*404b540aSrobert/* Widenning dot-product. 1047*404b540aSrobert The first two arguments are of type t1. 1048*404b540aSrobert The third argument and the result are of type t2, such that t2 is at least 1049*404b540aSrobert twice the size of t1. DOT_PROD_EXPR(arg1,arg2,arg3) is equivalent to: 1050*404b540aSrobert tmp = WIDEN_MULT_EXPR(arg1, arg2); 1051*404b540aSrobert arg3 = PLUS_EXPR (tmp, arg3); 1052*404b540aSrobert or: 1053*404b540aSrobert tmp = WIDEN_MULT_EXPR(arg1, arg2); 1054*404b540aSrobert arg3 = WIDEN_SUM_EXPR (tmp, arg3); */ 1055*404b540aSrobertDEFTREECODE (DOT_PROD_EXPR, "dot_prod_expr", tcc_expression, 3) 1056*404b540aSrobert 1057*404b540aSrobert/* Widenning summation. 1058*404b540aSrobert The first argument is of type t1. 1059*404b540aSrobert The second argument is of type t2, such that t2 is at least twice 1060*404b540aSrobert the size of t1. The type of the entire expression is also t2. 1061*404b540aSrobert WIDEN_SUM_EXPR is equivalent to first widening (promoting) 1062*404b540aSrobert the first argument from type t1 to type t2, and then summing it 1063*404b540aSrobert with the second argument. */ 1064*404b540aSrobertDEFTREECODE (WIDEN_SUM_EXPR, "widen_sum_expr", tcc_binary, 2) 1065*404b540aSrobert 1066*404b540aSrobert/* Widenning multiplication. 1067*404b540aSrobert The two arguments are of type t1. 1068*404b540aSrobert The result is of type t2, such that t2 is at least twice 1069*404b540aSrobert the size of t1. WIDEN_MULT_EXPR is equivalent to first widening (promoting) 1070*404b540aSrobert the arguments from type t1 to type t2, and then multiplying them. */ 1071*404b540aSrobertDEFTREECODE (WIDEN_MULT_EXPR, "widen_mult_expr", tcc_binary, 2) 1072*404b540aSrobert 1073*404b540aSrobert/* Whole vector left/right shift in bits. 1074*404b540aSrobert Operand 0 is a vector to be shifted. 1075*404b540aSrobert Operand 1 is an integer shift amount in bits. */ 1076*404b540aSrobertDEFTREECODE (VEC_LSHIFT_EXPR, "vec_lshift_expr", tcc_binary, 2) 1077*404b540aSrobertDEFTREECODE (VEC_RSHIFT_EXPR, "vec_rshift_expr", tcc_binary, 2) 1078*404b540aSrobert 1079*404b540aSrobert/* 1080*404b540aSrobertLocal variables: 1081*404b540aSrobertmode:c 1082*404b540aSrobertEnd: 1083*404b540aSrobert*/ 1084