X-Git-Url: http://git.sourceforge.jp/view?a=blobdiff_plain;f=gcc%2Ftree.def;h=1789de839adf8facc6d6472a92c7a6e1a2d5237f;hb=da00c46b2f6482050cbd798a8e23db693efaad52;hp=9e7e5b011d5e6122d4b42f5124f507df2872361d;hpb=1e8e992020adfba209ef30b3c369e2ca6282d837;p=pf3gnuchains%2Fgcc-fork.git diff --git a/gcc/tree.def b/gcc/tree.def index 9e7e5b011d5..1789de839ad 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 - Free Software Foundation, Inc. + Copyright (C) 1987, 1988, 1993, 1995, 1997, 1998, 2000, 2001, 2004, 2005, + 2006 Free Software Foundation, Inc. This file is part of GCC. @@ -65,7 +65,6 @@ DEFTREECODE (TREE_VEC, "tree_vec", tcc_exceptional, 0) For a block which represents the outermost scope of a function, it points to the FUNCTION_DECL node. BLOCK_VARS points to a chain of decl nodes. - BLOCK_TYPE_TAGS points to a chain of types which have their own names. BLOCK_CHAIN points to the next BLOCK at the same level. BLOCK_ABSTRACT_ORIGIN points to the original (abstract) tree node which this block is an instance of, or else is NULL to indicate that this @@ -125,8 +124,8 @@ DEFTREECODE (BLOCK, "block", tcc_exceptional, 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. OFFSET_TYPE, ENUMERAL_TYPE, BOOLEAN_TYPE, CHAR_TYPE, - INTEGER_TYPE, REAL_TYPE, POINTER_TYPE. */ + 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. @@ -151,16 +150,13 @@ DEFTREECODE (ENUMERAL_TYPE, "enumeral_type", tcc_type, 0) INTEGRAL_TYPE. */ DEFTREECODE (BOOLEAN_TYPE, "boolean_type", tcc_type, 0) -/* CHAR in Java; not used in C. Looks like an INTEGRAL_TYPE. */ -DEFTREECODE (CHAR_TYPE, "char_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_TYPE of this will point at the supertype (another INTEGER_TYPE, - or an ENUMERAL_TYPE, CHAR_TYPE, or BOOLEAN_TYPE). + or an ENUMERAL_TYPE or BOOLEAN_TYPE). Otherwise, the TREE_TYPE is zero. */ DEFTREECODE (INTEGER_TYPE, "integer_type", tcc_type, 0) @@ -362,7 +358,8 @@ DEFTREECODE (RESULT_DECL, "result_decl", tcc_declaration, 0) virtual SSA. */ DEFTREECODE (STRUCT_FIELD_TAG, "struct_field_tag", tcc_declaration, 0) DEFTREECODE (NAME_MEMORY_TAG, "name_memory_tag", tcc_declaration, 0) -DEFTREECODE (TYPE_MEMORY_TAG, "type_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 namespace declaration. Namespaces appear in DECL_CONTEXT of other _DECLs, providing a hierarchy of names. */ @@ -469,7 +466,8 @@ DEFTREECODE (COMPOUND_EXPR, "compound_expr", tcc_expression, 2) DEFTREECODE (MODIFY_EXPR, "modify_expr", tcc_expression, 2) /* Initialization expression. Operand 0 is the variable to initialize; - Operand 1 is the initializer. */ + Operand 1 is the initializer. This differs from MODIFY_EXPR in that any + reference 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, @@ -525,11 +523,13 @@ DEFTREECODE (VEC_COND_EXPR, "vec_cond_expr", tcc_expression, 3) nodes for the function. */ DEFTREECODE (BIND_EXPR, "bind_expr", tcc_expression, 3) -/* Function call. Operand 0 is the function. - Operand 1 is the argument list, a list of expressions - made out of a chain of TREE_LIST nodes. - Operand 2 is the static chain argument, or NULL. */ -DEFTREECODE (CALL_EXPR, "call_expr", tcc_expression, 3) +/* Function call. CALL_EXPRs are represented by variably-sized expression + nodes. There are at least three fixed operands. Operand 0 is an + INTEGER_CST node containing the total operand count, the number of + arguments plus 3. Operand 1 is the function, while operand 2 is + is static chain argument, or NULL. The remaining operands are the + arguments 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. @@ -637,15 +637,8 @@ DEFTREECODE (RDIV_EXPR, "rdiv_expr", tcc_binary, 2) Used for pointer subtraction in C. */ DEFTREECODE (EXACT_DIV_EXPR, "exact_div_expr", tcc_binary, 2) -/* Conversion of real to fixed point: four ways to round, - like the four ways to divide. - CONVERT_EXPR can also be used to convert a real to an integer, - and that is what is used in languages that do not have ways of - specifying which of these is wanted. Maybe these are not needed. */ +/* Conversion of real to fixed point by truncation. */ DEFTREECODE (FIX_TRUNC_EXPR, "fix_trunc_expr", tcc_unary, 1) -DEFTREECODE (FIX_CEIL_EXPR, "fix_ceil_expr", tcc_unary, 1) -DEFTREECODE (FIX_FLOOR_EXPR, "fix_floor_expr", tcc_unary, 1) -DEFTREECODE (FIX_ROUND_EXPR, "fix_round_expr", tcc_unary, 1) /* Conversion of an integer to a real. */ DEFTREECODE (FLOAT_EXPR, "float_expr", tcc_unary, 1) @@ -946,6 +939,9 @@ DEFTREECODE (REALIGN_LOAD_EXPR, "realign_load", tcc_expression, 3) OFFSET (integer constant). Corresponding address is SYMBOL + BASE + STEP * INDEX + OFFSET. Only variations and values valid on the target are allowed. + + 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 @@ -957,8 +953,15 @@ DEFTREECODE (TARGET_MEM_REF, "target_mem_ref", tcc_reference, 7) exposed 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) + Operand 1: OMP_PARALLEL_CLAUSES: List of clauses. + Operand 2: OMP_PARALLEL_FN: FUNCTION_DECL used when outlining the + body of the parallel region. Only valid after + pass_lower_omp. + Operand 3: OMP_PARALLEL_DATA_ARG: Local variable in the parent + function containing data to be shared with the child + function. */ + +DEFTREECODE (OMP_PARALLEL, "omp_parallel", tcc_statement, 4) /* OpenMP - #pragma omp for [clause1 ... clauseN] Operand 0: OMP_FOR_BODY: Loop body. @@ -1008,6 +1011,13 @@ DEFTREECODE (OMP_ORDERED, "omp_ordered", tcc_statement, 1) Operand 1: OMP_CRITICAL_NAME: Identifier for critical section. */ DEFTREECODE (OMP_CRITICAL, "omp_critical", tcc_statement, 2) +/* Return from an OpenMP directive. */ +DEFTREECODE (OMP_RETURN, "omp_return", tcc_statement, 0) + +/* OpenMP - An intermediate tree code to mark the location of the + loop or sections iteration in the partially lowered code. */ +DEFTREECODE (OMP_CONTINUE, "omp_continue", tcc_statement, 0) + /* OpenMP - #pragma omp atomic Operand 0: The address at which the atomic operation is to be performed. This address should be stabilized with save_expr. @@ -1016,52 +1026,8 @@ DEFTREECODE (OMP_CRITICAL, "omp_critical", tcc_statement, 2) build_fold_indirect_ref of the address. */ DEFTREECODE (OMP_ATOMIC, "omp_atomic", tcc_statement, 2) -/* The ordering of the codes between OMP_CLAUSE_PRIVATE and - OMP_CLAUSE_DEFAULT is exposed to TREE_RANGE_CHECK. */ -/* OpenMP clause: private (variable_list). */ -DEFTREECODE (OMP_CLAUSE_PRIVATE, "private", tcc_expression, 1) - -/* OpenMP clause: shared (variable_list). */ -DEFTREECODE (OMP_CLAUSE_SHARED, "shared", tcc_expression, 1) - -/* OpenMP clause: firstprivate (variable_list). */ -DEFTREECODE (OMP_CLAUSE_FIRSTPRIVATE, "firstprivate", tcc_expression, 1) - -/* OpenMP clause: lastprivate (variable_list). */ -DEFTREECODE (OMP_CLAUSE_LASTPRIVATE, "lastprivate", tcc_expression, 1) - -/* OpenMP clause: reduction (operator:variable_list). - OMP_CLAUSE_REDUCTION_CODE: The tree_code of the operator. - Operand 1: OMP_CLAUSE_REDUCTION_INIT: Stmt-list to initialize the var. - Operand 2: OMP_CLAUSE_REDUCTION_MERGE: - Stmt-list to merge private var into the shared one. - Operand 3: OMP_CLAUSE_REDUCTION_PLACEHOLDER: - A dummy VAR_DECL placeholder used in OMP_CLAUSE_REDUCTION_MERGE. */ -DEFTREECODE (OMP_CLAUSE_REDUCTION, "reduction", tcc_expression, 4) - -/* OpenMP clause: copyin (variable_list). */ -DEFTREECODE (OMP_CLAUSE_COPYIN, "copyin", tcc_expression, 1) - -/* OpenMP clause: copyprivate (variable_list). */ -DEFTREECODE (OMP_CLAUSE_COPYPRIVATE, "copyprivate", tcc_expression, 1) - -/* OpenMP clause: if (scalar-expression). */ -DEFTREECODE (OMP_CLAUSE_IF, "if", tcc_expression, 1) - -/* OpenMP clause: num_threads (integer-expression). */ -DEFTREECODE (OMP_CLAUSE_NUM_THREADS, "num_threads", tcc_expression, 1) - -/* OpenMP clause: schedule. */ -DEFTREECODE (OMP_CLAUSE_SCHEDULE, "schedule", tcc_expression, 1) - -/* OpenMP clause: nowait. */ -DEFTREECODE (OMP_CLAUSE_NOWAIT, "nowait", tcc_expression, 0) - -/* OpenMP clause: ordered. */ -DEFTREECODE (OMP_CLAUSE_ORDERED, "ordered", tcc_expression, 0) - -/* OpenMP clause: default. */ -DEFTREECODE (OMP_CLAUSE_DEFAULT, "default", tcc_expression, 0) +/* OpenMP clauses. */ +DEFTREECODE (OMP_CLAUSE, "omp_clause", tcc_exceptional, 0) /* Reduction operations. Operations that take a vector of elements and "reduce" it to a scalar @@ -1073,11 +1039,73 @@ 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) +/* Widenning 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 least + 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: + tmp = WIDEN_MULT_EXPR(arg1, arg2); + arg3 = WIDEN_SUM_EXPR (tmp, arg3); */ +DEFTREECODE (DOT_PROD_EXPR, "dot_prod_expr", tcc_expression, 3) + +/* Widenning summation. + The first argument is of type t1. + The second argument is of type t2, such that t2 is at least twice + the 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 it + with the second argument. */ +DEFTREECODE (WIDEN_SUM_EXPR, "widen_sum_expr", tcc_binary, 2) + +/* Widenning multiplication. + The two arguments are of type t1. + The result is of type t2, such that t2 is at least twice + the 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) + +/* GIMPLE tree codes. */ + +/* Assignment expression. Operand 0 is the what to set; 1, the new value. */ +DEFTREECODE (GIMPLE_MODIFY_STMT, "gimple_modify_stmt", tcc_gimple_stmt, 2) + +/* Widening vector multiplication. + The two operands are vectors with N elements of size S. Multiplying the + elements 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_hi_expr", tcc_binary, 2) + +/* Unpack (extract and promote/widen) the high/low elements of the input vector + into the output vector. The input vector has twice as many elements + as the output vector, that are half the size of the elements + of 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) + +/* Pack (demote/narrow and merge) the elements of the two input vectors + into the output vector, using modulo/saturating arithmetic. + The elements of the input vectors are twice the size of the elements of the + output vector. This is used to support type demotion. */ +DEFTREECODE (VEC_PACK_MOD_EXPR, "vec_pack_mod_expr", tcc_binary, 2) +DEFTREECODE (VEC_PACK_SAT_EXPR, "vec_pack_sat_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) /* Local variables: