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"
53 /* Each tree code class has an associated string representation.
54 These must correspond to the tree_code_class entries. */
56 const char *const tree_code_class_strings[] =
70 /* obstack.[ch] explicitly declined to prototype this. */
71 extern int _obstack_allocated_p (struct obstack *h, void *obj);
73 #ifdef GATHER_STATISTICS
74 /* Statistics-gathering stuff. */
76 int tree_node_counts[(int) all_kinds];
77 int tree_node_sizes[(int) all_kinds];
79 /* Keep in sync with tree.h:enum tree_node_kind. */
80 static const char * const tree_node_kind_names[] = {
99 #endif /* GATHER_STATISTICS */
101 /* Unique id for next decl created. */
102 static GTY(()) int next_decl_uid;
103 /* Unique id for next type created. */
104 static GTY(()) int next_type_uid = 1;
106 /* Since we cannot rehash a type after it is in the table, we have to
107 keep the hash code. */
109 struct type_hash GTY(())
115 /* Initial size of the hash table (rounded to next prime). */
116 #define TYPE_HASH_INITIAL_SIZE 1000
118 /* Now here is the hash table. When recording a type, it is added to
119 the slot whose index is the hash code. Note that the hash table is
120 used for several kinds of types (function types, array types and
121 array index range types, for now). While all these live in the
122 same table, they are completely independent, and the hash code is
123 computed differently for each of these. */
125 static GTY ((if_marked ("type_hash_marked_p"), param_is (struct type_hash)))
126 htab_t type_hash_table;
128 /* Hash table and temporary node for larger integer const values. */
129 static GTY (()) tree int_cst_node;
130 static GTY ((if_marked ("ggc_marked_p"), param_is (union tree_node)))
131 htab_t int_cst_hash_table;
133 static void set_type_quals (tree, int);
134 static int type_hash_eq (const void *, const void *);
135 static hashval_t type_hash_hash (const void *);
136 static hashval_t int_cst_hash_hash (const void *);
137 static int int_cst_hash_eq (const void *, const void *);
138 static void print_type_hash_statistics (void);
139 static tree make_vector_type (tree, int, enum machine_mode);
140 static int type_hash_marked_p (const void *);
141 static unsigned int type_hash_list (tree, hashval_t);
142 static unsigned int attribute_hash_list (tree, hashval_t);
144 tree global_trees[TI_MAX];
145 tree integer_types[itk_none];
152 /* Initialize the hash table of types. */
153 type_hash_table = htab_create_ggc (TYPE_HASH_INITIAL_SIZE, type_hash_hash,
155 int_cst_hash_table = htab_create_ggc (1024, int_cst_hash_hash,
156 int_cst_hash_eq, NULL);
157 int_cst_node = make_node (INTEGER_CST);
161 /* The name of the object as the assembler will see it (but before any
162 translations made by ASM_OUTPUT_LABELREF). Often this is the same
163 as DECL_NAME. It is an IDENTIFIER_NODE. */
165 decl_assembler_name (tree decl)
167 if (!DECL_ASSEMBLER_NAME_SET_P (decl))
168 lang_hooks.set_decl_assembler_name (decl);
169 return DECL_CHECK (decl)->decl.assembler_name;
172 /* Compute the number of bytes occupied by a tree with code CODE.
173 This function cannot be used for TREE_VEC, PHI_NODE, or STRING_CST
174 codes, which are of variable length. */
176 tree_code_size (enum tree_code code)
178 switch (TREE_CODE_CLASS (code))
180 case tcc_declaration: /* A decl node */
181 return sizeof (struct tree_decl);
183 case tcc_type: /* a type node */
184 return sizeof (struct tree_type);
186 case tcc_reference: /* a reference */
187 case tcc_expression: /* an expression */
188 case tcc_statement: /* an expression with side effects */
189 case tcc_comparison: /* a comparison expression */
190 case tcc_unary: /* a unary arithmetic expression */
191 case tcc_binary: /* a binary arithmetic expression */
192 return (sizeof (struct tree_exp)
193 + (TREE_CODE_LENGTH (code) - 1) * sizeof (char *));
195 case tcc_constant: /* a constant */
198 case INTEGER_CST: return sizeof (struct tree_int_cst);
199 case REAL_CST: return sizeof (struct tree_real_cst);
200 case COMPLEX_CST: return sizeof (struct tree_complex);
201 case VECTOR_CST: return sizeof (struct tree_vector);
202 case STRING_CST: gcc_unreachable ();
204 return lang_hooks.tree_size (code);
207 case tcc_exceptional: /* something random, like an identifier. */
210 case IDENTIFIER_NODE: return lang_hooks.identifier_size;
211 case TREE_LIST: return sizeof (struct tree_list);
214 case PLACEHOLDER_EXPR: return sizeof (struct tree_common);
217 case PHI_NODE: gcc_unreachable ();
219 case SSA_NAME: return sizeof (struct tree_ssa_name);
221 case STATEMENT_LIST: return sizeof (struct tree_statement_list);
222 case BLOCK: return sizeof (struct tree_block);
223 case VALUE_HANDLE: return sizeof (struct tree_value_handle);
226 return lang_hooks.tree_size (code);
234 /* Compute the number of bytes occupied by NODE. This routine only
235 looks at TREE_CODE, except for PHI_NODE and TREE_VEC nodes. */
237 tree_size (tree node)
239 enum tree_code code = TREE_CODE (node);
243 return (sizeof (struct tree_phi_node)
244 + (PHI_ARG_CAPACITY (node) - 1) * sizeof (struct phi_arg_d));
247 return (sizeof (struct tree_vec)
248 + (TREE_VEC_LENGTH (node) - 1) * sizeof(char *));
251 return sizeof (struct tree_string) + TREE_STRING_LENGTH (node) - 1;
254 return tree_code_size (code);
258 /* Return a newly allocated node of code CODE. For decl and type
259 nodes, some other fields are initialized. The rest of the node is
260 initialized to zero. This function cannot be used for PHI_NODE or
261 TREE_VEC nodes, which is enforced by asserts in tree_code_size.
263 Achoo! I got a code in the node. */
266 make_node_stat (enum tree_code code MEM_STAT_DECL)
269 enum tree_code_class type = TREE_CODE_CLASS (code);
270 size_t length = tree_code_size (code);
271 #ifdef GATHER_STATISTICS
276 case tcc_declaration: /* A decl node */
280 case tcc_type: /* a type node */
284 case tcc_statement: /* an expression with side effects */
288 case tcc_reference: /* a reference */
292 case tcc_expression: /* an expression */
293 case tcc_comparison: /* a comparison expression */
294 case tcc_unary: /* a unary arithmetic expression */
295 case tcc_binary: /* a binary arithmetic expression */
299 case tcc_constant: /* a constant */
303 case tcc_exceptional: /* something random, like an identifier. */
306 case IDENTIFIER_NODE:
323 kind = ssa_name_kind;
340 tree_node_counts[(int) kind]++;
341 tree_node_sizes[(int) kind] += length;
344 t = ggc_alloc_zone_stat (length, tree_zone PASS_MEM_STAT);
346 memset (t, 0, length);
348 TREE_SET_CODE (t, code);
353 TREE_SIDE_EFFECTS (t) = 1;
356 case tcc_declaration:
357 if (code != FUNCTION_DECL)
359 DECL_USER_ALIGN (t) = 0;
360 DECL_IN_SYSTEM_HEADER (t) = in_system_header;
361 DECL_SOURCE_LOCATION (t) = input_location;
362 DECL_UID (t) = next_decl_uid++;
364 /* We have not yet computed the alias set for this declaration. */
365 DECL_POINTER_ALIAS_SET (t) = -1;
369 TYPE_UID (t) = next_type_uid++;
370 TYPE_ALIGN (t) = char_type_node ? TYPE_ALIGN (char_type_node) : 0;
371 TYPE_USER_ALIGN (t) = 0;
372 TYPE_MAIN_VARIANT (t) = t;
374 /* Default to no attributes for type, but let target change that. */
375 TYPE_ATTRIBUTES (t) = NULL_TREE;
376 targetm.set_default_type_attributes (t);
378 /* We have not yet computed the alias set for this type. */
379 TYPE_ALIAS_SET (t) = -1;
383 TREE_CONSTANT (t) = 1;
384 TREE_INVARIANT (t) = 1;
393 case PREDECREMENT_EXPR:
394 case PREINCREMENT_EXPR:
395 case POSTDECREMENT_EXPR:
396 case POSTINCREMENT_EXPR:
397 /* All of these have side-effects, no matter what their
399 TREE_SIDE_EFFECTS (t) = 1;
408 /* Other classes need no special treatment. */
415 /* Return a new node with the same contents as NODE except that its
416 TREE_CHAIN is zero and it has a fresh uid. */
419 copy_node_stat (tree node MEM_STAT_DECL)
422 enum tree_code code = TREE_CODE (node);
425 gcc_assert (code != STATEMENT_LIST);
427 length = tree_size (node);
428 t = ggc_alloc_zone_stat (length, tree_zone PASS_MEM_STAT);
429 memcpy (t, node, length);
432 TREE_ASM_WRITTEN (t) = 0;
433 TREE_VISITED (t) = 0;
436 if (TREE_CODE_CLASS (code) == tcc_declaration)
437 DECL_UID (t) = next_decl_uid++;
438 else if (TREE_CODE_CLASS (code) == tcc_type)
440 TYPE_UID (t) = next_type_uid++;
441 /* The following is so that the debug code for
442 the copy is different from the original type.
443 The two statements usually duplicate each other
444 (because they clear fields of the same union),
445 but the optimizer should catch that. */
446 TYPE_SYMTAB_POINTER (t) = 0;
447 TYPE_SYMTAB_ADDRESS (t) = 0;
449 /* Do not copy the values cache. */
450 if (TYPE_CACHED_VALUES_P(t))
452 TYPE_CACHED_VALUES_P (t) = 0;
453 TYPE_CACHED_VALUES (t) = NULL_TREE;
460 /* Return a copy of a chain of nodes, chained through the TREE_CHAIN field.
461 For example, this can copy a list made of TREE_LIST nodes. */
464 copy_list (tree list)
472 head = prev = copy_node (list);
473 next = TREE_CHAIN (list);
476 TREE_CHAIN (prev) = copy_node (next);
477 prev = TREE_CHAIN (prev);
478 next = TREE_CHAIN (next);
484 /* Create an INT_CST node with a LOW value sign extended. */
487 build_int_cst (tree type, HOST_WIDE_INT low)
489 return build_int_cst_wide (type, low, low < 0 ? -1 : 0);
492 /* Create an INT_CST node with a LOW value zero extended. */
495 build_int_cstu (tree type, unsigned HOST_WIDE_INT low)
497 return build_int_cst_wide (type, low, 0);
500 /* Create an INT_CST node with a LOW value zero or sign extended depending
504 build_int_cst_type (tree type, HOST_WIDE_INT low)
506 unsigned HOST_WIDE_INT val = (unsigned HOST_WIDE_INT) low;
513 type = integer_type_node;
515 bits = TYPE_PRECISION (type);
516 signed_p = !TYPE_UNSIGNED (type);
517 negative = ((val >> (bits - 1)) & 1) != 0;
519 if (signed_p && negative)
521 if (bits < HOST_BITS_PER_WIDE_INT)
522 val = val | ((~(unsigned HOST_WIDE_INT) 0) << bits);
523 ret = build_int_cst_wide (type, val, ~(unsigned HOST_WIDE_INT) 0);
527 if (bits < HOST_BITS_PER_WIDE_INT)
528 val = val & ~((~(unsigned HOST_WIDE_INT) 0) << bits);
529 ret = build_int_cst_wide (type, val, 0);
535 /* These are the hash table functions for the hash table of INTEGER_CST
536 nodes of a sizetype. */
538 /* Return the hash code code X, an INTEGER_CST. */
541 int_cst_hash_hash (const void *x)
545 return (TREE_INT_CST_HIGH (t) ^ TREE_INT_CST_LOW (t)
546 ^ htab_hash_pointer (TREE_TYPE (t)));
549 /* Return nonzero if the value represented by *X (an INTEGER_CST tree node)
550 is the same as that given by *Y, which is the same. */
553 int_cst_hash_eq (const void *x, const void *y)
558 return (TREE_TYPE (xt) == TREE_TYPE (yt)
559 && TREE_INT_CST_HIGH (xt) == TREE_INT_CST_HIGH (yt)
560 && TREE_INT_CST_LOW (xt) == TREE_INT_CST_LOW (yt));
563 /* Create an INT_CST node of TYPE and value HI:LOW. If TYPE is NULL,
564 integer_type_node is used. The returned node is always shared.
565 For small integers we use a per-type vector cache, for larger ones
566 we use a single hash table. */
569 build_int_cst_wide (tree type, unsigned HOST_WIDE_INT low, HOST_WIDE_INT hi)
576 type = integer_type_node;
578 switch (TREE_CODE (type))
582 /* Cache NULL pointer. */
591 /* Cache false or true. */
600 if (TYPE_UNSIGNED (type))
603 limit = INTEGER_SHARE_LIMIT;
604 if (!hi && low < (unsigned HOST_WIDE_INT)INTEGER_SHARE_LIMIT)
610 limit = INTEGER_SHARE_LIMIT + 1;
611 if (!hi && low < (unsigned HOST_WIDE_INT)INTEGER_SHARE_LIMIT)
613 else if (hi == -1 && low == -(unsigned HOST_WIDE_INT)1)
623 /* Look for it in the type's vector of small shared ints. */
624 if (!TYPE_CACHED_VALUES_P (type))
626 TYPE_CACHED_VALUES_P (type) = 1;
627 TYPE_CACHED_VALUES (type) = make_tree_vec (limit);
630 t = TREE_VEC_ELT (TYPE_CACHED_VALUES (type), ix);
633 /* Make sure no one is clobbering the shared constant. */
634 gcc_assert (TREE_TYPE (t) == type);
635 gcc_assert (TREE_INT_CST_LOW (t) == low);
636 gcc_assert (TREE_INT_CST_HIGH (t) == hi);
640 /* Create a new shared int. */
641 t = make_node (INTEGER_CST);
643 TREE_INT_CST_LOW (t) = low;
644 TREE_INT_CST_HIGH (t) = hi;
645 TREE_TYPE (t) = type;
647 TREE_VEC_ELT (TYPE_CACHED_VALUES (type), ix) = t;
652 /* Use the cache of larger shared ints. */
655 TREE_INT_CST_LOW (int_cst_node) = low;
656 TREE_INT_CST_HIGH (int_cst_node) = hi;
657 TREE_TYPE (int_cst_node) = type;
659 slot = htab_find_slot (int_cst_hash_table, int_cst_node, INSERT);
663 /* Insert this one into the hash table. */
666 /* Make a new node for next time round. */
667 int_cst_node = make_node (INTEGER_CST);
674 /* Builds an integer constant in TYPE such that lowest BITS bits are ones
675 and the rest are zeros. */
678 build_low_bits_mask (tree type, unsigned bits)
680 unsigned HOST_WIDE_INT low;
682 unsigned HOST_WIDE_INT all_ones = ~(unsigned HOST_WIDE_INT) 0;
684 gcc_assert (bits <= TYPE_PRECISION (type));
686 if (bits == TYPE_PRECISION (type)
687 && !TYPE_UNSIGNED (type))
689 /* Sign extended all-ones mask. */
693 else if (bits <= HOST_BITS_PER_WIDE_INT)
695 low = all_ones >> (HOST_BITS_PER_WIDE_INT - bits);
700 bits -= HOST_BITS_PER_WIDE_INT;
702 high = all_ones >> (HOST_BITS_PER_WIDE_INT - bits);
705 return build_int_cst_wide (type, low, high);
708 /* Checks that X is integer constant that can be expressed in (unsigned)
709 HOST_WIDE_INT without loss of precision. */
712 cst_and_fits_in_hwi (tree x)
714 if (TREE_CODE (x) != INTEGER_CST)
717 if (TYPE_PRECISION (TREE_TYPE (x)) > HOST_BITS_PER_WIDE_INT)
720 return (TREE_INT_CST_HIGH (x) == 0
721 || TREE_INT_CST_HIGH (x) == -1);
724 /* Return a new VECTOR_CST node whose type is TYPE and whose values
725 are in a list pointed by VALS. */
728 build_vector (tree type, tree vals)
730 tree v = make_node (VECTOR_CST);
731 int over1 = 0, over2 = 0;
734 TREE_VECTOR_CST_ELTS (v) = vals;
735 TREE_TYPE (v) = type;
737 /* Iterate through elements and check for overflow. */
738 for (link = vals; link; link = TREE_CHAIN (link))
740 tree value = TREE_VALUE (link);
742 over1 |= TREE_OVERFLOW (value);
743 over2 |= TREE_CONSTANT_OVERFLOW (value);
746 TREE_OVERFLOW (v) = over1;
747 TREE_CONSTANT_OVERFLOW (v) = over2;
752 /* Return a new CONSTRUCTOR node whose type is TYPE and whose values
753 are in a list pointed to by VALS. */
755 build_constructor (tree type, tree vals)
757 tree c = make_node (CONSTRUCTOR);
758 TREE_TYPE (c) = type;
759 CONSTRUCTOR_ELTS (c) = vals;
761 /* ??? May not be necessary. Mirrors what build does. */
764 TREE_SIDE_EFFECTS (c) = TREE_SIDE_EFFECTS (vals);
765 TREE_READONLY (c) = TREE_READONLY (vals);
766 TREE_CONSTANT (c) = TREE_CONSTANT (vals);
767 TREE_INVARIANT (c) = TREE_INVARIANT (vals);
773 /* Return a new REAL_CST node whose type is TYPE and value is D. */
776 build_real (tree type, REAL_VALUE_TYPE d)
782 /* ??? Used to check for overflow here via CHECK_FLOAT_TYPE.
783 Consider doing it via real_convert now. */
785 v = make_node (REAL_CST);
786 dp = ggc_alloc (sizeof (REAL_VALUE_TYPE));
787 memcpy (dp, &d, sizeof (REAL_VALUE_TYPE));
789 TREE_TYPE (v) = type;
790 TREE_REAL_CST_PTR (v) = dp;
791 TREE_OVERFLOW (v) = TREE_CONSTANT_OVERFLOW (v) = overflow;
795 /* Return a new REAL_CST node whose type is TYPE
796 and whose value is the integer value of the INTEGER_CST node I. */
799 real_value_from_int_cst (tree type, tree i)
803 /* Clear all bits of the real value type so that we can later do
804 bitwise comparisons to see if two values are the same. */
805 memset (&d, 0, sizeof d);
807 real_from_integer (&d, type ? TYPE_MODE (type) : VOIDmode,
808 TREE_INT_CST_LOW (i), TREE_INT_CST_HIGH (i),
809 TYPE_UNSIGNED (TREE_TYPE (i)));
813 /* Given a tree representing an integer constant I, return a tree
814 representing the same value as a floating-point constant of type TYPE. */
817 build_real_from_int_cst (tree type, tree i)
820 int overflow = TREE_OVERFLOW (i);
822 v = build_real (type, real_value_from_int_cst (type, i));
824 TREE_OVERFLOW (v) |= overflow;
825 TREE_CONSTANT_OVERFLOW (v) |= overflow;
829 /* Return a newly constructed STRING_CST node whose value is
830 the LEN characters at STR.
831 The TREE_TYPE is not initialized. */
834 build_string (int len, const char *str)
839 length = len + sizeof (struct tree_string);
841 #ifdef GATHER_STATISTICS
842 tree_node_counts[(int) c_kind]++;
843 tree_node_sizes[(int) c_kind] += length;
846 s = ggc_alloc_tree (length);
848 memset (s, 0, sizeof (struct tree_common));
849 TREE_SET_CODE (s, STRING_CST);
850 TREE_STRING_LENGTH (s) = len;
851 memcpy ((char *) TREE_STRING_POINTER (s), str, len);
852 ((char *) TREE_STRING_POINTER (s))[len] = '\0';
857 /* Return a newly constructed COMPLEX_CST node whose value is
858 specified by the real and imaginary parts REAL and IMAG.
859 Both REAL and IMAG should be constant nodes. TYPE, if specified,
860 will be the type of the COMPLEX_CST; otherwise a new type will be made. */
863 build_complex (tree type, tree real, tree imag)
865 tree t = make_node (COMPLEX_CST);
867 TREE_REALPART (t) = real;
868 TREE_IMAGPART (t) = imag;
869 TREE_TYPE (t) = type ? type : build_complex_type (TREE_TYPE (real));
870 TREE_OVERFLOW (t) = TREE_OVERFLOW (real) | TREE_OVERFLOW (imag);
871 TREE_CONSTANT_OVERFLOW (t)
872 = TREE_CONSTANT_OVERFLOW (real) | TREE_CONSTANT_OVERFLOW (imag);
876 /* Build a BINFO with LEN language slots. */
879 make_tree_binfo_stat (unsigned base_binfos MEM_STAT_DECL)
882 size_t length = (offsetof (struct tree_binfo, base_binfos)
883 + VEC_embedded_size (tree, base_binfos));
885 #ifdef GATHER_STATISTICS
886 tree_node_counts[(int) binfo_kind]++;
887 tree_node_sizes[(int) binfo_kind] += length;
890 t = ggc_alloc_zone_stat (length, tree_zone PASS_MEM_STAT);
892 memset (t, 0, offsetof (struct tree_binfo, base_binfos));
894 TREE_SET_CODE (t, TREE_BINFO);
896 VEC_embedded_init (tree, BINFO_BASE_BINFOS (t), base_binfos);
902 /* Build a newly constructed TREE_VEC node of length LEN. */
905 make_tree_vec_stat (int len MEM_STAT_DECL)
908 int length = (len - 1) * sizeof (tree) + sizeof (struct tree_vec);
910 #ifdef GATHER_STATISTICS
911 tree_node_counts[(int) vec_kind]++;
912 tree_node_sizes[(int) vec_kind] += length;
915 t = ggc_alloc_zone_stat (length, tree_zone PASS_MEM_STAT);
917 memset (t, 0, length);
919 TREE_SET_CODE (t, TREE_VEC);
920 TREE_VEC_LENGTH (t) = len;
925 /* Return 1 if EXPR is the integer constant zero or a complex constant
929 integer_zerop (tree expr)
933 return ((TREE_CODE (expr) == INTEGER_CST
934 && ! TREE_CONSTANT_OVERFLOW (expr)
935 && TREE_INT_CST_LOW (expr) == 0
936 && TREE_INT_CST_HIGH (expr) == 0)
937 || (TREE_CODE (expr) == COMPLEX_CST
938 && integer_zerop (TREE_REALPART (expr))
939 && integer_zerop (TREE_IMAGPART (expr))));
942 /* Return 1 if EXPR is the integer constant one or the corresponding
946 integer_onep (tree expr)
950 return ((TREE_CODE (expr) == INTEGER_CST
951 && ! TREE_CONSTANT_OVERFLOW (expr)
952 && TREE_INT_CST_LOW (expr) == 1
953 && TREE_INT_CST_HIGH (expr) == 0)
954 || (TREE_CODE (expr) == COMPLEX_CST
955 && integer_onep (TREE_REALPART (expr))
956 && integer_zerop (TREE_IMAGPART (expr))));
959 /* Return 1 if EXPR is an integer containing all 1's in as much precision as
960 it contains. Likewise for the corresponding complex constant. */
963 integer_all_onesp (tree expr)
970 if (TREE_CODE (expr) == COMPLEX_CST
971 && integer_all_onesp (TREE_REALPART (expr))
972 && integer_zerop (TREE_IMAGPART (expr)))
975 else if (TREE_CODE (expr) != INTEGER_CST
976 || TREE_CONSTANT_OVERFLOW (expr))
979 uns = TYPE_UNSIGNED (TREE_TYPE (expr));
981 return (TREE_INT_CST_LOW (expr) == ~(unsigned HOST_WIDE_INT) 0
982 && TREE_INT_CST_HIGH (expr) == -1);
984 /* Note that using TYPE_PRECISION here is wrong. We care about the
985 actual bits, not the (arbitrary) range of the type. */
986 prec = GET_MODE_BITSIZE (TYPE_MODE (TREE_TYPE (expr)));
987 if (prec >= HOST_BITS_PER_WIDE_INT)
989 HOST_WIDE_INT high_value;
992 shift_amount = prec - HOST_BITS_PER_WIDE_INT;
994 /* Can not handle precisions greater than twice the host int size. */
995 gcc_assert (shift_amount <= HOST_BITS_PER_WIDE_INT);
996 if (shift_amount == HOST_BITS_PER_WIDE_INT)
997 /* Shifting by the host word size is undefined according to the ANSI
998 standard, so we must handle this as a special case. */
1001 high_value = ((HOST_WIDE_INT) 1 << shift_amount) - 1;
1003 return (TREE_INT_CST_LOW (expr) == ~(unsigned HOST_WIDE_INT) 0
1004 && TREE_INT_CST_HIGH (expr) == high_value);
1007 return TREE_INT_CST_LOW (expr) == ((unsigned HOST_WIDE_INT) 1 << prec) - 1;
1010 /* Return 1 if EXPR is an integer constant that is a power of 2 (i.e., has only
1014 integer_pow2p (tree expr)
1017 HOST_WIDE_INT high, low;
1021 if (TREE_CODE (expr) == COMPLEX_CST
1022 && integer_pow2p (TREE_REALPART (expr))
1023 && integer_zerop (TREE_IMAGPART (expr)))
1026 if (TREE_CODE (expr) != INTEGER_CST || TREE_CONSTANT_OVERFLOW (expr))
1029 prec = (POINTER_TYPE_P (TREE_TYPE (expr))
1030 ? POINTER_SIZE : TYPE_PRECISION (TREE_TYPE (expr)));
1031 high = TREE_INT_CST_HIGH (expr);
1032 low = TREE_INT_CST_LOW (expr);
1034 /* First clear all bits that are beyond the type's precision in case
1035 we've been sign extended. */
1037 if (prec == 2 * HOST_BITS_PER_WIDE_INT)
1039 else if (prec > HOST_BITS_PER_WIDE_INT)
1040 high &= ~((HOST_WIDE_INT) (-1) << (prec - HOST_BITS_PER_WIDE_INT));
1044 if (prec < HOST_BITS_PER_WIDE_INT)
1045 low &= ~((HOST_WIDE_INT) (-1) << prec);
1048 if (high == 0 && low == 0)
1051 return ((high == 0 && (low & (low - 1)) == 0)
1052 || (low == 0 && (high & (high - 1)) == 0));
1055 /* Return 1 if EXPR is an integer constant other than zero or a
1056 complex constant other than zero. */
1059 integer_nonzerop (tree expr)
1063 return ((TREE_CODE (expr) == INTEGER_CST
1064 && ! TREE_CONSTANT_OVERFLOW (expr)
1065 && (TREE_INT_CST_LOW (expr) != 0
1066 || TREE_INT_CST_HIGH (expr) != 0))
1067 || (TREE_CODE (expr) == COMPLEX_CST
1068 && (integer_nonzerop (TREE_REALPART (expr))
1069 || integer_nonzerop (TREE_IMAGPART (expr)))));
1072 /* Return the power of two represented by a tree node known to be a
1076 tree_log2 (tree expr)
1079 HOST_WIDE_INT high, low;
1083 if (TREE_CODE (expr) == COMPLEX_CST)
1084 return tree_log2 (TREE_REALPART (expr));
1086 prec = (POINTER_TYPE_P (TREE_TYPE (expr))
1087 ? POINTER_SIZE : TYPE_PRECISION (TREE_TYPE (expr)));
1089 high = TREE_INT_CST_HIGH (expr);
1090 low = TREE_INT_CST_LOW (expr);
1092 /* First clear all bits that are beyond the type's precision in case
1093 we've been sign extended. */
1095 if (prec == 2 * HOST_BITS_PER_WIDE_INT)
1097 else if (prec > HOST_BITS_PER_WIDE_INT)
1098 high &= ~((HOST_WIDE_INT) (-1) << (prec - HOST_BITS_PER_WIDE_INT));
1102 if (prec < HOST_BITS_PER_WIDE_INT)
1103 low &= ~((HOST_WIDE_INT) (-1) << prec);
1106 return (high != 0 ? HOST_BITS_PER_WIDE_INT + exact_log2 (high)
1107 : exact_log2 (low));
1110 /* Similar, but return the largest integer Y such that 2 ** Y is less
1111 than or equal to EXPR. */
1114 tree_floor_log2 (tree expr)
1117 HOST_WIDE_INT high, low;
1121 if (TREE_CODE (expr) == COMPLEX_CST)
1122 return tree_log2 (TREE_REALPART (expr));
1124 prec = (POINTER_TYPE_P (TREE_TYPE (expr))
1125 ? POINTER_SIZE : TYPE_PRECISION (TREE_TYPE (expr)));
1127 high = TREE_INT_CST_HIGH (expr);
1128 low = TREE_INT_CST_LOW (expr);
1130 /* First clear all bits that are beyond the type's precision in case
1131 we've been sign extended. Ignore if type's precision hasn't been set
1132 since what we are doing is setting it. */
1134 if (prec == 2 * HOST_BITS_PER_WIDE_INT || prec == 0)
1136 else if (prec > HOST_BITS_PER_WIDE_INT)
1137 high &= ~((HOST_WIDE_INT) (-1) << (prec - HOST_BITS_PER_WIDE_INT));
1141 if (prec < HOST_BITS_PER_WIDE_INT)
1142 low &= ~((HOST_WIDE_INT) (-1) << prec);
1145 return (high != 0 ? HOST_BITS_PER_WIDE_INT + floor_log2 (high)
1146 : floor_log2 (low));
1149 /* Return 1 if EXPR is the real constant zero. */
1152 real_zerop (tree expr)
1156 return ((TREE_CODE (expr) == REAL_CST
1157 && ! TREE_CONSTANT_OVERFLOW (expr)
1158 && REAL_VALUES_EQUAL (TREE_REAL_CST (expr), dconst0))
1159 || (TREE_CODE (expr) == COMPLEX_CST
1160 && real_zerop (TREE_REALPART (expr))
1161 && real_zerop (TREE_IMAGPART (expr))));
1164 /* Return 1 if EXPR is the real constant one in real or complex form. */
1167 real_onep (tree expr)
1171 return ((TREE_CODE (expr) == REAL_CST
1172 && ! TREE_CONSTANT_OVERFLOW (expr)
1173 && REAL_VALUES_EQUAL (TREE_REAL_CST (expr), dconst1))
1174 || (TREE_CODE (expr) == COMPLEX_CST
1175 && real_onep (TREE_REALPART (expr))
1176 && real_zerop (TREE_IMAGPART (expr))));
1179 /* Return 1 if EXPR is the real constant two. */
1182 real_twop (tree expr)
1186 return ((TREE_CODE (expr) == REAL_CST
1187 && ! TREE_CONSTANT_OVERFLOW (expr)
1188 && REAL_VALUES_EQUAL (TREE_REAL_CST (expr), dconst2))
1189 || (TREE_CODE (expr) == COMPLEX_CST
1190 && real_twop (TREE_REALPART (expr))
1191 && real_zerop (TREE_IMAGPART (expr))));
1194 /* Return 1 if EXPR is the real constant minus one. */
1197 real_minus_onep (tree expr)
1201 return ((TREE_CODE (expr) == REAL_CST
1202 && ! TREE_CONSTANT_OVERFLOW (expr)
1203 && REAL_VALUES_EQUAL (TREE_REAL_CST (expr), dconstm1))
1204 || (TREE_CODE (expr) == COMPLEX_CST
1205 && real_minus_onep (TREE_REALPART (expr))
1206 && real_zerop (TREE_IMAGPART (expr))));
1209 /* Nonzero if EXP is a constant or a cast of a constant. */
1212 really_constant_p (tree exp)
1214 /* This is not quite the same as STRIP_NOPS. It does more. */
1215 while (TREE_CODE (exp) == NOP_EXPR
1216 || TREE_CODE (exp) == CONVERT_EXPR
1217 || TREE_CODE (exp) == NON_LVALUE_EXPR)
1218 exp = TREE_OPERAND (exp, 0);
1219 return TREE_CONSTANT (exp);
1222 /* Return first list element whose TREE_VALUE is ELEM.
1223 Return 0 if ELEM is not in LIST. */
1226 value_member (tree elem, tree list)
1230 if (elem == TREE_VALUE (list))
1232 list = TREE_CHAIN (list);
1237 /* Return first list element whose TREE_PURPOSE is ELEM.
1238 Return 0 if ELEM is not in LIST. */
1241 purpose_member (tree elem, tree list)
1245 if (elem == TREE_PURPOSE (list))
1247 list = TREE_CHAIN (list);
1252 /* Return nonzero if ELEM is part of the chain CHAIN. */
1255 chain_member (tree elem, tree chain)
1261 chain = TREE_CHAIN (chain);
1267 /* Return the length of a chain of nodes chained through TREE_CHAIN.
1268 We expect a null pointer to mark the end of the chain.
1269 This is the Lisp primitive `length'. */
1272 list_length (tree t)
1275 #ifdef ENABLE_TREE_CHECKING
1283 #ifdef ENABLE_TREE_CHECKING
1286 gcc_assert (p != q);
1294 /* Returns the number of FIELD_DECLs in TYPE. */
1297 fields_length (tree type)
1299 tree t = TYPE_FIELDS (type);
1302 for (; t; t = TREE_CHAIN (t))
1303 if (TREE_CODE (t) == FIELD_DECL)
1309 /* Concatenate two chains of nodes (chained through TREE_CHAIN)
1310 by modifying the last node in chain 1 to point to chain 2.
1311 This is the Lisp primitive `nconc'. */
1314 chainon (tree op1, tree op2)
1323 for (t1 = op1; TREE_CHAIN (t1); t1 = TREE_CHAIN (t1))
1325 TREE_CHAIN (t1) = op2;
1327 #ifdef ENABLE_TREE_CHECKING
1330 for (t2 = op2; t2; t2 = TREE_CHAIN (t2))
1331 gcc_assert (t2 != t1);
1338 /* Return the last node in a chain of nodes (chained through TREE_CHAIN). */
1341 tree_last (tree chain)
1345 while ((next = TREE_CHAIN (chain)))
1350 /* Reverse the order of elements in the chain T,
1351 and return the new head of the chain (old last element). */
1356 tree prev = 0, decl, next;
1357 for (decl = t; decl; decl = next)
1359 next = TREE_CHAIN (decl);
1360 TREE_CHAIN (decl) = prev;
1366 /* Return a newly created TREE_LIST node whose
1367 purpose and value fields are PARM and VALUE. */
1370 build_tree_list_stat (tree parm, tree value MEM_STAT_DECL)
1372 tree t = make_node_stat (TREE_LIST PASS_MEM_STAT);
1373 TREE_PURPOSE (t) = parm;
1374 TREE_VALUE (t) = value;
1378 /* Return a newly created TREE_LIST node whose
1379 purpose and value fields are PURPOSE and VALUE
1380 and whose TREE_CHAIN is CHAIN. */
1383 tree_cons_stat (tree purpose, tree value, tree chain MEM_STAT_DECL)
1387 node = ggc_alloc_zone_stat (sizeof (struct tree_list),
1388 tree_zone PASS_MEM_STAT);
1390 memset (node, 0, sizeof (struct tree_common));
1392 #ifdef GATHER_STATISTICS
1393 tree_node_counts[(int) x_kind]++;
1394 tree_node_sizes[(int) x_kind] += sizeof (struct tree_list);
1397 TREE_SET_CODE (node, TREE_LIST);
1398 TREE_CHAIN (node) = chain;
1399 TREE_PURPOSE (node) = purpose;
1400 TREE_VALUE (node) = value;
1405 /* Return the size nominally occupied by an object of type TYPE
1406 when it resides in memory. The value is measured in units of bytes,
1407 and its data type is that normally used for type sizes
1408 (which is the first type created by make_signed_type or
1409 make_unsigned_type). */
1412 size_in_bytes (tree type)
1416 if (type == error_mark_node)
1417 return integer_zero_node;
1419 type = TYPE_MAIN_VARIANT (type);
1420 t = TYPE_SIZE_UNIT (type);
1424 lang_hooks.types.incomplete_type_error (NULL_TREE, type);
1425 return size_zero_node;
1428 if (TREE_CODE (t) == INTEGER_CST)
1429 t = force_fit_type (t, 0, false, false);
1434 /* Return the size of TYPE (in bytes) as a wide integer
1435 or return -1 if the size can vary or is larger than an integer. */
1438 int_size_in_bytes (tree type)
1442 if (type == error_mark_node)
1445 type = TYPE_MAIN_VARIANT (type);
1446 t = TYPE_SIZE_UNIT (type);
1448 || TREE_CODE (t) != INTEGER_CST
1449 || TREE_OVERFLOW (t)
1450 || TREE_INT_CST_HIGH (t) != 0
1451 /* If the result would appear negative, it's too big to represent. */
1452 || (HOST_WIDE_INT) TREE_INT_CST_LOW (t) < 0)
1455 return TREE_INT_CST_LOW (t);
1458 /* Return the bit position of FIELD, in bits from the start of the record.
1459 This is a tree of type bitsizetype. */
1462 bit_position (tree field)
1464 return bit_from_pos (DECL_FIELD_OFFSET (field),
1465 DECL_FIELD_BIT_OFFSET (field));
1468 /* Likewise, but return as an integer. Abort if it cannot be represented
1469 in that way (since it could be a signed value, we don't have the option
1470 of returning -1 like int_size_in_byte can. */
1473 int_bit_position (tree field)
1475 return tree_low_cst (bit_position (field), 0);
1478 /* Return the byte position of FIELD, in bytes from the start of the record.
1479 This is a tree of type sizetype. */
1482 byte_position (tree field)
1484 return byte_from_pos (DECL_FIELD_OFFSET (field),
1485 DECL_FIELD_BIT_OFFSET (field));
1488 /* Likewise, but return as an integer. Abort if it cannot be represented
1489 in that way (since it could be a signed value, we don't have the option
1490 of returning -1 like int_size_in_byte can. */
1493 int_byte_position (tree field)
1495 return tree_low_cst (byte_position (field), 0);
1498 /* Return the strictest alignment, in bits, that T is known to have. */
1503 unsigned int align0, align1;
1505 switch (TREE_CODE (t))
1507 case NOP_EXPR: case CONVERT_EXPR: case NON_LVALUE_EXPR:
1508 /* If we have conversions, we know that the alignment of the
1509 object must meet each of the alignments of the types. */
1510 align0 = expr_align (TREE_OPERAND (t, 0));
1511 align1 = TYPE_ALIGN (TREE_TYPE (t));
1512 return MAX (align0, align1);
1514 case SAVE_EXPR: case COMPOUND_EXPR: case MODIFY_EXPR:
1515 case INIT_EXPR: case TARGET_EXPR: case WITH_CLEANUP_EXPR:
1516 case CLEANUP_POINT_EXPR:
1517 /* These don't change the alignment of an object. */
1518 return expr_align (TREE_OPERAND (t, 0));
1521 /* The best we can do is say that the alignment is the least aligned
1523 align0 = expr_align (TREE_OPERAND (t, 1));
1524 align1 = expr_align (TREE_OPERAND (t, 2));
1525 return MIN (align0, align1);
1527 case LABEL_DECL: case CONST_DECL:
1528 case VAR_DECL: case PARM_DECL: case RESULT_DECL:
1529 if (DECL_ALIGN (t) != 0)
1530 return DECL_ALIGN (t);
1534 return FUNCTION_BOUNDARY;
1540 /* Otherwise take the alignment from that of the type. */
1541 return TYPE_ALIGN (TREE_TYPE (t));
1544 /* Return, as a tree node, the number of elements for TYPE (which is an
1545 ARRAY_TYPE) minus one. This counts only elements of the top array. */
1548 array_type_nelts (tree type)
1550 tree index_type, min, max;
1552 /* If they did it with unspecified bounds, then we should have already
1553 given an error about it before we got here. */
1554 if (! TYPE_DOMAIN (type))
1555 return error_mark_node;
1557 index_type = TYPE_DOMAIN (type);
1558 min = TYPE_MIN_VALUE (index_type);
1559 max = TYPE_MAX_VALUE (index_type);
1561 return (integer_zerop (min)
1563 : fold (build2 (MINUS_EXPR, TREE_TYPE (max), max, min)));
1566 /* If arg is static -- a reference to an object in static storage -- then
1567 return the object. This is not the same as the C meaning of `static'.
1568 If arg isn't static, return NULL. */
1573 switch (TREE_CODE (arg))
1576 /* Nested functions aren't static, since taking their address
1577 involves a trampoline. */
1578 return ((decl_function_context (arg) == 0 || DECL_NO_STATIC_CHAIN (arg))
1579 && ! DECL_NON_ADDR_CONST_P (arg)
1583 return ((TREE_STATIC (arg) || DECL_EXTERNAL (arg))
1584 && ! DECL_THREAD_LOCAL (arg)
1585 && ! DECL_NON_ADDR_CONST_P (arg)
1589 return ((TREE_STATIC (arg) || DECL_EXTERNAL (arg))
1593 return TREE_STATIC (arg) ? arg : NULL;
1600 /* If the thing being referenced is not a field, then it is
1601 something language specific. */
1602 if (TREE_CODE (TREE_OPERAND (arg, 1)) != FIELD_DECL)
1603 return (*lang_hooks.staticp) (arg);
1605 /* If we are referencing a bitfield, we can't evaluate an
1606 ADDR_EXPR at compile time and so it isn't a constant. */
1607 if (DECL_BIT_FIELD (TREE_OPERAND (arg, 1)))
1610 return staticp (TREE_OPERAND (arg, 0));
1615 case MISALIGNED_INDIRECT_REF:
1616 case ALIGN_INDIRECT_REF:
1618 return TREE_CONSTANT (TREE_OPERAND (arg, 0)) ? arg : NULL;
1621 case ARRAY_RANGE_REF:
1622 if (TREE_CODE (TYPE_SIZE (TREE_TYPE (arg))) == INTEGER_CST
1623 && TREE_CODE (TREE_OPERAND (arg, 1)) == INTEGER_CST)
1624 return staticp (TREE_OPERAND (arg, 0));
1629 if ((unsigned int) TREE_CODE (arg)
1630 >= (unsigned int) LAST_AND_UNUSED_TREE_CODE)
1631 return lang_hooks.staticp (arg);
1637 /* Wrap a SAVE_EXPR around EXPR, if appropriate.
1638 Do this to any expression which may be used in more than one place,
1639 but must be evaluated only once.
1641 Normally, expand_expr would reevaluate the expression each time.
1642 Calling save_expr produces something that is evaluated and recorded
1643 the first time expand_expr is called on it. Subsequent calls to
1644 expand_expr just reuse the recorded value.
1646 The call to expand_expr that generates code that actually computes
1647 the value is the first call *at compile time*. Subsequent calls
1648 *at compile time* generate code to use the saved value.
1649 This produces correct result provided that *at run time* control
1650 always flows through the insns made by the first expand_expr
1651 before reaching the other places where the save_expr was evaluated.
1652 You, the caller of save_expr, must make sure this is so.
1654 Constants, and certain read-only nodes, are returned with no
1655 SAVE_EXPR because that is safe. Expressions containing placeholders
1656 are not touched; see tree.def for an explanation of what these
1660 save_expr (tree expr)
1662 tree t = fold (expr);
1665 /* If the tree evaluates to a constant, then we don't want to hide that
1666 fact (i.e. this allows further folding, and direct checks for constants).
1667 However, a read-only object that has side effects cannot be bypassed.
1668 Since it is no problem to reevaluate literals, we just return the
1670 inner = skip_simple_arithmetic (t);
1672 if (TREE_INVARIANT (inner)
1673 || (TREE_READONLY (inner) && ! TREE_SIDE_EFFECTS (inner))
1674 || TREE_CODE (inner) == SAVE_EXPR
1675 || TREE_CODE (inner) == ERROR_MARK)
1678 /* If INNER contains a PLACEHOLDER_EXPR, we must evaluate it each time, since
1679 it means that the size or offset of some field of an object depends on
1680 the value within another field.
1682 Note that it must not be the case that T contains both a PLACEHOLDER_EXPR
1683 and some variable since it would then need to be both evaluated once and
1684 evaluated more than once. Front-ends must assure this case cannot
1685 happen by surrounding any such subexpressions in their own SAVE_EXPR
1686 and forcing evaluation at the proper time. */
1687 if (contains_placeholder_p (inner))
1690 t = build1 (SAVE_EXPR, TREE_TYPE (expr), t);
1692 /* This expression might be placed ahead of a jump to ensure that the
1693 value was computed on both sides of the jump. So make sure it isn't
1694 eliminated as dead. */
1695 TREE_SIDE_EFFECTS (t) = 1;
1696 TREE_INVARIANT (t) = 1;
1700 /* Look inside EXPR and into any simple arithmetic operations. Return
1701 the innermost non-arithmetic node. */
1704 skip_simple_arithmetic (tree expr)
1708 /* We don't care about whether this can be used as an lvalue in this
1710 while (TREE_CODE (expr) == NON_LVALUE_EXPR)
1711 expr = TREE_OPERAND (expr, 0);
1713 /* If we have simple operations applied to a SAVE_EXPR or to a SAVE_EXPR and
1714 a constant, it will be more efficient to not make another SAVE_EXPR since
1715 it will allow better simplification and GCSE will be able to merge the
1716 computations if they actually occur. */
1720 if (UNARY_CLASS_P (inner))
1721 inner = TREE_OPERAND (inner, 0);
1722 else if (BINARY_CLASS_P (inner))
1724 if (TREE_INVARIANT (TREE_OPERAND (inner, 1)))
1725 inner = TREE_OPERAND (inner, 0);
1726 else if (TREE_INVARIANT (TREE_OPERAND (inner, 0)))
1727 inner = TREE_OPERAND (inner, 1);
1738 /* Returns the index of the first non-tree operand for CODE, or the number
1739 of operands if all are trees. */
1742 first_rtl_op (enum tree_code code)
1747 return TREE_CODE_LENGTH (code);
1751 /* Return which tree structure is used by T. */
1753 enum tree_node_structure_enum
1754 tree_node_structure (tree t)
1756 enum tree_code code = TREE_CODE (t);
1758 switch (TREE_CODE_CLASS (code))
1760 case tcc_declaration:
1765 case tcc_comparison:
1768 case tcc_expression:
1771 default: /* tcc_constant and tcc_exceptional */
1776 /* tcc_constant cases. */
1777 case INTEGER_CST: return TS_INT_CST;
1778 case REAL_CST: return TS_REAL_CST;
1779 case COMPLEX_CST: return TS_COMPLEX;
1780 case VECTOR_CST: return TS_VECTOR;
1781 case STRING_CST: return TS_STRING;
1782 /* tcc_exceptional cases. */
1783 case ERROR_MARK: return TS_COMMON;
1784 case IDENTIFIER_NODE: return TS_IDENTIFIER;
1785 case TREE_LIST: return TS_LIST;
1786 case TREE_VEC: return TS_VEC;
1787 case PHI_NODE: return TS_PHI_NODE;
1788 case SSA_NAME: return TS_SSA_NAME;
1789 case PLACEHOLDER_EXPR: return TS_COMMON;
1790 case STATEMENT_LIST: return TS_STATEMENT_LIST;
1791 case BLOCK: return TS_BLOCK;
1792 case TREE_BINFO: return TS_BINFO;
1793 case VALUE_HANDLE: return TS_VALUE_HANDLE;
1800 /* Return 1 if EXP contains a PLACEHOLDER_EXPR; i.e., if it represents a size
1801 or offset that depends on a field within a record. */
1804 contains_placeholder_p (tree exp)
1806 enum tree_code code;
1811 code = TREE_CODE (exp);
1812 if (code == PLACEHOLDER_EXPR)
1815 switch (TREE_CODE_CLASS (code))
1818 /* Don't look at any PLACEHOLDER_EXPRs that might be in index or bit
1819 position computations since they will be converted into a
1820 WITH_RECORD_EXPR involving the reference, which will assume
1821 here will be valid. */
1822 return CONTAINS_PLACEHOLDER_P (TREE_OPERAND (exp, 0));
1824 case tcc_exceptional:
1825 if (code == TREE_LIST)
1826 return (CONTAINS_PLACEHOLDER_P (TREE_VALUE (exp))
1827 || CONTAINS_PLACEHOLDER_P (TREE_CHAIN (exp)));
1832 case tcc_comparison:
1833 case tcc_expression:
1837 /* Ignoring the first operand isn't quite right, but works best. */
1838 return CONTAINS_PLACEHOLDER_P (TREE_OPERAND (exp, 1));
1841 return (CONTAINS_PLACEHOLDER_P (TREE_OPERAND (exp, 0))
1842 || CONTAINS_PLACEHOLDER_P (TREE_OPERAND (exp, 1))
1843 || CONTAINS_PLACEHOLDER_P (TREE_OPERAND (exp, 2)));
1849 switch (first_rtl_op (code))
1852 return CONTAINS_PLACEHOLDER_P (TREE_OPERAND (exp, 0));
1854 return (CONTAINS_PLACEHOLDER_P (TREE_OPERAND (exp, 0))
1855 || CONTAINS_PLACEHOLDER_P (TREE_OPERAND (exp, 1)));
1866 /* Return true if any part of the computation of TYPE involves a
1867 PLACEHOLDER_EXPR. This includes size, bounds, qualifiers
1868 (for QUAL_UNION_TYPE) and field positions. */
1871 type_contains_placeholder_1 (tree type)
1873 /* If the size contains a placeholder or the parent type (component type in
1874 the case of arrays) type involves a placeholder, this type does. */
1875 if (CONTAINS_PLACEHOLDER_P (TYPE_SIZE (type))
1876 || CONTAINS_PLACEHOLDER_P (TYPE_SIZE_UNIT (type))
1877 || (TREE_TYPE (type) != 0
1878 && type_contains_placeholder_p (TREE_TYPE (type))))
1881 /* Now do type-specific checks. Note that the last part of the check above
1882 greatly limits what we have to do below. */
1883 switch (TREE_CODE (type))
1892 case REFERENCE_TYPE:
1900 /* Here we just check the bounds. */
1901 return (CONTAINS_PLACEHOLDER_P (TYPE_MIN_VALUE (type))
1902 || CONTAINS_PLACEHOLDER_P (TYPE_MAX_VALUE (type)));
1907 /* We're already checked the component type (TREE_TYPE), so just check
1909 return type_contains_placeholder_p (TYPE_DOMAIN (type));
1913 case QUAL_UNION_TYPE:
1917 for (field = TYPE_FIELDS (type); field; field = TREE_CHAIN (field))
1918 if (TREE_CODE (field) == FIELD_DECL
1919 && (CONTAINS_PLACEHOLDER_P (DECL_FIELD_OFFSET (field))
1920 || (TREE_CODE (type) == QUAL_UNION_TYPE
1921 && CONTAINS_PLACEHOLDER_P (DECL_QUALIFIER (field)))
1922 || type_contains_placeholder_p (TREE_TYPE (field))))
1934 type_contains_placeholder_p (tree type)
1938 /* If the contains_placeholder_bits field has been initialized,
1939 then we know the answer. */
1940 if (TYPE_CONTAINS_PLACEHOLDER_INTERNAL (type) > 0)
1941 return TYPE_CONTAINS_PLACEHOLDER_INTERNAL (type) - 1;
1943 /* Indicate that we've seen this type node, and the answer is false.
1944 This is what we want to return if we run into recursion via fields. */
1945 TYPE_CONTAINS_PLACEHOLDER_INTERNAL (type) = 1;
1947 /* Compute the real value. */
1948 result = type_contains_placeholder_1 (type);
1950 /* Store the real value. */
1951 TYPE_CONTAINS_PLACEHOLDER_INTERNAL (type) = result + 1;
1956 /* Given a tree EXP, a FIELD_DECL F, and a replacement value R,
1957 return a tree with all occurrences of references to F in a
1958 PLACEHOLDER_EXPR replaced by R. Note that we assume here that EXP
1959 contains only arithmetic expressions or a CALL_EXPR with a
1960 PLACEHOLDER_EXPR occurring only in its arglist. */
1963 substitute_in_expr (tree exp, tree f, tree r)
1965 enum tree_code code = TREE_CODE (exp);
1970 /* We handle TREE_LIST and COMPONENT_REF separately. */
1971 if (code == TREE_LIST)
1973 op0 = SUBSTITUTE_IN_EXPR (TREE_CHAIN (exp), f, r);
1974 op1 = SUBSTITUTE_IN_EXPR (TREE_VALUE (exp), f, r);
1975 if (op0 == TREE_CHAIN (exp) && op1 == TREE_VALUE (exp))
1978 return tree_cons (TREE_PURPOSE (exp), op1, op0);
1980 else if (code == COMPONENT_REF)
1982 /* If this expression is getting a value from a PLACEHOLDER_EXPR
1983 and it is the right field, replace it with R. */
1984 for (inner = TREE_OPERAND (exp, 0);
1985 REFERENCE_CLASS_P (inner);
1986 inner = TREE_OPERAND (inner, 0))
1988 if (TREE_CODE (inner) == PLACEHOLDER_EXPR
1989 && TREE_OPERAND (exp, 1) == f)
1992 /* If this expression hasn't been completed let, leave it alone. */
1993 if (TREE_CODE (inner) == PLACEHOLDER_EXPR && TREE_TYPE (inner) == 0)
1996 op0 = SUBSTITUTE_IN_EXPR (TREE_OPERAND (exp, 0), f, r);
1997 if (op0 == TREE_OPERAND (exp, 0))
2000 new = fold (build3 (COMPONENT_REF, TREE_TYPE (exp),
2001 op0, TREE_OPERAND (exp, 1), NULL_TREE));
2004 switch (TREE_CODE_CLASS (code))
2007 case tcc_declaration:
2010 case tcc_exceptional:
2013 case tcc_comparison:
2014 case tcc_expression:
2016 switch (first_rtl_op (code))
2022 op0 = SUBSTITUTE_IN_EXPR (TREE_OPERAND (exp, 0), f, r);
2023 if (op0 == TREE_OPERAND (exp, 0))
2026 new = fold (build1 (code, TREE_TYPE (exp), op0));
2030 op0 = SUBSTITUTE_IN_EXPR (TREE_OPERAND (exp, 0), f, r);
2031 op1 = SUBSTITUTE_IN_EXPR (TREE_OPERAND (exp, 1), f, r);
2033 if (op0 == TREE_OPERAND (exp, 0) && op1 == TREE_OPERAND (exp, 1))
2036 new = fold (build2 (code, TREE_TYPE (exp), op0, op1));
2040 op0 = SUBSTITUTE_IN_EXPR (TREE_OPERAND (exp, 0), f, r);
2041 op1 = SUBSTITUTE_IN_EXPR (TREE_OPERAND (exp, 1), f, r);
2042 op2 = SUBSTITUTE_IN_EXPR (TREE_OPERAND (exp, 2), f, r);
2044 if (op0 == TREE_OPERAND (exp, 0) && op1 == TREE_OPERAND (exp, 1)
2045 && op2 == TREE_OPERAND (exp, 2))
2048 new = fold (build3 (code, TREE_TYPE (exp), op0, op1, op2));
2060 TREE_READONLY (new) = TREE_READONLY (exp);
2064 /* Similar, but look for a PLACEHOLDER_EXPR in EXP and find a replacement
2065 for it within OBJ, a tree that is an object or a chain of references. */
2068 substitute_placeholder_in_expr (tree exp, tree obj)
2070 enum tree_code code = TREE_CODE (exp);
2071 tree op0, op1, op2, op3;
2073 /* If this is a PLACEHOLDER_EXPR, see if we find a corresponding type
2074 in the chain of OBJ. */
2075 if (code == PLACEHOLDER_EXPR)
2077 tree need_type = TYPE_MAIN_VARIANT (TREE_TYPE (exp));
2080 for (elt = obj; elt != 0;
2081 elt = ((TREE_CODE (elt) == COMPOUND_EXPR
2082 || TREE_CODE (elt) == COND_EXPR)
2083 ? TREE_OPERAND (elt, 1)
2084 : (REFERENCE_CLASS_P (elt)
2085 || UNARY_CLASS_P (elt)
2086 || BINARY_CLASS_P (elt)
2087 || EXPRESSION_CLASS_P (elt))
2088 ? TREE_OPERAND (elt, 0) : 0))
2089 if (TYPE_MAIN_VARIANT (TREE_TYPE (elt)) == need_type)
2092 for (elt = obj; elt != 0;
2093 elt = ((TREE_CODE (elt) == COMPOUND_EXPR
2094 || TREE_CODE (elt) == COND_EXPR)
2095 ? TREE_OPERAND (elt, 1)
2096 : (REFERENCE_CLASS_P (elt)
2097 || UNARY_CLASS_P (elt)
2098 || BINARY_CLASS_P (elt)
2099 || EXPRESSION_CLASS_P (elt))
2100 ? TREE_OPERAND (elt, 0) : 0))
2101 if (POINTER_TYPE_P (TREE_TYPE (elt))
2102 && (TYPE_MAIN_VARIANT (TREE_TYPE (TREE_TYPE (elt)))
2104 return fold (build1 (INDIRECT_REF, need_type, elt));
2106 /* If we didn't find it, return the original PLACEHOLDER_EXPR. If it
2107 survives until RTL generation, there will be an error. */
2111 /* TREE_LIST is special because we need to look at TREE_VALUE
2112 and TREE_CHAIN, not TREE_OPERANDS. */
2113 else if (code == TREE_LIST)
2115 op0 = SUBSTITUTE_PLACEHOLDER_IN_EXPR (TREE_CHAIN (exp), obj);
2116 op1 = SUBSTITUTE_PLACEHOLDER_IN_EXPR (TREE_VALUE (exp), obj);
2117 if (op0 == TREE_CHAIN (exp) && op1 == TREE_VALUE (exp))
2120 return tree_cons (TREE_PURPOSE (exp), op1, op0);
2123 switch (TREE_CODE_CLASS (code))
2126 case tcc_declaration:
2129 case tcc_exceptional:
2132 case tcc_comparison:
2133 case tcc_expression:
2136 switch (first_rtl_op (code))
2142 op0 = SUBSTITUTE_PLACEHOLDER_IN_EXPR (TREE_OPERAND (exp, 0), obj);
2143 if (op0 == TREE_OPERAND (exp, 0))
2146 return fold (build1 (code, TREE_TYPE (exp), op0));
2149 op0 = SUBSTITUTE_PLACEHOLDER_IN_EXPR (TREE_OPERAND (exp, 0), obj);
2150 op1 = SUBSTITUTE_PLACEHOLDER_IN_EXPR (TREE_OPERAND (exp, 1), obj);
2152 if (op0 == TREE_OPERAND (exp, 0) && op1 == TREE_OPERAND (exp, 1))
2155 return fold (build2 (code, TREE_TYPE (exp), op0, op1));
2158 op0 = SUBSTITUTE_PLACEHOLDER_IN_EXPR (TREE_OPERAND (exp, 0), obj);
2159 op1 = SUBSTITUTE_PLACEHOLDER_IN_EXPR (TREE_OPERAND (exp, 1), obj);
2160 op2 = SUBSTITUTE_PLACEHOLDER_IN_EXPR (TREE_OPERAND (exp, 2), obj);
2162 if (op0 == TREE_OPERAND (exp, 0) && op1 == TREE_OPERAND (exp, 1)
2163 && op2 == TREE_OPERAND (exp, 2))
2166 return fold (build3 (code, TREE_TYPE (exp), op0, op1, op2));
2169 op0 = SUBSTITUTE_PLACEHOLDER_IN_EXPR (TREE_OPERAND (exp, 0), obj);
2170 op1 = SUBSTITUTE_PLACEHOLDER_IN_EXPR (TREE_OPERAND (exp, 1), obj);
2171 op2 = SUBSTITUTE_PLACEHOLDER_IN_EXPR (TREE_OPERAND (exp, 2), obj);
2172 op3 = SUBSTITUTE_PLACEHOLDER_IN_EXPR (TREE_OPERAND (exp, 3), obj);
2174 if (op0 == TREE_OPERAND (exp, 0) && op1 == TREE_OPERAND (exp, 1)
2175 && op2 == TREE_OPERAND (exp, 2)
2176 && op3 == TREE_OPERAND (exp, 3))
2179 return fold (build4 (code, TREE_TYPE (exp), op0, op1, op2, op3));
2191 /* Stabilize a reference so that we can use it any number of times
2192 without causing its operands to be evaluated more than once.
2193 Returns the stabilized reference. This works by means of save_expr,
2194 so see the caveats in the comments about save_expr.
2196 Also allows conversion expressions whose operands are references.
2197 Any other kind of expression is returned unchanged. */
2200 stabilize_reference (tree ref)
2203 enum tree_code code = TREE_CODE (ref);
2210 /* No action is needed in this case. */
2216 case FIX_TRUNC_EXPR:
2217 case FIX_FLOOR_EXPR:
2218 case FIX_ROUND_EXPR:
2220 result = build_nt (code, stabilize_reference (TREE_OPERAND (ref, 0)));
2224 result = build_nt (INDIRECT_REF,
2225 stabilize_reference_1 (TREE_OPERAND (ref, 0)));
2229 result = build_nt (COMPONENT_REF,
2230 stabilize_reference (TREE_OPERAND (ref, 0)),
2231 TREE_OPERAND (ref, 1), NULL_TREE);
2235 result = build_nt (BIT_FIELD_REF,
2236 stabilize_reference (TREE_OPERAND (ref, 0)),
2237 stabilize_reference_1 (TREE_OPERAND (ref, 1)),
2238 stabilize_reference_1 (TREE_OPERAND (ref, 2)));
2242 result = build_nt (ARRAY_REF,
2243 stabilize_reference (TREE_OPERAND (ref, 0)),
2244 stabilize_reference_1 (TREE_OPERAND (ref, 1)),
2245 TREE_OPERAND (ref, 2), TREE_OPERAND (ref, 3));
2248 case ARRAY_RANGE_REF:
2249 result = build_nt (ARRAY_RANGE_REF,
2250 stabilize_reference (TREE_OPERAND (ref, 0)),
2251 stabilize_reference_1 (TREE_OPERAND (ref, 1)),
2252 TREE_OPERAND (ref, 2), TREE_OPERAND (ref, 3));
2256 /* We cannot wrap the first expression in a SAVE_EXPR, as then
2257 it wouldn't be ignored. This matters when dealing with
2259 return stabilize_reference_1 (ref);
2261 /* If arg isn't a kind of lvalue we recognize, make no change.
2262 Caller should recognize the error for an invalid lvalue. */
2267 return error_mark_node;
2270 TREE_TYPE (result) = TREE_TYPE (ref);
2271 TREE_READONLY (result) = TREE_READONLY (ref);
2272 TREE_SIDE_EFFECTS (result) = TREE_SIDE_EFFECTS (ref);
2273 TREE_THIS_VOLATILE (result) = TREE_THIS_VOLATILE (ref);
2278 /* Subroutine of stabilize_reference; this is called for subtrees of
2279 references. Any expression with side-effects must be put in a SAVE_EXPR
2280 to ensure that it is only evaluated once.
2282 We don't put SAVE_EXPR nodes around everything, because assigning very
2283 simple expressions to temporaries causes us to miss good opportunities
2284 for optimizations. Among other things, the opportunity to fold in the
2285 addition of a constant into an addressing mode often gets lost, e.g.
2286 "y[i+1] += x;". In general, we take the approach that we should not make
2287 an assignment unless we are forced into it - i.e., that any non-side effect
2288 operator should be allowed, and that cse should take care of coalescing
2289 multiple utterances of the same expression should that prove fruitful. */
2292 stabilize_reference_1 (tree e)
2295 enum tree_code code = TREE_CODE (e);
2297 /* We cannot ignore const expressions because it might be a reference
2298 to a const array but whose index contains side-effects. But we can
2299 ignore things that are actual constant or that already have been
2300 handled by this function. */
2302 if (TREE_INVARIANT (e))
2305 switch (TREE_CODE_CLASS (code))
2307 case tcc_exceptional:
2309 case tcc_declaration:
2310 case tcc_comparison:
2312 case tcc_expression:
2314 /* If the expression has side-effects, then encase it in a SAVE_EXPR
2315 so that it will only be evaluated once. */
2316 /* The reference (r) and comparison (<) classes could be handled as
2317 below, but it is generally faster to only evaluate them once. */
2318 if (TREE_SIDE_EFFECTS (e))
2319 return save_expr (e);
2323 /* Constants need no processing. In fact, we should never reach
2328 /* Division is slow and tends to be compiled with jumps,
2329 especially the division by powers of 2 that is often
2330 found inside of an array reference. So do it just once. */
2331 if (code == TRUNC_DIV_EXPR || code == TRUNC_MOD_EXPR
2332 || code == FLOOR_DIV_EXPR || code == FLOOR_MOD_EXPR
2333 || code == CEIL_DIV_EXPR || code == CEIL_MOD_EXPR
2334 || code == ROUND_DIV_EXPR || code == ROUND_MOD_EXPR)
2335 return save_expr (e);
2336 /* Recursively stabilize each operand. */
2337 result = build_nt (code, stabilize_reference_1 (TREE_OPERAND (e, 0)),
2338 stabilize_reference_1 (TREE_OPERAND (e, 1)));
2342 /* Recursively stabilize each operand. */
2343 result = build_nt (code, stabilize_reference_1 (TREE_OPERAND (e, 0)));
2350 TREE_TYPE (result) = TREE_TYPE (e);
2351 TREE_READONLY (result) = TREE_READONLY (e);
2352 TREE_SIDE_EFFECTS (result) = TREE_SIDE_EFFECTS (e);
2353 TREE_THIS_VOLATILE (result) = TREE_THIS_VOLATILE (e);
2354 TREE_INVARIANT (result) = 1;
2359 /* Low-level constructors for expressions. */
2361 /* A helper function for build1 and constant folders. Set TREE_CONSTANT,
2362 TREE_INVARIANT, and TREE_SIDE_EFFECTS for an ADDR_EXPR. */
2365 recompute_tree_invarant_for_addr_expr (tree t)
2368 bool tc = true, ti = true, se = false;
2370 /* We started out assuming this address is both invariant and constant, but
2371 does not have side effects. Now go down any handled components and see if
2372 any of them involve offsets that are either non-constant or non-invariant.
2373 Also check for side-effects.
2375 ??? Note that this code makes no attempt to deal with the case where
2376 taking the address of something causes a copy due to misalignment. */
2378 #define UPDATE_TITCSE(NODE) \
2379 do { tree _node = (NODE); \
2380 if (_node && !TREE_INVARIANT (_node)) ti = false; \
2381 if (_node && !TREE_CONSTANT (_node)) tc = false; \
2382 if (_node && TREE_SIDE_EFFECTS (_node)) se = true; } while (0)
2384 for (node = TREE_OPERAND (t, 0); handled_component_p (node);
2385 node = TREE_OPERAND (node, 0))
2387 /* If the first operand doesn't have an ARRAY_TYPE, this is a bogus
2388 array reference (probably made temporarily by the G++ front end),
2389 so ignore all the operands. */
2390 if ((TREE_CODE (node) == ARRAY_REF
2391 || TREE_CODE (node) == ARRAY_RANGE_REF)
2392 && TREE_CODE (TREE_TYPE (TREE_OPERAND (node, 0))) == ARRAY_TYPE)
2394 UPDATE_TITCSE (TREE_OPERAND (node, 1));
2395 if (TREE_OPERAND (node, 2))
2396 UPDATE_TITCSE (TREE_OPERAND (node, 2));
2397 if (TREE_OPERAND (node, 3))
2398 UPDATE_TITCSE (TREE_OPERAND (node, 3));
2400 /* Likewise, just because this is a COMPONENT_REF doesn't mean we have a
2401 FIELD_DECL, apparently. The G++ front end can put something else
2402 there, at least temporarily. */
2403 else if (TREE_CODE (node) == COMPONENT_REF
2404 && TREE_CODE (TREE_OPERAND (node, 1)) == FIELD_DECL)
2406 if (TREE_OPERAND (node, 2))
2407 UPDATE_TITCSE (TREE_OPERAND (node, 2));
2409 else if (TREE_CODE (node) == BIT_FIELD_REF)
2410 UPDATE_TITCSE (TREE_OPERAND (node, 2));
2413 /* Now see what's inside. If it's an INDIRECT_REF, copy our properties from
2414 the address, since &(*a)->b is a form of addition. If it's a decl, it's
2415 invariant and constant if the decl is static. It's also invariant if it's
2416 a decl in the current function. Taking the address of a volatile variable
2417 is not volatile. If it's a constant, the address is both invariant and
2418 constant. Otherwise it's neither. */
2419 if (TREE_CODE (node) == INDIRECT_REF)
2420 UPDATE_TITCSE (TREE_OPERAND (node, 0));
2421 else if (DECL_P (node))
2425 else if (decl_function_context (node) == current_function_decl)
2430 else if (CONSTANT_CLASS_P (node))
2435 se |= TREE_SIDE_EFFECTS (node);
2438 TREE_CONSTANT (t) = tc;
2439 TREE_INVARIANT (t) = ti;
2440 TREE_SIDE_EFFECTS (t) = se;
2441 #undef UPDATE_TITCSE
2444 /* Build an expression of code CODE, data type TYPE, and operands as
2445 specified. Expressions and reference nodes can be created this way.
2446 Constants, decls, types and misc nodes cannot be.
2448 We define 5 non-variadic functions, from 0 to 4 arguments. This is
2449 enough for all extant tree codes. These functions can be called
2450 directly (preferably!), but can also be obtained via GCC preprocessor
2451 magic within the build macro. */
2454 build0_stat (enum tree_code code, tree tt MEM_STAT_DECL)
2458 gcc_assert (TREE_CODE_LENGTH (code) == 0);
2460 t = make_node_stat (code PASS_MEM_STAT);
2467 build1_stat (enum tree_code code, tree type, tree node MEM_STAT_DECL)
2469 int length = sizeof (struct tree_exp);
2470 #ifdef GATHER_STATISTICS
2471 tree_node_kind kind;
2475 #ifdef GATHER_STATISTICS
2476 switch (TREE_CODE_CLASS (code))
2478 case tcc_statement: /* an expression with side effects */
2481 case tcc_reference: /* a reference */
2489 tree_node_counts[(int) kind]++;
2490 tree_node_sizes[(int) kind] += length;
2493 gcc_assert (TREE_CODE_LENGTH (code) == 1);
2495 t = ggc_alloc_zone_stat (length, tree_zone PASS_MEM_STAT);
2497 memset (t, 0, sizeof (struct tree_common));
2499 TREE_SET_CODE (t, code);
2501 TREE_TYPE (t) = type;
2502 #ifdef USE_MAPPED_LOCATION
2503 SET_EXPR_LOCATION (t, UNKNOWN_LOCATION);
2505 SET_EXPR_LOCUS (t, NULL);
2507 TREE_COMPLEXITY (t) = 0;
2508 TREE_OPERAND (t, 0) = node;
2509 TREE_BLOCK (t) = NULL_TREE;
2510 if (node && !TYPE_P (node) && first_rtl_op (code) != 0)
2512 TREE_SIDE_EFFECTS (t) = TREE_SIDE_EFFECTS (node);
2513 TREE_READONLY (t) = TREE_READONLY (node);
2516 if (TREE_CODE_CLASS (code) == tcc_statement)
2517 TREE_SIDE_EFFECTS (t) = 1;
2523 case PREDECREMENT_EXPR:
2524 case PREINCREMENT_EXPR:
2525 case POSTDECREMENT_EXPR:
2526 case POSTINCREMENT_EXPR:
2527 /* All of these have side-effects, no matter what their
2529 TREE_SIDE_EFFECTS (t) = 1;
2530 TREE_READONLY (t) = 0;
2533 case MISALIGNED_INDIRECT_REF:
2534 case ALIGN_INDIRECT_REF:
2536 /* Whether a dereference is readonly has nothing to do with whether
2537 its operand is readonly. */
2538 TREE_READONLY (t) = 0;
2543 recompute_tree_invarant_for_addr_expr (t);
2547 if (TREE_CODE_CLASS (code) == tcc_unary
2548 && node && !TYPE_P (node)
2549 && TREE_CONSTANT (node))
2550 TREE_CONSTANT (t) = 1;
2551 if (TREE_CODE_CLASS (code) == tcc_unary
2552 && node && TREE_INVARIANT (node))
2553 TREE_INVARIANT (t) = 1;
2554 if (TREE_CODE_CLASS (code) == tcc_reference
2555 && node && TREE_THIS_VOLATILE (node))
2556 TREE_THIS_VOLATILE (t) = 1;
2563 #define PROCESS_ARG(N) \
2565 TREE_OPERAND (t, N) = arg##N; \
2566 if (arg##N &&!TYPE_P (arg##N) && fro > N) \
2568 if (TREE_SIDE_EFFECTS (arg##N)) \
2570 if (!TREE_READONLY (arg##N)) \
2572 if (!TREE_CONSTANT (arg##N)) \
2574 if (!TREE_INVARIANT (arg##N)) \
2580 build2_stat (enum tree_code code, tree tt, tree arg0, tree arg1 MEM_STAT_DECL)
2582 bool constant, read_only, side_effects, invariant;
2586 gcc_assert (TREE_CODE_LENGTH (code) == 2);
2588 t = make_node_stat (code PASS_MEM_STAT);
2591 /* Below, we automatically set TREE_SIDE_EFFECTS and TREE_READONLY for the
2592 result based on those same flags for the arguments. But if the
2593 arguments aren't really even `tree' expressions, we shouldn't be trying
2595 fro = first_rtl_op (code);
2597 /* Expressions without side effects may be constant if their
2598 arguments are as well. */
2599 constant = (TREE_CODE_CLASS (code) == tcc_comparison
2600 || TREE_CODE_CLASS (code) == tcc_binary);
2602 side_effects = TREE_SIDE_EFFECTS (t);
2603 invariant = constant;
2608 TREE_READONLY (t) = read_only;
2609 TREE_CONSTANT (t) = constant;
2610 TREE_INVARIANT (t) = invariant;
2611 TREE_SIDE_EFFECTS (t) = side_effects;
2612 TREE_THIS_VOLATILE (t)
2613 = (TREE_CODE_CLASS (code) == tcc_reference
2614 && arg0 && TREE_THIS_VOLATILE (arg0));
2620 build3_stat (enum tree_code code, tree tt, tree arg0, tree arg1,
2621 tree arg2 MEM_STAT_DECL)
2623 bool constant, read_only, side_effects, invariant;
2627 gcc_assert (TREE_CODE_LENGTH (code) == 3);
2629 t = make_node_stat (code PASS_MEM_STAT);
2632 fro = first_rtl_op (code);
2634 side_effects = TREE_SIDE_EFFECTS (t);
2640 if (code == CALL_EXPR && !side_effects)
2645 /* Calls have side-effects, except those to const or
2647 i = call_expr_flags (t);
2648 if (!(i & (ECF_CONST | ECF_PURE)))
2651 /* And even those have side-effects if their arguments do. */
2652 else for (node = arg1; node; node = TREE_CHAIN (node))
2653 if (TREE_SIDE_EFFECTS (TREE_VALUE (node)))
2660 TREE_SIDE_EFFECTS (t) = side_effects;
2661 TREE_THIS_VOLATILE (t)
2662 = (TREE_CODE_CLASS (code) == tcc_reference
2663 && arg0 && TREE_THIS_VOLATILE (arg0));
2669 build4_stat (enum tree_code code, tree tt, tree arg0, tree arg1,
2670 tree arg2, tree arg3 MEM_STAT_DECL)
2672 bool constant, read_only, side_effects, invariant;
2676 gcc_assert (TREE_CODE_LENGTH (code) == 4);
2678 t = make_node_stat (code PASS_MEM_STAT);
2681 fro = first_rtl_op (code);
2683 side_effects = TREE_SIDE_EFFECTS (t);
2690 TREE_SIDE_EFFECTS (t) = side_effects;
2691 TREE_THIS_VOLATILE (t)
2692 = (TREE_CODE_CLASS (code) == tcc_reference
2693 && arg0 && TREE_THIS_VOLATILE (arg0));
2698 /* Backup definition for non-gcc build compilers. */
2701 (build) (enum tree_code code, tree tt, ...)
2703 tree t, arg0, arg1, arg2, arg3;
2704 int length = TREE_CODE_LENGTH (code);
2711 t = build0 (code, tt);
2714 arg0 = va_arg (p, tree);
2715 t = build1 (code, tt, arg0);
2718 arg0 = va_arg (p, tree);
2719 arg1 = va_arg (p, tree);
2720 t = build2 (code, tt, arg0, arg1);
2723 arg0 = va_arg (p, tree);
2724 arg1 = va_arg (p, tree);
2725 arg2 = va_arg (p, tree);
2726 t = build3 (code, tt, arg0, arg1, arg2);
2729 arg0 = va_arg (p, tree);
2730 arg1 = va_arg (p, tree);
2731 arg2 = va_arg (p, tree);
2732 arg3 = va_arg (p, tree);
2733 t = build4 (code, tt, arg0, arg1, arg2, arg3);
2743 /* Similar except don't specify the TREE_TYPE
2744 and leave the TREE_SIDE_EFFECTS as 0.
2745 It is permissible for arguments to be null,
2746 or even garbage if their values do not matter. */
2749 build_nt (enum tree_code code, ...)
2758 t = make_node (code);
2759 length = TREE_CODE_LENGTH (code);
2761 for (i = 0; i < length; i++)
2762 TREE_OPERAND (t, i) = va_arg (p, tree);
2768 /* Create a DECL_... node of code CODE, name NAME and data type TYPE.
2769 We do NOT enter this node in any sort of symbol table.
2771 layout_decl is used to set up the decl's storage layout.
2772 Other slots are initialized to 0 or null pointers. */
2775 build_decl_stat (enum tree_code code, tree name, tree type MEM_STAT_DECL)
2779 t = make_node_stat (code PASS_MEM_STAT);
2781 /* if (type == error_mark_node)
2782 type = integer_type_node; */
2783 /* That is not done, deliberately, so that having error_mark_node
2784 as the type can suppress useless errors in the use of this variable. */
2786 DECL_NAME (t) = name;
2787 TREE_TYPE (t) = type;
2789 if (code == VAR_DECL || code == PARM_DECL || code == RESULT_DECL)
2791 else if (code == FUNCTION_DECL)
2792 DECL_MODE (t) = FUNCTION_MODE;
2794 /* Set default visibility to whatever the user supplied with
2795 visibility_specified depending on #pragma GCC visibility. */
2796 DECL_VISIBILITY (t) = default_visibility;
2797 DECL_VISIBILITY_SPECIFIED (t) = visibility_options.inpragma;
2802 /* BLOCK nodes are used to represent the structure of binding contours
2803 and declarations, once those contours have been exited and their contents
2804 compiled. This information is used for outputting debugging info. */
2807 build_block (tree vars, tree tags ATTRIBUTE_UNUSED, tree subblocks,
2808 tree supercontext, tree chain)
2810 tree block = make_node (BLOCK);
2812 BLOCK_VARS (block) = vars;
2813 BLOCK_SUBBLOCKS (block) = subblocks;
2814 BLOCK_SUPERCONTEXT (block) = supercontext;
2815 BLOCK_CHAIN (block) = chain;
2819 #if 1 /* ! defined(USE_MAPPED_LOCATION) */
2820 /* ??? gengtype doesn't handle conditionals */
2821 static GTY(()) tree last_annotated_node;
2824 #ifdef USE_MAPPED_LOCATION
2827 expand_location (source_location loc)
2829 expanded_location xloc;
2830 if (loc == 0) { xloc.file = NULL; xloc.line = 0; xloc.column = 0; }
2833 const struct line_map *map = linemap_lookup (&line_table, loc);
2834 xloc.file = map->to_file;
2835 xloc.line = SOURCE_LINE (map, loc);
2836 xloc.column = SOURCE_COLUMN (map, loc);
2843 /* Record the exact location where an expression or an identifier were
2847 annotate_with_file_line (tree node, const char *file, int line)
2849 /* Roughly one percent of the calls to this function are to annotate
2850 a node with the same information already attached to that node!
2851 Just return instead of wasting memory. */
2852 if (EXPR_LOCUS (node)
2853 && (EXPR_FILENAME (node) == file
2854 || ! strcmp (EXPR_FILENAME (node), file))
2855 && EXPR_LINENO (node) == line)
2857 last_annotated_node = node;
2861 /* In heavily macroized code (such as GCC itself) this single
2862 entry cache can reduce the number of allocations by more
2864 if (last_annotated_node
2865 && EXPR_LOCUS (last_annotated_node)
2866 && (EXPR_FILENAME (last_annotated_node) == file
2867 || ! strcmp (EXPR_FILENAME (last_annotated_node), file))
2868 && EXPR_LINENO (last_annotated_node) == line)
2870 SET_EXPR_LOCUS (node, EXPR_LOCUS (last_annotated_node));
2874 SET_EXPR_LOCUS (node, ggc_alloc (sizeof (location_t)));
2875 EXPR_LINENO (node) = line;
2876 EXPR_FILENAME (node) = file;
2877 last_annotated_node = node;
2881 annotate_with_locus (tree node, location_t locus)
2883 annotate_with_file_line (node, locus.file, locus.line);
2887 /* Return a declaration like DDECL except that its DECL_ATTRIBUTES
2891 build_decl_attribute_variant (tree ddecl, tree attribute)
2893 DECL_ATTRIBUTES (ddecl) = attribute;
2897 /* Borrowed from hashtab.c iterative_hash implementation. */
2898 #define mix(a,b,c) \
2900 a -= b; a -= c; a ^= (c>>13); \
2901 b -= c; b -= a; b ^= (a<< 8); \
2902 c -= a; c -= b; c ^= ((b&0xffffffff)>>13); \
2903 a -= b; a -= c; a ^= ((c&0xffffffff)>>12); \
2904 b -= c; b -= a; b = (b ^ (a<<16)) & 0xffffffff; \
2905 c -= a; c -= b; c = (c ^ (b>> 5)) & 0xffffffff; \
2906 a -= b; a -= c; a = (a ^ (c>> 3)) & 0xffffffff; \
2907 b -= c; b -= a; b = (b ^ (a<<10)) & 0xffffffff; \
2908 c -= a; c -= b; c = (c ^ (b>>15)) & 0xffffffff; \
2912 /* Produce good hash value combining VAL and VAL2. */
2913 static inline hashval_t
2914 iterative_hash_hashval_t (hashval_t val, hashval_t val2)
2916 /* the golden ratio; an arbitrary value. */
2917 hashval_t a = 0x9e3779b9;
2923 /* Produce good hash value combining PTR and VAL2. */
2924 static inline hashval_t
2925 iterative_hash_pointer (void *ptr, hashval_t val2)
2927 if (sizeof (ptr) == sizeof (hashval_t))
2928 return iterative_hash_hashval_t ((size_t) ptr, val2);
2931 hashval_t a = (hashval_t) (size_t) ptr;
2932 /* Avoid warnings about shifting of more than the width of the type on
2933 hosts that won't execute this path. */
2935 hashval_t b = (hashval_t) ((size_t) ptr >> (sizeof (hashval_t) * 8 + zero));
2941 /* Produce good hash value combining VAL and VAL2. */
2942 static inline hashval_t
2943 iterative_hash_host_wide_int (HOST_WIDE_INT val, hashval_t val2)
2945 if (sizeof (HOST_WIDE_INT) == sizeof (hashval_t))
2946 return iterative_hash_hashval_t (val, val2);
2949 hashval_t a = (hashval_t) val;
2950 /* Avoid warnings about shifting of more than the width of the type on
2951 hosts that won't execute this path. */
2953 hashval_t b = (hashval_t) (val >> (sizeof (hashval_t) * 8 + zero));
2955 if (sizeof (HOST_WIDE_INT) > 2 * sizeof (hashval_t))
2957 hashval_t a = (hashval_t) (val >> (sizeof (hashval_t) * 16 + zero));
2958 hashval_t b = (hashval_t) (val >> (sizeof (hashval_t) * 24 + zero));
2965 /* Return a type like TTYPE except that its TYPE_ATTRIBUTE
2968 Record such modified types already made so we don't make duplicates. */
2971 build_type_attribute_variant (tree ttype, tree attribute)
2973 if (! attribute_list_equal (TYPE_ATTRIBUTES (ttype), attribute))
2975 hashval_t hashcode = 0;
2977 enum tree_code code = TREE_CODE (ttype);
2979 ntype = copy_node (ttype);
2981 TYPE_POINTER_TO (ntype) = 0;
2982 TYPE_REFERENCE_TO (ntype) = 0;
2983 TYPE_ATTRIBUTES (ntype) = attribute;
2985 /* Create a new main variant of TYPE. */
2986 TYPE_MAIN_VARIANT (ntype) = ntype;
2987 TYPE_NEXT_VARIANT (ntype) = 0;
2988 set_type_quals (ntype, TYPE_UNQUALIFIED);
2990 hashcode = iterative_hash_object (code, hashcode);
2991 if (TREE_TYPE (ntype))
2992 hashcode = iterative_hash_object (TYPE_HASH (TREE_TYPE (ntype)),
2994 hashcode = attribute_hash_list (attribute, hashcode);
2996 switch (TREE_CODE (ntype))
2999 hashcode = type_hash_list (TYPE_ARG_TYPES (ntype), hashcode);
3002 hashcode = iterative_hash_object (TYPE_HASH (TYPE_DOMAIN (ntype)),
3006 hashcode = iterative_hash_object
3007 (TREE_INT_CST_LOW (TYPE_MAX_VALUE (ntype)), hashcode);
3008 hashcode = iterative_hash_object
3009 (TREE_INT_CST_HIGH (TYPE_MAX_VALUE (ntype)), hashcode);
3013 unsigned int precision = TYPE_PRECISION (ntype);
3014 hashcode = iterative_hash_object (precision, hashcode);
3021 ntype = type_hash_canon (hashcode, ntype);
3022 ttype = build_qualified_type (ntype, TYPE_QUALS (ttype));
3028 /* Return nonzero if IDENT is a valid name for attribute ATTR,
3031 We try both `text' and `__text__', ATTR may be either one. */
3032 /* ??? It might be a reasonable simplification to require ATTR to be only
3033 `text'. One might then also require attribute lists to be stored in
3034 their canonicalized form. */
3037 is_attribute_p (const char *attr, tree ident)
3039 int ident_len, attr_len;
3042 if (TREE_CODE (ident) != IDENTIFIER_NODE)
3045 if (strcmp (attr, IDENTIFIER_POINTER (ident)) == 0)
3048 p = IDENTIFIER_POINTER (ident);
3049 ident_len = strlen (p);
3050 attr_len = strlen (attr);
3052 /* If ATTR is `__text__', IDENT must be `text'; and vice versa. */
3055 gcc_assert (attr[1] == '_');
3056 gcc_assert (attr[attr_len - 2] == '_');
3057 gcc_assert (attr[attr_len - 1] == '_');
3058 gcc_assert (attr[1] == '_');
3059 if (ident_len == attr_len - 4
3060 && strncmp (attr + 2, p, attr_len - 4) == 0)
3065 if (ident_len == attr_len + 4
3066 && p[0] == '_' && p[1] == '_'
3067 && p[ident_len - 2] == '_' && p[ident_len - 1] == '_'
3068 && strncmp (attr, p + 2, attr_len) == 0)
3075 /* Given an attribute name and a list of attributes, return a pointer to the
3076 attribute's list element if the attribute is part of the list, or NULL_TREE
3077 if not found. If the attribute appears more than once, this only
3078 returns the first occurrence; the TREE_CHAIN of the return value should
3079 be passed back in if further occurrences are wanted. */
3082 lookup_attribute (const char *attr_name, tree list)
3086 for (l = list; l; l = TREE_CHAIN (l))
3088 gcc_assert (TREE_CODE (TREE_PURPOSE (l)) == IDENTIFIER_NODE);
3089 if (is_attribute_p (attr_name, TREE_PURPOSE (l)))
3096 /* Return an attribute list that is the union of a1 and a2. */
3099 merge_attributes (tree a1, tree a2)
3103 /* Either one unset? Take the set one. */
3105 if ((attributes = a1) == 0)
3108 /* One that completely contains the other? Take it. */
3110 else if (a2 != 0 && ! attribute_list_contained (a1, a2))
3112 if (attribute_list_contained (a2, a1))
3116 /* Pick the longest list, and hang on the other list. */
3118 if (list_length (a1) < list_length (a2))
3119 attributes = a2, a2 = a1;
3121 for (; a2 != 0; a2 = TREE_CHAIN (a2))
3124 for (a = lookup_attribute (IDENTIFIER_POINTER (TREE_PURPOSE (a2)),
3127 a = lookup_attribute (IDENTIFIER_POINTER (TREE_PURPOSE (a2)),
3130 if (simple_cst_equal (TREE_VALUE (a), TREE_VALUE (a2)) == 1)
3135 a1 = copy_node (a2);
3136 TREE_CHAIN (a1) = attributes;
3145 /* Given types T1 and T2, merge their attributes and return
3149 merge_type_attributes (tree t1, tree t2)
3151 return merge_attributes (TYPE_ATTRIBUTES (t1),
3152 TYPE_ATTRIBUTES (t2));
3155 /* Given decls OLDDECL and NEWDECL, merge their attributes and return
3159 merge_decl_attributes (tree olddecl, tree newdecl)
3161 return merge_attributes (DECL_ATTRIBUTES (olddecl),
3162 DECL_ATTRIBUTES (newdecl));
3165 #if TARGET_DLLIMPORT_DECL_ATTRIBUTES
3167 /* Specialization of merge_decl_attributes for various Windows targets.
3169 This handles the following situation:
3171 __declspec (dllimport) int foo;
3174 The second instance of `foo' nullifies the dllimport. */
3177 merge_dllimport_decl_attributes (tree old, tree new)
3180 int delete_dllimport_p;
3182 old = DECL_ATTRIBUTES (old);
3183 new = DECL_ATTRIBUTES (new);
3185 /* What we need to do here is remove from `old' dllimport if it doesn't
3186 appear in `new'. dllimport behaves like extern: if a declaration is
3187 marked dllimport and a definition appears later, then the object
3188 is not dllimport'd. */
3189 if (lookup_attribute ("dllimport", old) != NULL_TREE
3190 && lookup_attribute ("dllimport", new) == NULL_TREE)
3191 delete_dllimport_p = 1;
3193 delete_dllimport_p = 0;
3195 a = merge_attributes (old, new);
3197 if (delete_dllimport_p)
3201 /* Scan the list for dllimport and delete it. */
3202 for (prev = NULL_TREE, t = a; t; prev = t, t = TREE_CHAIN (t))
3204 if (is_attribute_p ("dllimport", TREE_PURPOSE (t)))
3206 if (prev == NULL_TREE)
3209 TREE_CHAIN (prev) = TREE_CHAIN (t);
3218 /* Handle a "dllimport" or "dllexport" attribute; arguments as in
3219 struct attribute_spec.handler. */
3222 handle_dll_attribute (tree * pnode, tree name, tree args, int flags,
3227 /* These attributes may apply to structure and union types being created,
3228 but otherwise should pass to the declaration involved. */
3231 if (flags & ((int) ATTR_FLAG_DECL_NEXT | (int) ATTR_FLAG_FUNCTION_NEXT
3232 | (int) ATTR_FLAG_ARRAY_NEXT))
3234 *no_add_attrs = true;
3235 return tree_cons (name, args, NULL_TREE);
3237 if (TREE_CODE (node) != RECORD_TYPE && TREE_CODE (node) != UNION_TYPE)
3239 warning ("%qs attribute ignored", IDENTIFIER_POINTER (name));
3240 *no_add_attrs = true;
3246 /* Report error on dllimport ambiguities seen now before they cause
3248 if (is_attribute_p ("dllimport", name))
3250 /* Like MS, treat definition of dllimported variables and
3251 non-inlined functions on declaration as syntax errors. We
3252 allow the attribute for function definitions if declared
3254 if (TREE_CODE (node) == FUNCTION_DECL && DECL_INITIAL (node)
3255 && !DECL_DECLARED_INLINE_P (node))
3257 error ("%Jfunction %qD definition is marked dllimport.", node, node);
3258 *no_add_attrs = true;
3261 else if (TREE_CODE (node) == VAR_DECL)
3263 if (DECL_INITIAL (node))
3265 error ("%Jvariable %qD definition is marked dllimport.",
3267 *no_add_attrs = true;
3270 /* `extern' needn't be specified with dllimport.
3271 Specify `extern' now and hope for the best. Sigh. */
3272 DECL_EXTERNAL (node) = 1;
3273 /* Also, implicitly give dllimport'd variables declared within
3274 a function global scope, unless declared static. */
3275 if (current_function_decl != NULL_TREE && !TREE_STATIC (node))
3276 TREE_PUBLIC (node) = 1;
3280 /* Report error if symbol is not accessible at global scope. */
3281 if (!TREE_PUBLIC (node)
3282 && (TREE_CODE (node) == VAR_DECL
3283 || TREE_CODE (node) == FUNCTION_DECL))
3285 error ("%Jexternal linkage required for symbol %qD because of "
3286 "%qs attribute.", node, node, IDENTIFIER_POINTER (name));
3287 *no_add_attrs = true;
3293 #endif /* TARGET_DLLIMPORT_DECL_ATTRIBUTES */
3295 /* Set the type qualifiers for TYPE to TYPE_QUALS, which is a bitmask
3296 of the various TYPE_QUAL values. */
3299 set_type_quals (tree type, int type_quals)
3301 TYPE_READONLY (type) = (type_quals & TYPE_QUAL_CONST) != 0;
3302 TYPE_VOLATILE (type) = (type_quals & TYPE_QUAL_VOLATILE) != 0;
3303 TYPE_RESTRICT (type) = (type_quals & TYPE_QUAL_RESTRICT) != 0;
3306 /* Returns true iff cand is equivalent to base with type_quals. */
3309 check_qualified_type (tree cand, tree base, int type_quals)
3311 return (TYPE_QUALS (cand) == type_quals
3312 && TYPE_NAME (cand) == TYPE_NAME (base)
3313 /* Apparently this is needed for Objective-C. */
3314 && TYPE_CONTEXT (cand) == TYPE_CONTEXT (base)
3315 && attribute_list_equal (TYPE_ATTRIBUTES (cand),
3316 TYPE_ATTRIBUTES (base)));
3319 /* Return a version of the TYPE, qualified as indicated by the
3320 TYPE_QUALS, if one exists. If no qualified version exists yet,
3321 return NULL_TREE. */
3324 get_qualified_type (tree type, int type_quals)
3328 if (TYPE_QUALS (type) == type_quals)
3331 /* Search the chain of variants to see if there is already one there just
3332 like the one we need to have. If so, use that existing one. We must
3333 preserve the TYPE_NAME, since there is code that depends on this. */
3334 for (t = TYPE_MAIN_VARIANT (type); t; t = TYPE_NEXT_VARIANT (t))
3335 if (check_qualified_type (t, type, type_quals))
3341 /* Like get_qualified_type, but creates the type if it does not
3342 exist. This function never returns NULL_TREE. */
3345 build_qualified_type (tree type, int type_quals)
3349 /* See if we already have the appropriate qualified variant. */
3350 t = get_qualified_type (type, type_quals);
3352 /* If not, build it. */
3355 t = build_variant_type_copy (type);
3356 set_type_quals (t, type_quals);
3362 /* Create a new distinct copy of TYPE. The new type is made its own
3366 build_distinct_type_copy (tree type)
3368 tree t = copy_node (type);
3370 TYPE_POINTER_TO (t) = 0;
3371 TYPE_REFERENCE_TO (t) = 0;
3373 /* Make it its own variant. */
3374 TYPE_MAIN_VARIANT (t) = t;
3375 TYPE_NEXT_VARIANT (t) = 0;
3380 /* Create a new variant of TYPE, equivalent but distinct.
3381 This is so the caller can modify it. */
3384 build_variant_type_copy (tree type)
3386 tree t, m = TYPE_MAIN_VARIANT (type);
3388 t = build_distinct_type_copy (type);
3390 /* Add the new type to the chain of variants of TYPE. */
3391 TYPE_NEXT_VARIANT (t) = TYPE_NEXT_VARIANT (m);
3392 TYPE_NEXT_VARIANT (m) = t;
3393 TYPE_MAIN_VARIANT (t) = m;
3398 /* Hashing of types so that we don't make duplicates.
3399 The entry point is `type_hash_canon'. */
3401 /* Compute a hash code for a list of types (chain of TREE_LIST nodes
3402 with types in the TREE_VALUE slots), by adding the hash codes
3403 of the individual types. */
3406 type_hash_list (tree list, hashval_t hashcode)
3410 for (tail = list; tail; tail = TREE_CHAIN (tail))
3411 if (TREE_VALUE (tail) != error_mark_node)
3412 hashcode = iterative_hash_object (TYPE_HASH (TREE_VALUE (tail)),
3418 /* These are the Hashtable callback functions. */
3420 /* Returns true iff the types are equivalent. */
3423 type_hash_eq (const void *va, const void *vb)
3425 const struct type_hash *a = va, *b = vb;
3427 /* First test the things that are the same for all types. */
3428 if (a->hash != b->hash
3429 || TREE_CODE (a->type) != TREE_CODE (b->type)
3430 || TREE_TYPE (a->type) != TREE_TYPE (b->type)
3431 || !attribute_list_equal (TYPE_ATTRIBUTES (a->type),
3432 TYPE_ATTRIBUTES (b->type))
3433 || TYPE_ALIGN (a->type) != TYPE_ALIGN (b->type)
3434 || TYPE_MODE (a->type) != TYPE_MODE (b->type))
3437 switch (TREE_CODE (a->type))
3443 case REFERENCE_TYPE:
3447 if (TYPE_VALUES (a->type) != TYPE_VALUES (b->type)
3448 && !(TYPE_VALUES (a->type)
3449 && TREE_CODE (TYPE_VALUES (a->type)) == TREE_LIST
3450 && TYPE_VALUES (b->type)
3451 && TREE_CODE (TYPE_VALUES (b->type)) == TREE_LIST
3452 && type_list_equal (TYPE_VALUES (a->type),
3453 TYPE_VALUES (b->type))))
3456 /* ... fall through ... */
3462 return ((TYPE_MAX_VALUE (a->type) == TYPE_MAX_VALUE (b->type)
3463 || tree_int_cst_equal (TYPE_MAX_VALUE (a->type),
3464 TYPE_MAX_VALUE (b->type)))
3465 && (TYPE_MIN_VALUE (a->type) == TYPE_MIN_VALUE (b->type)
3466 || tree_int_cst_equal (TYPE_MIN_VALUE (a->type),
3467 TYPE_MIN_VALUE (b->type))));
3470 return TYPE_OFFSET_BASETYPE (a->type) == TYPE_OFFSET_BASETYPE (b->type);
3473 return (TYPE_METHOD_BASETYPE (a->type) == TYPE_METHOD_BASETYPE (b->type)
3474 && (TYPE_ARG_TYPES (a->type) == TYPE_ARG_TYPES (b->type)
3475 || (TYPE_ARG_TYPES (a->type)
3476 && TREE_CODE (TYPE_ARG_TYPES (a->type)) == TREE_LIST
3477 && TYPE_ARG_TYPES (b->type)
3478 && TREE_CODE (TYPE_ARG_TYPES (b->type)) == TREE_LIST
3479 && type_list_equal (TYPE_ARG_TYPES (a->type),
3480 TYPE_ARG_TYPES (b->type)))));
3484 return TYPE_DOMAIN (a->type) == TYPE_DOMAIN (b->type);
3488 case QUAL_UNION_TYPE:
3489 return (TYPE_FIELDS (a->type) == TYPE_FIELDS (b->type)
3490 || (TYPE_FIELDS (a->type)
3491 && TREE_CODE (TYPE_FIELDS (a->type)) == TREE_LIST
3492 && TYPE_FIELDS (b->type)
3493 && TREE_CODE (TYPE_FIELDS (b->type)) == TREE_LIST
3494 && type_list_equal (TYPE_FIELDS (a->type),
3495 TYPE_FIELDS (b->type))));
3498 return (TYPE_ARG_TYPES (a->type) == TYPE_ARG_TYPES (b->type)
3499 || (TYPE_ARG_TYPES (a->type)
3500 && TREE_CODE (TYPE_ARG_TYPES (a->type)) == TREE_LIST
3501 && TYPE_ARG_TYPES (b->type)
3502 && TREE_CODE (TYPE_ARG_TYPES (b->type)) == TREE_LIST
3503 && type_list_equal (TYPE_ARG_TYPES (a->type),
3504 TYPE_ARG_TYPES (b->type))));
3511 /* Return the cached hash value. */
3514 type_hash_hash (const void *item)
3516 return ((const struct type_hash *) item)->hash;
3519 /* Look in the type hash table for a type isomorphic to TYPE.
3520 If one is found, return it. Otherwise return 0. */
3523 type_hash_lookup (hashval_t hashcode, tree type)
3525 struct type_hash *h, in;
3527 /* The TYPE_ALIGN field of a type is set by layout_type(), so we
3528 must call that routine before comparing TYPE_ALIGNs. */
3534 h = htab_find_with_hash (type_hash_table, &in, hashcode);
3540 /* Add an entry to the type-hash-table
3541 for a type TYPE whose hash code is HASHCODE. */
3544 type_hash_add (hashval_t hashcode, tree type)
3546 struct type_hash *h;
3549 h = ggc_alloc (sizeof (struct type_hash));
3552 loc = htab_find_slot_with_hash (type_hash_table, h, hashcode, INSERT);
3553 *(struct type_hash **) loc = h;
3556 /* Given TYPE, and HASHCODE its hash code, return the canonical
3557 object for an identical type if one already exists.
3558 Otherwise, return TYPE, and record it as the canonical object.
3560 To use this function, first create a type of the sort you want.
3561 Then compute its hash code from the fields of the type that
3562 make it different from other similar types.
3563 Then call this function and use the value. */
3566 type_hash_canon (unsigned int hashcode, tree type)
3570 /* The hash table only contains main variants, so ensure that's what we're
3572 gcc_assert (TYPE_MAIN_VARIANT (type) == type);
3574 if (!lang_hooks.types.hash_types)
3577 /* See if the type is in the hash table already. If so, return it.
3578 Otherwise, add the type. */
3579 t1 = type_hash_lookup (hashcode, type);
3582 #ifdef GATHER_STATISTICS
3583 tree_node_counts[(int) t_kind]--;
3584 tree_node_sizes[(int) t_kind] -= sizeof (struct tree_type);
3590 type_hash_add (hashcode, type);
3595 /* See if the data pointed to by the type hash table is marked. We consider
3596 it marked if the type is marked or if a debug type number or symbol
3597 table entry has been made for the type. This reduces the amount of
3598 debugging output and eliminates that dependency of the debug output on
3599 the number of garbage collections. */
3602 type_hash_marked_p (const void *p)
3604 tree type = ((struct type_hash *) p)->type;
3606 return ggc_marked_p (type) || TYPE_SYMTAB_POINTER (type);
3610 print_type_hash_statistics (void)
3612 fprintf (stderr, "Type hash: size %ld, %ld elements, %f collisions\n",
3613 (long) htab_size (type_hash_table),
3614 (long) htab_elements (type_hash_table),
3615 htab_collisions (type_hash_table));
3618 /* Compute a hash code for a list of attributes (chain of TREE_LIST nodes
3619 with names in the TREE_PURPOSE slots and args in the TREE_VALUE slots),
3620 by adding the hash codes of the individual attributes. */
3623 attribute_hash_list (tree list, hashval_t hashcode)
3627 for (tail = list; tail; tail = TREE_CHAIN (tail))
3628 /* ??? Do we want to add in TREE_VALUE too? */
3629 hashcode = iterative_hash_object
3630 (IDENTIFIER_HASH_VALUE (TREE_PURPOSE (tail)), hashcode);
3634 /* Given two lists of attributes, return true if list l2 is
3635 equivalent to l1. */
3638 attribute_list_equal (tree l1, tree l2)
3640 return attribute_list_contained (l1, l2)
3641 && attribute_list_contained (l2, l1);
3644 /* Given two lists of attributes, return true if list L2 is
3645 completely contained within L1. */
3646 /* ??? This would be faster if attribute names were stored in a canonicalized
3647 form. Otherwise, if L1 uses `foo' and L2 uses `__foo__', the long method
3648 must be used to show these elements are equivalent (which they are). */
3649 /* ??? It's not clear that attributes with arguments will always be handled
3653 attribute_list_contained (tree l1, tree l2)
3657 /* First check the obvious, maybe the lists are identical. */
3661 /* Maybe the lists are similar. */
3662 for (t1 = l1, t2 = l2;
3664 && TREE_PURPOSE (t1) == TREE_PURPOSE (t2)
3665 && TREE_VALUE (t1) == TREE_VALUE (t2);
3666 t1 = TREE_CHAIN (t1), t2 = TREE_CHAIN (t2));
3668 /* Maybe the lists are equal. */
3669 if (t1 == 0 && t2 == 0)
3672 for (; t2 != 0; t2 = TREE_CHAIN (t2))
3675 for (attr = lookup_attribute (IDENTIFIER_POINTER (TREE_PURPOSE (t2)), l1);
3677 attr = lookup_attribute (IDENTIFIER_POINTER (TREE_PURPOSE (t2)),
3680 if (simple_cst_equal (TREE_VALUE (t2), TREE_VALUE (attr)) == 1)
3687 if (simple_cst_equal (TREE_VALUE (t2), TREE_VALUE (attr)) != 1)
3694 /* Given two lists of types
3695 (chains of TREE_LIST nodes with types in the TREE_VALUE slots)
3696 return 1 if the lists contain the same types in the same order.
3697 Also, the TREE_PURPOSEs must match. */
3700 type_list_equal (tree l1, tree l2)
3704 for (t1 = l1, t2 = l2; t1 && t2; t1 = TREE_CHAIN (t1), t2 = TREE_CHAIN (t2))
3705 if (TREE_VALUE (t1) != TREE_VALUE (t2)
3706 || (TREE_PURPOSE (t1) != TREE_PURPOSE (t2)
3707 && ! (1 == simple_cst_equal (TREE_PURPOSE (t1), TREE_PURPOSE (t2))
3708 && (TREE_TYPE (TREE_PURPOSE (t1))
3709 == TREE_TYPE (TREE_PURPOSE (t2))))))
3715 /* Returns the number of arguments to the FUNCTION_TYPE or METHOD_TYPE
3716 given by TYPE. If the argument list accepts variable arguments,
3717 then this function counts only the ordinary arguments. */
3720 type_num_arguments (tree type)
3725 for (t = TYPE_ARG_TYPES (type); t; t = TREE_CHAIN (t))
3726 /* If the function does not take a variable number of arguments,
3727 the last element in the list will have type `void'. */
3728 if (VOID_TYPE_P (TREE_VALUE (t)))
3736 /* Nonzero if integer constants T1 and T2
3737 represent the same constant value. */
3740 tree_int_cst_equal (tree t1, tree t2)
3745 if (t1 == 0 || t2 == 0)
3748 if (TREE_CODE (t1) == INTEGER_CST
3749 && TREE_CODE (t2) == INTEGER_CST
3750 && TREE_INT_CST_LOW (t1) == TREE_INT_CST_LOW (t2)
3751 && TREE_INT_CST_HIGH (t1) == TREE_INT_CST_HIGH (t2))
3757 /* Nonzero if integer constants T1 and T2 represent values that satisfy <.
3758 The precise way of comparison depends on their data type. */