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 list
   of allowed types, and EH_FILTER_FAILURE is an expression to evaluate on
   failure.  */
DEFTREECODE (EH_FILTER_EXPR, "eh_filter_expr", tcc_statement, 2)

/* Node used for describing a property that is known at compile
   time.  */
DEFTREECODE (SCEV_KNOWN, "scev_known", tcc_expression, 0)

/* Node used for describing a property that is not known at compile
   time.  */
DEFTREECODE (SCEV_NOT_KNOWN, "scev_not_known", tcc_expression, 0)

/* Polynomial chains of recurrences.
   cr = {CHREC_LEFT (cr), +, CHREC_RIGHT (cr)}_CHREC_VARIABLE (cr).  */
DEFTREECODE (POLYNOMIAL_CHREC, "polynomial_chrec", tcc_expression, 2)

/* 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)

/* NOTE: This code is deprecated and should only be used internally by ipa* as
   temporary construct.

   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 <Y, EXPR>, the optimizers can infer
   two 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 are
   valid GIMPLE conditional expressions (as defined by is_gimple_condexpr)
   and conditional expressions with the first operand being a
   PLUS_EXPR with a variable possibly wrapped in a NOP_EXPR first
   operand 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 a
   baseclass of itself or another class.  */
DEFTREECODE (TREE_BINFO, "tree_binfo", tcc_exceptional, 0)

/* Records the size for an expression of variable size type.  This is
   for 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 1
   size VS, according to the offset OFF defined by Operand 2 as
   follows:
   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
   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 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 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 <p, c> 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)

/* OpenACC and OpenMP.  As it is exposed in TREE_RANGE_CHECK invocations, do
   not change the ordering of these codes.  */

/* OpenACC - #pragma acc parallel [clause1 ... clauseN]
   Operand 0: OMP_BODY: Code to be executed in parallel.
   Operand 1: OMP_CLAUSES: List of clauses.  */

DEFTREECODE (OACC_PARALLEL, "oacc_parallel", tcc_statement, 2)

/* OpenACC - #pragma acc kernels [clause1 ... clauseN]
   Operand 0: OMP_BODY: Sequence of kernels.
   Operand 1: OMP_CLAUSES: List of clauses.  */

DEFTREECODE (OACC_KERNELS, "oacc_kernels", tcc_statement, 2)

/* OpenACC - #pragma acc serial [clause1 ... clauseN]
   Operand 0: OMP_BODY: Code to be executed sequentially.
   Operand 1: OMP_CLAUSES: List of clauses.  */

DEFTREECODE (OACC_SERIAL, "oacc_serial", tcc_statement, 2)

/* OpenACC - #pragma acc data [clause1 ... clauseN]
   Operand 0: OACC_DATA_BODY: Data construct body.
   Operand 1: OACC_DATA_CLAUSES: List of clauses.  */

DEFTREECODE (OACC_DATA, "oacc_data", tcc_statement, 2)

/* OpenACC - #pragma acc host_data [clause1 ... clauseN]
   Operand 0: OACC_HOST_DATA_BODY: Host_data construct body.
   Operand 1: OACC_HOST_DATA_CLAUSES: List of clauses.  */

DEFTREECODE (OACC_HOST_DATA, "oacc_host_data", tcc_statement, 2)

/* 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]

   A single OMP_FOR node represents an entire nest of collapsed
   loops; as noted below, some of its arguments are vectors of length
   equal to the collapse depth, and the corresponding elements holding
   data specific to a particular loop in the nest.  These vectors are
   numbered from the outside in so that the outermost loop is element 0.

   These constructs have seven operands:

   Operand 0: OMP_FOR_BODY contains the loop body.

   Operand 1: OMP_FOR_CLAUSES is the list of clauses
   associated with the directive.

   Operand 2: OMP_FOR_INIT is a vector containing iteration
   variable initializations of the form VAR = N1.

   Operand 3: OMP_FOR_COND is vector containing loop
   conditional expressions of the form VAR {<,>,<=,>=} N2.

   Operand 4: OMP_FOR_INCR is a vector containing loop index
   increment expressions of the form VAR {+=,-=} INCR.

   Operand 5: OMP_FOR_PRE_BODY contains side effect code from
   operands OMP_FOR_INIT, OMP_FOR_COND and
   OMP_FOR_INCR.  These side effects are part of the
   OMP_FOR block but must be evaluated before the start of
   loop body.  OMP_FOR_PRE_BODY specifically
   includes DECL_EXPRs for iteration variables that are
   declared in the nested for loops.
   Note this field is not a vector; it may be null, but otherwise is
   usually a statement list collecting the side effect code from all
   the collapsed loops.

   Operand 6: OMP_FOR_ORIG_DECLS holds VAR_DECLS for the
   original user-specified iterator variables in the source code.
   In some cases, like C++ class iterators or range for with
   decomposition, the for loop is rewritten by the front end to
   use a temporary iteration variable.  The purpose of this field is to
   make the original variables available to the gimplifier so it can
   adjust their data-sharing attributes and diagnose errors.
   OMP_FOR_ORIG_DECLS is a vector field, with each element holding
   a list of VAR_DECLS for the corresponding collapse level.

   The loop index variable VAR must be a signed integer variable,
   which is implicitly private to each thread.  For rectangular loops,
   the bounds N1 and N2 and the increment expression
   INCR are required to be loop-invariant integer expressions
   that are evaluated without any synchronization.  The evaluation order,
   frequency of evaluation and side effects are otherwise unspecified
   by the standard.

   For non-rectangular loops, in which the bounds of an inner loop depend
   on the index of an outer loop, the bit OMP_FOR_NON_RECTANGULAR
   must be set.  In this case N1 and N2 are not ordinary
   expressions, but instead a TREE_VEC with three elements:
   the DECL for the outer loop variable, a multiplication
   factor, and an offset. */

DEFTREECODE (OMP_FOR, "omp_for", tcc_statement, 7)

/* OpenMP - #pragma omp simd [clause1 ... clauseN]
   Operands like for OMP_FOR.  */
DEFTREECODE (OMP_SIMD, "omp_simd", tcc_statement, 7)

/* OpenMP - #pragma omp distribute [clause1 ... clauseN]
   Operands like for OMP_FOR.  */
DEFTREECODE (OMP_DISTRIBUTE, "omp_distribute", tcc_statement, 7)

/* OpenMP - #pragma omp taskloop [clause1 ... clauseN]
   Operands like for OMP_FOR.  */
DEFTREECODE (OMP_TASKLOOP, "omp_taskloop", tcc_statement, 7)

/* OpenMP - #pragma omp loop [clause1 ... clauseN]
   Operands like for OMP_FOR.  */
DEFTREECODE (OMP_LOOP, "omp_loop", tcc_statement, 7)

/* OpenMP - #pragma acc loop [clause1 ... clauseN]
   Operands like for OMP_FOR.  */
DEFTREECODE (OACC_LOOP, "oacc_loop", tcc_statement, 7)

/* OpenMP - #pragma omp teams [clause1 ... clauseN]
   Operand 0: OMP_TEAMS_BODY: Teams body.
   Operand 1: OMP_TEAMS_CLAUSES: List of clauses.  */
DEFTREECODE (OMP_TEAMS, "omp_teams", tcc_statement, 2)

/* OpenMP - #pragma omp target data [clause1 ... clauseN]
   Operand 0: OMP_TARGET_DATA_BODY: Target data construct body.
   Operand 1: OMP_TARGET_DATA_CLAUSES: List of clauses.  */
DEFTREECODE (OMP_TARGET_DATA, "omp_target_data", tcc_statement, 2)

/* OpenMP - #pragma omp target [clause1 ... clauseN]
   Operand 0: OMP_TARGET_BODY: Target construct body.
   Operand 1: OMP_TARGET_CLAUSES: List of clauses.  */
DEFTREECODE (OMP_TARGET, "omp_target", tcc_statement, 2)

/* 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 ordered
   Operand 0: OMP_ORDERED_BODY: Master section body.
   Operand 1: OMP_ORDERED_CLAUSES: List of clauses.  */
DEFTREECODE (OMP_ORDERED, "omp_ordered", tcc_statement, 2)

/* OpenMP - #pragma omp critical [name]
   Operand 0: OMP_CRITICAL_BODY: Critical section body.
   Operand 1: OMP_CRITICAL_CLAUSES: List of clauses.
   Operand 2: OMP_CRITICAL_NAME: Identifier for critical section.  */
DEFTREECODE (OMP_CRITICAL, "omp_critical", tcc_statement, 3)

/* OpenMP - #pragma omp single
   Operand 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 scope
   Operand 0: OMP_SCOPE_BODY: Masked section body.
   Operand 1: OMP_SCOPE_CLAUSES: List of clauses.  */
DEFTREECODE (OMP_SCOPE, "omp_scope", tcc_statement, 2)

/* OpenMP - #pragma omp taskgroup
   Operand 0: OMP_TASKGROUP_BODY: Taskgroup body.
   Operand 1: OMP_SINGLE_CLAUSES: List of clauses.  */
DEFTREECODE (OMP_TASKGROUP, "omp_taskgroup", tcc_statement, 2)

/* OpenMP - #pragma omp masked
   Operand 0: OMP_MASKED_BODY: Masked section body.
   Operand 1: OMP_MASKED_CLAUSES: List of clauses.  */
DEFTREECODE (OMP_MASKED, "omp_masked", tcc_statement, 2)

/* OpenMP - #pragma omp scan
   Operand 0: OMP_SCAN_BODY: Scan body.
   Operand 1: OMP_SCAN_CLAUSES: List of clauses.  */
DEFTREECODE (OMP_SCAN, "omp_scan", tcc_statement, 2)

/* OpenMP - #pragma omp section
   Operand 0: OMP_SECTION_BODY: Section body.  */
DEFTREECODE (OMP_SECTION, "omp_section", tcc_statement, 1)

/* OpenMP - #pragma omp master
   Operand 0: OMP_MASTER_BODY: Master section body.  */
DEFTREECODE (OMP_MASTER, "omp_master", tcc_statement, 1)

/* OpenACC - #pragma acc cache (variable1 ... variableN)
   Operand 0: OACC_CACHE_CLAUSES: List of variables (transformed into
	OMP_CLAUSE__CACHE_ clauses).  */
DEFTREECODE (OACC_CACHE, "oacc_cache", tcc_statement, 1)

/* OpenACC - #pragma acc declare [clause1 ... clauseN]
   Operand 0: OACC_DECLARE_CLAUSES: List of clauses.  */
DEFTREECODE (OACC_DECLARE, "oacc_declare", tcc_statement, 1)

/* OpenACC - #pragma acc enter data [clause1 ... clauseN]
   Operand 0: OACC_ENTER_DATA_CLAUSES: List of clauses.  */
DEFTREECODE (OACC_ENTER_DATA, "oacc_enter_data", tcc_statement, 1)

/* OpenACC - #pragma acc exit data [clause1 ... clauseN]
   Operand 0: OACC_EXIT_DATA_CLAUSES: List of clauses.  */
DEFTREECODE (OACC_EXIT_DATA, "oacc_exit_data", tcc_statement, 1)

/* OpenACC - #pragma acc update [clause1 ... clauseN]
   Operand 0: OACC_UPDATE_CLAUSES: List of clauses.  */
DEFTREECODE (OACC_UPDATE, "oacc_update", tcc_statement, 1)

/* OpenMP - #pragma omp target update [clause1 ... clauseN]
   Operand 0: OMP_TARGET_UPDATE_CLAUSES: List of clauses.  */
DEFTREECODE (OMP_TARGET_UPDATE, "omp_target_update", tcc_statement, 1)

/* OpenMP - #pragma omp target enter data [clause1 ... clauseN]
   Operand 0: OMP_TARGET_ENTER_DATA_CLAUSES: List of clauses.  */
DEFTREECODE (OMP_TARGET_ENTER_DATA, "omp_target_enter_data", tcc_statement, 1)

/* OpenMP - #pragma omp target exit data [clause1 ... clauseN]
   Operand 0: OMP_TARGET_EXIT_DATA_CLAUSES: List of clauses.  */
DEFTREECODE (OMP_TARGET_EXIT_DATA, "omp_target_exit_data", tcc_statement, 1)

/* OMP_ATOMIC through OMP_ATOMIC_CAPTURE_NEW must be consecutive,
   or OMP_ATOMIC_SEQ_CST needs adjusting.  */

/* 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.
   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.  */
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)

/* TRANSACTION_EXPR tree code.
   Operand 0: BODY: contains body of the transaction.  */
DEFTREECODE (TRANSACTION_EXPR, "transaction_expr", tcc_expression, 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 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)

