OpenCores
URL https://opencores.org/ocsvn/scarts/scarts/trunk

Subversion Repositories scarts

[/] [scarts/] [trunk/] [toolchain/] [scarts-gcc/] [gcc-4.1.1/] [gcc/] [tree.def] - Blame information for rev 20

Go to most recent revision | Details | Compare with Previous | View Log

Line No. Rev Author Line
1 12 jlechner
/* This file contains the definitions and documentation for the
2
   tree codes used in GCC.
3
   Copyright (C) 1987, 1988, 1993, 1995, 1997, 1998, 2000, 2001, 2004, 2005
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, 51 Franklin Street, Fifth Floor, Boston, MA
21
02110-1301, USA.  */
22
 
23
 
24
/* For tcc_references, tcc_expression, tcc_comparison, tcc_unary,
25
   tcc_binary, and tcc_statement nodes, which use struct tree_exp, the
26
   4th element is the number of argument slots to allocate.  This
27
   determines the size of the tree node object.  Other nodes use
28
   different structures, and the size is determined by the tree_union
29
   member structure; the 4th element should be zero.  Languages that
30
   define language-specific tcc_exceptional or tcc_constant codes must
31
   define the tree_size langhook to say how big they are.
32
 
33
   These tree codes have been sorted so that the macros in tree.h that
34
   check for various tree codes are optimized into range checks.  This
35
   gives a measurable performance improvement.  When adding a new
36
   code, consider its placement in relation to the other codes.  */
37
 
38
/* Any erroneous construct is parsed into a node of this type.
39
   This type of node is accepted without complaint in all contexts
40
   by later parsing activities, to avoid multiple error messages
41
   for one error.
42
   No fields in these nodes are used except the TREE_CODE.  */
43
DEFTREECODE (ERROR_MARK, "error_mark", tcc_exceptional, 0)
44
 
45
/* Used to represent a name (such as, in the DECL_NAME of a decl node).
46
   Internally it looks like a STRING_CST node.
47
   There is only one IDENTIFIER_NODE ever made for any particular name.
48
   Use `get_identifier' to get it (or create it, the first time).  */
49
DEFTREECODE (IDENTIFIER_NODE, "identifier_node", tcc_exceptional, 0)
50
 
51
/* Has the TREE_VALUE and TREE_PURPOSE fields.  */
52
/* These nodes are made into lists by chaining through the
53
   TREE_CHAIN field.  The elements of the list live in the
54
   TREE_VALUE fields, while TREE_PURPOSE fields are occasionally
55
   used as well to get the effect of Lisp association lists.  */
56
DEFTREECODE (TREE_LIST, "tree_list", tcc_exceptional, 0)
57
 
58
/* These nodes contain an array of tree nodes.  */
59
DEFTREECODE (TREE_VEC, "tree_vec", tcc_exceptional, 0)
60
 
61
/* A symbol binding block.  These are arranged in a tree,
62
   where the BLOCK_SUBBLOCKS field contains a chain of subblocks
63
   chained through the BLOCK_CHAIN field.
64
   BLOCK_SUPERCONTEXT points to the parent block.
65
     For a block which represents the outermost scope of a function, it
66
     points to the FUNCTION_DECL node.
67
   BLOCK_VARS points to a chain of decl nodes.
68
   BLOCK_TYPE_TAGS points to a chain of types which have their own names.
69
   BLOCK_CHAIN points to the next BLOCK at the same level.
70
   BLOCK_ABSTRACT_ORIGIN points to the original (abstract) tree node which
71
   this block is an instance of, or else is NULL to indicate that this
72
   block is not an instance of anything else.  When non-NULL, the value
73
   could either point to another BLOCK node or it could point to a
74
   FUNCTION_DECL node (e.g. in the case of a block representing the
75
   outermost scope of a particular inlining of a function).
76
   BLOCK_ABSTRACT is nonzero if the block represents an abstract
77
   instance of a block (i.e. one which is nested within an abstract
78
   instance of an inline function).
79
   TREE_ASM_WRITTEN is nonzero if the block was actually referenced
80
   in the generated assembly.  */
81
DEFTREECODE (BLOCK, "block", tcc_exceptional, 0)
82
 
83
/* Each data type is represented by a tree node whose code is one of
84
   the following:  */
85
/* Each node that represents a data type has a component TYPE_SIZE
86
   containing a tree that is an expression for the size in bits.
87
   The TYPE_MODE contains the machine mode for values of this type.
88
   The TYPE_POINTER_TO field contains a type for a pointer to this type,
89
     or zero if no such has been created yet.
90
   The TYPE_NEXT_VARIANT field is used to chain together types
91
     that are variants made by type modifiers such as "const" and "volatile".
92
   The TYPE_MAIN_VARIANT field, in any member of such a chain,
93
     points to the start of the chain.
94
   The TYPE_NONCOPIED_PARTS field is a list specifying which parts
95
     of an object of this type should *not* be copied by assignment.
96
     The TREE_VALUE of each is a FIELD_DECL that should not be
97
     copied.  The TREE_PURPOSE is an initial value for that field when
98
     an object of this type is initialized via an INIT_EXPR.  It may
99
     be NULL if no special value is required.  Even the things in this
100
     list are copied if the right-hand side of an assignment is known
101
     to be a complete object (rather than being, perhaps, a subobject
102
     of some other object.)  The determination of what constitutes a
103
     complete object is done by fixed_type_p.
104
   The TYPE_NAME field contains info on the name used in the program
105
     for this type (for GDB symbol table output).  It is either a
106
     TYPE_DECL node, for types that are typedefs, or an IDENTIFIER_NODE
107
     in the case of structs, unions or enums that are known with a tag,
108
     or zero for types that have no special name.
109
   The TYPE_CONTEXT for any sort of type which could have a name or
110
    which could have named members (e.g. tagged types in C/C++) will
111
    point to the node which represents the scope of the given type, or
112
    will be NULL_TREE if the type has "file scope".  For most types, this
113
    will point to a BLOCK node or a FUNCTION_DECL node, but it could also
114
    point to a FUNCTION_TYPE node (for types whose scope is limited to the
115
    formal parameter list of some function type specification) or it
116
    could point to a RECORD_TYPE, UNION_TYPE or QUAL_UNION_TYPE node
117
    (for C++ "member" types).
118
    For non-tagged-types, TYPE_CONTEXT need not be set to anything in
119
    particular, since any type which is of some type category  (e.g.
120
    an array type or a function type) which cannot either have a name
121
    itself or have named members doesn't really have a "scope" per se.
122
  The TREE_CHAIN field is used as a forward-references to names for
123
    ENUMERAL_TYPE, RECORD_TYPE, UNION_TYPE, and QUAL_UNION_TYPE nodes;
124
    see below.  */
125
 
126
/* The ordering of the following codes is optimized for the checking
127
   macros in tree.h.  Changing the order will degrade the speed of the
128
   compiler.  OFFSET_TYPE, ENUMERAL_TYPE, BOOLEAN_TYPE, CHAR_TYPE,
129
   INTEGER_TYPE, REAL_TYPE, POINTER_TYPE.  */
130
 
131
/* An offset is a pointer relative to an object.
132
   The TREE_TYPE field is the type of the object at the offset.
133
   The TYPE_OFFSET_BASETYPE points to the node for the type of object
134
   that the offset is relative to.  */
135
DEFTREECODE (OFFSET_TYPE, "offset_type", tcc_type, 0)
136
 
137
/* C enums.  The type node looks just like an INTEGER_TYPE node.
138
   The symbols for the values of the enum type are defined by
139
   CONST_DECL nodes, but the type does not point to them;
140
   however, the TYPE_VALUES is a list in which each element's TREE_PURPOSE
141
   is a name and the TREE_VALUE is the value (an INTEGER_CST node).  */
142
/* A forward reference `enum foo' when no enum named foo is defined yet
143
   has zero (a null pointer) in its TYPE_SIZE.  The tag name is in
144
   the TYPE_NAME field.  If the type is later defined, the normal
145
   fields are filled in.
146
   RECORD_TYPE, UNION_TYPE, and QUAL_UNION_TYPE forward refs are
147
   treated similarly.  */
148
DEFTREECODE (ENUMERAL_TYPE, "enumeral_type", tcc_type, 0)
149
 
150
/* Boolean type (true or false are the only values).  Looks like an
151
   INTEGRAL_TYPE.  */
152
DEFTREECODE (BOOLEAN_TYPE, "boolean_type", tcc_type, 0)
153
 
154
/* CHAR in Java; not used in C.  Looks like an INTEGRAL_TYPE.  */
155
DEFTREECODE (CHAR_TYPE, "char_type", tcc_type, 0)
156
 
157
/* Integer types in all languages, including char in C.
158
   Also used for sub-ranges of other discrete types.
159
   Has components TYPE_MIN_VALUE, TYPE_MAX_VALUE (expressions, inclusive)
160
   and TYPE_PRECISION (number of bits used by this type).
161
   In the case of a subrange type in Pascal, the TREE_TYPE
162
   of this will point at the supertype (another INTEGER_TYPE,
163
   or an ENUMERAL_TYPE, CHAR_TYPE, or BOOLEAN_TYPE).
164
   Otherwise, the TREE_TYPE is zero.  */
165
DEFTREECODE (INTEGER_TYPE, "integer_type", tcc_type, 0)
166
 
167
/* C's float and double.  Different floating types are distinguished
168
   by machine mode and by the TYPE_SIZE and the TYPE_PRECISION.  */
169
DEFTREECODE (REAL_TYPE, "real_type", tcc_type, 0)
170
 
171
/* The ordering of the following codes is optimized for the checking
172
   macros in tree.h.  Changing the order will degrade the speed of the
173
   compiler.  POINTER_TYPE, REFERENCE_TYPE.  Note that this range
174
   overlaps the previous range of ordered types.  */
175
 
176
/* All pointer-to-x types have code POINTER_TYPE.
177
   The TREE_TYPE points to the node for the type pointed to.  */
178
DEFTREECODE (POINTER_TYPE, "pointer_type", tcc_type, 0)
179
 
180
/* A reference is like a pointer except that it is coerced
181
   automatically to the value it points to.  Used in C++.  */
182
DEFTREECODE (REFERENCE_TYPE, "reference_type", tcc_type, 0)
183
 
184
/* The ordering of the following codes is optimized for the checking
185
   macros in tree.h.  Changing the order will degrade the speed of the
186
   compiler.  COMPLEX_TYPE, VECTOR_TYPE, ARRAY_TYPE.  */
187
 
188
/* Complex number types.  The TREE_TYPE field is the data type
189
   of the real and imaginary parts.  */
190
DEFTREECODE (COMPLEX_TYPE, "complex_type", tcc_type, 0)
191
 
192
/* Vector types.  The TREE_TYPE field is the data type of the vector
193
   elements.  The TYPE_PRECISION field is the number of subparts of
194
   the vector.  */
195
DEFTREECODE (VECTOR_TYPE, "vector_type", tcc_type, 0)
196
 
197
/* The ordering of the following codes is optimized for the checking
198
   macros in tree.h.  Changing the order will degrade the speed of the
199
   compiler.  ARRAY_TYPE, RECORD_TYPE, UNION_TYPE, QUAL_UNION_TYPE.
200
   Note that this range overlaps the previous range.  */
201
 
202
/* Types of arrays.  Special fields:
203
   TREE_TYPE              Type of an array element.
204
   TYPE_DOMAIN            Type to index by.
205
                            Its range of values specifies the array length.
206
 The field TYPE_POINTER_TO (TREE_TYPE (array_type)) is always nonzero
207
 and holds the type to coerce a value of that array type to in C.
208
 TYPE_STRING_FLAG indicates a string (in contrast to an array of chars)
209
 in languages (such as Chill) that make a distinction.  */
210
/* Array types in C or Pascal */
211
DEFTREECODE (ARRAY_TYPE, "array_type", tcc_type, 0)
212
 
213
/* Struct in C, or record in Pascal.  */
214
/* Special fields:
215
   TYPE_FIELDS  chain of FIELD_DECLs for the fields of the struct,
216
     and VAR_DECLs, TYPE_DECLs and CONST_DECLs for record-scope variables,
217
     types and enumerators.
218
   A few may need to be added for Pascal.  */
219
/* See the comment above, before ENUMERAL_TYPE, for how
220
   forward references to struct tags are handled in C.  */
221
DEFTREECODE (RECORD_TYPE, "record_type", tcc_type, 0)
222
 
223
/* Union in C.  Like a struct, except that the offsets of the fields
224
   will all be zero.  */
225
/* See the comment above, before ENUMERAL_TYPE, for how
226
   forward references to union tags are handled in C.  */
227
DEFTREECODE (UNION_TYPE, "union_type", tcc_type, 0)     /* C union type */
228
 
229
/* Similar to UNION_TYPE, except that the expressions in DECL_QUALIFIER
230
   in each FIELD_DECL determine what the union contains.  The first
231
   field whose DECL_QUALIFIER expression is true is deemed to occupy
232
   the union.  */
233
DEFTREECODE (QUAL_UNION_TYPE, "qual_union_type", tcc_type, 0)
234
 
235
/* The ordering of the following codes is optimized for the checking
236
   macros in tree.h.  Changing the order will degrade the speed of the
237
   compiler.  VOID_TYPE, FUNCTION_TYPE, METHOD_TYPE.  */
238
 
239
/* The void type in C */
240
DEFTREECODE (VOID_TYPE, "void_type", tcc_type, 0)
241
 
242
/* Type of functions.  Special fields:
243
   TREE_TYPE                type of value returned.
244
   TYPE_ARG_TYPES      list of types of arguments expected.
245
        this list is made of TREE_LIST nodes.
246
   Types of "Procedures" in languages where they are different from functions
247
   have code FUNCTION_TYPE also, but then TREE_TYPE is zero or void type.  */
248
DEFTREECODE (FUNCTION_TYPE, "function_type", tcc_type, 0)
249
 
250
/* METHOD_TYPE is the type of a function which takes an extra first
251
   argument for "self", which is not present in the declared argument list.
252
   The TREE_TYPE is the return type of the method.  The TYPE_METHOD_BASETYPE
253
   is the type of "self".  TYPE_ARG_TYPES is the real argument list, which
254
   includes the hidden argument for "self".  */
255
DEFTREECODE (METHOD_TYPE, "method_type", tcc_type, 0)
256
 
257
/* This is a language-specific kind of type.
258
   Its meaning is defined by the language front end.
259
   layout_type does not know how to lay this out,
260
   so the front-end must do so manually.  */
261
DEFTREECODE (LANG_TYPE, "lang_type", tcc_type, 0)
262
 
263
/* Expressions */
264
 
265
/* First, the constants.  */
266
 
267
/* Contents are in TREE_INT_CST_LOW and TREE_INT_CST_HIGH fields,
268
   32 bits each, giving us a 64 bit constant capability.  INTEGER_CST
269
   nodes can be shared, and therefore should be considered read only.
270
   They should be copied, before setting a flag such as
271
   TREE_OVERFLOW.  If an INTEGER_CST has TREE_OVERFLOW or
272
   TREE_CONSTANT_OVERFLOW already set, it is known to be unique.
273
   INTEGER_CST nodes are created for the integral types, for pointer
274
   types and for vector and float types in some circumstances.  */
275
DEFTREECODE (INTEGER_CST, "integer_cst", tcc_constant, 0)
276
 
277
/* Contents are in TREE_REAL_CST field.  */
278
DEFTREECODE (REAL_CST, "real_cst", tcc_constant, 0)
279
 
280
/* Contents are in TREE_REALPART and TREE_IMAGPART fields,
281
   whose contents are other constant nodes.  */
282
DEFTREECODE (COMPLEX_CST, "complex_cst", tcc_constant, 0)
283
 
284
/* Contents are in TREE_VECTOR_CST_ELTS field.  */
285
DEFTREECODE (VECTOR_CST, "vector_cst", tcc_constant, 0)
286
 
287
/* Contents are TREE_STRING_LENGTH and the actual contents of the string.  */
288
DEFTREECODE (STRING_CST, "string_cst", tcc_constant, 0)
289
 
290
/* Declarations.  All references to names are represented as ..._DECL
291
   nodes.  The decls in one binding context are chained through the
292
   TREE_CHAIN field.  Each DECL has a DECL_NAME field which contains
293
   an IDENTIFIER_NODE.  (Some decls, most often labels, may have zero
294
   as the DECL_NAME).  DECL_CONTEXT points to the node representing
295
   the context in which this declaration has its scope.  For
296
   FIELD_DECLs, this is the RECORD_TYPE, UNION_TYPE, or
297
   QUAL_UNION_TYPE node that the field is a member of.  For VAR_DECL,
298
   PARM_DECL, FUNCTION_DECL, LABEL_DECL, and CONST_DECL nodes, this
299
   points to either the FUNCTION_DECL for the containing function, the
300
   RECORD_TYPE or UNION_TYPE for the containing type, or NULL_TREE or
301
   a TRANSLATION_UNIT_DECL if the given decl has "file scope".
302
   DECL_ABSTRACT_ORIGIN, if non-NULL, points to the original (abstract)
303
    ..._DECL node of which this decl is an (inlined or template expanded)
304
    instance.
305
   The TREE_TYPE field holds the data type of the object, when relevant.
306
    LABEL_DECLs have no data type.  For TYPE_DECL, the TREE_TYPE field
307
    contents are the type whose name is being declared.
308
   The DECL_ALIGN, DECL_SIZE,
309
    and DECL_MODE fields exist in decl nodes just as in type nodes.
310
    They are unused in LABEL_DECL, TYPE_DECL and CONST_DECL nodes.
311
 
312
   DECL_FIELD_BIT_OFFSET holds an integer number of bits offset for
313
   the location.  DECL_VOFFSET holds an expression for a variable
314
   offset; it is to be multiplied by DECL_VOFFSET_UNIT (an integer).
315
   These fields are relevant only in FIELD_DECLs and PARM_DECLs.
316
 
317
   DECL_INITIAL holds the value to initialize a variable to,
318
   or the value of a constant.  For a function, it holds the body
319
   (a node of type BLOCK representing the function's binding contour
320
   and whose body contains the function's statements.)  For a LABEL_DECL
321
   in C, it is a flag, nonzero if the label's definition has been seen.
322
 
323
   PARM_DECLs use a special field:
324
   DECL_ARG_TYPE is the type in which the argument is actually
325
    passed, which may be different from its type within the function.
326
 
327
   FUNCTION_DECLs use four special fields:
328
   DECL_ARGUMENTS holds a chain of PARM_DECL nodes for the arguments.
329
   DECL_RESULT holds a RESULT_DECL node for the value of a function.
330
    The DECL_RTL field is 0 for a function that returns no value.
331
    (C functions returning void have zero here.)
332
    The TREE_TYPE field is the type in which the result is actually
333
    returned.  This is usually the same as the return type of the
334
    FUNCTION_DECL, but it may be a wider integer type because of
335
    promotion.
336
   DECL_FUNCTION_CODE is a code number that is nonzero for
337
    built-in functions.  Its value is an enum built_in_function
338
    that says which built-in function it is.
339
 
340
   DECL_SOURCE_FILE holds a filename string and DECL_SOURCE_LINE
341
   holds a line number.  In some cases these can be the location of
342
   a reference, if no definition has been seen.
343
 
344
   DECL_ABSTRACT is nonzero if the decl represents an abstract instance
345
   of a decl (i.e. one which is nested within an abstract instance of a
346
   inline function.  */
347
 
348
DEFTREECODE (FUNCTION_DECL, "function_decl", tcc_declaration, 0)
349
DEFTREECODE (LABEL_DECL, "label_decl", tcc_declaration, 0)
350
/* The ordering of the following codes is optimized for the checking
351
   macros in tree.h.  Changing the order will degrade the speed of the
352
   compiler.  FIELD_DECL, VAR_DECL, CONST_DECL, PARM_DECL,
353
   TYPE_DECL.  */
354
DEFTREECODE (FIELD_DECL, "field_decl", tcc_declaration, 0)
355
DEFTREECODE (VAR_DECL, "var_decl", tcc_declaration, 0)
356
DEFTREECODE (CONST_DECL, "const_decl", tcc_declaration, 0)
357
DEFTREECODE (PARM_DECL, "parm_decl", tcc_declaration, 0)
358
DEFTREECODE (TYPE_DECL, "type_decl", tcc_declaration, 0)
359
DEFTREECODE (RESULT_DECL, "result_decl", tcc_declaration, 0)
360
 
361
/* A namespace declaration.  Namespaces appear in DECL_CONTEXT of other
362
   _DECLs, providing a hierarchy of names.  */
363
DEFTREECODE (NAMESPACE_DECL, "namespace_decl", tcc_declaration, 0)
364
 
365
/* A translation unit.  This is not technically a declaration, since it
366
   can't be looked up, but it's close enough.  */
367
DEFTREECODE (TRANSLATION_UNIT_DECL, "translation_unit_decl",\
368
             tcc_declaration, 0)
369
 
370
/* References to storage.  */
371
 
372
/* Value is structure or union component.
373
   Operand 0 is the structure or union (an expression).
374
   Operand 1 is the field (a node of type FIELD_DECL).
375
   Operand 2, if present, is the value of DECL_FIELD_OFFSET, measured
376
   in units of DECL_OFFSET_ALIGN / BITS_PER_UNIT.  */
377
DEFTREECODE (COMPONENT_REF, "component_ref", tcc_reference, 3)
378
 
379
/* Reference to a group of bits within an object.  Similar to COMPONENT_REF
380
   except the position is given explicitly rather than via a FIELD_DECL.
381
   Operand 0 is the structure or union expression;
382
   operand 1 is a tree giving the number of bits being referenced;
383
   operand 2 is a tree giving the position of the first referenced bit.
384
   The field can be either a signed or unsigned field;
385
   BIT_FIELD_REF_UNSIGNED says which.  */
386
DEFTREECODE (BIT_FIELD_REF, "bit_field_ref", tcc_reference, 3)
387
 
388
/* The ordering of the following codes is optimized for the checking
389
   macros in tree.h.  Changing the order will degrade the speed of the
390
   compiler.  INDIRECT_REF, ALIGN_INDIRECT_REF, MISALIGNED_INDIRECT_REF.  */
391
 
392
/* C unary `*' or Pascal `^'.  One operand, an expression for a pointer.  */
393
DEFTREECODE (INDIRECT_REF, "indirect_ref", tcc_reference, 1)
394
 
395
/* Like above, but aligns the referenced address (i.e, if the address
396
   in P is not aligned on TYPE_ALIGN boundary, then &(*P) != P).  */
397
DEFTREECODE (ALIGN_INDIRECT_REF, "align_indirect_ref", tcc_reference, 1)
398
 
399
/* Same as INDIRECT_REF, but also specifies the alignment of the referenced
400
   address:
401
   Operand 0 is the referenced address (a pointer);
402
   Operand 1 is an INTEGER_CST which represents the alignment of the address,
403
   or 0 if the alignment is unknown.  */
404
DEFTREECODE (MISALIGNED_INDIRECT_REF, "misaligned_indirect_ref", tcc_reference, 2)
405
 
406
/* Array indexing.
407
   Operand 0 is the array; operand 1 is a (single) array index.
408
   Operand 2, if present, is a copy of TYPE_MIN_VALUE of the index.
409
   Operand 3, if present, is the element size, measured in units of
410
   the alignment of the element type.  */
411
DEFTREECODE (ARRAY_REF, "array_ref", tcc_reference, 4)
412
 
413
/* Likewise, except that the result is a range ("slice") of the array.  The
414
   starting index of the resulting array is taken from operand 1 and the size
415
   of the range is taken from the type of the expression.  */
416
DEFTREECODE (ARRAY_RANGE_REF, "array_range_ref", tcc_reference, 4)
417
 
418
/* Used to represent lookup of runtime type dependent data.  Often this is
419
   a reference to a vtable, but it needn't be.  Operands are:
420
   OBJ_TYPE_REF_EXPR: An expression that evaluates the value to use.
421
   OBJ_TYPE_REF_OBJECT: Is the object on whose behalf the lookup is
422
   being performed.  Through this the optimizers may be able to statically
423
   determine the dynamic type of the object.
424
   OBJ_TYPE_REF_TOKEN: Something front-end specific used to resolve the
425
   reference to something simpler, usually to the address of a DECL.
426
   Never touched by the middle-end.  Good choices would be either an
427
   identifier or a vtable index.  */
428
DEFTREECODE (OBJ_TYPE_REF, "obj_type_ref", tcc_expression, 3)
429
 
430
/* The exception object from the runtime.  */
431
DEFTREECODE (EXC_PTR_EXPR, "exc_ptr_expr", tcc_expression, 0)
432
 
433
/* The filter object from the runtime.  */
434
DEFTREECODE (FILTER_EXPR, "filter_expr", tcc_expression, 0)
435
 
436
/* Constructor: return an aggregate value made from specified components.
437
   In C, this is used only for structure and array initializers.
438
   The operand is a sequence of component values made out of a VEC of
439
   struct constructor_elt.
440
 
441
   For ARRAY_TYPE:
442
   The field INDEX of each constructor_elt is the corresponding index.
443
   If the index is a RANGE_EXPR, it is a short-hand for many nodes,
444
   one for each index in the range.  (If the corresponding field VALUE
445
   has side-effects, they are evaluated once for each element.  Wrap the
446
   value in a SAVE_EXPR if you want to evaluate side effects only once.)
447
 
448
   For RECORD_TYPE, UNION_TYPE, or QUAL_UNION_TYPE:
449
   The field INDEX of each node is a FIELD_DECL.  */
450
DEFTREECODE (CONSTRUCTOR, "constructor", tcc_exceptional, 0)
451
 
452
/* The expression types are mostly straightforward, with the fourth argument
453
   of DEFTREECODE saying how many operands there are.
454
   Unless otherwise specified, the operands are expressions and the
455
   types of all the operands and the expression must all be the same.  */
456
 
457
/* Contains two expressions to compute, one followed by the other.
458
   the first value is ignored.  The second one's value is used.  The
459
   type of the first expression need not agree with the other types.  */
460
DEFTREECODE (COMPOUND_EXPR, "compound_expr", tcc_expression, 2)
461
 
462
/* Assignment expression.  Operand 0 is the what to set; 1, the new value.  */
463
DEFTREECODE (MODIFY_EXPR, "modify_expr", tcc_expression, 2)
464
 
465
/* Initialization expression.  Operand 0 is the variable to initialize;
466
   Operand 1 is the initializer.  This differs from MODIFY_EXPR in that any
467
   reference to the referent of operand 0 within operand 1 is undefined.  */
468
DEFTREECODE (INIT_EXPR, "init_expr", tcc_expression, 2)
469
 
470
/* For TARGET_EXPR, operand 0 is the target of an initialization,
471
   operand 1 is the initializer for the target, which may be void
472
     if simply expanding it initializes the target.
473
   operand 2 is the cleanup for this node, if any.
474
   operand 3 is the saved initializer after this node has been
475
   expanded once; this is so we can re-expand the tree later.  */
476
DEFTREECODE (TARGET_EXPR, "target_expr", tcc_expression, 4)
477
 
478
/* Conditional expression ( ... ? ... : ...  in C).
479
   Operand 0 is the condition.
480
   Operand 1 is the then-value.
481
   Operand 2 is the else-value.
482
   Operand 0 may be of any type.
483
   Operand 1 must have the same type as the entire expression, unless
484
   it unconditionally throws an exception, in which case it should
485
   have VOID_TYPE.  The same constraints apply to operand 2.  */
486
DEFTREECODE (COND_EXPR, "cond_expr", tcc_expression, 3)
487
 
