1 /* Language-independent node constructors for parse phase of GNU compiler.
2 Copyright (C) 1987, 1988, 1992, 1993, 1994, 1995, 1996, 1997, 1998,
3 1999, 2000, 2001, 2002, 2003, 2004 Free Software Foundation, Inc.
5 This file is part of GCC.
7 GCC is free software; you can redistribute it and/or modify it under
8 the terms of the GNU General Public License as published by the Free
9 Software Foundation; either version 2, or (at your option) any later
12 GCC is distributed in the hope that it will be useful, but WITHOUT ANY
13 WARRANTY; without even the implied warranty of MERCHANTABILITY or
14 FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
17 You should have received a copy of the GNU General Public License
18 along with GCC; see the file COPYING. If not, write to the Free
19 Software Foundation, 59 Temple Place - Suite 330, Boston, MA
22 /* This file contains the low level primitives for operating on tree nodes,
23 including allocation, list operations, interning of identifiers,
24 construction of data type nodes and statement nodes,
25 and construction of type conversion nodes. It also contains
26 tables index by tree code that describe how to take apart
29 It is intended to be language-independent, but occasionally
30 calls language-dependent routines defined (for C) in typecheck.c. */
34 #include "coretypes.h"
47 #include "langhooks.h"
48 #include "tree-iterator.h"
49 #include "basic-block.h"
50 #include "tree-flow.h"
52 /* obstack.[ch] explicitly declined to prototype this. */
53 extern int _obstack_allocated_p (struct obstack *h, void *obj);
55 #ifdef GATHER_STATISTICS
56 /* Statistics-gathering stuff. */
58 int tree_node_counts[(int) all_kinds];
59 int tree_node_sizes[(int) all_kinds];
61 /* Keep in sync with tree.h:enum tree_node_kind. */
62 static const char * const tree_node_kind_names[] = {
80 #endif /* GATHER_STATISTICS */
82 /* Unique id for next decl created. */
83 static GTY(()) int next_decl_uid;
84 /* Unique id for next type created. */
85 static GTY(()) int next_type_uid = 1;
87 /* Since we cannot rehash a type after it is in the table, we have to
88 keep the hash code. */
90 struct type_hash GTY(())
96 /* Initial size of the hash table (rounded to next prime). */
97 #define TYPE_HASH_INITIAL_SIZE 1000
99 /* Now here is the hash table. When recording a type, it is added to
100 the slot whose index is the hash code. Note that the hash table is
101 used for several kinds of types (function types, array types and
102 array index range types, for now). While all these live in the
103 same table, they are completely independent, and the hash code is
104 computed differently for each of these. */
106 static GTY ((if_marked ("type_hash_marked_p"), param_is (struct type_hash)))
107 htab_t type_hash_table;
109 static void set_type_quals (tree, int);
110 static int type_hash_eq (const void *, const void *);
111 static hashval_t type_hash_hash (const void *);
112 static void print_type_hash_statistics (void);
113 static void finish_vector_type (tree);
114 static int type_hash_marked_p (const void *);
115 static unsigned int type_hash_list (tree, hashval_t);
116 static unsigned int attribute_hash_list (tree, hashval_t);
118 tree global_trees[TI_MAX];
119 tree integer_types[itk_none];
126 /* Initialize the hash table of types. */
127 type_hash_table = htab_create_ggc (TYPE_HASH_INITIAL_SIZE, type_hash_hash,
132 /* The name of the object as the assembler will see it (but before any
133 translations made by ASM_OUTPUT_LABELREF). Often this is the same
134 as DECL_NAME. It is an IDENTIFIER_NODE. */
136 decl_assembler_name (tree decl)
138 if (!DECL_ASSEMBLER_NAME_SET_P (decl))
139 lang_hooks.set_decl_assembler_name (decl);
140 return DECL_CHECK (decl)->decl.assembler_name;
143 /* Compute the number of bytes occupied by 'node'. This routine only
144 looks at TREE_CODE and, if the code is TREE_VEC, TREE_VEC_LENGTH. */
146 tree_size (tree node)
148 enum tree_code code = TREE_CODE (node);
150 switch (TREE_CODE_CLASS (code))
152 case 'd': /* A decl node */
153 return sizeof (struct tree_decl);
155 case 't': /* a type node */
156 return sizeof (struct tree_type);
158 case 'b': /* a lexical block node */
159 return sizeof (struct tree_block);
161 case 'r': /* a reference */
162 case 'e': /* an expression */
163 case 's': /* an expression with side effects */
164 case '<': /* a comparison expression */
165 case '1': /* a unary arithmetic expression */
166 case '2': /* a binary arithmetic expression */
167 return (sizeof (struct tree_exp)
168 + TREE_CODE_LENGTH (code) * sizeof (char *) - sizeof (char *));
170 case 'c': /* a constant */
173 case INTEGER_CST: return sizeof (struct tree_int_cst);
174 case REAL_CST: return sizeof (struct tree_real_cst);
175 case COMPLEX_CST: return sizeof (struct tree_complex);
176 case VECTOR_CST: return sizeof (struct tree_vector);
177 case STRING_CST: return sizeof (struct tree_string);
179 return lang_hooks.tree_size (code);
182 case 'x': /* something random, like an identifier. */
185 case IDENTIFIER_NODE: return lang_hooks.identifier_size;
186 case TREE_LIST: return sizeof (struct tree_list);
187 case TREE_VEC: return (sizeof (struct tree_vec)
188 + TREE_VEC_LENGTH(node) * sizeof(char *)
192 case PLACEHOLDER_EXPR: return sizeof (struct tree_common);
194 case PHI_NODE: return (sizeof (struct tree_phi_node)
195 + (PHI_ARG_CAPACITY (node) - 1) *
196 sizeof (struct phi_arg_d));
198 case EPHI_NODE: return (sizeof (struct tree_ephi_node)
199 + (EPHI_ARG_CAPACITY (node) - 1) *
200 sizeof (struct ephi_arg_d));
202 case SSA_NAME: return sizeof (struct tree_ssa_name);
203 case EUSE_NODE: return sizeof (struct tree_euse_node);
206 case EEXIT_NODE: return sizeof (struct tree_eref_common);
208 case STATEMENT_LIST: return sizeof (struct tree_statement_list);
211 return lang_hooks.tree_size (code);
219 /* Return a newly allocated node of code CODE.
220 For decl and type nodes, some other fields are initialized.
221 The rest of the node is initialized to zero.
223 Achoo! I got a code in the node. */
226 make_node_stat (enum tree_code code MEM_STAT_DECL)
229 int type = TREE_CODE_CLASS (code);
231 #ifdef GATHER_STATISTICS
234 struct tree_common ttmp;
236 /* We can't allocate a TREE_VEC, PHI_NODE, EPHI_NODE or STRING_CST
237 without knowing how many elements it will have. */
238 if (code == TREE_VEC || code == PHI_NODE || code == EPHI_NODE)
241 TREE_SET_CODE ((tree)&ttmp, code);
242 length = tree_size ((tree)&ttmp);
244 #ifdef GATHER_STATISTICS
247 case 'd': /* A decl node */
251 case 't': /* a type node */
255 case 'b': /* a lexical block */
259 case 's': /* an expression with side effects */
263 case 'r': /* a reference */
267 case 'e': /* an expression */
268 case '<': /* a comparison expression */
269 case '1': /* a unary arithmetic expression */
270 case '2': /* a binary arithmetic expression */
274 case 'c': /* a constant */
278 case 'x': /* something random, like an identifier. */
279 if (code == IDENTIFIER_NODE)
281 else if (code == TREE_VEC)
283 else if (code == PHI_NODE)
285 else if (code == SSA_NAME)
286 kind = ssa_name_kind;
295 tree_node_counts[(int) kind]++;
296 tree_node_sizes[(int) kind] += length;
299 t = ggc_alloc_zone_stat (length, tree_zone PASS_MEM_STAT);
301 memset (t, 0, length);
303 TREE_SET_CODE (t, code);
308 TREE_SIDE_EFFECTS (t) = 1;
312 if (code != FUNCTION_DECL)
314 DECL_USER_ALIGN (t) = 0;
315 DECL_IN_SYSTEM_HEADER (t) = in_system_header;
316 DECL_SOURCE_LOCATION (t) = input_location;
317 DECL_UID (t) = next_decl_uid++;
319 /* We have not yet computed the alias set for this declaration. */
320 DECL_POINTER_ALIAS_SET (t) = -1;
324 TYPE_UID (t) = next_type_uid++;
325 TYPE_ALIGN (t) = char_type_node ? TYPE_ALIGN (char_type_node) : 0;
326 TYPE_USER_ALIGN (t) = 0;
327 TYPE_MAIN_VARIANT (t) = t;
329 /* Default to no attributes for type, but let target change that. */
330 TYPE_ATTRIBUTES (t) = NULL_TREE;
331 targetm.set_default_type_attributes (t);
333 /* We have not yet computed the alias set for this type. */
334 TYPE_ALIAS_SET (t) = -1;
338 TREE_CONSTANT (t) = 1;
339 TREE_INVARIANT (t) = 1;
349 case PREDECREMENT_EXPR:
350 case PREINCREMENT_EXPR:
351 case POSTDECREMENT_EXPR:
352 case POSTINCREMENT_EXPR:
353 /* All of these have side-effects, no matter what their
355 TREE_SIDE_EFFECTS (t) = 1;
367 /* Return a new node with the same contents as NODE except that its
368 TREE_CHAIN is zero and it has a fresh uid. */
371 copy_node_stat (tree node MEM_STAT_DECL)
374 enum tree_code code = TREE_CODE (node);
377 #ifdef ENABLE_CHECKING
378 if (code == STATEMENT_LIST)
382 length = tree_size (node);
383 t = ggc_alloc_zone_stat (length, tree_zone PASS_MEM_STAT);
384 memcpy (t, node, length);
387 TREE_ASM_WRITTEN (t) = 0;
388 TREE_VISITED (t) = 0;
391 if (TREE_CODE_CLASS (code) == 'd')
392 DECL_UID (t) = next_decl_uid++;
393 else if (TREE_CODE_CLASS (code) == 't')
395 TYPE_UID (t) = next_type_uid++;
396 /* The following is so that the debug code for
397 the copy is different from the original type.
398 The two statements usually duplicate each other
399 (because they clear fields of the same union),
400 but the optimizer should catch that. */
401 TYPE_SYMTAB_POINTER (t) = 0;
402 TYPE_SYMTAB_ADDRESS (t) = 0;
408 /* Return a copy of a chain of nodes, chained through the TREE_CHAIN field.
409 For example, this can copy a list made of TREE_LIST nodes. */
412 copy_list (tree list)
420 head = prev = copy_node (list);
421 next = TREE_CHAIN (list);
424 TREE_CHAIN (prev) = copy_node (next);
425 prev = TREE_CHAIN (prev);
426 next = TREE_CHAIN (next);
432 /* Return a newly constructed INTEGER_CST node whose constant value
433 is specified by the two ints LOW and HI.
434 The TREE_TYPE is set to `int'.
436 This function should be used via the `build_int_2' macro. */
439 build_int_2_wide (unsigned HOST_WIDE_INT low, HOST_WIDE_INT hi)
441 tree t = make_node (INTEGER_CST);
443 TREE_INT_CST_LOW (t) = low;
444 TREE_INT_CST_HIGH (t) = hi;
445 TREE_TYPE (t) = integer_type_node;
449 /* Return a new VECTOR_CST node whose type is TYPE and whose values
450 are in a list pointed by VALS. */
453 build_vector (tree type, tree vals)
455 tree v = make_node (VECTOR_CST);
456 int over1 = 0, over2 = 0;
459 TREE_VECTOR_CST_ELTS (v) = vals;
460 TREE_TYPE (v) = type;
462 /* Iterate through elements and check for overflow. */
463 for (link = vals; link; link = TREE_CHAIN (link))
465 tree value = TREE_VALUE (link);
467 over1 |= TREE_OVERFLOW (value);
468 over2 |= TREE_CONSTANT_OVERFLOW (value);
471 TREE_OVERFLOW (v) = over1;
472 TREE_CONSTANT_OVERFLOW (v) = over2;
477 /* Return a new CONSTRUCTOR node whose type is TYPE and whose values
478 are in a list pointed to by VALS. */
480 build_constructor (tree type, tree vals)
482 tree c = make_node (CONSTRUCTOR);
483 TREE_TYPE (c) = type;
484 CONSTRUCTOR_ELTS (c) = vals;
486 /* ??? May not be necessary. Mirrors what build does. */
489 TREE_SIDE_EFFECTS (c) = TREE_SIDE_EFFECTS (vals);
490 TREE_READONLY (c) = TREE_READONLY (vals);
491 TREE_CONSTANT (c) = TREE_CONSTANT (vals);
492 TREE_INVARIANT (c) = TREE_INVARIANT (vals);
498 /* Return a new REAL_CST node whose type is TYPE and value is D. */
501 build_real (tree type, REAL_VALUE_TYPE d)
507 /* ??? Used to check for overflow here via CHECK_FLOAT_TYPE.
508 Consider doing it via real_convert now. */
510 v = make_node (REAL_CST);
511 dp = ggc_alloc (sizeof (REAL_VALUE_TYPE));
512 memcpy (dp, &d, sizeof (REAL_VALUE_TYPE));
514 TREE_TYPE (v) = type;
515 TREE_REAL_CST_PTR (v) = dp;
516 TREE_OVERFLOW (v) = TREE_CONSTANT_OVERFLOW (v) = overflow;
520 /* Return a new REAL_CST node whose type is TYPE
521 and whose value is the integer value of the INTEGER_CST node I. */
524 real_value_from_int_cst (tree type, tree i)
528 /* Clear all bits of the real value type so that we can later do
529 bitwise comparisons to see if two values are the same. */
530 memset (&d, 0, sizeof d);
532 real_from_integer (&d, type ? TYPE_MODE (type) : VOIDmode,
533 TREE_INT_CST_LOW (i), TREE_INT_CST_HIGH (i),
534 TYPE_UNSIGNED (TREE_TYPE (i)));
538 /* Given a tree representing an integer constant I, return a tree
539 representing the same value as a floating-point constant of type TYPE. */
542 build_real_from_int_cst (tree type, tree i)
545 int overflow = TREE_OVERFLOW (i);
547 v = build_real (type, real_value_from_int_cst (type, i));
549 TREE_OVERFLOW (v) |= overflow;
550 TREE_CONSTANT_OVERFLOW (v) |= overflow;
554 /* Return a newly constructed STRING_CST node whose value is
555 the LEN characters at STR.
556 The TREE_TYPE is not initialized. */
559 build_string (int len, const char *str)
561 tree s = make_node (STRING_CST);
563 TREE_STRING_LENGTH (s) = len;
564 TREE_STRING_POINTER (s) = ggc_alloc_string (str, len);
569 /* Return a newly constructed COMPLEX_CST node whose value is
570 specified by the real and imaginary parts REAL and IMAG.
571 Both REAL and IMAG should be constant nodes. TYPE, if specified,
572 will be the type of the COMPLEX_CST; otherwise a new type will be made. */
575 build_complex (tree type, tree real, tree imag)
577 tree t = make_node (COMPLEX_CST);
579 TREE_REALPART (t) = real;
580 TREE_IMAGPART (t) = imag;
581 TREE_TYPE (t) = type ? type : build_complex_type (TREE_TYPE (real));
582 TREE_OVERFLOW (t) = TREE_OVERFLOW (real) | TREE_OVERFLOW (imag);
583 TREE_CONSTANT_OVERFLOW (t)
584 = TREE_CONSTANT_OVERFLOW (real) | TREE_CONSTANT_OVERFLOW (imag);
588 /* Build a newly constructed TREE_VEC node of length LEN. */
591 make_tree_vec_stat (int len MEM_STAT_DECL)
594 int length = (len - 1) * sizeof (tree) + sizeof (struct tree_vec);
596 #ifdef GATHER_STATISTICS
597 tree_node_counts[(int) vec_kind]++;
598 tree_node_sizes[(int) vec_kind] += length;
601 t = ggc_alloc_zone_stat (length, tree_zone PASS_MEM_STAT);
603 memset (t, 0, length);
605 TREE_SET_CODE (t, TREE_VEC);
606 TREE_VEC_LENGTH (t) = len;
611 /* Return 1 if EXPR is the integer constant zero or a complex constant
615 integer_zerop (tree expr)
619 return ((TREE_CODE (expr) == INTEGER_CST
620 && ! TREE_CONSTANT_OVERFLOW (expr)
621 && TREE_INT_CST_LOW (expr) == 0
622 && TREE_INT_CST_HIGH (expr) == 0)
623 || (TREE_CODE (expr) == COMPLEX_CST
624 && integer_zerop (TREE_REALPART (expr))
625 && integer_zerop (TREE_IMAGPART (expr))));
628 /* Return 1 if EXPR is the integer constant one or the corresponding
632 integer_onep (tree expr)
636 return ((TREE_CODE (expr) == INTEGER_CST
637 && ! TREE_CONSTANT_OVERFLOW (expr)
638 && TREE_INT_CST_LOW (expr) == 1
639 && TREE_INT_CST_HIGH (expr) == 0)
640 || (TREE_CODE (expr) == COMPLEX_CST
641 && integer_onep (TREE_REALPART (expr))
642 && integer_zerop (TREE_IMAGPART (expr))));
645 /* Return 1 if EXPR is an integer containing all 1's in as much precision as
646 it contains. Likewise for the corresponding complex constant. */
649 integer_all_onesp (tree expr)
656 if (TREE_CODE (expr) == COMPLEX_CST
657 && integer_all_onesp (TREE_REALPART (expr))
658 && integer_zerop (TREE_IMAGPART (expr)))
661 else if (TREE_CODE (expr) != INTEGER_CST
662 || TREE_CONSTANT_OVERFLOW (expr))
665 uns = TYPE_UNSIGNED (TREE_TYPE (expr));
667 return (TREE_INT_CST_LOW (expr) == ~(unsigned HOST_WIDE_INT) 0
668 && TREE_INT_CST_HIGH (expr) == -1);
670 /* Note that using TYPE_PRECISION here is wrong. We care about the
671 actual bits, not the (arbitrary) range of the type. */
672 prec = GET_MODE_BITSIZE (TYPE_MODE (TREE_TYPE (expr)));
673 if (prec >= HOST_BITS_PER_WIDE_INT)
675 HOST_WIDE_INT high_value;
678 shift_amount = prec - HOST_BITS_PER_WIDE_INT;
680 if (shift_amount > HOST_BITS_PER_WIDE_INT)
681 /* Can not handle precisions greater than twice the host int size. */
683 else if (shift_amount == HOST_BITS_PER_WIDE_INT)
684 /* Shifting by the host word size is undefined according to the ANSI
685 standard, so we must handle this as a special case. */
688 high_value = ((HOST_WIDE_INT) 1 << shift_amount) - 1;
690 return (TREE_INT_CST_LOW (expr) == ~(unsigned HOST_WIDE_INT) 0
691 && TREE_INT_CST_HIGH (expr) == high_value);
694 return TREE_INT_CST_LOW (expr) == ((unsigned HOST_WIDE_INT) 1 << prec) - 1;
697 /* Return 1 if EXPR is an integer constant that is a power of 2 (i.e., has only
701 integer_pow2p (tree expr)
704 HOST_WIDE_INT high, low;
708 if (TREE_CODE (expr) == COMPLEX_CST
709 && integer_pow2p (TREE_REALPART (expr))
710 && integer_zerop (TREE_IMAGPART (expr)))
713 if (TREE_CODE (expr) != INTEGER_CST || TREE_CONSTANT_OVERFLOW (expr))
716 prec = (POINTER_TYPE_P (TREE_TYPE (expr))
717 ? POINTER_SIZE : TYPE_PRECISION (TREE_TYPE (expr)));
718 high = TREE_INT_CST_HIGH (expr);
719 low = TREE_INT_CST_LOW (expr);
721 /* First clear all bits that are beyond the type's precision in case
722 we've been sign extended. */
724 if (prec == 2 * HOST_BITS_PER_WIDE_INT)
726 else if (prec > HOST_BITS_PER_WIDE_INT)
727 high &= ~((HOST_WIDE_INT) (-1) << (prec - HOST_BITS_PER_WIDE_INT));
731 if (prec < HOST_BITS_PER_WIDE_INT)
732 low &= ~((HOST_WIDE_INT) (-1) << prec);
735 if (high == 0 && low == 0)
738 return ((high == 0 && (low & (low - 1)) == 0)
739 || (low == 0 && (high & (high - 1)) == 0));
742 /* Return 1 if EXPR is an integer constant other than zero or a
743 complex constant other than zero. */
746 integer_nonzerop (tree expr)
750 return ((TREE_CODE (expr) == INTEGER_CST
751 && ! TREE_CONSTANT_OVERFLOW (expr)
752 && (TREE_INT_CST_LOW (expr) != 0
753 || TREE_INT_CST_HIGH (expr) != 0))
754 || (TREE_CODE (expr) == COMPLEX_CST
755 && (integer_nonzerop (TREE_REALPART (expr))
756 || integer_nonzerop (TREE_IMAGPART (expr)))));
759 /* Return the power of two represented by a tree node known to be a
763 tree_log2 (tree expr)
766 HOST_WIDE_INT high, low;
770 if (TREE_CODE (expr) == COMPLEX_CST)
771 return tree_log2 (TREE_REALPART (expr));
773 prec = (POINTER_TYPE_P (TREE_TYPE (expr))
774 ? POINTER_SIZE : TYPE_PRECISION (TREE_TYPE (expr)));
776 high = TREE_INT_CST_HIGH (expr);
777 low = TREE_INT_CST_LOW (expr);
779 /* First clear all bits that are beyond the type's precision in case
780 we've been sign extended. */
782 if (prec == 2 * HOST_BITS_PER_WIDE_INT)
784 else if (prec > HOST_BITS_PER_WIDE_INT)
785 high &= ~((HOST_WIDE_INT) (-1) << (prec - HOST_BITS_PER_WIDE_INT));
789 if (prec < HOST_BITS_PER_WIDE_INT)
790 low &= ~((HOST_WIDE_INT) (-1) << prec);
793 return (high != 0 ? HOST_BITS_PER_WIDE_INT + exact_log2 (high)
797 /* Similar, but return the largest integer Y such that 2 ** Y is less
798 than or equal to EXPR. */
801 tree_floor_log2 (tree expr)
804 HOST_WIDE_INT high, low;
808 if (TREE_CODE (expr) == COMPLEX_CST)
809 return tree_log2 (TREE_REALPART (expr));
811 prec = (POINTER_TYPE_P (TREE_TYPE (expr))
812 ? POINTER_SIZE : TYPE_PRECISION (TREE_TYPE (expr)));
814 high = TREE_INT_CST_HIGH (expr);
815 low = TREE_INT_CST_LOW (expr);
817 /* First clear all bits that are beyond the type's precision in case
818 we've been sign extended. Ignore if type's precision hasn't been set
819 since what we are doing is setting it. */
821 if (prec == 2 * HOST_BITS_PER_WIDE_INT || prec == 0)
823 else if (prec > HOST_BITS_PER_WIDE_INT)
824 high &= ~((HOST_WIDE_INT) (-1) << (prec - HOST_BITS_PER_WIDE_INT));
828 if (prec < HOST_BITS_PER_WIDE_INT)
829 low &= ~((HOST_WIDE_INT) (-1) << prec);
832 return (high != 0 ? HOST_BITS_PER_WIDE_INT + floor_log2 (high)
836 /* Return 1 if EXPR is the real constant zero. */
839 real_zerop (tree expr)
843 return ((TREE_CODE (expr) == REAL_CST
844 && ! TREE_CONSTANT_OVERFLOW (expr)
845 && REAL_VALUES_EQUAL (TREE_REAL_CST (expr), dconst0))
846 || (TREE_CODE (expr) == COMPLEX_CST
847 && real_zerop (TREE_REALPART (expr))
848 && real_zerop (TREE_IMAGPART (expr))));
851 /* Return 1 if EXPR is the real constant one in real or complex form. */
854 real_onep (tree expr)
858 return ((TREE_CODE (expr) == REAL_CST
859 && ! TREE_CONSTANT_OVERFLOW (expr)
860 && REAL_VALUES_EQUAL (TREE_REAL_CST (expr), dconst1))
861 || (TREE_CODE (expr) == COMPLEX_CST
862 && real_onep (TREE_REALPART (expr))
863 && real_zerop (TREE_IMAGPART (expr))));
866 /* Return 1 if EXPR is the real constant two. */
869 real_twop (tree expr)
873 return ((TREE_CODE (expr) == REAL_CST
874 && ! TREE_CONSTANT_OVERFLOW (expr)
875 && REAL_VALUES_EQUAL (TREE_REAL_CST (expr), dconst2))
876 || (TREE_CODE (expr) == COMPLEX_CST
877 && real_twop (TREE_REALPART (expr))
878 && real_zerop (TREE_IMAGPART (expr))));
881 /* Return 1 if EXPR is the real constant minus one. */
884 real_minus_onep (tree expr)
888 return ((TREE_CODE (expr) == REAL_CST
889 && ! TREE_CONSTANT_OVERFLOW (expr)
890 && REAL_VALUES_EQUAL (TREE_REAL_CST (expr), dconstm1))
891 || (TREE_CODE (expr) == COMPLEX_CST
892 && real_minus_onep (TREE_REALPART (expr))
893 && real_zerop (TREE_IMAGPART (expr))));
896 /* Nonzero if EXP is a constant or a cast of a constant. */
899 really_constant_p (tree exp)
901 /* This is not quite the same as STRIP_NOPS. It does more. */
902 while (TREE_CODE (exp) == NOP_EXPR
903 || TREE_CODE (exp) == CONVERT_EXPR
904 || TREE_CODE (exp) == NON_LVALUE_EXPR)
905 exp = TREE_OPERAND (exp, 0);
906 return TREE_CONSTANT (exp);
909 /* Return first list element whose TREE_VALUE is ELEM.
910 Return 0 if ELEM is not in LIST. */
913 value_member (tree elem, tree list)
917 if (elem == TREE_VALUE (list))
919 list = TREE_CHAIN (list);
924 /* Return first list element whose TREE_PURPOSE is ELEM.
925 Return 0 if ELEM is not in LIST. */
928 purpose_member (tree elem, tree list)
932 if (elem == TREE_PURPOSE (list))
934 list = TREE_CHAIN (list);
939 /* Return first list element whose BINFO_TYPE is ELEM.
940 Return 0 if ELEM is not in LIST. */
943 binfo_member (tree elem, tree list)
947 if (elem == BINFO_TYPE (list))
949 list = TREE_CHAIN (list);
954 /* Return nonzero if ELEM is part of the chain CHAIN. */
957 chain_member (tree elem, tree chain)
963 chain = TREE_CHAIN (chain);
969 /* Return the length of a chain of nodes chained through TREE_CHAIN.
970 We expect a null pointer to mark the end of the chain.
971 This is the Lisp primitive `length'. */
977 #ifdef ENABLE_TREE_CHECKING
985 #ifdef ENABLE_TREE_CHECKING
997 /* Returns the number of FIELD_DECLs in TYPE. */
1000 fields_length (tree type)
1002 tree t = TYPE_FIELDS (type);
1005 for (; t; t = TREE_CHAIN (t))
1006 if (TREE_CODE (t) == FIELD_DECL)
1012 /* Concatenate two chains of nodes (chained through TREE_CHAIN)
1013 by modifying the last node in chain 1 to point to chain 2.
1014 This is the Lisp primitive `nconc'. */
1017 chainon (tree op1, tree op2)
1026 for (t1 = op1; TREE_CHAIN (t1); t1 = TREE_CHAIN (t1))
1028 TREE_CHAIN (t1) = op2;
1030 #ifdef ENABLE_TREE_CHECKING
1033 for (t2 = op2; t2; t2 = TREE_CHAIN (t2))
1035 abort (); /* Circularity created. */
1042 /* Return the last node in a chain of nodes (chained through TREE_CHAIN). */
1045 tree_last (tree chain)
1049 while ((next = TREE_CHAIN (chain)))
1054 /* Reverse the order of elements in the chain T,
1055 and return the new head of the chain (old last element). */
1060 tree prev = 0, decl, next;
1061 for (decl = t; decl; decl = next)
1063 next = TREE_CHAIN (decl);
1064 TREE_CHAIN (decl) = prev;
1070 /* Return a newly created TREE_LIST node whose
1071 purpose and value fields are PARM and VALUE. */
1074 build_tree_list_stat (tree parm, tree value MEM_STAT_DECL)
1076 tree t = make_node_stat (TREE_LIST PASS_MEM_STAT);
1077 TREE_PURPOSE (t) = parm;
1078 TREE_VALUE (t) = value;
1082 /* Return a newly created TREE_LIST node whose
1083 purpose and value fields are PURPOSE and VALUE
1084 and whose TREE_CHAIN is CHAIN. */
1087 tree_cons_stat (tree purpose, tree value, tree chain MEM_STAT_DECL)
1091 node = ggc_alloc_zone_stat (sizeof (struct tree_list),
1092 tree_zone PASS_MEM_STAT);
1094 memset (node, 0, sizeof (struct tree_common));
1096 #ifdef GATHER_STATISTICS
1097 tree_node_counts[(int) x_kind]++;
1098 tree_node_sizes[(int) x_kind] += sizeof (struct tree_list);
1101 TREE_SET_CODE (node, TREE_LIST);
1102 TREE_CHAIN (node) = chain;
1103 TREE_PURPOSE (node) = purpose;
1104 TREE_VALUE (node) = value;
1109 /* Return the size nominally occupied by an object of type TYPE
1110 when it resides in memory. The value is measured in units of bytes,
1111 and its data type is that normally used for type sizes
1112 (which is the first type created by make_signed_type or
1113 make_unsigned_type). */
1116 size_in_bytes (tree type)
1120 if (type == error_mark_node)
1121 return integer_zero_node;
1123 type = TYPE_MAIN_VARIANT (type);
1124 t = TYPE_SIZE_UNIT (type);
1128 lang_hooks.types.incomplete_type_error (NULL_TREE, type);
1129 return size_zero_node;
1132 if (TREE_CODE (t) == INTEGER_CST)
1133 force_fit_type (t, 0);
1138 /* Return the size of TYPE (in bytes) as a wide integer
1139 or return -1 if the size can vary or is larger than an integer. */
1142 int_size_in_bytes (tree type)
1146 if (type == error_mark_node)
1149 type = TYPE_MAIN_VARIANT (type);
1150 t = TYPE_SIZE_UNIT (type);
1152 || TREE_CODE (t) != INTEGER_CST
1153 || TREE_OVERFLOW (t)
1154 || TREE_INT_CST_HIGH (t) != 0
1155 /* If the result would appear negative, it's too big to represent. */
1156 || (HOST_WIDE_INT) TREE_INT_CST_LOW (t) < 0)
1159 return TREE_INT_CST_LOW (t);
1162 /* Return the bit position of FIELD, in bits from the start of the record.
1163 This is a tree of type bitsizetype. */
1166 bit_position (tree field)
1168 return bit_from_pos (DECL_FIELD_OFFSET (field),
1169 DECL_FIELD_BIT_OFFSET (field));
1172 /* Likewise, but return as an integer. Abort if it cannot be represented
1173 in that way (since it could be a signed value, we don't have the option
1174 of returning -1 like int_size_in_byte can. */
1177 int_bit_position (tree field)
1179 return tree_low_cst (bit_position (field), 0);
1182 /* Return the byte position of FIELD, in bytes from the start of the record.
1183 This is a tree of type sizetype. */
1186 byte_position (tree field)
1188 return byte_from_pos (DECL_FIELD_OFFSET (field),
1189 DECL_FIELD_BIT_OFFSET (field));
1192 /* Likewise, but return as an integer. Abort if it cannot be represented
1193 in that way (since it could be a signed value, we don't have the option
1194 of returning -1 like int_size_in_byte can. */
1197 int_byte_position (tree field)
1199 return tree_low_cst (byte_position (field), 0);
1202 /* Return the strictest alignment, in bits, that T is known to have. */
1207 unsigned int align0, align1;
1209 switch (TREE_CODE (t))
1211 case NOP_EXPR: case CONVERT_EXPR: case NON_LVALUE_EXPR:
1212 /* If we have conversions, we know that the alignment of the
1213 object must meet each of the alignments of the types. */
1214 align0 = expr_align (TREE_OPERAND (t, 0));
1215 align1 = TYPE_ALIGN (TREE_TYPE (t));
1216 return MAX (align0, align1);
1218 case SAVE_EXPR: case COMPOUND_EXPR: case MODIFY_EXPR:
1219 case INIT_EXPR: case TARGET_EXPR: case WITH_CLEANUP_EXPR:
1220 case CLEANUP_POINT_EXPR: case UNSAVE_EXPR:
1221 /* These don't change the alignment of an object. */
1222 return expr_align (TREE_OPERAND (t, 0));
1225 /* The best we can do is say that the alignment is the least aligned
1227 align0 = expr_align (TREE_OPERAND (t, 1));
1228 align1 = expr_align (TREE_OPERAND (t, 2));
1229 return MIN (align0, align1);
1231 case LABEL_DECL: case CONST_DECL:
1232 case VAR_DECL: case PARM_DECL: case RESULT_DECL:
1233 if (DECL_ALIGN (t) != 0)
1234 return DECL_ALIGN (t);
1238 return FUNCTION_BOUNDARY;
1244 /* Otherwise take the alignment from that of the type. */
1245 return TYPE_ALIGN (TREE_TYPE (t));
1248 /* Return, as a tree node, the number of elements for TYPE (which is an
1249 ARRAY_TYPE) minus one. This counts only elements of the top array. */
1252 array_type_nelts (tree type)
1254 tree index_type, min, max;
1256 /* If they did it with unspecified bounds, then we should have already
1257 given an error about it before we got here. */
1258 if (! TYPE_DOMAIN (type))
1259 return error_mark_node;
1261 index_type = TYPE_DOMAIN (type);
1262 min = TYPE_MIN_VALUE (index_type);
1263 max = TYPE_MAX_VALUE (index_type);
1265 return (integer_zerop (min)
1267 : fold (build (MINUS_EXPR, TREE_TYPE (max), max, min)));
1270 /* Return nonzero if arg is static -- a reference to an object in
1271 static storage. This is not the same as the C meaning of `static'. */
1276 switch (TREE_CODE (arg))
1279 /* Nested functions aren't static, since taking their address
1280 involves a trampoline. */
1281 return ((decl_function_context (arg) == 0 || DECL_NO_STATIC_CHAIN (arg))
1282 && ! DECL_NON_ADDR_CONST_P (arg));
1285 return ((TREE_STATIC (arg) || DECL_EXTERNAL (arg))
1286 && ! DECL_THREAD_LOCAL (arg)
1287 && ! DECL_NON_ADDR_CONST_P (arg));
1290 return TREE_STATIC (arg);
1297 /* If the thing being referenced is not a field, then it is
1298 something language specific. */
1299 if (TREE_CODE (TREE_OPERAND (arg, 1)) != FIELD_DECL)
1300 return (*lang_hooks.staticp) (arg);
1302 /* If we are referencing a bitfield, we can't evaluate an
1303 ADDR_EXPR at compile time and so it isn't a constant. */
1304 if (DECL_BIT_FIELD (TREE_OPERAND (arg, 1)))
1307 return staticp (TREE_OPERAND (arg, 0));
1313 /* This case is technically correct, but results in setting
1314 TREE_CONSTANT on ADDR_EXPRs that cannot be evaluated at
1317 return TREE_CONSTANT (TREE_OPERAND (arg, 0));
1321 case ARRAY_RANGE_REF:
1322 if (TREE_CODE (TYPE_SIZE (TREE_TYPE (arg))) == INTEGER_CST
1323 && TREE_CODE (TREE_OPERAND (arg, 1)) == INTEGER_CST)
1324 return staticp (TREE_OPERAND (arg, 0));
1329 if ((unsigned int) TREE_CODE (arg)
1330 >= (unsigned int) LAST_AND_UNUSED_TREE_CODE)
1331 return lang_hooks.staticp (arg);
1337 /* Wrap a SAVE_EXPR around EXPR, if appropriate.
1338 Do this to any expression which may be used in more than one place,
1339 but must be evaluated only once.
1341 Normally, expand_expr would reevaluate the expression each time.
1342 Calling save_expr produces something that is evaluated and recorded
1343 the first time expand_expr is called on it. Subsequent calls to
1344 expand_expr just reuse the recorded value.
1346 The call to expand_expr that generates code that actually computes
1347 the value is the first call *at compile time*. Subsequent calls
1348 *at compile time* generate code to use the saved value.
1349 This produces correct result provided that *at run time* control
1350 always flows through the insns made by the first expand_expr
1351 before reaching the other places where the save_expr was evaluated.
1352 You, the caller of save_expr, must make sure this is so.
1354 Constants, and certain read-only nodes, are returned with no
1355 SAVE_EXPR because that is safe. Expressions containing placeholders
1356 are not touched; see tree.def for an explanation of what these
1360 save_expr (tree expr)
1362 tree t = fold (expr);
1365 /* If the tree evaluates to a constant, then we don't want to hide that
1366 fact (i.e. this allows further folding, and direct checks for constants).
1367 However, a read-only object that has side effects cannot be bypassed.
1368 Since it is no problem to reevaluate literals, we just return the
1370 inner = skip_simple_arithmetic (t);
1372 if (TREE_INVARIANT (inner)
1373 || (TREE_READONLY (inner) && ! TREE_SIDE_EFFECTS (inner))
1374 || TREE_CODE (inner) == SAVE_EXPR
1375 || TREE_CODE (inner) == ERROR_MARK)
1378 /* If INNER contains a PLACEHOLDER_EXPR, we must evaluate it each time, since
1379 it means that the size or offset of some field of an object depends on
1380 the value within another field.
1382 Note that it must not be the case that T contains both a PLACEHOLDER_EXPR
1383 and some variable since it would then need to be both evaluated once and
1384 evaluated more than once. Front-ends must assure this case cannot
1385 happen by surrounding any such subexpressions in their own SAVE_EXPR
1386 and forcing evaluation at the proper time. */
1387 if (contains_placeholder_p (inner))
1390 t = build (SAVE_EXPR, TREE_TYPE (expr), t, current_function_decl, NULL_TREE);
1392 /* This expression might be placed ahead of a jump to ensure that the
1393 value was computed on both sides of the jump. So make sure it isn't
1394 eliminated as dead. */
1395 TREE_SIDE_EFFECTS (t) = 1;
1396 TREE_READONLY (t) = 1;
1397 TREE_INVARIANT (t) = 1;
1401 /* Look inside EXPR and into any simple arithmetic operations. Return
1402 the innermost non-arithmetic node. */
1405 skip_simple_arithmetic (tree expr)
1409 /* We don't care about whether this can be used as an lvalue in this
1411 while (TREE_CODE (expr) == NON_LVALUE_EXPR)
1412 expr = TREE_OPERAND (expr, 0);
1414 /* If we have simple operations applied to a SAVE_EXPR or to a SAVE_EXPR and
1415 a constant, it will be more efficient to not make another SAVE_EXPR since
1416 it will allow better simplification and GCSE will be able to merge the
1417 computations if they actually occur. */
1421 if (TREE_CODE_CLASS (TREE_CODE (inner)) == '1')
1422 inner = TREE_OPERAND (inner, 0);
1423 else if (TREE_CODE_CLASS (TREE_CODE (inner)) == '2')
1425 if (TREE_INVARIANT (TREE_OPERAND (inner, 1)))
1426 inner = TREE_OPERAND (inner, 0);
1427 else if (TREE_INVARIANT (TREE_OPERAND (inner, 0)))
1428 inner = TREE_OPERAND (inner, 1);
1439 /* Return TRUE if EXPR is a SAVE_EXPR or wraps simple arithmetic around a
1440 SAVE_EXPR. Return FALSE otherwise. */
1443 saved_expr_p (tree expr)
1445 return TREE_CODE (skip_simple_arithmetic (expr)) == SAVE_EXPR;
1448 /* Arrange for an expression to be expanded multiple independent
1449 times. This is useful for cleanup actions, as the backend can
1450 expand them multiple times in different places. */
1453 unsave_expr (tree expr)
1457 /* If this is already protected, no sense in protecting it again. */
1458 if (TREE_CODE (expr) == UNSAVE_EXPR)
1461 t = build1 (UNSAVE_EXPR, TREE_TYPE (expr), expr);
1462 TREE_SIDE_EFFECTS (t) = TREE_SIDE_EFFECTS (expr);
1466 /* Returns the index of the first non-tree operand for CODE, or the number
1467 of operands if all are trees. */
1470 first_rtl_op (enum tree_code code)
1476 case GOTO_SUBROUTINE_EXPR:
1479 case WITH_CLEANUP_EXPR:
1482 return TREE_CODE_LENGTH (code);
1486 /* Return which tree structure is used by T. */
1488 enum tree_node_structure_enum
1489 tree_node_structure (tree t)
1491 enum tree_code code = TREE_CODE (t);
1493 switch (TREE_CODE_CLASS (code))
1495 case 'd': return TS_DECL;
1496 case 't': return TS_TYPE;
1497 case 'b': return TS_BLOCK;
1498 case 'r': case '<': case '1': case '2': case 'e': case 's':
1500 default: /* 'c' and 'x' */
1506 case INTEGER_CST: return TS_INT_CST;
1507 case REAL_CST: return TS_REAL_CST;
1508 case COMPLEX_CST: return TS_COMPLEX;
1509 case VECTOR_CST: return TS_VECTOR;
1510 case STRING_CST: return TS_STRING;
1512 case ERROR_MARK: return TS_COMMON;
1513 case IDENTIFIER_NODE: return TS_IDENTIFIER;
1514 case TREE_LIST: return TS_LIST;
1515 case TREE_VEC: return TS_VEC;
1516 case PHI_NODE: return TS_PHI_NODE;
1517 case EPHI_NODE: return TS_EPHI_NODE;
1518 case EUSE_NODE: return TS_EUSE_NODE;
1519 case EKILL_NODE: return TS_EREF_NODE;
1520 case EEXIT_NODE: return TS_EREF_NODE;
1521 case SSA_NAME: return TS_SSA_NAME;
1522 case PLACEHOLDER_EXPR: return TS_COMMON;
1523 case STATEMENT_LIST: return TS_STATEMENT_LIST;
1530 /* Perform any modifications to EXPR required when it is unsaved. Does
1531 not recurse into EXPR's subtrees. */
1534 unsave_expr_1 (tree expr)
1536 switch (TREE_CODE (expr))
1539 if (! SAVE_EXPR_PERSISTENT_P (expr))
1540 SAVE_EXPR_RTL (expr) = 0;
1544 /* Don't mess with a TARGET_EXPR that hasn't been expanded.
1545 It's OK for this to happen if it was part of a subtree that
1546 isn't immediately expanded, such as operand 2 of another
1548 if (TREE_OPERAND (expr, 1))
1551 TREE_OPERAND (expr, 1) = TREE_OPERAND (expr, 3);
1552 TREE_OPERAND (expr, 3) = NULL_TREE;
1556 /* I don't yet know how to emit a sequence multiple times. */
1557 if (RTL_EXPR_SEQUENCE (expr) != 0)
1566 /* Return 0 if it is safe to evaluate EXPR multiple times,
1567 return 1 if it is safe if EXPR is unsaved afterward, or
1568 return 2 if it is completely unsafe.
1570 This assumes that CALL_EXPRs and TARGET_EXPRs are never replicated in
1571 an expression tree, so that it safe to unsave them and the surrounding
1572 context will be correct.
1574 SAVE_EXPRs basically *only* appear replicated in an expression tree,
1575 occasionally across the whole of a function. It is therefore only
1576 safe to unsave a SAVE_EXPR if you know that all occurrences appear
1577 below the UNSAVE_EXPR.
1579 RTL_EXPRs consume their rtl during evaluation. It is therefore
1580 never possible to unsave them. */
1583 unsafe_for_reeval (tree expr)
1586 enum tree_code code;
1591 if (expr == NULL_TREE)
1594 code = TREE_CODE (expr);
1595 first_rtl = first_rtl_op (code);
1603 /* A label can only be emitted once. */
1612 for (exp = expr; exp != 0; exp = TREE_CHAIN (exp))
1614 tmp = unsafe_for_reeval (TREE_VALUE (exp));
1615 unsafeness = MAX (tmp, unsafeness);
1621 tmp2 = unsafe_for_reeval (TREE_OPERAND (expr, 0));
1622 tmp = unsafe_for_reeval (TREE_OPERAND (expr, 1));
1623 return MAX (MAX (tmp, 1), tmp2);
1629 case EXIT_BLOCK_EXPR:
1630 /* EXIT_BLOCK_LABELED_BLOCK, a.k.a. TREE_OPERAND (expr, 0), holds
1631 a reference to an ancestor LABELED_BLOCK, so we need to avoid
1632 unbounded recursion in the 'e' traversal code below. */
1633 exp = EXIT_BLOCK_RETURN (expr);
1634 return exp ? unsafe_for_reeval (exp) : 0;
1637 tmp = lang_hooks.unsafe_for_reeval (expr);
1643 switch (TREE_CODE_CLASS (code))
1645 case 'c': /* a constant */
1646 case 't': /* a type node */
1647 case 'x': /* something random, like an identifier or an ERROR_MARK. */
1648 case 'd': /* A decl node */
1649 case 'b': /* A block node */
1652 case 'e': /* an expression */
1653 case 'r': /* a reference */
1654 case 's': /* an expression with side effects */
1655 case '<': /* a comparison expression */
1656 case '2': /* a binary arithmetic expression */
1657 case '1': /* a unary arithmetic expression */
1658 for (i = first_rtl - 1; i >= 0; i--)
1660 tmp = unsafe_for_reeval (TREE_OPERAND (expr, i));
1661 unsafeness = MAX (tmp, unsafeness);
1671 /* Return 1 if EXP contains a PLACEHOLDER_EXPR; i.e., if it represents a size
1672 or offset that depends on a field within a record. */
1675 contains_placeholder_p (tree exp)
1677 enum tree_code code;
1683 code = TREE_CODE (exp);
1684 if (code == PLACEHOLDER_EXPR)
1687 switch (TREE_CODE_CLASS (code))
1690 /* Don't look at any PLACEHOLDER_EXPRs that might be in index or bit
1691 position computations since they will be converted into a
1692 WITH_RECORD_EXPR involving the reference, which will assume
1693 here will be valid. */
1694 return CONTAINS_PLACEHOLDER_P (TREE_OPERAND (exp, 0));
1697 if (code == TREE_LIST)
1698 return (CONTAINS_PLACEHOLDER_P (TREE_VALUE (exp))
1699 || CONTAINS_PLACEHOLDER_P (TREE_CHAIN (exp)));
1708 /* Ignoring the first operand isn't quite right, but works best. */
1709 return CONTAINS_PLACEHOLDER_P (TREE_OPERAND (exp, 1));
1712 return (CONTAINS_PLACEHOLDER_P (TREE_OPERAND (exp, 0))
1713 || CONTAINS_PLACEHOLDER_P (TREE_OPERAND (exp, 1))
1714 || CONTAINS_PLACEHOLDER_P (TREE_OPERAND (exp, 2)));
1717 /* If we already know this doesn't have a placeholder, don't
1719 if (SAVE_EXPR_NOPLACEHOLDER (exp) || SAVE_EXPR_RTL (exp) != 0)
1722 SAVE_EXPR_NOPLACEHOLDER (exp) = 1;
1723 result = CONTAINS_PLACEHOLDER_P (TREE_OPERAND (exp, 0));
1725 SAVE_EXPR_NOPLACEHOLDER (exp) = 0;
1733 switch (first_rtl_op (code))
1736 return CONTAINS_PLACEHOLDER_P (TREE_OPERAND (exp, 0));
1738 return (CONTAINS_PLACEHOLDER_P (TREE_OPERAND (exp, 0))
1739 || CONTAINS_PLACEHOLDER_P (TREE_OPERAND (exp, 1)));
1750 /* Return 1 if any part of the computation of TYPE involves a PLACEHOLDER_EXPR.
1751 This includes size, bounds, qualifiers (for QUAL_UNION_TYPE) and field
1755 type_contains_placeholder_p (tree type)
1757 /* If the size contains a placeholder or the parent type (component type in
1758 the case of arrays) type involves a placeholder, this type does. */
1759 if (CONTAINS_PLACEHOLDER_P (TYPE_SIZE (type))
1760 || CONTAINS_PLACEHOLDER_P (TYPE_SIZE_UNIT (type))
1761 || (TREE_TYPE (type) != 0
1762 && type_contains_placeholder_p (TREE_TYPE (type))))
1765 /* Now do type-specific checks. Note that the last part of the check above
1766 greatly limits what we have to do below. */
1767 switch (TREE_CODE (type))
1776 case REFERENCE_TYPE:
1784 /* Here we just check the bounds. */
1785 return (CONTAINS_PLACEHOLDER_P (TYPE_MIN_VALUE (type))
1786 || CONTAINS_PLACEHOLDER_P (TYPE_MAX_VALUE (type)));
1791 /* We're already checked the component type (TREE_TYPE), so just check
1793 return type_contains_placeholder_p (TYPE_DOMAIN (type));
1797 case QUAL_UNION_TYPE:
1799 static tree seen_types = 0;
1803 /* We have to be careful here that we don't end up in infinite
1804 recursions due to a field of a type being a pointer to that type
1805 or to a mutually-recursive type. So we store a list of record
1806 types that we've seen and see if this type is in them. To save
1807 memory, we don't use a list for just one type. Here we check
1808 whether we've seen this type before and store it if not. */
1809 if (seen_types == 0)
1811 else if (TREE_CODE (seen_types) != TREE_LIST)
1813 if (seen_types == type)
1816 seen_types = tree_cons (NULL_TREE, type,
1817 build_tree_list (NULL_TREE, seen_types));
1821 if (value_member (type, seen_types) != 0)
1824 seen_types = tree_cons (NULL_TREE, type, seen_types);
1827 for (field = TYPE_FIELDS (type); field; field = TREE_CHAIN (field))
1828 if (TREE_CODE (field) == FIELD_DECL
1829 && (CONTAINS_PLACEHOLDER_P (DECL_FIELD_OFFSET (field))
1830 || (TREE_CODE (type) == QUAL_UNION_TYPE
1831 && CONTAINS_PLACEHOLDER_P (DECL_QUALIFIER (field)))
1832 || type_contains_placeholder_p (TREE_TYPE (field))))
1838 /* Now remove us from seen_types and return the result. */
1839 if (seen_types == type)
1842 seen_types = TREE_CHAIN (seen_types);
1852 /* Return 1 if EXP contains any expressions that produce cleanups for an
1853 outer scope to deal with. Used by fold. */
1856 has_cleanups (tree exp)
1860 if (! TREE_SIDE_EFFECTS (exp))
1863 switch (TREE_CODE (exp))
1866 case GOTO_SUBROUTINE_EXPR:
1867 case WITH_CLEANUP_EXPR:
1870 case CLEANUP_POINT_EXPR:
1874 for (exp = TREE_OPERAND (exp, 1); exp; exp = TREE_CHAIN (exp))
1876 cmp = has_cleanups (TREE_VALUE (exp));
1886 /* This general rule works for most tree codes. All exceptions should be
1887 handled above. If this is a language-specific tree code, we can't
1888 trust what might be in the operand, so say we don't know
1890 if ((int) TREE_CODE (exp) >= (int) LAST_AND_UNUSED_TREE_CODE)
1893 nops = first_rtl_op (TREE_CODE (exp));
1894 for (i = 0; i < nops; i++)
1895 if (TREE_OPERAND (exp, i) != 0)
1897 int type = TREE_CODE_CLASS (TREE_CODE (TREE_OPERAND (exp, i)));
1898 if (type == 'e' || type == '<' || type == '1' || type == '2'
1899 || type == 'r' || type == 's')
1901 cmp = has_cleanups (TREE_OPERAND (exp, i));
1910 /* Given a tree EXP, a FIELD_DECL F, and a replacement value R,
1911 return a tree with all occurrences of references to F in a
1912 PLACEHOLDER_EXPR replaced by R. Note that we assume here that EXP
1913 contains only arithmetic expressions or a CALL_EXPR with a
1914 PLACEHOLDER_EXPR occurring only in its arglist. */
1917 substitute_in_expr (tree exp, tree f, tree r)
1919 enum tree_code code = TREE_CODE (exp);
1924 /* We handle TREE_LIST and COMPONENT_REF separately. */
1925 if (code == TREE_LIST)
1927 op0 = SUBSTITUTE_IN_EXPR (TREE_CHAIN (exp), f, r);
1928 op1 = SUBSTITUTE_IN_EXPR (TREE_VALUE (exp), f, r);
1929 if (op0 == TREE_CHAIN (exp) && op1 == TREE_VALUE (exp))
1932 return tree_cons (TREE_PURPOSE (exp), op1, op0);
1934 else if (code == COMPONENT_REF)
1936 /* If this expression is getting a value from a PLACEHOLDER_EXPR
1937 and it is the right field, replace it with R. */
1938 for (inner = TREE_OPERAND (exp, 0);
1939 TREE_CODE_CLASS (TREE_CODE (inner)) == 'r';
1940 inner = TREE_OPERAND (inner, 0))
1942 if (TREE_CODE (inner) == PLACEHOLDER_EXPR
1943 && TREE_OPERAND (exp, 1) == f)
1946 /* If this expression hasn't been completed let, leave it
1948 if (TREE_CODE (inner) == PLACEHOLDER_EXPR && TREE_TYPE (inner) == 0)
1951 op0 = SUBSTITUTE_IN_EXPR (TREE_OPERAND (exp, 0), f, r);
1952 if (op0 == TREE_OPERAND (exp, 0))
1955 new = fold (build (code, TREE_TYPE (exp), op0, TREE_OPERAND (exp, 1)));
1958 switch (TREE_CODE_CLASS (code))
1970 switch (first_rtl_op (code))
1976 op0 = SUBSTITUTE_IN_EXPR (TREE_OPERAND (exp, 0), f, r);
1977 if (op0 == TREE_OPERAND (exp, 0))
1980 new = fold (build1 (code, TREE_TYPE (exp), op0));
1984 op0 = SUBSTITUTE_IN_EXPR (TREE_OPERAND (exp, 0), f, r);
1985 op1 = SUBSTITUTE_IN_EXPR (TREE_OPERAND (exp, 1), f, r);
1987 if (op0 == TREE_OPERAND (exp, 0) && op1 == TREE_OPERAND (exp, 1))
1990 new = fold (build2 (code, TREE_TYPE (exp), op0, op1));
1994 op0 = SUBSTITUTE_IN_EXPR (TREE_OPERAND (exp, 0), f, r);
1995 op1 = SUBSTITUTE_IN_EXPR (TREE_OPERAND (exp, 1), f, r);
1996 op2 = SUBSTITUTE_IN_EXPR (TREE_OPERAND (exp, 2), f, r);
1998 if (op0 == TREE_OPERAND (exp, 0) && op1 == TREE_OPERAND (exp, 1)
1999 && op2 == TREE_OPERAND (exp, 2))
2002 new = fold (build3 (code, TREE_TYPE (exp), op0, op1, op2));
2014 TREE_READONLY (new) = TREE_READONLY (exp);
2018 /* Similar, but look for a PLACEHOLDER_EXPR in EXP and find a replacement
2019 for it within OBJ, a tree that is an object or a chain of references. */
2022 substitute_placeholder_in_expr (tree exp, tree obj)
2024 enum tree_code code = TREE_CODE (exp);
2025 tree op0, op1, op2, op3;
2027 /* If this is a PLACEHOLDER_EXPR, see if we find a corresponding type
2028 in the chain of OBJ. */
2029 if (code == PLACEHOLDER_EXPR)
2031 tree need_type = TYPE_MAIN_VARIANT (TREE_TYPE (exp));
2034 for (elt = obj; elt != 0;
2035 elt = ((TREE_CODE (elt) == COMPOUND_EXPR
2036 || TREE_CODE (elt) == COND_EXPR)
2037 ? TREE_OPERAND (elt, 1)
2038 : (TREE_CODE_CLASS (TREE_CODE (elt)) == 'r'
2039 || TREE_CODE_CLASS (TREE_CODE (elt)) == '1'
2040 || TREE_CODE_CLASS (TREE_CODE (elt)) == '2'
2041 || TREE_CODE_CLASS (TREE_CODE (elt)) == 'e')
2042 ? TREE_OPERAND (elt, 0) : 0))
2043 if (TYPE_MAIN_VARIANT (TREE_TYPE (elt)) == need_type)
2046 for (elt = obj; elt != 0;
2047 elt = ((TREE_CODE (elt) == COMPOUND_EXPR
2048 || TREE_CODE (elt) == COND_EXPR)
2049 ? TREE_OPERAND (elt, 1)
2050 : (TREE_CODE_CLASS (TREE_CODE (elt)) == 'r'
2051 || TREE_CODE_CLASS (TREE_CODE (elt)) == '1'
2052 || TREE_CODE_CLASS (TREE_CODE (elt)) == '2'
2053 || TREE_CODE_CLASS (TREE_CODE (elt)) == 'e')
2054 ? TREE_OPERAND (elt, 0) : 0))
2055 if (POINTER_TYPE_P (TREE_TYPE (elt))
2056 && (TYPE_MAIN_VARIANT (TREE_TYPE (TREE_TYPE (elt)))
2058 return fold (build1 (INDIRECT_REF, need_type, elt));
2060 /* If we didn't find it, return the original PLACEHOLDER_EXPR. If it
2061 survives until RTL generation, there will be an error. */
2065 /* TREE_LIST is special because we need to look at TREE_VALUE
2066 and TREE_CHAIN, not TREE_OPERANDS. */
2067 else if (code == TREE_LIST)
2069 op0 = SUBSTITUTE_PLACEHOLDER_IN_EXPR (TREE_CHAIN (exp), obj);
2070 op1 = SUBSTITUTE_PLACEHOLDER_IN_EXPR (TREE_VALUE (exp), obj);
2071 if (op0 == TREE_CHAIN (exp) && op1 == TREE_VALUE (exp))
2074 return tree_cons (TREE_PURPOSE (exp), op1, op0);
2077 switch (TREE_CODE_CLASS (code))
2091 switch (first_rtl_op (code))
2097 op0 = SUBSTITUTE_PLACEHOLDER_IN_EXPR (TREE_OPERAND (exp, 0), obj);
2098 if (op0 == TREE_OPERAND (exp, 0))
2101 return fold (build1 (code, TREE_TYPE (exp), op0));
2104 op0 = SUBSTITUTE_PLACEHOLDER_IN_EXPR (TREE_OPERAND (exp, 0), obj);
2105 op1 = SUBSTITUTE_PLACEHOLDER_IN_EXPR (TREE_OPERAND (exp, 1), obj);
2107 if (op0 == TREE_OPERAND (exp, 0) && op1 == TREE_OPERAND (exp, 1))
2110 return fold (build2 (code, TREE_TYPE (exp), op0, op1));
2113 op0 = SUBSTITUTE_PLACEHOLDER_IN_EXPR (TREE_OPERAND (exp, 0), obj);
2114 op1 = SUBSTITUTE_PLACEHOLDER_IN_EXPR (TREE_OPERAND (exp, 1), obj);
2115 op2 = SUBSTITUTE_PLACEHOLDER_IN_EXPR (TREE_OPERAND (exp, 2), obj);
2117 if (op0 == TREE_OPERAND (exp, 0) && op1 == TREE_OPERAND (exp, 1)
2118 && op2 == TREE_OPERAND (exp, 2))
2121 return fold (build3 (code, TREE_TYPE (exp), op0, op1, op2));
2124 op0 = SUBSTITUTE_PLACEHOLDER_IN_EXPR (TREE_OPERAND (exp, 0), obj);
2125 op1 = SUBSTITUTE_PLACEHOLDER_IN_EXPR (TREE_OPERAND (exp, 1), obj);
2126 op2 = SUBSTITUTE_PLACEHOLDER_IN_EXPR (TREE_OPERAND (exp, 2), obj);
2127 op3 = SUBSTITUTE_PLACEHOLDER_IN_EXPR (TREE_OPERAND (exp, 3), obj);
2129 if (op0 == TREE_OPERAND (exp, 0) && op1 == TREE_OPERAND (exp, 1)
2130 && op2 == TREE_OPERAND (exp, 2)
2131 && op3 == TREE_OPERAND (exp, 3))
2134 return fold (build4 (code, TREE_TYPE (exp), op0, op1, op2, op3));
2146 /* Stabilize a reference so that we can use it any number of times
2147 without causing its operands to be evaluated more than once.
2148 Returns the stabilized reference. This works by means of save_expr,
2149 so see the caveats in the comments about save_expr.
2151 Also allows conversion expressions whose operands are references.
2152 Any other kind of expression is returned unchanged. */
2155 stabilize_reference (tree ref)
2158 enum tree_code code = TREE_CODE (ref);
2165 /* No action is needed in this case. */
2171 case FIX_TRUNC_EXPR:
2172 case FIX_FLOOR_EXPR:
2173 case FIX_ROUND_EXPR:
2175 result = build_nt (code, stabilize_reference (TREE_OPERAND (ref, 0)));
2179 result = build_nt (INDIRECT_REF,
2180 stabilize_reference_1 (TREE_OPERAND (ref, 0)));
2184 result = build_nt (COMPONENT_REF,
2185 stabilize_reference (TREE_OPERAND (ref, 0)),
2186 TREE_OPERAND (ref, 1));
2190 result = build_nt (BIT_FIELD_REF,
2191 stabilize_reference (TREE_OPERAND (ref, 0)),
2192 stabilize_reference_1 (TREE_OPERAND (ref, 1)),
2193 stabilize_reference_1 (TREE_OPERAND (ref, 2)));
2197 result = build_nt (ARRAY_REF,
2198 stabilize_reference (TREE_OPERAND (ref, 0)),
2199 stabilize_reference_1 (TREE_OPERAND (ref, 1)));
2202 case ARRAY_RANGE_REF:
2203 result = build_nt (ARRAY_RANGE_REF,
2204 stabilize_reference (TREE_OPERAND (ref, 0)),
2205 stabilize_reference_1 (TREE_OPERAND (ref, 1)));
2209 /* We cannot wrap the first expression in a SAVE_EXPR, as then
2210 it wouldn't be ignored. This matters when dealing with
2212 return stabilize_reference_1 (ref);
2215 result = build1 (INDIRECT_REF, TREE_TYPE (ref),
2216 save_expr (build1 (ADDR_EXPR,
2217 build_pointer_type (TREE_TYPE (ref)),
2221 /* If arg isn't a kind of lvalue we recognize, make no change.
2222 Caller should recognize the error for an invalid lvalue. */
2227 return error_mark_node;
2230 TREE_TYPE (result) = TREE_TYPE (ref);
2231 TREE_READONLY (result) = TREE_READONLY (ref);
2232 TREE_SIDE_EFFECTS (result) = TREE_SIDE_EFFECTS (ref);
2233 TREE_THIS_VOLATILE (result) = TREE_THIS_VOLATILE (ref);
2238 /* Subroutine of stabilize_reference; this is called for subtrees of
2239 references. Any expression with side-effects must be put in a SAVE_EXPR
2240 to ensure that it is only evaluated once.
2242 We don't put SAVE_EXPR nodes around everything, because assigning very
2243 simple expressions to temporaries causes us to miss good opportunities
2244 for optimizations. Among other things, the opportunity to fold in the
2245 addition of a constant into an addressing mode often gets lost, e.g.
2246 "y[i+1] += x;". In general, we take the approach that we should not make
2247 an assignment unless we are forced into it - i.e., that any non-side effect
2248 operator should be allowed, and that cse should take care of coalescing
2249 multiple utterances of the same expression should that prove fruitful. */
2252 stabilize_reference_1 (tree e)
2255 enum tree_code code = TREE_CODE (e);
2257 /* We cannot ignore const expressions because it might be a reference
2258 to a const array but whose index contains side-effects. But we can
2259 ignore things that are actual constant or that already have been
2260 handled by this function. */
2262 if (TREE_INVARIANT (e))
2265 switch (TREE_CODE_CLASS (code))
2275 /* If the expression has side-effects, then encase it in a SAVE_EXPR
2276 so that it will only be evaluated once. */
2277 /* The reference (r) and comparison (<) classes could be handled as
2278 below, but it is generally faster to only evaluate them once. */
2279 if (TREE_SIDE_EFFECTS (e))
2280 return save_expr (e);
2284 /* Constants need no processing. In fact, we should never reach
2289 /* Division is slow and tends to be compiled with jumps,
2290 especially the division by powers of 2 that is often
2291 found inside of an array reference. So do it just once. */
2292 if (code == TRUNC_DIV_EXPR || code == TRUNC_MOD_EXPR
2293 || code == FLOOR_DIV_EXPR || code == FLOOR_MOD_EXPR
2294 || code == CEIL_DIV_EXPR || code == CEIL_MOD_EXPR
2295 || code == ROUND_DIV_EXPR || code == ROUND_MOD_EXPR)
2296 return save_expr (e);
2297 /* Recursively stabilize each operand. */
2298 result = build_nt (code, stabilize_reference_1 (TREE_OPERAND (e, 0)),
2299 stabilize_reference_1 (TREE_OPERAND (e, 1)));
2303 /* Recursively stabilize each operand. */
2304 result = build_nt (code, stabilize_reference_1 (TREE_OPERAND (e, 0)));
2311 TREE_TYPE (result) = TREE_TYPE (e);
2312 TREE_READONLY (result) = TREE_READONLY (e);
2313 TREE_SIDE_EFFECTS (result) = TREE_SIDE_EFFECTS (e);
2314 TREE_THIS_VOLATILE (result) = TREE_THIS_VOLATILE (e);
2315 TREE_INVARIANT (result) = 1;
2320 /* Low-level constructors for expressions. */
2322 /* A helper function for build1 and constant folders.
2323 Set TREE_CONSTANT and TREE_INVARIANT for an ADDR_EXPR. */
2326 recompute_tree_invarant_for_addr_expr (tree t)
2328 tree node = TREE_OPERAND (t, 0);
2329 bool tc = false, ti = false;
2331 /* Addresses of constants and static variables are constant;
2332 all other decl addresses are invariant. */
2337 /* Step past constant offsets. */
2340 if (TREE_CODE (node) == COMPONENT_REF
2341 && TREE_CODE (TREE_OPERAND (node, 1)) == FIELD_DECL
2342 && ! DECL_BIT_FIELD (TREE_OPERAND (node, 1)))
2344 else if (TREE_CODE (node) == ARRAY_REF
2345 && TREE_CONSTANT (TREE_OPERAND (node, 1)))
2349 node = TREE_OPERAND (node, 0);
2355 TREE_CONSTANT (t) = tc;
2356 TREE_INVARIANT (t) = ti;
2359 /* Build an expression of code CODE, data type TYPE, and operands as
2360 specified. Expressions and reference nodes can be created this way.
2361 Constants, decls, types and misc nodes cannot be.
2363 We define 5 non-variadic functions, from 0 to 4 arguments. This is
2364 enough for all extant tree codes. These functions can be called
2365 directly (preferably!), but can also be obtained via GCC preprocessor
2366 magic within the build macro. */
2369 build0_stat (enum tree_code code, tree tt MEM_STAT_DECL)
2373 #ifdef ENABLE_CHECKING
2374 if (TREE_CODE_LENGTH (code) != 0)
2378 t = make_node_stat (code PASS_MEM_STAT);
2385 build1_stat (enum tree_code code, tree type, tree node MEM_STAT_DECL)
2387 int length = sizeof (struct tree_exp);
2388 #ifdef GATHER_STATISTICS
2389 tree_node_kind kind;
2393 #ifdef GATHER_STATISTICS
2394 switch (TREE_CODE_CLASS (code))
2396 case 's': /* an expression with side effects */
2399 case 'r': /* a reference */
2407 tree_node_counts[(int) kind]++;
2408 tree_node_sizes[(int) kind] += length;
2411 #ifdef ENABLE_CHECKING
2412 if (TREE_CODE_LENGTH (code) != 1)
2414 #endif /* ENABLE_CHECKING */
2416 t = ggc_alloc_zone_stat (length, tree_zone PASS_MEM_STAT);
2418 memset (t, 0, sizeof (struct tree_common));
2420 TREE_SET_CODE (t, code);
2422 TREE_TYPE (t) = type;
2423 SET_EXPR_LOCUS (t, NULL);
2424 TREE_COMPLEXITY (t) = 0;
2425 TREE_OPERAND (t, 0) = node;
2426 TREE_BLOCK (t) = NULL_TREE;
2427 if (node && !TYPE_P (node) && first_rtl_op (code) != 0)
2429 TREE_SIDE_EFFECTS (t) = TREE_SIDE_EFFECTS (node);
2430 TREE_READONLY (t) = TREE_READONLY (node);
2433 if (TREE_CODE_CLASS (code) == 's')
2434 TREE_SIDE_EFFECTS (t) = 1;
2441 case PREDECREMENT_EXPR:
2442 case PREINCREMENT_EXPR:
2443 case POSTDECREMENT_EXPR:
2444 case POSTINCREMENT_EXPR:
2445 /* All of these have side-effects, no matter what their
2447 TREE_SIDE_EFFECTS (t) = 1;
2448 TREE_READONLY (t) = 0;
2452 /* Whether a dereference is readonly has nothing to do with whether
2453 its operand is readonly. */
2454 TREE_READONLY (t) = 0;
2460 recompute_tree_invarant_for_addr_expr (t);
2462 /* The address of a volatile decl or reference does not have
2463 side-effects. But be careful not to ignore side-effects from
2464 other sources deeper in the expression--if node is a _REF and
2465 one of its operands has side-effects, so do we. */
2466 if (TREE_THIS_VOLATILE (node))
2468 TREE_SIDE_EFFECTS (t) = 0;
2471 int i = first_rtl_op (TREE_CODE (node)) - 1;
2474 if (TREE_SIDE_EFFECTS (TREE_OPERAND (node, i)))
2475 TREE_SIDE_EFFECTS (t) = 1;
2483 if (TREE_CODE_CLASS (code) == '1' && node && !TYPE_P (node)
2484 && TREE_CONSTANT (node))
2485 TREE_CONSTANT (t) = 1;
2486 if (TREE_CODE_CLASS (code) == '1' && node && TREE_INVARIANT (node))
2487 TREE_INVARIANT (t) = 1;
2494 #define PROCESS_ARG(N) \
2496 TREE_OPERAND (t, N) = arg##N; \
2497 if (arg##N &&!TYPE_P (arg##N) && fro > N) \
2499 if (TREE_SIDE_EFFECTS (arg##N)) \
2501 if (!TREE_READONLY (arg##N)) \
2503 if (!TREE_CONSTANT (arg##N)) \
2505 if (!TREE_INVARIANT (arg##N)) \
2511 build2_stat (enum tree_code code, tree tt, tree arg0, tree arg1 MEM_STAT_DECL)
2513 bool constant, read_only, side_effects, invariant;
2517 #ifdef ENABLE_CHECKING
2518 if (TREE_CODE_LENGTH (code) != 2)
2522 t = make_node_stat (code PASS_MEM_STAT);
2525 /* Below, we automatically set TREE_SIDE_EFFECTS and TREE_READONLY for the
2526 result based on those same flags for the arguments. But if the
2527 arguments aren't really even `tree' expressions, we shouldn't be trying
2529 fro = first_rtl_op (code);
2531 /* Expressions without side effects may be constant if their
2532 arguments are as well. */
2533 constant = (TREE_CODE_CLASS (code) == '<'
2534 || TREE_CODE_CLASS (code) == '2');
2536 side_effects = TREE_SIDE_EFFECTS (t);
2537 invariant = constant;
2542 TREE_READONLY (t) = read_only;
2543 TREE_CONSTANT (t) = constant;
2544 TREE_INVARIANT (t) = invariant;
2545 TREE_SIDE_EFFECTS (t) = side_effects;
2551 build3_stat (enum tree_code code, tree tt, tree arg0, tree arg1,
2552 tree arg2 MEM_STAT_DECL)
2554 bool constant, read_only, side_effects, invariant;
2558 #ifdef ENABLE_CHECKING
2559 if (TREE_CODE_LENGTH (code) != 3)
2563 t = make_node_stat (code PASS_MEM_STAT);
2566 fro = first_rtl_op (code);
2568 side_effects = TREE_SIDE_EFFECTS (t);
2574 if (code == CALL_EXPR && !side_effects)
2579 /* Calls have side-effects, except those to const or
2581 i = call_expr_flags (t);
2582 if (!(i & (ECF_CONST | ECF_PURE)))
2585 /* And even those have side-effects if their arguments do. */
2586 else for (node = arg1; node; node = TREE_CHAIN (node))
2587 if (TREE_SIDE_EFFECTS (TREE_VALUE (node)))
2594 TREE_SIDE_EFFECTS (t) = side_effects;
2600 build4_stat (enum tree_code code, tree tt, tree arg0, tree arg1,
2601 tree arg2, tree arg3 MEM_STAT_DECL)
2603 bool constant, read_only, side_effects, invariant;
2607 #ifdef ENABLE_CHECKING
2608 if (TREE_CODE_LENGTH (code) != 4)
2612 t = make_node_stat (code PASS_MEM_STAT);
2615 fro = first_rtl_op (code);
2617 side_effects = TREE_SIDE_EFFECTS (t);
2624 TREE_SIDE_EFFECTS (t) = side_effects;
2629 /* Backup definition for non-gcc build compilers. */
2632 (build) (enum tree_code code, tree tt, ...)
2634 tree t, arg0, arg1, arg2, arg3;
2635 int length = TREE_CODE_LENGTH (code);
2642 t = build0 (code, tt);
2645 arg0 = va_arg (p, tree);
2646 t = build1 (code, tt, arg0);
2649 arg0 = va_arg (p, tree);
2650 arg1 = va_arg (p, tree);
2651 t = build2 (code, tt, arg0, arg1);
2654 arg0 = va_arg (p, tree);
2655 arg1 = va_arg (p, tree);
2656 arg2 = va_arg (p, tree);
2657 t = build3 (code, tt, arg0, arg1, arg2);
2660 arg0 = va_arg (p, tree);
2661 arg1 = va_arg (p, tree);
2662 arg2 = va_arg (p, tree);
2663 arg3 = va_arg (p, tree);
2664 t = build4 (code, tt, arg0, arg1, arg2, arg3);
2674 /* Similar except don't specify the TREE_TYPE
2675 and leave the TREE_SIDE_EFFECTS as 0.
2676 It is permissible for arguments to be null,
2677 or even garbage if their values do not matter. */
2680 build_nt (enum tree_code code, ...)
2689 t = make_node (code);
2690 length = TREE_CODE_LENGTH (code);
2692 for (i = 0; i < length; i++)
2693 TREE_OPERAND (t, i) = va_arg (p, tree);
2699 /* Create a DECL_... node of code CODE, name NAME and data type TYPE.
2700 We do NOT enter this node in any sort of symbol table.
2702 layout_decl is used to set up the decl's storage layout.
2703 Other slots are initialized to 0 or null pointers. */
2706 build_decl_stat (enum tree_code code, tree name, tree type MEM_STAT_DECL)
2710 t = make_node_stat (code PASS_MEM_STAT);
2712 /* if (type == error_mark_node)
2713 type = integer_type_node; */
2714 /* That is not done, deliberately, so that having error_mark_node
2715 as the type can suppress useless errors in the use of this variable. */
2717 DECL_NAME (t) = name;
2718 TREE_TYPE (t) = type;
2720 if (code == VAR_DECL || code == PARM_DECL || code == RESULT_DECL)
2722 else if (code == FUNCTION_DECL)
2723 DECL_MODE (t) = FUNCTION_MODE;
2728 /* BLOCK nodes are used to represent the structure of binding contours
2729 and declarations, once those contours have been exited and their contents
2730 compiled. This information is used for outputting debugging info. */
2733 build_block (tree vars, tree tags ATTRIBUTE_UNUSED, tree subblocks,
2734 tree supercontext, tree chain)
2736 tree block = make_node (BLOCK);
2738 BLOCK_VARS (block) = vars;
2739 BLOCK_SUBBLOCKS (block) = subblocks;
2740 BLOCK_SUPERCONTEXT (block) = supercontext;
2741 BLOCK_CHAIN (block) = chain;
2745 static GTY(()) tree last_annotated_node;
2747 /* Record the exact location where an expression or an identifier were
2751 annotate_with_file_line (tree node, const char *file, int line)
2753 /* Roughly one percent of the calls to this function are to annotate
2754 a node with the same information already attached to that node!
2755 Just return instead of wasting memory. */
2756 if (EXPR_LOCUS (node)
2757 && (EXPR_FILENAME (node) == file
2758 || ! strcmp (EXPR_FILENAME (node), file))
2759 && EXPR_LINENO (node) == line)
2761 last_annotated_node = node;
2765 /* In heavily macroized code (such as GCC itself) this single
2766 entry cache can reduce the number of allocations by more
2768 if (last_annotated_node
2769 && EXPR_LOCUS (last_annotated_node)
2770 && (EXPR_FILENAME (last_annotated_node) == file
2771 || ! strcmp (EXPR_FILENAME (last_annotated_node), file))
2772 && EXPR_LINENO (last_annotated_node) == line)
2774 SET_EXPR_LOCUS (node, EXPR_LOCUS (last_annotated_node));
2778 SET_EXPR_LOCUS (node, ggc_alloc (sizeof (location_t)));
2779 EXPR_LINENO (node) = line;
2780 EXPR_FILENAME (node) = file;
2781 last_annotated_node = node;
2785 annotate_with_locus (tree node, location_t locus)
2787 annotate_with_file_line (node, locus.file, locus.line);
2790 /* Return a declaration like DDECL except that its DECL_ATTRIBUTES
2794 build_decl_attribute_variant (tree ddecl, tree attribute)
2796 DECL_ATTRIBUTES (ddecl) = attribute;
2800 /* Return a type like TTYPE except that its TYPE_ATTRIBUTE
2803 Record such modified types already made so we don't make duplicates. */
2806 build_type_attribute_variant (tree ttype, tree attribute)
2808 if (! attribute_list_equal (TYPE_ATTRIBUTES (ttype), attribute))
2810 hashval_t hashcode = 0;
2812 enum tree_code code = TREE_CODE (ttype);
2814 ntype = copy_node (ttype);
2816 TYPE_POINTER_TO (ntype) = 0;
2817 TYPE_REFERENCE_TO (ntype) = 0;
2818 TYPE_ATTRIBUTES (ntype) = attribute;
2820 /* Create a new main variant of TYPE. */
2821 TYPE_MAIN_VARIANT (ntype) = ntype;
2822 TYPE_NEXT_VARIANT (ntype) = 0;
2823 set_type_quals (ntype, TYPE_UNQUALIFIED);
2825 hashcode = iterative_hash_object (code, hashcode);
2826 if (TREE_TYPE (ntype))
2827 hashcode = iterative_hash_object (TYPE_HASH (TREE_TYPE (ntype)),
2829 hashcode = attribute_hash_list (attribute, hashcode);
2831 switch (TREE_CODE (ntype))
2834 hashcode = type_hash_list (TYPE_ARG_TYPES (ntype), hashcode);
2837 hashcode = iterative_hash_object (TYPE_HASH (TYPE_DOMAIN (ntype)),
2841 hashcode = iterative_hash_object
2842 (TREE_INT_CST_LOW (TYPE_MAX_VALUE (ntype)), hashcode);
2843 hashcode = iterative_hash_object
2844 (TREE_INT_CST_HIGH (TYPE_MAX_VALUE (ntype)), hashcode);
2848 unsigned int precision = TYPE_PRECISION (ntype);
2849 hashcode = iterative_hash_object (precision, hashcode);
2856 ntype = type_hash_canon (hashcode, ntype);
2857 ttype = build_qualified_type (ntype, TYPE_QUALS (ttype));
2863 /* Return nonzero if IDENT is a valid name for attribute ATTR,
2866 We try both `text' and `__text__', ATTR may be either one. */
2867 /* ??? It might be a reasonable simplification to require ATTR to be only
2868 `text'. One might then also require attribute lists to be stored in
2869 their canonicalized form. */
2872 is_attribute_p (const char *attr, tree ident)
2874 int ident_len, attr_len;
2877 if (TREE_CODE (ident) != IDENTIFIER_NODE)
2880 if (strcmp (attr, IDENTIFIER_POINTER (ident)) == 0)
2883 p = IDENTIFIER_POINTER (ident);
2884 ident_len = strlen (p);
2885 attr_len = strlen (attr);
2887 /* If ATTR is `__text__', IDENT must be `text'; and vice versa. */
2891 || attr[attr_len - 2] != '_'
2892 || attr[attr_len - 1] != '_')
2894 if (ident_len == attr_len - 4
2895 && strncmp (attr + 2, p, attr_len - 4) == 0)
2900 if (ident_len == attr_len + 4
2901 && p[0] == '_' && p[1] == '_'
2902 && p[ident_len - 2] == '_' && p[ident_len - 1] == '_'
2903 && strncmp (attr, p + 2, attr_len) == 0)
2910 /* Given an attribute name and a list of attributes, return a pointer to the
2911 attribute's list element if the attribute is part of the list, or NULL_TREE
2912 if not found. If the attribute appears more than once, this only
2913 returns the first occurrence; the TREE_CHAIN of the return value should
2914 be passed back in if further occurrences are wanted. */
2917 lookup_attribute (const char *attr_name, tree list)
2921 for (l = list; l; l = TREE_CHAIN (l))
2923 if (TREE_CODE (TREE_PURPOSE (l)) != IDENTIFIER_NODE)
2925 if (is_attribute_p (attr_name, TREE_PURPOSE (l)))
2932 /* Return an attribute list that is the union of a1 and a2. */
2935 merge_attributes (tree a1, tree a2)
2939 /* Either one unset? Take the set one. */
2941 if ((attributes = a1) == 0)
2944 /* One that completely contains the other? Take it. */
2946 else if (a2 != 0 && ! attribute_list_contained (a1, a2))
2948 if (attribute_list_contained (a2, a1))
2952 /* Pick the longest list, and hang on the other list. */
2954 if (list_length (a1) < list_length (a2))
2955 attributes = a2, a2 = a1;
2957 for (; a2 != 0; a2 = TREE_CHAIN (a2))
2960 for (a = lookup_attribute (IDENTIFIER_POINTER (TREE_PURPOSE (a2)),
2963 a = lookup_attribute (IDENTIFIER_POINTER (TREE_PURPOSE (a2)),
2966 if (simple_cst_equal (TREE_VALUE (a), TREE_VALUE (a2)) == 1)
2971 a1 = copy_node (a2);
2972 TREE_CHAIN (a1) = attributes;
2981 /* Given types T1 and T2, merge their attributes and return
2985 merge_type_attributes (tree t1, tree t2)
2987 return merge_attributes (TYPE_ATTRIBUTES (t1),
2988 TYPE_ATTRIBUTES (t2));
2991 /* Given decls OLDDECL and NEWDECL, merge their attributes and return
2995 merge_decl_attributes (tree olddecl, tree newdecl)
2997 return merge_attributes (DECL_ATTRIBUTES (olddecl),
2998 DECL_ATTRIBUTES (newdecl));
3001 #ifdef TARGET_DLLIMPORT_DECL_ATTRIBUTES
3003 /* Specialization of merge_decl_attributes for various Windows targets.
3005 This handles the following situation:
3007 __declspec (dllimport) int foo;
3010 The second instance of `foo' nullifies the dllimport. */
3013 merge_dllimport_decl_attributes (tree old, tree new)
3016 int delete_dllimport_p;
3018 old = DECL_ATTRIBUTES (old);
3019 new = DECL_ATTRIBUTES (new);
3021 /* What we need to do here is remove from `old' dllimport if it doesn't
3022 appear in `new'. dllimport behaves like extern: if a declaration is
3023 marked dllimport and a definition appears later, then the object
3024 is not dllimport'd. */
3025 if (lookup_attribute ("dllimport", old) != NULL_TREE
3026 && lookup_attribute ("dllimport", new) == NULL_TREE)
3027 delete_dllimport_p = 1;
3029 delete_dllimport_p = 0;
3031 a = merge_attributes (old, new);
3033 if (delete_dllimport_p)
3037 /* Scan the list for dllimport and delete it. */
3038 for (prev = NULL_TREE, t = a; t; prev = t, t = TREE_CHAIN (t))
3040 if (is_attribute_p ("dllimport", TREE_PURPOSE (t)))
3042 if (prev == NULL_TREE)
3045 TREE_CHAIN (prev) = TREE_CHAIN (t);
3054 #endif /* TARGET_DLLIMPORT_DECL_ATTRIBUTES */
3056 /* Set the type qualifiers for TYPE to TYPE_QUALS, which is a bitmask
3057 of the various TYPE_QUAL values. */
3060 set_type_quals (tree type, int type_quals)
3062 TYPE_READONLY (type) = (type_quals & TYPE_QUAL_CONST) != 0;
3063 TYPE_VOLATILE (type) = (type_quals & TYPE_QUAL_VOLATILE) != 0;
3064 TYPE_RESTRICT (type) = (type_quals & TYPE_QUAL_RESTRICT) != 0;
3067 /* Returns true iff cand is equivalent to base with type_quals. */
3070 check_qualified_type (tree cand, tree base, int type_quals)
3072 return (TYPE_QUALS (cand) == type_quals
3073 && TYPE_NAME (cand) == TYPE_NAME (base)
3074 /* Apparently this is needed for Objective-C. */
3075 && TYPE_CONTEXT (cand) == TYPE_CONTEXT (base)
3076 && attribute_list_equal (TYPE_ATTRIBUTES (cand),
3077 TYPE_ATTRIBUTES (base)));
3080 /* Return a version of the TYPE, qualified as indicated by the
3081 TYPE_QUALS, if one exists. If no qualified version exists yet,
3082 return NULL_TREE. */
3085 get_qualified_type (tree type, int type_quals)
3089 if (TYPE_QUALS (type) == type_quals)
3092 /* Search the chain of variants to see if there is already one there just
3093 like the one we need to have. If so, use that existing one. We must
3094 preserve the TYPE_NAME, since there is code that depends on this. */
3095 for (t = TYPE_MAIN_VARIANT (type); t; t = TYPE_NEXT_VARIANT (t))
3096 if (check_qualified_type (t, type, type_quals))
3102 /* Like get_qualified_type, but creates the type if it does not
3103 exist. This function never returns NULL_TREE. */
3106 build_qualified_type (tree type, int type_quals)
3110 /* See if we already have the appropriate qualified variant. */
3111 t = get_qualified_type (type, type_quals);
3113 /* If not, build it. */
3116 t = build_type_copy (type);
3117 set_type_quals (t, type_quals);
3123 /* Create a new variant of TYPE, equivalent but distinct.
3124 This is so the caller can modify it. */
3127 build_type_copy (tree type)
3129 tree t, m = TYPE_MAIN_VARIANT (type);
3131 t = copy_node (type);
3133 TYPE_POINTER_TO (t) = 0;
3134 TYPE_REFERENCE_TO (t) = 0;
3136 /* Add this type to the chain of variants of TYPE. */
3137 TYPE_NEXT_VARIANT (t) = TYPE_NEXT_VARIANT (m);
3138 TYPE_NEXT_VARIANT (m) = t;
3143 /* Hashing of types so that we don't make duplicates.
3144 The entry point is `type_hash_canon'. */
3146 /* Compute a hash code for a list of types (chain of TREE_LIST nodes
3147 with types in the TREE_VALUE slots), by adding the hash codes
3148 of the individual types. */
3151 type_hash_list (tree list, hashval_t hashcode)
3155 for (tail = list; tail; tail = TREE_CHAIN (tail))
3156 if (TREE_VALUE (tail) != error_mark_node)
3157 hashcode = iterative_hash_object (TYPE_HASH (TREE_VALUE (tail)),
3163 /* These are the Hashtable callback functions. */
3165 /* Returns true iff the types are equivalent. */
3168 type_hash_eq (const void *va, const void *vb)
3170 const struct type_hash *a = va, *b = vb;
3172 /* First test the things that are the same for all types. */
3173 if (a->hash != b->hash
3174 || TREE_CODE (a->type) != TREE_CODE (b->type)
3175 || TREE_TYPE (a->type) != TREE_TYPE (b->type)
3176 || !attribute_list_equal (TYPE_ATTRIBUTES (a->type),
3177 TYPE_ATTRIBUTES (b->type))
3178 || TYPE_ALIGN (a->type) != TYPE_ALIGN (b->type)
3179 || TYPE_MODE (a->type) != TYPE_MODE (b->type))
3182 switch (TREE_CODE (a->type))
3188 case REFERENCE_TYPE:
3192 if (TYPE_VALUES (a->type) != TYPE_VALUES (b->type)
3193 && !(TYPE_VALUES (a->type)
3194 && TREE_CODE (TYPE_VALUES (a->type)) == TREE_LIST
3195 && TYPE_VALUES (b->type)
3196 && TREE_CODE (TYPE_VALUES (b->type)) == TREE_LIST
3197 && type_list_equal (TYPE_VALUES (a->type),
3198 TYPE_VALUES (b->type))))
3201 /* ... fall through ... */
3207 return ((TYPE_MAX_VALUE (a->type) == TYPE_MAX_VALUE (b->type)
3208 || tree_int_cst_equal (TYPE_MAX_VALUE (a->type),
3209 TYPE_MAX_VALUE (b->type)))
3210 && (TYPE_MIN_VALUE (a->type) == TYPE_MIN_VALUE (b->type)
3211 && tree_int_cst_equal (TYPE_MIN_VALUE (a->type),
3212 TYPE_MIN_VALUE (b->type))));
3215 return TYPE_OFFSET_BASETYPE (a->type) == TYPE_OFFSET_BASETYPE (b->type);
3218 return (TYPE_METHOD_BASETYPE (a->type) == TYPE_METHOD_BASETYPE (b->type)
3219 && (TYPE_ARG_TYPES (a->type) == TYPE_ARG_TYPES (b->type)
3220 || (TYPE_ARG_TYPES (a->type)
3221 && TREE_CODE (TYPE_ARG_TYPES (a->type)) == TREE_LIST
3222 && TYPE_ARG_TYPES (b->type)
3223 && TREE_CODE (TYPE_ARG_TYPES (b->type)) == TREE_LIST
3224 && type_list_equal (TYPE_ARG_TYPES (a->type),
3225 TYPE_ARG_TYPES (b->type)))));
3229 return TYPE_DOMAIN (a->type) == TYPE_DOMAIN (b->type);
3233 case QUAL_UNION_TYPE:
3234 return (TYPE_FIELDS (a->type) == TYPE_FIELDS (b->type)
3235 || (TYPE_FIELDS (a->type)
3236 && TREE_CODE (TYPE_FIELDS (a->type)) == TREE_LIST
3237 && TYPE_FIELDS (b->type)
3238 && TREE_CODE (TYPE_FIELDS (b->type)) == TREE_LIST
3239 && type_list_equal (TYPE_FIELDS (a->type),
3240 TYPE_FIELDS (b->type))));
3243 return (TYPE_ARG_TYPES (a->type) == TYPE_ARG_TYPES (b->type)
3244 || (TYPE_ARG_TYPES (a->type)
3245 && TREE_CODE (TYPE_ARG_TYPES (a->type)) == TREE_LIST
3246 && TYPE_ARG_TYPES (b->type)
3247 && TREE_CODE (TYPE_ARG_TYPES (b->type)) == TREE_LIST
3248 && type_list_equal (TYPE_ARG_TYPES (a->type),
3249 TYPE_ARG_TYPES (b->type))));
3256 /* Return the cached hash value. */
3259 type_hash_hash (const void *item)
3261 return ((const struct type_hash *) item)->hash;
3264 /* Look in the type hash table for a type isomorphic to TYPE.
3265 If one is found, return it. Otherwise return 0. */
3268 type_hash_lookup (hashval_t hashcode, tree type)
3270 struct type_hash *h, in;
3272 /* The TYPE_ALIGN field of a type is set by layout_type(), so we
3273 must call that routine before comparing TYPE_ALIGNs. */
3279 h = htab_find_with_hash (type_hash_table, &in, hashcode);
3285 /* Add an entry to the type-hash-table
3286 for a type TYPE whose hash code is HASHCODE. */
3289 type_hash_add (hashval_t hashcode, tree type)
3291 struct type_hash *h;
3294 h = ggc_alloc (sizeof (struct type_hash));
3297 loc = htab_find_slot_with_hash (type_hash_table, h, hashcode, INSERT);
3298 *(struct type_hash **) loc = h;
3301 /* Given TYPE, and HASHCODE its hash code, return the canonical
3302 object for an identical type if one already exists.
3303 Otherwise, return TYPE, and record it as the canonical object.
3305 To use this function, first create a type of the sort you want.
3306 Then compute its hash code from the fields of the type that
3307 make it different from other similar types.
3308 Then call this function and use the value. */
3311 type_hash_canon (unsigned int hashcode, tree type)
3315 /* The hash table only contains main variants, so ensure that's what we're
3317 if (TYPE_MAIN_VARIANT (type) != type)
3320 if (!lang_hooks.types.hash_types)
3323 /* See if the type is in the hash table already. If so, return it.
3324 Otherwise, add the type. */
3325 t1 = type_hash_lookup (hashcode, type);
3328 #ifdef GATHER_STATISTICS
3329 tree_node_counts[(int) t_kind]--;
3330 tree_node_sizes[(int) t_kind] -= sizeof (struct tree_type);
3336 type_hash_add (hashcode, type);
3341 /* See if the data pointed to by the type hash table is marked. We consider
3342 it marked if the type is marked or if a debug type number or symbol
3343 table entry has been made for the type. This reduces the amount of
3344 debugging output and eliminates that dependency of the debug output on
3345 the number of garbage collections. */
3348 type_hash_marked_p (const void *p)
3350 tree type = ((struct type_hash *) p)->type;
3352 return ggc_marked_p (type) || TYPE_SYMTAB_POINTER (type);
3356 print_type_hash_statistics (void)
3358 fprintf (stderr, "Type hash: size %ld, %ld elements, %f collisions\n",
3359 (long) htab_size (type_hash_table),
3360 (long) htab_elements (type_hash_table),
3361 htab_collisions (type_hash_table));
3364 /* Compute a hash code for a list of attributes (chain of TREE_LIST nodes
3365 with names in the TREE_PURPOSE slots and args in the TREE_VALUE slots),
3366 by adding the hash codes of the individual attributes. */
3369 attribute_hash_list (tree list, hashval_t hashcode)
3373 for (tail = list; tail; tail = TREE_CHAIN (tail))
3374 /* ??? Do we want to add in TREE_VALUE too? */
3375 hashcode = iterative_hash_object
3376 (IDENTIFIER_HASH_VALUE (TREE_PURPOSE (tail)), hashcode);
3380 /* Given two lists of attributes, return true if list l2 is
3381 equivalent to l1. */
3384 attribute_list_equal (tree l1, tree l2)
3386 return attribute_list_contained (l1, l2)
3387 && attribute_list_contained (l2, l1);
3390 /* Given two lists of attributes, return true if list L2 is
3391 completely contained within L1. */
3392 /* ??? This would be faster if attribute names were stored in a canonicalized
3393 form. Otherwise, if L1 uses `foo' and L2 uses `__foo__', the long method
3394 must be used to show these elements are equivalent (which they are). */
3395 /* ??? It's not clear that attributes with arguments will always be handled
3399 attribute_list_contained (tree l1, tree l2)
3403 /* First check the obvious, maybe the lists are identical. */
3407 /* Maybe the lists are similar. */
3408 for (t1 = l1, t2 = l2;
3410 && TREE_PURPOSE (t1) == TREE_PURPOSE (t2)
3411 && TREE_VALUE (t1) == TREE_VALUE (t2);
3412 t1 = TREE_CHAIN (t1), t2 = TREE_CHAIN (t2));
3414 /* Maybe the lists are equal. */
3415 if (t1 == 0 && t2 == 0)
3418 for (; t2 != 0; t2 = TREE_CHAIN (t2))
3421 for (attr = lookup_attribute (IDENTIFIER_POINTER (TREE_PURPOSE (t2)), l1);
3423 attr = lookup_attribute (IDENTIFIER_POINTER (TREE_PURPOSE (t2)),
3426 if (simple_cst_equal (TREE_VALUE (t2), TREE_VALUE (attr)) == 1)
3433 if (simple_cst_equal (TREE_VALUE (t2), TREE_VALUE (attr)) != 1)
3440 /* Given two lists of types
3441 (chains of TREE_LIST nodes with types in the TREE_VALUE slots)
3442 return 1 if the lists contain the same types in the same order.
3443 Also, the TREE_PURPOSEs must match. */
3446 type_list_equal (tree l1, tree l2)
3450 for (t1 = l1, t2 = l2; t1 && t2; t1 = TREE_CHAIN (t1), t2 = TREE_CHAIN (t2))
3451 if (TREE_VALUE (t1) != TREE_VALUE (t2)
3452 || (TREE_PURPOSE (t1) != TREE_PURPOSE (t2)
3453 && ! (1 == simple_cst_equal (TREE_PURPOSE (t1), TREE_PURPOSE (t2))
3454 && (TREE_TYPE (TREE_PURPOSE (t1))
3455 == TREE_TYPE (TREE_PURPOSE (t2))))))
3461 /* Returns the number of arguments to the FUNCTION_TYPE or METHOD_TYPE
3462 given by TYPE. If the argument list accepts variable arguments,
3463 then this function counts only the ordinary arguments. */
3466 type_num_arguments (tree type)
3471 for (t = TYPE_ARG_TYPES (type); t; t = TREE_CHAIN (t))
3472 /* If the function does not take a variable number of arguments,
3473 the last element in the list will have type `void'. */
3474 if (VOID_TYPE_P (TREE_VALUE (t)))
3482 /* Nonzero if integer constants T1 and T2
3483 represent the same constant value. */
3486 tree_int_cst_equal (tree t1, tree t2)
3491 if (t1 == 0 || t2 == 0)
3494 if (TREE_CODE (t1) == INTEGER_CST
3495 && TREE_CODE (t2) == INTEGER_CST
3496 && TREE_INT_CST_LOW (t1) == TREE_INT_CST_LOW (t2)
3497 && TREE_INT_CST_HIGH (t1) == TREE_INT_CST_HIGH (t2))
3503 /* Nonzero if integer constants T1 and T2 represent values that satisfy <.
3504 The precise way of comparison depends on their data type. */
3507 tree_int_cst_lt (tree t1, tree t2)
3512 if (TYPE_UNSIGNED (TREE_TYPE (t1)) != TYPE_UNSIGNED (TREE_TYPE (t2)))
3514 int t1_sgn = tree_int_cst_sgn (t1);
3515 int t2_sgn = tree_int_cst_sgn (t2);
3517 if (t1_sgn < t2_sgn)
3519 else if (t1_sgn > t2_sgn)
3521 /* Otherwise, both are non-negative, so we compare them as
3522 unsigned just in case one of them would overflow a signed
3525 else if (!TYPE_UNSIGNED (TREE_TYPE (t1)))
3526 return INT_CST_LT (t1, t2);
3528 return INT_CST_LT_UNSIGNED (t1, t2);
3531 /* Returns -1 if T1 < T2, 0 if T1 == T2, and 1 if T1 > T2. */
3534 tree_int_cst_compare (tree t1, tree t2)
3536 if (tree_int_cst_lt (t1, t2))
3538 else if (tree_int_cst_lt (t2, t1))
3544 /* Return 1 if T is an INTEGER_CST that can be manipulated efficiently on
3545 the host. If POS is zero, the value can be represented in a single
3546 HOST_WIDE_INT. If POS is nonzero, the value must be positive and can
3547 be represented in a single unsigned HOST_WIDE_INT. */
3550 host_integerp (tree t, int pos)
3552 return (TREE_CODE (t) == INTEGER_CST
3553 && ! TREE_OVERFLOW (t)
3554 && ((TREE_INT_CST_HIGH (t) == 0
3555 && (HOST_WIDE_INT) TREE_INT_CST_LOW (t) >= 0)
3556 || (! pos && TREE_INT_CST_HIGH (t) == -1
3557 && (HOST_WIDE_INT) TREE_INT_CST_LOW (t) < 0
3558 && !TYPE_UNSIGNED (TREE_TYPE (t)))
3559 || (pos && TREE_INT_CST_HIGH (t) == 0)));
3562 /* Return the HOST_WIDE_INT least significant bits of T if it is an
3563 INTEGER_CST and there is no overflow. POS is nonzero if the result must
3564 be positive. Abort if we cannot satisfy the above conditions. */
3567 tree_low_cst (tree t, int pos)
3569 if (host_integerp (t, pos))
3570 return TREE_INT_CST_LOW (t);
3575 /* Return the most significant bit of the integer constant T. */
3578 tree_int_cst_msb (tree t)
3582 unsigned HOST_WIDE_INT l;
3584 /* Note that using TYPE_PRECISION here is wrong. We care about the
3585 actual bits, not the (arbitrary) range of the type. */
3586 prec = GET_MODE_BITSIZE (TYPE_MODE (TREE_TYPE (t))) - 1;
3587 rshift_double (TREE_INT_CST_LOW (t), TREE_INT_CST_HIGH (t), prec,
3588 2 * HOST_BITS_PER_WIDE_INT, &l, &h, 0);
3589 return (l & 1) == 1;
3592 /* Return an indication of the sign of the integer constant T.
3593 The return value is -1 if T < 0, 0 if T == 0, and 1 if T > 0.
3594 Note that -1 will never be returned it T's type is unsigned. */
3597 tree_int_cst_sgn (tree t)
3599 if (TREE_INT_CST_LOW (t) == 0 && TREE_INT_CST_HIGH (t) == 0)
3601 else if (TYPE_UNSIGNED (TREE_TYPE (t)))
3603 else if (TREE_INT_CST_HIGH (t) < 0)
3609 /* Compare two constructor-element-type constants. Return 1 if the lists
3610 are known to be equal; otherwise return 0. */
3613 simple_cst_list_equal (tree l1, tree l2)
3615 while (l1 != NULL_TREE && l2 != NULL_TREE)
3617 if (simple_cst_equal (TREE_VALUE (l1), TREE_VALUE (l2)) != 1)
3620 l1 = TREE_CHAIN (l1);
3621 l2 = TREE_CHAIN (l2);
3627 /* Return truthvalue of whether T1 is the same tree structure as T2.
3628 Return 1 if they are the same.
3629 Return 0 if they are understandably different.
3630 Return -1 if either contains tree structure not understood by
3634 simple_cst_equal (tree t1, tree t2)
3636 enum tree_code code1, code2;
3642 if (t1 == 0 || t2 == 0)
3645 code1 = TREE_CODE (t1);
3646 code2 = TREE_CODE (t2);
3648 if (code1 == NOP_EXPR || code1 == CONVERT_EXPR || code1 == NON_LVALUE_EXPR)
3650 if (code2 == NOP_EXPR || code2 == CONVERT_EXPR
3651 || code2 == NON_LVALUE_EXPR)
3652 return simple_cst_equal (TREE_OPERAND (t1, 0), TREE_OPERAND (t2, 0));
3654 return simple_cst_equal (TREE_OPERAND (t1, 0), t2);
3657 else if (code2 == NOP_EXPR || code2 == CONVERT_EXPR
3658 || code2 == NON_LVALUE_EXPR)
3659 return simple_cst_equal (t1, TREE_OPERAND (t2, 0));
3667 return (TREE_INT_CST_LOW (t1) == TREE_INT_CST_LOW (t2)
3668 && TREE_INT_CST_HIGH (t1) == TREE_INT_CST_HIGH (t2));
3671 return REAL_VALUES_IDENTICAL (TREE_REAL_CST (t1), TREE_REAL_CST (t2));
3674 return (TREE_STRING_LENGTH (t1) == TREE_STRING_LENGTH (t2)
3675 && ! memcmp (TREE_STRING_POINTER (t1), TREE_STRING_POINTER (t2),
3676 TREE_STRING_LENGTH (t1)));
3679 return simple_cst_list_equal (CONSTRUCTOR_ELTS (t1),
3680 CONSTRUCTOR_ELTS (t2));
3683 return simple_cst_equal (TREE_OPERAND (t1, 0), TREE_OPERAND (t2, 0));
3686 cmp = simple_cst_equal (TREE_OPERAND (t1, 0), TREE_OPERAND (t2, 0));
3690 simple_cst_list_equal (TREE_OPERAND (t1, 1), TREE_OPERAND (t2, 1));
3693 /* Special case: if either target is an unallocated VAR_DECL,
3694 it means that it's going to be unified with whatever the
3695 TARGET_EXPR is really supposed to initialize, so treat it
3696 as being equivalent to anything. */
3697 if ((TREE_CODE (TREE_OPERAND (t1, 0)) == VAR_DECL
3698 && DECL_NAME (TREE_OPERAND (t1, 0)) == NULL_TREE
3699 && !DECL_RTL_SET_P (TREE_OPERAND (t1, 0)))
3700 || (TREE_CODE (TREE_OPERAND (t2, 0)) == VAR_DECL
3701 && DECL_NAME (TREE_OPERAND (t2, 0)) == NULL_TREE
3702 && !DECL_RTL_SET_P (TREE_OPERAND (t2, 0))))
3705 cmp = simple_cst_equal (TREE_OPERAND (t1, 0), TREE_OPERAND (t2, 0));
3710 return simple_cst_equal (TREE_OPERAND (t1, 1), TREE_OPERAND (t2, 1));
3712 case WITH_CLEANUP_EXPR:
3713 cmp = simple_cst_equal (TREE_OPERAND (t1, 0), TREE_OPERAND (t2, 0));
3717 return simple_cst_equal (TREE_OPERAND (t1, 1), TREE_OPERAND (t1, 1));
3720 if (TREE_OPERAND (t1, 1) == TREE_OPERAND (t2, 1))
3721 return simple_cst_equal (TREE_OPERAND (t1, 0), TREE_OPERAND (t2, 0));
3735 /* This general rule works for most tree codes. All exceptions should be
3736 handled above. If this is a language-specific tree code, we can't
3737 trust what might be in the operand, so say we don't know
3739 if ((int) code1 >= (int) LAST_AND_UNUSED_TREE_CODE)
3742 switch (TREE_CODE_CLASS (code1))
3751 for (i = 0; i < TREE_CODE_LENGTH (code1); i++)
3753 cmp = simple_cst_equal (TREE_OPERAND (t1, i), TREE_OPERAND (t2, i));
3765 /* Compare the value of T, an INTEGER_CST, with U, an unsigned integer value.
3766 Return -1, 0, or 1 if the value of T is less than, equal to, or greater
3767 than U, respectively. */
3770 compare_tree_int (tree t, unsigned HOST_WIDE_INT u)
3772 if (tree_int_cst_sgn (t) < 0)
3774 else if (TREE_INT_CST_HIGH (t) != 0)
3776 else if (TREE_INT_CST_LOW (t) == u)
3778 else if (TREE_INT_CST_LOW (t) < u)
3784 /* Return true if CODE represents an associative tree code. Otherwise
3787 associative_tree_code (enum tree_code code)
3806 /* Return true if CODE represents an commutative tree code. Otherwise
3809 commutative_tree_code (enum tree_code code)
3830 /* Generate a hash value for an expression. This can be used iteratively
3831 by passing a previous result as the "val" argument.
3833 This function is intended to produce the same hash for expressions which
3834 would compare equal using operand_equal_p. */
3837 iterative_hash_expr (tree t, hashval_t val)
3840 enum tree_code code;
3844 return iterative_hash_object (t, val);
3846 code = TREE_CODE (t);
3847 class = TREE_CODE_CLASS (code);
3851 /* Decls we can just compare by pointer. */
3852 val = iterative_hash_object (t, val);
3854 else if (class == 'c')
3856 /* Alas, constants aren't shared, so we can't rely on pointer
3858 if (code == INTEGER_CST)
3860 val = iterative_hash_object (TREE_INT_CST_LOW (t), val);
3861 val = iterative_hash_object (TREE_INT_CST_HIGH (t), val);
3863 else if (code == REAL_CST)
3864 val = iterative_hash (TREE_REAL_CST_PTR (t),
3865 sizeof (REAL_VALUE_TYPE), val);
3866 else if (code == STRING_CST)
3867 val = iterative_hash (TREE_STRING_POINTER (t),
3868 TREE_STRING_LENGTH (t), val);
3869 else if (code == COMPLEX_CST)
3871 val = iterative_hash_expr (TREE_REALPART (t), val);
3872 val = iterative_hash_expr (TREE_IMAGPART (t), val);
3874 else if (code == VECTOR_CST)
3875 val = iterative_hash_expr (TREE_VECTOR_CST_ELTS (t), val);
3879 else if (IS_EXPR_CODE_CLASS (class))
3881 val = iterative_hash_object (code, val);
3883 /* Don't hash the type, that can lead to having nodes which
3884 compare equal according to operand_equal_p, but which
3885 have different hash codes. */
3886 if (code == NOP_EXPR
3887 || code == CONVERT_EXPR
3888 || code == NON_LVALUE_EXPR)
3890 /* Make sure to include signness in the hash computation. */
3891 val += TYPE_UNSIGNED (TREE_TYPE (t));
3892 val = iterative_hash_expr (TREE_OPERAND (t, 0), val);
3895 if (commutative_tree_code (code))
3897 /* It's a commutative expression. We want to hash it the same
3898 however it appears. We do this by first hashing both operands
3899 and then rehashing based on the order of their independent
3901 hashval_t one = iterative_hash_expr (TREE_OPERAND (t, 0), 0);
3902 hashval_t two = iterative_hash_expr (TREE_OPERAND (t, 1), 0);
3906 t = one, one = two, two = t;
3908 val = iterative_hash_object (one, val);
3909 val = iterative_hash_object (two, val);
3912 for (i = first_rtl_op (code) - 1; i >= 0; --i)
3913 val = iterative_hash_expr (TREE_OPERAND (t, i), val);
3915 else if (code == TREE_LIST)
3917 /* A list of expressions, for a CALL_EXPR or as the elements of a
3919 for (; t; t = TREE_CHAIN (t))
3920 val = iterative_hash_expr (TREE_VALUE (t), val);
3922 else if (code == SSA_NAME)
3924 val = iterative_hash_object (SSA_NAME_VERSION (t), val);
3925 val = iterative_hash_expr (SSA_NAME_VAR (t), val);
3933 /* Constructors for pointer, array and function types.
3934 (RECORD_TYPE, UNION_TYPE and ENUMERAL_TYPE nodes are
3935 constructed by language-dependent code, not here.) */
3937 /* Construct, lay out and return the type of pointers to TO_TYPE with
3938 mode MODE. If CAN_ALIAS_ALL is TRUE, indicate this type can
3939 reference all of memory. If such a type has already been
3940 constructed, reuse it. */
3943 build_pointer_type_for_mode (tree to_type, enum machine_mode mode,
3948 /* In some cases, languages will have things that aren't a POINTER_TYPE
3949 (such as a RECORD_TYPE for fat pointers in Ada) as TYPE_POINTER_TO.
3950 In that case, return that type without regard to the rest of our
3953 ??? This is a kludge, but consistent with the way this function has
3954 always operated and there doesn't seem to be a good way to avoid this
3956 if (TYPE_POINTER_TO (to_type) != 0
3957 && TREE_CODE (TYPE_POINTER_TO (to_type)) != POINTER_TYPE)
3958 return TYPE_POINTER_TO (to_type);
3960 /* First, if we already have a type for pointers to TO_TYPE and it's
3961 the proper mode, use it. */
3962 for (t = TYPE_POINTER_TO (to_type); t; t = TYPE_NEXT_PTR_TO (t))
3963 if (TYPE_MODE (t) == mode && TYPE_REF_CAN_ALIAS_ALL (t) == can_alias_all)
3966 t = make_node (POINTER_TYPE);
3968 TREE_TYPE (t) = to_type;
3969 TYPE_MODE (t) = mode;
3970 TYPE_REF_CAN_ALIAS_ALL (t) = can_alias_all;
3971 TYPE_NEXT_PTR_TO (t) = TYPE_POINTER_TO (to_type);
3972 TYPE_POINTER_TO (to_type) = t;
3974 /* Lay out the type. This function has many callers that are concerned
3975 with expression-construction, and this simplifies them all. */
3981 /* By default build pointers in ptr_mode. */
3984 build_pointer_type (tree to_type)
3986 return build_pointer_type_for_mode (to_type, ptr_mode, false);
3989 /* Same as build_pointer_type_for_mode, but for REFERENCE_TYPE. */
3992 build_reference_type_for_mode (tree to_type, enum machine_mode mode,
3997 /* In some cases, languages will have things that aren't a REFERENCE_TYPE
3998 (such as a RECORD_TYPE for fat pointers in Ada) as TYPE_REFERENCE_TO.
3999 In that case, return that type without regard to the rest of our
4002 ??? This is a kludge, but consistent with the way this function has
4003 always operated and there doesn't seem to be a good way to avoid this
4005 if (TYPE_REFERENCE_TO (to_type) != 0
4006 && TREE_CODE (TYPE_REFERENCE_TO (to_type)) != REFERENCE_TYPE)
4007 return TYPE_REFERENCE_TO (to_type);
4009 /* First, if we already have a type for pointers to TO_TYPE and it's
4010 the proper mode, use it. */
4011 for (t = TYPE_REFERENCE_TO (to_type); t; t = TYPE_NEXT_REF_TO (t))
4012 if (TYPE_MODE (t) == mode && TYPE_REF_CAN_ALIAS_ALL (t) == can_alias_all)
4015 t = make_node (REFERENCE_TYPE);
4017 TREE_TYPE (t) = to_type;
4018 TYPE_MODE (t) = mode;
4019 TYPE_REF_CAN_ALIAS_ALL (t) = can_alias_all;
4020 TYPE_NEXT_REF_TO (t) = TYPE_REFERENCE_TO (to_type);
4021 TYPE_REFERENCE_TO (to_type) = t;
4029 /* Build the node for the type of references-to-TO_TYPE by default
4033 build_reference_type (tree to_type)
4035 return build_reference_type_for_mode (to_type, ptr_mode, false);
4038 /* Build a type that is compatible with t but has no cv quals anywhere
4041 const char *const *const * -> char ***. */
4044 build_type_no_quals (tree t)
4046 switch (TREE_CODE (t))
4049 return build_pointer_type_for_mode (build_type_no_quals (TREE_TYPE (t)),
4051 TYPE_REF_CAN_ALIAS_ALL (t));
4052 case REFERENCE_TYPE:
4054 build_reference_type_for_mode (build_type_no_quals (TREE_TYPE (t)),
4056 TYPE_REF_CAN_ALIAS_ALL (t));
4058 return TYPE_MAIN_VARIANT (t);
4062 /* Create a type of integers to be the TYPE_DOMAIN of an ARRAY_TYPE.
4063 MAXVAL should be the maximum value in the domain
4064 (one less than the length of the array).
4066 The maximum value that MAXVAL can have is INT_MAX for a HOST_WIDE_INT.
4067 We don't enforce this limit, that is up to caller (e.g. language front end).
4068 The limit exists because the result is a signed type and we don't handle
4069 sizes that use more than one HOST_WIDE_INT. */
4072 build_index_type (tree maxval)
4074 tree itype = make_node (INTEGER_TYPE);
4076 TREE_TYPE (itype) = sizetype;
4077 TYPE_PRECISION (itype) = TYPE_PRECISION (sizetype);
4078 TYPE_MIN_VALUE (itype) = size_zero_node;
4079 TYPE_MAX_VALUE (itype) = convert (sizetype, maxval);
4080 TYPE_MODE (itype) = TYPE_MODE (sizetype);
4081 TYPE_SIZE (itype) = TYPE_SIZE (sizetype);
4082 TYPE_SIZE_UNIT (itype) = TYPE_SIZE_UNIT (sizetype);
4083 TYPE_ALIGN (itype) = TYPE_ALIGN (sizetype);
4084 TYPE_USER_ALIGN (itype) = TYPE_USER_ALIGN (sizetype);
4086 if (host_integerp (maxval, 1))
4087 return type_hash_canon (tree_low_cst (maxval, 1), itype);
4092 /* Create a range of some discrete type TYPE (an INTEGER_TYPE,
4093 ENUMERAL_TYPE, BOOLEAN_TYPE, or CHAR_TYPE), with
4094 low bound LOWVAL and high bound HIGHVAL.
4095 if TYPE==NULL_TREE, sizetype is used. */
4098 build_range_type (tree type, tree lowval, tree highval)
4100 tree itype = make_node (INTEGER_TYPE);
4102 TREE_TYPE (itype) = type;
4103 if (type == NULL_TREE)
4106 TYPE_MIN_VALUE (itype) = convert (type, lowval);
4107 TYPE_MAX_VALUE (itype) = highval ? convert (type, highval) : NULL;
4109 TYPE_PRECISION (itype) = TYPE_PRECISION (type);
4110 TYPE_MODE (itype) = TYPE_MODE (type);
4111 TYPE_SIZE (itype) = TYPE_SIZE (type);
4112 TYPE_SIZE_UNIT (itype) = TYPE_SIZE_UNIT (type);
4113 TYPE_ALIGN (itype) = TYPE_ALIGN (type);
4114 TYPE_USER_ALIGN (itype) = TYPE_USER_ALIGN (type);
4116 if (host_integerp (lowval, 0) && highval != 0 && host_integerp (highval, 0))
4117 return type_hash_canon (tree_low_cst (highval, 0)
4118 - tree_low_cst (lowval, 0),
4124 /* Just like build_index_type, but takes lowval and highval instead
4125 of just highval (maxval). */
4128 build_index_2_type (tree lowval, tree highval)
4130 return build_range_type (sizetype, lowval, highval);
4133 /* Construct, lay out and return the type of arrays of elements with ELT_TYPE
4134 and number of elements specified by the range of values of INDEX_TYPE.
4135 If such a type has already been constructed, reuse it. */
4138 build_array_type (tree elt_type, tree index_type)
4141 hashval_t hashcode = 0;
4143 if (TREE_CODE (elt_type) == FUNCTION_TYPE)
4145 error ("arrays of functions are not meaningful");
4146 elt_type = integer_type_node;
4149 t = make_node (ARRAY_TYPE);
4150 TREE_TYPE (t) = elt_type;
4151 TYPE_DOMAIN (t) = index_type;
4153 if (index_type == 0)
4156 hashcode = iterative_hash_object (TYPE_HASH (elt_type), hashcode);
4157 hashcode = iterative_hash_object (TYPE_HASH (index_type), hashcode);
4158 t = type_hash_canon (hashcode, t);
4160 if (!COMPLETE_TYPE_P (t))
4165 /* Return the TYPE of the elements comprising
4166 the innermost dimension of ARRAY. */
4169 get_inner_array_type (tree array)
4171 tree type = TREE_TYPE (array);
4173 while (TREE_CODE (type) == ARRAY_TYPE)
4174 type = TREE_TYPE (type);
4179 /* Construct, lay out and return
4180 the type of functions returning type VALUE_TYPE
4181 given arguments of types ARG_TYPES.
4182 ARG_TYPES is a chain of TREE_LIST nodes whose TREE_VALUEs
4183 are data type nodes for the arguments of the function.
4184 If such a type has already been constructed, reuse it. */
4187 build_function_type (tree value_type, tree arg_types)
4190 hashval_t hashcode = 0;
4192 if (TREE_CODE (value_type) == FUNCTION_TYPE)
4194 error ("function return type cannot be function");
4195 value_type = integer_type_node;
4198 /* Make a node of the sort we want. */
4199 t = make_node (FUNCTION_TYPE);
4200 TREE_TYPE (t) = value_type;
4201 TYPE_ARG_TYPES (t) = arg_types;
4203 /* If we already have such a type, use the old one. */
4204 hashcode = iterative_hash_object (TYPE_HASH (value_type), hashcode);
4205 hashcode = type_hash_list (arg_types, hashcode);
4206 t = type_hash_canon (hashcode, t);
4208 if (!COMPLETE_TYPE_P (t))
4213 /* Build a function type. The RETURN_TYPE is the type returned by the
4214 function. If additional arguments are provided, they are
4215 additional argument types. The list of argument types must always
4216 be terminated by NULL_TREE. */
4219 build_function_type_list (tree return_type, ...)
4224 va_start (p, return_type);
4226 t = va_arg (p, tree);
4227 for (args = NULL_TREE; t != NULL_TREE; t = va_arg (p, tree))
4228 args = tree_cons (NULL_TREE, t, args);
4231 args = nreverse (args);
4232 TREE_CHAIN (last) = void_list_node;
4233 args = build_function_type (return_type, args);
4239 /* Build a METHOD_TYPE for a member of BASETYPE. The RETTYPE (a TYPE)
4240 and ARGTYPES (a TREE_LIST) are the return type and arguments types
4241 for the method. An implicit additional parameter (of type
4242 pointer-to-BASETYPE) is added to the ARGTYPES. */
4245 build_method_type_directly (tree basetype,
4253 /* Make a node of the sort we want. */
4254 t = make_node (METHOD_TYPE);
4256 TYPE_METHOD_BASETYPE (t) = TYPE_MAIN_VARIANT (basetype);
4257 TREE_TYPE (t) = rettype;
4258 ptype = build_pointer_type (basetype);
4260 /* The actual arglist for this function includes a "hidden" argument
4261 which is "this". Put it into the list of argument types. */
4262 argtypes = tree_cons (NULL_TREE, ptype, argtypes);
4263 TYPE_ARG_TYPES (t) = argtypes;
4265 /* If we already have such a type, use the old one. */
4266 hashcode = iterative_hash_object (TYPE_HASH (basetype), hashcode);
4267 hashcode = iterative_hash_object (TYPE_HASH (rettype), hashcode);
4268 hashcode = type_hash_list (argtypes, hashcode);
4269 t = type_hash_canon (hashcode, t);
4271 if (!COMPLETE_TYPE_P (t))
4277 /* Construct, lay out and return the type of methods belonging to class
4278 BASETYPE and whose arguments and values are described by TYPE.
4279 If that type exists already, reuse it.
4280 TYPE must be a FUNCTION_TYPE node. */
4283 build_method_type (tree basetype, tree type)
4285 if (TREE_CODE (type) != FUNCTION_TYPE)
4288 return build_method_type_directly (basetype,
4290 TYPE_ARG_TYPES (type));
4293 /* Construct, lay out and return the type of offsets to a value
4294 of type TYPE, within an object of type BASETYPE.
4295 If a suitable offset type exists already, reuse it. */
4298 build_offset_type (tree basetype, tree type)
4301 hashval_t hashcode = 0;
4303 /* Make a node of the sort we want. */
4304 t = make_node (OFFSET_TYPE);
4306 TYPE_OFFSET_BASETYPE (t) = TYPE_MAIN_VARIANT (basetype);
4307 TREE_TYPE (t) = type;
4309 /* If we already have such a type, use the old one. */
4310 hashcode = iterative_hash_object (TYPE_HASH (basetype), hashcode);
4311 hashcode = iterative_hash_object (TYPE_HASH (type), hashcode);
4312 t = type_hash_canon (hashcode, t);
4314 if (!COMPLETE_TYPE_P (t))
4320 /* Create a complex type whose components are COMPONENT_TYPE. */
4323 build_complex_type (tree component_type)
4328 /* Make a node of the sort we want. */
4329 t = make_node (COMPLEX_TYPE);
4331 TREE_TYPE (t) = TYPE_MAIN_VARIANT (component_type);
4333 /* If we already have such a type, use the old one. */
4334 hashcode = iterative_hash_object (TYPE_HASH (component_type), 0);
4335 t = type_hash_canon (hashcode, t);
4337 if (!COMPLETE_TYPE_P (t))
4340 /* If we are writing Dwarf2 output we need to create a name,
4341 since complex is a fundamental type. */
4342 if ((write_symbols == DWARF2_DEBUG || write_symbols == VMS_AND_DWARF2_DEBUG)
4346 if (component_type == char_type_node)
4347 name = "complex char";
4348 else if (component_type == signed_char_type_node)
4349 name = "complex signed char";
4350 else if (component_type == unsigned_char_type_node)
4351 name = "complex unsigned char";
4352 else if (component_type == short_integer_type_node)
4353 name = "complex short int";
4354 else if (component_type == short_unsigned_type_node)
4355 name = "complex short unsigned int";
4356 else if (component_type == integer_type_node)
4357 name = "complex int";
4358 else if (component_type == unsigned_type_node)
4359 name = "complex unsigned int";
4360 else if (component_type == long_integer_type_node)
4361 name = "complex long int";
4362 else if (component_type == long_unsigned_type_node)
4363 name = "complex long unsigned int";
4364 else if (component_type == long_long_integer_type_node)
4365 name = "complex long long int";
4366 else if (component_type == long_long_unsigned_type_node)
4367 name = "complex long long unsigned int";
4372 TYPE_NAME (t) = get_identifier (name);
4375 return build_qualified_type (t, TYPE_QUALS (component_type));
4378 /* Return OP, stripped of any conversions to wider types as much as is safe.
4379 Converting the value back to OP's type makes a value equivalent to OP.
4381 If FOR_TYPE is nonzero, we return a value which, if converted to
4382 type FOR_TYPE, would be equivalent to converting OP to type FOR_TYPE.
4384 If FOR_TYPE is nonzero, unaligned bit-field references may be changed to the
4385 narrowest type that can hold the value, even if they don't exactly fit.
4386 Otherwise, bit-field references are changed to a narrower type
4387 only if they can be fetched directly from memory in that type.
4389 OP must have integer, real or enumeral type. Pointers are not allowed!
4391 There are some cases where the obvious value we could return
4392 would regenerate to OP if converted to OP's type,
4393 but would not extend like OP to wider types.
4394 If FOR_TYPE indicates such extension is contemplated, we eschew such values.
4395 For example, if OP is (unsigned short)(signed char)-1,
4396 we avoid returning (signed char)-1 if FOR_TYPE is int,
4397 even though extending that to an unsigned short would regenerate OP,
4398 since the result of extending (signed char)-1 to (int)
4399 is different from (int) OP. */
4402 get_unwidened (tree op, tree for_type)
4404 /* Set UNS initially if converting OP to FOR_TYPE is a zero-extension. */
4405 tree type = TREE_TYPE (op);
4407 = TYPE_PRECISION (for_type != 0 ? for_type : type);
4409 = (for_type != 0 && for_type != type
4410 && final_prec > TYPE_PRECISION (type)
4411 && TYPE_UNSIGNED (type));
4414 while (TREE_CODE (op) == NOP_EXPR)
4417 = TYPE_PRECISION (TREE_TYPE (op))
4418 - TYPE_PRECISION (TREE_TYPE (TREE_OPERAND (op, 0)));
4420 /* Truncations are many-one so cannot be removed.
4421 Unless we are later going to truncate down even farther. */
4423 && final_prec > TYPE_PRECISION (TREE_TYPE (op)))
4426 /* See what's inside this conversion. If we decide to strip it,
4428 op = TREE_OPERAND (op, 0);
4430 /* If we have not stripped any zero-extensions (uns is 0),
4431 we can strip any kind of extension.
4432 If we have previously stripped a zero-extension,
4433 only zero-extensions can safely be stripped.
4434 Any extension can be stripped if the bits it would produce
4435 are all going to be discarded later by truncating to FOR_TYPE. */
4439 if (! uns || final_prec <= TYPE_PRECISION (TREE_TYPE (op)))
4441 /* TYPE_UNSIGNED says whether this is a zero-extension.
4442 Let's avoid computing it if it does not affect WIN
4443 and if UNS will not be needed again. */
4444 if ((uns || TREE_CODE (op) == NOP_EXPR)
4445 && TYPE_UNSIGNED (TREE_TYPE (op)))
4453 if (TREE_CODE (op) == COMPONENT_REF
4454 /* Since type_for_size always gives an integer type. */
4455 && TREE_CODE (type) != REAL_TYPE
4456 /* Don't crash if field not laid out yet. */
4457 && DECL_SIZE (TREE_OPERAND (op, 1)) != 0
4458 && host_integerp (DECL_SIZE (TREE_OPERAND (op, 1)), 1))
4460 unsigned int innerprec
4461 = tree_low_cst (DECL_SIZE (TREE_OPERAND (op, 1)), 1);
4462 int unsignedp = (DECL_UNSIGNED (TREE_OPERAND (op, 1))
4463 || TYPE_UNSIGNED (TREE_TYPE (TREE_OPERAND (op, 1))));
4464 type = lang_hooks.types.type_for_size (innerprec, unsignedp);
4466 /* We can get this structure field in the narrowest type it fits in.
4467 If FOR_TYPE is 0, do this only for a field that matches the
4468 narrower type exactly and is aligned for it
4469 The resulting extension to its nominal type (a fullword type)
4470 must fit the same conditions as for other extensions. */
4473 && INT_CST_LT_UNSIGNED (TYPE_SIZE (type), TYPE_SIZE (TREE_TYPE (op)))
4474 && (for_type || ! DECL_BIT_FIELD (TREE_OPERAND (op, 1)))
4475 && (! uns || final_prec <= innerprec || unsignedp))
4477 win = build (COMPONENT_REF, type, TREE_OPERAND (op, 0),
4478 TREE_OPERAND (op, 1));
4479 TREE_SIDE_EFFECTS (win) = TREE_SIDE_EFFECTS (op);
4480 TREE_THIS_VOLATILE (win) = TREE_THIS_VOLATILE (op);
4487 /* Return OP or a simpler expression for a narrower value
4488 which can be sign-extended or zero-extended to give back OP.
4489 Store in *UNSIGNEDP_PTR either 1 if the value should be zero-extended
4490 or 0 if the value should be sign-extended. */
4493 get_narrower (tree op, int *unsignedp_ptr)
4499 while (TREE_CODE (op) == NOP_EXPR)
4502 = (TYPE_PRECISION (TREE_TYPE (op))
4503 - TYPE_PRECISION (TREE_TYPE (TREE_OPERAND (op, 0))));
4505 /* Truncations are many-one so cannot be removed. */
4509 /* See what's inside this conversion. If we decide to strip it,
4514 op = TREE_OPERAND (op, 0);
4515 /* An extension: the outermost one can be stripped,
4516 but remember whether it is zero or sign extension. */
4518 uns = TYPE_UNSIGNED (TREE_TYPE (op));
4519 /* Otherwise, if a sign extension has been stripped,
4520 only sign extensions can now be stripped;
4521 if a zero extension has been stripped, only zero-extensions. */
4522 else if (uns != TYPE_UNSIGNED (TREE_TYPE (op)))
4526 else /* bitschange == 0 */
4528 /* A change in nominal type can always be stripped, but we must
4529 preserve the unsignedness. */
4531 uns = TYPE_UNSIGNED (TREE_TYPE (op));
4533 op = TREE_OPERAND (op, 0);
4539 if (TREE_CODE (op) == COMPONENT_REF
4540 /* Since type_for_size always gives an integer type. */
4541 && TREE_CODE (TREE_TYPE (op)) != REAL_TYPE
4542 /* Ensure field is laid out already. */
4543 && DECL_SIZE (TREE_OPERAND (op, 1)) != 0)
4545 unsigned HOST_WIDE_INT innerprec
4546 = tree_low_cst (DECL_SIZE (TREE_OPERAND (op, 1)), 1);
4547 int unsignedp = (DECL_UNSIGNED (TREE_OPERAND (op, 1))
4548 || TYPE_UNSIGNED (TREE_TYPE (TREE_OPERAND (op, 1))));
4549 tree type = lang_hooks.types.type_for_size (innerprec, unsignedp);
4551 /* We can get this structure field in a narrower type that fits it,
4552 but the resulting extension to its nominal type (a fullword type)
4553 must satisfy the same conditions as for other extensions.
4555 Do this only for fields that are aligned (not bit-fields),
4556 because when bit-field insns will be used there is no
4557 advantage in doing this. */
4559 if (innerprec < TYPE_PRECISION (TREE_TYPE (op))
4560 && ! DECL_BIT_FIELD (TREE_OPERAND (op, 1))
4561 && (first || uns == DECL_UNSIGNED (TREE_OPERAND (op, 1)))
4565 uns = DECL_UNSIGNED (TREE_OPERAND (op, 1));
4566 win = build (COMPONENT_REF, type, TREE_OPERAND (op, 0),
4567 TREE_OPERAND (op, 1));
4568 TREE_SIDE_EFFECTS (win) = TREE_SIDE_EFFECTS (op);
4569 TREE_THIS_VOLATILE (win) = TREE_THIS_VOLATILE (op);
4572 *unsignedp_ptr = uns;
4576 /* Nonzero if integer constant C has a value that is permissible
4577 for type TYPE (an INTEGER_TYPE). */
4580 int_fits_type_p (tree c, tree type)
4582 tree type_low_bound = TYPE_MIN_VALUE (type);
4583 tree type_high_bound = TYPE_MAX_VALUE (type);
4584 int ok_for_low_bound, ok_for_high_bound;
4586 /* Perform some generic filtering first, which may allow making a decision
4587 even if the bounds are not constant. First, negative integers never fit
4588 in unsigned types, */
4589 if ((TYPE_UNSIGNED (type) && tree_int_cst_sgn (c) < 0)
4590 /* Also, unsigned integers with top bit set never fit signed types. */
4591 || (! TYPE_UNSIGNED (type)
4592 && TYPE_UNSIGNED (TREE_TYPE (c)) && tree_int_cst_msb (c)))
4595 /* If at least one bound of the type is a constant integer, we can check
4596 ourselves and maybe make a decision. If no such decision is possible, but
4597 this type is a subtype, try checking against that. Otherwise, use
4598 force_fit_type, which checks against the precision.
4600 Compute the status for each possibly constant bound, and return if we see
4601 one does not match. Use ok_for_xxx_bound for this purpose, assigning -1
4602 for "unknown if constant fits", 0 for "constant known *not* to fit" and 1
4603 for "constant known to fit". */
4605 ok_for_low_bound = -1;
4606 ok_for_high_bound = -1;
4608 /* Check if C >= type_low_bound. */
4609 if (type_low_bound && TREE_CODE (type_low_bound) == INTEGER_CST)
4611 ok_for_low_bound = ! tree_int_cst_lt (c, type_low_bound);
4612 if (! ok_for_low_bound)
4616 /* Check if c <= type_high_bound. */
4617 if (type_high_bound && TREE_CODE (type_high_bound) == INTEGER_CST)
4619 ok_for_high_bound = ! tree_int_cst_lt (type_high_bound, c);
4620 if (! ok_for_high_bound)
4624 /* If the constant fits both bounds, the result is known. */
4625 if (ok_for_low_bound == 1 && ok_for_high_bound == 1)
4628 /* If we haven't been able to decide at this point, there nothing more we
4629 can check ourselves here. Look at the base type if we have one. */
4630 else if (TREE_CODE (type) == INTEGER_TYPE && TREE_TYPE (type) != 0)
4631 return int_fits_type_p (c, TREE_TYPE (type));
4633 /* Or to force_fit_type, if nothing else. */
4637 TREE_TYPE (c) = type;
4638 return !force_fit_type (c, 0);
4642 /* Returns true if T is, contains, or refers to a type with variable
4643 size. This concept is more general than that of C99 'variably
4644 modified types': in C99, a struct type is never variably modified
4645 because a VLA may not appear as a structure member. However, in
4648 struct S { int i[f()]; };
4650 is valid, and other languages may define similar constructs. */
4653 variably_modified_type_p (tree type)
4657 if (type == error_mark_node)
4660 /* If TYPE itself has variable size, it is variably modified.
4662 We do not yet have a representation of the C99 '[*]' syntax.
4663 When a representation is chosen, this function should be modified
4664 to test for that case as well. */
4665 t = TYPE_SIZE (type);
4666 if (t && t != error_mark_node && TREE_CODE (t) != INTEGER_CST)
4669 switch (TREE_CODE (type))
4672 case REFERENCE_TYPE:
4676 if (variably_modified_type_p (TREE_TYPE (type)))
4682 /* If TYPE is a function type, it is variably modified if any of the
4683 parameters or the return type are variably modified. */
4684 if (variably_modified_type_p (TREE_TYPE (type)))
4687 for (t = TYPE_ARG_TYPES (type);
4688 t && t != void_list_node;
4690 if (variably_modified_type_p (TREE_VALUE (t)))
4699 /* Scalar types are variably modified if their end points
4701 t = TYPE_MIN_VALUE (type);
4702 if (t && t != error_mark_node && TREE_CODE (t) != INTEGER_CST)
4705 t = TYPE_MAX_VALUE (type);
4706 if (t && t != error_mark_node && TREE_CODE (t) != INTEGER_CST)
4712 case QUAL_UNION_TYPE:
4713 /* We can't see if any of the field are variably-modified by the
4714 definition we normally use, since that would produce infinite
4715 recursion via pointers. */
4716 /* This is variably modified if some field's type is. */
4717 for (t = TYPE_FIELDS (type); t; t = TREE_CHAIN (t))
4718 if (TREE_CODE (t) == FIELD_DECL)
4720 tree t1 = DECL_FIELD_OFFSET (t);
4722 if (t1 && t1 != error_mark_node && TREE_CODE (t1) != INTEGER_CST)
4726 if (t1 && t1 != error_mark_node && TREE_CODE (t1) != INTEGER_CST)
4735 /* The current language may have other cases to check, but in general,
4736 all other types are not variably modified. */
4737 return lang_hooks.tree_inlining.var_mod_type_p (type);
4740 /* Given a DECL or TYPE, return the scope in which it was declared, or
4741 NULL_TREE if there is no containing scope. */
4744 get_containing_scope (tree t)
4746 return (TYPE_P (t) ? TYPE_CONTEXT (t) : DECL_CONTEXT (t));
4749 /* Return the innermost context enclosing DECL that is
4750 a FUNCTION_DECL, or zero if none. */
4753 decl_function_context (tree decl)
4757 if (TREE_CODE (decl) == ERROR_MARK)
4760 if (TREE_CODE (decl) == SAVE_EXPR)
4761 context = SAVE_EXPR_CONTEXT (decl);
4763 /* C++ virtual functions use DECL_CONTEXT for the class of the vtable
4764 where we look up the function at runtime. Such functions always take
4765 a first argument of type 'pointer to real context'.
4767 C++ should really be fixed to use DECL_CONTEXT for the real context,
4768 and use something else for the "virtual context". */
4769 else if (TREE_CODE (decl) == FUNCTION_DECL && DECL_VINDEX (decl))
4772 (TREE_TYPE (TREE_VALUE (TYPE_ARG_TYPES (TREE_TYPE (decl)))));
4774 context = DECL_CONTEXT (decl);
4776 while (context && TREE_CODE (context) != FUNCTION_DECL)
4778 if (TREE_CODE (context) == BLOCK)
4779 context = BLOCK_SUPERCONTEXT (context);
4781 context = get_containing_scope (context);
4787 /* Return the innermost context enclosing DECL that is
4788 a RECORD_TYPE, UNION_TYPE or QUAL_UNION_TYPE, or zero if none.
4789 TYPE_DECLs and FUNCTION_DECLs are transparent to this function. */
4792 decl_type_context (tree decl)
4794 tree context = DECL_CONTEXT (decl);
4797 switch (TREE_CODE (context))
4799 case NAMESPACE_DECL:
4800 case TRANSLATION_UNIT_DECL:
4805 case QUAL_UNION_TYPE:
4810 context = DECL_CONTEXT (context);
4814 context = BLOCK_SUPERCONTEXT (context);
4824 /* CALL is a CALL_EXPR. Return the declaration for the function
4825 called, or NULL_TREE if the called function cannot be
4829 get_callee_fndecl (tree call)
4833 /* It's invalid to call this function with anything but a
4835 if (TREE_CODE (call) != CALL_EXPR)
4838 /* The first operand to the CALL is the address of the function
4840 addr = TREE_OPERAND (call, 0);
4844 /* If this is a readonly function pointer, extract its initial value. */
4845 if (DECL_P (addr) && TREE_CODE (addr) != FUNCTION_DECL
4846 && TREE_READONLY (addr) && ! TREE_THIS_VOLATILE (addr)
4847 && DECL_INITIAL (addr))
4848 addr = DECL_INITIAL (addr);
4850 /* If the address is just `&f' for some function `f', then we know
4851 that `f' is being called. */
4852 if (TREE_CODE (addr) == ADDR_EXPR
4853 && TREE_CODE (TREE_OPERAND (addr, 0)) == FUNCTION_DECL)
4854 return TREE_OPERAND (addr, 0);
4856 /* We couldn't figure out what was being called. Maybe the front
4857 end has some idea. */
4858 return lang_hooks.lang_get_callee_fndecl (call);
4861 /* Print debugging information about tree nodes generated during the compile,
4862 and any language-specific information. */
4865 dump_tree_statistics (void)
4867 #ifdef GATHER_STATISTICS
4869 int total_nodes, total_bytes;
4872 fprintf (stderr, "\n??? tree nodes created\n\n");
4873 #ifdef GATHER_STATISTICS
4874 fprintf (stderr, "Kind Nodes Bytes\n");
4875 fprintf (stderr, "---------------------------------------\n");
4876 total_nodes = total_bytes = 0;
4877 for (i = 0; i < (int) all_kinds; i++)
4879 fprintf (stderr, "%-20s %7d %10d\n", tree_node_kind_names[i],
4880 tree_node_counts[i], tree_node_sizes[i]);
4881 total_nodes += tree_node_counts[i];
4882 total_bytes += tree_node_sizes[i];
4884 fprintf (stderr, "---------------------------------------\n");
4885 fprintf (stderr, "%-20s %7d %10d\n", "Total", total_nodes, total_bytes);
4886 fprintf (stderr, "---------------------------------------\n");
4887 ssanames_print_statistics ();
4888 phinodes_print_statistics ();
4890 fprintf (stderr, "(No per-node statistics)\n");
4892 print_type_hash_statistics ();
4893 lang_hooks.print_statistics ();
4896 #define FILE_FUNCTION_FORMAT "_GLOBAL__%s_%s"
4898 /* Generate a crc32 of a string. */
4901 crc32_string (unsigned chksum, const char *string)
4905 unsigned value = *string << 24;
4908 for (ix = 8; ix--; value <<= 1)
4912 feedback = (value ^ chksum) & 0x80000000 ? 0x04c11db7 : 0;
4921 /* P is a string that will be used in a symbol. Mask out any characters
4922 that are not valid in that context. */
4925 clean_symbol_name (char *p)
4929 #ifndef NO_DOLLAR_IN_LABEL /* this for `$'; unlikely, but... -- kr */
4932 #ifndef NO_DOT_IN_LABEL /* this for `.'; unlikely, but... */
4939 /* Generate a name for a function unique to this translation unit.
4940 TYPE is some string to identify the purpose of this function to the
4941 linker or collect2. */
4944 get_file_function_name_long (const char *type)
4950 if (first_global_object_name)
4951 p = first_global_object_name;
4954 /* We don't have anything that we know to be unique to this translation
4955 unit, so use what we do have and throw in some randomness. */
4957 const char *name = weak_global_object_name;
4958 const char *file = main_input_filename;
4963 file = input_filename;
4965 len = strlen (file);
4966 q = alloca (9 * 2 + len + 1);
4967 memcpy (q, file, len + 1);
4968 clean_symbol_name (q);
4970 sprintf (q + len, "_%08X_%08X", crc32_string (0, name),
4971 crc32_string (0, flag_random_seed));
4976 buf = alloca (sizeof (FILE_FUNCTION_FORMAT) + strlen (p) + strlen (type));
4978 /* Set up the name of the file-level functions we may need.
4979 Use a global object (which is already required to be unique over
4980 the program) rather than the file name (which imposes extra
4982 sprintf (buf, FILE_FUNCTION_FORMAT, type, p);
4984 return get_identifier (buf);
4987 /* If KIND=='I', return a suitable global initializer (constructor) name.
4988 If KIND=='D', return a suitable global clean-up (destructor) name. */
4991 get_file_function_name (int kind)
4998 return get_file_function_name_long (p);
5001 /* Expand (the constant part of) a SET_TYPE CONSTRUCTOR node.
5002 The result is placed in BUFFER (which has length BIT_SIZE),
5003 with one bit in each char ('\000' or '\001').
5005 If the constructor is constant, NULL_TREE is returned.
5006 Otherwise, a TREE_LIST of the non-constant elements is emitted. */
5009 get_set_constructor_bits (tree init, char *buffer, int bit_size)
5013 HOST_WIDE_INT domain_min
5014 = tree_low_cst (TYPE_MIN_VALUE (TYPE_DOMAIN (TREE_TYPE (init))), 0);
5015 tree non_const_bits = NULL_TREE;
5017 for (i = 0; i < bit_size; i++)
5020 for (vals = TREE_OPERAND (init, 1);
5021 vals != NULL_TREE; vals = TREE_CHAIN (vals))
5023 if (!host_integerp (TREE_VALUE (vals), 0)
5024 || (TREE_PURPOSE (vals) != NULL_TREE
5025 && !host_integerp (TREE_PURPOSE (vals), 0)))
5027 = tree_cons (TREE_PURPOSE (vals), TREE_VALUE (vals), non_const_bits);
5028 else if (TREE_PURPOSE (vals) != NULL_TREE)
5030 /* Set a range of bits to ones. */
5031 HOST_WIDE_INT lo_index
5032 = tree_low_cst (TREE_PURPOSE (vals), 0) - domain_min;
5033 HOST_WIDE_INT hi_index
5034 = tree_low_cst (TREE_VALUE (vals), 0) - domain_min;
5036 if (lo_index < 0 || lo_index >= bit_size
5037 || hi_index < 0 || hi_index >= bit_size)
5039 for (; lo_index <= hi_index; lo_index++)
5040 buffer[lo_index] = 1;
5044 /* Set a single bit to one. */
5046 = tree_low_cst (TREE_VALUE (vals), 0) - domain_min;
5047 if (index < 0 || index >= bit_size)
5049 error ("invalid initializer for bit string");
5055 return non_const_bits;
5058 /* Expand (the constant part of) a SET_TYPE CONSTRUCTOR node.
5059 The result is placed in BUFFER (which is an array of bytes).
5060 If the constructor is constant, NULL_TREE is returned.
5061 Otherwise, a TREE_LIST of the non-constant elements is emitted. */
5064 get_set_constructor_bytes (tree init, unsigned char *buffer, int wd_size)
5067 int set_word_size = BITS_PER_UNIT;
5068 int bit_size = wd_size * set_word_size;
5070 unsigned char *bytep = buffer;
5071 char *bit_buffer = alloca (bit_size);
5072 tree non_const_bits = get_set_constructor_bits (init, bit_buffer, bit_size);
5074 for (i = 0; i < wd_size; i++)
5077 for (i = 0; i < bit_size; i++)
5081 if (BYTES_BIG_ENDIAN)
5082 *bytep |= (1 << (set_word_size - 1 - bit_pos));
5084 *bytep |= 1 << bit_pos;
5087 if (bit_pos >= set_word_size)
5088 bit_pos = 0, bytep++;
5090 return non_const_bits;
5093 #if defined ENABLE_TREE_CHECKING && (GCC_VERSION >= 2007)
5095 /* Complain that the tree code of NODE does not match the expected CODE.
5096 FILE, LINE, and FUNCTION are of the caller. */
5099 tree_check_failed (const tree node, enum tree_code code, const char *file,
5100 int line, const char *function)
5102 internal_error ("tree check: expected %s, have %s in %s, at %s:%d",
5103 tree_code_name[code], tree_code_name[TREE_CODE (node)],
5104 function, trim_filename (file), line);
5107 /* Similar to above except that we allowed the code to be one of two
5111 tree_check2_failed (const tree node, enum tree_code code1,
5112 enum tree_code code2, const char *file,
5113 int line, const char *function)
5115 internal_error ("tree check: expected %s or %s, have %s in %s, at %s:%d",
5116 tree_code_name[code1], tree_code_name[code2],
5117 tree_code_name[TREE_CODE (node)],
5118 function, trim_filename (file), line);
5121 /* Likewise for three different codes. */
5124 tree_check3_failed (const tree node, enum tree_code code1,
5125 enum tree_code code2, enum tree_code code3,
5126 const char *file, int line, const char *function)
5128 internal_error ("tree check: expected %s, %s or %s; have %s in %s, at %s:%d",
5129 tree_code_name[code1], tree_code_name[code2],
5130 tree_code_name[code3], tree_code_name[TREE_CODE (node)],
5131 function, trim_filename (file), line);
5134 /* ... and for four different codes. */
5137 tree_check4_failed (const tree node, enum tree_code code1,
5138 enum tree_code code2, enum tree_code code3,
5139 enum tree_code code4, const char *file, int line,
5140 const char *function)
5143 ("tree check: expected %s, %s, %s or %s; have %s in %s, at %s:%d",
5144 tree_code_name[code1], tree_code_name[code2], tree_code_name[code3],
5145 tree_code_name[code4], tree_code_name[TREE_CODE (node)], function,
5146 trim_filename (file), line);
5149 /* ... and for five different codes. */
5152 tree_check5_failed (const tree node, enum tree_code code1,
5153 enum tree_code code2, enum tree_code code3,
5154 enum tree_code code4, enum tree_code code5,
5155 const char *file, int line, const char *function)
5158 ("tree check: expected %s, %s, %s, %s or %s; have %s in %s, at %s:%d",
5159 tree_code_name[code1], tree_code_name[code2], tree_code_name[code3],
5160 tree_code_name[code4], tree_code_name[code5],
5161 tree_code_name[TREE_CODE (node)], function, trim_filename (file), line);
5164 /* Similar to tree_check_failed, except that we check for a class of tree
5165 code, given in CL. */
5168 tree_class_check_failed (const tree node, int cl, const char *file,
5169 int line, const char *function)
5172 ("tree check: expected class '%c', have '%c' (%s) in %s, at %s:%d",
5173 cl, TREE_CODE_CLASS (TREE_CODE (node)),
5174 tree_code_name[TREE_CODE (node)], function, trim_filename (file), line);
5177 /* Similar to above, except that the check is for the bounds of a TREE_VEC's
5178 (dynamically sized) vector. */
5181 tree_vec_elt_check_failed (int idx, int len, const char *file, int line,
5182 const char *function)
5185 ("tree check: accessed elt %d of tree_vec with %d elts in %s, at %s:%d",
5186 idx + 1, len, function, trim_filename (file), line);
5189 /* Similar to above, except that the check is for the bounds of a EPHI_NODE's
5190 (dynamically sized) vector. */
5193 ephi_node_elt_check_failed (int idx, int len, const char *file, int line,
5194 const char *function)
5197 ("tree check: accessed elt %d of ephi_node with %d elts in %s, at %s:%d",
5198 idx + 1, len, function, trim_filename (file), line);
5201 /* Similar to above, except that the check is for the bounds of a PHI_NODE's
5202 (dynamically sized) vector. */
5205 phi_node_elt_check_failed (int idx, int len, const char *file, int line,
5206 const char *function)
5209 ("tree check: accessed elt %d of phi_node with %d elts in %s, at %s:%d",
5210 idx + 1, len, function, trim_filename (file), line);
5213 /* Similar to above, except that the check is for the bounds of the operand
5214 vector of an expression node. */
5217 tree_operand_check_failed (int idx, enum tree_code code, const char *file,
5218 int line, const char *function)
5221 ("tree check: accessed operand %d of %s with %d operands in %s, at %s:%d",
5222 idx + 1, tree_code_name[code], TREE_CODE_LENGTH (code),
5223 function, trim_filename (file), line);
5225 #endif /* ENABLE_TREE_CHECKING */
5227 /* For a new vector type node T, build the information necessary for
5228 debugging output. */
5231 finish_vector_type (tree t)
5236 tree index = build_int_2 (TYPE_VECTOR_SUBPARTS (t) - 1, 0);
5237 tree array = build_array_type (TREE_TYPE (t),
5238 build_index_type (index));
5239 tree rt = make_node (RECORD_TYPE);
5241 TYPE_FIELDS (rt) = build_decl (FIELD_DECL, get_identifier ("f"), array);
5242 DECL_CONTEXT (TYPE_FIELDS (rt)) = rt;
5244 TYPE_DEBUG_REPRESENTATION_TYPE (t) = rt;
5245 /* In dwarfout.c, type lookup uses TYPE_UID numbers. We want to output
5246 the representation type, and we want to find that die when looking up
5247 the vector type. This is most easily achieved by making the TYPE_UID
5249 TYPE_UID (rt) = TYPE_UID (t);
5254 make_or_reuse_type (unsigned size, int unsignedp)
5256 if (size == INT_TYPE_SIZE)
5257 return unsignedp ? unsigned_type_node : integer_type_node;
5258 if (size == CHAR_TYPE_SIZE)
5259 return unsignedp ? unsigned_char_type_node : signed_char_type_node;
5260 if (size == SHORT_TYPE_SIZE)
5261 return unsignedp ? short_unsigned_type_node : short_integer_type_node;
5262 if (size == LONG_TYPE_SIZE)
5263 return unsignedp ? long_unsigned_type_node : long_integer_type_node;
5264 if (size == LONG_LONG_TYPE_SIZE)
5265 return (unsignedp ? long_long_unsigned_type_node
5266 : long_long_integer_type_node);
5269 return make_unsigned_type (size);
5271 return make_signed_type (size);
5274 /* Create nodes for all integer types (and error_mark_node) using the sizes
5275 of C datatypes. The caller should call set_sizetype soon after calling
5276 this function to select one of the types as sizetype. */
5279 build_common_tree_nodes (int signed_char)
5281 error_mark_node = make_node (ERROR_MARK);
5282 TREE_TYPE (error_mark_node) = error_mark_node;
5284 initialize_sizetypes ();
5286 /* Define both `signed char' and `unsigned char'. */
5287 signed_char_type_node = make_signed_type (CHAR_TYPE_SIZE);
5288 unsigned_char_type_node = make_unsigned_type (CHAR_TYPE_SIZE);
5290 /* Define `char', which is like either `signed char' or `unsigned char'
5291 but not the same as either. */
5294 ? make_signed_type (CHAR_TYPE_SIZE)
5295 : make_unsigned_type (CHAR_TYPE_SIZE));
5297 short_integer_type_node = make_signed_type (SHORT_TYPE_SIZE);
5298 short_unsigned_type_node = make_unsigned_type (SHORT_TYPE_SIZE);
5299 integer_type_node = make_signed_type (INT_TYPE_SIZE);
5300 unsigned_type_node = make_unsigned_type (INT_TYPE_SIZE);
5301 long_integer_type_node = make_signed_type (LONG_TYPE_SIZE);
5302 long_unsigned_type_node = make_unsigned_type (LONG_TYPE_SIZE);
5303 long_long_integer_type_node = make_signed_type (LONG_LONG_TYPE_SIZE);
5304 long_long_unsigned_type_node = make_unsigned_type (LONG_LONG_TYPE_SIZE);
5306 /* Define a boolean type. This type only represents boolean values but
5307 may be larger than char depending on the value of BOOL_TYPE_SIZE.
5308 Front ends which want to override this size (i.e. Java) can redefine
5309 boolean_type_node before calling build_common_tree_nodes_2. */
5310 boolean_type_node = make_unsigned_type (BOOL_TYPE_SIZE);
5311 TREE_SET_CODE (boolean_type_node, BOOLEAN_TYPE);
5312 TYPE_MAX_VALUE (boolean_type_node) = build_int_2 (1, 0);
5313 TREE_TYPE (TYPE_MAX_VALUE (boolean_type_node)) = boolean_type_node;
5314 TYPE_PRECISION (boolean_type_node) = 1;
5316 /* Fill in the rest of the sized types. Reuse existing type nodes
5318 intQI_type_node = make_or_reuse_type (GET_MODE_BITSIZE (QImode), 0);
5319 intHI_type_node = make_or_reuse_type (GET_MODE_BITSIZE (HImode), 0);
5320 intSI_type_node = make_or_reuse_type (GET_MODE_BITSIZE (SImode), 0);
5321 intDI_type_node = make_or_reuse_type (GET_MODE_BITSIZE (DImode), 0);
5322 intTI_type_node = make_or_reuse_type (GET_MODE_BITSIZE (TImode), 0);
5324 unsigned_intQI_type_node = make_or_reuse_type (GET_MODE_BITSIZE (QImode), 1);
5325 unsigned_intHI_type_node = make_or_reuse_type (GET_MODE_BITSIZE (HImode), 1);
5326 unsigned_intSI_type_node = make_or_reuse_type (GET_MODE_BITSIZE (SImode), 1);
5327 unsigned_intDI_type_node = make_or_reuse_type (GET_MODE_BITSIZE (DImode), 1);
5328 unsigned_intTI_type_node = make_or_reuse_type (GET_MODE_BITSIZE (TImode), 1);
5330 access_public_node = get_identifier ("public");
5331 access_protected_node = get_identifier ("protected");
5332 access_private_node = get_identifier ("private");
5335 /* Call this function after calling build_common_tree_nodes and set_sizetype.
5336 It will create several other common tree nodes. */
5339 build_common_tree_nodes_2 (int short_double)
5341 /* Define these next since types below may used them. */
5342 integer_zero_node = build_int_2 (0, 0);
5343 integer_one_node = build_int_2 (1, 0);
5344 integer_minus_one_node = build_int_2 (-1, -1);
5346 size_zero_node = size_int (0);
5347 size_one_node = size_int (1);
5348 bitsize_zero_node = bitsize_int (0);
5349 bitsize_one_node = bitsize_int (1);
5350 bitsize_unit_node = bitsize_int (BITS_PER_UNIT);
5352 boolean_false_node = TYPE_MIN_VALUE (boolean_type_node);
5353 boolean_true_node = TYPE_MAX_VALUE (boolean_type_node);
5355 void_type_node = make_node (VOID_TYPE);
5356 layout_type (void_type_node);
5358 /* We are not going to have real types in C with less than byte alignment,
5359 so we might as well not have any types that claim to have it. */
5360 TYPE_ALIGN (void_type_node) = BITS_PER_UNIT;
5361 TYPE_USER_ALIGN (void_type_node) = 0;
5363 null_pointer_node = build_int_2 (0, 0);
5364 TREE_TYPE (null_pointer_node) = build_pointer_type (void_type_node);
5365 layout_type (TREE_TYPE (null_pointer_node));
5367 ptr_type_node = build_pointer_type (void_type_node);
5369 = build_pointer_type (build_type_variant (void_type_node, 1, 0));
5371 float_type_node = make_node (REAL_TYPE);
5372 TYPE_PRECISION (float_type_node) = FLOAT_TYPE_SIZE;
5373 layout_type (float_type_node);
5375 double_type_node = make_node (REAL_TYPE);
5377 TYPE_PRECISION (double_type_node) = FLOAT_TYPE_SIZE;
5379 TYPE_PRECISION (double_type_node) = DOUBLE_TYPE_SIZE;
5380 layout_type (double_type_node);
5382 long_double_type_node = make_node (REAL_TYPE);
5383 TYPE_PRECISION (long_double_type_node) = LONG_DOUBLE_TYPE_SIZE;
5384 layout_type (long_double_type_node);
5386 float_ptr_type_node = build_pointer_type (float_type_node);
5387 double_ptr_type_node = build_pointer_type (double_type_node);
5388 long_double_ptr_type_node = build_pointer_type (long_double_type_node);
5389 integer_ptr_type_node = build_pointer_type (integer_type_node);
5391 complex_integer_type_node = make_node (COMPLEX_TYPE);
5392 TREE_TYPE (complex_integer_type_node) = integer_type_node;
5393 layout_type (complex_integer_type_node);
5395 complex_float_type_node = make_node (COMPLEX_TYPE);
5396 TREE_TYPE (complex_float_type_node) = float_type_node;
5397 layout_type (complex_float_type_node);
5399 complex_double_type_node = make_node (COMPLEX_TYPE);
5400 TREE_TYPE (complex_double_type_node) = double_type_node;
5401 layout_type (complex_double_type_node);
5403 complex_long_double_type_node = make_node (COMPLEX_TYPE);
5404 TREE_TYPE (complex_long_double_type_node) = long_double_type_node;
5405 layout_type (complex_long_double_type_node);
5408 tree t = targetm.build_builtin_va_list ();
5410 /* Many back-ends define record types without setting TYPE_NAME.
5411 If we copied the record type here, we'd keep the original
5412 record type without a name. This breaks name mangling. So,
5413 don't copy record types and let c_common_nodes_and_builtins()
5414 declare the type to be __builtin_va_list. */
5415 if (TREE_CODE (t) != RECORD_TYPE)
5416 t = build_type_copy (t);
5418 va_list_type_node = t;
5422 /* HACK. GROSS. This is absolutely disgusting. I wish there was a
5425 If we requested a pointer to a vector, build up the pointers that
5426 we stripped off while looking for the inner type. Similarly for
5427 return values from functions.
5429 The argument TYPE is the top of the chain, and BOTTOM is the
5430 new type which we will point to. */
5433 reconstruct_complex_type (tree type, tree bottom)
5437 if (POINTER_TYPE_P (type))
5439 inner = reconstruct_complex_type (TREE_TYPE (type), bottom);
5440 outer = build_pointer_type (inner);
5442 else if (TREE_CODE (type) == ARRAY_TYPE)
5444 inner = reconstruct_complex_type (TREE_TYPE (type), bottom);
5445 outer = build_array_type (inner, TYPE_DOMAIN (type));
5447 else if (TREE_CODE (type) == FUNCTION_TYPE)
5449 inner = reconstruct_complex_type (TREE_TYPE (type), bottom);
5450 outer = build_function_type (inner, TYPE_ARG_TYPES (type));
5452 else if (TREE_CODE (type) == METHOD_TYPE)
5454 inner = reconstruct_complex_type (TREE_TYPE (type), bottom);
5455 outer = build_method_type_directly (TYPE_METHOD_BASETYPE (type),
5457 TYPE_ARG_TYPES (type));
5462 TYPE_READONLY (outer) = TYPE_READONLY (type);
5463 TYPE_VOLATILE (outer) = TYPE_VOLATILE (type);
5468 /* Returns a vector tree node given a vector mode and inner type. */
5470 build_vector_type_for_mode (tree innertype, enum machine_mode mode)
5473 t = make_node (VECTOR_TYPE);
5474 TREE_TYPE (t) = innertype;
5475 TYPE_MODE (t) = mode;
5476 finish_vector_type (t);
5480 /* Similarly, but takes inner type and units. */
5483 build_vector_type (tree innertype, int nunits)
5485 enum machine_mode innermode = TYPE_MODE (innertype);
5486 enum machine_mode mode;
5488 if (GET_MODE_CLASS (innermode) == MODE_FLOAT)
5489 mode = MIN_MODE_VECTOR_FLOAT;
5491 mode = MIN_MODE_VECTOR_INT;
5493 for (; mode != VOIDmode ; mode = GET_MODE_WIDER_MODE (mode))
5494 if (GET_MODE_NUNITS (mode) == nunits && GET_MODE_INNER (mode) == innermode)
5495 return build_vector_type_for_mode (innertype, mode);
5500 /* Given an initializer INIT, return TRUE if INIT is zero or some
5501 aggregate of zeros. Otherwise return FALSE. */
5503 initializer_zerop (tree init)
5509 switch (TREE_CODE (init))
5512 return integer_zerop (init);
5515 /* ??? Note that this is not correct for C4X float formats. There,
5516 a bit pattern of all zeros is 1.0; 0.0 is encoded with the most
5517 negative exponent. */
5518 return real_zerop (init)
5519 && ! REAL_VALUE_MINUS_ZERO (TREE_REAL_CST (init));
5522 return integer_zerop (init)
5523 || (real_zerop (init)
5524 && ! REAL_VALUE_MINUS_ZERO (TREE_REAL_CST (TREE_REALPART (init)))
5525 && ! REAL_VALUE_MINUS_ZERO (TREE_REAL_CST (TREE_IMAGPART (init))));
5528 for (elt = TREE_VECTOR_CST_ELTS (init); elt; elt = TREE_CHAIN (elt))
5529 if (!initializer_zerop (TREE_VALUE (elt)))
5534 elt = CONSTRUCTOR_ELTS (init);
5535 if (elt == NULL_TREE)
5538 /* A set is empty only if it has no elements. */
5539 if (TREE_CODE (TREE_TYPE (init)) == SET_TYPE)
5542 for (; elt ; elt = TREE_CHAIN (elt))
5543 if (! initializer_zerop (TREE_VALUE (elt)))
5553 add_var_to_bind_expr (tree bind_expr, tree var)
5555 BIND_EXPR_VARS (bind_expr)
5556 = chainon (BIND_EXPR_VARS (bind_expr), var);
5557 if (BIND_EXPR_BLOCK (bind_expr))
5558 BLOCK_VARS (BIND_EXPR_BLOCK (bind_expr))
5559 = BIND_EXPR_VARS (bind_expr);
5562 /* Build an empty statement. */
5565 build_empty_stmt (void)
5567 return build1 (NOP_EXPR, void_type_node, size_zero_node);
5571 is_essa_node (tree t)
5573 if (TREE_CODE (t) == EPHI_NODE || TREE_CODE (t) == EUSE_NODE
5574 || TREE_CODE (t) == EEXIT_NODE || TREE_CODE (t) == EKILL_NODE)
5580 /* Return true if T (assumed to be a DECL) must be assigned a memory
5584 needs_to_live_in_memory (tree t)
5586 return (DECL_NEEDS_TO_LIVE_IN_MEMORY_INTERNAL (t)
5588 || DECL_EXTERNAL (t)
5589 || DECL_NONLOCAL (t)
5590 || (TREE_CODE (t) == RESULT_DECL
5591 && aggregate_value_p (t, current_function_decl))
5592 || decl_function_context (t) != current_function_decl);
5595 #include "gt-tree.h"