/* Widening 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)

/* Widening sad (sum of absolute differences).
   The first two arguments are of type t1 which should be integer.
   The third argument and the result are of type t2, such that t2 is at least
   twice the size of t1.  Like DOT_PROD_EXPR, SAD_EXPR (arg1,arg2,arg3) is
   equivalent to:
       tmp = WIDEN_MINUS_EXPR (arg1, arg2)
       tmp2 = ABS_EXPR (tmp)
       arg3 = PLUS_EXPR (tmp2, arg3)
  or:
       tmp = WIDEN_MINUS_EXPR (arg1, arg2)
       tmp2 = ABS_EXPR (tmp)
       arg3 = WIDEN_SUM_EXPR (tmp2, arg3)
 */
DEFTREECODE (SAD_EXPR, "sad_expr", tcc_expression, 3)

/* Widening multiplication.
   The two arguments are of type t1 and t2, both integral types that
   have the same precision, but possibly different signedness.
   The result is of integral type t3, such that t3 is at least twice
   the size of t1/t2. WIDEN_MULT_EXPR is equivalent to first widening
   (promoting) the arguments from type t1 to type t3, and from t2 to
   type t3 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)
DEFTREECODE (WIDEN_PLUS_EXPR, "widen_plus_expr", tcc_binary, 2)
DEFTREECODE (WIDEN_MINUS_EXPR, "widen_minus_expr", tcc_binary, 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_lo_expr", tcc_binary, 2)

/* Similarly, but return the even or odd N/2 products.  */
DEFTREECODE (VEC_WIDEN_MULT_EVEN_EXPR, "widen_mult_even_expr", tcc_binary, 2)
DEFTREECODE (VEC_WIDEN_MULT_ODD_EXPR, "widen_mult_odd_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)

/* Unpack (extract) the high/low elements of the input vector, convert
   fixed point values to floating point and widen elements 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.  */
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)

/* Unpack (extract) the high/low elements of the input vector, convert
   floating point values to integer and widen elements 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.  */
DEFTREECODE (VEC_UNPACK_FIX_TRUNC_HI_EXPR, "vec_unpack_fix_trunc_hi_expr",
	     tcc_unary, 1)
DEFTREECODE (VEC_UNPACK_FIX_TRUNC_LO_EXPR, "vec_unpack_fix_trunc_lo_expr",
	     tcc_unary, 1)

/* Pack (demote/narrow and merge) the elements of the two input vectors
   into the output vector using truncation/saturation.
   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_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 integer
   and pack (narrow and merge) the elements into the output vector. The
   elements of the input vector are twice the size of the elements of
   the output vector.  */
DEFTREECODE (VEC_PACK_FIX_TRUNC_EXPR, "vec_pack_fix_trunc_expr", tcc_binary, 2)

/* Convert fixed point values of the two input vectors to floating point
   and pack (narrow and merge) the elements into the output vector. The
   elements of the input vector are twice the size of the elements of
   the output vector.  */
DEFTREECODE (VEC_PACK_FLOAT_EXPR, "vec_pack_float_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)
DEFTREECODE (VEC_WIDEN_PLUS_HI_EXPR, "widen_plus_hi_expr", tcc_binary, 2)
DEFTREECODE (VEC_WIDEN_PLUS_LO_EXPR, "widen_plus_lo_expr", tcc_binary, 2)
DEFTREECODE (VEC_WIDEN_MINUS_HI_EXPR, "widen_minus_hi_expr", tcc_binary, 2)
DEFTREECODE (VEC_WIDEN_MINUS_LO_EXPR, "widen_minus_lo_expr", tcc_binary, 2)

/* PREDICT_EXPR.  Specify hint for branch prediction.  The
   PREDICT_EXPR_PREDICTOR specify predictor and PREDICT_EXPR_OUTCOME the
   outcome (0 for not taken and 1 for taken).  Once the profile is guessed
   all conditional branches leading to execution paths executing the
   PREDICT_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)

/* ANNOTATE_EXPR.
   Operand 0 is the expression to be annotated.
   Operand 1 is the annotation kind.
   Operand 2 is additional data.  */
DEFTREECODE (ANNOTATE_EXPR, "annotate_expr", tcc_expression, 3)

/*
Local variables:
mode:c
End:
*/