488
/* Vector conditional expression. It is like COND_EXPR, but with
489
   vector operands.
490
 
491
   A = VEC_COND_EXPR ( X < Y, B, C)
492
 
493
   means
494
 
495
   for (i=0; i
496
     A[i] = X[i] < Y[i] ? B[i] : C[i];
497
*/
498
DEFTREECODE (VEC_COND_EXPR, "vec_cond_expr", tcc_expression, 3)
499
 
500
/* Declare local variables, including making RTL and allocating space.
501
   BIND_EXPR_VARS is a chain of VAR_DECL nodes for the variables.
502
   BIND_EXPR_BODY is the body, the expression to be computed using
503
   the variables.  The value of operand 1 becomes that of the BIND_EXPR.
504
   BIND_EXPR_BLOCK is the BLOCK that corresponds to these bindings
505
   for debugging purposes.  If this BIND_EXPR is actually expanded,
506
   that sets the TREE_USED flag in the BLOCK.
507
 
508
   The BIND_EXPR is not responsible for informing parsers
509
   about these variables.  If the body is coming from the input file,
510
   then the code that creates the BIND_EXPR is also responsible for
511
   informing the parser of the variables.
512
 
513
   If the BIND_EXPR is ever expanded, its TREE_USED flag is set.
514
   This tells the code for debugging symbol tables not to ignore the BIND_EXPR.
515
   If the BIND_EXPR should be output for debugging but will not be expanded,
516
   set the TREE_USED flag by hand.
517
 
518
   In order for the BIND_EXPR to be known at all, the code that creates it
519
   must also install it as a subblock in the tree of BLOCK
520
   nodes for the function.  */
521
DEFTREECODE (BIND_EXPR, "bind_expr", tcc_expression, 3)
522
 
523
/* Function call.  Operand 0 is the function.
524
   Operand 1 is the argument list, a list of expressions
525
   made out of a chain of TREE_LIST nodes.
526
   Operand 2 is the static chain argument, or NULL.  */
527
DEFTREECODE (CALL_EXPR, "call_expr", tcc_expression, 3)
528
 
529
/* Specify a value to compute along with its corresponding cleanup.
530
   Operand 0 is the cleanup expression.
531
   The cleanup is executed by the first enclosing CLEANUP_POINT_EXPR,
532
   which must exist.  This differs from TRY_CATCH_EXPR in that operand 1
533
   is always evaluated when cleanups are run.  */
534
DEFTREECODE (WITH_CLEANUP_EXPR, "with_cleanup_expr", tcc_expression, 1)
535
 
536
/* Specify a cleanup point.
537
   Operand 0 is an expression that may have cleanups.  If it does, those
538
   cleanups are executed after the expression is expanded.
539
 
540
   Note that if the expression is a reference to storage, it is forced out
541
   of memory before the cleanups are run.  This is necessary to handle
542
   cases where the cleanups modify the storage referenced; in the
543
   expression 't.i', if 't' is a struct with an integer member 'i' and a
544
   cleanup which modifies 'i', the value of the expression depends on
545
   whether the cleanup is run before or after 't.i' is evaluated.  When
546
   expand_expr is run on 't.i', it returns a MEM.  This is not good enough;
547
   the value of 't.i' must be forced out of memory.
548
 
549
   As a consequence, the operand of a CLEANUP_POINT_EXPR must not have
550
   BLKmode, because it will not be forced out of memory.  */
551
DEFTREECODE (CLEANUP_POINT_EXPR, "cleanup_point_expr", tcc_expression, 1)
552
 
553
/* The following two codes are used in languages that have types where
554
   some field in an object of the type contains a value that is used in
555
   the computation of another field's offset or size and/or the size of
556
   the type.  The positions and/or sizes of fields can vary from object
557
   to object of the same type or even for one and the same object within
558
   its scope.
559
 
560
   Record types with discriminants in Ada or schema types in Pascal are
561
   examples of such types.  This mechanism is also used to create "fat
562
   pointers" for unconstrained array types in Ada; the fat pointer is a
563
   structure one of whose fields is a pointer to the actual array type
564
   and the other field is a pointer to a template, which is a structure
565
   containing the bounds of the array.  The bounds in the type pointed
566
   to by the first field in the fat pointer refer to the values in the
567
   template.
568
 
569
   When you wish to construct such a type you need "self-references"
570
   that allow you to reference the object having this type from the
571
   TYPE node, i.e. without having a variable instantiating this type.
572
 
573
   Such a "self-references" is done using a PLACEHOLDER_EXPR.  This is
574
   a node that will later be replaced with the object being referenced.
575
   Its type is that of the object and selects which object to use from
576
   a chain of references (see below).  No other slots are used in the
577
   PLACEHOLDER_EXPR.
578
 
579
   For example, if your type FOO is a RECORD_TYPE with a field BAR,
580
   and you need the value of .BAR to calculate TYPE_SIZE
581
   (FOO), just substitute  above with a PLACEHOLDER_EXPR
582
   whose TREE_TYPE is FOO.  Then construct your COMPONENT_REF with
583
   the PLACEHOLDER_EXPR as the first operand (which has the correct
584
   type).  Later, when the size is needed in the program, the back-end
585
   will find this PLACEHOLDER_EXPR and generate code to calculate the
586
   actual size at run-time.  In the following, we describe how this
587
   calculation is done.
588
 
589
   When we wish to evaluate a size or offset, we check whether it contains a
590
   PLACEHOLDER_EXPR.  If it does, we call substitute_placeholder_in_expr
591
   passing both that tree and an expression within which the object may be
592
   found.  The latter expression is the object itself in the simple case of
593
   an Ada record with discriminant, but it can be the array in the case of an
594
   unconstrained array.
595
 
596
   In the latter case, we need the fat pointer, because the bounds of
597
   the array can only be accessed from it.  However, we rely here on the
598
   fact that the expression for the array contains the dereference of
599
   the fat pointer that obtained the array pointer.  */
600
 
601
/* Denotes a record to later be substituted before evaluating this expression.
602
   The type of this expression is used to find the record to replace it.  */
603
DEFTREECODE (PLACEHOLDER_EXPR, "placeholder_expr", tcc_exceptional, 0)
604
 
605
/* Simple arithmetic.  */
606
DEFTREECODE (PLUS_EXPR, "plus_expr", tcc_binary, 2)
607
DEFTREECODE (MINUS_EXPR, "minus_expr", tcc_binary, 2)
608
DEFTREECODE (MULT_EXPR, "mult_expr", tcc_binary, 2)
609
 
610
/* Division for integer result that rounds the quotient toward zero.  */
611
DEFTREECODE (TRUNC_DIV_EXPR, "trunc_div_expr", tcc_binary, 2)
612
 
613
/* Division for integer result that rounds the quotient toward infinity.  */
614
DEFTREECODE (CEIL_DIV_EXPR, "ceil_div_expr", tcc_binary, 2)
615
 
616
/* Division for integer result that rounds toward minus infinity.  */
617
DEFTREECODE (FLOOR_DIV_EXPR, "floor_div_expr", tcc_binary, 2)
618
 
619
/* Division for integer result that rounds toward nearest integer.  */
620
DEFTREECODE (ROUND_DIV_EXPR, "round_div_expr", tcc_binary, 2)
621
 
