X-Git-Url: http://git.sourceforge.jp/view?a=blobdiff_plain;f=gcc%2Ftree.def;h=791d699a0c55acad06cab49e66d025e0c1b15963;hb=1795103a5f47d1050c9a60ba0ef8939675c1a68b;hp=a8836c94b45a6479190d3fc19bf1a211d8c226fe;hpb=62126877111f8eff5299bc4f206645760ad858b6;p=pf3gnuchains%2Fgcc-fork.git diff --git a/gcc/tree.def b/gcc/tree.def index a8836c94b45..791d699a0c5 100644 --- a/gcc/tree.def +++ b/gcc/tree.def @@ -1,7 +1,7 @@ /* This file contains the definitions and documentation for the tree codes used in GCC. - Copyright (C) 1987, 1988, 1993, 1995, 1997, 1998, 2000, 2001, 2004, 2005, - 2006, 2007, 2008, 2009 Free Software Foundation, Inc. + 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. @@ -89,16 +89,6 @@ DEFTREECODE (BLOCK, "block", tcc_exceptional, 0) that 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_NONCOPIED_PARTS field is a list specifying which parts - of an object of this type should *not* be copied by assignment. - The TREE_VALUE of each is a FIELD_DECL that should not be - copied. The TREE_PURPOSE is an initial value for that field when - an object of this type is initialized via an INIT_EXPR. It may - be NULL if no special value is required. Even the things in this - list are copied if the right-hand side of an assignment is known - to be a complete object (rather than being, perhaps, a subobject - of some other object.) The determination of what constitutes a - complete object is done by fixed_type_p. The TYPE_NAME field contains info on the name used in the program for this type (for GDB symbol table output). It is either a TYPE_DECL node, for types that are typedefs, or an IDENTIFIER_NODE @@ -125,7 +115,7 @@ DEFTREECODE (BLOCK, "block", tcc_exceptional, 0) macros in tree.h. Changing the order will degrade the speed of the compiler. 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 object @@ -167,24 +157,27 @@ DEFTREECODE (REAL_TYPE, "real_type", tcc_type, 0) macros in tree.h. Changing the order will degrade the speed of the compiler. POINTER_TYPE, REFERENCE_TYPE. Note that this range overlaps 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) +/* A reference is like a pointer except that it is coerced + automatically to the value it points to. Used in C++. */ +DEFTREECODE (REFERENCE_TYPE, "reference_type", tcc_type, 0) + +/* The C++ decltype(nullptr) type. */ +DEFTREECODE (NULLPTR_TYPE, "nullptr_type", tcc_type, 0) + /* _Fract and _Accum types in Embedded-C. Different fixed-point types are distinguished by machine mode and by the TYPE_SIZE and the TYPE_PRECISION. */ DEFTREECODE (FIXED_POINT_TYPE, "fixed_point_type", tcc_type, 0) -/* A reference is like a pointer except that it is coerced - automatically 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 checking macros in tree.h. Changing the order will degrade the speed of the compiler. COMPLEX_TYPE, VECTOR_TYPE, ARRAY_TYPE. */ - + /* Complex number types. The TREE_TYPE field is the data type of the real and imaginary parts. It must be of scalar arithmetic type, not including pointer type. */ @@ -199,7 +192,7 @@ DEFTREECODE (VECTOR_TYPE, "vector_type", tcc_type, 0) macros in tree.h. Changing the order will degrade the speed of the compiler. 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. @@ -236,7 +229,7 @@ DEFTREECODE (QUAL_UNION_TYPE, "qual_union_type", tcc_type, 0) /* The ordering of the following codes is optimized for the checking macros in tree.h. Changing the order will degrade the speed of the compiler. VOID_TYPE, FUNCTION_TYPE, METHOD_TYPE. */ - + /* The void type in C */ DEFTREECODE (VOID_TYPE, "void_type", tcc_type, 0) @@ -361,11 +354,9 @@ DEFTREECODE (PARM_DECL, "parm_decl", tcc_declaration, 0) DEFTREECODE (TYPE_DECL, "type_decl", tcc_declaration, 0) DEFTREECODE (RESULT_DECL, "result_decl", tcc_declaration, 0) -/* Memory tags used in tree-ssa to represent memory locations in - virtual SSA. */ -DEFTREECODE (NAME_MEMORY_TAG, "name_memory_tag", tcc_declaration, 0) -DEFTREECODE (SYMBOL_MEMORY_TAG, "symbol_memory_tag", tcc_declaration, 0) -DEFTREECODE (MEMORY_PARTITION_TAG, "memory_partition_tag", tcc_declaration, 0) +/* A "declaration" of a debug temporary. It should only appear in + DEBUG 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. */ @@ -389,6 +380,9 @@ DEFTREECODE (TRANSLATION_UNIT_DECL, "translation_unit_decl",\ /* References to storage. */ +/* The ordering of the following codes is optimized for the classification + in 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). @@ -406,23 +400,10 @@ DEFTREECODE (COMPONENT_REF, "component_ref", tcc_reference, 3) to its mode width. */ DEFTREECODE (BIT_FIELD_REF, "bit_field_ref", tcc_reference, 3) -/* The ordering of the following codes is optimized for the checking - macros in tree.h. Changing the order will degrade the speed of the - compiler. 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 address - in 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 referenced - address: - 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 only on an operand of complex type, these return + a 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. @@ -436,24 +417,18 @@ DEFTREECODE (ARRAY_REF, "array_ref", tcc_reference, 4) of the range is taken from the type of the expression. */ DEFTREECODE (ARRAY_RANGE_REF, "array_range_ref", tcc_reference, 4) -/* Used to represent lookup of runtime type dependent data. Often this is - a reference to a vtable, but it needn't be. Operands are: +/* C unary `*' or Pascal `^'. One operand, an expression for a pointer. */ +DEFTREECODE (INDIRECT_REF, "indirect_ref", tcc_reference, 1) + +/* Used to represent lookup in a virtual method table which is dependent on + the runtime type of an object. 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 is being performed. Through this the optimizers may be able to statically determine the dynamic type of the object. - OBJ_TYPE_REF_TOKEN: Something front-end specific used to resolve the - reference to something simpler, usually to the address of a DECL. - Never touched by the middle-end. Good choices would be either an - identifier or a vtable index. */ + OBJ_TYPE_REF_TOKEN: An integer index to the virtual method table. */ DEFTREECODE (OBJ_TYPE_REF, "obj_type_ref", tcc_expression, 3) -/* The exception object from the runtime. */ -DEFTREECODE (EXC_PTR_EXPR, "exc_ptr_expr", tcc_expression, 0) - -/* The filter object from the runtime. */ -DEFTREECODE (FILTER_EXPR, "filter_expr", tcc_expression, 0) - /* 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 of @@ -504,7 +479,7 @@ DEFTREECODE (TARGET_EXPR, "target_expr", tcc_expression, 4) Operand 1 must have the same type as the entire expression, unless it unconditionally throws an exception, in which case it should have VOID_TYPE. The same constraints apply to operand 2. The - condition in operand 0 must be of integral type. + condition in operand 0 must be of integral type. In cfg gimple, if you do not have a selection expression, operands 1 and 2 are NULL. The operands are then taken from the cfg edges. */ @@ -577,11 +552,11 @@ DEFTREECODE (WITH_CLEANUP_EXPR, "with_cleanup_expr", tcc_expression, 1) BLKmode, because it will not be forced out of memory. */ DEFTREECODE (CLEANUP_POINT_EXPR, "cleanup_point_expr", tcc_expression, 1) -/* The following two codes are used in languages that have types where - some field in an object of the type contains a value that is used in - the computation of another field's offset or size and/or the size of - the type. The positions and/or sizes of fields can vary from object - to object of the same type or even for one and the same object within +/* The following code is used in languages that have types where some + field in an object of the type contains a value that is used in the + computation of another field's offset or size and/or the size of the + type. The positions and/or sizes of fields can vary from object to + object of the same type or even for one and the same object within its scope. Record types with discriminants in Ada or schema types in Pascal are @@ -762,6 +737,10 @@ DEFTREECODE (PAREN_EXPR, "paren_expr", tcc_unary, 1) represented 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 different + address 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-point value. Or conversion of a fixed-point value from an integer, a real, or a fixed-point value. */ @@ -812,11 +791,6 @@ 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) -/* Used only on an operand of complex type, these return - a value of the corresponding component type. */ -DEFTREECODE (REALPART_EXPR, "realpart_expr", tcc_reference, 1) -DEFTREECODE (IMAGPART_EXPR, "imagpart_expr", tcc_reference, 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. */ @@ -891,15 +865,12 @@ DEFTREECODE (SWITCH_EXPR, "switch_expr", tcc_statement, 3) label. CASE_LABEL is the corresponding LABEL_DECL. */ DEFTREECODE (CASE_LABEL_EXPR, "case_label_expr", tcc_statement, 3) -/* RESX. Resume execution after an exception. Operand 0 is a - number indicating the exception region that is being left. */ -DEFTREECODE (RESX_EXPR, "resx_expr", tcc_statement, 1) - /* Used to represent an inline assembly statement. ASM_STRING returns a STRING_CST for the instruction (e.g., "mov x, y"). ASM_OUTPUTS, ASM_INPUTS, and ASM_CLOBBERS represent the outputs, inputs, and clobbers - for the statement. */ -DEFTREECODE (ASM_EXPR, "asm_expr", tcc_statement, 4) + for the statement. ASM_LABELS, if present, indicates various destinations + for 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 every time a variable is assigned a new value. The SSA builder uses SSA_NAME @@ -916,15 +887,6 @@ DEFTREECODE (CATCH_EXPR, "catch_expr", tcc_statement, 2) expanding. */ DEFTREECODE (EH_FILTER_EXPR, "eh_filter_expr", tcc_statement, 2) -/* Indicates a change in the dynamic type of a memory location. This - has no value and generates no executable code. It is only used for - type based alias analysis. This is generated by C++ placement new. - CHANGE_DYNAMIC_TYPE_NEW_TYPE, the first operand, is the new type. - CHANGE_DYNAMIC_TYPE_LOCATION, the second operand, is the location - whose type is being changed. */ -DEFTREECODE (CHANGE_DYNAMIC_TYPE_EXPR, "change_dynamic_type_expr", - tcc_statement, 2) - /* Node used for describing a property that is known at compile time. */ DEFTREECODE (SCEV_KNOWN, "scev_known", tcc_expression, 0) @@ -944,7 +906,7 @@ DEFTREECODE (STATEMENT_LIST, "statement_list", tcc_exceptional, 0) /* Predicate assertion. Artificial expression generated by the optimizers to keep track of predicate values. This expression may only appear on the RHS of assignments. - + Given X = ASSERT_EXPR , the optimizers can infer two things: @@ -977,25 +939,36 @@ DEFTREECODE (WITH_SIZE_EXPR, "with_size_expr", tcc_expression, 2) If OFF > 0, the last VS - OFF elements of vector OP0 are concatenated to the 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, in - which case its low log2(VS)-1 bits define the offset, or it can be a mask + On different targets OFF may take different forms; It can be an address, in + which case its low log2(VS)-1 bits define the offset, or it can be a mask generated 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 global - variable), BASE (register), INDEX (register), STEP (integer constant), - OFFSET (integer constant). Corresponding address is - SYMBOL + BASE + STEP * INDEX + OFFSET. Only variations and values valid on - the target are allowed. +/* Low-level memory addressing. Operands are BASE (address of static or + global variable or register), OFFSET (integer constant), + INDEX (register), STEP (integer constant), INDEX2 (register), + The corresponding address is BASE + STEP * INDEX + INDEX2 + OFFSET. + Only variations and values valid on the target are allowed. + + The type of STEP, INDEX and INDEX2 is sizetype. - The type of STEP, INDEX and OFFSET is sizetype. The type of BASE is - sizetype or a pointer type (if SYMBOL is NULL). - - The sixth argument is the reference to the original memory access, which - is preserved for the purposes of the RTL alias analysis. The seventh - argument is a tag representing results of the tree level alias analysis. */ + The type of BASE is a pointer type. If BASE is not an address of + a static or global variable INDEX2 will be NULL. -DEFTREECODE (TARGET_MEM_REF, "target_mem_ref", tcc_reference, 7) + The type of OFFSET is a pointer type and determines TBAA the same as + the constant offset operand in MEM_REF. */ + +DEFTREECODE (TARGET_MEM_REF, "target_mem_ref", tcc_reference, 5) + +/* Memory addressing. Operands are a pointer and a tree constant integer + byte offset of the pointer type that when dereferenced yields the + type of the base object the pointer points into and which is used for + TBAA purposes. + The type of the MEM_REF is the type the bytes at the memory location + are interpreted as. + MEM_REF is equivalent to ((typeof(c))p)->x... where x... is a + chain of component references offsetting p by c. */ +DEFTREECODE (MEM_REF, "mem_ref", tcc_reference, 2) /* The ordering of the codes between OMP_PARALLEL and OMP_CRITICAL is exposed to TREE_RANGE_CHECK. */ @@ -1070,12 +1043,12 @@ DEFTREECODE (OMP_ATOMIC, "omp_atomic", tcc_statement, 2) /* OpenMP clauses. */ DEFTREECODE (OMP_CLAUSE, "omp_clause", tcc_exceptional, 0) -/* Reduction operations. +/* Reduction operations. Operations that take a vector of elements and "reduce" it to a scalar result (e.g. summing the elements of the vector, finding the minimum over the vector elements, etc). Operand 0 is a vector; the first element in the vector has the result. - Operand 1 is a vector. */ + 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) @@ -1086,7 +1059,7 @@ DEFTREECODE (REDUC_PLUS_EXPR, "reduc_plus_expr", tcc_unary, 1) twice 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: + or: tmp = WIDEN_MULT_EXPR(arg1, arg2); arg3 = WIDEN_SUM_EXPR (tmp, arg3); */ DEFTREECODE (DOT_PROD_EXPR, "dot_prod_expr", tcc_expression, 3) @@ -1099,7 +1072,7 @@ DEFTREECODE (DOT_PROD_EXPR, "dot_prod_expr", tcc_expression, 3) the first argument from type t1 to type t2, and then summing it with 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 twice @@ -1107,6 +1080,24 @@ DEFTREECODE (WIDEN_SUM_EXPR, "widen_sum_expr", tcc_binary, 2) the arguments from type t1 to type t2, and then multiplying them. */ DEFTREECODE (WIDEN_MULT_EXPR, "widen_mult_expr", tcc_binary, 2) +/* Widening multiply-accumulate. + The first two arguments are of type t1. + The third argument and the result are of type t2, such as t2 is at least + twice the size of t1. t1 and t2 must be integral or fixed-point types. + The expression is equivalent to a WIDEN_MULT_EXPR operation + of the first two operands followed by an add or subtract of the third + operand. */ +DEFTREECODE (WIDEN_MULT_PLUS_EXPR, "widen_mult_plus_expr", tcc_expression, 3) +/* This is like the above, except in the final expression the multiply result + is subtracted from t3. */ +DEFTREECODE (WIDEN_MULT_MINUS_EXPR, "widen_mult_plus_expr", tcc_expression, 3) + +/* Fused multiply-add. + All operands and the result are of the same type. No intermediate + rounding is performed after multiplying operand one with operand two + before adding operand three. */ +DEFTREECODE (FMA_EXPR, "fma_expr", tcc_expression, 3) + /* Whole vector left/right shift in bits. Operand 0 is a vector to be shifted. Operand 1 is an integer shift amount in bits. */