URL
https://opencores.org/ocsvn/openrisc_me/openrisc_me/trunk
Subversion Repositories openrisc_me
[/] [openrisc/] [trunk/] [gnu-src/] [gcc-4.5.1/] [gcc/] [tree.def] - Rev 281
Go to most recent revision | Compare with Previous | Blame | View Log
/* This file contains the definitions and documentation for thetree codes used in GCC.Copyright (C) 1987, 1988, 1993, 1995, 1997, 1998, 2000, 2001, 2004, 2005,2006, 2007, 2008, 2009, 2010 Free Software Foundation, Inc.This file is part of GCC.GCC is free software; you can redistribute it and/or modify it underthe terms of the GNU General Public License as published by the FreeSoftware Foundation; either version 3, or (at your option) any laterversion.GCC is distributed in the hope that it will be useful, but WITHOUT ANYWARRANTY; without even the implied warranty of MERCHANTABILITY orFITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public Licensefor more details.You should have received a copy of the GNU General Public Licensealong with GCC; see the file COPYING3. If not see<http://www.gnu.org/licenses/>. *//* For tcc_references, tcc_expression, tcc_comparison, tcc_unary,tcc_binary, and tcc_statement nodes, which use struct tree_exp, the4th element is the number of argument slots to allocate. Thisdetermines the size of the tree node object. Other nodes usedifferent structures, and the size is determined by the tree_unionmember structure; the 4th element should be zero. Languages thatdefine language-specific tcc_exceptional or tcc_constant codes mustdefine the tree_size langhook to say how big they are.These tree codes have been sorted so that the macros in tree.h thatcheck for various tree codes are optimized into range checks. Thisgives a measurable performance improvement. When adding a newcode, consider its placement in relation to the other codes. *//* Any erroneous construct is parsed into a node of this type.This type of node is accepted without complaint in all contextsby later parsing activities, to avoid multiple error messagesfor one error.No fields in these nodes are used except the TREE_CODE. */DEFTREECODE (ERROR_MARK, "error_mark", tcc_exceptional, 0)/* Used to represent a name (such as, in the DECL_NAME of a decl node).Internally it looks like a STRING_CST node.There is only one IDENTIFIER_NODE ever made for any particular name.Use `get_identifier' to get it (or create it, the first time). */DEFTREECODE (IDENTIFIER_NODE, "identifier_node", tcc_exceptional, 0)/* Has the TREE_VALUE and TREE_PURPOSE fields. *//* These nodes are made into lists by chaining through theTREE_CHAIN field. The elements of the list live in theTREE_VALUE fields, while TREE_PURPOSE fields are occasionallyused as well to get the effect of Lisp association lists. */DEFTREECODE (TREE_LIST, "tree_list", tcc_exceptional, 0)/* These nodes contain an array of tree nodes. */DEFTREECODE (TREE_VEC, "tree_vec", tcc_exceptional, 0)/* A symbol binding block. These are arranged in a tree,where the BLOCK_SUBBLOCKS field contains a chain of subblockschained through the BLOCK_CHAIN field.BLOCK_SUPERCONTEXT points to the parent block.For a block which represents the outermost scope of a function, itpoints to the FUNCTION_DECL node.BLOCK_VARS points to a chain of decl nodes.BLOCK_CHAIN points to the next BLOCK at the same level.BLOCK_ABSTRACT_ORIGIN points to the original (abstract) tree node whichthis block is an instance of, or else is NULL to indicate that thisblock is not an instance of anything else. When non-NULL, the valuecould either point to another BLOCK node or it could point to aFUNCTION_DECL node (e.g. in the case of a block representing theoutermost scope of a particular inlining of a function).BLOCK_ABSTRACT is nonzero if the block represents an abstractinstance of a block (i.e. one which is nested within an abstractinstance of an inline function).TREE_ASM_WRITTEN is nonzero if the block was actually referencedin the generated assembly. */DEFTREECODE (BLOCK, "block", tcc_exceptional, 0)/* Each data type is represented by a tree node whose code is one ofthe following: *//* Each node that represents a data type has a component TYPE_SIZEcontaining a tree that is an expression for the size in bits.The TYPE_MODE contains the machine mode for values of this type.The TYPE_POINTER_TO field contains a type for a pointer to this type,or zero if no such has been created yet.The TYPE_NEXT_VARIANT field is used to chain together typesthat are variants made by type modifiers such as "const" and "volatile".The TYPE_MAIN_VARIANT field, in any member of such a chain,points to the start of the chain.The TYPE_NAME field contains info on the name used in the programfor this type (for GDB symbol table output). It is either aTYPE_DECL node, for types that are typedefs, or an IDENTIFIER_NODEin the case of structs, unions or enums that are known with a tag,or zero for types that have no special name.The TYPE_CONTEXT for any sort of type which could have a name orwhich could have named members (e.g. tagged types in C/C++) willpoint to the node which represents the scope of the given type, orwill be NULL_TREE if the type has "file scope". For most types, thiswill point to a BLOCK node or a FUNCTION_DECL node, but it could alsopoint to a FUNCTION_TYPE node (for types whose scope is limited to theformal parameter list of some function type specification) or itcould point to a RECORD_TYPE, UNION_TYPE or QUAL_UNION_TYPE node(for C++ "member" types).For non-tagged-types, TYPE_CONTEXT need not be set to anything inparticular, since any type which is of some type category (e.g.an array type or a function type) which cannot either have a nameitself or have named members doesn't really have a "scope" per se.The TREE_CHAIN field is used as a forward-references to names forENUMERAL_TYPE, RECORD_TYPE, UNION_TYPE, and QUAL_UNION_TYPE nodes;see below. *//* The ordering of the following codes is optimized for the checkingmacros in tree.h. Changing the order will degrade the speed of thecompiler. OFFSET_TYPE, ENUMERAL_TYPE, BOOLEAN_TYPE, INTEGER_TYPE,REAL_TYPE, POINTER_TYPE. *//* An offset is a pointer relative to an object.The TREE_TYPE field is the type of the object at the offset.The TYPE_OFFSET_BASETYPE points to the node for the type of objectthat the offset is relative to. */DEFTREECODE (OFFSET_TYPE, "offset_type", tcc_type, 0)/* C enums. The type node looks just like an INTEGER_TYPE node.The symbols for the values of the enum type are defined byCONST_DECL nodes, but the type does not point to them;however, the TYPE_VALUES is a list in which each element's TREE_PURPOSEis a name and the TREE_VALUE is the value (an INTEGER_CST node). *//* A forward reference `enum foo' when no enum named foo is defined yethas zero (a null pointer) in its TYPE_SIZE. The tag name is inthe TYPE_NAME field. If the type is later defined, the normalfields are filled in.RECORD_TYPE, UNION_TYPE, and QUAL_UNION_TYPE forward refs aretreated similarly. */DEFTREECODE (ENUMERAL_TYPE, "enumeral_type", tcc_type, 0)/* Boolean type (true or false are the only values). Looks like anINTEGRAL_TYPE. */DEFTREECODE (BOOLEAN_TYPE, "boolean_type", tcc_type, 0)/* Integer types in all languages, including char in C.Also used for sub-ranges of other discrete types.Has components TYPE_MIN_VALUE, TYPE_MAX_VALUE (expressions, inclusive)and TYPE_PRECISION (number of bits used by this type).In the case of a subrange type in Pascal, the TREE_TYPEof this will point at the supertype (another INTEGER_TYPE,or an ENUMERAL_TYPE or BOOLEAN_TYPE).Otherwise, the TREE_TYPE is zero. */DEFTREECODE (INTEGER_TYPE, "integer_type", tcc_type, 0)/* C's float and double. Different floating types are distinguishedby machine mode and by the TYPE_SIZE and the TYPE_PRECISION. */DEFTREECODE (REAL_TYPE, "real_type", tcc_type, 0)/* The ordering of the following codes is optimized for the checkingmacros in tree.h. Changing the order will degrade the speed of thecompiler. POINTER_TYPE, REFERENCE_TYPE. Note that this rangeoverlaps the previous range of ordered types. *//* All pointer-to-x types have code POINTER_TYPE.The TREE_TYPE points to the node for the type pointed to. */DEFTREECODE (POINTER_TYPE, "pointer_type", tcc_type, 0)/* _Fract and _Accum types in Embedded-C. Different fixed-point typesare distinguished by machine mode and by the TYPE_SIZE and theTYPE_PRECISION. */DEFTREECODE (FIXED_POINT_TYPE, "fixed_point_type", tcc_type, 0)/* A reference is like a pointer except that it is coercedautomatically to the value it points to. Used in C++. */DEFTREECODE (REFERENCE_TYPE, "reference_type", tcc_type, 0)/* The ordering of the following codes is optimized for the checkingmacros in tree.h. Changing the order will degrade the speed of thecompiler. COMPLEX_TYPE, VECTOR_TYPE, ARRAY_TYPE. *//* Complex number types. The TREE_TYPE field is the data typeof the real and imaginary parts. It must be of scalararithmetic type, not including pointer type. */DEFTREECODE (COMPLEX_TYPE, "complex_type", tcc_type, 0)/* Vector types. The TREE_TYPE field is the data type of the vectorelements. The TYPE_PRECISION field is the number of subparts ofthe vector. */DEFTREECODE (VECTOR_TYPE, "vector_type", tcc_type, 0)/* The ordering of the following codes is optimized for the checkingmacros in tree.h. Changing the order will degrade the speed of thecompiler. ARRAY_TYPE, RECORD_TYPE, UNION_TYPE, QUAL_UNION_TYPE.Note that this range overlaps the previous range. *//* Types of arrays. Special fields:TREE_TYPE Type of an array element.TYPE_DOMAIN Type to index by.Its range of values specifies the array length.The field TYPE_POINTER_TO (TREE_TYPE (array_type)) is always nonzeroand holds the type to coerce a value of that array type to in C.TYPE_STRING_FLAG indicates a string (in contrast to an array of chars)in languages (such as Chill) that make a distinction. *//* Array types in C or Pascal */DEFTREECODE (ARRAY_TYPE, "array_type", tcc_type, 0)/* Struct in C, or record in Pascal. *//* Special fields:TYPE_FIELDS chain of FIELD_DECLs for the fields of the struct,and VAR_DECLs, TYPE_DECLs and CONST_DECLs for record-scope variables,types and enumerators.A few may need to be added for Pascal. *//* See the comment above, before ENUMERAL_TYPE, for howforward references to struct tags are handled in C. */DEFTREECODE (RECORD_TYPE, "record_type", tcc_type, 0)/* Union in C. Like a struct, except that the offsets of the fieldswill all be zero. *//* See the comment above, before ENUMERAL_TYPE, for howforward references to union tags are handled in C. */DEFTREECODE (UNION_TYPE, "union_type", tcc_type, 0) /* C union type *//* Similar to UNION_TYPE, except that the expressions in DECL_QUALIFIERin each FIELD_DECL determine what the union contains. The firstfield whose DECL_QUALIFIER expression is true is deemed to occupythe union. */DEFTREECODE (QUAL_UNION_TYPE, "qual_union_type", tcc_type, 0)/* The ordering of the following codes is optimized for the checkingmacros in tree.h. Changing the order will degrade the speed of thecompiler. VOID_TYPE, FUNCTION_TYPE, METHOD_TYPE. *//* The void type in C */DEFTREECODE (VOID_TYPE, "void_type", tcc_type, 0)/* Type of functions. Special fields:TREE_TYPE type of value returned.TYPE_ARG_TYPES list of types of arguments expected.this list is made of TREE_LIST nodes.Types of "Procedures" in languages where they are different from functionshave code FUNCTION_TYPE also, but then TREE_TYPE is zero or void type. */DEFTREECODE (FUNCTION_TYPE, "function_type", tcc_type, 0)/* METHOD_TYPE is the type of a function which takes an extra firstargument for "self", which is not present in the declared argument list.The TREE_TYPE is the return type of the method. The TYPE_METHOD_BASETYPEis the type of "self". TYPE_ARG_TYPES is the real argument list, whichincludes the hidden argument for "self". */DEFTREECODE (METHOD_TYPE, "method_type", tcc_type, 0)/* This is a language-specific kind of type.Its meaning is defined by the language front end.layout_type does not know how to lay this out,so the front-end must do so manually. */DEFTREECODE (LANG_TYPE, "lang_type", tcc_type, 0)/* Expressions *//* First, the constants. *//* Contents are in TREE_INT_CST_LOW and TREE_INT_CST_HIGH fields,32 bits each, giving us a 64 bit constant capability. INTEGER_CSTnodes can be shared, and therefore should be considered read only.They should be copied, before setting a flag such as TREE_OVERFLOW.If an INTEGER_CST has TREE_OVERFLOW already set, it is known to be unique.INTEGER_CST nodes are created for the integral types, for pointertypes and for vector and float types in some circumstances. */DEFTREECODE (INTEGER_CST, "integer_cst", tcc_constant, 0)/* Contents are in TREE_REAL_CST field. */DEFTREECODE (REAL_CST, "real_cst", tcc_constant, 0)/* Contents are in TREE_FIXED_CST field. */DEFTREECODE (FIXED_CST, "fixed_cst", tcc_constant, 0)/* Contents are in TREE_REALPART and TREE_IMAGPART fields,whose contents are other constant nodes. */DEFTREECODE (COMPLEX_CST, "complex_cst", tcc_constant, 0)/* Contents are in TREE_VECTOR_CST_ELTS field. */DEFTREECODE (VECTOR_CST, "vector_cst", tcc_constant, 0)/* Contents are TREE_STRING_LENGTH and the actual contents of the string. */DEFTREECODE (STRING_CST, "string_cst", tcc_constant, 0)/* Declarations. All references to names are represented as ..._DECLnodes. The decls in one binding context are chained through theTREE_CHAIN field. Each DECL has a DECL_NAME field which containsan IDENTIFIER_NODE. (Some decls, most often labels, may have zeroas the DECL_NAME). DECL_CONTEXT points to the node representingthe context in which this declaration has its scope. ForFIELD_DECLs, this is the RECORD_TYPE, UNION_TYPE, orQUAL_UNION_TYPE node that the field is a member of. For VAR_DECL,PARM_DECL, FUNCTION_DECL, LABEL_DECL, and CONST_DECL nodes, thispoints to either the FUNCTION_DECL for the containing function, theRECORD_TYPE or UNION_TYPE for the containing type, or NULL_TREE ora TRANSLATION_UNIT_DECL if the given decl has "file scope".DECL_ABSTRACT_ORIGIN, if non-NULL, points to the original (abstract)..._DECL node of which this decl is an (inlined or template expanded)instance.The TREE_TYPE field holds the data type of the object, when relevant.LABEL_DECLs have no data type. For TYPE_DECL, the TREE_TYPE fieldcontents are the type whose name is being declared.The DECL_ALIGN, DECL_SIZE,and DECL_MODE fields exist in decl nodes just as in type nodes.They are unused in LABEL_DECL, TYPE_DECL and CONST_DECL nodes.DECL_FIELD_BIT_OFFSET holds an integer number of bits offset forthe location. DECL_VOFFSET holds an expression for a variableoffset; it is to be multiplied by DECL_VOFFSET_UNIT (an integer).These fields are relevant only in FIELD_DECLs and PARM_DECLs.DECL_INITIAL holds the value to initialize a variable to,or the value of a constant. For a function, it holds the body(a node of type BLOCK representing the function's binding contourand whose body contains the function's statements.) For a LABEL_DECLin C, it is a flag, nonzero if the label's definition has been seen.PARM_DECLs use a special field:DECL_ARG_TYPE is the type in which the argument is actuallypassed, which may be different from its type within the function.FUNCTION_DECLs use four special fields:DECL_ARGUMENTS holds a chain of PARM_DECL nodes for the arguments.DECL_RESULT holds a RESULT_DECL node for the value of a function.The DECL_RTL field is 0 for a function that returns no value.(C functions returning void have zero here.)The TREE_TYPE field is the type in which the result is actuallyreturned. This is usually the same as the return type of theFUNCTION_DECL, but it may be a wider integer type because ofpromotion.DECL_FUNCTION_CODE is a code number that is nonzero forbuilt-in functions. Its value is an enum built_in_functionthat says which built-in function it is.DECL_SOURCE_FILE holds a filename string and DECL_SOURCE_LINEholds a line number. In some cases these can be the location ofa reference, if no definition has been seen.DECL_ABSTRACT is nonzero if the decl represents an abstract instanceof a decl (i.e. one which is nested within an abstract instance of ainline function. */DEFTREECODE (FUNCTION_DECL, "function_decl", tcc_declaration, 0)DEFTREECODE (LABEL_DECL, "label_decl", tcc_declaration, 0)/* The ordering of the following codes is optimized for the checkingmacros in tree.h. Changing the order will degrade the speed of thecompiler. FIELD_DECL, VAR_DECL, CONST_DECL, PARM_DECL,TYPE_DECL. */DEFTREECODE (FIELD_DECL, "field_decl", tcc_declaration, 0)DEFTREECODE (VAR_DECL, "var_decl", tcc_declaration, 0)DEFTREECODE (CONST_DECL, "const_decl", tcc_declaration, 0)DEFTREECODE (PARM_DECL, "parm_decl", tcc_declaration, 0)DEFTREECODE (TYPE_DECL, "type_decl", tcc_declaration, 0)DEFTREECODE (RESULT_DECL, "result_decl", tcc_declaration, 0)/* A "declaration" of a debug temporary. It should only appear inDEBUG stmts. */DEFTREECODE (DEBUG_EXPR_DECL, "debug_expr_decl", tcc_declaration, 0)/* A namespace declaration. Namespaces appear in DECL_CONTEXT of other_DECLs, providing a hierarchy of names. */DEFTREECODE (NAMESPACE_DECL, "namespace_decl", tcc_declaration, 0)/* A declaration import.The C++ FE uses this to represent a using-directive; eg:"using namespace foo".But it could be used to represent any declaration import construct.Whenever a declaration import appears in a lexical block, the BLOCK noderepresenting that lexical block in GIMPLE will contain an IMPORTED_DECLnode, linked via BLOCK_VARS accessor of the said BLOCK.For a given NODE which code is IMPORTED_DECL,IMPORTED_DECL_ASSOCIATED_DECL (NODE) accesses the imported declaration. */DEFTREECODE (IMPORTED_DECL, "imported_decl", tcc_declaration, 0)/* A translation unit. This is not technically a declaration, since itcan't be looked up, but it's close enough. */DEFTREECODE (TRANSLATION_UNIT_DECL, "translation_unit_decl",\tcc_declaration, 0)/* References to storage. *//* The ordering of the following codes is optimized for the classificationin handled_component_p. Keep them in a consecutive group. *//* Value is structure or union component.Operand 0 is the structure or union (an expression).Operand 1 is the field (a node of type FIELD_DECL).Operand 2, if present, is the value of DECL_FIELD_OFFSET, measuredin units of DECL_OFFSET_ALIGN / BITS_PER_UNIT. */DEFTREECODE (COMPONENT_REF, "component_ref", tcc_reference, 3)/* Reference to a group of bits within an object. Similar to COMPONENT_REFexcept the position is given explicitly rather than via a FIELD_DECL.Operand 0 is the structure or union expression;operand 1 is a tree giving the constant number of bits being referenced;operand 2 is a tree giving the constant position of the first referenced bit.The result type width has to match the number of bits referenced.If the result type is integral, its signedness specifies how it is extendedto its mode width. */DEFTREECODE (BIT_FIELD_REF, "bit_field_ref", tcc_reference, 3)/* Used only on an operand of complex type, these returna value of the corresponding component type. */DEFTREECODE (REALPART_EXPR, "realpart_expr", tcc_reference, 1)DEFTREECODE (IMAGPART_EXPR, "imagpart_expr", tcc_reference, 1)/* Array indexing.Operand 0 is the array; operand 1 is a (single) array index.Operand 2, if present, is a copy of TYPE_MIN_VALUE of the index.Operand 3, if present, is the element size, measured in units ofthe alignment of the element type. */DEFTREECODE (ARRAY_REF, "array_ref", tcc_reference, 4)/* Likewise, except that the result is a range ("slice") of the array. Thestarting index of the resulting array is taken from operand 1 and the sizeof the range is taken from the type of the expression. */DEFTREECODE (ARRAY_RANGE_REF, "array_range_ref", tcc_reference, 4)/* The ordering of the following codes is optimized for the checkingmacros in tree.h. Changing the order will degrade the speed of thecompiler. INDIRECT_REF, ALIGN_INDIRECT_REF, MISALIGNED_INDIRECT_REF. *//* C unary `*' or Pascal `^'. One operand, an expression for a pointer. */DEFTREECODE (INDIRECT_REF, "indirect_ref", tcc_reference, 1)/* Like above, but aligns the referenced address (i.e, if the addressin P is not aligned on TYPE_ALIGN boundary, then &(*P) != P). */DEFTREECODE (ALIGN_INDIRECT_REF, "align_indirect_ref", tcc_reference, 1)/* Same as INDIRECT_REF, but also specifies the alignment of the referencedaddress:Operand 0 is the referenced address (a pointer);Operand 1 is an INTEGER_CST which represents the alignment of the address,or 0 if the alignment is unknown. */DEFTREECODE (MISALIGNED_INDIRECT_REF, "misaligned_indirect_ref", tcc_reference, 2)/* Used to represent lookup of runtime type dependent data. Often this isa reference to a vtable, but it needn't be. Operands are:OBJ_TYPE_REF_EXPR: An expression that evaluates the value to use.OBJ_TYPE_REF_OBJECT: Is the object on whose behalf the lookup isbeing performed. Through this the optimizers may be able to staticallydetermine the dynamic type of the object.OBJ_TYPE_REF_TOKEN: Something front-end specific used to resolve thereference to something simpler, usually to the address of a DECL.Never touched by the middle-end. Good choices would be either anidentifier or a vtable index. */DEFTREECODE (OBJ_TYPE_REF, "obj_type_ref", tcc_expression, 3)/* Constructor: return an aggregate value made from specified components.In C, this is used only for structure and array initializers.The operand is a sequence of component values made out of a VEC ofstruct constructor_elt.For ARRAY_TYPE:The field INDEX of each constructor_elt is the corresponding index.If the index is a RANGE_EXPR, it is a short-hand for many nodes,one for each index in the range. (If the corresponding field VALUEhas side-effects, they are evaluated once for each element. Wrap thevalue in a SAVE_EXPR if you want to evaluate side effects only once.)For RECORD_TYPE, UNION_TYPE, or QUAL_UNION_TYPE:The field INDEX of each node is a FIELD_DECL. */DEFTREECODE (CONSTRUCTOR, "constructor", tcc_exceptional, 0)/* The expression types are mostly straightforward, with the fourth argumentof DEFTREECODE saying how many operands there are.Unless otherwise specified, the operands are expressions and thetypes of all the operands and the expression must all be the same. *//* Contains two expressions to compute, one followed by the other.the first value is ignored. The second one's value is used. Thetype of the first expression need not agree with the other types. */DEFTREECODE (COMPOUND_EXPR, "compound_expr", tcc_expression, 2)/* Assignment expression. Operand 0 is the what to set; 1, the new value. */DEFTREECODE (MODIFY_EXPR, "modify_expr", tcc_expression, 2)/* Initialization expression. Operand 0 is the variable to initialize;Operand 1 is the initializer. This differs from MODIFY_EXPR in that anyreference to the referent of operand 0 within operand 1 is undefined. */DEFTREECODE (INIT_EXPR, "init_expr", tcc_expression, 2)/* For TARGET_EXPR, operand 0 is the target of an initialization,operand 1 is the initializer for the target, which may be voidif simply expanding it initializes the target.operand 2 is the cleanup for this node, if any.operand 3 is the saved initializer after this node has beenexpanded once; this is so we can re-expand the tree later. */DEFTREECODE (TARGET_EXPR, "target_expr", tcc_expression, 4)/* Conditional expression ( ... ? ... : ... in C).Operand 0 is the condition.Operand 1 is the then-value.Operand 2 is the else-value.Operand 0 may be of any type.Operand 1 must have the same type as the entire expression, unlessit unconditionally throws an exception, in which case it shouldhave VOID_TYPE. The same constraints apply to operand 2. Thecondition in operand 0 must be of integral type.In cfg gimple, if you do not have a selection expression, operands1 and 2 are NULL. The operands are then taken from the cfg edges. */DEFTREECODE (COND_EXPR, "cond_expr", tcc_expression, 3)/* Vector conditional expression. It is like COND_EXPR, but withvector operands.A = VEC_COND_EXPR ( X < Y, B, C)meansfor (i=0; i<N; i++)A[i] = X[i] < Y[i] ? B[i] : C[i];*/DEFTREECODE (VEC_COND_EXPR, "vec_cond_expr", tcc_expression, 3)/* Declare local variables, including making RTL and allocating space.BIND_EXPR_VARS is a chain of VAR_DECL nodes for the variables.BIND_EXPR_BODY is the body, the expression to be computed usingthe variables. The value of operand 1 becomes that of the BIND_EXPR.BIND_EXPR_BLOCK is the BLOCK that corresponds to these bindingsfor debugging purposes. If this BIND_EXPR is actually expanded,that sets the TREE_USED flag in the BLOCK.The BIND_EXPR is not responsible for informing parsersabout these variables. If the body is coming from the input file,then the code that creates the BIND_EXPR is also responsible forinforming the parser of the variables.If the BIND_EXPR is ever expanded, its TREE_USED flag is set.This tells the code for debugging symbol tables not to ignore the BIND_EXPR.If the BIND_EXPR should be output for debugging but will not be expanded,set the TREE_USED flag by hand.In order for the BIND_EXPR to be known at all, the code that creates itmust also install it as a subblock in the tree of BLOCKnodes for the function. */DEFTREECODE (BIND_EXPR, "bind_expr", tcc_expression, 3)/* Function call. CALL_EXPRs are represented by variably-sized expressionnodes. There are at least three fixed operands. Operand 0 is anINTEGER_CST node containing the total operand count, the number ofarguments plus 3. Operand 1 is the function, while operand 2 isis static chain argument, or NULL. The remaining operands are thearguments to the call. */DEFTREECODE (CALL_EXPR, "call_expr", tcc_vl_exp, 3)/* Specify a value to compute along with its corresponding cleanup.Operand 0 is the cleanup expression.The cleanup is executed by the first enclosing CLEANUP_POINT_EXPR,which must exist. This differs from TRY_CATCH_EXPR in that operand 1is always evaluated when cleanups are run. */DEFTREECODE (WITH_CLEANUP_EXPR, "with_cleanup_expr", tcc_expression, 1)/* Specify a cleanup point.Operand 0 is an expression that may have cleanups. If it does, thosecleanups are executed after the expression is expanded.Note that if the expression is a reference to storage, it is forced outof memory before the cleanups are run. This is necessary to handlecases where the cleanups modify the storage referenced; in theexpression 't.i', if 't' is a struct with an integer member 'i' and acleanup which modifies 'i', the value of the expression depends onwhether the cleanup is run before or after 't.i' is evaluated. Whenexpand_expr is run on 't.i', it returns a MEM. This is not good enough;the value of 't.i' must be forced out of memory.As a consequence, the operand of a CLEANUP_POINT_EXPR must not haveBLKmode, because it will not be forced out of memory. */DEFTREECODE (CLEANUP_POINT_EXPR, "cleanup_point_expr", tcc_expression, 1)/* The following code is used in languages that have types where somefield in an object of the type contains a value that is used in thecomputation of another field's offset or size and/or the size of thetype. The positions and/or sizes of fields can vary from object toobject of the same type or even for one and the same object withinits scope.Record types with discriminants in Ada or schema types in Pascal areexamples of such types. This mechanism is also used to create "fatpointers" for unconstrained array types in Ada; the fat pointer is astructure one of whose fields is a pointer to the actual array typeand the other field is a pointer to a template, which is a structurecontaining the bounds of the array. The bounds in the type pointedto by the first field in the fat pointer refer to the values in thetemplate.When you wish to construct such a type you need "self-references"that allow you to reference the object having this type from theTYPE node, i.e. without having a variable instantiating this type.Such a "self-references" is done using a PLACEHOLDER_EXPR. This isa node that will later be replaced with the object being referenced.Its type is that of the object and selects which object to use froma chain of references (see below). No other slots are used in thePLACEHOLDER_EXPR.For example, if your type FOO is a RECORD_TYPE with a field BAR,and you need the value of <variable>.BAR to calculate TYPE_SIZE(FOO), just substitute <variable> above with a PLACEHOLDER_EXPRwhose TREE_TYPE is FOO. Then construct your COMPONENT_REF withthe PLACEHOLDER_EXPR as the first operand (which has the correcttype). Later, when the size is needed in the program, the back-endwill find this PLACEHOLDER_EXPR and generate code to calculate theactual size at run-time. In the following, we describe how thiscalculation is done.When we wish to evaluate a size or offset, we check whether it contains aPLACEHOLDER_EXPR. If it does, we call substitute_placeholder_in_exprpassing both that tree and an expression within which the object may befound. The latter expression is the object itself in the simple case ofan Ada record with discriminant, but it can be the array in the case of anunconstrained array.In the latter case, we need the fat pointer, because the bounds ofthe array can only be accessed from it. However, we rely here on thefact that the expression for the array contains the dereference ofthe fat pointer that obtained the array pointer. *//* Denotes a record to later be substituted before evaluating this expression.The type of this expression is used to find the record to replace it. */DEFTREECODE (PLACEHOLDER_EXPR, "placeholder_expr", tcc_exceptional, 0)/* Simple arithmetic. */DEFTREECODE (PLUS_EXPR, "plus_expr", tcc_binary, 2)DEFTREECODE (MINUS_EXPR, "minus_expr", tcc_binary, 2)DEFTREECODE (MULT_EXPR, "mult_expr", tcc_binary, 2)/* Pointer addition. The first operand is always a pointer and thesecond operand is an integer of type sizetype. */DEFTREECODE (POINTER_PLUS_EXPR, "pointer_plus_expr", tcc_binary, 2)/* Division for integer result that rounds the quotient toward zero. */DEFTREECODE (TRUNC_DIV_EXPR, "trunc_div_expr", tcc_binary, 2)/* Division for integer result that rounds the quotient toward infinity. */DEFTREECODE (CEIL_DIV_EXPR, "ceil_div_expr", tcc_binary, 2)/* Division for integer result that rounds toward minus infinity. */DEFTREECODE (FLOOR_DIV_EXPR, "floor_div_expr", tcc_binary, 2)/* Division for integer result that rounds toward nearest integer. */DEFTREECODE (ROUND_DIV_EXPR, "round_div_expr", tcc_binary, 2)/* Four kinds of remainder that go with the four kinds of division. */DEFTREECODE (TRUNC_MOD_EXPR, "trunc_mod_expr", tcc_binary, 2)DEFTREECODE (CEIL_MOD_EXPR, "ceil_mod_expr", tcc_binary, 2)DEFTREECODE (FLOOR_MOD_EXPR, "floor_mod_expr", tcc_binary, 2)DEFTREECODE (ROUND_MOD_EXPR, "round_mod_expr", tcc_binary, 2)/* Division for real result. */DEFTREECODE (RDIV_EXPR, "rdiv_expr", tcc_binary, 2)/* Division which is not supposed to need rounding.Used for pointer subtraction in C. */DEFTREECODE (EXACT_DIV_EXPR, "exact_div_expr", tcc_binary, 2)/* Conversion of real to fixed point by truncation. */DEFTREECODE (FIX_TRUNC_EXPR, "fix_trunc_expr", tcc_unary, 1)/* Conversion of an integer to a real. */DEFTREECODE (FLOAT_EXPR, "float_expr", tcc_unary, 1)/* Unary negation. */DEFTREECODE (NEGATE_EXPR, "negate_expr", tcc_unary, 1)/* Minimum and maximum values. When used with floating point, if bothoperands are zeros, or if either operand is NaN, then it is unspecifiedwhich of the two operands is returned as the result. */DEFTREECODE (MIN_EXPR, "min_expr", tcc_binary, 2)DEFTREECODE (MAX_EXPR, "max_expr", tcc_binary, 2)/* Represents the absolute value of the operand.An ABS_EXPR must have either an INTEGER_TYPE or a REAL_TYPE. Theoperand of the ABS_EXPR must have the same type. */DEFTREECODE (ABS_EXPR, "abs_expr", tcc_unary, 1)/* Shift operations for shift and rotate.Shift means logical shift if done on anunsigned type, arithmetic shift if done on a signed type.The second operand is the number of bits toshift by; it need not be the same type as the first operand and result.Note that the result is undefined if the second operand is largerthan or equal to the first operand's type size.The first operand of a shift can have either an integer or a(non-integer) fixed-point type. We follow the ISO/IEC TR 18037:2004semantics for the latter.Rotates are defined for integer types only. */DEFTREECODE (LSHIFT_EXPR, "lshift_expr", tcc_binary, 2)DEFTREECODE (RSHIFT_EXPR, "rshift_expr", tcc_binary, 2)DEFTREECODE (LROTATE_EXPR, "lrotate_expr", tcc_binary, 2)DEFTREECODE (RROTATE_EXPR, "rrotate_expr", tcc_binary, 2)/* Bitwise operations. Operands have same mode as result. */DEFTREECODE (BIT_IOR_EXPR, "bit_ior_expr", tcc_binary, 2)DEFTREECODE (BIT_XOR_EXPR, "bit_xor_expr", tcc_binary, 2)DEFTREECODE (BIT_AND_EXPR, "bit_and_expr", tcc_binary, 2)DEFTREECODE (BIT_NOT_EXPR, "bit_not_expr", tcc_unary, 1)/* ANDIF and ORIF allow the second operand not to be computed if thevalue of the expression is determined from the first operand. AND,OR, and XOR always compute the second operand whether its value isneeded or not (for side effects). The operand may haveBOOLEAN_TYPE or INTEGER_TYPE. In either case, the argument will beeither zero or one. For example, a TRUTH_NOT_EXPR will never havean INTEGER_TYPE VAR_DECL as its argument; instead, a NE_EXPR will beused to compare the VAR_DECL to zero, thereby obtaining a node withvalue zero or one. */DEFTREECODE (TRUTH_ANDIF_EXPR, "truth_andif_expr", tcc_expression, 2)DEFTREECODE (TRUTH_ORIF_EXPR, "truth_orif_expr", tcc_expression, 2)DEFTREECODE (TRUTH_AND_EXPR, "truth_and_expr", tcc_expression, 2)DEFTREECODE (TRUTH_OR_EXPR, "truth_or_expr", tcc_expression, 2)DEFTREECODE (TRUTH_XOR_EXPR, "truth_xor_expr", tcc_expression, 2)DEFTREECODE (TRUTH_NOT_EXPR, "truth_not_expr", tcc_expression, 1)/* Relational operators.`EQ_EXPR' and `NE_EXPR' are allowed for any types.The others are allowed only for integer (or pointer or enumeral)or real types.In all cases the operands will have the same type,and the value is always the type used by the language for booleans. */DEFTREECODE (LT_EXPR, "lt_expr", tcc_comparison, 2)DEFTREECODE (LE_EXPR, "le_expr", tcc_comparison, 2)DEFTREECODE (GT_EXPR, "gt_expr", tcc_comparison, 2)DEFTREECODE (GE_EXPR, "ge_expr", tcc_comparison, 2)DEFTREECODE (EQ_EXPR, "eq_expr", tcc_comparison, 2)DEFTREECODE (NE_EXPR, "ne_expr", tcc_comparison, 2)/* Additional relational operators for floating point unordered. */DEFTREECODE (UNORDERED_EXPR, "unordered_expr", tcc_comparison, 2)DEFTREECODE (ORDERED_EXPR, "ordered_expr", tcc_comparison, 2)/* These are equivalent to unordered or ... */DEFTREECODE (UNLT_EXPR, "unlt_expr", tcc_comparison, 2)DEFTREECODE (UNLE_EXPR, "unle_expr", tcc_comparison, 2)DEFTREECODE (UNGT_EXPR, "ungt_expr", tcc_comparison, 2)DEFTREECODE (UNGE_EXPR, "unge_expr", tcc_comparison, 2)DEFTREECODE (UNEQ_EXPR, "uneq_expr", tcc_comparison, 2)/* This is the reverse of uneq_expr. */DEFTREECODE (LTGT_EXPR, "ltgt_expr", tcc_comparison, 2)DEFTREECODE (RANGE_EXPR, "range_expr", tcc_binary, 2)/* Represents a re-association barrier for floating point expressionslike explicit parenthesis in fortran. */DEFTREECODE (PAREN_EXPR, "paren_expr", tcc_unary, 1)/* Represents a conversion of type of a value.All conversions, including implicit ones, must berepresented by CONVERT_EXPR or NOP_EXPR nodes. */DEFTREECODE (CONVERT_EXPR, "convert_expr", tcc_unary, 1)/* Conversion of a pointer value to a pointer to a differentaddress space. */DEFTREECODE (ADDR_SPACE_CONVERT_EXPR, "addr_space_convert_expr", tcc_unary, 1)/* Conversion of a fixed-point value to an integer, a real, or a fixed-pointvalue. Or conversion of a fixed-point value from an integer, a real, ora fixed-point value. */DEFTREECODE (FIXED_CONVERT_EXPR, "fixed_convert_expr", tcc_unary, 1)/* Represents a conversion expected to require no code to be generated. */DEFTREECODE (NOP_EXPR, "nop_expr", tcc_unary, 1)/* Value is same as argument, but guaranteed not an lvalue. */DEFTREECODE (NON_LVALUE_EXPR, "non_lvalue_expr", tcc_unary, 1)/* Represents viewing something of one type as being of a second type.This corresponds to an "Unchecked Conversion" in Ada and roughly tothe idiom *(type2 *)&X in C. The only operand is the value to beviewed as being of another type. It is undefined if the type of theinput and of the expression have different sizes.This code may also be used within the LHS of a MODIFY_EXPR, in whichcase no actual data motion may occur. TREE_ADDRESSABLE will be set inthis case and GCC must abort if it could not do the operation withoutgenerating insns. */DEFTREECODE (VIEW_CONVERT_EXPR, "view_convert_expr", tcc_reference, 1)/* A COMPOUND_LITERAL_EXPR represents a literal that is placed in a DECL. TheCOMPOUND_LITERAL_EXPR_DECL_EXPR is the a DECL_EXPR containing the declfor the anonymous object represented by the COMPOUND_LITERAL;the DECL_INITIAL of that decl is the CONSTRUCTOR that initializesthe compound literal. */DEFTREECODE (COMPOUND_LITERAL_EXPR, "compound_literal_expr", tcc_expression, 1)/* Represents something we computed once and will use multiple times.First operand is that expression. After it is evaluated once, itwill be replaced by the temporary variable that holds the value. */DEFTREECODE (SAVE_EXPR, "save_expr", tcc_expression, 1)/* & in C. Value is the address at which the operand's value resides.Operand may have any mode. Result mode is Pmode. */DEFTREECODE (ADDR_EXPR, "addr_expr", tcc_expression, 1)/* Operand0 is a function constant; result is part N of a functiondescriptor of type ptr_mode. */DEFTREECODE (FDESC_EXPR, "fdesc_expr", tcc_expression, 2)/* Given two real or integer operands of the same type,returns a complex value of the corresponding complex type. */DEFTREECODE (COMPLEX_EXPR, "complex_expr", tcc_binary, 2)/* Complex conjugate of operand. Used only on complex types. */DEFTREECODE (CONJ_EXPR, "conj_expr", tcc_unary, 1)/* Nodes for ++ and -- in C.The second arg is how much to increment or decrement by.For a pointer, it would be the size of the object pointed to. */DEFTREECODE (PREDECREMENT_EXPR, "predecrement_expr", tcc_expression, 2)DEFTREECODE (PREINCREMENT_EXPR, "preincrement_expr", tcc_expression, 2)DEFTREECODE (POSTDECREMENT_EXPR, "postdecrement_expr", tcc_expression, 2)DEFTREECODE (POSTINCREMENT_EXPR, "postincrement_expr", tcc_expression, 2)/* Used to implement `va_arg'. */DEFTREECODE (VA_ARG_EXPR, "va_arg_expr", tcc_expression, 1)/* Evaluate operand 1. If and only if an exception is thrown duringthe evaluation of operand 1, evaluate operand 2.This differs from TRY_FINALLY_EXPR in that operand 2 is not evaluatedon a normal or jump exit, only on an exception. */DEFTREECODE (TRY_CATCH_EXPR, "try_catch_expr", tcc_statement, 2)/* Evaluate the first operand.The second operand is a cleanup expression which is evaluatedon any exit (normal, exception, or jump out) from this expression. */DEFTREECODE (TRY_FINALLY_EXPR, "try_finally", tcc_statement, 2)/* These types of expressions have no useful value,and always have side effects. *//* Used to represent a local declaration. The operand is DECL_EXPR_DECL. */DEFTREECODE (DECL_EXPR, "decl_expr", tcc_statement, 1)/* A label definition, encapsulated as a statement.Operand 0 is the LABEL_DECL node for the label that appears here.The type should be void and the value should be ignored. */DEFTREECODE (LABEL_EXPR, "label_expr", tcc_statement, 1)/* GOTO. Operand 0 is a LABEL_DECL node or an expression.The type should be void and the value should be ignored. */DEFTREECODE (GOTO_EXPR, "goto_expr", tcc_statement, 1)/* RETURN. Evaluates operand 0, then returns from the current function.Presumably that operand is an assignment that stores into theRESULT_DECL that hold the value to be returned.The operand may be null.The type should be void and the value should be ignored. */DEFTREECODE (RETURN_EXPR, "return_expr", tcc_statement, 1)/* Exit the inner most loop conditionally. Operand 0 is the condition.The type should be void and the value should be ignored. */DEFTREECODE (EXIT_EXPR, "exit_expr", tcc_statement, 1)/* A loop. Operand 0 is the body of the loop.It must contain an EXIT_EXPR or is an infinite loop.The type should be void and the value should be ignored. */DEFTREECODE (LOOP_EXPR, "loop_expr", tcc_statement, 1)/* Switch expression.TREE_TYPE is the original type of the condition, before anylanguage required type conversions. It may be NULL, in which casethe original type and final types are assumed to be the same.Operand 0 is the expression used to perform the branch,Operand 1 is the body of the switch, which probably containsCASE_LABEL_EXPRs. It may also be NULL, in which case operand 2must not be NULL.Operand 2 is either NULL_TREE or a TREE_VEC of the CASE_LABEL_EXPRsof all the cases. */DEFTREECODE (SWITCH_EXPR, "switch_expr", tcc_statement, 3)/* Used to represent a case label. The operands are CASE_LOW andCASE_HIGH, respectively. If CASE_LOW is NULL_TREE, the label is a'default' label. If CASE_HIGH is NULL_TREE, the label is a normal caselabel. CASE_LABEL is the corresponding LABEL_DECL. */DEFTREECODE (CASE_LABEL_EXPR, "case_label_expr", tcc_statement, 3)/* Used to represent an inline assembly statement. ASM_STRING returns aSTRING_CST for the instruction (e.g., "mov x, y"). ASM_OUTPUTS,ASM_INPUTS, and ASM_CLOBBERS represent the outputs, inputs, and clobbersfor the statement. ASM_LABELS, if present, indicates various destinationsfor the asm; labels cannot be combined with outputs. */DEFTREECODE (ASM_EXPR, "asm_expr", tcc_statement, 5)/* Variable references for SSA analysis. New SSA names are created everytime a variable is assigned a new value. The SSA builder uses SSA_NAMEnodes to implement SSA versioning. */DEFTREECODE (SSA_NAME, "ssa_name", tcc_exceptional, 0)/* Used to represent a typed exception handler. CATCH_TYPES is the type (orlist of types) handled, and CATCH_BODY is the code for the handler. */DEFTREECODE (CATCH_EXPR, "catch_expr", tcc_statement, 2)/* Used to represent an exception specification. EH_FILTER_TYPES is a listof allowed types, and EH_FILTER_FAILURE is an expression to evaluate onfailure. EH_FILTER_MUST_NOT_THROW controls which range type to use whenexpanding. */DEFTREECODE (EH_FILTER_EXPR, "eh_filter_expr", tcc_statement, 2)/* Node used for describing a property that is known at compiletime. */DEFTREECODE (SCEV_KNOWN, "scev_known", tcc_expression, 0)/* Node used for describing a property that is not known at compiletime. */DEFTREECODE (SCEV_NOT_KNOWN, "scev_not_known", tcc_expression, 0)/* Polynomial chains of recurrences.Under the form: cr = {CHREC_LEFT (cr), +, CHREC_RIGHT (cr)}. */DEFTREECODE (POLYNOMIAL_CHREC, "polynomial_chrec", tcc_expression, 3)/* Used to chain children of container statements together.Use the interface in tree-iterator.h to access this node. */DEFTREECODE (STATEMENT_LIST, "statement_list", tcc_exceptional, 0)/* Predicate assertion. Artificial expression generated by the optimizersto keep track of predicate values. This expression may only appear onthe RHS of assignments.Given X = ASSERT_EXPR <Y, EXPR>, the optimizers can infertwo things:1- X is a copy of Y.2- EXPR is a conditional expression and is known to be true.Valid and to be expected forms of conditional expressions arevalid GIMPLE conditional expressions (as defined by is_gimple_condexpr)and conditional expressions with the first operand being aPLUS_EXPR with a variable possibly wrapped in a NOP_EXPR firstoperand and an integer constant second operand.The type of the expression is the same as Y. */DEFTREECODE (ASSERT_EXPR, "assert_expr", tcc_expression, 2)/* Base class information. Holds information about a class as abaseclass of itself or another class. */DEFTREECODE (TREE_BINFO, "tree_binfo", tcc_exceptional, 0)/* Records the size for an expression of variable size type. This isfor use in contexts in which we are accessing the entire object,such as for a function call, or block copy.Operand 0 is the real expression.Operand 1 is the size of the type in the expression. */DEFTREECODE (WITH_SIZE_EXPR, "with_size_expr", tcc_expression, 2)/* Extract elements from two input vectors Operand 0 and Operand 1size VS, according to the offset OFF defined by Operand 2 asfollows:If OFF > 0, the last VS - OFF elements of vector OP0 are concatenated tothe first OFF elements of the vector OP1.If OFF == 0, then the returned vector is OP1.On different targets OFF may take different forms; It can be an address, inwhich case its low log2(VS)-1 bits define the offset, or it can be a maskgenerated by the builtin targetm.vectorize.mask_for_load_builtin_decl. */DEFTREECODE (REALIGN_LOAD_EXPR, "realign_load", tcc_expression, 3)/* Low-level memory addressing. Operands are SYMBOL (static or globalvariable), BASE (register), INDEX (register), STEP (integer constant),OFFSET (integer constant). Corresponding address isSYMBOL + BASE + STEP * INDEX + OFFSET. Only variations and values valid onthe target are allowed.The type of STEP, INDEX and OFFSET is sizetype. The type of BASE issizetype or a pointer type (if SYMBOL is NULL).The sixth argument is the reference to the original memory access, whichis preserved for the purpose of alias analysis. */DEFTREECODE (TARGET_MEM_REF, "target_mem_ref", tcc_reference, 6)/* The ordering of the codes between OMP_PARALLEL and OMP_CRITICAL isexposed to TREE_RANGE_CHECK. *//* OpenMP - #pragma omp parallel [clause1 ... clauseN]Operand 0: OMP_PARALLEL_BODY: Code to be executed by all threads.Operand 1: OMP_PARALLEL_CLAUSES: List of clauses. */DEFTREECODE (OMP_PARALLEL, "omp_parallel", tcc_statement, 2)/* OpenMP - #pragma omp task [clause1 ... clauseN]Operand 0: OMP_TASK_BODY: Code to be executed by all threads.Operand 1: OMP_TASK_CLAUSES: List of clauses. */DEFTREECODE (OMP_TASK, "omp_task", tcc_statement, 2)/* OpenMP - #pragma omp for [clause1 ... clauseN]Operand 0: OMP_FOR_BODY: Loop body.Operand 1: OMP_FOR_CLAUSES: List of clauses.Operand 2: OMP_FOR_INIT: Initialization code of the formVAR = N1.Operand 3: OMP_FOR_COND: Loop conditional expression of the formVAR { <, >, <=, >= } N2.Operand 4: OMP_FOR_INCR: Loop index increment of the formVAR { +=, -= } INCR.Operand 5: OMP_FOR_PRE_BODY: Filled by the gimplifier with thingsfrom INIT, COND, and INCR that are technically part of theOMP_FOR structured block, but are evaluated before the loopbody begins.VAR must be an integer or pointer variable, which is implicitly threadprivate. N1, N2 and INCR are required to be loop invariant integerexpressions that are evaluated without any synchronization.The evaluation order, frequency of evaluation and side-effects areunspecified by the standard. */DEFTREECODE (OMP_FOR, "omp_for", tcc_statement, 6)/* OpenMP - #pragma omp sections [clause1 ... clauseN]Operand 0: OMP_SECTIONS_BODY: Sections body.Operand 1: OMP_SECTIONS_CLAUSES: List of clauses. */DEFTREECODE (OMP_SECTIONS, "omp_sections", tcc_statement, 2)/* OpenMP - #pragma omp singleOperand 0: OMP_SINGLE_BODY: Single section body.Operand 1: OMP_SINGLE_CLAUSES: List of clauses. */DEFTREECODE (OMP_SINGLE, "omp_single", tcc_statement, 2)/* OpenMP - #pragma omp sectionOperand 0: OMP_SECTION_BODY: Section body. */DEFTREECODE (OMP_SECTION, "omp_section", tcc_statement, 1)/* OpenMP - #pragma omp masterOperand 0: OMP_MASTER_BODY: Master section body. */DEFTREECODE (OMP_MASTER, "omp_master", tcc_statement, 1)/* OpenMP - #pragma omp orderedOperand 0: OMP_ORDERED_BODY: Master section body. */DEFTREECODE (OMP_ORDERED, "omp_ordered", tcc_statement, 1)/* OpenMP - #pragma omp critical [name]Operand 0: OMP_CRITICAL_BODY: Critical section body.Operand 1: OMP_CRITICAL_NAME: Identifier for critical section. */DEFTREECODE (OMP_CRITICAL, "omp_critical", tcc_statement, 2)/* OpenMP - #pragma omp atomicOperand 0: The address at which the atomic operation is to be performed.This address should be stabilized with save_expr.Operand 1: The expression to evaluate. When the old value of the objectat the address is used in the expression, it should appear as ifbuild_fold_indirect_ref of the address. */DEFTREECODE (OMP_ATOMIC, "omp_atomic", tcc_statement, 2)/* OpenMP clauses. */DEFTREECODE (OMP_CLAUSE, "omp_clause", tcc_exceptional, 0)/* Reduction operations.Operations that take a vector of elements and "reduce" it to a scalarresult (e.g. summing the elements of the vector, finding the minimum overthe vector elements, etc).Operand 0 is a vector; the first element in the vector has the result.Operand 1 is a vector. */DEFTREECODE (REDUC_MAX_EXPR, "reduc_max_expr", tcc_unary, 1)DEFTREECODE (REDUC_MIN_EXPR, "reduc_min_expr", tcc_unary, 1)DEFTREECODE (REDUC_PLUS_EXPR, "reduc_plus_expr", tcc_unary, 1)/* Widening dot-product.The first two arguments are of type t1.The third argument and the result are of type t2, such that t2 is at leasttwice the size of t1. DOT_PROD_EXPR(arg1,arg2,arg3) is equivalent to:tmp = WIDEN_MULT_EXPR(arg1, arg2);arg3 = PLUS_EXPR (tmp, arg3);or:tmp = WIDEN_MULT_EXPR(arg1, arg2);arg3 = WIDEN_SUM_EXPR (tmp, arg3); */DEFTREECODE (DOT_PROD_EXPR, "dot_prod_expr", tcc_expression, 3)/* Widening summation.The first argument is of type t1.The second argument is of type t2, such that t2 is at least twicethe size of t1. The type of the entire expression is also t2.WIDEN_SUM_EXPR is equivalent to first widening (promoting)the first argument from type t1 to type t2, and then summing itwith the second argument. */DEFTREECODE (WIDEN_SUM_EXPR, "widen_sum_expr", tcc_binary, 2)/* Widening multiplication.The two arguments are of type t1.The result is of type t2, such that t2 is at least twicethe size of t1. WIDEN_MULT_EXPR is equivalent to first widening (promoting)the arguments from type t1 to type t2, and then multiplying them. */DEFTREECODE (WIDEN_MULT_EXPR, "widen_mult_expr", tcc_binary, 2)/* Whole vector left/right shift in bits.Operand 0 is a vector to be shifted.Operand 1 is an integer shift amount in bits. */DEFTREECODE (VEC_LSHIFT_EXPR, "vec_lshift_expr", tcc_binary, 2)DEFTREECODE (VEC_RSHIFT_EXPR, "vec_rshift_expr", tcc_binary, 2)/* Widening vector multiplication.The two operands are vectors with N elements of size S. Multiplying theelements of the two vectors will result in N products of size 2*S.VEC_WIDEN_MULT_HI_EXPR computes the N/2 high products.VEC_WIDEN_MULT_LO_EXPR computes the N/2 low products. */DEFTREECODE (VEC_WIDEN_MULT_HI_EXPR, "widen_mult_hi_expr", tcc_binary, 2)DEFTREECODE (VEC_WIDEN_MULT_LO_EXPR, "widen_mult_lo_expr", tcc_binary, 2)/* Unpack (extract and promote/widen) the high/low elements of the inputvector into the output vector. The input vector has twice as manyelements as the output vector, that are half the size of the elementsof the output vector. This is used to support type promotion. */DEFTREECODE (VEC_UNPACK_HI_EXPR, "vec_unpack_hi_expr", tcc_unary, 1)DEFTREECODE (VEC_UNPACK_LO_EXPR, "vec_unpack_lo_expr", tcc_unary, 1)/* Unpack (extract) the high/low elements of the input vector, convertfixed point values to floating point and widen elements into theoutput vector. The input vector has twice as many elements as the outputvector, that are half the size of the elements of the output vector. */DEFTREECODE (VEC_UNPACK_FLOAT_HI_EXPR, "vec_unpack_float_hi_expr", tcc_unary, 1)DEFTREECODE (VEC_UNPACK_FLOAT_LO_EXPR, "vec_unpack_float_lo_expr", tcc_unary, 1)/* Pack (demote/narrow and merge) the elements of the two input vectorsinto the output vector using truncation/saturation.The elements of the input vectors are twice the size of the elements of theoutput vector. This is used to support type demotion. */DEFTREECODE (VEC_PACK_TRUNC_EXPR, "vec_pack_trunc_expr", tcc_binary, 2)DEFTREECODE (VEC_PACK_SAT_EXPR, "vec_pack_sat_expr", tcc_binary, 2)/* Convert floating point values of the two input vectors to integerand pack (narrow and merge) the elements into the output vector. Theelements of the input vector are twice the size of the elements ofthe output vector. */DEFTREECODE (VEC_PACK_FIX_TRUNC_EXPR, "vec_pack_fix_trunc_expr", tcc_binary, 2)/* Extract even/odd fields from vectors. */DEFTREECODE (VEC_EXTRACT_EVEN_EXPR, "vec_extracteven_expr", tcc_binary, 2)DEFTREECODE (VEC_EXTRACT_ODD_EXPR, "vec_extractodd_expr", tcc_binary, 2)/* Merge input vectors interleaving their fields. */DEFTREECODE (VEC_INTERLEAVE_HIGH_EXPR, "vec_interleavehigh_expr", tcc_binary, 2)DEFTREECODE (VEC_INTERLEAVE_LOW_EXPR, "vec_interleavelow_expr", tcc_binary, 2)/* PREDICT_EXPR. Specify hint for branch prediction. ThePREDICT_EXPR_PREDICTOR specify predictor and PREDICT_EXPR_OUTCOME theoutcome (0 for not taken and 1 for taken). Once the profile is guessedall conditional branches leading to execution paths executing thePREDICT_EXPR will get predicted by the specified predictor. */DEFTREECODE (PREDICT_EXPR, "predict_expr", tcc_expression, 1)/* OPTIMIZATION_NODE. Node to store the optimization options. */DEFTREECODE (OPTIMIZATION_NODE, "optimization_node", tcc_exceptional, 0)/* TARGET_OPTION_NODE. Node to store the target specific options. */DEFTREECODE (TARGET_OPTION_NODE, "target_option_node", tcc_exceptional, 0)/*Local variables:mode:cEnd:*/
Go to most recent revision | Compare with Previous | Blame | View Log