622
/* Four kinds of remainder that go with the four kinds of division.  */
623
DEFTREECODE (TRUNC_MOD_EXPR, "trunc_mod_expr", tcc_binary, 2)
624
DEFTREECODE (CEIL_MOD_EXPR, "ceil_mod_expr", tcc_binary, 2)
625
DEFTREECODE (FLOOR_MOD_EXPR, "floor_mod_expr", tcc_binary, 2)
626
DEFTREECODE (ROUND_MOD_EXPR, "round_mod_expr", tcc_binary, 2)
627
 
628
/* Division for real result.  */
629
DEFTREECODE (RDIV_EXPR, "rdiv_expr", tcc_binary, 2)
630
 
631
/* Division which is not supposed to need rounding.
632
   Used for pointer subtraction in C.  */
633
DEFTREECODE (EXACT_DIV_EXPR, "exact_div_expr", tcc_binary, 2)
634
 
635
/* Conversion of real to fixed point: four ways to round,
636
   like the four ways to divide.
637
   CONVERT_EXPR can also be used to convert a real to an integer,
638
   and that is what is used in languages that do not have ways of
639
   specifying which of these is wanted.  Maybe these are not needed.  */
640
DEFTREECODE (FIX_TRUNC_EXPR, "fix_trunc_expr", tcc_unary, 1)
641
DEFTREECODE (FIX_CEIL_EXPR, "fix_ceil_expr", tcc_unary, 1)
642
DEFTREECODE (FIX_FLOOR_EXPR, "fix_floor_expr", tcc_unary, 1)
643
DEFTREECODE (FIX_ROUND_EXPR, "fix_round_expr", tcc_unary, 1)
644
 
645
/* Conversion of an integer to a real.  */
646
DEFTREECODE (FLOAT_EXPR, "float_expr", tcc_unary, 1)
647
 
648
/* Unary negation.  */
649
DEFTREECODE (NEGATE_EXPR, "negate_expr", tcc_unary, 1)
650
 
651
/* Minimum and maximum values.  When used with floating point, if both
652
   operands are zeros, or if either operand is NaN, then it is unspecified
653
   which of the two operands is returned as the result.  */
654
DEFTREECODE (MIN_EXPR, "min_expr", tcc_binary, 2)
655
DEFTREECODE (MAX_EXPR, "max_expr", tcc_binary, 2)
656
 
657
/* Represents the absolute value of the operand.
658
 
659
   An ABS_EXPR must have either an INTEGER_TYPE or a REAL_TYPE.  The
660
   operand of the ABS_EXPR must have the same type.  */
661
DEFTREECODE (ABS_EXPR, "abs_expr", tcc_unary, 1)
662
 
663
/* Shift operations for shift and rotate.
664
   Shift means logical shift if done on an
665
   unsigned type, arithmetic shift if done on a signed type.
666
   The second operand is the number of bits to
667
   shift by; it need not be the same type as the first operand and result.
668
   Note that the result is undefined if the second operand is larger
669
   than or equal to the first operand's type size.  */
670
DEFTREECODE (LSHIFT_EXPR, "lshift_expr", tcc_binary, 2)
671
DEFTREECODE (RSHIFT_EXPR, "rshift_expr", tcc_binary, 2)
672
DEFTREECODE (LROTATE_EXPR, "lrotate_expr", tcc_binary, 2)
673
DEFTREECODE (RROTATE_EXPR, "rrotate_expr", tcc_binary, 2)
674
 
675
/* Bitwise operations.  Operands have same mode as result.  */
676
DEFTREECODE (BIT_IOR_EXPR, "bit_ior_expr", tcc_binary, 2)
677
DEFTREECODE (BIT_XOR_EXPR, "bit_xor_expr", tcc_binary, 2)
678
DEFTREECODE (BIT_AND_EXPR, "bit_and_expr", tcc_binary, 2)
679
DEFTREECODE (BIT_NOT_EXPR, "bit_not_expr", tcc_unary, 1)
680
 
681
/* ANDIF and ORIF allow the second operand not to be computed if the
682
   value of the expression is determined from the first operand.  AND,
683
   OR, and XOR always compute the second operand whether its value is
684
   needed or not (for side effects).  The operand may have
685
   BOOLEAN_TYPE or INTEGER_TYPE.  In either case, the argument will be
686
   either zero or one.  For example, a TRUTH_NOT_EXPR will never have
687
   an INTEGER_TYPE VAR_DECL as its argument; instead, a NE_EXPR will be
688
   used to compare the VAR_DECL to zero, thereby obtaining a node with
689
   value zero or one.  */
690
DEFTREECODE (TRUTH_ANDIF_EXPR, "truth_andif_expr", tcc_expression, 2)
691
DEFTREECODE (TRUTH_ORIF_EXPR, "truth_orif_expr", tcc_expression, 2)
692
DEFTREECODE (TRUTH_AND_EXPR, "truth_and_expr", tcc_expression, 2)
693
DEFTREECODE (TRUTH_OR_EXPR, "truth_or_expr", tcc_expression, 2)
694
DEFTREECODE (TRUTH_XOR_EXPR, "truth_xor_expr", tcc_expression, 2)
695
DEFTREECODE (TRUTH_NOT_EXPR, "truth_not_expr", tcc_expression, 1)
696
 
697
/* Relational operators.
698
   `EQ_EXPR' and `NE_EXPR' are allowed for any types.
699
   The others are allowed only for integer (or pointer or enumeral)
700
   or real types.
701
   In all cases the operands will have the same type,
702
   and the value is always the type used by the language for booleans.  */
703
DEFTREECODE (LT_EXPR, "lt_expr", tcc_comparison, 2)
704
DEFTREECODE (LE_EXPR, "le_expr", tcc_comparison, 2)
705
DEFTREECODE (GT_EXPR, "gt_expr", tcc_comparison, 2)
706
DEFTREECODE (GE_EXPR, "ge_expr", tcc_comparison, 2)
707
DEFTREECODE (EQ_EXPR, "eq_expr", tcc_comparison, 2)
708
DEFTREECODE (NE_EXPR, "ne_expr", tcc_comparison, 2)
709
 
710
/* Additional relational operators for floating point unordered.  */
711
DEFTREECODE (UNORDERED_EXPR, "unordered_expr", tcc_comparison, 2)
712
DEFTREECODE (ORDERED_EXPR, "ordered_expr", tcc_comparison, 2)
713
 
714
/* These are equivalent to unordered or ...  */
715
DEFTREECODE (UNLT_EXPR, "unlt_expr", tcc_comparison, 2)
716
DEFTREECODE (UNLE_EXPR, "unle_expr", tcc_comparison, 2)
717
DEFTREECODE (UNGT_EXPR, "ungt_expr", tcc_comparison, 2)
718
DEFTREECODE (UNGE_EXPR, "unge_expr", tcc_comparison, 2)
719
DEFTREECODE (UNEQ_EXPR, "uneq_expr", tcc_comparison, 2)
720
 
