OSDN Git Service

* optimize.c (inlinable_function_p): Allow only smaller single
[pf3gnuchains/gcc-fork.git] / gcc / tree.def
1 /* This file contains the definitions and documentation for the
2    tree codes used in the GNU C compiler.
3    Copyright (C) 1987, 1988, 1993, 1995, 1997, 1998, 2000, 2001
4    Free Software Foundation, Inc.
5
6 This file is part of GCC.
7
8 GCC is free software; you can redistribute it and/or modify it under
9 the terms of the GNU General Public License as published by the Free
10 Software Foundation; either version 2, or (at your option) any later
11 version.
12
13 GCC is distributed in the hope that it will be useful, but WITHOUT ANY
14 WARRANTY; without even the implied warranty of MERCHANTABILITY or
15 FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
16 for more details.
17
18 You should have received a copy of the GNU General Public License
19 along with GCC; see the file COPYING.  If not, write to the Free
20 Software Foundation, 59 Temple Place - Suite 330, Boston, MA
21 02111-1307, USA.  */
22
23  
24 /* The third argument can be:
25    'x' for an exceptional code (fits no category).
26    't' for a type object code.
27    'b' for a lexical block.
28    'c' for codes for constants.
29    'd' for codes for declarations (also serving as variable refs).
30    'r' for codes for references to storage.
31    '<' for codes for comparison expressions.
32    '1' for codes for unary arithmetic expressions.
33    '2' for codes for binary arithmetic expressions.
34    's' for codes for expressions with inherent side effects.
35    'e' for codes for other kinds of expressions.  */
36
37 /* For `r', `e', `<', `1', `2', `s' and `x' nodes,
38    the 4th element is the number of argument slots to allocate.
39    This determines the size of the tree node object.  */
40
41 /* Any erroneous construct is parsed into a node of this type.
42    This type of node is accepted without complaint in all contexts
43    by later parsing activities, to avoid multiple error messages
44    for one error.
45    No fields in these nodes are used except the TREE_CODE.  */
46 DEFTREECODE (ERROR_MARK, "error_mark", 'x', 0)
47
48 /* Used to represent a name (such as, in the DECL_NAME of a decl node).
49    Internally it looks like a STRING_CST node.
50    There is only one IDENTIFIER_NODE ever made for any particular name.
51    Use `get_identifier' to get it (or create it, the first time).  */
52 DEFTREECODE (IDENTIFIER_NODE, "identifier_node", 'x', -1)
53
54 /* Used to hold information to identify an operator (or combination
55    of two operators) considered as a `noun' rather than a `verb'.
56    The first operand is encoded in the TREE_TYPE field.  */
57 DEFTREECODE (OP_IDENTIFIER, "op_identifier", 'x', 2)
58
59 /* Has the TREE_VALUE and TREE_PURPOSE fields.  */
60 /* These nodes are made into lists by chaining through the
61    TREE_CHAIN field.  The elements of the list live in the
62    TREE_VALUE fields, while TREE_PURPOSE fields are occasionally
63    used as well to get the effect of Lisp association lists.  */
64 DEFTREECODE (TREE_LIST, "tree_list", 'x', 2)
65
66 /* These nodes contain an array of tree nodes.  */
67 DEFTREECODE (TREE_VEC, "tree_vec", 'x', 2)
68
69 /* A symbol binding block.  These are arranged in a tree,
70    where the BLOCK_SUBBLOCKS field contains a chain of subblocks
71    chained through the BLOCK_CHAIN field.
72    BLOCK_SUPERCONTEXT points to the parent block.
73      For a block which represents the outermost scope of a function, it
74      points to the FUNCTION_DECL node.
75    BLOCK_VARS points to a chain of decl nodes.
76    BLOCK_TYPE_TAGS points to a chain of types which have their own names.
77    BLOCK_CHAIN points to the next BLOCK at the same level.
78    BLOCK_ABSTRACT_ORIGIN points to the original (abstract) tree node which
79    this block is an instance of, or else is NULL to indicate that this
80    block is not an instance of anything else.  When non-NULL, the value
81    could either point to another BLOCK node or it could point to a
82    FUNCTION_DECL node (e.g. in the case of a block representing the
83    outermost scope of a particular inlining of a function).
84    BLOCK_ABSTRACT is non-zero if the block represents an abstract
85    instance of a block (i.e. one which is nested within an abstract
86    instance of an inline function). 
87    TREE_ASM_WRITTEN is non-zero if the block was actually referenced
88    in the generated assembly.  */
89 DEFTREECODE (BLOCK, "block", 'b', 0)
90 \f
91 /* Each data type is represented by a tree node whose code is one of
92    the following:  */
93 /* Each node that represents a data type has a component TYPE_SIZE
94    containing a tree that is an expression for the size in bits.
95    The TYPE_MODE contains the machine mode for values of this type.
96    The TYPE_POINTER_TO field contains a type for a pointer to this type,
97      or zero if no such has been created yet.
98    The TYPE_NEXT_VARIANT field is used to chain together types
99      that are variants made by type modifiers such as "const" and "volatile".
100    The TYPE_MAIN_VARIANT field, in any member of such a chain,
101      points to the start of the chain.
102    The TYPE_NONCOPIED_PARTS field is a list specifying which parts
103      of an object of this type should *not* be copied by assignment.
104      The TREE_VALUE of each is a FIELD_DECL that should not be
105      copied.  The TREE_PURPOSE is an initial value for that field when
106      an object of this type is initialized via an INIT_EXPR.  It may
107      be NULL if no special value is required.  Even the things in this
108      list are copied if the right-hand side of an assignment is known
109      to be a complete object (rather than being, perhaps, a subobject
110      of some other object.)  The determination of what constitutes a
111      complete object is done by fixed_type_p.
112    The TYPE_NAME field contains info on the name used in the program
113      for this type (for GDB symbol table output).  It is either a
114      TYPE_DECL node, for types that are typedefs, or an IDENTIFIER_NODE
115      in the case of structs, unions or enums that are known with a tag,
116      or zero for types that have no special name.
117    The TYPE_CONTEXT for any sort of type which could have a name or
118     which could have named members (e.g. tagged types in C/C++) will
119     point to the node which represents the scope of the given type, or
120     will be NULL_TREE if the type has "file scope".  For most types, this
121     will point to a BLOCK node or a FUNCTION_DECL node, but it could also
122     point to a FUNCTION_TYPE node (for types whose scope is limited to the
123     formal parameter list of some function type specification) or it
124     could point to a RECORD_TYPE, UNION_TYPE or QUAL_UNION_TYPE node
125     (for C++ "member" types).
126     For non-tagged-types, TYPE_CONTEXT need not be set to anything in
127     particular, since any type which is of some type category  (e.g.
128     an array type or a function type) which cannot either have a name
129     itself or have named members doesn't really have a "scope" per se.
130   The TREE_CHAIN field is used as a forward-references to names for
131     ENUMERAL_TYPE, RECORD_TYPE, UNION_TYPE, and QUAL_UNION_TYPE nodes;
132     see below.  */
133
134 DEFTREECODE (VOID_TYPE, "void_type", 't', 0)    /* The void type in C */
135
136 /* Integer types in all languages, including char in C.
137    Also used for sub-ranges of other discrete types.
138    Has components TYPE_MIN_VALUE, TYPE_MAX_VALUE (expressions, inclusive)
139    and TYPE_PRECISION (number of bits used by this type).
140    In the case of a subrange type in Pascal, the TREE_TYPE
141    of this will point at the supertype (another INTEGER_TYPE,
142    or an ENUMERAL_TYPE, CHAR_TYPE, or BOOLEAN_TYPE).
143    Otherwise, the TREE_TYPE is zero.  */
144 DEFTREECODE (INTEGER_TYPE, "integer_type", 't', 0)
145
146 /* C's float and double.  Different floating types are distinguished
147    by machine mode and by the TYPE_SIZE and the TYPE_PRECISION.  */
148 DEFTREECODE (REAL_TYPE, "real_type", 't', 0)
149
150 /* Complex number types.  The TREE_TYPE field is the data type
151    of the real and imaginary parts.  */
152 DEFTREECODE (COMPLEX_TYPE, "complex_type", 't', 0)
153
154 /* Vector types.  The TREE_TYPE field is the data type of the vector
155    elements.  */
156 DEFTREECODE (VECTOR_TYPE, "vector_type", 't', 0)
157
158 /* C enums.  The type node looks just like an INTEGER_TYPE node.
159    The symbols for the values of the enum type are defined by
160    CONST_DECL nodes, but the type does not point to them;
161    however, the TYPE_VALUES is a list in which each element's TREE_PURPOSE
162    is a name and the TREE_VALUE is the value (an INTEGER_CST node).  */
163 /* A forward reference `enum foo' when no enum named foo is defined yet
164    has zero (a null pointer) in its TYPE_SIZE.  The tag name is in
165    the TYPE_NAME field.  If the type is later defined, the normal
166    fields are filled in.
167    RECORD_TYPE, UNION_TYPE, and QUAL_UNION_TYPE forward refs are
168    treated similarly.  */
169 DEFTREECODE (ENUMERAL_TYPE, "enumeral_type", 't', 0)
170
171 /* Pascal's boolean type (true or false are the only values);
172    no special fields needed.  */
173 DEFTREECODE (BOOLEAN_TYPE, "boolean_type", 't', 0)
174
175 /* CHAR in Pascal; not used in C.
176    No special fields needed.  */
177 DEFTREECODE (CHAR_TYPE, "char_type", 't', 0)
178
179 /* All pointer-to-x types have code POINTER_TYPE.
180    The TREE_TYPE points to the node for the type pointed to.  */
181 DEFTREECODE (POINTER_TYPE, "pointer_type", 't', 0)
182
183 /* An offset is a pointer relative to an object.
184    The TREE_TYPE field is the type of the object at the offset.
185    The TYPE_OFFSET_BASETYPE points to the node for the type of object
186    that the offset is relative to.  */
187 DEFTREECODE (OFFSET_TYPE, "offset_type", 't', 0)
188
189 /* A reference is like a pointer except that it is coerced
190    automatically to the value it points to.  Used in C++.  */
191 DEFTREECODE (REFERENCE_TYPE, "reference_type", 't', 0)
192
193 /* METHOD_TYPE is the type of a function which takes an extra first
194    argument for "self", which is not present in the declared argument list.
195    The TREE_TYPE is the return type of the method.  The TYPE_METHOD_BASETYPE
196    is the type of "self".  TYPE_ARG_TYPES is the real argument list, which
197    includes the hidden argument for "self".  */
198 DEFTREECODE (METHOD_TYPE, "method_type", 't', 0)
199
200 /* Used for Pascal; details not determined right now.  */
201 DEFTREECODE (FILE_TYPE, "file_type", 't', 0)
202
203 /* Types of arrays.  Special fields:
204    TREE_TYPE              Type of an array element.
205    TYPE_DOMAIN            Type to index by.
206                             Its range of values specifies the array length.
207    TYPE_SEP               Expression for units from one elt to the next.
208    TYPE_SEP_UNIT          Number of bits in a unit for previous.
209  The field TYPE_POINTER_TO (TREE_TYPE (array_type)) is always nonzero
210  and holds the type to coerce a value of that array type to in C.
211  TYPE_STRING_FLAG indicates a string (in contrast to an array of chars)
212  in languages (such as Chill) that make a distinction. */
213 /* Array types in C or Pascal */
214 DEFTREECODE (ARRAY_TYPE, "array_type", 't', 0)
215
216 /* Types of sets for Pascal.  Special fields are the same as
217    in an array type.  The target type is always a boolean type.
218    Used for both bitstrings and powersets in Chill;
219    TYPE_STRING_FLAG indicates a bitstring. */
220 DEFTREECODE (SET_TYPE, "set_type", 't', 0)
221
222 /* Struct in C, or record in Pascal.  */
223 /* Special fields:
224    TYPE_FIELDS  chain of FIELD_DECLs for the fields of the struct,
225      and VAR_DECLs, TYPE_DECLs and CONST_DECLs for record-scope variables,
226      types and enumerators.
227    A few may need to be added for Pascal.  */
228 /* See the comment above, before ENUMERAL_TYPE, for how
229    forward references to struct tags are handled in C.  */
230 DEFTREECODE (RECORD_TYPE, "record_type", 't', 0)
231
232 /* Union in C.  Like a struct, except that the offsets of the fields
233    will all be zero.  */
234 /* See the comment above, before ENUMERAL_TYPE, for how
235    forward references to union tags are handled in C.  */
236 DEFTREECODE (UNION_TYPE, "union_type", 't', 0)  /* C union type */
237
238 /* Similar to UNION_TYPE, except that the expressions in DECL_QUALIFIER
239    in each FIELD_DECL determine what the union contains.  The first
240    field whose DECL_QUALIFIER expression is true is deemed to occupy
241    the union.  */
242 DEFTREECODE (QUAL_UNION_TYPE, "qual_union_type", 't', 0)
243
244 /* Type of functions.  Special fields:
245    TREE_TYPE                type of value returned.
246    TYPE_ARG_TYPES      list of types of arguments expected.
247         this list is made of TREE_LIST nodes.
248    Types of "Procedures" in languages where they are different from functions
249    have code FUNCTION_TYPE also, but then TREE_TYPE is zero or void type.  */
250 DEFTREECODE (FUNCTION_TYPE, "function_type", 't', 0)
251
252 /* This is a language-specific kind of type.
253    Its meaning is defined by the language front end.
254    layout_type does not know how to lay this out,
255    so the front-end must do so manually.  */
256 DEFTREECODE (LANG_TYPE, "lang_type", 't', 0)
257 \f
258 /* Expressions */
259
260 /* First, the constants.  */
261
262 /* Contents are in TREE_INT_CST_LOW and TREE_INT_CST_HIGH fields,
263    32 bits each, giving us a 64 bit constant capability.
264    Note: constants of type char in Pascal are INTEGER_CST,
265    and so are pointer constants such as nil in Pascal or NULL in C.
266    `(int *) 1' in C also results in an INTEGER_CST.  */
267 DEFTREECODE (INTEGER_CST, "integer_cst", 'c', 2)
268
269 /* Contents are in TREE_REAL_CST field.  Also there is TREE_CST_RTL.  */
270 DEFTREECODE (REAL_CST, "real_cst", 'c', 3)
271
272 /* Contents are in TREE_REALPART and TREE_IMAGPART fields,
273    whose contents are other constant nodes.
274    Also there is TREE_CST_RTL.  */
275 DEFTREECODE (COMPLEX_CST, "complex_cst", 'c', 3)
276
277 /* Contents are TREE_STRING_LENGTH and TREE_STRING_POINTER fields.
278    Also there is TREE_CST_RTL.  */
279 DEFTREECODE (STRING_CST, "string_cst", 'c', 3)
280
281 /* Declarations.  All references to names are represented as ..._DECL nodes.
282    The decls in one binding context are chained through the TREE_CHAIN field.
283    Each DECL has a DECL_NAME field which contains an IDENTIFIER_NODE.
284     (Some decls, most often labels, may have zero as the DECL_NAME).
285    DECL_CONTEXT points to the node representing the context in which
286     this declaration has its scope.  For FIELD_DECLs, this is the
287     RECORD_TYPE, UNION_TYPE, or QUAL_UNION_TYPE node that the field
288     is a member of.  For VAR_DECL, PARM_DECL, FUNCTION_DECL, LABEL_DECL,
289     and CONST_DECL nodes, this points to either the FUNCTION_DECL for the
290     containing function, the RECORD_TYPE or UNION_TYPE for the containing
291     type, or NULL_TREE if the given decl has "file scope".
292    DECL_ABSTRACT_ORIGIN, if non-NULL, points to the original (abstract)
293     ..._DECL node of which this decl is an (inlined or template expanded)
294     instance.
295    The TREE_TYPE field holds the data type of the object, when relevant.
296     LABEL_DECLs have no data type.  For TYPE_DECL, the TREE_TYPE field
297     contents are the type whose name is being declared.
298    The DECL_ALIGN, DECL_SIZE,
299     and DECL_MODE fields exist in decl nodes just as in type nodes.
300     They are unused in LABEL_DECL, TYPE_DECL and CONST_DECL nodes.
301
302    DECL_OFFSET holds an integer number of bits offset for the location.
303    DECL_VOFFSET holds an expression for a variable offset; it is
304    to be multiplied by DECL_VOFFSET_UNIT (an integer).
305    These fields are relevant only in FIELD_DECLs and PARM_DECLs.
306
307    DECL_INITIAL holds the value to initialize a variable to,
308    or the value of a constant.  For a function, it holds the body
309    (a node of type BLOCK representing the function's binding contour
310    and whose body contains the function's statements.)  For a LABEL_DECL
311    in C, it is a flag, nonzero if the label's definition has been seen.
312
313    PARM_DECLs use a special field:
314    DECL_ARG_TYPE is the type in which the argument is actually
315     passed, which may be different from its type within the function.
316
317    FUNCTION_DECLs use four special fields:
318    DECL_ARGUMENTS holds a chain of PARM_DECL nodes for the arguments.
319    DECL_RESULT holds a RESULT_DECL node for the value of a function,
320     or it is 0 for a function that returns no value.
321     (C functions returning void have zero here.)
322     The TREE_TYPE field is the type in which the result is actually
323     returned.  This is usually the same as the return type of the
324     FUNCTION_DECL, but it may be a wider integer type because of
325     promotion.
326    DECL_FUNCTION_CODE is a code number that is nonzero for
327     built-in functions.  Its value is an enum built_in_function
328     that says which built-in function it is.
329
330    DECL_SOURCE_FILE holds a filename string and DECL_SOURCE_LINE
331    holds a line number.  In some cases these can be the location of
332    a reference, if no definition has been seen.
333
334    DECL_ABSTRACT is non-zero if the decl represents an abstract instance
335    of a decl (i.e. one which is nested within an abstract instance of a
336    inline function.  */
337
338 DEFTREECODE (FUNCTION_DECL, "function_decl", 'd', 0)
339 DEFTREECODE (LABEL_DECL, "label_decl", 'd', 0)
340 DEFTREECODE (CONST_DECL, "const_decl", 'd', 0)
341 DEFTREECODE (TYPE_DECL, "type_decl", 'd', 0)
342 DEFTREECODE (VAR_DECL, "var_decl", 'd', 0)
343 DEFTREECODE (PARM_DECL, "parm_decl", 'd', 0)
344 DEFTREECODE (RESULT_DECL, "result_decl", 'd', 0)
345 DEFTREECODE (FIELD_DECL, "field_decl", 'd', 0)
346
347 /* A namespace declaration.  Namespaces appear in DECL_CONTEXT of other
348    _DECLs, providing a hierarchy of names.  */
349 DEFTREECODE (NAMESPACE_DECL, "namespace_decl", 'd', 0)
350 \f
351 /* References to storage.  */
352
353 /* Value is structure or union component.
354    Operand 0 is the structure or union (an expression);
355    operand 1 is the field (a node of type FIELD_DECL).  */
356 DEFTREECODE (COMPONENT_REF, "component_ref", 'r', 2)
357
358 /* Reference to a group of bits within an object.  Similar to COMPONENT_REF
359    except the position is given explicitly rather than via a FIELD_DECL.
360    Operand 0 is the structure or union expression;
361    operand 1 is a tree giving the number of bits being referenced;
362    operand 2 is a tree giving the position of the first referenced bit.
363    The field can be either a signed or unsigned field;
364    TREE_UNSIGNED says which.  */
365 DEFTREECODE (BIT_FIELD_REF, "bit_field_ref", 'r', 3)
366    
367 /* C unary `*' or Pascal `^'.  One operand, an expression for a pointer.  */
368 DEFTREECODE (INDIRECT_REF, "indirect_ref", 'r', 1)
369
370 /* Pascal `^` on a file.  One operand, an expression for the file.  */
371 DEFTREECODE (BUFFER_REF, "buffer_ref", 'r', 1)
372
373 /* Array indexing.
374    Operand 0 is the array; operand 1 is a (single) array index. */
375 DEFTREECODE (ARRAY_REF, "array_ref", 'r', 2)
376
377 /* Likewise, except that the result is a range ("slice") of the array.  The
378    starting index of the resulting array is taken from operand 1 and the size
379    of the range is taken from the type of the expression.  */
380 DEFTREECODE (ARRAY_RANGE_REF, "array_range_ref", 'r', 2)
381
382 /* Constructor: return an aggregate value made from specified components.
383    In C, this is used only for structure and array initializers.
384    Also used for SET_TYPE in Chill (and potentially Pascal).
385    The first "operand" is really a pointer to the RTL,
386    for constant constructors only.
387    The second operand is a list of component values
388    made out of a chain of TREE_LIST nodes.
389
390    For ARRAY_TYPE:
391    The TREE_PURPOSE of each node is the corresponding index.
392    If the TREE_PURPOSE is a RANGE_EXPR, it is a short-hand for many nodes,
393    one for each index in the range.  (If the corresponding TREE_VALUE
394    has side-effects, they are evaluated once for each element.  Wrap the
395    value in a SAVE_EXPR if you want to evaluate side effects only once.)
396
397    For RECORD_TYPE, UNION_TYPE, or QUAL_UNION_TYPE:
398    The TREE_PURPOSE of each node is a FIELD_DECL.
399
400    For SET_TYPE:
401    The TREE_VALUE specifies a value (index) in the set that is true.
402    If TREE_PURPOSE is non-NULL, it specifies the lower limit of a
403    range of true values.  Elements not listed are false (not in the set).  */
404 DEFTREECODE (CONSTRUCTOR, "constructor", 'e', 2)
405
406 /* The expression types are mostly straightforward, with the fourth argument
407    of DEFTREECODE saying how many operands there are.
408    Unless otherwise specified, the operands are expressions and the
409    types of all the operands and the expression must all be the same.  */
410
411 /* Contains two expressions to compute, one followed by the other.
412    the first value is ignored.  The second one's value is used.  The
413    type of the first expression need not agree with the other types.  */
414 DEFTREECODE (COMPOUND_EXPR, "compound_expr", 'e', 2)
415
416 /* Assignment expression.  Operand 0 is the what to set; 1, the new value.  */
417 DEFTREECODE (MODIFY_EXPR, "modify_expr", 'e', 2)
418
419 /* Initialization expression.  Operand 0 is the variable to initialize;
420    Operand 1 is the initializer.  */
421 DEFTREECODE (INIT_EXPR, "init_expr", 'e', 2)
422
423 /* For TARGET_EXPR, operand 0 is the target of an initialization,
424    operand 1 is the initializer for the target,
425    and operand 2 is the cleanup for this node, if any.
426    and operand 3 is the saved initializer after this node has been
427    expanded once, this is so we can re-expand the tree later.  */
428 DEFTREECODE (TARGET_EXPR, "target_expr", 'e', 4)
429
430 /* Conditional expression ( ... ? ... : ...  in C).
431    Operand 0 is the condition.
432    Operand 1 is the then-value.
433    Operand 2 is the else-value.
434    Operand 0 may be of any type.
435    Operand 1 must have the same type as the entire expression, unless
436    it unconditionally throws an exception, in which case it should
437    have VOID_TYPE.  The same constraints apply to operand 2.  */
438 DEFTREECODE (COND_EXPR, "cond_expr", 'e', 3)
439
440 /* Declare local variables, including making RTL and allocating space.
441    Operand 0 is a chain of VAR_DECL nodes for the variables.
442    Operand 1 is the body, the expression to be computed using 
443    the variables.  The value of operand 1 becomes that of the BIND_EXPR.
444    Operand 2 is the BLOCK that corresponds to these bindings
445    for debugging purposes.  If this BIND_EXPR is actually expanded,
446    that sets the TREE_USED flag in the BLOCK.
447
448    The BIND_EXPR is not responsible for informing parsers
449    about these variables.  If the body is coming from the input file,
450    then the code that creates the BIND_EXPR is also responsible for 
451    informing the parser of the variables.
452
453    If the BIND_EXPR is ever expanded, its TREE_USED flag is set.
454    This tells the code for debugging symbol tables not to ignore the BIND_EXPR.
455    If the BIND_EXPR should be output for debugging but will not be expanded, 
456    set the TREE_USED flag by hand.
457
458    In order for the BIND_EXPR to be known at all, the code that creates it
459    must also install it as a subblock in the tree of BLOCK
460    nodes for the function.  */
461 DEFTREECODE (BIND_EXPR, "bind_expr", 'e', 3)
462
463 /* Function call.  Operand 0 is the function.
464    Operand 1 is the argument list, a list of expressions
465    made out of a chain of TREE_LIST nodes.  */
466 DEFTREECODE (CALL_EXPR, "call_expr", 'e', 2)
467
468 /* Call a method.  Operand 0 is the method, whose type is a METHOD_TYPE.
469    Operand 1 is the expression for "self".
470    Operand 2 is the list of explicit arguments.  */
471 DEFTREECODE (METHOD_CALL_EXPR, "method_call_expr", 'e', 4)
472
473 /* Specify a value to compute along with its corresponding cleanup.
474    Operand 0 argument is an expression whose value needs a cleanup.
475    Operand 1 is the cleanup expression for the object.
476    Operand 2 is an RTL_EXPR which will eventually represent that value.
477      The RTL_EXPR is used in this expression, which is how the expression
478      manages to act on the proper value.
479    The cleanup is executed by the first enclosing CLEANUP_POINT_EXPR, if
480    it exists, otherwise it is the responsibility of the caller to manually
481    call expand_start_target_temps/expand_end_target_temps, as needed.
482
483    This differs from TRY_CATCH_EXPR in that operand 2 is always
484    evaluated when an exception isn't thrown when cleanups are run.  */
485 DEFTREECODE (WITH_CLEANUP_EXPR, "with_cleanup_expr", 'e', 3)
486
487 /* Specify a cleanup point.
488    Operand 0 is an expression that may have cleanups.  If it does, those
489    cleanups are executed after the expression is expanded.
490
491    Note that if the expression is a reference to storage, it is forced out
492    of memory before the cleanups are run.  This is necessary to handle
493    cases where the cleanups modify the storage referenced; in the
494    expression 't.i', if 't' is a struct with an integer member 'i' and a
495    cleanup which modifies 'i', the value of the expression depends on
496    whether the cleanup is run before or after 't.i' is evaluated.  When
497    expand_expr is run on 't.i', it returns a MEM.  This is not good enough;
498    the value of 't.i' must be forced out of memory.
499
500    As a consequence, the operand of a CLEANUP_POINT_EXPR must not have
501    BLKmode, because it will not be forced out of memory.  */
502 DEFTREECODE (CLEANUP_POINT_EXPR, "cleanup_point_expr", 'e', 1)
503
504 /* The following two codes are used in languages that have types where
505    some field in an object of the type contains a value that is used in
506    the computation of another field's offset or size and/or the size of
507    the type.  The positions and/or sizes of fields can vary from object
508    to object of the same type.
509
510    Record types with discriminants in Ada or schema types in Pascal are
511    examples of such types.  This mechanism is also used to create "fat
512    pointers" for unconstrained array types in Ada; the fat pointer is a
513    structure one of whose fields is a pointer to the actual array type
514    and the other field is a pointer to a template, which is a structure
515    containing the bounds of the array.  The bounds in the type pointed
516    to by the first field in the fat pointer refer to the values in the
517    template.
518
519    When you wish to construct such a type you need "self-references"
520    that allow you to reference the object having this type from the
521    TYPE node, i.e. without having a variable instantiating this type.
522
523    Such a "self-references" is done using a PLACEHOLDER_EXPR.  This is
524    a node that will later be replaced with the object being referenced.
525    Its type is that of the object and selects which object to use from
526    a chain of references (see below).  No other slots are used in the
527    PLACEHOLDER_EXPR.
528
529    For example, if your type FOO is a RECORD_TYPE with a field BAR,
530    and you need the value of <variable>.BAR to calculate TYPE_SIZE
531    (FOO), just substitute <variable> above with a PLACEHOLDER_EXPR
532    what contains both the expression we wish to
533    evaluate and an expression within which the object may be found.
534    The latter expression is the object itself in the simple case of an
535    Ada record with discriminant, but it can be the array in the case of
536    an unconstrained array.
537
538    In the latter case, we need the fat pointer, because the bounds of
539    the array can only be accessed from it.  However, we rely here on the
540    fact that the expression for the array contains the dereference of
541    the fat pointer that obtained the array pointer.
542
543    Accordingly, when looking for the object to substitute in place of
544    a PLACEHOLDER_EXPR, we look down the first operand of the expression
545    passed as the second operand to WITH_RECORD_EXPR until we find
546    something of the desired type or reach a constant.  */
547
548 /* Denotes a record to later be supplied with a WITH_RECORD_EXPR when
549    evaluating this expression.  The type of this expression is used to
550    find the record to replace it.  */
551 DEFTREECODE (PLACEHOLDER_EXPR, "placeholder_expr", 'x', 0)
552
553 /* Provide an expression that references a record to be used in place
554    of a PLACEHOLDER_EXPR.  The record to be used is the record within
555    operand 1 that has the same type as the PLACEHOLDER_EXPR in
556    operand 0.  */
557 DEFTREECODE (WITH_RECORD_EXPR, "with_record_expr", 'e', 2)
558
559 /* Simple arithmetic.  */
560 DEFTREECODE (PLUS_EXPR, "plus_expr", '2', 2)
561 DEFTREECODE (MINUS_EXPR, "minus_expr", '2', 2)
562 DEFTREECODE (MULT_EXPR, "mult_expr", '2', 2)
563
564 /* Division for integer result that rounds the quotient toward zero.  */
565 DEFTREECODE (TRUNC_DIV_EXPR, "trunc_div_expr", '2', 2)
566
567 /* Division for integer result that rounds the quotient toward infinity.  */
568 DEFTREECODE (CEIL_DIV_EXPR, "ceil_div_expr", '2', 2)
569
570 /* Division for integer result that rounds toward minus infinity.  */
571 DEFTREECODE (FLOOR_DIV_EXPR, "floor_div_expr", '2', 2)
572
573 /* Division for integer result that rounds toward nearest integer.  */
574 DEFTREECODE (ROUND_DIV_EXPR, "round_div_expr", '2', 2)
575
576 /* Four kinds of remainder that go with the four kinds of division.  */
577 DEFTREECODE (TRUNC_MOD_EXPR, "trunc_mod_expr", '2', 2)
578 DEFTREECODE (CEIL_MOD_EXPR, "ceil_mod_expr", '2', 2)
579 DEFTREECODE (FLOOR_MOD_EXPR, "floor_mod_expr", '2', 2)
580 DEFTREECODE (ROUND_MOD_EXPR, "round_mod_expr", '2', 2)
581
582 /* Division for real result.  */
583 DEFTREECODE (RDIV_EXPR, "rdiv_expr", '2', 2)
584
585 /* Division which is not supposed to need rounding.
586    Used for pointer subtraction in C.  */
587 DEFTREECODE (EXACT_DIV_EXPR, "exact_div_expr", '2', 2)
588
589 /* Conversion of real to fixed point: four ways to round,
590    like the four ways to divide.
591    CONVERT_EXPR can also be used to convert a real to an integer,
592    and that is what is used in languages that do not have ways of
593    specifying which of these is wanted.  Maybe these are not needed.  */
594 DEFTREECODE (FIX_TRUNC_EXPR, "fix_trunc_expr", '1', 1)
595 DEFTREECODE (FIX_CEIL_EXPR, "fix_ceil_expr", '1', 1)
596 DEFTREECODE (FIX_FLOOR_EXPR, "fix_floor_expr", '1', 1)
597 DEFTREECODE (FIX_ROUND_EXPR, "fix_round_expr", '1', 1)
598
599 /* Conversion of an integer to a real.  */
600 DEFTREECODE (FLOAT_EXPR, "float_expr", '1', 1)
601
602 /* Unary negation.  */
603 DEFTREECODE (NEGATE_EXPR, "negate_expr", '1', 1)
604
605 DEFTREECODE (MIN_EXPR, "min_expr", '2', 2)
606 DEFTREECODE (MAX_EXPR, "max_expr", '2', 2)
607
608 /* Represents the absolute value of the operand.
609
610    An ABS_EXPR must have either an INTEGER_TYPE or a REAL_TYPE.  The
611    operand of the ABS_EXPR must have the same type.  */
612 DEFTREECODE (ABS_EXPR, "abs_expr", '1', 1)
613
614 DEFTREECODE (FFS_EXPR, "ffs_expr", '1', 1)
615
616 /* Shift operations for shift and rotate.
617    Shift means logical shift if done on an
618    unsigned type, arithmetic shift if done on a signed type.
619    The second operand is the number of bits to
620    shift by; it need not be the same type as the first operand and result.
621    Note that the result is undefined if the second operand is larger
622    than the first operand's type size.  */
623 DEFTREECODE (LSHIFT_EXPR, "lshift_expr", '2', 2)
624 DEFTREECODE (RSHIFT_EXPR, "rshift_expr", '2', 2)
625 DEFTREECODE (LROTATE_EXPR, "lrotate_expr", '2', 2)
626 DEFTREECODE (RROTATE_EXPR, "rrotate_expr", '2', 2)
627
628 /* Bitwise operations.  Operands have same mode as result.  */
629 DEFTREECODE (BIT_IOR_EXPR, "bit_ior_expr", '2', 2)
630 DEFTREECODE (BIT_XOR_EXPR, "bit_xor_expr", '2', 2)
631 DEFTREECODE (BIT_AND_EXPR, "bit_and_expr", '2', 2)
632 DEFTREECODE (BIT_ANDTC_EXPR, "bit_andtc_expr", '2', 2)
633 DEFTREECODE (BIT_NOT_EXPR, "bit_not_expr", '1', 1)
634
635 /* ANDIF and ORIF allow the second operand not to be computed if the
636    value of the expression is determined from the first operand.  AND,
637    OR, and XOR always compute the second operand whether its value is
638    needed or not (for side effects).  The operand may have
639    BOOLEAN_TYPE or INTEGER_TYPE.  In either case, the argument will be
640    either zero or one.  For example, a TRUTH_NOT_EXPR will never have
641    a INTEGER_TYPE VAR_DECL as its argument; instead, a NE_EXPR will be
642    used to compare the VAR_DECL to zero, thereby obtaining a node with
643    value zero or one.  */
644 DEFTREECODE (TRUTH_ANDIF_EXPR, "truth_andif_expr", 'e', 2)
645 DEFTREECODE (TRUTH_ORIF_EXPR, "truth_orif_expr", 'e', 2)
646 DEFTREECODE (TRUTH_AND_EXPR, "truth_and_expr", 'e', 2)
647 DEFTREECODE (TRUTH_OR_EXPR, "truth_or_expr", 'e', 2)
648 DEFTREECODE (TRUTH_XOR_EXPR, "truth_xor_expr", 'e', 2)
649 DEFTREECODE (TRUTH_NOT_EXPR, "truth_not_expr", 'e', 1)
650
651 /* Relational operators.
652    `EQ_EXPR' and `NE_EXPR' are allowed for any types.
653    The others are allowed only for integer (or pointer or enumeral)
654    or real types.
655    In all cases the operands will have the same type,
656    and the value is always the type used by the language for booleans.  */
657 DEFTREECODE (LT_EXPR, "lt_expr", '<', 2)
658 DEFTREECODE (LE_EXPR, "le_expr", '<', 2)
659 DEFTREECODE (GT_EXPR, "gt_expr", '<', 2)
660 DEFTREECODE (GE_EXPR, "ge_expr", '<', 2)
661 DEFTREECODE (EQ_EXPR, "eq_expr", '<', 2)
662 DEFTREECODE (NE_EXPR, "ne_expr", '<', 2)
663
664 /* Additional relational operators for floating point unordered.  */
665 DEFTREECODE (UNORDERED_EXPR, "unordered_expr", '<', 2)
666 DEFTREECODE (ORDERED_EXPR, "ordered_expr", '<', 2)
667
668 /* These are equivalent to unordered or ... */
669 DEFTREECODE (UNLT_EXPR, "unlt_expr", '<', 2)
670 DEFTREECODE (UNLE_EXPR, "unle_expr", '<', 2)
671 DEFTREECODE (UNGT_EXPR, "ungt_expr", '<', 2)
672 DEFTREECODE (UNGE_EXPR, "unge_expr", '<', 2)
673 DEFTREECODE (UNEQ_EXPR, "uneq_expr", '<', 2)
674
675 /* Operations for Pascal sets.  Not used now.  */
676 DEFTREECODE (IN_EXPR, "in_expr", '2', 2)
677 DEFTREECODE (SET_LE_EXPR, "set_le_expr", '<', 2)
678 DEFTREECODE (CARD_EXPR, "card_expr", '1', 1)
679 DEFTREECODE (RANGE_EXPR, "range_expr", '2', 2)
680
681 /* Represents a conversion of type of a value.
682    All conversions, including implicit ones, must be
683    represented by CONVERT_EXPR or NOP_EXPR nodes.  */
684 DEFTREECODE (CONVERT_EXPR, "convert_expr", '1', 1)
685
686 /* Represents a conversion expected to require no code to be generated.  */
687 DEFTREECODE (NOP_EXPR, "nop_expr", '1', 1)
688
689 /* Value is same as argument, but guaranteed not an lvalue.  */
690 DEFTREECODE (NON_LVALUE_EXPR, "non_lvalue_expr", '1', 1)
691
692 /* Represents something we computed once and will use multiple times.
693    First operand is that expression.  Second is the function decl
694    in which the SAVE_EXPR was created.  The third operand is the RTL,
695    nonzero only after the expression has been computed.  */
696 DEFTREECODE (SAVE_EXPR, "save_expr", 'e', 3)
697
698 /* For a UNSAVE_EXPR, operand 0 is the value to unsave.  By unsave, we
699    mean that all _EXPRs such as TARGET_EXPRs, SAVE_EXPRs,
700    CALL_EXPRs and RTL_EXPRs, that are protected
701    from being evaluated more than once should be reset so that a new
702    expand_expr call of this expr will cause those to be re-evaluated.
703    This is useful when we want to reuse a tree in different places,
704    but where we must re-expand.  */
705 DEFTREECODE (UNSAVE_EXPR, "unsave_expr", 'e', 1)
706
707 /* Represents something whose RTL has already been expanded as a
708    sequence which should be emitted when this expression is expanded.
709    The first operand is the RTL to emit.  It is the first of a chain
710    of insns.  The second is the RTL expression for the result.  Any
711    temporaries created during the building of the RTL_EXPR can be
712    reused once the RTL_EXPR has been expanded, with the exception of
713    the RTL_EXPR_RTL.  */
714 DEFTREECODE (RTL_EXPR, "rtl_expr", 'e', 2)
715
716 /* & in C.  Value is the address at which the operand's value resides.
717    Operand may have any mode.  Result mode is Pmode.  */
718 DEFTREECODE (ADDR_EXPR, "addr_expr", 'e', 1)
719
720 /* Non-lvalue reference or pointer to an object.  */
721 DEFTREECODE (REFERENCE_EXPR, "reference_expr", 'e', 1)
722
723 /* Operand is a function constant; result is a function variable value
724    of typeEPmode.  Used only for languages that need static chains.  */
725 DEFTREECODE (ENTRY_VALUE_EXPR, "entry_value_expr", 'e', 1)
726
727 /* Given two real or integer operands of the same type,
728    returns a complex value of the corresponding complex type.  */
729 DEFTREECODE (COMPLEX_EXPR, "complex_expr", '2', 2)
730
731 /* Complex conjugate of operand.  Used only on complex types.  */
732 DEFTREECODE (CONJ_EXPR, "conj_expr", '1', 1)
733
734 /* Used only on an operand of complex type, these return
735    a value of the corresponding component type.  */
736 DEFTREECODE (REALPART_EXPR, "realpart_expr", '1', 1)
737 DEFTREECODE (IMAGPART_EXPR, "imagpart_expr", '1', 1)
738
739 /* Nodes for ++ and -- in C.
740    The second arg is how much to increment or decrement by.
741    For a pointer, it would be the size of the object pointed to.  */
742 DEFTREECODE (PREDECREMENT_EXPR, "predecrement_expr", 'e', 2)
743 DEFTREECODE (PREINCREMENT_EXPR, "preincrement_expr", 'e', 2)
744 DEFTREECODE (POSTDECREMENT_EXPR, "postdecrement_expr", 'e', 2)
745 DEFTREECODE (POSTINCREMENT_EXPR, "postincrement_expr", 'e', 2)
746
747 /* Used to implement `va_arg'.  */
748 DEFTREECODE (VA_ARG_EXPR, "va_arg_expr", 'e', 1)
749
750 /* Evaluate operand 1.  If and only if an exception is thrown during
751    the evaluation of operand 1, evaluate operand 2.
752
753    This differs from WITH_CLEANUP_EXPR, in that operand 2 is never
754    evaluated unless an exception is throw.  */
755 DEFTREECODE (TRY_CATCH_EXPR, "try_catch_expr", 'e', 2)
756
757 /* Evaluate the first operand.
758    The second operand is a a cleanup expression which is evaluated
759    before an exit (normal, exception, or jump out) from this expression.
760
761    Like a CLEANUP_POINT_EXPR/WITH_CLEANUP_EXPR combination, but those
762    always copy the cleanup expression where needed.  In contrast,
763    TRY_FINALLY_EXPR generates a jump to a cleanup subroutine.
764    (At least conceptually; the optimizer could inline the cleanup
765    subroutine in the same way it could inline normal subroutines.)
766    TRY_FINALLY_EXPR should be used when the cleanup is actual statements
767    in the source of the current function (which people might want to
768    set breakpoints in).  */
769 DEFTREECODE (TRY_FINALLY_EXPR, "try_finally", 'e', 2)
770
771 /* Used internally for cleanups in the implementation of TRY_FINALLY_EXPR.
772    (Specifically, it is created by expand_expr, not front-ends.)
773    Operand 0 is the rtx for the start of the subroutine we need to call.
774    Operand 1 is the rtx for a variable in which to store the address
775    of where the subroutine should return to.  */
776 DEFTREECODE (GOTO_SUBROUTINE_EXPR, "goto_subroutine", 'e', 2)
777 \f
778 /* These types of expressions have no useful value,
779    and always have side effects.  */
780
781 /* A label definition, encapsulated as a statement.
782    Operand 0 is the LABEL_DECL node for the label that appears here.
783    The type should be void and the value should be ignored.  */
784 DEFTREECODE (LABEL_EXPR, "label_expr", 's', 1)
785
786 /* GOTO.  Operand 0 is a LABEL_DECL node or an expression.
787    The type should be void and the value should be ignored.  */
788 DEFTREECODE (GOTO_EXPR, "goto_expr", 's', 1)
789
790 /* RETURN.  Evaluates operand 0, then returns from the current function.
791    Presumably that operand is an assignment that stores into the
792    RESULT_DECL that hold the value to be returned.
793    The operand may be null.
794    The type should be void and the value should be ignored.  */
795 DEFTREECODE (RETURN_EXPR, "return_expr", 's', 1)
796
797 /* Exit the inner most loop conditionally.  Operand 0 is the condition.
798    The type should be void and the value should be ignored.  */
799 DEFTREECODE (EXIT_EXPR, "exit_expr", 's', 1)
800
801 /* A loop.  Operand 0 is the body of the loop.
802    It must contain an EXIT_EXPR or is an infinite loop.
803    The type should be void and the value should be ignored.  */
804 DEFTREECODE (LOOP_EXPR, "loop_expr", 's', 1)
805
806 /* A labeled block. Operand 0 is the label that will be generated to
807    mark the end of the block.
808    Operand 1 is the labeled block body.  */
809 DEFTREECODE (LABELED_BLOCK_EXPR, "labeled_block_expr", 'e', 2)
810
811 /* Exit a labeled block, possibly returning a value.  Operand 0 is a
812    LABELED_BLOCK_EXPR to exit.  Operand 1 is the value to return. It
813    may be left null.  */
814 DEFTREECODE (EXIT_BLOCK_EXPR, "exit_block_expr", 'e', 2)
815
816 /* Annotates a tree node (usually an expression) with source location
817    information: a file name (EXPR_WFL_FILENAME);  a line number
818    (EXPR_WFL_LINENO); and column number (EXPR_WFL_COLNO).  It is
819    expanded as the contained node (EXPR_WFL_NODE);  a line note should
820    be emitted first if EXPR_WFL_EMIT_LINE_NOTE.  
821    The third operand is only used in the Java front-end, and will
822    eventually be removed.  */
823 DEFTREECODE (EXPR_WITH_FILE_LOCATION, "expr_with_file_location", 'e', 3)
824
825 /* Switch expression.
826    Operand 0 is the expression used to perform the branch,
827    Operand 1 contains the case values. The way they're organized is
828    front-end implementation defined. */
829 DEFTREECODE (SWITCH_EXPR, "switch_expr", 'e', 2)
830
831 /* The exception object from the runtime.  */
832 DEFTREECODE (EXC_PTR_EXPR, "exc_ptr_expr", 'e', 0)
833
834 /*
835 Local variables:
836 mode:c
837 End:
838 */