/* 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.
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
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)
/* 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. */
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.
/* 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)
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 is
- a reference to a vtable, but it needn't be. Operands are:
+/* 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)
/* Constructor: return an aggregate value made from specified components.
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. */
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
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. */
/* 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:
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)
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. */
+ is preserved for the purpose of alias analysis. */
DEFTREECODE (TARGET_MEM_REF, "target_mem_ref", tcc_reference, 6)
/* 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)
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)
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