721
/* This is the reverse of uneq_expr.  */
722
DEFTREECODE (LTGT_EXPR, "ltgt_expr", tcc_comparison, 2)
723
 
724
DEFTREECODE (RANGE_EXPR, "range_expr", tcc_binary, 2)
725
 
726
/* Represents a conversion of type of a value.
727
   All conversions, including implicit ones, must be
728
   represented by CONVERT_EXPR or NOP_EXPR nodes.  */
729
DEFTREECODE (CONVERT_EXPR, "convert_expr", tcc_unary, 1)
730
 
731
/* Represents a conversion expected to require no code to be generated.  */
732
DEFTREECODE (NOP_EXPR, "nop_expr", tcc_unary, 1)
733
 
734
/* Value is same as argument, but guaranteed not an lvalue.  */
735
DEFTREECODE (NON_LVALUE_EXPR, "non_lvalue_expr", tcc_unary, 1)
736
 
737
/* Represents viewing something of one type as being of a second type.
738
   This corresponds to an "Unchecked Conversion" in Ada and roughly to
739
   the idiom *(type2 *)&X in C.  The only operand is the value to be
740
   viewed as being of another type.  It is undefined if the type of the
741
   input and of the expression have different sizes.
742
 
743
   This code may also be used within the LHS of a MODIFY_EXPR, in which
744
   case no actual data motion may occur.  TREE_ADDRESSABLE will be set in
745
   this case and GCC must abort if it could not do the operation without
746
   generating insns.  */
747
DEFTREECODE (VIEW_CONVERT_EXPR, "view_convert_expr", tcc_reference, 1)
748
 
749
/* Represents something we computed once and will use multiple times.
750
   First operand is that expression.  After it is evaluated once, it
751
   will be replaced by the temporary variable that holds the value.  */
752
DEFTREECODE (SAVE_EXPR, "save_expr", tcc_expression, 1)
753
 
754
/* & in C.  Value is the address at which the operand's value resides.
755
   Operand may have any mode.  Result mode is Pmode.  */
756
DEFTREECODE (ADDR_EXPR, "addr_expr", tcc_expression, 1)
757
 
758
/* Operand0 is a function constant; result is part N of a function
759
   descriptor of type ptr_mode.  */
760
DEFTREECODE (FDESC_EXPR, "fdesc_expr", tcc_expression, 2)
761
 
762
/* Given two real or integer operands of the same type,
763
   returns a complex value of the corresponding complex type.  */
764
DEFTREECODE (COMPLEX_EXPR, "complex_expr", tcc_binary, 2)
765
 
766
/* Complex conjugate of operand.  Used only on complex types.  */
767
DEFTREECODE (CONJ_EXPR, "conj_expr", tcc_unary, 1)
768
 
769
/* Used only on an operand of complex type, these return
770
   a value of the corresponding component type.  */
771
DEFTREECODE (REALPART_EXPR, "realpart_expr", tcc_reference, 1)
772
DEFTREECODE (IMAGPART_EXPR, "imagpart_expr", tcc_reference, 1)
773
 
774
/* Nodes for ++ and -- in C.
775
   The second arg is how much to increment or decrement by.
776
   For a pointer, it would be the size of the object pointed to.  */
777
DEFTREECODE (PREDECREMENT_EXPR, "predecrement_expr", tcc_expression, 2)
778
DEFTREECODE (PREINCREMENT_EXPR, "preincrement_expr", tcc_expression, 2)
779
DEFTREECODE (POSTDECREMENT_EXPR, "postdecrement_expr", tcc_expression, 2)
780
DEFTREECODE (POSTINCREMENT_EXPR, "postincrement_expr", tcc_expression, 2)
781
 
782
/* Used to implement `va_arg'.  */
783
DEFTREECODE (VA_ARG_EXPR, "va_arg_expr", tcc_expression, 1)
784
 
785
/* Evaluate operand 1.  If and only if an exception is thrown during
786
   the evaluation of operand 1, evaluate operand 2.
787
 
788
   This differs from TRY_FINALLY_EXPR in that operand 2 is not evaluated
789
   on a normal or jump exit, only on an exception.  */
790
DEFTREECODE (TRY_CATCH_EXPR, "try_catch_expr", tcc_statement, 2)
791
 
792
/* Evaluate the first operand.
793
   The second operand is a cleanup expression which is evaluated
794
   on any exit (normal, exception, or jump out) from this expression.  */
795
DEFTREECODE (TRY_FINALLY_EXPR, "try_finally", tcc_statement, 2)
796
 
797
/* These types of expressions have no useful value,
798
   and always have side effects.  */
799
 
800
/* Used to represent a local declaration. The operand is DECL_EXPR_DECL.  */
801
DEFTREECODE (DECL_EXPR, "decl_expr", tcc_statement, 1)
802
 
803
/* A label definition, encapsulated as a statement.
804
   Operand 0 is the LABEL_DECL node for the label that appears here.
805
   The type should be void and the value should be ignored.  */
806
DEFTREECODE (LABEL_EXPR, "label_expr", tcc_statement, 1)
807
 
808
/* GOTO.  Operand 0 is a LABEL_DECL node or an expression.
809
   The type should be void and the value should be ignored.  */
810
DEFTREECODE (GOTO_EXPR, "goto_expr", tcc_statement, 1)
811
 
812
/* RETURN.  Evaluates operand 0, then returns from the current function.
813
   Presumably that operand is an assignment that stores into the
814
   RESULT_DECL that hold the value to be returned.
815
   The operand may be null.
816
   The type should be void and the value should be ignored.  */
817
DEFTREECODE (RETURN_EXPR, "return_expr", tcc_statement, 1)
818
 
819
/* Exit the inner most loop conditionally.  Operand 0 is the condition.
820
   The type should be void and the value should be ignored.  */
821
DEFTREECODE (EXIT_EXPR, "exit_expr", tcc_statement, 1)
822
 
823
/* A loop.  Operand 0 is the body of the loop.
824
   It must contain an EXIT_EXPR or is an infinite loop.
825
   The type should be void and the value should be ignored.  */
826
DEFTREECODE (LOOP_EXPR, "loop_expr", tcc_statement, 1)
827
 
828
/* Switch expression.
829
 
830
   TREE_TYPE is the original type of the condition, before any
831
   language required type conversions.  It may be NULL, in which case
832
   the original type and final types are assumed to be the same.
833
 
834
   Operand 0 is the expression used to perform the branch,
835
   Operand 1 is the body of the switch, which probably contains
836
     CASE_LABEL_EXPRs.  It may also be NULL, in which case operand 2
837
     must not be NULL.
838
   Operand 2 is either NULL_TREE or a TREE_VEC of the CASE_LABEL_EXPRs
839
     of all the cases.  */
840
DEFTREECODE (SWITCH_EXPR, "switch_expr", tcc_statement, 3)
841
 
842
/* Used to represent a case label. The operands are CASE_LOW and
843
   CASE_HIGH, respectively. If CASE_LOW is NULL_TREE, the label is a
844
   'default' label. If CASE_HIGH is NULL_TREE, the label is a normal case
845
   label.  CASE_LABEL is the corresponding LABEL_DECL.  */
