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 'r': /* a reference */
159 case 'e': /* an expression */
160 case 's': /* an expression with side effects */
161 case '<': /* a comparison expression */
162 case '1': /* a unary arithmetic expression */
163 case '2': /* a binary arithmetic expression */
164 return (sizeof (struct tree_exp)
165 + TREE_CODE_LENGTH (code) * sizeof (char *) - sizeof (char *));
167 case 'c': /* a constant */
170 case INTEGER_CST: return sizeof (struct tree_int_cst);
171 case REAL_CST: return sizeof (struct tree_real_cst);
172 case COMPLEX_CST: return sizeof (struct tree_complex);
173 case VECTOR_CST: return sizeof (struct tree_vector);
174 case STRING_CST: return sizeof (struct tree_string);
176 return lang_hooks.tree_size (code);
179 case 'x': /* something random, like an identifier. */
182 case IDENTIFIER_NODE: return lang_hooks.identifier_size;
183 case TREE_LIST: return sizeof (struct tree_list);
184 case TREE_VEC: return (sizeof (struct tree_vec)
185 + TREE_VEC_LENGTH(node) * sizeof(char *)
189 case PLACEHOLDER_EXPR: return sizeof (struct tree_common);
191 case PHI_NODE: return (sizeof (struct tree_phi_node)
192 + (PHI_ARG_CAPACITY (node) - 1) *
193 sizeof (struct phi_arg_d));
195 case SSA_NAME: return sizeof (struct tree_ssa_name);
197 case STATEMENT_LIST: return sizeof (struct tree_statement_list);
198 case BLOCK: return sizeof (struct tree_block);
199 case VALUE_HANDLE: return sizeof (struct tree_value_handle);
202 return lang_hooks.tree_size (code);
210 /* Return a newly allocated node of code CODE.
211 For decl and type nodes, some other fields are initialized.
212 The rest of the node is initialized to zero.
214 Achoo! I got a code in the node. */
217 make_node_stat (enum tree_code code MEM_STAT_DECL)
220 int type = TREE_CODE_CLASS (code);
222 #ifdef GATHER_STATISTICS
225 struct tree_common ttmp;
227 /* We can't allocate a TREE_VEC, PHI_NODE, or STRING_CST
228 without knowing how many elements it will have. */
229 if (code == TREE_VEC || code == PHI_NODE)
232 TREE_SET_CODE ((tree)&ttmp, code);
233 length = tree_size ((tree)&ttmp);
235 #ifdef GATHER_STATISTICS
238 case 'd': /* A decl node */
242 case 't': /* a type node */
246 case 's': /* an expression with side effects */
250 case 'r': /* a reference */
254 case 'e': /* an expression */
255 case '<': /* a comparison expression */
256 case '1': /* a unary arithmetic expression */
257 case '2': /* a binary arithmetic expression */
261 case 'c': /* a constant */
265 case 'x': /* something random, like an identifier. */
266 if (code == IDENTIFIER_NODE)
268 else if (code == TREE_VEC)
270 else if (code == PHI_NODE)
272 else if (code == SSA_NAME)
273 kind = ssa_name_kind;
274 else if (code == BLOCK)
284 tree_node_counts[(int) kind]++;
285 tree_node_sizes[(int) kind] += length;
288 t = ggc_alloc_zone_stat (length, tree_zone PASS_MEM_STAT);
290 memset (t, 0, length);
292 TREE_SET_CODE (t, code);
297 TREE_SIDE_EFFECTS (t) = 1;
301 if (code != FUNCTION_DECL)
303 DECL_USER_ALIGN (t) = 0;
304 DECL_IN_SYSTEM_HEADER (t) = in_system_header;
305 DECL_SOURCE_LOCATION (t) = input_location;
306 DECL_UID (t) = next_decl_uid++;
308 /* We have not yet computed the alias set for this declaration. */
309 DECL_POINTER_ALIAS_SET (t) = -1;
313 TYPE_UID (t) = next_type_uid++;
314 TYPE_ALIGN (t) = char_type_node ? TYPE_ALIGN (char_type_node) : 0;
315 TYPE_USER_ALIGN (t) = 0;
316 TYPE_MAIN_VARIANT (t) = t;
318 /* Default to no attributes for type, but let target change that. */
319 TYPE_ATTRIBUTES (t) = NULL_TREE;
320 targetm.set_default_type_attributes (t);
322 /* We have not yet computed the alias set for this type. */
323 TYPE_ALIAS_SET (t) = -1;
327 TREE_CONSTANT (t) = 1;
328 TREE_INVARIANT (t) = 1;
337 case PREDECREMENT_EXPR:
338 case PREINCREMENT_EXPR:
339 case POSTDECREMENT_EXPR:
340 case POSTINCREMENT_EXPR:
341 /* All of these have side-effects, no matter what their
343 TREE_SIDE_EFFECTS (t) = 1;
355 /* Return a new node with the same contents as NODE except that its
356 TREE_CHAIN is zero and it has a fresh uid. */
359 copy_node_stat (tree node MEM_STAT_DECL)
362 enum tree_code code = TREE_CODE (node);
365 #ifdef ENABLE_CHECKING
366 if (code == STATEMENT_LIST)
370 length = tree_size (node);
371 t = ggc_alloc_zone_stat (length, tree_zone PASS_MEM_STAT);
372 memcpy (t, node, length);
375 TREE_ASM_WRITTEN (t) = 0;
376 TREE_VISITED (t) = 0;
379 if (TREE_CODE_CLASS (code) == 'd')
380 DECL_UID (t) = next_decl_uid++;
381 else if (TREE_CODE_CLASS (code) == 't')
383 TYPE_UID (t) = next_type_uid++;
384 /* The following is so that the debug code for
385 the copy is different from the original type.
386 The two statements usually duplicate each other
387 (because they clear fields of the same union),
388 but the optimizer should catch that. */
389 TYPE_SYMTAB_POINTER (t) = 0;
390 TYPE_SYMTAB_ADDRESS (t) = 0;
396 /* Return a copy of a chain of nodes, chained through the TREE_CHAIN field.
397 For example, this can copy a list made of TREE_LIST nodes. */
400 copy_list (tree list)
408 head = prev = copy_node (list);
409 next = TREE_CHAIN (list);
412 TREE_CHAIN (prev) = copy_node (next);
413 prev = TREE_CHAIN (prev);
414 next = TREE_CHAIN (next);
420 /* Return a newly constructed INTEGER_CST node whose constant value
421 is specified by the two ints LOW and HI.
422 The TREE_TYPE is set to `int'.
424 This function should be used via the `build_int_2' macro. */
427 build_int_2_wide (unsigned HOST_WIDE_INT low, HOST_WIDE_INT hi)
429 tree t = make_node (INTEGER_CST);
431 TREE_INT_CST_LOW (t) = low;
432 TREE_INT_CST_HIGH (t) = hi;
433 TREE_TYPE (t) = integer_type_node;
437 /* Return a new VECTOR_CST node whose type is TYPE and whose values
438 are in a list pointed by VALS. */
441 build_vector (tree type, tree vals)
443 tree v = make_node (VECTOR_CST);
444 int over1 = 0, over2 = 0;
447 TREE_VECTOR_CST_ELTS (v) = vals;
448 TREE_TYPE (v) = type;
450 /* Iterate through elements and check for overflow. */
451 for (link = vals; link; link = TREE_CHAIN (link))
453 tree value = TREE_VALUE (link);
455 over1 |= TREE_OVERFLOW (value);
456 over2 |= TREE_CONSTANT_OVERFLOW (value);
459 TREE_OVERFLOW (v) = over1;
460 TREE_CONSTANT_OVERFLOW (v) = over2;
465 /* Return a new CONSTRUCTOR node whose type is TYPE and whose values
466 are in a list pointed to by VALS. */
468 build_constructor (tree type, tree vals)
470 tree c = make_node (CONSTRUCTOR);
471 TREE_TYPE (c) = type;
472 CONSTRUCTOR_ELTS (c) = vals;
474 /* ??? May not be necessary. Mirrors what build does. */
477 TREE_SIDE_EFFECTS (c) = TREE_SIDE_EFFECTS (vals);
478 TREE_READONLY (c) = TREE_READONLY (vals);
479 TREE_CONSTANT (c) = TREE_CONSTANT (vals);
480 TREE_INVARIANT (c) = TREE_INVARIANT (vals);
486 /* Return a new REAL_CST node whose type is TYPE and value is D. */
489 build_real (tree type, REAL_VALUE_TYPE d)
495 /* ??? Used to check for overflow here via CHECK_FLOAT_TYPE.
496 Consider doing it via real_convert now. */
498 v = make_node (REAL_CST);
499 dp = ggc_alloc (sizeof (REAL_VALUE_TYPE));
500 memcpy (dp, &d, sizeof (REAL_VALUE_TYPE));
502 TREE_TYPE (v) = type;
503 TREE_REAL_CST_PTR (v) = dp;
504 TREE_OVERFLOW (v) = TREE_CONSTANT_OVERFLOW (v) = overflow;
508 /* Return a new REAL_CST node whose type is TYPE
509 and whose value is the integer value of the INTEGER_CST node I. */
512 real_value_from_int_cst (tree type, tree i)
516 /* Clear all bits of the real value type so that we can later do
517 bitwise comparisons to see if two values are the same. */
518 memset (&d, 0, sizeof d);
520 real_from_integer (&d, type ? TYPE_MODE (type) : VOIDmode,
521 TREE_INT_CST_LOW (i), TREE_INT_CST_HIGH (i),
522 TYPE_UNSIGNED (TREE_TYPE (i)));
526 /* Given a tree representing an integer constant I, return a tree
527 representing the same value as a floating-point constant of type TYPE. */
530 build_real_from_int_cst (tree type, tree i)
533 int overflow = TREE_OVERFLOW (i);
535 v = build_real (type, real_value_from_int_cst (type, i));
537 TREE_OVERFLOW (v) |= overflow;
538 TREE_CONSTANT_OVERFLOW (v) |= overflow;
542 /* Return a newly constructed STRING_CST node whose value is
543 the LEN characters at STR.
544 The TREE_TYPE is not initialized. */
547 build_string (int len, const char *str)
549 tree s = make_node (STRING_CST);
551 TREE_STRING_LENGTH (s) = len;
552 TREE_STRING_POINTER (s) = ggc_alloc_string (str, len);
557 /* Return a newly constructed COMPLEX_CST node whose value is
558 specified by the real and imaginary parts REAL and IMAG.
559 Both REAL and IMAG should be constant nodes. TYPE, if specified,
560 will be the type of the COMPLEX_CST; otherwise a new type will be made. */
563 build_complex (tree type, tree real, tree imag)
565 tree t = make_node (COMPLEX_CST);
567 TREE_REALPART (t) = real;
568 TREE_IMAGPART (t) = imag;
569 TREE_TYPE (t) = type ? type : build_complex_type (TREE_TYPE (real));
570 TREE_OVERFLOW (t) = TREE_OVERFLOW (real) | TREE_OVERFLOW (imag);
571 TREE_CONSTANT_OVERFLOW (t)
572 = TREE_CONSTANT_OVERFLOW (real) | TREE_CONSTANT_OVERFLOW (imag);
576 /* Build a newly constructed TREE_VEC node of length LEN. */
579 make_tree_vec_stat (int len MEM_STAT_DECL)
582 int length = (len - 1) * sizeof (tree) + sizeof (struct tree_vec);
584 #ifdef GATHER_STATISTICS
585 tree_node_counts[(int) vec_kind]++;
586 tree_node_sizes[(int) vec_kind] += length;
589 t = ggc_alloc_zone_stat (length, tree_zone PASS_MEM_STAT);
591 memset (t, 0, length);
593 TREE_SET_CODE (t, TREE_VEC);
594 TREE_VEC_LENGTH (t) = len;
599 /* Return 1 if EXPR is the integer constant zero or a complex constant
603 integer_zerop (tree expr)
607 return ((TREE_CODE (expr) == INTEGER_CST
608 && ! TREE_CONSTANT_OVERFLOW (expr)
609 && TREE_INT_CST_LOW (expr) == 0
610 && TREE_INT_CST_HIGH (expr) == 0)
611 || (TREE_CODE (expr) == COMPLEX_CST
612 && integer_zerop (TREE_REALPART (expr))
613 && integer_zerop (TREE_IMAGPART (expr))));
616 /* Return 1 if EXPR is the integer constant one or the corresponding
620 integer_onep (tree expr)
624 return ((TREE_CODE (expr) == INTEGER_CST
625 && ! TREE_CONSTANT_OVERFLOW (expr)
626 && TREE_INT_CST_LOW (expr) == 1
627 && TREE_INT_CST_HIGH (expr) == 0)
628 || (TREE_CODE (expr) == COMPLEX_CST
629 && integer_onep (TREE_REALPART (expr))
630 && integer_zerop (TREE_IMAGPART (expr))));
633 /* Return 1 if EXPR is an integer containing all 1's in as much precision as
634 it contains. Likewise for the corresponding complex constant. */
637 integer_all_onesp (tree expr)
644 if (TREE_CODE (expr) == COMPLEX_CST
645 && integer_all_onesp (TREE_REALPART (expr))
646 && integer_zerop (TREE_IMAGPART (expr)))
649 else if (TREE_CODE (expr) != INTEGER_CST
650 || TREE_CONSTANT_OVERFLOW (expr))
653 uns = TYPE_UNSIGNED (TREE_TYPE (expr));
655 return (TREE_INT_CST_LOW (expr) == ~(unsigned HOST_WIDE_INT) 0
656 && TREE_INT_CST_HIGH (expr) == -1);
658 /* Note that using TYPE_PRECISION here is wrong. We care about the
659 actual bits, not the (arbitrary) range of the type. */
660 prec = GET_MODE_BITSIZE (TYPE_MODE (TREE_TYPE (expr)));
661 if (prec >= HOST_BITS_PER_WIDE_INT)
663 HOST_WIDE_INT high_value;
666 shift_amount = prec - HOST_BITS_PER_WIDE_INT;
668 if (shift_amount > HOST_BITS_PER_WIDE_INT)
669 /* Can not handle precisions greater than twice the host int size. */
671 else if (shift_amount == HOST_BITS_PER_WIDE_INT)
672 /* Shifting by the host word size is undefined according to the ANSI
673 standard, so we must handle this as a special case. */
676 high_value = ((HOST_WIDE_INT) 1 << shift_amount) - 1;
678 return (TREE_INT_CST_LOW (expr) == ~(unsigned HOST_WIDE_INT) 0
679 && TREE_INT_CST_HIGH (expr) == high_value);
682 return TREE_INT_CST_LOW (expr) == ((unsigned HOST_WIDE_INT) 1 << prec) - 1;
685 /* Return 1 if EXPR is an integer constant that is a power of 2 (i.e., has only
689 integer_pow2p (tree expr)
692 HOST_WIDE_INT high, low;
696 if (TREE_CODE (expr) == COMPLEX_CST
697 && integer_pow2p (TREE_REALPART (expr))
698 && integer_zerop (TREE_IMAGPART (expr)))
701 if (TREE_CODE (expr) != INTEGER_CST || TREE_CONSTANT_OVERFLOW (expr))
704 prec = (POINTER_TYPE_P (TREE_TYPE (expr))
705 ? POINTER_SIZE : TYPE_PRECISION (TREE_TYPE (expr)));
706 high = TREE_INT_CST_HIGH (expr);
707 low = TREE_INT_CST_LOW (expr);
709 /* First clear all bits that are beyond the type's precision in case
710 we've been sign extended. */
712 if (prec == 2 * HOST_BITS_PER_WIDE_INT)
714 else if (prec > HOST_BITS_PER_WIDE_INT)
715 high &= ~((HOST_WIDE_INT) (-1) << (prec - HOST_BITS_PER_WIDE_INT));
719 if (prec < HOST_BITS_PER_WIDE_INT)
720 low &= ~((HOST_WIDE_INT) (-1) << prec);
723 if (high == 0 && low == 0)
726 return ((high == 0 && (low & (low - 1)) == 0)
727 || (low == 0 && (high & (high - 1)) == 0));
730 /* Return 1 if EXPR is an integer constant other than zero or a
731 complex constant other than zero. */
734 integer_nonzerop (tree expr)
738 return ((TREE_CODE (expr) == INTEGER_CST
739 && ! TREE_CONSTANT_OVERFLOW (expr)
740 && (TREE_INT_CST_LOW (expr) != 0
741 || TREE_INT_CST_HIGH (expr) != 0))
742 || (TREE_CODE (expr) == COMPLEX_CST
743 && (integer_nonzerop (TREE_REALPART (expr))
744 || integer_nonzerop (TREE_IMAGPART (expr)))));
747 /* Return the power of two represented by a tree node known to be a
751 tree_log2 (tree expr)
754 HOST_WIDE_INT high, low;
758 if (TREE_CODE (expr) == COMPLEX_CST)
759 return tree_log2 (TREE_REALPART (expr));
761 prec = (POINTER_TYPE_P (TREE_TYPE (expr))
762 ? POINTER_SIZE : TYPE_PRECISION (TREE_TYPE (expr)));
764 high = TREE_INT_CST_HIGH (expr);
765 low = TREE_INT_CST_LOW (expr);
767 /* First clear all bits that are beyond the type's precision in case
768 we've been sign extended. */
770 if (prec == 2 * HOST_BITS_PER_WIDE_INT)
772 else if (prec > HOST_BITS_PER_WIDE_INT)
773 high &= ~((HOST_WIDE_INT) (-1) << (prec - HOST_BITS_PER_WIDE_INT));
777 if (prec < HOST_BITS_PER_WIDE_INT)
778 low &= ~((HOST_WIDE_INT) (-1) << prec);
781 return (high != 0 ? HOST_BITS_PER_WIDE_INT + exact_log2 (high)
785 /* Similar, but return the largest integer Y such that 2 ** Y is less
786 than or equal to EXPR. */
789 tree_floor_log2 (tree expr)
792 HOST_WIDE_INT high, low;
796 if (TREE_CODE (expr) == COMPLEX_CST)
797 return tree_log2 (TREE_REALPART (expr));
799 prec = (POINTER_TYPE_P (TREE_TYPE (expr))
800 ? POINTER_SIZE : TYPE_PRECISION (TREE_TYPE (expr)));
802 high = TREE_INT_CST_HIGH (expr);
803 low = TREE_INT_CST_LOW (expr);
805 /* First clear all bits that are beyond the type's precision in case
806 we've been sign extended. Ignore if type's precision hasn't been set
807 since what we are doing is setting it. */
809 if (prec == 2 * HOST_BITS_PER_WIDE_INT || prec == 0)
811 else if (prec > HOST_BITS_PER_WIDE_INT)
812 high &= ~((HOST_WIDE_INT) (-1) << (prec - HOST_BITS_PER_WIDE_INT));
816 if (prec < HOST_BITS_PER_WIDE_INT)
817 low &= ~((HOST_WIDE_INT) (-1) << prec);
820 return (high != 0 ? HOST_BITS_PER_WIDE_INT + floor_log2 (high)
824 /* Return 1 if EXPR is the real constant zero. */
827 real_zerop (tree expr)
831 return ((TREE_CODE (expr) == REAL_CST
832 && ! TREE_CONSTANT_OVERFLOW (expr)
833 && REAL_VALUES_EQUAL (TREE_REAL_CST (expr), dconst0))
834 || (TREE_CODE (expr) == COMPLEX_CST
835 && real_zerop (TREE_REALPART (expr))
836 && real_zerop (TREE_IMAGPART (expr))));
839 /* Return 1 if EXPR is the real constant one in real or complex form. */
842 real_onep (tree expr)
846 return ((TREE_CODE (expr) == REAL_CST
847 && ! TREE_CONSTANT_OVERFLOW (expr)
848 && REAL_VALUES_EQUAL (TREE_REAL_CST (expr), dconst1))
849 || (TREE_CODE (expr) == COMPLEX_CST
850 && real_onep (TREE_REALPART (expr))
851 && real_zerop (TREE_IMAGPART (expr))));
854 /* Return 1 if EXPR is the real constant two. */
857 real_twop (tree expr)
861 return ((TREE_CODE (expr) == REAL_CST
862 && ! TREE_CONSTANT_OVERFLOW (expr)
863 && REAL_VALUES_EQUAL (TREE_REAL_CST (expr), dconst2))
864 || (TREE_CODE (expr) == COMPLEX_CST
865 && real_twop (TREE_REALPART (expr))
866 && real_zerop (TREE_IMAGPART (expr))));
869 /* Return 1 if EXPR is the real constant minus one. */
872 real_minus_onep (tree expr)
876 return ((TREE_CODE (expr) == REAL_CST
877 && ! TREE_CONSTANT_OVERFLOW (expr)
878 && REAL_VALUES_EQUAL (TREE_REAL_CST (expr), dconstm1))
879 || (TREE_CODE (expr) == COMPLEX_CST
880 && real_minus_onep (TREE_REALPART (expr))
881 && real_zerop (TREE_IMAGPART (expr))));
884 /* Nonzero if EXP is a constant or a cast of a constant. */
887 really_constant_p (tree exp)
889 /* This is not quite the same as STRIP_NOPS. It does more. */
890 while (TREE_CODE (exp) == NOP_EXPR
891 || TREE_CODE (exp) == CONVERT_EXPR
892 || TREE_CODE (exp) == NON_LVALUE_EXPR)
893 exp = TREE_OPERAND (exp, 0);
894 return TREE_CONSTANT (exp);
897 /* Return first list element whose TREE_VALUE is ELEM.
898 Return 0 if ELEM is not in LIST. */
901 value_member (tree elem, tree list)
905 if (elem == TREE_VALUE (list))
907 list = TREE_CHAIN (list);
912 /* Return first list element whose TREE_PURPOSE is ELEM.
913 Return 0 if ELEM is not in LIST. */
916 purpose_member (tree elem, tree list)
920 if (elem == TREE_PURPOSE (list))
922 list = TREE_CHAIN (list);
927 /* Return first list element whose BINFO_TYPE is ELEM.
928 Return 0 if ELEM is not in LIST. */
931 binfo_member (tree elem, tree list)
935 if (elem == BINFO_TYPE (list))
937 list = TREE_CHAIN (list);
942 /* Return nonzero if ELEM is part of the chain CHAIN. */
945 chain_member (tree elem, tree chain)
951 chain = TREE_CHAIN (chain);
957 /* Return the length of a chain of nodes chained through TREE_CHAIN.
958 We expect a null pointer to mark the end of the chain.
959 This is the Lisp primitive `length'. */
965 #ifdef ENABLE_TREE_CHECKING
973 #ifdef ENABLE_TREE_CHECKING
985 /* Returns the number of FIELD_DECLs in TYPE. */
988 fields_length (tree type)
990 tree t = TYPE_FIELDS (type);
993 for (; t; t = TREE_CHAIN (t))
994 if (TREE_CODE (t) == FIELD_DECL)
1000 /* Concatenate two chains of nodes (chained through TREE_CHAIN)
1001 by modifying the last node in chain 1 to point to chain 2.
1002 This is the Lisp primitive `nconc'. */
1005 chainon (tree op1, tree op2)
1014 for (t1 = op1; TREE_CHAIN (t1); t1 = TREE_CHAIN (t1))
1016 TREE_CHAIN (t1) = op2;
1018 #ifdef ENABLE_TREE_CHECKING
1021 for (t2 = op2; t2; t2 = TREE_CHAIN (t2))
1023 abort (); /* Circularity created. */
1030 /* Return the last node in a chain of nodes (chained through TREE_CHAIN). */
1033 tree_last (tree chain)
1037 while ((next = TREE_CHAIN (chain)))
1042 /* Reverse the order of elements in the chain T,
1043 and return the new head of the chain (old last element). */
1048 tree prev = 0, decl, next;
1049 for (decl = t; decl; decl = next)
1051 next = TREE_CHAIN (decl);
1052 TREE_CHAIN (decl) = prev;
1058 /* Return a newly created TREE_LIST node whose
1059 purpose and value fields are PARM and VALUE. */
1062 build_tree_list_stat (tree parm, tree value MEM_STAT_DECL)
1064 tree t = make_node_stat (TREE_LIST PASS_MEM_STAT);
1065 TREE_PURPOSE (t) = parm;
1066 TREE_VALUE (t) = value;
1070 /* Return a newly created TREE_LIST node whose
1071 purpose and value fields are PURPOSE and VALUE
1072 and whose TREE_CHAIN is CHAIN. */
1075 tree_cons_stat (tree purpose, tree value, tree chain MEM_STAT_DECL)
1079 node = ggc_alloc_zone_stat (sizeof (struct tree_list),
1080 tree_zone PASS_MEM_STAT);
1082 memset (node, 0, sizeof (struct tree_common));
1084 #ifdef GATHER_STATISTICS
1085 tree_node_counts[(int) x_kind]++;
1086 tree_node_sizes[(int) x_kind] += sizeof (struct tree_list);
1089 TREE_SET_CODE (node, TREE_LIST);
1090 TREE_CHAIN (node) = chain;
1091 TREE_PURPOSE (node) = purpose;
1092 TREE_VALUE (node) = value;
1097 /* Return the size nominally occupied by an object of type TYPE
1098 when it resides in memory. The value is measured in units of bytes,
1099 and its data type is that normally used for type sizes
1100 (which is the first type created by make_signed_type or
1101 make_unsigned_type). */
1104 size_in_bytes (tree type)
1108 if (type == error_mark_node)
1109 return integer_zero_node;
1111 type = TYPE_MAIN_VARIANT (type);
1112 t = TYPE_SIZE_UNIT (type);
1116 lang_hooks.types.incomplete_type_error (NULL_TREE, type);
1117 return size_zero_node;
1120 if (TREE_CODE (t) == INTEGER_CST)
1121 force_fit_type (t, 0);
1126 /* Return the size of TYPE (in bytes) as a wide integer
1127 or return -1 if the size can vary or is larger than an integer. */
1130 int_size_in_bytes (tree type)
1134 if (type == error_mark_node)
1137 type = TYPE_MAIN_VARIANT (type);
1138 t = TYPE_SIZE_UNIT (type);
1140 || TREE_CODE (t) != INTEGER_CST
1141 || TREE_OVERFLOW (t)
1142 || TREE_INT_CST_HIGH (t) != 0
1143 /* If the result would appear negative, it's too big to represent. */
1144 || (HOST_WIDE_INT) TREE_INT_CST_LOW (t) < 0)
1147 return TREE_INT_CST_LOW (t);
1150 /* Return the bit position of FIELD, in bits from the start of the record.
1151 This is a tree of type bitsizetype. */
1154 bit_position (tree field)
1156 return bit_from_pos (DECL_FIELD_OFFSET (field),
1157 DECL_FIELD_BIT_OFFSET (field));
1160 /* Likewise, but return as an integer. Abort if it cannot be represented
1161 in that way (since it could be a signed value, we don't have the option
1162 of returning -1 like int_size_in_byte can. */
1165 int_bit_position (tree field)
1167 return tree_low_cst (bit_position (field), 0);
1170 /* Return the byte position of FIELD, in bytes from the start of the record.
1171 This is a tree of type sizetype. */
1174 byte_position (tree field)
1176 return byte_from_pos (DECL_FIELD_OFFSET (field),
1177 DECL_FIELD_BIT_OFFSET (field));
1180 /* Likewise, but return as an integer. Abort if it cannot be represented
1181 in that way (since it could be a signed value, we don't have the option
1182 of returning -1 like int_size_in_byte can. */
1185 int_byte_position (tree field)
1187 return tree_low_cst (byte_position (field), 0);
1190 /* Return the strictest alignment, in bits, that T is known to have. */
1195 unsigned int align0, align1;
1197 switch (TREE_CODE (t))
1199 case NOP_EXPR: case CONVERT_EXPR: case NON_LVALUE_EXPR:
1200 /* If we have conversions, we know that the alignment of the
1201 object must meet each of the alignments of the types. */
1202 align0 = expr_align (TREE_OPERAND (t, 0));
1203 align1 = TYPE_ALIGN (TREE_TYPE (t));
1204 return MAX (align0, align1);
1206 case SAVE_EXPR: case COMPOUND_EXPR: case MODIFY_EXPR:
1207 case INIT_EXPR: case TARGET_EXPR: case WITH_CLEANUP_EXPR:
1208 case CLEANUP_POINT_EXPR: case UNSAVE_EXPR:
1209 /* These don't change the alignment of an object. */
1210 return expr_align (TREE_OPERAND (t, 0));
1213 /* The best we can do is say that the alignment is the least aligned
1215 align0 = expr_align (TREE_OPERAND (t, 1));
1216 align1 = expr_align (TREE_OPERAND (t, 2));
1217 return MIN (align0, align1);
1219 case LABEL_DECL: case CONST_DECL:
1220 case VAR_DECL: case PARM_DECL: case RESULT_DECL:
1221 if (DECL_ALIGN (t) != 0)
1222 return DECL_ALIGN (t);
1226 return FUNCTION_BOUNDARY;
1232 /* Otherwise take the alignment from that of the type. */
1233 return TYPE_ALIGN (TREE_TYPE (t));
1236 /* Return, as a tree node, the number of elements for TYPE (which is an
1237 ARRAY_TYPE) minus one. This counts only elements of the top array. */
1240 array_type_nelts (tree type)
1242 tree index_type, min, max;
1244 /* If they did it with unspecified bounds, then we should have already
1245 given an error about it before we got here. */
1246 if (! TYPE_DOMAIN (type))
1247 return error_mark_node;
1249 index_type = TYPE_DOMAIN (type);
1250 min = TYPE_MIN_VALUE (index_type);
1251 max = TYPE_MAX_VALUE (index_type);
1253 return (integer_zerop (min)
1255 : fold (build2 (MINUS_EXPR, TREE_TYPE (max), max, min)));
1258 /* Return nonzero if arg is static -- a reference to an object in
1259 static storage. This is not the same as the C meaning of `static'. */
1264 switch (TREE_CODE (arg))
1267 /* Nested functions aren't static, since taking their address
1268 involves a trampoline. */
1269 return ((decl_function_context (arg) == 0 || DECL_NO_STATIC_CHAIN (arg))
1270 && ! DECL_NON_ADDR_CONST_P (arg));
1273 return ((TREE_STATIC (arg) || DECL_EXTERNAL (arg))
1274 && ! DECL_THREAD_LOCAL (arg)
1275 && ! DECL_NON_ADDR_CONST_P (arg));
1278 return TREE_STATIC (arg);
1285 /* If the thing being referenced is not a field, then it is
1286 something language specific. */
1287 if (TREE_CODE (TREE_OPERAND (arg, 1)) != FIELD_DECL)
1288 return (*lang_hooks.staticp) (arg);
1290 /* If we are referencing a bitfield, we can't evaluate an
1291 ADDR_EXPR at compile time and so it isn't a constant. */
1292 if (DECL_BIT_FIELD (TREE_OPERAND (arg, 1)))
1295 return staticp (TREE_OPERAND (arg, 0));
1301 /* This case is technically correct, but results in setting
1302 TREE_CONSTANT on ADDR_EXPRs that cannot be evaluated at
1305 return TREE_CONSTANT (TREE_OPERAND (arg, 0));
1309 case ARRAY_RANGE_REF:
1310 if (TREE_CODE (TYPE_SIZE (TREE_TYPE (arg))) == INTEGER_CST
1311 && TREE_CODE (TREE_OPERAND (arg, 1)) == INTEGER_CST)
1312 return staticp (TREE_OPERAND (arg, 0));
1317 if ((unsigned int) TREE_CODE (arg)
1318 >= (unsigned int) LAST_AND_UNUSED_TREE_CODE)
1319 return lang_hooks.staticp (arg);
1325 /* Wrap a SAVE_EXPR around EXPR, if appropriate.
1326 Do this to any expression which may be used in more than one place,
1327 but must be evaluated only once.
1329 Normally, expand_expr would reevaluate the expression each time.
1330 Calling save_expr produces something that is evaluated and recorded
1331 the first time expand_expr is called on it. Subsequent calls to
1332 expand_expr just reuse the recorded value.
1334 The call to expand_expr that generates code that actually computes
1335 the value is the first call *at compile time*. Subsequent calls
1336 *at compile time* generate code to use the saved value.
1337 This produces correct result provided that *at run time* control
1338 always flows through the insns made by the first expand_expr
1339 before reaching the other places where the save_expr was evaluated.
1340 You, the caller of save_expr, must make sure this is so.
1342 Constants, and certain read-only nodes, are returned with no
1343 SAVE_EXPR because that is safe. Expressions containing placeholders
1344 are not touched; see tree.def for an explanation of what these
1348 save_expr (tree expr)
1350 tree t = fold (expr);
1353 /* If the tree evaluates to a constant, then we don't want to hide that
1354 fact (i.e. this allows further folding, and direct checks for constants).
1355 However, a read-only object that has side effects cannot be bypassed.
1356 Since it is no problem to reevaluate literals, we just return the
1358 inner = skip_simple_arithmetic (t);
1360 if (TREE_INVARIANT (inner)
1361 || (TREE_READONLY (inner) && ! TREE_SIDE_EFFECTS (inner))
1362 || TREE_CODE (inner) == SAVE_EXPR
1363 || TREE_CODE (inner) == ERROR_MARK)
1366 /* If INNER contains a PLACEHOLDER_EXPR, we must evaluate it each time, since
1367 it means that the size or offset of some field of an object depends on
1368 the value within another field.
1370 Note that it must not be the case that T contains both a PLACEHOLDER_EXPR
1371 and some variable since it would then need to be both evaluated once and
1372 evaluated more than once. Front-ends must assure this case cannot
1373 happen by surrounding any such subexpressions in their own SAVE_EXPR
1374 and forcing evaluation at the proper time. */
1375 if (contains_placeholder_p (inner))
1378 t = build1 (SAVE_EXPR, TREE_TYPE (expr), t);
1380 /* This expression might be placed ahead of a jump to ensure that the
1381 value was computed on both sides of the jump. So make sure it isn't
1382 eliminated as dead. */
1383 TREE_SIDE_EFFECTS (t) = 1;
1384 TREE_READONLY (t) = 1;
1385 TREE_INVARIANT (t) = 1;
1389 /* Look inside EXPR and into any simple arithmetic operations. Return
1390 the innermost non-arithmetic node. */
1393 skip_simple_arithmetic (tree expr)
1397 /* We don't care about whether this can be used as an lvalue in this
1399 while (TREE_CODE (expr) == NON_LVALUE_EXPR)
1400 expr = TREE_OPERAND (expr, 0);
1402 /* If we have simple operations applied to a SAVE_EXPR or to a SAVE_EXPR and
1403 a constant, it will be more efficient to not make another SAVE_EXPR since
1404 it will allow better simplification and GCSE will be able to merge the
1405 computations if they actually occur. */
1409 if (TREE_CODE_CLASS (TREE_CODE (inner)) == '1')
1410 inner = TREE_OPERAND (inner, 0);
1411 else if (TREE_CODE_CLASS (TREE_CODE (inner)) == '2')
1413 if (TREE_INVARIANT (TREE_OPERAND (inner, 1)))
1414 inner = TREE_OPERAND (inner, 0);
1415 else if (TREE_INVARIANT (TREE_OPERAND (inner, 0)))
1416 inner = TREE_OPERAND (inner, 1);
1427 /* Arrange for an expression to be expanded multiple independent
1428 times. This is useful for cleanup actions, as the backend can
1429 expand them multiple times in different places. */
1432 unsave_expr (tree expr)
1436 /* If this is already protected, no sense in protecting it again. */
1437 if (TREE_CODE (expr) == UNSAVE_EXPR)
1440 t = build1 (UNSAVE_EXPR, TREE_TYPE (expr), expr);
1441 TREE_SIDE_EFFECTS (t) = TREE_SIDE_EFFECTS (expr);
1445 /* Returns the index of the first non-tree operand for CODE, or the number
1446 of operands if all are trees. */
1449 first_rtl_op (enum tree_code code)
1453 case GOTO_SUBROUTINE_EXPR:
1455 case WITH_CLEANUP_EXPR:
1458 return TREE_CODE_LENGTH (code);
1462 /* Return which tree structure is used by T. */
1464 enum tree_node_structure_enum
1465 tree_node_structure (tree t)
1467 enum tree_code code = TREE_CODE (t);
1469 switch (TREE_CODE_CLASS (code))
1471 case 'd': return TS_DECL;
1472 case 't': return TS_TYPE;
1473 case 'r': case '<': case '1': case '2': case 'e': case 's':
1475 default: /* 'c' and 'x' */
1481 case INTEGER_CST: return TS_INT_CST;
1482 case REAL_CST: return TS_REAL_CST;
1483 case COMPLEX_CST: return TS_COMPLEX;
1484 case VECTOR_CST: return TS_VECTOR;
1485 case STRING_CST: return TS_STRING;
1487 case ERROR_MARK: return TS_COMMON;
1488 case IDENTIFIER_NODE: return TS_IDENTIFIER;
1489 case TREE_LIST: return TS_LIST;
1490 case TREE_VEC: return TS_VEC;
1491 case PHI_NODE: return TS_PHI_NODE;
1492 case SSA_NAME: return TS_SSA_NAME;
1493 case PLACEHOLDER_EXPR: return TS_COMMON;
1494 case STATEMENT_LIST: return TS_STATEMENT_LIST;
1495 case BLOCK: return TS_BLOCK;
1496 case VALUE_HANDLE: return TS_VALUE_HANDLE;
1503 /* Perform any modifications to EXPR required when it is unsaved. Does
1504 not recurse into EXPR's subtrees. */
1507 unsave_expr_1 (tree expr)
1509 switch (TREE_CODE (expr))
1512 /* Don't mess with a TARGET_EXPR that hasn't been expanded.
1513 It's OK for this to happen if it was part of a subtree that
1514 isn't immediately expanded, such as operand 2 of another
1516 if (TREE_OPERAND (expr, 1))
1519 TREE_OPERAND (expr, 1) = TREE_OPERAND (expr, 3);
1520 TREE_OPERAND (expr, 3) = NULL_TREE;
1528 /* Return 0 if it is safe to evaluate EXPR multiple times,
1529 return 1 if it is safe if EXPR is unsaved afterward, or
1530 return 2 if it is completely unsafe.
1532 This assumes that CALL_EXPRs and TARGET_EXPRs are never replicated in
1533 an expression tree, so that it safe to unsave them and the surrounding
1534 context will be correct.
1536 SAVE_EXPRs basically *only* appear replicated in an expression tree,
1537 occasionally across the whole of a function. It is therefore only
1538 safe to unsave a SAVE_EXPR if you know that all occurrences appear
1539 below the UNSAVE_EXPR. */
1542 unsafe_for_reeval (tree expr)
1545 enum tree_code code;
1550 if (expr == NULL_TREE)
1553 code = TREE_CODE (expr);
1554 first_rtl = first_rtl_op (code);
1561 /* A label can only be emitted once. */
1570 for (exp = expr; exp != 0; exp = TREE_CHAIN (exp))
1572 tmp = unsafe_for_reeval (TREE_VALUE (exp));
1573 unsafeness = MAX (tmp, unsafeness);
1579 tmp2 = unsafe_for_reeval (TREE_OPERAND (expr, 0));
1580 tmp = unsafe_for_reeval (TREE_OPERAND (expr, 1));
1581 return MAX (MAX (tmp, 1), tmp2);
1587 case EXIT_BLOCK_EXPR:
1588 /* EXIT_BLOCK_LABELED_BLOCK, a.k.a. TREE_OPERAND (expr, 0), holds
1589 a reference to an ancestor LABELED_BLOCK, so we need to avoid
1590 unbounded recursion in the 'e' traversal code below. */
1591 exp = EXIT_BLOCK_RETURN (expr);
1592 return exp ? unsafe_for_reeval (exp) : 0;
1595 tmp = lang_hooks.unsafe_for_reeval (expr);
1601 switch (TREE_CODE_CLASS (code))
1603 case 'c': /* a constant */
1604 case 't': /* a type node */
1605 case 'x': /* something random, like an identifier or an ERROR_MARK. */
1606 case 'd': /* A decl node */
1609 case 'e': /* an expression */
1610 case 'r': /* a reference */
1611 case 's': /* an expression with side effects */
1612 case '<': /* a comparison expression */
1613 case '2': /* a binary arithmetic expression */
1614 case '1': /* a unary arithmetic expression */
1615 for (i = first_rtl - 1; i >= 0; i--)
1617 tmp = unsafe_for_reeval (TREE_OPERAND (expr, i));
1618 unsafeness = MAX (tmp, unsafeness);
1628 /* Return 1 if EXP contains a PLACEHOLDER_EXPR; i.e., if it represents a size
1629 or offset that depends on a field within a record. */
1632 contains_placeholder_p (tree exp)
1634 enum tree_code code;
1639 code = TREE_CODE (exp);
1640 if (code == PLACEHOLDER_EXPR)
1643 switch (TREE_CODE_CLASS (code))
1646 /* Don't look at any PLACEHOLDER_EXPRs that might be in index or bit
1647 position computations since they will be converted into a
1648 WITH_RECORD_EXPR involving the reference, which will assume
1649 here will be valid. */
1650 return CONTAINS_PLACEHOLDER_P (TREE_OPERAND (exp, 0));
1653 if (code == TREE_LIST)
1654 return (CONTAINS_PLACEHOLDER_P (TREE_VALUE (exp))
1655 || CONTAINS_PLACEHOLDER_P (TREE_CHAIN (exp)));
1664 /* Ignoring the first operand isn't quite right, but works best. */
1665 return CONTAINS_PLACEHOLDER_P (TREE_OPERAND (exp, 1));
1668 return (CONTAINS_PLACEHOLDER_P (TREE_OPERAND (exp, 0))
1669 || CONTAINS_PLACEHOLDER_P (TREE_OPERAND (exp, 1))
1670 || CONTAINS_PLACEHOLDER_P (TREE_OPERAND (exp, 2)));
1676 switch (first_rtl_op (code))
1679 return CONTAINS_PLACEHOLDER_P (TREE_OPERAND (exp, 0));
1681 return (CONTAINS_PLACEHOLDER_P (TREE_OPERAND (exp, 0))
1682 || CONTAINS_PLACEHOLDER_P (TREE_OPERAND (exp, 1)));
1693 /* Return 1 if any part of the computation of TYPE involves a PLACEHOLDER_EXPR.
1694 This includes size, bounds, qualifiers (for QUAL_UNION_TYPE) and field
1698 type_contains_placeholder_p (tree type)
1700 /* If the size contains a placeholder or the parent type (component type in
1701 the case of arrays) type involves a placeholder, this type does. */
1702 if (CONTAINS_PLACEHOLDER_P (TYPE_SIZE (type))
1703 || CONTAINS_PLACEHOLDER_P (TYPE_SIZE_UNIT (type))
1704 || (TREE_TYPE (type) != 0
1705 && type_contains_placeholder_p (TREE_TYPE (type))))
1708 /* Now do type-specific checks. Note that the last part of the check above
1709 greatly limits what we have to do below. */
1710 switch (TREE_CODE (type))
1719 case REFERENCE_TYPE:
1727 /* Here we just check the bounds. */
1728 return (CONTAINS_PLACEHOLDER_P (TYPE_MIN_VALUE (type))
1729 || CONTAINS_PLACEHOLDER_P (TYPE_MAX_VALUE (type)));
1734 /* We're already checked the component type (TREE_TYPE), so just check
1736 return type_contains_placeholder_p (TYPE_DOMAIN (type));
1740 case QUAL_UNION_TYPE:
1742 static tree seen_types = 0;
1746 /* We have to be careful here that we don't end up in infinite
1747 recursions due to a field of a type being a pointer to that type
1748 or to a mutually-recursive type. So we store a list of record
1749 types that we've seen and see if this type is in them. To save
1750 memory, we don't use a list for just one type. Here we check
1751 whether we've seen this type before and store it if not. */
1752 if (seen_types == 0)
1754 else if (TREE_CODE (seen_types) != TREE_LIST)
1756 if (seen_types == type)
1759 seen_types = tree_cons (NULL_TREE, type,
1760 build_tree_list (NULL_TREE, seen_types));
1764 if (value_member (type, seen_types) != 0)
1767 seen_types = tree_cons (NULL_TREE, type, seen_types);
1770 for (field = TYPE_FIELDS (type); field; field = TREE_CHAIN (field))
1771 if (TREE_CODE (field) == FIELD_DECL
1772 && (CONTAINS_PLACEHOLDER_P (DECL_FIELD_OFFSET (field))
1773 || (TREE_CODE (type) == QUAL_UNION_TYPE
1774 && CONTAINS_PLACEHOLDER_P (DECL_QUALIFIER (field)))
1775 || type_contains_placeholder_p (TREE_TYPE (field))))
1781 /* Now remove us from seen_types and return the result. */
1782 if (seen_types == type)
1785 seen_types = TREE_CHAIN (seen_types);
1795 /* Return 1 if EXP contains any expressions that produce cleanups for an
1796 outer scope to deal with. Used by fold. */
1799 has_cleanups (tree exp)
1803 if (! TREE_SIDE_EFFECTS (exp))
1806 switch (TREE_CODE (exp))
1809 case GOTO_SUBROUTINE_EXPR:
1810 case WITH_CLEANUP_EXPR:
1813 case CLEANUP_POINT_EXPR:
1817 for (exp = TREE_OPERAND (exp, 1); exp; exp = TREE_CHAIN (exp))
1819 cmp = has_cleanups (TREE_VALUE (exp));
1826 return (DECL_INITIAL (DECL_EXPR_DECL (exp))
1827 && has_cleanups (DECL_INITIAL (DECL_EXPR_DECL (exp))));
1833 /* This general rule works for most tree codes. All exceptions should be
1834 handled above. If this is a language-specific tree code, we can't
1835 trust what might be in the operand, so say we don't know
1837 if ((int) TREE_CODE (exp) >= (int) LAST_AND_UNUSED_TREE_CODE)
1840 nops = first_rtl_op (TREE_CODE (exp));
1841 for (i = 0; i < nops; i++)
1842 if (TREE_OPERAND (exp, i) != 0)
1844 int type = TREE_CODE_CLASS (TREE_CODE (TREE_OPERAND (exp, i)));
1845 if (type == 'e' || type == '<' || type == '1' || type == '2'
1846 || type == 'r' || type == 's')
1848 cmp = has_cleanups (TREE_OPERAND (exp, i));
1857 /* Given a tree EXP, a FIELD_DECL F, and a replacement value R,
1858 return a tree with all occurrences of references to F in a
1859 PLACEHOLDER_EXPR replaced by R. Note that we assume here that EXP
1860 contains only arithmetic expressions or a CALL_EXPR with a
1861 PLACEHOLDER_EXPR occurring only in its arglist. */
1864 substitute_in_expr (tree exp, tree f, tree r)
1866 enum tree_code code = TREE_CODE (exp);
1871 /* We handle TREE_LIST and COMPONENT_REF separately. */
1872 if (code == TREE_LIST)
1874 op0 = SUBSTITUTE_IN_EXPR (TREE_CHAIN (exp), f, r);
1875 op1 = SUBSTITUTE_IN_EXPR (TREE_VALUE (exp), f, r);
1876 if (op0 == TREE_CHAIN (exp) && op1 == TREE_VALUE (exp))
1879 return tree_cons (TREE_PURPOSE (exp), op1, op0);
1881 else if (code == COMPONENT_REF)
1883 /* If this expression is getting a value from a PLACEHOLDER_EXPR
1884 and it is the right field, replace it with R. */
1885 for (inner = TREE_OPERAND (exp, 0);
1886 TREE_CODE_CLASS (TREE_CODE (inner)) == 'r';
1887 inner = TREE_OPERAND (inner, 0))
1889 if (TREE_CODE (inner) == PLACEHOLDER_EXPR
1890 && TREE_OPERAND (exp, 1) == f)
1893 /* If this expression hasn't been completed let, leave it
1895 if (TREE_CODE (inner) == PLACEHOLDER_EXPR && TREE_TYPE (inner) == 0)
1898 op0 = SUBSTITUTE_IN_EXPR (TREE_OPERAND (exp, 0), f, r);
1899 if (op0 == TREE_OPERAND (exp, 0))
1902 new = fold (build (code, TREE_TYPE (exp), op0, TREE_OPERAND (exp, 1),
1906 switch (TREE_CODE_CLASS (code))
1918 switch (first_rtl_op (code))
1924 op0 = SUBSTITUTE_IN_EXPR (TREE_OPERAND (exp, 0), f, r);
1925 if (op0 == TREE_OPERAND (exp, 0))
1928 new = fold (build1 (code, TREE_TYPE (exp), op0));
1932 op0 = SUBSTITUTE_IN_EXPR (TREE_OPERAND (exp, 0), f, r);
1933 op1 = SUBSTITUTE_IN_EXPR (TREE_OPERAND (exp, 1), f, r);
1935 if (op0 == TREE_OPERAND (exp, 0) && op1 == TREE_OPERAND (exp, 1))
1938 new = fold (build2 (code, TREE_TYPE (exp), op0, op1));
1942 op0 = SUBSTITUTE_IN_EXPR (TREE_OPERAND (exp, 0), f, r);
1943 op1 = SUBSTITUTE_IN_EXPR (TREE_OPERAND (exp, 1), f, r);
1944 op2 = SUBSTITUTE_IN_EXPR (TREE_OPERAND (exp, 2), f, r);
1946 if (op0 == TREE_OPERAND (exp, 0) && op1 == TREE_OPERAND (exp, 1)
1947 && op2 == TREE_OPERAND (exp, 2))
1950 new = fold (build3 (code, TREE_TYPE (exp), op0, op1, op2));
1962 TREE_READONLY (new) = TREE_READONLY (exp);
1966 /* Similar, but look for a PLACEHOLDER_EXPR in EXP and find a replacement
1967 for it within OBJ, a tree that is an object or a chain of references. */
1970 substitute_placeholder_in_expr (tree exp, tree obj)
1972 enum tree_code code = TREE_CODE (exp);
1973 tree op0, op1, op2, op3;
1975 /* If this is a PLACEHOLDER_EXPR, see if we find a corresponding type
1976 in the chain of OBJ. */
1977 if (code == PLACEHOLDER_EXPR)
1979 tree need_type = TYPE_MAIN_VARIANT (TREE_TYPE (exp));
1982 for (elt = obj; elt != 0;
1983 elt = ((TREE_CODE (elt) == COMPOUND_EXPR
1984 || TREE_CODE (elt) == COND_EXPR)
1985 ? TREE_OPERAND (elt, 1)
1986 : (TREE_CODE_CLASS (TREE_CODE (elt)) == 'r'
1987 || TREE_CODE_CLASS (TREE_CODE (elt)) == '1'
1988 || TREE_CODE_CLASS (TREE_CODE (elt)) == '2'
1989 || TREE_CODE_CLASS (TREE_CODE (elt)) == 'e')
1990 ? TREE_OPERAND (elt, 0) : 0))
1991 if (TYPE_MAIN_VARIANT (TREE_TYPE (elt)) == need_type)
1994 for (elt = obj; elt != 0;
1995 elt = ((TREE_CODE (elt) == COMPOUND_EXPR
1996 || TREE_CODE (elt) == COND_EXPR)
1997 ? TREE_OPERAND (elt, 1)
1998 : (TREE_CODE_CLASS (TREE_CODE (elt)) == 'r'
1999 || TREE_CODE_CLASS (TREE_CODE (elt)) == '1'
2000 || TREE_CODE_CLASS (TREE_CODE (elt)) == '2'
2001 || TREE_CODE_CLASS (TREE_CODE (elt)) == 'e')
2002 ? TREE_OPERAND (elt, 0) : 0))
2003 if (POINTER_TYPE_P (TREE_TYPE (elt))
2004 && (TYPE_MAIN_VARIANT (TREE_TYPE (TREE_TYPE (elt)))
2006 return fold (build1 (INDIRECT_REF, need_type, elt));
2008 /* If we didn't find it, return the original PLACEHOLDER_EXPR. If it
2009 survives until RTL generation, there will be an error. */
2013 /* TREE_LIST is special because we need to look at TREE_VALUE
2014 and TREE_CHAIN, not TREE_OPERANDS. */
2015 else if (code == TREE_LIST)
2017 op0 = SUBSTITUTE_PLACEHOLDER_IN_EXPR (TREE_CHAIN (exp), obj);
2018 op1 = SUBSTITUTE_PLACEHOLDER_IN_EXPR (TREE_VALUE (exp), obj);
2019 if (op0 == TREE_CHAIN (exp) && op1 == TREE_VALUE (exp))
2022 return tree_cons (TREE_PURPOSE (exp), op1, op0);
2025 switch (TREE_CODE_CLASS (code))
2038 switch (first_rtl_op (code))
2044 op0 = SUBSTITUTE_PLACEHOLDER_IN_EXPR (TREE_OPERAND (exp, 0), obj);
2045 if (op0 == TREE_OPERAND (exp, 0))
2048 return fold (build1 (code, TREE_TYPE (exp), op0));
2051 op0 = SUBSTITUTE_PLACEHOLDER_IN_EXPR (TREE_OPERAND (exp, 0), obj);
2052 op1 = SUBSTITUTE_PLACEHOLDER_IN_EXPR (TREE_OPERAND (exp, 1), obj);
2054 if (op0 == TREE_OPERAND (exp, 0) && op1 == TREE_OPERAND (exp, 1))
2057 return fold (build2 (code, TREE_TYPE (exp), op0, op1));
2060 op0 = SUBSTITUTE_PLACEHOLDER_IN_EXPR (TREE_OPERAND (exp, 0), obj);
2061 op1 = SUBSTITUTE_PLACEHOLDER_IN_EXPR (TREE_OPERAND (exp, 1), obj);
2062 op2 = SUBSTITUTE_PLACEHOLDER_IN_EXPR (TREE_OPERAND (exp, 2), obj);
2064 if (op0 == TREE_OPERAND (exp, 0) && op1 == TREE_OPERAND (exp, 1)
2065 && op2 == TREE_OPERAND (exp, 2))
2068 return fold (build3 (code, TREE_TYPE (exp), op0, op1, op2));
2071 op0 = SUBSTITUTE_PLACEHOLDER_IN_EXPR (TREE_OPERAND (exp, 0), obj);
2072 op1 = SUBSTITUTE_PLACEHOLDER_IN_EXPR (TREE_OPERAND (exp, 1), obj);
2073 op2 = SUBSTITUTE_PLACEHOLDER_IN_EXPR (TREE_OPERAND (exp, 2), obj);
2074 op3 = SUBSTITUTE_PLACEHOLDER_IN_EXPR (TREE_OPERAND (exp, 3), obj);
2076 if (op0 == TREE_OPERAND (exp, 0) && op1 == TREE_OPERAND (exp, 1)
2077 && op2 == TREE_OPERAND (exp, 2)
2078 && op3 == TREE_OPERAND (exp, 3))
2081 return fold (build4 (code, TREE_TYPE (exp), op0, op1, op2, op3));
2093 /* Stabilize a reference so that we can use it any number of times
2094 without causing its operands to be evaluated more than once.
2095 Returns the stabilized reference. This works by means of save_expr,
2096 so see the caveats in the comments about save_expr.
2098 Also allows conversion expressions whose operands are references.
2099 Any other kind of expression is returned unchanged. */
2102 stabilize_reference (tree ref)
2105 enum tree_code code = TREE_CODE (ref);
2112 /* No action is needed in this case. */
2118 case FIX_TRUNC_EXPR:
2119 case FIX_FLOOR_EXPR:
2120 case FIX_ROUND_EXPR:
2122 result = build_nt (code, stabilize_reference (TREE_OPERAND (ref, 0)));
2126 result = build_nt (INDIRECT_REF,
2127 stabilize_reference_1 (TREE_OPERAND (ref, 0)));
2131 result = build_nt (COMPONENT_REF,
2132 stabilize_reference (TREE_OPERAND (ref, 0)),
2133 TREE_OPERAND (ref, 1), NULL_TREE);
2137 result = build_nt (BIT_FIELD_REF,
2138 stabilize_reference (TREE_OPERAND (ref, 0)),
2139 stabilize_reference_1 (TREE_OPERAND (ref, 1)),
2140 stabilize_reference_1 (TREE_OPERAND (ref, 2)));
2144 result = build_nt (ARRAY_REF,
2145 stabilize_reference (TREE_OPERAND (ref, 0)),
2146 stabilize_reference_1 (TREE_OPERAND (ref, 1)),
2147 TREE_OPERAND (ref, 2), TREE_OPERAND (ref, 3));
2150 case ARRAY_RANGE_REF:
2151 result = build_nt (ARRAY_RANGE_REF,
2152 stabilize_reference (TREE_OPERAND (ref, 0)),
2153 stabilize_reference_1 (TREE_OPERAND (ref, 1)),
2154 TREE_OPERAND (ref, 2), TREE_OPERAND (ref, 3));
2158 /* We cannot wrap the first expression in a SAVE_EXPR, as then
2159 it wouldn't be ignored. This matters when dealing with
2161 return stabilize_reference_1 (ref);
2163 /* If arg isn't a kind of lvalue we recognize, make no change.
2164 Caller should recognize the error for an invalid lvalue. */
2169 return error_mark_node;
2172 TREE_TYPE (result) = TREE_TYPE (ref);
2173 TREE_READONLY (result) = TREE_READONLY (ref);
2174 TREE_SIDE_EFFECTS (result) = TREE_SIDE_EFFECTS (ref);
2175 TREE_THIS_VOLATILE (result) = TREE_THIS_VOLATILE (ref);
2180 /* Subroutine of stabilize_reference; this is called for subtrees of
2181 references. Any expression with side-effects must be put in a SAVE_EXPR
2182 to ensure that it is only evaluated once.
2184 We don't put SAVE_EXPR nodes around everything, because assigning very
2185 simple expressions to temporaries causes us to miss good opportunities
2186 for optimizations. Among other things, the opportunity to fold in the
2187 addition of a constant into an addressing mode often gets lost, e.g.
2188 "y[i+1] += x;". In general, we take the approach that we should not make
2189 an assignment unless we are forced into it - i.e., that any non-side effect
2190 operator should be allowed, and that cse should take care of coalescing
2191 multiple utterances of the same expression should that prove fruitful. */
2194 stabilize_reference_1 (tree e)
2197 enum tree_code code = TREE_CODE (e);
2199 /* We cannot ignore const expressions because it might be a reference
2200 to a const array but whose index contains side-effects. But we can
2201 ignore things that are actual constant or that already have been
2202 handled by this function. */
2204 if (TREE_INVARIANT (e))
2207 switch (TREE_CODE_CLASS (code))
2216 /* If the expression has side-effects, then encase it in a SAVE_EXPR
2217 so that it will only be evaluated once. */
2218 /* The reference (r) and comparison (<) classes could be handled as
2219 below, but it is generally faster to only evaluate them once. */
2220 if (TREE_SIDE_EFFECTS (e))
2221 return save_expr (e);
2225 /* Constants need no processing. In fact, we should never reach
2230 /* Division is slow and tends to be compiled with jumps,
2231 especially the division by powers of 2 that is often
2232 found inside of an array reference. So do it just once. */
2233 if (code == TRUNC_DIV_EXPR || code == TRUNC_MOD_EXPR
2234 || code == FLOOR_DIV_EXPR || code == FLOOR_MOD_EXPR
2235 || code == CEIL_DIV_EXPR || code == CEIL_MOD_EXPR
2236 || code == ROUND_DIV_EXPR || code == ROUND_MOD_EXPR)
2237 return save_expr (e);
2238 /* Recursively stabilize each operand. */
2239 result = build_nt (code, stabilize_reference_1 (TREE_OPERAND (e, 0)),
2240 stabilize_reference_1 (TREE_OPERAND (e, 1)));
2244 /* Recursively stabilize each operand. */
2245 result = build_nt (code, stabilize_reference_1 (TREE_OPERAND (e, 0)));
2252 TREE_TYPE (result) = TREE_TYPE (e);
2253 TREE_READONLY (result) = TREE_READONLY (e);
2254 TREE_SIDE_EFFECTS (result) = TREE_SIDE_EFFECTS (e);
2255 TREE_THIS_VOLATILE (result) = TREE_THIS_VOLATILE (e);
2256 TREE_INVARIANT (result) = 1;
2261 /* Low-level constructors for expressions. */
2263 /* A helper function for build1 and constant folders. Set TREE_CONSTANT,
2264 TREE_INVARIANT, and TREE_SIDE_EFFECTS for an ADDR_EXPR. */
2267 recompute_tree_invarant_for_addr_expr (tree t)
2270 bool tc = true, ti = true, se = false;
2272 /* We started out assuming this address is both invariant and constant, but
2273 does not have side effects. Now go down any handled components and see if
2274 any of them involve offsets that are either non-constant or non-invariant.
2275 Also check for side-effects.
2277 ??? Note that this code makes no attempt to deal with the case where
2278 taking the address of something causes a copy due to misalignment. */
2280 #define UPDATE_TITCSE(NODE) \
2281 do { tree _node = (NODE); \
2282 if (_node && !TREE_INVARIANT (_node)) ti = false; \
2283 if (_node && !TREE_CONSTANT (_node)) tc = false; \
2284 if (_node && TREE_SIDE_EFFECTS (_node)) se = true; } while (0)
2286 for (node = TREE_OPERAND (t, 0); handled_component_p (node);
2287 node = TREE_OPERAND (node, 0))
2289 /* If the first operand doesn't have an ARRAY_TYPE, this is a bogus
2290 array reference (probably made temporarily by the G++ front end),
2291 so ignore all the operands. */
2292 if ((TREE_CODE (node) == ARRAY_REF
2293 || TREE_CODE (node) == ARRAY_RANGE_REF)
2294 && TREE_CODE (TREE_TYPE (TREE_OPERAND (node, 0))) == ARRAY_TYPE)
2296 UPDATE_TITCSE (TREE_OPERAND (node, 1));
2297 UPDATE_TITCSE (array_ref_low_bound (node));
2298 UPDATE_TITCSE (array_ref_element_size (node));
2300 /* Likewise, just because this is a COMPONENT_REF doesn't mean we have a
2301 FIELD_DECL, apparently. The G++ front end can put something else
2302 there, at least temporarily. */
2303 else if (TREE_CODE (node) == COMPONENT_REF
2304 && TREE_CODE (TREE_OPERAND (node, 1)) == FIELD_DECL)
2305 UPDATE_TITCSE (component_ref_field_offset (node));
2306 else if (TREE_CODE (node) == BIT_FIELD_REF)
2307 UPDATE_TITCSE (TREE_OPERAND (node, 2));
2310 /* Now see what's inside. If it's an INDIRECT_REF, copy our properties from
2311 it. If it's a decl, it's definitely invariant and it's constant if the
2312 decl is static. (Taking the address of a volatile variable is not
2313 volatile.) If it's a constant, the address is both invariant and
2314 constant. Otherwise it's neither. */
2315 if (TREE_CODE (node) == INDIRECT_REF)
2316 UPDATE_TITCSE (node);
2317 else if (DECL_P (node))
2319 if (!staticp (node))
2322 else if (TREE_CODE_CLASS (TREE_CODE (node)) == 'c')
2327 se |= TREE_SIDE_EFFECTS (node);
2330 TREE_CONSTANT (t) = tc;
2331 TREE_INVARIANT (t) = ti;
2332 TREE_SIDE_EFFECTS (t) = se;
2333 #undef UPDATE_TITCSE
2336 /* Build an expression of code CODE, data type TYPE, and operands as
2337 specified. Expressions and reference nodes can be created this way.
2338 Constants, decls, types and misc nodes cannot be.
2340 We define 5 non-variadic functions, from 0 to 4 arguments. This is
2341 enough for all extant tree codes. These functions can be called
2342 directly (preferably!), but can also be obtained via GCC preprocessor
2343 magic within the build macro. */
2346 build0_stat (enum tree_code code, tree tt MEM_STAT_DECL)
2350 #ifdef ENABLE_CHECKING
2351 if (TREE_CODE_LENGTH (code) != 0)
2355 t = make_node_stat (code PASS_MEM_STAT);
2362 build1_stat (enum tree_code code, tree type, tree node MEM_STAT_DECL)
2364 int length = sizeof (struct tree_exp);
2365 #ifdef GATHER_STATISTICS
2366 tree_node_kind kind;
2370 #ifdef GATHER_STATISTICS
2371 switch (TREE_CODE_CLASS (code))
2373 case 's': /* an expression with side effects */
2376 case 'r': /* a reference */
2384 tree_node_counts[(int) kind]++;
2385 tree_node_sizes[(int) kind] += length;
2388 #ifdef ENABLE_CHECKING
2389 if (TREE_CODE_LENGTH (code) != 1)
2391 #endif /* ENABLE_CHECKING */
2393 t = ggc_alloc_zone_stat (length, tree_zone PASS_MEM_STAT);
2395 memset (t, 0, sizeof (struct tree_common));
2397 TREE_SET_CODE (t, code);
2399 TREE_TYPE (t) = type;
2400 #ifdef USE_MAPPED_LOCATION
2401 SET_EXPR_LOCATION (t, UNKNOWN_LOCATION);
2403 SET_EXPR_LOCUS (t, NULL);
2405 TREE_COMPLEXITY (t) = 0;
2406 TREE_OPERAND (t, 0) = node;
2407 TREE_BLOCK (t) = NULL_TREE;
2408 if (node && !TYPE_P (node) && first_rtl_op (code) != 0)
2410 TREE_SIDE_EFFECTS (t) = TREE_SIDE_EFFECTS (node);
2411 TREE_READONLY (t) = TREE_READONLY (node);
2414 if (TREE_CODE_CLASS (code) == 's')
2415 TREE_SIDE_EFFECTS (t) = 1;
2421 case PREDECREMENT_EXPR:
2422 case PREINCREMENT_EXPR:
2423 case POSTDECREMENT_EXPR:
2424 case POSTINCREMENT_EXPR:
2425 /* All of these have side-effects, no matter what their
2427 TREE_SIDE_EFFECTS (t) = 1;
2428 TREE_READONLY (t) = 0;
2432 /* Whether a dereference is readonly has nothing to do with whether
2433 its operand is readonly. */
2434 TREE_READONLY (t) = 0;
2439 recompute_tree_invarant_for_addr_expr (t);
2443 if (TREE_CODE_CLASS (code) == '1' && node && !TYPE_P (node)
2444 && TREE_CONSTANT (node))
2445 TREE_CONSTANT (t) = 1;
2446 if (TREE_CODE_CLASS (code) == '1' && node && TREE_INVARIANT (node))
2447 TREE_INVARIANT (t) = 1;
2448 if (TREE_CODE_CLASS (code) == 'r' && node && TREE_THIS_VOLATILE (node))
2449 TREE_THIS_VOLATILE (t) = 1;
2456 #define PROCESS_ARG(N) \
2458 TREE_OPERAND (t, N) = arg##N; \
2459 if (arg##N &&!TYPE_P (arg##N) && fro > N) \
2461 if (TREE_SIDE_EFFECTS (arg##N)) \
2463 if (!TREE_READONLY (arg##N)) \
2465 if (!TREE_CONSTANT (arg##N)) \
2467 if (!TREE_INVARIANT (arg##N)) \
2473 build2_stat (enum tree_code code, tree tt, tree arg0, tree arg1 MEM_STAT_DECL)
2475 bool constant, read_only, side_effects, invariant;
2479 #ifdef ENABLE_CHECKING
2480 if (TREE_CODE_LENGTH (code) != 2)
2484 t = make_node_stat (code PASS_MEM_STAT);
2487 /* Below, we automatically set TREE_SIDE_EFFECTS and TREE_READONLY for the
2488 result based on those same flags for the arguments. But if the
2489 arguments aren't really even `tree' expressions, we shouldn't be trying
2491 fro = first_rtl_op (code);
2493 /* Expressions without side effects may be constant if their
2494 arguments are as well. */
2495 constant = (TREE_CODE_CLASS (code) == '<'
2496 || TREE_CODE_CLASS (code) == '2');
2498 side_effects = TREE_SIDE_EFFECTS (t);
2499 invariant = constant;
2504 TREE_READONLY (t) = read_only;
2505 TREE_CONSTANT (t) = constant;
2506 TREE_INVARIANT (t) = invariant;
2507 TREE_SIDE_EFFECTS (t) = side_effects;
2508 TREE_THIS_VOLATILE (t)
2509 = TREE_CODE_CLASS (code) == 'r' && arg0 && TREE_THIS_VOLATILE (arg0);
2515 build3_stat (enum tree_code code, tree tt, tree arg0, tree arg1,
2516 tree arg2 MEM_STAT_DECL)
2518 bool constant, read_only, side_effects, invariant;
2522 #ifdef ENABLE_CHECKING
2523 if (TREE_CODE_LENGTH (code) != 3)
2527 t = make_node_stat (code PASS_MEM_STAT);
2530 fro = first_rtl_op (code);
2532 side_effects = TREE_SIDE_EFFECTS (t);
2538 if (code == CALL_EXPR && !side_effects)
2543 /* Calls have side-effects, except those to const or
2545 i = call_expr_flags (t);
2546 if (!(i & (ECF_CONST | ECF_PURE)))
2549 /* And even those have side-effects if their arguments do. */
2550 else for (node = arg1; node; node = TREE_CHAIN (node))
2551 if (TREE_SIDE_EFFECTS (TREE_VALUE (node)))
2558 TREE_SIDE_EFFECTS (t) = side_effects;
2559 TREE_THIS_VOLATILE (t)
2560 = TREE_CODE_CLASS (code) == 'r' && arg0 && TREE_THIS_VOLATILE (arg0);
2566 build4_stat (enum tree_code code, tree tt, tree arg0, tree arg1,
2567 tree arg2, tree arg3 MEM_STAT_DECL)
2569 bool constant, read_only, side_effects, invariant;
2573 #ifdef ENABLE_CHECKING
2574 if (TREE_CODE_LENGTH (code) != 4)
2578 t = make_node_stat (code PASS_MEM_STAT);
2581 fro = first_rtl_op (code);
2583 side_effects = TREE_SIDE_EFFECTS (t);
2590 TREE_SIDE_EFFECTS (t) = side_effects;
2591 TREE_THIS_VOLATILE (t)
2592 = TREE_CODE_CLASS (code) == 'r' && arg0 && TREE_THIS_VOLATILE (arg0);
2597 /* Backup definition for non-gcc build compilers. */
2600 (build) (enum tree_code code, tree tt, ...)
2602 tree t, arg0, arg1, arg2, arg3;
2603 int length = TREE_CODE_LENGTH (code);
2610 t = build0 (code, tt);
2613 arg0 = va_arg (p, tree);
2614 t = build1 (code, tt, arg0);
2617 arg0 = va_arg (p, tree);
2618 arg1 = va_arg (p, tree);
2619 t = build2 (code, tt, arg0, arg1);
2622 arg0 = va_arg (p, tree);
2623 arg1 = va_arg (p, tree);
2624 arg2 = va_arg (p, tree);
2625 t = build3 (code, tt, arg0, arg1, arg2);
2628 arg0 = va_arg (p, tree);
2629 arg1 = va_arg (p, tree);
2630 arg2 = va_arg (p, tree);
2631 arg3 = va_arg (p, tree);
2632 t = build4 (code, tt, arg0, arg1, arg2, arg3);
2642 /* Similar except don't specify the TREE_TYPE
2643 and leave the TREE_SIDE_EFFECTS as 0.
2644 It is permissible for arguments to be null,
2645 or even garbage if their values do not matter. */
2648 build_nt (enum tree_code code, ...)
2657 t = make_node (code);
2658 length = TREE_CODE_LENGTH (code);
2660 for (i = 0; i < length; i++)
2661 TREE_OPERAND (t, i) = va_arg (p, tree);
2667 /* Create a DECL_... node of code CODE, name NAME and data type TYPE.
2668 We do NOT enter this node in any sort of symbol table.
2670 layout_decl is used to set up the decl's storage layout.
2671 Other slots are initialized to 0 or null pointers. */
2674 build_decl_stat (enum tree_code code, tree name, tree type MEM_STAT_DECL)
2678 t = make_node_stat (code PASS_MEM_STAT);
2680 /* if (type == error_mark_node)
2681 type = integer_type_node; */
2682 /* That is not done, deliberately, so that having error_mark_node
2683 as the type can suppress useless errors in the use of this variable. */
2685 DECL_NAME (t) = name;
2686 TREE_TYPE (t) = type;
2688 if (code == VAR_DECL || code == PARM_DECL || code == RESULT_DECL)
2690 else if (code == FUNCTION_DECL)
2691 DECL_MODE (t) = FUNCTION_MODE;
2696 /* BLOCK nodes are used to represent the structure of binding contours
2697 and declarations, once those contours have been exited and their contents
2698 compiled. This information is used for outputting debugging info. */
2701 build_block (tree vars, tree tags ATTRIBUTE_UNUSED, tree subblocks,
2702 tree supercontext, tree chain)
2704 tree block = make_node (BLOCK);
2706 BLOCK_VARS (block) = vars;
2707 BLOCK_SUBBLOCKS (block) = subblocks;
2708 BLOCK_SUPERCONTEXT (block) = supercontext;
2709 BLOCK_CHAIN (block) = chain;
2713 #if 1 /* ! defined(USE_MAPPED_LOCATION) */
2714 /* ??? gengtype doesn't handle conditionals */
2715 static GTY(()) tree last_annotated_node;
2718 #ifdef USE_MAPPED_LOCATION
2721 expand_location (source_location loc)
2723 expanded_location xloc;
2724 if (loc == 0) { xloc.file = NULL; xloc.line = 0; }
2727 const struct line_map *map = linemap_lookup (&line_table, loc);
2728 xloc.file = map->to_file;
2729 xloc.line = SOURCE_LINE (map, loc);
2736 /* Record the exact location where an expression or an identifier were
2740 annotate_with_file_line (tree node, const char *file, int line)
2742 /* Roughly one percent of the calls to this function are to annotate
2743 a node with the same information already attached to that node!
2744 Just return instead of wasting memory. */
2745 if (EXPR_LOCUS (node)
2746 && (EXPR_FILENAME (node) == file
2747 || ! strcmp (EXPR_FILENAME (node), file))
2748 && EXPR_LINENO (node) == line)
2750 last_annotated_node = node;
2754 /* In heavily macroized code (such as GCC itself) this single
2755 entry cache can reduce the number of allocations by more
2757 if (last_annotated_node
2758 && EXPR_LOCUS (last_annotated_node)
2759 && (EXPR_FILENAME (last_annotated_node) == file
2760 || ! strcmp (EXPR_FILENAME (last_annotated_node), file))
2761 && EXPR_LINENO (last_annotated_node) == line)
2763 SET_EXPR_LOCUS (node, EXPR_LOCUS (last_annotated_node));
2767 SET_EXPR_LOCUS (node, ggc_alloc (sizeof (location_t)));
2768 EXPR_LINENO (node) = line;
2769 EXPR_FILENAME (node) = file;
2770 last_annotated_node = node;
2774 annotate_with_locus (tree node, location_t locus)
2776 annotate_with_file_line (node, locus.file, locus.line);
2780 /* Return a declaration like DDECL except that its DECL_ATTRIBUTES
2784 build_decl_attribute_variant (tree ddecl, tree attribute)
2786 DECL_ATTRIBUTES (ddecl) = attribute;
2790 /* Return a type like TTYPE except that its TYPE_ATTRIBUTE
2793 Record such modified types already made so we don't make duplicates. */
2796 build_type_attribute_variant (tree ttype, tree attribute)
2798 if (! attribute_list_equal (TYPE_ATTRIBUTES (ttype), attribute))
2800 hashval_t hashcode = 0;
2802 enum tree_code code = TREE_CODE (ttype);
2804 ntype = copy_node (ttype);
2806 TYPE_POINTER_TO (ntype) = 0;
2807 TYPE_REFERENCE_TO (ntype) = 0;
2808 TYPE_ATTRIBUTES (ntype) = attribute;
2810 /* Create a new main variant of TYPE. */
2811 TYPE_MAIN_VARIANT (ntype) = ntype;
2812 TYPE_NEXT_VARIANT (ntype) = 0;
2813 set_type_quals (ntype, TYPE_UNQUALIFIED);
2815 hashcode = iterative_hash_object (code, hashcode);
2816 if (TREE_TYPE (ntype))
2817 hashcode = iterative_hash_object (TYPE_HASH (TREE_TYPE (ntype)),
2819 hashcode = attribute_hash_list (attribute, hashcode);
2821 switch (TREE_CODE (ntype))
2824 hashcode = type_hash_list (TYPE_ARG_TYPES (ntype), hashcode);
2827 hashcode = iterative_hash_object (TYPE_HASH (TYPE_DOMAIN (ntype)),
2831 hashcode = iterative_hash_object
2832 (TREE_INT_CST_LOW (TYPE_MAX_VALUE (ntype)), hashcode);
2833 hashcode = iterative_hash_object
2834 (TREE_INT_CST_HIGH (TYPE_MAX_VALUE (ntype)), hashcode);
2838 unsigned int precision = TYPE_PRECISION (ntype);
2839 hashcode = iterative_hash_object (precision, hashcode);
2846 ntype = type_hash_canon (hashcode, ntype);
2847 ttype = build_qualified_type (ntype, TYPE_QUALS (ttype));
2853 /* Return nonzero if IDENT is a valid name for attribute ATTR,
2856 We try both `text' and `__text__', ATTR may be either one. */
2857 /* ??? It might be a reasonable simplification to require ATTR to be only
2858 `text'. One might then also require attribute lists to be stored in
2859 their canonicalized form. */
2862 is_attribute_p (const char *attr, tree ident)
2864 int ident_len, attr_len;
2867 if (TREE_CODE (ident) != IDENTIFIER_NODE)
2870 if (strcmp (attr, IDENTIFIER_POINTER (ident)) == 0)
2873 p = IDENTIFIER_POINTER (ident);
2874 ident_len = strlen (p);
2875 attr_len = strlen (attr);
2877 /* If ATTR is `__text__', IDENT must be `text'; and vice versa. */
2881 || attr[attr_len - 2] != '_'
2882 || attr[attr_len - 1] != '_')
2884 if (ident_len == attr_len - 4
2885 && strncmp (attr + 2, p, attr_len - 4) == 0)
2890 if (ident_len == attr_len + 4
2891 && p[0] == '_' && p[1] == '_'
2892 && p[ident_len - 2] == '_' && p[ident_len - 1] == '_'
2893 && strncmp (attr, p + 2, attr_len) == 0)
2900 /* Given an attribute name and a list of attributes, return a pointer to the
2901 attribute's list element if the attribute is part of the list, or NULL_TREE
2902 if not found. If the attribute appears more than once, this only
2903 returns the first occurrence; the TREE_CHAIN of the return value should
2904 be passed back in if further occurrences are wanted. */
2907 lookup_attribute (const char *attr_name, tree list)
2911 for (l = list; l; l = TREE_CHAIN (l))
2913 if (TREE_CODE (TREE_PURPOSE (l)) != IDENTIFIER_NODE)
2915 if (is_attribute_p (attr_name, TREE_PURPOSE (l)))
2922 /* Return an attribute list that is the union of a1 and a2. */
2925 merge_attributes (tree a1, tree a2)
2929 /* Either one unset? Take the set one. */
2931 if ((attributes = a1) == 0)
2934 /* One that completely contains the other? Take it. */
2936 else if (a2 != 0 && ! attribute_list_contained (a1, a2))
2938 if (attribute_list_contained (a2, a1))
2942 /* Pick the longest list, and hang on the other list. */
2944 if (list_length (a1) < list_length (a2))
2945 attributes = a2, a2 = a1;
2947 for (; a2 != 0; a2 = TREE_CHAIN (a2))
2950 for (a = lookup_attribute (IDENTIFIER_POINTER (TREE_PURPOSE (a2)),
2953 a = lookup_attribute (IDENTIFIER_POINTER (TREE_PURPOSE (a2)),
2956 if (simple_cst_equal (TREE_VALUE (a), TREE_VALUE (a2)) == 1)
2961 a1 = copy_node (a2);
2962 TREE_CHAIN (a1) = attributes;
2971 /* Given types T1 and T2, merge their attributes and return
2975 merge_type_attributes (tree t1, tree t2)
2977 return merge_attributes (TYPE_ATTRIBUTES (t1),
2978 TYPE_ATTRIBUTES (t2));
2981 /* Given decls OLDDECL and NEWDECL, merge their attributes and return
2985 merge_decl_attributes (tree olddecl, tree newdecl)
2987 return merge_attributes (DECL_ATTRIBUTES (olddecl),
2988 DECL_ATTRIBUTES (newdecl));
2991 #ifdef TARGET_DLLIMPORT_DECL_ATTRIBUTES
2993 /* Specialization of merge_decl_attributes for various Windows targets.
2995 This handles the following situation:
2997 __declspec (dllimport) int foo;
3000 The second instance of `foo' nullifies the dllimport. */
3003 merge_dllimport_decl_attributes (tree old, tree new)
3006 int delete_dllimport_p;
3008 old = DECL_ATTRIBUTES (old);
3009 new = DECL_ATTRIBUTES (new);
3011 /* What we need to do here is remove from `old' dllimport if it doesn't
3012 appear in `new'. dllimport behaves like extern: if a declaration is
3013 marked dllimport and a definition appears later, then the object
3014 is not dllimport'd. */
3015 if (lookup_attribute ("dllimport", old) != NULL_TREE
3016 && lookup_attribute ("dllimport", new) == NULL_TREE)
3017 delete_dllimport_p = 1;
3019 delete_dllimport_p = 0;
3021 a = merge_attributes (old, new);
3023 if (delete_dllimport_p)
3027 /* Scan the list for dllimport and delete it. */
3028 for (prev = NULL_TREE, t = a; t; prev = t, t = TREE_CHAIN (t))
3030 if (is_attribute_p ("dllimport", TREE_PURPOSE (t)))
3032 if (prev == NULL_TREE)
3035 TREE_CHAIN (prev) = TREE_CHAIN (t);
3044 #endif /* TARGET_DLLIMPORT_DECL_ATTRIBUTES */
3046 /* Set the type qualifiers for TYPE to TYPE_QUALS, which is a bitmask
3047 of the various TYPE_QUAL values. */
3050 set_type_quals (tree type, int type_quals)
3052 TYPE_READONLY (type) = (type_quals & TYPE_QUAL_CONST) != 0;
3053 TYPE_VOLATILE (type) = (type_quals & TYPE_QUAL_VOLATILE) != 0;
3054 TYPE_RESTRICT (type) = (type_quals & TYPE_QUAL_RESTRICT) != 0;
3057 /* Returns true iff cand is equivalent to base with type_quals. */
3060 check_qualified_type (tree cand, tree base, int type_quals)
3062 return (TYPE_QUALS (cand) == type_quals
3063 && TYPE_NAME (cand) == TYPE_NAME (base)
3064 /* Apparently this is needed for Objective-C. */
3065 && TYPE_CONTEXT (cand) == TYPE_CONTEXT (base)
3066 && attribute_list_equal (TYPE_ATTRIBUTES (cand),
3067 TYPE_ATTRIBUTES (base)));
3070 /* Return a version of the TYPE, qualified as indicated by the
3071 TYPE_QUALS, if one exists. If no qualified version exists yet,
3072 return NULL_TREE. */
3075 get_qualified_type (tree type, int type_quals)
3079 if (TYPE_QUALS (type) == type_quals)
3082 /* Search the chain of variants to see if there is already one there just
3083 like the one we need to have. If so, use that existing one. We must
3084 preserve the TYPE_NAME, since there is code that depends on this. */
3085 for (t = TYPE_MAIN_VARIANT (type); t; t = TYPE_NEXT_VARIANT (t))
3086 if (check_qualified_type (t, type, type_quals))
3092 /* Like get_qualified_type, but creates the type if it does not
3093 exist. This function never returns NULL_TREE. */
3096 build_qualified_type (tree type, int type_quals)
3100 /* See if we already have the appropriate qualified variant. */
3101 t = get_qualified_type (type, type_quals);
3103 /* If not, build it. */
3106 t = build_type_copy (type);
3107 set_type_quals (t, type_quals);
3113 /* Create a new variant of TYPE, equivalent but distinct.
3114 This is so the caller can modify it. */
3117 build_type_copy (tree type)
3119 tree t, m = TYPE_MAIN_VARIANT (type);
3121 t = copy_node (type);
3123 TYPE_POINTER_TO (t) = 0;
3124 TYPE_REFERENCE_TO (t) = 0;
3126 /* Add this type to the chain of variants of TYPE. */
3127 TYPE_NEXT_VARIANT (t) = TYPE_NEXT_VARIANT (m);
3128 TYPE_NEXT_VARIANT (m) = t;
3133 /* Hashing of types so that we don't make duplicates.
3134 The entry point is `type_hash_canon'. */
3136 /* Compute a hash code for a list of types (chain of TREE_LIST nodes
3137 with types in the TREE_VALUE slots), by adding the hash codes
3138 of the individual types. */
3141 type_hash_list (tree list, hashval_t hashcode)
3145 for (tail = list; tail; tail = TREE_CHAIN (tail))
3146 if (TREE_VALUE (tail) != error_mark_node)
3147 hashcode = iterative_hash_object (TYPE_HASH (TREE_VALUE (tail)),
3153 /* These are the Hashtable callback functions. */
3155 /* Returns true iff the types are equivalent. */
3158 type_hash_eq (const void *va, const void *vb)
3160 const struct type_hash *a = va, *b = vb;
3162 /* First test the things that are the same for all types. */
3163 if (a->hash != b->hash
3164 || TREE_CODE (a->type) != TREE_CODE (b->type)
3165 || TREE_TYPE (a->type) != TREE_TYPE (b->type)
3166 || !attribute_list_equal (TYPE_ATTRIBUTES (a->type),
3167 TYPE_ATTRIBUTES (b->type))
3168 || TYPE_ALIGN (a->type) != TYPE_ALIGN (b->type)
3169 || TYPE_MODE (a->type) != TYPE_MODE (b->type))
3172 switch (TREE_CODE (a->type))
3178 case REFERENCE_TYPE:
3182 if (TYPE_VALUES (a->type) != TYPE_VALUES (b->type)
3183 && !(TYPE_VALUES (a->type)
3184 && TREE_CODE (TYPE_VALUES (a->type)) == TREE_LIST
3185 && TYPE_VALUES (b->type)
3186 && TREE_CODE (TYPE_VALUES (b->type)) == TREE_LIST
3187 && type_list_equal (TYPE_VALUES (a->type),
3188 TYPE_VALUES (b->type))))
3191 /* ... fall through ... */
3197 return ((TYPE_MAX_VALUE (a->type) == TYPE_MAX_VALUE (b->type)
3198 || tree_int_cst_equal (TYPE_MAX_VALUE (a->type),
3199 TYPE_MAX_VALUE (b->type)))
3200 && (TYPE_MIN_VALUE (a->type) == TYPE_MIN_VALUE (b->type)
3201 || tree_int_cst_equal (TYPE_MIN_VALUE (a->type),
3202 TYPE_MIN_VALUE (b->type))));
3205 return TYPE_OFFSET_BASETYPE (a->type) == TYPE_OFFSET_BASETYPE (b->type);
3208 return (TYPE_METHOD_BASETYPE (a->type) == TYPE_METHOD_BASETYPE (b->type)
3209 && (TYPE_ARG_TYPES (a->type) == TYPE_ARG_TYPES (b->type)
3210 || (TYPE_ARG_TYPES (a->type)
3211 && TREE_CODE (TYPE_ARG_TYPES (a->type)) == TREE_LIST
3212 && TYPE_ARG_TYPES (b->type)
3213 && TREE_CODE (TYPE_ARG_TYPES (b->type)) == TREE_LIST
3214 && type_list_equal (TYPE_ARG_TYPES (a->type),
3215 TYPE_ARG_TYPES (b->type)))));
3219 return TYPE_DOMAIN (a->type) == TYPE_DOMAIN (b->type);
3223 case QUAL_UNION_TYPE:
3224 return (TYPE_FIELDS (a->type) == TYPE_FIELDS (b->type)
3225 || (TYPE_FIELDS (a->type)
3226 && TREE_CODE (TYPE_FIELDS (a->type)) == TREE_LIST
3227 && TYPE_FIELDS (b->type)
3228 && TREE_CODE (TYPE_FIELDS (b->type)) == TREE_LIST
3229 && type_list_equal (TYPE_FIELDS (a->type),
3230 TYPE_FIELDS (b->type))));
3233 return (TYPE_ARG_TYPES (a->type) == TYPE_ARG_TYPES (b->type)
3234 || (TYPE_ARG_TYPES (a->type)
3235 && TREE_CODE (TYPE_ARG_TYPES (a->type)) == TREE_LIST
3236 && TYPE_ARG_TYPES (b->type)
3237 && TREE_CODE (TYPE_ARG_TYPES (b->type)) == TREE_LIST
3238 && type_list_equal (TYPE_ARG_TYPES (a->type),
3239 TYPE_ARG_TYPES (b->type))));
3246 /* Return the cached hash value. */
3249 type_hash_hash (const void *item)
3251 return ((const struct type_hash *) item)->hash;
3254 /* Look in the type hash table for a type isomorphic to TYPE.
3255 If one is found, return it. Otherwise return 0. */
3258 type_hash_lookup (hashval_t hashcode, tree type)
3260 struct type_hash *h, in;
3262 /* The TYPE_ALIGN field of a type is set by layout_type(), so we
3263 must call that routine before comparing TYPE_ALIGNs. */
3269 h = htab_find_with_hash (type_hash_table, &in, hashcode);
3275 /* Add an entry to the type-hash-table
3276 for a type TYPE whose hash code is HASHCODE. */
3279 type_hash_add (hashval_t hashcode, tree type)
3281 struct type_hash *h;
3284 h = ggc_alloc (sizeof (struct type_hash));
3287 loc = htab_find_slot_with_hash (type_hash_table, h, hashcode, INSERT);
3288 *(struct type_hash **) loc = h;
3291 /* Given TYPE, and HASHCODE its hash code, return the canonical
3292 object for an identical type if one already exists.
3293 Otherwise, return TYPE, and record it as the canonical object.
3295 To use this function, first create a type of the sort you want.
3296 Then compute its hash code from the fields of the type that
3297 make it different from other similar types.
3298 Then call this function and use the value. */
3301 type_hash_canon (unsigned int hashcode, tree type)
3305 /* The hash table only contains main variants, so ensure that's what we're
3307 if (TYPE_MAIN_VARIANT (type) != type)
3310 if (!lang_hooks.types.hash_types)
3313 /* See if the type is in the hash table already. If so, return it.
3314 Otherwise, add the type. */
3315 t1 = type_hash_lookup (hashcode, type);
3318 #ifdef GATHER_STATISTICS
3319 tree_node_counts[(int) t_kind]--;
3320 tree_node_sizes[(int) t_kind] -= sizeof (struct tree_type);
3326 type_hash_add (hashcode, type);
3331 /* See if the data pointed to by the type hash table is marked. We consider
3332 it marked if the type is marked or if a debug type number or symbol
3333 table entry has been made for the type. This reduces the amount of
3334 debugging output and eliminates that dependency of the debug output on
3335 the number of garbage collections. */
3338 type_hash_marked_p (const void *p)
3340 tree type = ((struct type_hash *) p)->type;
3342 return ggc_marked_p (type) || TYPE_SYMTAB_POINTER (type);
3346 print_type_hash_statistics (void)
3348 fprintf (stderr, "Type hash: size %ld, %ld elements, %f collisions\n",
3349 (long) htab_size (type_hash_table),
3350 (long) htab_elements (type_hash_table),
3351 htab_collisions (type_hash_table));
3354 /* Compute a hash code for a list of attributes (chain of TREE_LIST nodes
3355 with names in the TREE_PURPOSE slots and args in the TREE_VALUE slots),
3356 by adding the hash codes of the individual attributes. */
3359 attribute_hash_list (tree list, hashval_t hashcode)
3363 for (tail = list; tail; tail = TREE_CHAIN (tail))
3364 /* ??? Do we want to add in TREE_VALUE too? */
3365 hashcode = iterative_hash_object
3366 (IDENTIFIER_HASH_VALUE (TREE_PURPOSE (tail)), hashcode);
3370 /* Given two lists of attributes, return true if list l2 is
3371 equivalent to l1. */
3374 attribute_list_equal (tree l1, tree l2)
3376 return attribute_list_contained (l1, l2)
3377 && attribute_list_contained (l2, l1);
3380 /* Given two lists of attributes, return true if list L2 is
3381 completely contained within L1. */
3382 /* ??? This would be faster if attribute names were stored in a canonicalized
3383 form. Otherwise, if L1 uses `foo' and L2 uses `__foo__', the long method
3384 must be used to show these elements are equivalent (which they are). */
3385 /* ??? It's not clear that attributes with arguments will always be handled
3389 attribute_list_contained (tree l1, tree l2)
3393 /* First check the obvious, maybe the lists are identical. */
3397 /* Maybe the lists are similar. */
3398 for (t1 = l1, t2 = l2;
3400 && TREE_PURPOSE (t1) == TREE_PURPOSE (t2)
3401 && TREE_VALUE (t1) == TREE_VALUE (t2);
3402 t1 = TREE_CHAIN (t1), t2 = TREE_CHAIN (t2));
3404 /* Maybe the lists are equal. */
3405 if (t1 == 0 && t2 == 0)
3408 for (; t2 != 0; t2 = TREE_CHAIN (t2))
3411 for (attr = lookup_attribute (IDENTIFIER_POINTER (TREE_PURPOSE (t2)), l1);
3413 attr = lookup_attribute (IDENTIFIER_POINTER (TREE_PURPOSE (t2)),
3416 if (simple_cst_equal (TREE_VALUE (t2), TREE_VALUE (attr)) == 1)
3423 if (simple_cst_equal (TREE_VALUE (t2), TREE_VALUE (attr)) != 1)
3430 /* Given two lists of types
3431 (chains of TREE_LIST nodes with types in the TREE_VALUE slots)
3432 return 1 if the lists contain the same types in the same order.
3433 Also, the TREE_PURPOSEs must match. */
3436 type_list_equal (tree l1, tree l2)
3440 for (t1 = l1, t2 = l2; t1 && t2; t1 = TREE_CHAIN (t1), t2 = TREE_CHAIN (t2))
3441 if (TREE_VALUE (t1) != TREE_VALUE (t2)
3442 || (TREE_PURPOSE (t1) != TREE_PURPOSE (t2)
3443 && ! (1 == simple_cst_equal (TREE_PURPOSE (t1), TREE_PURPOSE (t2))
3444 && (TREE_TYPE (TREE_PURPOSE (t1))
3445 == TREE_TYPE (TREE_PURPOSE (t2))))))
3451 /* Returns the number of arguments to the FUNCTION_TYPE or METHOD_TYPE
3452 given by TYPE. If the argument list accepts variable arguments,
3453 then this function counts only the ordinary arguments. */
3456 type_num_arguments (tree type)
3461 for (t = TYPE_ARG_TYPES (type); t; t = TREE_CHAIN (t))
3462 /* If the function does not take a variable number of arguments,
3463 the last element in the list will have type `void'. */
3464 if (VOID_TYPE_P (TREE_VALUE (t)))
3472 /* Nonzero if integer constants T1 and T2
3473 represent the same constant value. */
3476 tree_int_cst_equal (tree t1, tree t2)
3481 if (t1 == 0 || t2 == 0)
3484 if (TREE_CODE (t1) == INTEGER_CST
3485 && TREE_CODE (t2) == INTEGER_CST
3486 && TREE_INT_CST_LOW (t1) == TREE_INT_CST_LOW (t2)
3487 && TREE_INT_CST_HIGH (t1) == TREE_INT_CST_HIGH (t2))
3493 /* Nonzero if integer constants T1 and T2 represent values that satisfy <.
3494 The precise way of comparison depends on their data type. */
3497 tree_int_cst_lt (tree t1, tree t2)
3502 if (TYPE_UNSIGNED (TREE_TYPE (t1)) != TYPE_UNSIGNED (TREE_TYPE (t2)))
3504 int t1_sgn = tree_int_cst_sgn (t1);
3505 int t2_sgn = tree_int_cst_sgn (t2);
3507 if (t1_sgn < t2_sgn)
3509 else if (t1_sgn > t2_sgn)
3511 /* Otherwise, both are non-negative, so we compare them as
3512 unsigned just in case one of them would overflow a signed
3515 else if (!TYPE_UNSIGNED (TREE_TYPE (t1)))
3516 return INT_CST_LT (t1, t2);
3518 return INT_CST_LT_UNSIGNED (t1, t2);
3521 /* Returns -1 if T1 < T2, 0 if T1 == T2, and 1 if T1 > T2. */
3524 tree_int_cst_compare (tree t1, tree t2)
3526 if (tree_int_cst_lt (t1, t2))
3528 else if (tree_int_cst_lt (t2, t1))
3534 /* Return 1 if T is an INTEGER_CST that can be manipulated efficiently on
3535 the host. If POS is zero, the value can be represented in a single
3536 HOST_WIDE_INT. If POS is nonzero, the value must be positive and can
3537 be represented in a single unsigned HOST_WIDE_INT. */
3540 host_integerp (tree t, int pos)
3542 return (TREE_CODE (t) == INTEGER_CST
3543 && ! TREE_OVERFLOW (t)
3544 && ((TREE_INT_CST_HIGH (t) == 0
3545 && (HOST_WIDE_INT) TREE_INT_CST_LOW (t) >= 0)
3546 || (! pos && TREE_INT_CST_HIGH (t) == -1
3547 && (HOST_WIDE_INT) TREE_INT_CST_LOW (t) < 0
3548 && !TYPE_UNSIGNED (TREE_TYPE (t)))
3549 || (pos && TREE_INT_CST_HIGH (t) == 0)));
3552 /* Return the HOST_WIDE_INT least significant bits of T if it is an
3553 INTEGER_CST and there is no overflow. POS is nonzero if the result must
3554 be positive. Abort if we cannot satisfy the above conditions. */
3557 tree_low_cst (tree t, int pos)
3559 if (host_integerp (t, pos))
3560 return TREE_INT_CST_LOW (t);
3565 /* Return the most significant bit of the integer constant T. */
3568 tree_int_cst_msb (tree t)
3572 unsigned HOST_WIDE_INT l;
3574 /* Note that using TYPE_PRECISION here is wrong. We care about the
3575 actual bits, not the (arbitrary) range of the type. */
3576 prec = GET_MODE_BITSIZE (TYPE_MODE (TREE_TYPE (t))) - 1;
3577 rshift_double (TREE_INT_CST_LOW (t), TREE_INT_CST_HIGH (t), prec,
3578 2 * HOST_BITS_PER_WIDE_INT, &l, &h, 0);
3579 return (l & 1) == 1;
3582 /* Return an indication of the sign of the integer constant T.
3583 The return value is -1 if T < 0, 0 if T == 0, and 1 if T > 0.
3584 Note that -1 will never be returned it T's type is unsigned. */
3587 tree_int_cst_sgn (tree t)
3589 if (TREE_INT_CST_LOW (t) == 0 && TREE_INT_CST_HIGH (t) == 0)
3591 else if (TYPE_UNSIGNED (TREE_TYPE (t)))
3593 else if (TREE_INT_CST_HIGH (t) < 0)
3599 /* Compare two constructor-element-type constants. Return 1 if the lists
3600 are known to be equal; otherwise return 0. */
3603 simple_cst_list_equal (tree l1, tree l2)
3605 while (l1 != NULL_TREE && l2 != NULL_TREE)
3607 if (simple_cst_equal (TREE_VALUE (l1), TREE_VALUE (l2)) != 1)
3610 l1 = TREE_CHAIN (l1);
3611 l2 = TREE_CHAIN (l2);
3617 /* Return truthvalue of whether T1 is the same tree structure as T2.
3618 Return 1 if they are the same.
3619 Return 0 if they are understandably different.
3620 Return -1 if either contains tree structure not understood by
3624 simple_cst_equal (tree t1, tree t2)
3626 enum tree_code code1, code2;
3632 if (t1 == 0 || t2 == 0)
3635 code1 = TREE_CODE (t1);
3636 code2 = TREE_CODE (t2);
3638 if (code1 == NOP_EXPR || code1 == CONVERT_EXPR || code1 == NON_LVALUE_EXPR)
3640 if (code2 == NOP_EXPR || code2 == CONVERT_EXPR
3641 || code2 == NON_LVALUE_EXPR)
3642 return simple_cst_equal (TREE_OPERAND (t1, 0), TREE_OPERAND (t2, 0));
3644 return simple_cst_equal (TREE_OPERAND (t1, 0), t2);
3647 else if (code2 == NOP_EXPR || code2 == CONVERT_EXPR
3648 || code2 == NON_LVALUE_EXPR)
3649 return simple_cst_equal (t1, TREE_OPERAND (t2, 0));
3657 return (TREE_INT_CST_LOW (t1) == TREE_INT_CST_LOW (t2)
3658 && TREE_INT_CST_HIGH (t1) == TREE_INT_CST_HIGH (t2));
3661 return REAL_VALUES_IDENTICAL (TREE_REAL_CST (t1), TREE_REAL_CST (t2));
3664 return (TREE_STRING_LENGTH (t1) == TREE_STRING_LENGTH (t2)
3665 && ! memcmp (TREE_STRING_POINTER (t1), TREE_STRING_POINTER (t2),
3666 TREE_STRING_LENGTH (t1)));
3669 return simple_cst_list_equal (CONSTRUCTOR_ELTS (t1),
3670 CONSTRUCTOR_ELTS (t2));
3673 return simple_cst_equal (TREE_OPERAND (t1, 0), TREE_OPERAND (t2, 0));
3676 cmp = simple_cst_equal (TREE_OPERAND (t1, 0), TREE_OPERAND (t2, 0));
3680 simple_cst_list_equal (TREE_OPERAND (t1, 1), TREE_OPERAND (t2, 1));
3683 /* Special case: if either target is an unallocated VAR_DECL,
3684 it means that it's going to be unified with whatever the
3685 TARGET_EXPR is really supposed to initialize, so treat it
3686 as being equivalent to anything. */
3687 if ((TREE_CODE (TREE_OPERAND (t1, 0)) == VAR_DECL
3688 && DECL_NAME (TREE_OPERAND (t1, 0)) == NULL_TREE
3689 && !DECL_RTL_SET_P (TREE_OPERAND (t1, 0)))
3690 || (TREE_CODE (TREE_OPERAND (t2, 0)) == VAR_DECL
3691 && DECL_NAME (TREE_OPERAND (t2, 0)) == NULL_TREE
3692 && !DECL_RTL_SET_P (TREE_OPERAND (t2, 0))))
3695 cmp = simple_cst_equal (TREE_OPERAND (t1, 0), TREE_OPERAND (t2, 0));
3700 return simple_cst_equal (TREE_OPERAND (t1, 1), TREE_OPERAND (t2, 1));
3702 case WITH_CLEANUP_EXPR:
3703 cmp = simple_cst_equal (TREE_OPERAND (t1, 0), TREE_OPERAND (t2, 0));
3707 return simple_cst_equal (TREE_OPERAND (t1, 1), TREE_OPERAND (t1, 1));
3710 if (TREE_OPERAND (t1, 1) == TREE_OPERAND (t2, 1))
3711 return simple_cst_equal (TREE_OPERAND (t1, 0), TREE_OPERAND (t2, 0));
3725 /* This general rule works for most tree codes. All exceptions should be
3726 handled above. If this is a language-specific tree code, we can't
3727 trust what might be in the operand, so say we don't know
3729 if ((int) code1 >= (int) LAST_AND_UNUSED_TREE_CODE)
3732 switch (TREE_CODE_CLASS (code1))
3741 for (i = 0; i < TREE_CODE_LENGTH (code1); i++)
3743 cmp = simple_cst_equal (TREE_OPERAND (t1, i), TREE_OPERAND (t2, i));