X-Git-Url: http://git.sourceforge.jp/view?a=blobdiff_plain;f=gcc%2Ftree.def;h=a30724913880a2c638a531778d154a8a824cf5b4;hb=7aec221bfaeacd43c0075b8de011f88862afdffd;hp=21f4db02d1fe96d79a7604a52e91b75e10225236;hpb=862f468ce622f6c9109267cace894779cd46b851;p=pf3gnuchains%2Fgcc-fork.git diff --git a/gcc/tree.def b/gcc/tree.def index 21f4db02d1f..a3072491388 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) @@ -268,9 +261,8 @@ DEFTREECODE (LANG_TYPE, "lang_type", tcc_type, 0) /* Contents are in TREE_INT_CST_LOW and TREE_INT_CST_HIGH fields, 32 bits each, giving us a 64 bit constant capability. INTEGER_CST nodes 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 or - TREE_CONSTANT_OVERFLOW already set, it is known to be unique. + 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 pointer types and for vector and float types in some circumstances. */ DEFTREECODE (INTEGER_CST, "integer_cst", tcc_constant, 0) @@ -362,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. */ @@ -390,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). @@ -407,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. @@ -437,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 @@ -505,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. */ @@ -523,6 +497,20 @@ DEFTREECODE (COND_EXPR, "cond_expr", tcc_expression, 3) */ DEFTREECODE (VEC_COND_EXPR, "vec_cond_expr", tcc_expression, 3) +/* Vector permutation expression. A = VEC_PERM_EXPR means + + N = length(mask) + foreach i in N: + M = mask[i] % (2*N) + A = M < N ? v0[M] : v1[M-N] + + V0 and V1 are vectors of the same type. MASK is an integer-typed + vector. The number of MASK elements must be the same with the + number of elements in V0 and V1. The size of the inner type + of the MASK and of the V0 and V1 must be the same. +*/ +DEFTREECODE (VEC_PERM_EXPR, "vec_perm_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 using @@ -578,11 +566,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 @@ -730,7 +718,10 @@ DEFTREECODE (TRUTH_NOT_EXPR, "truth_not_expr", tcc_expression, 1) 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. */ + and the value is either the type used by the language for booleans + or an integer vector type of the same size and with the same number + of elements as the comparison operands. True for a vector of + comparison results has all bits set while false is equal to zero. */ DEFTREECODE (LT_EXPR, "lt_expr", tcc_comparison, 2) DEFTREECODE (LE_EXPR, "le_expr", tcc_comparison, 2) DEFTREECODE (GT_EXPR, "gt_expr", tcc_comparison, 2) @@ -763,6 +754,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. */ @@ -813,11 +808,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. */ @@ -890,17 +880,14 @@ DEFTREECODE (SWITCH_EXPR, "switch_expr", tcc_statement, 3) CASE_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 case 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) +DEFTREECODE (CASE_LABEL_EXPR, "case_label_expr", tcc_statement, 4) /* 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 @@ -913,19 +900,9 @@ DEFTREECODE (CATCH_EXPR, "catch_expr", tcc_statement, 2) /* Used to represent an exception specification. EH_FILTER_TYPES is a list of allowed types, and EH_FILTER_FAILURE is an expression to evaluate on - failure. EH_FILTER_MUST_NOT_THROW controls which range type to use when - expanding. */ + failure. */ 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) @@ -945,7 +922,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: @@ -978,25 +955,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 BASE is a pointer type. If BASE is not an address of + a static or global variable INDEX2 will be NULL. - 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 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, 7) +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. */ @@ -1068,15 +1056,35 @@ DEFTREECODE (OMP_CRITICAL, "omp_critical", tcc_statement, 2) build_fold_indirect_ref of the address. */ DEFTREECODE (OMP_ATOMIC, "omp_atomic", tcc_statement, 2) +/* OpenMP - #pragma omp atomic read + Operand 0: The address at which the atomic operation is to be performed. + This address should be stabilized with save_expr. */ +DEFTREECODE (OMP_ATOMIC_READ, "omp_atomic_read", tcc_statement, 1) + +/* OpenMP - #pragma omp atomic capture + Operand 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 object + at the address is used in the expression, it should appear as if + build_fold_indirect_ref of the address. + OMP_ATOMIC_CAPTURE_OLD returns the old memory content, + OMP_ATOMIC_CAPTURE_NEW the new value. */ +DEFTREECODE (OMP_ATOMIC_CAPTURE_OLD, "omp_atomic_capture_old", tcc_statement, 2) +DEFTREECODE (OMP_ATOMIC_CAPTURE_NEW, "omp_atomic_capture_new", tcc_statement, 2) + /* OpenMP clauses. */ DEFTREECODE (OMP_CLAUSE, "omp_clause", tcc_exceptional, 0) -/* Reduction operations. +/* TRANSACTION_EXPR tree code. + Operand 0: BODY: contains body of the transaction. */ +DEFTREECODE (TRANSACTION_EXPR, "transaction_expr", tcc_expression, 1) + +/* 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) @@ -1087,7 +1095,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) @@ -1100,7 +1108,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 @@ -1108,6 +1116,37 @@ 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_minus_expr", tcc_expression, 3) + +/* Widening shift left. + The first operand is of type t1. + The second operand is the number of bits to shift 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 larger + than or equal to the first operand's type size. + The type of the entire expression is t2, such that t2 is at least twice + the size of t1. + WIDEN_LSHIFT_EXPR is equivalent to first widening (promoting) + the first argument from type t1 to type t2, and then shifting it + by the second argument. */ +DEFTREECODE (WIDEN_LSHIFT_EXPR, "widen_lshift_expr", tcc_binary, 2) + +/* 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. */ @@ -1149,13 +1188,15 @@ DEFTREECODE (VEC_PACK_SAT_EXPR, "vec_pack_sat_expr", tcc_binary, 2) the 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) +/* Widening vector shift left in bits. + Operand 0 is a vector to be shifted with N elements of size S. + Operand 1 is an integer shift amount in bits. + The result of the operation is N elements of size 2*S. + VEC_WIDEN_LSHIFT_HI_EXPR computes the N/2 high results. + VEC_WIDEN_LSHIFT_LO_EXPR computes the N/2 low results. + */ +DEFTREECODE (VEC_WIDEN_LSHIFT_HI_EXPR, "widen_lshift_hi_expr", tcc_binary, 2) +DEFTREECODE (VEC_WIDEN_LSHIFT_LO_EXPR, "widen_lshift_lo_expr", tcc_binary, 2) /* PREDICT_EXPR. Specify hint for branch prediction. The PREDICT_EXPR_PREDICTOR specify predictor and PREDICT_EXPR_OUTCOME the