846
DEFTREECODE (CASE_LABEL_EXPR, "case_label_expr", tcc_statement, 3)
847
 
848
/* RESX.  Resume execution after an exception.  Operand 0 is a
849
   number indicating the exception region that is being left.  */
850
DEFTREECODE (RESX_EXPR, "resx_expr", tcc_statement, 1)
851
 
852
/* Used to represent an inline assembly statement.  ASM_STRING returns a
853
   STRING_CST for the instruction (e.g., "mov x, y"). ASM_OUTPUTS,
854
   ASM_INPUTS, and ASM_CLOBBERS represent the outputs, inputs, and clobbers
855
   for the statement.  */
856
DEFTREECODE (ASM_EXPR, "asm_expr", tcc_statement, 4)
857
 
858
/* Variable references for SSA analysis.  New SSA names are created every
859
   time a variable is assigned a new value.  The SSA builder uses SSA_NAME
860
   nodes to implement SSA versioning.  */
861
DEFTREECODE (SSA_NAME, "ssa_name", tcc_exceptional, 0)
862
 
863
/* SSA PHI operator.  PHI_RESULT is the new SSA_NAME node created by
864
   the PHI node.  PHI_ARG_LENGTH is the number of arguments.
865
   PHI_ARG_ELT returns the Ith tuple  from the
866
   argument list.  Each tuple contains the incoming reaching
867
   definition (SSA_NAME node) and the edge via which that definition
868
   is coming through.  */
869
DEFTREECODE (PHI_NODE, "phi_node", tcc_exceptional, 0)
870
 
871
/* Used to represent a typed exception handler.  CATCH_TYPES is the type (or
872
   list of types) handled, and CATCH_BODY is the code for the handler.  */
873
DEFTREECODE (CATCH_EXPR, "catch_expr", tcc_statement, 2)
874
 
875
/* Used to represent an exception specification.  EH_FILTER_TYPES is a list
876
   of allowed types, and EH_FILTER_FAILURE is an expression to evaluate on
877
   failure.  EH_FILTER_MUST_NOT_THROW controls which range type to use when
878
   expanding.  */
879
DEFTREECODE (EH_FILTER_EXPR, "eh_filter_expr", tcc_statement, 2)
880
 
881
/* Node used for describing a property that is known at compile
882
   time.  */
883
DEFTREECODE (SCEV_KNOWN, "scev_known", tcc_expression, 0)
884
 
885
/* Node used for describing a property that is not known at compile
886
   time.  */
887
DEFTREECODE (SCEV_NOT_KNOWN, "scev_not_known", tcc_expression, 0)
888
 
889
/* Polynomial chains of recurrences.
890
   Under the form: cr = {CHREC_LEFT (cr), +, CHREC_RIGHT (cr)}.  */
891
DEFTREECODE (POLYNOMIAL_CHREC, "polynomial_chrec", tcc_expression, 3)
892
 
893
/* Used to chain children of container statements together.
894
   Use the interface in tree-iterator.h to access this node.  */
895
DEFTREECODE (STATEMENT_LIST, "statement_list", tcc_exceptional, 0)
896
 
897
/* Value handles.  Artificial nodes to represent expressions in
898
   partial redundancy elimination (tree-ssa-pre.c).  These nodes are
899
   used for expression canonicalization.  If two expressions compute
900
   the same value, they will be assigned the same value handle.  */
901
DEFTREECODE (VALUE_HANDLE, "value_handle", tcc_exceptional, 0)
902
 
903
/* Predicate assertion.  Artificial expression generated by the optimizers
904
   to keep track of predicate values.  This expression may only appear on
905
   the RHS of assignments.
906
 
907
   Given X = ASSERT_EXPR , the optimizers can infer
908
   two things:
909
 
910
        1- X is a copy of Y.
911
        2- EXPR is a GIMPLE conditional expression (as defined by
912
           is_gimple_condexpr) and is known to be true.
913
 
914
   The type of the expression is the same as Y.  */
915
DEFTREECODE (ASSERT_EXPR, "assert_expr", tcc_expression, 2)
916
 
917
/* Base class information. Holds information about a class as a
918
   baseclass of itself or another class.  */
919
DEFTREECODE (TREE_BINFO, "tree_binfo", tcc_exceptional, 0)
920
 
921
/* Records the size for an expression of variable size type.  This is
922
   for use in contexts in which we are accessing the entire object,
923
   such as for a function call, or block copy.
924
   Operand 0 is the real expression.
925
   Operand 1 is the size of the type in the expression.  */
926
DEFTREECODE (WITH_SIZE_EXPR, "with_size_expr", tcc_expression, 2)
927
 
928
/* Extract elements from two input vectors Operand 0 and Operand 1
929
   size VS, according to the offset OFF defined by Operand 2 as
930
   follows:
931
   If OFF > 0, the last VS - OFF elements of vector OP0 are concatenated to
932
   the first OFF elements of the vector OP1.
933
   If OFF == 0, then the returned vector is OP1.
934
   On different targets OFF may take different forms; It can be an address, in
935
   which case its low log2(VS)-1 bits define the offset, or it can be a mask
936
   generated by the builtin targetm.vectorize.mask_for_load_builtin_decl.  */
937
DEFTREECODE (REALIGN_LOAD_EXPR, "realign_load", tcc_expression, 3)
938
 
939
/* Low-level memory addressing.  Operands are SYMBOL (static or global
940
   variable), BASE (register), INDEX (register), STEP (integer constant),
941
   OFFSET (integer constant).  Corresponding address is
942
   SYMBOL + BASE + STEP * INDEX + OFFSET.  Only variations and values valid on
943
   the target are allowed.
944
 
945
   The sixth argument is the reference to the original memory access, which
946
   is preserved for the purposes of the RTL alias analysis.  The seventh
947
   argument is a tag representing results of the tree level alias analysis.  */
948
 
949
DEFTREECODE (TARGET_MEM_REF, "target_mem_ref", tcc_reference, 7)
950
 
951
/* Reduction operations.
952
   Operations that take a vector of elements and "reduce" it to a scalar
953
   result (e.g. summing the elements of the vector, finding the minimum over
954
   the vector elements, etc).
955
   Operand 0 is a vector; the first element in the vector has the result.
956
   Operand 1 is a vector.  */
957
DEFTREECODE (REDUC_MAX_EXPR, "reduc_max_expr", tcc_unary, 1)
958
DEFTREECODE (REDUC_MIN_EXPR, "reduc_min_expr", tcc_unary, 1)
959
DEFTREECODE (REDUC_PLUS_EXPR, "reduc_plus_expr", tcc_unary, 1)
960
 
961
/* Whole vector left/right shift in bits.
962
   Operand 0 is a vector to be shifted.
963
   Operand 1 is an integer shift amount in bits.  */
964
DEFTREECODE (VEC_LSHIFT_EXPR, "vec_lshift_expr", tcc_binary, 2)
965
DEFTREECODE (VEC_RSHIFT_EXPR, "vec_rshift_expr", tcc_binary, 2)
966
 
967
/*
968
Local variables:
969
mode:c
970
End:
971
*/

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.