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, 2005, 2006, 2007, 2008, 2009, 2010
4 Free Software Foundation, Inc.
6 This file is part of GCC.
8 GCC is free software; you can redistribute it and/or modify it under
9 the terms of the GNU General Public License as published by the Free
10 Software Foundation; either version 3, or (at your option) any later
13 GCC is distributed in the hope that it will be useful, but WITHOUT ANY
14 WARRANTY; without even the implied warranty of MERCHANTABILITY or
15 FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
18 You should have received a copy of the GNU General Public License
19 along with GCC; see the file COPYING3. If not see
20 <http://www.gnu.org/licenses/>. */
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-inline.h"
49 #include "tree-iterator.h"
50 #include "basic-block.h"
51 #include "tree-flow.h"
53 #include "pointer-set.h"
54 #include "fixed-value.h"
55 #include "tree-pass.h"
56 #include "langhooks-def.h"
57 #include "diagnostic.h"
64 /* Tree code classes. */
66 #define DEFTREECODE(SYM, NAME, TYPE, LENGTH) TYPE,
67 #define END_OF_BASE_TREE_CODES tcc_exceptional,
69 const enum tree_code_class tree_code_type[] = {
70 #include "all-tree.def"
74 #undef END_OF_BASE_TREE_CODES
76 /* Table indexed by tree code giving number of expression
77 operands beyond the fixed part of the node structure.
78 Not used for types or decls. */
80 #define DEFTREECODE(SYM, NAME, TYPE, LENGTH) LENGTH,
81 #define END_OF_BASE_TREE_CODES 0,
83 const unsigned char tree_code_length[] = {
84 #include "all-tree.def"
88 #undef END_OF_BASE_TREE_CODES
90 /* Names of tree components.
91 Used for printing out the tree and error messages. */
92 #define DEFTREECODE(SYM, NAME, TYPE, LEN) NAME,
93 #define END_OF_BASE_TREE_CODES "@dummy",
95 const char *const tree_code_name[] = {
96 #include "all-tree.def"
100 #undef END_OF_BASE_TREE_CODES
102 /* Each tree code class has an associated string representation.
103 These must correspond to the tree_code_class entries. */
105 const char *const tree_code_class_strings[] =
120 /* obstack.[ch] explicitly declined to prototype this. */
121 extern int _obstack_allocated_p (struct obstack *h, void *obj);
123 #ifdef GATHER_STATISTICS
124 /* Statistics-gathering stuff. */
126 int tree_node_counts[(int) all_kinds];
127 int tree_node_sizes[(int) all_kinds];
129 /* Keep in sync with tree.h:enum tree_node_kind. */
130 static const char * const tree_node_kind_names[] = {
150 #endif /* GATHER_STATISTICS */
152 /* Unique id for next decl created. */
153 static GTY(()) int next_decl_uid;
154 /* Unique id for next type created. */
155 static GTY(()) int next_type_uid = 1;
156 /* Unique id for next debug decl created. Use negative numbers,
157 to catch erroneous uses. */
158 static GTY(()) int next_debug_decl_uid;
160 /* Since we cannot rehash a type after it is in the table, we have to
161 keep the hash code. */
163 struct GTY(()) type_hash {
168 /* Initial size of the hash table (rounded to next prime). */
169 #define TYPE_HASH_INITIAL_SIZE 1000
171 /* Now here is the hash table. When recording a type, it is added to
172 the slot whose index is the hash code. Note that the hash table is
173 used for several kinds of types (function types, array types and
174 array index range types, for now). While all these live in the
175 same table, they are completely independent, and the hash code is
176 computed differently for each of these. */
178 static GTY ((if_marked ("type_hash_marked_p"), param_is (struct type_hash)))
179 htab_t type_hash_table;
181 /* Hash table and temporary node for larger integer const values. */
182 static GTY (()) tree int_cst_node;
183 static GTY ((if_marked ("ggc_marked_p"), param_is (union tree_node)))
184 htab_t int_cst_hash_table;
186 /* Hash table for optimization flags and target option flags. Use the same
187 hash table for both sets of options. Nodes for building the current
188 optimization and target option nodes. The assumption is most of the time
189 the options created will already be in the hash table, so we avoid
190 allocating and freeing up a node repeatably. */
191 static GTY (()) tree cl_optimization_node;
192 static GTY (()) tree cl_target_option_node;
193 static GTY ((if_marked ("ggc_marked_p"), param_is (union tree_node)))
194 htab_t cl_option_hash_table;
196 /* General tree->tree mapping structure for use in hash tables. */
199 static GTY ((if_marked ("tree_map_marked_p"), param_is (struct tree_map)))
200 htab_t debug_expr_for_decl;
202 static GTY ((if_marked ("tree_map_marked_p"), param_is (struct tree_map)))
203 htab_t value_expr_for_decl;
205 static GTY ((if_marked ("tree_priority_map_marked_p"),
206 param_is (struct tree_priority_map)))
207 htab_t init_priority_for_decl;
209 static void set_type_quals (tree, int);
210 static int type_hash_eq (const void *, const void *);
211 static hashval_t type_hash_hash (const void *);
212 static hashval_t int_cst_hash_hash (const void *);
213 static int int_cst_hash_eq (const void *, const void *);
214 static hashval_t cl_option_hash_hash (const void *);
215 static int cl_option_hash_eq (const void *, const void *);
216 static void print_type_hash_statistics (void);
217 static void print_debug_expr_statistics (void);
218 static void print_value_expr_statistics (void);
219 static int type_hash_marked_p (const void *);
220 static unsigned int type_hash_list (const_tree, hashval_t);
221 static unsigned int attribute_hash_list (const_tree, hashval_t);
223 tree global_trees[TI_MAX];
224 tree integer_types[itk_none];
226 unsigned char tree_contains_struct[MAX_TREE_CODES][64];
228 /* Number of operands for each OpenMP clause. */
229 unsigned const char omp_clause_num_ops[] =
231 0, /* OMP_CLAUSE_ERROR */
232 1, /* OMP_CLAUSE_PRIVATE */
233 1, /* OMP_CLAUSE_SHARED */
234 1, /* OMP_CLAUSE_FIRSTPRIVATE */
235 2, /* OMP_CLAUSE_LASTPRIVATE */
236 4, /* OMP_CLAUSE_REDUCTION */
237 1, /* OMP_CLAUSE_COPYIN */
238 1, /* OMP_CLAUSE_COPYPRIVATE */
239 1, /* OMP_CLAUSE_IF */
240 1, /* OMP_CLAUSE_NUM_THREADS */
241 1, /* OMP_CLAUSE_SCHEDULE */
242 0, /* OMP_CLAUSE_NOWAIT */
243 0, /* OMP_CLAUSE_ORDERED */
244 0, /* OMP_CLAUSE_DEFAULT */
245 3, /* OMP_CLAUSE_COLLAPSE */
246 0 /* OMP_CLAUSE_UNTIED */
249 const char * const omp_clause_code_name[] =
270 /* Return the tree node structure used by tree code CODE. */
272 static inline enum tree_node_structure_enum
273 tree_node_structure_for_code (enum tree_code code)
275 switch (TREE_CODE_CLASS (code))
277 case tcc_declaration:
282 return TS_FIELD_DECL;
288 return TS_LABEL_DECL;
290 return TS_RESULT_DECL;
291 case DEBUG_EXPR_DECL:
294 return TS_CONST_DECL;
298 return TS_FUNCTION_DECL;
300 return TS_DECL_NON_COMMON;
313 default: /* tcc_constant and tcc_exceptional */
318 /* tcc_constant cases. */
319 case INTEGER_CST: return TS_INT_CST;
320 case REAL_CST: return TS_REAL_CST;
321 case FIXED_CST: return TS_FIXED_CST;
322 case COMPLEX_CST: return TS_COMPLEX;
323 case VECTOR_CST: return TS_VECTOR;
324 case STRING_CST: return TS_STRING;
325 /* tcc_exceptional cases. */
326 case ERROR_MARK: return TS_COMMON;
327 case IDENTIFIER_NODE: return TS_IDENTIFIER;
328 case TREE_LIST: return TS_LIST;
329 case TREE_VEC: return TS_VEC;
330 case SSA_NAME: return TS_SSA_NAME;
331 case PLACEHOLDER_EXPR: return TS_COMMON;
332 case STATEMENT_LIST: return TS_STATEMENT_LIST;
333 case BLOCK: return TS_BLOCK;
334 case CONSTRUCTOR: return TS_CONSTRUCTOR;
335 case TREE_BINFO: return TS_BINFO;
336 case OMP_CLAUSE: return TS_OMP_CLAUSE;
337 case OPTIMIZATION_NODE: return TS_OPTIMIZATION;
338 case TARGET_OPTION_NODE: return TS_TARGET_OPTION;
346 /* Initialize tree_contains_struct to describe the hierarchy of tree
350 initialize_tree_contains_struct (void)
354 #define MARK_TS_BASE(C) \
356 tree_contains_struct[C][TS_BASE] = 1; \
359 #define MARK_TS_COMMON(C) \
362 tree_contains_struct[C][TS_COMMON] = 1; \
365 #define MARK_TS_DECL_MINIMAL(C) \
367 MARK_TS_COMMON (C); \
368 tree_contains_struct[C][TS_DECL_MINIMAL] = 1; \
371 #define MARK_TS_DECL_COMMON(C) \
373 MARK_TS_DECL_MINIMAL (C); \
374 tree_contains_struct[C][TS_DECL_COMMON] = 1; \
377 #define MARK_TS_DECL_WRTL(C) \
379 MARK_TS_DECL_COMMON (C); \
380 tree_contains_struct[C][TS_DECL_WRTL] = 1; \
383 #define MARK_TS_DECL_WITH_VIS(C) \
385 MARK_TS_DECL_WRTL (C); \
386 tree_contains_struct[C][TS_DECL_WITH_VIS] = 1; \
389 #define MARK_TS_DECL_NON_COMMON(C) \
391 MARK_TS_DECL_WITH_VIS (C); \
392 tree_contains_struct[C][TS_DECL_NON_COMMON] = 1; \
395 for (i = ERROR_MARK; i < LAST_AND_UNUSED_TREE_CODE; i++)
398 enum tree_node_structure_enum ts_code;
400 code = (enum tree_code) i;
401 ts_code = tree_node_structure_for_code (code);
403 /* Mark the TS structure itself. */
404 tree_contains_struct[code][ts_code] = 1;
406 /* Mark all the structures that TS is derived from. */
420 case TS_DECL_MINIMAL:
428 case TS_STATEMENT_LIST:
431 case TS_OPTIMIZATION:
432 case TS_TARGET_OPTION:
433 MARK_TS_COMMON (code);
437 MARK_TS_DECL_MINIMAL (code);
441 MARK_TS_DECL_COMMON (code);
444 case TS_DECL_NON_COMMON:
445 MARK_TS_DECL_WITH_VIS (code);
448 case TS_DECL_WITH_VIS:
453 MARK_TS_DECL_WRTL (code);
457 MARK_TS_DECL_COMMON (code);
461 MARK_TS_DECL_WITH_VIS (code);
465 case TS_FUNCTION_DECL:
466 MARK_TS_DECL_NON_COMMON (code);
474 /* Basic consistency checks for attributes used in fold. */
475 gcc_assert (tree_contains_struct[FUNCTION_DECL][TS_DECL_NON_COMMON]);
476 gcc_assert (tree_contains_struct[TRANSLATION_UNIT_DECL][TS_DECL_NON_COMMON]);
477 gcc_assert (tree_contains_struct[TYPE_DECL][TS_DECL_NON_COMMON]);
478 gcc_assert (tree_contains_struct[CONST_DECL][TS_DECL_COMMON]);
479 gcc_assert (tree_contains_struct[VAR_DECL][TS_DECL_COMMON]);
480 gcc_assert (tree_contains_struct[PARM_DECL][TS_DECL_COMMON]);
481 gcc_assert (tree_contains_struct[RESULT_DECL][TS_DECL_COMMON]);
482 gcc_assert (tree_contains_struct[FUNCTION_DECL][TS_DECL_COMMON]);
483 gcc_assert (tree_contains_struct[TYPE_DECL][TS_DECL_COMMON]);
484 gcc_assert (tree_contains_struct[TRANSLATION_UNIT_DECL][TS_DECL_COMMON]);
485 gcc_assert (tree_contains_struct[LABEL_DECL][TS_DECL_COMMON]);
486 gcc_assert (tree_contains_struct[FIELD_DECL][TS_DECL_COMMON]);
487 gcc_assert (tree_contains_struct[CONST_DECL][TS_DECL_WRTL]);
488 gcc_assert (tree_contains_struct[VAR_DECL][TS_DECL_WRTL]);
489 gcc_assert (tree_contains_struct[PARM_DECL][TS_DECL_WRTL]);
490 gcc_assert (tree_contains_struct[RESULT_DECL][TS_DECL_WRTL]);
491 gcc_assert (tree_contains_struct[FUNCTION_DECL][TS_DECL_WRTL]);
492 gcc_assert (tree_contains_struct[LABEL_DECL][TS_DECL_WRTL]);
493 gcc_assert (tree_contains_struct[CONST_DECL][TS_DECL_MINIMAL]);
494 gcc_assert (tree_contains_struct[VAR_DECL][TS_DECL_MINIMAL]);
495 gcc_assert (tree_contains_struct[PARM_DECL][TS_DECL_MINIMAL]);
496 gcc_assert (tree_contains_struct[RESULT_DECL][TS_DECL_MINIMAL]);
497 gcc_assert (tree_contains_struct[FUNCTION_DECL][TS_DECL_MINIMAL]);
498 gcc_assert (tree_contains_struct[TYPE_DECL][TS_DECL_MINIMAL]);
499 gcc_assert (tree_contains_struct[TRANSLATION_UNIT_DECL][TS_DECL_MINIMAL]);
500 gcc_assert (tree_contains_struct[LABEL_DECL][TS_DECL_MINIMAL]);
501 gcc_assert (tree_contains_struct[FIELD_DECL][TS_DECL_MINIMAL]);
502 gcc_assert (tree_contains_struct[VAR_DECL][TS_DECL_WITH_VIS]);
503 gcc_assert (tree_contains_struct[FUNCTION_DECL][TS_DECL_WITH_VIS]);
504 gcc_assert (tree_contains_struct[TYPE_DECL][TS_DECL_WITH_VIS]);
505 gcc_assert (tree_contains_struct[TRANSLATION_UNIT_DECL][TS_DECL_WITH_VIS]);
506 gcc_assert (tree_contains_struct[VAR_DECL][TS_VAR_DECL]);
507 gcc_assert (tree_contains_struct[FIELD_DECL][TS_FIELD_DECL]);
508 gcc_assert (tree_contains_struct[PARM_DECL][TS_PARM_DECL]);
509 gcc_assert (tree_contains_struct[LABEL_DECL][TS_LABEL_DECL]);
510 gcc_assert (tree_contains_struct[RESULT_DECL][TS_RESULT_DECL]);
511 gcc_assert (tree_contains_struct[CONST_DECL][TS_CONST_DECL]);
512 gcc_assert (tree_contains_struct[TYPE_DECL][TS_TYPE_DECL]);
513 gcc_assert (tree_contains_struct[FUNCTION_DECL][TS_FUNCTION_DECL]);
514 gcc_assert (tree_contains_struct[IMPORTED_DECL][TS_DECL_MINIMAL]);
515 gcc_assert (tree_contains_struct[IMPORTED_DECL][TS_DECL_COMMON]);
518 #undef MARK_TS_COMMON
519 #undef MARK_TS_DECL_MINIMAL
520 #undef MARK_TS_DECL_COMMON
521 #undef MARK_TS_DECL_WRTL
522 #undef MARK_TS_DECL_WITH_VIS
523 #undef MARK_TS_DECL_NON_COMMON
532 /* Initialize the hash table of types. */
533 type_hash_table = htab_create_ggc (TYPE_HASH_INITIAL_SIZE, type_hash_hash,
536 debug_expr_for_decl = htab_create_ggc (512, tree_map_hash,
539 value_expr_for_decl = htab_create_ggc (512, tree_map_hash,
541 init_priority_for_decl = htab_create_ggc (512, tree_priority_map_hash,
542 tree_priority_map_eq, 0);
544 int_cst_hash_table = htab_create_ggc (1024, int_cst_hash_hash,
545 int_cst_hash_eq, NULL);
547 int_cst_node = make_node (INTEGER_CST);
549 cl_option_hash_table = htab_create_ggc (64, cl_option_hash_hash,
550 cl_option_hash_eq, NULL);
552 cl_optimization_node = make_node (OPTIMIZATION_NODE);
553 cl_target_option_node = make_node (TARGET_OPTION_NODE);
555 /* Initialize the tree_contains_struct array. */
556 initialize_tree_contains_struct ();
557 lang_hooks.init_ts ();
561 /* The name of the object as the assembler will see it (but before any
562 translations made by ASM_OUTPUT_LABELREF). Often this is the same
563 as DECL_NAME. It is an IDENTIFIER_NODE. */
565 decl_assembler_name (tree decl)
567 if (!DECL_ASSEMBLER_NAME_SET_P (decl))
568 lang_hooks.set_decl_assembler_name (decl);
569 return DECL_WITH_VIS_CHECK (decl)->decl_with_vis.assembler_name;
572 /* Compare ASMNAME with the DECL_ASSEMBLER_NAME of DECL. */
575 decl_assembler_name_equal (tree decl, const_tree asmname)
577 tree decl_asmname = DECL_ASSEMBLER_NAME (decl);
578 const char *decl_str;
579 const char *asmname_str;
582 if (decl_asmname == asmname)
585 decl_str = IDENTIFIER_POINTER (decl_asmname);
586 asmname_str = IDENTIFIER_POINTER (asmname);
589 /* If the target assembler name was set by the user, things are trickier.
590 We have a leading '*' to begin with. After that, it's arguable what
591 is the correct thing to do with -fleading-underscore. Arguably, we've
592 historically been doing the wrong thing in assemble_alias by always
593 printing the leading underscore. Since we're not changing that, make
594 sure user_label_prefix follows the '*' before matching. */
595 if (decl_str[0] == '*')
597 size_t ulp_len = strlen (user_label_prefix);
603 else if (strncmp (decl_str, user_label_prefix, ulp_len) == 0)
604 decl_str += ulp_len, test=true;
608 if (asmname_str[0] == '*')
610 size_t ulp_len = strlen (user_label_prefix);
616 else if (strncmp (asmname_str, user_label_prefix, ulp_len) == 0)
617 asmname_str += ulp_len, test=true;
624 return strcmp (decl_str, asmname_str) == 0;
627 /* Hash asmnames ignoring the user specified marks. */
630 decl_assembler_name_hash (const_tree asmname)
632 if (IDENTIFIER_POINTER (asmname)[0] == '*')
634 const char *decl_str = IDENTIFIER_POINTER (asmname) + 1;
635 size_t ulp_len = strlen (user_label_prefix);
639 else if (strncmp (decl_str, user_label_prefix, ulp_len) == 0)
642 return htab_hash_string (decl_str);
645 return htab_hash_string (IDENTIFIER_POINTER (asmname));
648 /* Compute the number of bytes occupied by a tree with code CODE.
649 This function cannot be used for nodes that have variable sizes,
650 including TREE_VEC, STRING_CST, and CALL_EXPR. */
652 tree_code_size (enum tree_code code)
654 switch (TREE_CODE_CLASS (code))
656 case tcc_declaration: /* A decl node */
661 return sizeof (struct tree_field_decl);
663 return sizeof (struct tree_parm_decl);
665 return sizeof (struct tree_var_decl);
667 return sizeof (struct tree_label_decl);
669 return sizeof (struct tree_result_decl);
671 return sizeof (struct tree_const_decl);
673 return sizeof (struct tree_type_decl);
675 return sizeof (struct tree_function_decl);
676 case DEBUG_EXPR_DECL:
677 return sizeof (struct tree_decl_with_rtl);
679 return sizeof (struct tree_decl_non_common);
683 case tcc_type: /* a type node */
684 return sizeof (struct tree_type);
686 case tcc_reference: /* a reference */
687 case tcc_expression: /* an expression */
688 case tcc_statement: /* an expression with side effects */
689 case tcc_comparison: /* a comparison expression */
690 case tcc_unary: /* a unary arithmetic expression */
691 case tcc_binary: /* a binary arithmetic expression */
692 return (sizeof (struct tree_exp)
693 + (TREE_CODE_LENGTH (code) - 1) * sizeof (tree));
695 case tcc_constant: /* a constant */
698 case INTEGER_CST: return sizeof (struct tree_int_cst);
699 case REAL_CST: return sizeof (struct tree_real_cst);
700 case FIXED_CST: return sizeof (struct tree_fixed_cst);
701 case COMPLEX_CST: return sizeof (struct tree_complex);
702 case VECTOR_CST: return sizeof (struct tree_vector);
703 case STRING_CST: gcc_unreachable ();
705 return lang_hooks.tree_size (code);
708 case tcc_exceptional: /* something random, like an identifier. */
711 case IDENTIFIER_NODE: return lang_hooks.identifier_size;
712 case TREE_LIST: return sizeof (struct tree_list);
715 case PLACEHOLDER_EXPR: return sizeof (struct tree_common);
718 case OMP_CLAUSE: gcc_unreachable ();
720 case SSA_NAME: return sizeof (struct tree_ssa_name);
722 case STATEMENT_LIST: return sizeof (struct tree_statement_list);
723 case BLOCK: return sizeof (struct tree_block);
724 case CONSTRUCTOR: return sizeof (struct tree_constructor);
725 case OPTIMIZATION_NODE: return sizeof (struct tree_optimization_option);
726 case TARGET_OPTION_NODE: return sizeof (struct tree_target_option);
729 return lang_hooks.tree_size (code);
737 /* Compute the number of bytes occupied by NODE. This routine only
738 looks at TREE_CODE, except for those nodes that have variable sizes. */
740 tree_size (const_tree node)
742 const enum tree_code code = TREE_CODE (node);
746 return (offsetof (struct tree_binfo, base_binfos)
747 + VEC_embedded_size (tree, BINFO_N_BASE_BINFOS (node)));
750 return (sizeof (struct tree_vec)
751 + (TREE_VEC_LENGTH (node) - 1) * sizeof (tree));
754 return TREE_STRING_LENGTH (node) + offsetof (struct tree_string, str) + 1;
757 return (sizeof (struct tree_omp_clause)
758 + (omp_clause_num_ops[OMP_CLAUSE_CODE (node)] - 1)
762 if (TREE_CODE_CLASS (code) == tcc_vl_exp)
763 return (sizeof (struct tree_exp)
764 + (VL_EXP_OPERAND_LENGTH (node) - 1) * sizeof (tree));
766 return tree_code_size (code);
770 /* Return a newly allocated node of code CODE. For decl and type
771 nodes, some other fields are initialized. The rest of the node is
772 initialized to zero. This function cannot be used for TREE_VEC or
773 OMP_CLAUSE nodes, which is enforced by asserts in tree_code_size.
775 Achoo! I got a code in the node. */
778 make_node_stat (enum tree_code code MEM_STAT_DECL)
781 enum tree_code_class type = TREE_CODE_CLASS (code);
782 size_t length = tree_code_size (code);
783 #ifdef GATHER_STATISTICS
788 case tcc_declaration: /* A decl node */
792 case tcc_type: /* a type node */
796 case tcc_statement: /* an expression with side effects */
800 case tcc_reference: /* a reference */
804 case tcc_expression: /* an expression */
805 case tcc_comparison: /* a comparison expression */
806 case tcc_unary: /* a unary arithmetic expression */
807 case tcc_binary: /* a binary arithmetic expression */
811 case tcc_constant: /* a constant */
815 case tcc_exceptional: /* something random, like an identifier. */
818 case IDENTIFIER_NODE:
831 kind = ssa_name_kind;
852 tree_node_counts[(int) kind]++;
853 tree_node_sizes[(int) kind] += length;
856 if (code == IDENTIFIER_NODE)
857 t = (tree) ggc_alloc_zone_pass_stat (length, &tree_id_zone);
859 t = (tree) ggc_alloc_zone_pass_stat (length, &tree_zone);
861 memset (t, 0, length);
863 TREE_SET_CODE (t, code);
868 TREE_SIDE_EFFECTS (t) = 1;
871 case tcc_declaration:
872 if (CODE_CONTAINS_STRUCT (code, TS_DECL_COMMON))
874 if (code == FUNCTION_DECL)
876 DECL_ALIGN (t) = FUNCTION_BOUNDARY;
877 DECL_MODE (t) = FUNCTION_MODE;
882 DECL_SOURCE_LOCATION (t) = input_location;
883 if (TREE_CODE (t) == DEBUG_EXPR_DECL)
884 DECL_UID (t) = --next_debug_decl_uid;
887 DECL_UID (t) = next_decl_uid++;
888 SET_DECL_PT_UID (t, -1);
890 if (TREE_CODE (t) == LABEL_DECL)
891 LABEL_DECL_UID (t) = -1;
896 TYPE_UID (t) = next_type_uid++;
897 TYPE_ALIGN (t) = BITS_PER_UNIT;
898 TYPE_USER_ALIGN (t) = 0;
899 TYPE_MAIN_VARIANT (t) = t;
900 TYPE_CANONICAL (t) = t;
902 /* Default to no attributes for type, but let target change that. */
903 TYPE_ATTRIBUTES (t) = NULL_TREE;
904 targetm.set_default_type_attributes (t);
906 /* We have not yet computed the alias set for this type. */
907 TYPE_ALIAS_SET (t) = -1;
911 TREE_CONSTANT (t) = 1;
920 case PREDECREMENT_EXPR:
921 case PREINCREMENT_EXPR:
922 case POSTDECREMENT_EXPR:
923 case POSTINCREMENT_EXPR:
924 /* All of these have side-effects, no matter what their
926 TREE_SIDE_EFFECTS (t) = 1;
935 /* Other classes need no special treatment. */
942 /* Return a new node with the same contents as NODE except that its
943 TREE_CHAIN is zero and it has a fresh uid. */
946 copy_node_stat (tree node MEM_STAT_DECL)
949 enum tree_code code = TREE_CODE (node);
952 gcc_assert (code != STATEMENT_LIST);
954 length = tree_size (node);
955 t = (tree) ggc_alloc_zone_pass_stat (length, &tree_zone);
956 memcpy (t, node, length);
959 TREE_ASM_WRITTEN (t) = 0;
960 TREE_VISITED (t) = 0;
961 if (code == VAR_DECL || code == PARM_DECL || code == RESULT_DECL)
962 *DECL_VAR_ANN_PTR (t) = 0;
964 if (TREE_CODE_CLASS (code) == tcc_declaration)
966 if (code == DEBUG_EXPR_DECL)
967 DECL_UID (t) = --next_debug_decl_uid;
970 DECL_UID (t) = next_decl_uid++;
971 if (DECL_PT_UID_SET_P (node))
972 SET_DECL_PT_UID (t, DECL_PT_UID (node));
974 if ((TREE_CODE (node) == PARM_DECL || TREE_CODE (node) == VAR_DECL)
975 && DECL_HAS_VALUE_EXPR_P (node))
977 SET_DECL_VALUE_EXPR (t, DECL_VALUE_EXPR (node));
978 DECL_HAS_VALUE_EXPR_P (t) = 1;
980 if (TREE_CODE (node) == VAR_DECL && DECL_HAS_INIT_PRIORITY_P (node))
982 SET_DECL_INIT_PRIORITY (t, DECL_INIT_PRIORITY (node));
983 DECL_HAS_INIT_PRIORITY_P (t) = 1;
986 else if (TREE_CODE_CLASS (code) == tcc_type)
988 TYPE_UID (t) = next_type_uid++;
989 /* The following is so that the debug code for
990 the copy is different from the original type.
991 The two statements usually duplicate each other
992 (because they clear fields of the same union),
993 but the optimizer should catch that. */
994 TYPE_SYMTAB_POINTER (t) = 0;
995 TYPE_SYMTAB_ADDRESS (t) = 0;
997 /* Do not copy the values cache. */
998 if (TYPE_CACHED_VALUES_P(t))
1000 TYPE_CACHED_VALUES_P (t) = 0;
1001 TYPE_CACHED_VALUES (t) = NULL_TREE;
1008 /* Return a copy of a chain of nodes, chained through the TREE_CHAIN field.
1009 For example, this can copy a list made of TREE_LIST nodes. */
1012 copy_list (tree list)
1020 head = prev = copy_node (list);
1021 next = TREE_CHAIN (list);
1024 TREE_CHAIN (prev) = copy_node (next);
1025 prev = TREE_CHAIN (prev);
1026 next = TREE_CHAIN (next);
1032 /* Create an INT_CST node with a LOW value sign extended. */
1035 build_int_cst (tree type, HOST_WIDE_INT low)
1037 /* Support legacy code. */
1039 type = integer_type_node;
1041 return build_int_cst_wide (type, low, low < 0 ? -1 : 0);
1044 /* Create an INT_CST node with a LOW value in TYPE. The value is sign extended
1045 if it is negative. This function is similar to build_int_cst, but
1046 the extra bits outside of the type precision are cleared. Constants
1047 with these extra bits may confuse the fold so that it detects overflows
1048 even in cases when they do not occur, and in general should be avoided.
1049 We cannot however make this a default behavior of build_int_cst without
1050 more intrusive changes, since there are parts of gcc that rely on the extra
1051 precision of the integer constants. */
1054 build_int_cst_type (tree type, HOST_WIDE_INT low)
1056 unsigned HOST_WIDE_INT low1;
1061 fit_double_type (low, low < 0 ? -1 : 0, &low1, &hi, type);
1063 return build_int_cst_wide (type, low1, hi);
1066 /* Create an INT_CST node of TYPE and value HI:LOW. The value is truncated
1067 and sign extended according to the value range of TYPE. */
1070 build_int_cst_wide_type (tree type,
1071 unsigned HOST_WIDE_INT low, HOST_WIDE_INT high)
1073 fit_double_type (low, high, &low, &high, type);
1074 return build_int_cst_wide (type, low, high);
1077 /* Constructs tree in type TYPE from with value given by CST. Signedness
1078 of CST is assumed to be the same as the signedness of TYPE. */
1081 double_int_to_tree (tree type, double_int cst)
1083 /* Size types *are* sign extended. */
1084 bool sign_extended_type = (!TYPE_UNSIGNED (type)
1085 || (TREE_CODE (type) == INTEGER_TYPE
1086 && TYPE_IS_SIZETYPE (type)));
1088 cst = double_int_ext (cst, TYPE_PRECISION (type), !sign_extended_type);
1090 return build_int_cst_wide (type, cst.low, cst.high);
1093 /* Returns true if CST fits into range of TYPE. Signedness of CST is assumed
1094 to be the same as the signedness of TYPE. */
1097 double_int_fits_to_tree_p (const_tree type, double_int cst)
1099 /* Size types *are* sign extended. */
1100 bool sign_extended_type = (!TYPE_UNSIGNED (type)
1101 || (TREE_CODE (type) == INTEGER_TYPE
1102 && TYPE_IS_SIZETYPE (type)));
1105 = double_int_ext (cst, TYPE_PRECISION (type), !sign_extended_type);
1107 return double_int_equal_p (cst, ext);
1110 /* These are the hash table functions for the hash table of INTEGER_CST
1111 nodes of a sizetype. */
1113 /* Return the hash code code X, an INTEGER_CST. */
1116 int_cst_hash_hash (const void *x)
1118 const_tree const t = (const_tree) x;
1120 return (TREE_INT_CST_HIGH (t) ^ TREE_INT_CST_LOW (t)
1121 ^ htab_hash_pointer (TREE_TYPE (t)));
1124 /* Return nonzero if the value represented by *X (an INTEGER_CST tree node)
1125 is the same as that given by *Y, which is the same. */
1128 int_cst_hash_eq (const void *x, const void *y)
1130 const_tree const xt = (const_tree) x;
1131 const_tree const yt = (const_tree) y;
1133 return (TREE_TYPE (xt) == TREE_TYPE (yt)
1134 && TREE_INT_CST_HIGH (xt) == TREE_INT_CST_HIGH (yt)
1135 && TREE_INT_CST_LOW (xt) == TREE_INT_CST_LOW (yt));
1138 /* Create an INT_CST node of TYPE and value HI:LOW.
1139 The returned node is always shared. For small integers we use a
1140 per-type vector cache, for larger ones we use a single hash table. */
1143 build_int_cst_wide (tree type, unsigned HOST_WIDE_INT low, HOST_WIDE_INT hi)
1151 switch (TREE_CODE (type))
1154 case REFERENCE_TYPE:
1155 /* Cache NULL pointer. */
1164 /* Cache false or true. */
1172 if (TYPE_UNSIGNED (type))
1175 limit = INTEGER_SHARE_LIMIT;
1176 if (!hi && low < (unsigned HOST_WIDE_INT)INTEGER_SHARE_LIMIT)
1182 limit = INTEGER_SHARE_LIMIT + 1;
1183 if (!hi && low < (unsigned HOST_WIDE_INT)INTEGER_SHARE_LIMIT)
1185 else if (hi == -1 && low == -(unsigned HOST_WIDE_INT)1)
1199 /* Look for it in the type's vector of small shared ints. */
1200 if (!TYPE_CACHED_VALUES_P (type))
1202 TYPE_CACHED_VALUES_P (type) = 1;
1203 TYPE_CACHED_VALUES (type) = make_tree_vec (limit);
1206 t = TREE_VEC_ELT (TYPE_CACHED_VALUES (type), ix);
1209 /* Make sure no one is clobbering the shared constant. */
1210 gcc_assert (TREE_TYPE (t) == type);
1211 gcc_assert (TREE_INT_CST_LOW (t) == low);
1212 gcc_assert (TREE_INT_CST_HIGH (t) == hi);
1216 /* Create a new shared int. */
1217 t = make_node (INTEGER_CST);
1219 TREE_INT_CST_LOW (t) = low;
1220 TREE_INT_CST_HIGH (t) = hi;
1221 TREE_TYPE (t) = type;
1223 TREE_VEC_ELT (TYPE_CACHED_VALUES (type), ix) = t;
1228 /* Use the cache of larger shared ints. */
1231 TREE_INT_CST_LOW (int_cst_node) = low;
1232 TREE_INT_CST_HIGH (int_cst_node) = hi;
1233 TREE_TYPE (int_cst_node) = type;
1235 slot = htab_find_slot (int_cst_hash_table, int_cst_node, INSERT);
1239 /* Insert this one into the hash table. */
1242 /* Make a new node for next time round. */
1243 int_cst_node = make_node (INTEGER_CST);
1250 /* Builds an integer constant in TYPE such that lowest BITS bits are ones
1251 and the rest are zeros. */
1254 build_low_bits_mask (tree type, unsigned bits)
1258 gcc_assert (bits <= TYPE_PRECISION (type));
1260 if (bits == TYPE_PRECISION (type)
1261 && !TYPE_UNSIGNED (type))
1262 /* Sign extended all-ones mask. */
1263 mask = double_int_minus_one;
1265 mask = double_int_mask (bits);
1267 return build_int_cst_wide (type, mask.low, mask.high);
1270 /* Checks that X is integer constant that can be expressed in (unsigned)
1271 HOST_WIDE_INT without loss of precision. */
1274 cst_and_fits_in_hwi (const_tree x)
1276 if (TREE_CODE (x) != INTEGER_CST)
1279 if (TYPE_PRECISION (TREE_TYPE (x)) > HOST_BITS_PER_WIDE_INT)
1282 return (TREE_INT_CST_HIGH (x) == 0
1283 || TREE_INT_CST_HIGH (x) == -1);
1286 /* Return a new VECTOR_CST node whose type is TYPE and whose values
1287 are in a list pointed to by VALS. */
1290 build_vector (tree type, tree vals)
1292 tree v = make_node (VECTOR_CST);
1296 TREE_VECTOR_CST_ELTS (v) = vals;
1297 TREE_TYPE (v) = type;
1299 /* Iterate through elements and check for overflow. */
1300 for (link = vals; link; link = TREE_CHAIN (link))
1302 tree value = TREE_VALUE (link);
1304 /* Don't crash if we get an address constant. */
1305 if (!CONSTANT_CLASS_P (value))
1308 over |= TREE_OVERFLOW (value);
1311 TREE_OVERFLOW (v) = over;
1315 /* Return a new VECTOR_CST node whose type is TYPE and whose values
1316 are extracted from V, a vector of CONSTRUCTOR_ELT. */
1319 build_vector_from_ctor (tree type, VEC(constructor_elt,gc) *v)
1321 tree list = NULL_TREE;
1322 unsigned HOST_WIDE_INT idx;
1325 FOR_EACH_CONSTRUCTOR_VALUE (v, idx, value)
1326 list = tree_cons (NULL_TREE, value, list);
1327 return build_vector (type, nreverse (list));
1330 /* Return a new CONSTRUCTOR node whose type is TYPE and whose values
1331 are in the VEC pointed to by VALS. */
1333 build_constructor (tree type, VEC(constructor_elt,gc) *vals)
1335 tree c = make_node (CONSTRUCTOR);
1337 constructor_elt *elt;
1338 bool constant_p = true;
1340 TREE_TYPE (c) = type;
1341 CONSTRUCTOR_ELTS (c) = vals;
1343 for (i = 0; VEC_iterate (constructor_elt, vals, i, elt); i++)
1344 if (!TREE_CONSTANT (elt->value))
1350 TREE_CONSTANT (c) = constant_p;
1355 /* Build a CONSTRUCTOR node made of a single initializer, with the specified
1358 build_constructor_single (tree type, tree index, tree value)
1360 VEC(constructor_elt,gc) *v;
1361 constructor_elt *elt;
1363 v = VEC_alloc (constructor_elt, gc, 1);
1364 elt = VEC_quick_push (constructor_elt, v, NULL);
1368 return build_constructor (type, v);
1372 /* Return a new CONSTRUCTOR node whose type is TYPE and whose values
1373 are in a list pointed to by VALS. */
1375 build_constructor_from_list (tree type, tree vals)
1378 VEC(constructor_elt,gc) *v = NULL;
1382 v = VEC_alloc (constructor_elt, gc, list_length (vals));
1383 for (t = vals; t; t = TREE_CHAIN (t))
1384 CONSTRUCTOR_APPEND_ELT (v, TREE_PURPOSE (t), TREE_VALUE (t));
1387 return build_constructor (type, v);
1390 /* Return a new FIXED_CST node whose type is TYPE and value is F. */
1393 build_fixed (tree type, FIXED_VALUE_TYPE f)
1396 FIXED_VALUE_TYPE *fp;
1398 v = make_node (FIXED_CST);
1399 fp = GGC_NEW (FIXED_VALUE_TYPE);
1400 memcpy (fp, &f, sizeof (FIXED_VALUE_TYPE));
1402 TREE_TYPE (v) = type;
1403 TREE_FIXED_CST_PTR (v) = fp;
1407 /* Return a new REAL_CST node whose type is TYPE and value is D. */
1410 build_real (tree type, REAL_VALUE_TYPE d)
1413 REAL_VALUE_TYPE *dp;
1416 /* ??? Used to check for overflow here via CHECK_FLOAT_TYPE.
1417 Consider doing it via real_convert now. */
1419 v = make_node (REAL_CST);
1420 dp = GGC_NEW (REAL_VALUE_TYPE);
1421 memcpy (dp, &d, sizeof (REAL_VALUE_TYPE));
1423 TREE_TYPE (v) = type;
1424 TREE_REAL_CST_PTR (v) = dp;
1425 TREE_OVERFLOW (v) = overflow;
1429 /* Return a new REAL_CST node whose type is TYPE
1430 and whose value is the integer value of the INTEGER_CST node I. */
1433 real_value_from_int_cst (const_tree type, const_tree i)
1437 /* Clear all bits of the real value type so that we can later do
1438 bitwise comparisons to see if two values are the same. */
1439 memset (&d, 0, sizeof d);
1441 real_from_integer (&d, type ? TYPE_MODE (type) : VOIDmode,
1442 TREE_INT_CST_LOW (i), TREE_INT_CST_HIGH (i),
1443 TYPE_UNSIGNED (TREE_TYPE (i)));
1447 /* Given a tree representing an integer constant I, return a tree
1448 representing the same value as a floating-point constant of type TYPE. */
1451 build_real_from_int_cst (tree type, const_tree i)
1454 int overflow = TREE_OVERFLOW (i);
1456 v = build_real (type, real_value_from_int_cst (type, i));
1458 TREE_OVERFLOW (v) |= overflow;
1462 /* Return a newly constructed STRING_CST node whose value is
1463 the LEN characters at STR.
1464 The TREE_TYPE is not initialized. */
1467 build_string (int len, const char *str)
1472 /* Do not waste bytes provided by padding of struct tree_string. */
1473 length = len + offsetof (struct tree_string, str) + 1;
1475 #ifdef GATHER_STATISTICS
1476 tree_node_counts[(int) c_kind]++;
1477 tree_node_sizes[(int) c_kind] += length;
1480 s = ggc_alloc_tree (length);
1482 memset (s, 0, sizeof (struct tree_common));
1483 TREE_SET_CODE (s, STRING_CST);
1484 TREE_CONSTANT (s) = 1;
1485 TREE_STRING_LENGTH (s) = len;
1486 memcpy (s->string.str, str, len);
1487 s->string.str[len] = '\0';
1492 /* Return a newly constructed COMPLEX_CST node whose value is
1493 specified by the real and imaginary parts REAL and IMAG.
1494 Both REAL and IMAG should be constant nodes. TYPE, if specified,
1495 will be the type of the COMPLEX_CST; otherwise a new type will be made. */
1498 build_complex (tree type, tree real, tree imag)
1500 tree t = make_node (COMPLEX_CST);
1502 TREE_REALPART (t) = real;
1503 TREE_IMAGPART (t) = imag;
1504 TREE_TYPE (t) = type ? type : build_complex_type (TREE_TYPE (real));
1505 TREE_OVERFLOW (t) = TREE_OVERFLOW (real) | TREE_OVERFLOW (imag);
1509 /* Return a constant of arithmetic type TYPE which is the
1510 multiplicative identity of the set TYPE. */
1513 build_one_cst (tree type)
1515 switch (TREE_CODE (type))
1517 case INTEGER_TYPE: case ENUMERAL_TYPE: case BOOLEAN_TYPE:
1518 case POINTER_TYPE: case REFERENCE_TYPE:
1520 return build_int_cst (type, 1);
1523 return build_real (type, dconst1);
1525 case FIXED_POINT_TYPE:
1526 /* We can only generate 1 for accum types. */
1527 gcc_assert (ALL_SCALAR_ACCUM_MODE_P (TYPE_MODE (type)));
1528 return build_fixed (type, FCONST1(TYPE_MODE (type)));
1535 scalar = build_one_cst (TREE_TYPE (type));
1537 /* Create 'vect_cst_ = {cst,cst,...,cst}' */
1539 for (i = TYPE_VECTOR_SUBPARTS (type); --i >= 0; )
1540 cst = tree_cons (NULL_TREE, scalar, cst);
1542 return build_vector (type, cst);
1546 return build_complex (type,
1547 build_one_cst (TREE_TYPE (type)),
1548 fold_convert (TREE_TYPE (type), integer_zero_node));
1555 /* Build a BINFO with LEN language slots. */
1558 make_tree_binfo_stat (unsigned base_binfos MEM_STAT_DECL)
1561 size_t length = (offsetof (struct tree_binfo, base_binfos)
1562 + VEC_embedded_size (tree, base_binfos));
1564 #ifdef GATHER_STATISTICS
1565 tree_node_counts[(int) binfo_kind]++;
1566 tree_node_sizes[(int) binfo_kind] += length;
1569 t = (tree) ggc_alloc_zone_pass_stat (length, &tree_zone);
1571 memset (t, 0, offsetof (struct tree_binfo, base_binfos));
1573 TREE_SET_CODE (t, TREE_BINFO);
1575 VEC_embedded_init (tree, BINFO_BASE_BINFOS (t), base_binfos);
1581 /* Build a newly constructed TREE_VEC node of length LEN. */
1584 make_tree_vec_stat (int len MEM_STAT_DECL)
1587 int length = (len - 1) * sizeof (tree) + sizeof (struct tree_vec);
1589 #ifdef GATHER_STATISTICS
1590 tree_node_counts[(int) vec_kind]++;
1591 tree_node_sizes[(int) vec_kind] += length;
1594 t = (tree) ggc_alloc_zone_pass_stat (length, &tree_zone);
1596 memset (t, 0, length);
1598 TREE_SET_CODE (t, TREE_VEC);
1599 TREE_VEC_LENGTH (t) = len;
1604 /* Return 1 if EXPR is the integer constant zero or a complex constant
1608 integer_zerop (const_tree expr)
1612 return ((TREE_CODE (expr) == INTEGER_CST
1613 && TREE_INT_CST_LOW (expr) == 0
1614 && TREE_INT_CST_HIGH (expr) == 0)
1615 || (TREE_CODE (expr) == COMPLEX_CST
1616 && integer_zerop (TREE_REALPART (expr))
1617 && integer_zerop (TREE_IMAGPART (expr))));
1620 /* Return 1 if EXPR is the integer constant one or the corresponding
1621 complex constant. */
1624 integer_onep (const_tree expr)
1628 return ((TREE_CODE (expr) == INTEGER_CST
1629 && TREE_INT_CST_LOW (expr) == 1
1630 && TREE_INT_CST_HIGH (expr) == 0)
1631 || (TREE_CODE (expr) == COMPLEX_CST
1632 && integer_onep (TREE_REALPART (expr))
1633 && integer_zerop (TREE_IMAGPART (expr))));
1636 /* Return 1 if EXPR is an integer containing all 1's in as much precision as
1637 it contains. Likewise for the corresponding complex constant. */
1640 integer_all_onesp (const_tree expr)
1647 if (TREE_CODE (expr) == COMPLEX_CST
1648 && integer_all_onesp (TREE_REALPART (expr))
1649 && integer_zerop (TREE_IMAGPART (expr)))
1652 else if (TREE_CODE (expr) != INTEGER_CST)
1655 uns = TYPE_UNSIGNED (TREE_TYPE (expr));
1656 if (TREE_INT_CST_LOW (expr) == ~(unsigned HOST_WIDE_INT) 0
1657 && TREE_INT_CST_HIGH (expr) == -1)
1662 /* Note that using TYPE_PRECISION here is wrong. We care about the
1663 actual bits, not the (arbitrary) range of the type. */
1664 prec = GET_MODE_BITSIZE (TYPE_MODE (TREE_TYPE (expr)));
1665 if (prec >= HOST_BITS_PER_WIDE_INT)
1667 HOST_WIDE_INT high_value;
1670 shift_amount = prec - HOST_BITS_PER_WIDE_INT;
1672 /* Can not handle precisions greater than twice the host int size. */
1673 gcc_assert (shift_amount <= HOST_BITS_PER_WIDE_INT);
1674 if (shift_amount == HOST_BITS_PER_WIDE_INT)
1675 /* Shifting by the host word size is undefined according to the ANSI
1676 standard, so we must handle this as a special case. */
1679 high_value = ((HOST_WIDE_INT) 1 << shift_amount) - 1;
1681 return (TREE_INT_CST_LOW (expr) == ~(unsigned HOST_WIDE_INT) 0
1682 && TREE_INT_CST_HIGH (expr) == high_value);
1685 return TREE_INT_CST_LOW (expr) == ((unsigned HOST_WIDE_INT) 1 << prec) - 1;
1688 /* Return 1 if EXPR is an integer constant that is a power of 2 (i.e., has only
1692 integer_pow2p (const_tree expr)
1695 HOST_WIDE_INT high, low;
1699 if (TREE_CODE (expr) == COMPLEX_CST
1700 && integer_pow2p (TREE_REALPART (expr))
1701 && integer_zerop (TREE_IMAGPART (expr)))
1704 if (TREE_CODE (expr) != INTEGER_CST)
1707 prec = TYPE_PRECISION (TREE_TYPE (expr));
1708 high = TREE_INT_CST_HIGH (expr);
1709 low = TREE_INT_CST_LOW (expr);
1711 /* First clear all bits that are beyond the type's precision in case
1712 we've been sign extended. */
1714 if (prec == 2 * HOST_BITS_PER_WIDE_INT)
1716 else if (prec > HOST_BITS_PER_WIDE_INT)
1717 high &= ~((HOST_WIDE_INT) (-1) << (prec - HOST_BITS_PER_WIDE_INT));
1721 if (prec < HOST_BITS_PER_WIDE_INT)
1722 low &= ~((HOST_WIDE_INT) (-1) << prec);
1725 if (high == 0 && low == 0)
1728 return ((high == 0 && (low & (low - 1)) == 0)
1729 || (low == 0 && (high & (high - 1)) == 0));
1732 /* Return 1 if EXPR is an integer constant other than zero or a
1733 complex constant other than zero. */
1736 integer_nonzerop (const_tree expr)
1740 return ((TREE_CODE (expr) == INTEGER_CST
1741 && (TREE_INT_CST_LOW (expr) != 0
1742 || TREE_INT_CST_HIGH (expr) != 0))
1743 || (TREE_CODE (expr) == COMPLEX_CST
1744 && (integer_nonzerop (TREE_REALPART (expr))
1745 || integer_nonzerop (TREE_IMAGPART (expr)))));
1748 /* Return 1 if EXPR is the fixed-point constant zero. */
1751 fixed_zerop (const_tree expr)
1753 return (TREE_CODE (expr) == FIXED_CST
1754 && double_int_zero_p (TREE_FIXED_CST (expr).data));
1757 /* Return the power of two represented by a tree node known to be a
1761 tree_log2 (const_tree expr)
1764 HOST_WIDE_INT high, low;
1768 if (TREE_CODE (expr) == COMPLEX_CST)
1769 return tree_log2 (TREE_REALPART (expr));
1771 prec = TYPE_PRECISION (TREE_TYPE (expr));
1772 high = TREE_INT_CST_HIGH (expr);
1773 low = TREE_INT_CST_LOW (expr);
1775 /* First clear all bits that are beyond the type's precision in case
1776 we've been sign extended. */
1778 if (prec == 2 * HOST_BITS_PER_WIDE_INT)
1780 else if (prec > HOST_BITS_PER_WIDE_INT)
1781 high &= ~((HOST_WIDE_INT) (-1) << (prec - HOST_BITS_PER_WIDE_INT));
1785 if (prec < HOST_BITS_PER_WIDE_INT)
1786 low &= ~((HOST_WIDE_INT) (-1) << prec);
1789 return (high != 0 ? HOST_BITS_PER_WIDE_INT + exact_log2 (high)
1790 : exact_log2 (low));
1793 /* Similar, but return the largest integer Y such that 2 ** Y is less
1794 than or equal to EXPR. */
1797 tree_floor_log2 (const_tree expr)
1800 HOST_WIDE_INT high, low;
1804 if (TREE_CODE (expr) == COMPLEX_CST)
1805 return tree_log2 (TREE_REALPART (expr));
1807 prec = TYPE_PRECISION (TREE_TYPE (expr));
1808 high = TREE_INT_CST_HIGH (expr);
1809 low = TREE_INT_CST_LOW (expr);
1811 /* First clear all bits that are beyond the type's precision in case
1812 we've been sign extended. Ignore if type's precision hasn't been set
1813 since what we are doing is setting it. */
1815 if (prec == 2 * HOST_BITS_PER_WIDE_INT || prec == 0)
1817 else if (prec > HOST_BITS_PER_WIDE_INT)
1818 high &= ~((HOST_WIDE_INT) (-1) << (prec - HOST_BITS_PER_WIDE_INT));
1822 if (prec < HOST_BITS_PER_WIDE_INT)
1823 low &= ~((HOST_WIDE_INT) (-1) << prec);
1826 return (high != 0 ? HOST_BITS_PER_WIDE_INT + floor_log2 (high)
1827 : floor_log2 (low));
1830 /* Return 1 if EXPR is the real constant zero. Trailing zeroes matter for
1831 decimal float constants, so don't return 1 for them. */
1834 real_zerop (const_tree expr)
1838 return ((TREE_CODE (expr) == REAL_CST
1839 && REAL_VALUES_EQUAL (TREE_REAL_CST (expr), dconst0)
1840 && !(DECIMAL_FLOAT_MODE_P (TYPE_MODE (TREE_TYPE (expr)))))
1841 || (TREE_CODE (expr) == COMPLEX_CST
1842 && real_zerop (TREE_REALPART (expr))
1843 && real_zerop (TREE_IMAGPART (expr))));
1846 /* Return 1 if EXPR is the real constant one in real or complex form.
1847 Trailing zeroes matter for decimal float constants, so don't return
1851 real_onep (const_tree expr)
1855 return ((TREE_CODE (expr) == REAL_CST
1856 && REAL_VALUES_EQUAL (TREE_REAL_CST (expr), dconst1)
1857 && !(DECIMAL_FLOAT_MODE_P (TYPE_MODE (TREE_TYPE (expr)))))
1858 || (TREE_CODE (expr) == COMPLEX_CST
1859 && real_onep (TREE_REALPART (expr))
1860 && real_zerop (TREE_IMAGPART (expr))));
1863 /* Return 1 if EXPR is the real constant two. Trailing zeroes matter
1864 for decimal float constants, so don't return 1 for them. */
1867 real_twop (const_tree expr)
1871 return ((TREE_CODE (expr) == REAL_CST
1872 && REAL_VALUES_EQUAL (TREE_REAL_CST (expr), dconst2)
1873 && !(DECIMAL_FLOAT_MODE_P (TYPE_MODE (TREE_TYPE (expr)))))
1874 || (TREE_CODE (expr) == COMPLEX_CST
1875 && real_twop (TREE_REALPART (expr))
1876 && real_zerop (TREE_IMAGPART (expr))));
1879 /* Return 1 if EXPR is the real constant minus one. Trailing zeroes
1880 matter for decimal float constants, so don't return 1 for them. */
1883 real_minus_onep (const_tree expr)
1887 return ((TREE_CODE (expr) == REAL_CST
1888 && REAL_VALUES_EQUAL (TREE_REAL_CST (expr), dconstm1)
1889 && !(DECIMAL_FLOAT_MODE_P (TYPE_MODE (TREE_TYPE (expr)))))
1890 || (TREE_CODE (expr) == COMPLEX_CST
1891 && real_minus_onep (TREE_REALPART (expr))
1892 && real_zerop (TREE_IMAGPART (expr))));
1895 /* Nonzero if EXP is a constant or a cast of a constant. */
1898 really_constant_p (const_tree exp)
1900 /* This is not quite the same as STRIP_NOPS. It does more. */
1901 while (CONVERT_EXPR_P (exp)
1902 || TREE_CODE (exp) == NON_LVALUE_EXPR)
1903 exp = TREE_OPERAND (exp, 0);
1904 return TREE_CONSTANT (exp);
1907 /* Return first list element whose TREE_VALUE is ELEM.
1908 Return 0 if ELEM is not in LIST. */
1911 value_member (tree elem, tree list)
1915 if (elem == TREE_VALUE (list))
1917 list = TREE_CHAIN (list);
1922 /* Return first list element whose TREE_PURPOSE is ELEM.
1923 Return 0 if ELEM is not in LIST. */
1926 purpose_member (const_tree elem, tree list)
1930 if (elem == TREE_PURPOSE (list))
1932 list = TREE_CHAIN (list);
1937 /* Returns element number IDX (zero-origin) of chain CHAIN, or
1941 chain_index (int idx, tree chain)
1943 for (; chain && idx > 0; --idx)
1944 chain = TREE_CHAIN (chain);
1948 /* Return nonzero if ELEM is part of the chain CHAIN. */
1951 chain_member (const_tree elem, const_tree chain)
1957 chain = TREE_CHAIN (chain);
1963 /* Return the length of a chain of nodes chained through TREE_CHAIN.
1964 We expect a null pointer to mark the end of the chain.
1965 This is the Lisp primitive `length'. */
1968 list_length (const_tree t)
1971 #ifdef ENABLE_TREE_CHECKING
1979 #ifdef ENABLE_TREE_CHECKING
1982 gcc_assert (p != q);
1990 /* Returns the number of FIELD_DECLs in TYPE. */
1993 fields_length (const_tree type)
1995 tree t = TYPE_FIELDS (type);
1998 for (; t; t = TREE_CHAIN (t))
1999 if (TREE_CODE (t) == FIELD_DECL)
2005 /* Returns the first FIELD_DECL in the TYPE_FIELDS of the RECORD_TYPE or
2006 UNION_TYPE TYPE, or NULL_TREE if none. */
2009 first_field (const_tree type)
2011 tree t = TYPE_FIELDS (type);
2012 while (t && TREE_CODE (t) != FIELD_DECL)
2017 /* Concatenate two chains of nodes (chained through TREE_CHAIN)
2018 by modifying the last node in chain 1 to point to chain 2.
2019 This is the Lisp primitive `nconc'. */
2022 chainon (tree op1, tree op2)
2031 for (t1 = op1; TREE_CHAIN (t1); t1 = TREE_CHAIN (t1))
2033 TREE_CHAIN (t1) = op2;
2035 #ifdef ENABLE_TREE_CHECKING
2038 for (t2 = op2; t2; t2 = TREE_CHAIN (t2))
2039 gcc_assert (t2 != t1);
2046 /* Return the last node in a chain of nodes (chained through TREE_CHAIN). */
2049 tree_last (tree chain)
2053 while ((next = TREE_CHAIN (chain)))
2058 /* Reverse the order of elements in the chain T,
2059 and return the new head of the chain (old last element). */
2064 tree prev = 0, decl, next;
2065 for (decl = t; decl; decl = next)
2067 next = TREE_CHAIN (decl);
2068 TREE_CHAIN (decl) = prev;
2074 /* Return a newly created TREE_LIST node whose
2075 purpose and value fields are PARM and VALUE. */
2078 build_tree_list_stat (tree parm, tree value MEM_STAT_DECL)
2080 tree t = make_node_stat (TREE_LIST PASS_MEM_STAT);
2081 TREE_PURPOSE (t) = parm;
2082 TREE_VALUE (t) = value;
2086 /* Build a chain of TREE_LIST nodes from a vector. */
2089 build_tree_list_vec_stat (const VEC(tree,gc) *vec MEM_STAT_DECL)
2091 tree ret = NULL_TREE;
2095 for (i = 0; VEC_iterate (tree, vec, i, t); ++i)
2097 *pp = build_tree_list_stat (NULL, t PASS_MEM_STAT);
2098 pp = &TREE_CHAIN (*pp);
2103 /* Return a newly created TREE_LIST node whose
2104 purpose and value fields are PURPOSE and VALUE
2105 and whose TREE_CHAIN is CHAIN. */
2108 tree_cons_stat (tree purpose, tree value, tree chain MEM_STAT_DECL)
2112 node = (tree) ggc_alloc_zone_pass_stat (sizeof (struct tree_list), &tree_zone);
2114 memset (node, 0, sizeof (struct tree_common));
2116 #ifdef GATHER_STATISTICS
2117 tree_node_counts[(int) x_kind]++;
2118 tree_node_sizes[(int) x_kind] += sizeof (struct tree_list);
2121 TREE_SET_CODE (node, TREE_LIST);
2122 TREE_CHAIN (node) = chain;
2123 TREE_PURPOSE (node) = purpose;
2124 TREE_VALUE (node) = value;
2128 /* Return the values of the elements of a CONSTRUCTOR as a vector of
2132 ctor_to_vec (tree ctor)
2134 VEC(tree, gc) *vec = VEC_alloc (tree, gc, CONSTRUCTOR_NELTS (ctor));
2138 FOR_EACH_CONSTRUCTOR_VALUE (CONSTRUCTOR_ELTS (ctor), ix, val)
2139 VEC_quick_push (tree, vec, val);
2144 /* Return the size nominally occupied by an object of type TYPE
2145 when it resides in memory. The value is measured in units of bytes,
2146 and its data type is that normally used for type sizes
2147 (which is the first type created by make_signed_type or
2148 make_unsigned_type). */
2151 size_in_bytes (const_tree type)
2155 if (type == error_mark_node)
2156 return integer_zero_node;
2158 type = TYPE_MAIN_VARIANT (type);
2159 t = TYPE_SIZE_UNIT (type);
2163 lang_hooks.types.incomplete_type_error (NULL_TREE, type);
2164 return size_zero_node;
2170 /* Return the size of TYPE (in bytes) as a wide integer
2171 or return -1 if the size can vary or is larger than an integer. */
2174 int_size_in_bytes (const_tree type)
2178 if (type == error_mark_node)
2181 type = TYPE_MAIN_VARIANT (type);
2182 t = TYPE_SIZE_UNIT (type);
2184 || TREE_CODE (t) != INTEGER_CST
2185 || TREE_INT_CST_HIGH (t) != 0
2186 /* If the result would appear negative, it's too big to represent. */
2187 || (HOST_WIDE_INT) TREE_INT_CST_LOW (t) < 0)
2190 return TREE_INT_CST_LOW (t);
2193 /* Return the maximum size of TYPE (in bytes) as a wide integer
2194 or return -1 if the size can vary or is larger than an integer. */
2197 max_int_size_in_bytes (const_tree type)
2199 HOST_WIDE_INT size = -1;
2202 /* If this is an array type, check for a possible MAX_SIZE attached. */
2204 if (TREE_CODE (type) == ARRAY_TYPE)
2206 size_tree = TYPE_ARRAY_MAX_SIZE (type);
2208 if (size_tree && host_integerp (size_tree, 1))
2209 size = tree_low_cst (size_tree, 1);
2212 /* If we still haven't been able to get a size, see if the language
2213 can compute a maximum size. */
2217 size_tree = lang_hooks.types.max_size (type);
2219 if (size_tree && host_integerp (size_tree, 1))
2220 size = tree_low_cst (size_tree, 1);
2226 /* Returns a tree for the size of EXP in bytes. */
2229 tree_expr_size (const_tree exp)
2232 && DECL_SIZE_UNIT (exp) != 0)
2233 return DECL_SIZE_UNIT (exp);
2235 return size_in_bytes (TREE_TYPE (exp));
2238 /* Return the bit position of FIELD, in bits from the start of the record.
2239 This is a tree of type bitsizetype. */
2242 bit_position (const_tree field)
2244 return bit_from_pos (DECL_FIELD_OFFSET (field),
2245 DECL_FIELD_BIT_OFFSET (field));
2248 /* Likewise, but return as an integer. It must be representable in
2249 that way (since it could be a signed value, we don't have the
2250 option of returning -1 like int_size_in_byte can. */
2253 int_bit_position (const_tree field)
2255 return tree_low_cst (bit_position (field), 0);
2258 /* Return the byte position of FIELD, in bytes from the start of the record.
2259 This is a tree of type sizetype. */
2262 byte_position (const_tree field)
2264 return byte_from_pos (DECL_FIELD_OFFSET (field),
2265 DECL_FIELD_BIT_OFFSET (field));
2268 /* Likewise, but return as an integer. It must be representable in
2269 that way (since it could be a signed value, we don't have the
2270 option of returning -1 like int_size_in_byte can. */
2273 int_byte_position (const_tree field)
2275 return tree_low_cst (byte_position (field), 0);
2278 /* Return the strictest alignment, in bits, that T is known to have. */
2281 expr_align (const_tree t)
2283 unsigned int align0, align1;
2285 switch (TREE_CODE (t))
2287 CASE_CONVERT: case NON_LVALUE_EXPR:
2288 /* If we have conversions, we know that the alignment of the
2289 object must meet each of the alignments of the types. */
2290 align0 = expr_align (TREE_OPERAND (t, 0));
2291 align1 = TYPE_ALIGN (TREE_TYPE (t));
2292 return MAX (align0, align1);
2294 case SAVE_EXPR: case COMPOUND_EXPR: case MODIFY_EXPR:
2295 case INIT_EXPR: case TARGET_EXPR: case WITH_CLEANUP_EXPR:
2296 case CLEANUP_POINT_EXPR:
2297 /* These don't change the alignment of an object. */
2298 return expr_align (TREE_OPERAND (t, 0));
2301 /* The best we can do is say that the alignment is the least aligned
2303 align0 = expr_align (TREE_OPERAND (t, 1));
2304 align1 = expr_align (TREE_OPERAND (t, 2));
2305 return MIN (align0, align1);
2307 /* FIXME: LABEL_DECL and CONST_DECL never have DECL_ALIGN set
2308 meaningfully, it's always 1. */
2309 case LABEL_DECL: case CONST_DECL:
2310 case VAR_DECL: case PARM_DECL: case RESULT_DECL:
2312 gcc_assert (DECL_ALIGN (t) != 0);
2313 return DECL_ALIGN (t);
2319 /* Otherwise take the alignment from that of the type. */
2320 return TYPE_ALIGN (TREE_TYPE (t));
2323 /* Return, as a tree node, the number of elements for TYPE (which is an
2324 ARRAY_TYPE) minus one. This counts only elements of the top array. */
2327 array_type_nelts (const_tree type)
2329 tree index_type, min, max;
2331 /* If they did it with unspecified bounds, then we should have already
2332 given an error about it before we got here. */
2333 if (! TYPE_DOMAIN (type))
2334 return error_mark_node;
2336 index_type = TYPE_DOMAIN (type);
2337 min = TYPE_MIN_VALUE (index_type);
2338 max = TYPE_MAX_VALUE (index_type);
2340 return (integer_zerop (min)
2342 : fold_build2 (MINUS_EXPR, TREE_TYPE (max), max, min));
2345 /* If arg is static -- a reference to an object in static storage -- then
2346 return the object. This is not the same as the C meaning of `static'.
2347 If arg isn't static, return NULL. */
2352 switch (TREE_CODE (arg))
2355 /* Nested functions are static, even though taking their address will
2356 involve a trampoline as we unnest the nested function and create
2357 the trampoline on the tree level. */
2361 return ((TREE_STATIC (arg) || DECL_EXTERNAL (arg))
2362 && ! DECL_THREAD_LOCAL_P (arg)
2363 && ! DECL_DLLIMPORT_P (arg)
2367 return ((TREE_STATIC (arg) || DECL_EXTERNAL (arg))
2371 return TREE_STATIC (arg) ? arg : NULL;
2378 /* If the thing being referenced is not a field, then it is
2379 something language specific. */
2380 gcc_assert (TREE_CODE (TREE_OPERAND (arg, 1)) == FIELD_DECL);
2382 /* If we are referencing a bitfield, we can't evaluate an
2383 ADDR_EXPR at compile time and so it isn't a constant. */
2384 if (DECL_BIT_FIELD (TREE_OPERAND (arg, 1)))
2387 return staticp (TREE_OPERAND (arg, 0));
2392 case MISALIGNED_INDIRECT_REF:
2393 case ALIGN_INDIRECT_REF:
2395 return TREE_CONSTANT (TREE_OPERAND (arg, 0)) ? arg : NULL;
2398 case ARRAY_RANGE_REF:
2399 if (TREE_CODE (TYPE_SIZE (TREE_TYPE (arg))) == INTEGER_CST
2400 && TREE_CODE (TREE_OPERAND (arg, 1)) == INTEGER_CST)
2401 return staticp (TREE_OPERAND (arg, 0));
2405 case COMPOUND_LITERAL_EXPR:
2406 return TREE_STATIC (COMPOUND_LITERAL_EXPR_DECL (arg)) ? arg : NULL;
2416 /* Return whether OP is a DECL whose address is function-invariant. */
2419 decl_address_invariant_p (const_tree op)
2421 /* The conditions below are slightly less strict than the one in
2424 switch (TREE_CODE (op))
2433 if (((TREE_STATIC (op) || DECL_EXTERNAL (op))
2434 && !DECL_DLLIMPORT_P (op))
2435 || DECL_THREAD_LOCAL_P (op)
2436 || DECL_CONTEXT (op) == current_function_decl
2437 || decl_function_context (op) == current_function_decl)
2442 if ((TREE_STATIC (op) || DECL_EXTERNAL (op))
2443 || decl_function_context (op) == current_function_decl)
2454 /* Return whether OP is a DECL whose address is interprocedural-invariant. */
2457 decl_address_ip_invariant_p (const_tree op)
2459 /* The conditions below are slightly less strict than the one in
2462 switch (TREE_CODE (op))
2470 if (((TREE_STATIC (op) || DECL_EXTERNAL (op))
2471 && !DECL_DLLIMPORT_P (op))
2472 || DECL_THREAD_LOCAL_P (op))
2477 if ((TREE_STATIC (op) || DECL_EXTERNAL (op)))
2489 /* Return true if T is function-invariant (internal function, does
2490 not handle arithmetic; that's handled in skip_simple_arithmetic and
2491 tree_invariant_p). */
2493 static bool tree_invariant_p (tree t);
2496 tree_invariant_p_1 (tree t)
2500 if (TREE_CONSTANT (t)
2501 || (TREE_READONLY (t) && !TREE_SIDE_EFFECTS (t)))
2504 switch (TREE_CODE (t))
2510 op = TREE_OPERAND (t, 0);
2511 while (handled_component_p (op))
2513 switch (TREE_CODE (op))
2516 case ARRAY_RANGE_REF:
2517 if (!tree_invariant_p (TREE_OPERAND (op, 1))
2518 || TREE_OPERAND (op, 2) != NULL_TREE
2519 || TREE_OPERAND (op, 3) != NULL_TREE)
2524 if (TREE_OPERAND (op, 2) != NULL_TREE)
2530 op = TREE_OPERAND (op, 0);
2533 return CONSTANT_CLASS_P (op) || decl_address_invariant_p (op);
2542 /* Return true if T is function-invariant. */
2545 tree_invariant_p (tree t)
2547 tree inner = skip_simple_arithmetic (t);
2548 return tree_invariant_p_1 (inner);
2551 /* Wrap a SAVE_EXPR around EXPR, if appropriate.
2552 Do this to any expression which may be used in more than one place,
2553 but must be evaluated only once.
2555 Normally, expand_expr would reevaluate the expression each time.
2556 Calling save_expr produces something that is evaluated and recorded
2557 the first time expand_expr is called on it. Subsequent calls to
2558 expand_expr just reuse the recorded value.
2560 The call to expand_expr that generates code that actually computes
2561 the value is the first call *at compile time*. Subsequent calls
2562 *at compile time* generate code to use the saved value.
2563 This produces correct result provided that *at run time* control
2564 always flows through the insns made by the first expand_expr
2565 before reaching the other places where the save_expr was evaluated.
2566 You, the caller of save_expr, must make sure this is so.
2568 Constants, and certain read-only nodes, are returned with no
2569 SAVE_EXPR because that is safe. Expressions containing placeholders
2570 are not touched; see tree.def for an explanation of what these
2574 save_expr (tree expr)
2576 tree t = fold (expr);
2579 /* If the tree evaluates to a constant, then we don't want to hide that
2580 fact (i.e. this allows further folding, and direct checks for constants).
2581 However, a read-only object that has side effects cannot be bypassed.
2582 Since it is no problem to reevaluate literals, we just return the
2584 inner = skip_simple_arithmetic (t);
2585 if (TREE_CODE (inner) == ERROR_MARK)
2588 if (tree_invariant_p_1 (inner))
2591 /* If INNER contains a PLACEHOLDER_EXPR, we must evaluate it each time, since
2592 it means that the size or offset of some field of an object depends on
2593 the value within another field.
2595 Note that it must not be the case that T contains both a PLACEHOLDER_EXPR
2596 and some variable since it would then need to be both evaluated once and
2597 evaluated more than once. Front-ends must assure this case cannot
2598 happen by surrounding any such subexpressions in their own SAVE_EXPR
2599 and forcing evaluation at the proper time. */
2600 if (contains_placeholder_p (inner))
2603 t = build1 (SAVE_EXPR, TREE_TYPE (expr), t);
2604 SET_EXPR_LOCATION (t, EXPR_LOCATION (expr));
2606 /* This expression might be placed ahead of a jump to ensure that the
2607 value was computed on both sides of the jump. So make sure it isn't
2608 eliminated as dead. */
2609 TREE_SIDE_EFFECTS (t) = 1;
2613 /* Look inside EXPR and into any simple arithmetic operations. Return
2614 the innermost non-arithmetic node. */
2617 skip_simple_arithmetic (tree expr)
2621 /* We don't care about whether this can be used as an lvalue in this
2623 while (TREE_CODE (expr) == NON_LVALUE_EXPR)
2624 expr = TREE_OPERAND (expr, 0);
2626 /* If we have simple operations applied to a SAVE_EXPR or to a SAVE_EXPR and
2627 a constant, it will be more efficient to not make another SAVE_EXPR since
2628 it will allow better simplification and GCSE will be able to merge the
2629 computations if they actually occur. */
2633 if (UNARY_CLASS_P (inner))
2634 inner = TREE_OPERAND (inner, 0);
2635 else if (BINARY_CLASS_P (inner))
2637 if (tree_invariant_p (TREE_OPERAND (inner, 1)))
2638 inner = TREE_OPERAND (inner, 0);
2639 else if (tree_invariant_p (TREE_OPERAND (inner, 0)))
2640 inner = TREE_OPERAND (inner, 1);
2652 /* Return which tree structure is used by T. */
2654 enum tree_node_structure_enum
2655 tree_node_structure (const_tree t)
2657 const enum tree_code code = TREE_CODE (t);
2658 return tree_node_structure_for_code (code);
2661 /* Set various status flags when building a CALL_EXPR object T. */
2664 process_call_operands (tree t)
2666 bool side_effects = TREE_SIDE_EFFECTS (t);
2667 bool read_only = false;
2668 int i = call_expr_flags (t);
2670 /* Calls have side-effects, except those to const or pure functions. */
2671 if ((i & ECF_LOOPING_CONST_OR_PURE) || !(i & (ECF_CONST | ECF_PURE)))
2672 side_effects = true;
2673 /* Propagate TREE_READONLY of arguments for const functions. */
2677 if (!side_effects || read_only)
2678 for (i = 1; i < TREE_OPERAND_LENGTH (t); i++)
2680 tree op = TREE_OPERAND (t, i);
2681 if (op && TREE_SIDE_EFFECTS (op))
2682 side_effects = true;
2683 if (op && !TREE_READONLY (op) && !CONSTANT_CLASS_P (op))
2687 TREE_SIDE_EFFECTS (t) = side_effects;
2688 TREE_READONLY (t) = read_only;
2691 /* Return 1 if EXP contains a PLACEHOLDER_EXPR; i.e., if it represents a size
2692 or offset that depends on a field within a record. */
2695 contains_placeholder_p (const_tree exp)
2697 enum tree_code code;
2702 code = TREE_CODE (exp);
2703 if (code == PLACEHOLDER_EXPR)
2706 switch (TREE_CODE_CLASS (code))
2709 /* Don't look at any PLACEHOLDER_EXPRs that might be in index or bit
2710 position computations since they will be converted into a
2711 WITH_RECORD_EXPR involving the reference, which will assume
2712 here will be valid. */
2713 return CONTAINS_PLACEHOLDER_P (TREE_OPERAND (exp, 0));
2715 case tcc_exceptional:
2716 if (code == TREE_LIST)
2717 return (CONTAINS_PLACEHOLDER_P (TREE_VALUE (exp))
2718 || CONTAINS_PLACEHOLDER_P (TREE_CHAIN (exp)));
2723 case tcc_comparison:
2724 case tcc_expression:
2728 /* Ignoring the first operand isn't quite right, but works best. */
2729 return CONTAINS_PLACEHOLDER_P (TREE_OPERAND (exp, 1));
2732 return (CONTAINS_PLACEHOLDER_P (TREE_OPERAND (exp, 0))
2733 || CONTAINS_PLACEHOLDER_P (TREE_OPERAND (exp, 1))
2734 || CONTAINS_PLACEHOLDER_P (TREE_OPERAND (exp, 2)));
2737 /* The save_expr function never wraps anything containing
2738 a PLACEHOLDER_EXPR. */
2745 switch (TREE_CODE_LENGTH (code))
2748 return CONTAINS_PLACEHOLDER_P (TREE_OPERAND (exp, 0));
2750 return (CONTAINS_PLACEHOLDER_P (TREE_OPERAND (exp, 0))
2751 || CONTAINS_PLACEHOLDER_P (TREE_OPERAND (exp, 1)));
2762 const_call_expr_arg_iterator iter;
2763 FOR_EACH_CONST_CALL_EXPR_ARG (arg, iter, exp)
2764 if (CONTAINS_PLACEHOLDER_P (arg))
2778 /* Return true if any part of the computation of TYPE involves a
2779 PLACEHOLDER_EXPR. This includes size, bounds, qualifiers
2780 (for QUAL_UNION_TYPE) and field positions. */
2783 type_contains_placeholder_1 (const_tree type)
2785 /* If the size contains a placeholder or the parent type (component type in
2786 the case of arrays) type involves a placeholder, this type does. */
2787 if (CONTAINS_PLACEHOLDER_P (TYPE_SIZE (type))
2788 || CONTAINS_PLACEHOLDER_P (TYPE_SIZE_UNIT (type))
2789 || (TREE_TYPE (type) != 0
2790 && type_contains_placeholder_p (TREE_TYPE (type))))
2793 /* Now do type-specific checks. Note that the last part of the check above
2794 greatly limits what we have to do below. */
2795 switch (TREE_CODE (type))
2803 case REFERENCE_TYPE:
2811 case FIXED_POINT_TYPE:
2812 /* Here we just check the bounds. */
2813 return (CONTAINS_PLACEHOLDER_P (TYPE_MIN_VALUE (type))
2814 || CONTAINS_PLACEHOLDER_P (TYPE_MAX_VALUE (type)));
2817 /* We're already checked the component type (TREE_TYPE), so just check
2819 return type_contains_placeholder_p (TYPE_DOMAIN (type));
2823 case QUAL_UNION_TYPE:
2827 for (field = TYPE_FIELDS (type); field; field = TREE_CHAIN (field))
2828 if (TREE_CODE (field) == FIELD_DECL
2829 && (CONTAINS_PLACEHOLDER_P (DECL_FIELD_OFFSET (field))
2830 || (TREE_CODE (type) == QUAL_UNION_TYPE
2831 && CONTAINS_PLACEHOLDER_P (DECL_QUALIFIER (field)))
2832 || type_contains_placeholder_p (TREE_TYPE (field))))
2844 type_contains_placeholder_p (tree type)
2848 /* If the contains_placeholder_bits field has been initialized,
2849 then we know the answer. */
2850 if (TYPE_CONTAINS_PLACEHOLDER_INTERNAL (type) > 0)
2851 return TYPE_CONTAINS_PLACEHOLDER_INTERNAL (type) - 1;
2853 /* Indicate that we've seen this type node, and the answer is false.
2854 This is what we want to return if we run into recursion via fields. */
2855 TYPE_CONTAINS_PLACEHOLDER_INTERNAL (type) = 1;
2857 /* Compute the real value. */
2858 result = type_contains_placeholder_1 (type);
2860 /* Store the real value. */
2861 TYPE_CONTAINS_PLACEHOLDER_INTERNAL (type) = result + 1;
2866 /* Push tree EXP onto vector QUEUE if it is not already present. */
2869 push_without_duplicates (tree exp, VEC (tree, heap) **queue)
2874 for (i = 0; VEC_iterate (tree, *queue, i, iter); i++)
2875 if (simple_cst_equal (iter, exp) == 1)
2879 VEC_safe_push (tree, heap, *queue, exp);
2882 /* Given a tree EXP, find all occurences of references to fields
2883 in a PLACEHOLDER_EXPR and place them in vector REFS without
2884 duplicates. Also record VAR_DECLs and CONST_DECLs. Note that
2885 we assume here that EXP contains only arithmetic expressions
2886 or CALL_EXPRs with PLACEHOLDER_EXPRs occurring only in their
2890 find_placeholder_in_expr (tree exp, VEC (tree, heap) **refs)
2892 enum tree_code code = TREE_CODE (exp);
2896 /* We handle TREE_LIST and COMPONENT_REF separately. */
2897 if (code == TREE_LIST)
2899 FIND_PLACEHOLDER_IN_EXPR (TREE_CHAIN (exp), refs);
2900 FIND_PLACEHOLDER_IN_EXPR (TREE_VALUE (exp), refs);
2902 else if (code == COMPONENT_REF)
2904 for (inner = TREE_OPERAND (exp, 0);
2905 REFERENCE_CLASS_P (inner);
2906 inner = TREE_OPERAND (inner, 0))
2909 if (TREE_CODE (inner) == PLACEHOLDER_EXPR)
2910 push_without_duplicates (exp, refs);
2912 FIND_PLACEHOLDER_IN_EXPR (TREE_OPERAND (exp, 0), refs);
2915 switch (TREE_CODE_CLASS (code))
2920 case tcc_declaration:
2921 /* Variables allocated to static storage can stay. */
2922 if (!TREE_STATIC (exp))
2923 push_without_duplicates (exp, refs);
2926 case tcc_expression:
2927 /* This is the pattern built in ada/make_aligning_type. */
2928 if (code == ADDR_EXPR
2929 && TREE_CODE (TREE_OPERAND (exp, 0)) == PLACEHOLDER_EXPR)
2931 push_without_duplicates (exp, refs);
2935 /* Fall through... */
2937 case tcc_exceptional:
2940 case tcc_comparison:
2942 for (i = 0; i < TREE_CODE_LENGTH (code); i++)
2943 FIND_PLACEHOLDER_IN_EXPR (TREE_OPERAND (exp, i), refs);
2947 for (i = 1; i < TREE_OPERAND_LENGTH (exp); i++)
2948 FIND_PLACEHOLDER_IN_EXPR (TREE_OPERAND (exp, i), refs);
2956 /* Given a tree EXP, a FIELD_DECL F, and a replacement value R,
2957 return a tree with all occurrences of references to F in a
2958 PLACEHOLDER_EXPR replaced by R. Also handle VAR_DECLs and
2959 CONST_DECLs. Note that we assume here that EXP contains only
2960 arithmetic expressions or CALL_EXPRs with PLACEHOLDER_EXPRs
2961 occurring only in their argument list. */
2964 substitute_in_expr (tree exp, tree f, tree r)
2966 enum tree_code code = TREE_CODE (exp);
2967 tree op0, op1, op2, op3;
2970 /* We handle TREE_LIST and COMPONENT_REF separately. */
2971 if (code == TREE_LIST)
2973 op0 = SUBSTITUTE_IN_EXPR (TREE_CHAIN (exp), f, r);
2974 op1 = SUBSTITUTE_IN_EXPR (TREE_VALUE (exp), f, r);
2975 if (op0 == TREE_CHAIN (exp) && op1 == TREE_VALUE (exp))
2978 return tree_cons (TREE_PURPOSE (exp), op1, op0);
2980 else if (code == COMPONENT_REF)
2984 /* If this expression is getting a value from a PLACEHOLDER_EXPR
2985 and it is the right field, replace it with R. */
2986 for (inner = TREE_OPERAND (exp, 0);
2987 REFERENCE_CLASS_P (inner);
2988 inner = TREE_OPERAND (inner, 0))
2992 op1 = TREE_OPERAND (exp, 1);
2994 if (TREE_CODE (inner) == PLACEHOLDER_EXPR && op1 == f)
2997 /* If this expression hasn't been completed let, leave it alone. */
2998 if (TREE_CODE (inner) == PLACEHOLDER_EXPR && !TREE_TYPE (inner))
3001 op0 = SUBSTITUTE_IN_EXPR (TREE_OPERAND (exp, 0), f, r);
3002 if (op0 == TREE_OPERAND (exp, 0))
3006 = fold_build3 (COMPONENT_REF, TREE_TYPE (exp), op0, op1, NULL_TREE);
3009 switch (TREE_CODE_CLASS (code))
3014 case tcc_declaration:
3020 case tcc_expression:
3024 /* Fall through... */
3026 case tcc_exceptional:
3029 case tcc_comparison:
3031 switch (TREE_CODE_LENGTH (code))
3037 op0 = SUBSTITUTE_IN_EXPR (TREE_OPERAND (exp, 0), f, r);
3038 if (op0 == TREE_OPERAND (exp, 0))
3041 new_tree = fold_build1 (code, TREE_TYPE (exp), op0);
3045 op0 = SUBSTITUTE_IN_EXPR (TREE_OPERAND (exp, 0), f, r);
3046 op1 = SUBSTITUTE_IN_EXPR (TREE_OPERAND (exp, 1), f, r);
3048 if (op0 == TREE_OPERAND (exp, 0) && op1 == TREE_OPERAND (exp, 1))
3051 new_tree = fold_build2 (code, TREE_TYPE (exp), op0, op1);
3055 op0 = SUBSTITUTE_IN_EXPR (TREE_OPERAND (exp, 0), f, r);
3056 op1 = SUBSTITUTE_IN_EXPR (TREE_OPERAND (exp, 1), f, r);
3057 op2 = SUBSTITUTE_IN_EXPR (TREE_OPERAND (exp, 2), f, r);
3059 if (op0 == TREE_OPERAND (exp, 0) && op1 == TREE_OPERAND (exp, 1)
3060 && op2 == TREE_OPERAND (exp, 2))
3063 new_tree = fold_build3 (code, TREE_TYPE (exp), op0, op1, op2);
3067 op0 = SUBSTITUTE_IN_EXPR (TREE_OPERAND (exp, 0), f, r);
3068 op1 = SUBSTITUTE_IN_EXPR (TREE_OPERAND (exp, 1), f, r);
3069 op2 = SUBSTITUTE_IN_EXPR (TREE_OPERAND (exp, 2), f, r);
3070 op3 = SUBSTITUTE_IN_EXPR (TREE_OPERAND (exp, 3), f, r);
3072 if (op0 == TREE_OPERAND (exp, 0) && op1 == TREE_OPERAND (exp, 1)
3073 && op2 == TREE_OPERAND (exp, 2)
3074 && op3 == TREE_OPERAND (exp, 3))
3078 = fold (build4 (code, TREE_TYPE (exp), op0, op1, op2, op3));
3090 new_tree = NULL_TREE;
3092 /* If we are trying to replace F with a constant, inline back
3093 functions which do nothing else than computing a value from
3094 the arguments they are passed. This makes it possible to
3095 fold partially or entirely the replacement expression. */
3096 if (CONSTANT_CLASS_P (r) && code == CALL_EXPR)
3098 tree t = maybe_inline_call_in_expr (exp);
3100 return SUBSTITUTE_IN_EXPR (t, f, r);
3103 for (i = 1; i < TREE_OPERAND_LENGTH (exp); i++)
3105 tree op = TREE_OPERAND (exp, i);
3106 tree new_op = SUBSTITUTE_IN_EXPR (op, f, r);
3110 new_tree = copy_node (exp);
3111 TREE_OPERAND (new_tree, i) = new_op;
3117 new_tree = fold (new_tree);
3118 if (TREE_CODE (new_tree) == CALL_EXPR)
3119 process_call_operands (new_tree);
3130 TREE_READONLY (new_tree) |= TREE_READONLY (exp);
3134 /* Similar, but look for a PLACEHOLDER_EXPR in EXP and find a replacement
3135 for it within OBJ, a tree that is an object or a chain of references. */
3138 substitute_placeholder_in_expr (tree exp, tree obj)
3140 enum tree_code code = TREE_CODE (exp);
3141 tree op0, op1, op2, op3;
3144 /* If this is a PLACEHOLDER_EXPR, see if we find a corresponding type
3145 in the chain of OBJ. */
3146 if (code == PLACEHOLDER_EXPR)
3148 tree need_type = TYPE_MAIN_VARIANT (TREE_TYPE (exp));
3151 for (elt = obj; elt != 0;
3152 elt = ((TREE_CODE (elt) == COMPOUND_EXPR
3153 || TREE_CODE (elt) == COND_EXPR)
3154 ? TREE_OPERAND (elt, 1)
3155 : (REFERENCE_CLASS_P (elt)
3156 || UNARY_CLASS_P (elt)
3157 || BINARY_CLASS_P (elt)
3158 || VL_EXP_CLASS_P (elt)
3159 || EXPRESSION_CLASS_P (elt))
3160 ? TREE_OPERAND (elt, 0) : 0))
3161 if (TYPE_MAIN_VARIANT (TREE_TYPE (elt)) == need_type)
3164 for (elt = obj; elt != 0;
3165 elt = ((TREE_CODE (elt) == COMPOUND_EXPR
3166 || TREE_CODE (elt) == COND_EXPR)
3167 ? TREE_OPERAND (elt, 1)
3168 : (REFERENCE_CLASS_P (elt)
3169 || UNARY_CLASS_P (elt)
3170 || BINARY_CLASS_P (elt)
3171 || VL_EXP_CLASS_P (elt)
3172 || EXPRESSION_CLASS_P (elt))
3173 ? TREE_OPERAND (elt, 0) : 0))
3174 if (POINTER_TYPE_P (TREE_TYPE (elt))
3175 && (TYPE_MAIN_VARIANT (TREE_TYPE (TREE_TYPE (elt)))
3177 return fold_build1 (INDIRECT_REF, need_type, elt);
3179 /* If we didn't find it, return the original PLACEHOLDER_EXPR. If it
3180 survives until RTL generation, there will be an error. */
3184 /* TREE_LIST is special because we need to look at TREE_VALUE
3185 and TREE_CHAIN, not TREE_OPERANDS. */
3186 else if (code == TREE_LIST)
3188 op0 = SUBSTITUTE_PLACEHOLDER_IN_EXPR (TREE_CHAIN (exp), obj);
3189 op1 = SUBSTITUTE_PLACEHOLDER_IN_EXPR (TREE_VALUE (exp), obj);
3190 if (op0 == TREE_CHAIN (exp) && op1 == TREE_VALUE (exp))
3193 return tree_cons (TREE_PURPOSE (exp), op1, op0);
3196 switch (TREE_CODE_CLASS (code))
3199 case tcc_declaration:
3202 case tcc_exceptional:
3205 case tcc_comparison:
3206 case tcc_expression:
3209 switch (TREE_CODE_LENGTH (code))
3215 op0 = SUBSTITUTE_PLACEHOLDER_IN_EXPR (TREE_OPERAND (exp, 0), obj);
3216 if (op0 == TREE_OPERAND (exp, 0))
3219 new_tree = fold_build1 (code, TREE_TYPE (exp), op0);
3223 op0 = SUBSTITUTE_PLACEHOLDER_IN_EXPR (TREE_OPERAND (exp, 0), obj);
3224 op1 = SUBSTITUTE_PLACEHOLDER_IN_EXPR (TREE_OPERAND (exp, 1), obj);
3226 if (op0 == TREE_OPERAND (exp, 0) && op1 == TREE_OPERAND (exp, 1))
3229 new_tree = fold_build2 (code, TREE_TYPE (exp), op0, op1);
3233 op0 = SUBSTITUTE_PLACEHOLDER_IN_EXPR (TREE_OPERAND (exp, 0), obj);
3234 op1 = SUBSTITUTE_PLACEHOLDER_IN_EXPR (TREE_OPERAND (exp, 1), obj);
3235 op2 = SUBSTITUTE_PLACEHOLDER_IN_EXPR (TREE_OPERAND (exp, 2), obj);
3237 if (op0 == TREE_OPERAND (exp, 0) && op1 == TREE_OPERAND (exp, 1)
3238 && op2 == TREE_OPERAND (exp, 2))
3241 new_tree = fold_build3 (code, TREE_TYPE (exp), op0, op1, op2);
3245 op0 = SUBSTITUTE_PLACEHOLDER_IN_EXPR (TREE_OPERAND (exp, 0), obj);
3246 op1 = SUBSTITUTE_PLACEHOLDER_IN_EXPR (TREE_OPERAND (exp, 1), obj);
3247 op2 = SUBSTITUTE_PLACEHOLDER_IN_EXPR (TREE_OPERAND (exp, 2), obj);
3248 op3 = SUBSTITUTE_PLACEHOLDER_IN_EXPR (TREE_OPERAND (exp, 3), obj);
3250 if (op0 == TREE_OPERAND (exp, 0) && op1 == TREE_OPERAND (exp, 1)
3251 && op2 == TREE_OPERAND (exp, 2)
3252 && op3 == TREE_OPERAND (exp, 3))
3256 = fold (build4 (code, TREE_TYPE (exp), op0, op1, op2, op3));
3268 new_tree = NULL_TREE;
3270 for (i = 1; i < TREE_OPERAND_LENGTH (exp); i++)
3272 tree op = TREE_OPERAND (exp, i);
3273 tree new_op = SUBSTITUTE_PLACEHOLDER_IN_EXPR (op, obj);
3277 new_tree = copy_node (exp);
3278 TREE_OPERAND (new_tree, i) = new_op;
3284 new_tree = fold (new_tree);
3285 if (TREE_CODE (new_tree) == CALL_EXPR)
3286 process_call_operands (new_tree);
3297 TREE_READONLY (new_tree) |= TREE_READONLY (exp);
3301 /* Stabilize a reference so that we can use it any number of times
3302 without causing its operands to be evaluated more than once.
3303 Returns the stabilized reference. This works by means of save_expr,
3304 so see the caveats in the comments about save_expr.
3306 Also allows conversion expressions whose operands are references.
3307 Any other kind of expression is returned unchanged. */
3310 stabilize_reference (tree ref)
3313 enum tree_code code = TREE_CODE (ref);
3320 /* No action is needed in this case. */
3325 case FIX_TRUNC_EXPR:
3326 result = build_nt (code, stabilize_reference (TREE_OPERAND (ref, 0)));
3330 result = build_nt (INDIRECT_REF,
3331 stabilize_reference_1 (TREE_OPERAND (ref, 0)));
3335 result = build_nt (COMPONENT_REF,
3336 stabilize_reference (TREE_OPERAND (ref, 0)),
3337 TREE_OPERAND (ref, 1), NULL_TREE);
3341 result = build_nt (BIT_FIELD_REF,
3342 stabilize_reference (TREE_OPERAND (ref, 0)),
3343 stabilize_reference_1 (TREE_OPERAND (ref, 1)),
3344 stabilize_reference_1 (TREE_OPERAND (ref, 2)));
3348 result = build_nt (ARRAY_REF,
3349 stabilize_reference (TREE_OPERAND (ref, 0)),
3350 stabilize_reference_1 (TREE_OPERAND (ref, 1)),
3351 TREE_OPERAND (ref, 2), TREE_OPERAND (ref, 3));
3354 case ARRAY_RANGE_REF:
3355 result = build_nt (ARRAY_RANGE_REF,
3356 stabilize_reference (TREE_OPERAND (ref, 0)),
3357 stabilize_reference_1 (TREE_OPERAND (ref, 1)),
3358 TREE_OPERAND (ref, 2), TREE_OPERAND (ref, 3));
3362 /* We cannot wrap the first expression in a SAVE_EXPR, as then
3363 it wouldn't be ignored. This matters when dealing with
3365 return stabilize_reference_1 (ref);
3367 /* If arg isn't a kind of lvalue we recognize, make no change.
3368 Caller should recognize the error for an invalid lvalue. */
3373 return error_mark_node;
3376 TREE_TYPE (result) = TREE_TYPE (ref);
3377 TREE_READONLY (result) = TREE_READONLY (ref);
3378 TREE_SIDE_EFFECTS (result) = TREE_SIDE_EFFECTS (ref);
3379 TREE_THIS_VOLATILE (result) = TREE_THIS_VOLATILE (ref);
3384 /* Subroutine of stabilize_reference; this is called for subtrees of
3385 references. Any expression with side-effects must be put in a SAVE_EXPR
3386 to ensure that it is only evaluated once.
3388 We don't put SAVE_EXPR nodes around everything, because assigning very
3389 simple expressions to temporaries causes us to miss good opportunities
3390 for optimizations. Among other things, the opportunity to fold in the
3391 addition of a constant into an addressing mode often gets lost, e.g.
3392 "y[i+1] += x;". In general, we take the approach that we should not make
3393 an assignment unless we are forced into it - i.e., that any non-side effect
3394 operator should be allowed, and that cse should take care of coalescing
3395 multiple utterances of the same expression should that prove fruitful. */
3398 stabilize_reference_1 (tree e)
3401 enum tree_code code = TREE_CODE (e);
3403 /* We cannot ignore const expressions because it might be a reference
3404 to a const array but whose index contains side-effects. But we can
3405 ignore things that are actual constant or that already have been
3406 handled by this function. */
3408 if (tree_invariant_p (e))
3411 switch (TREE_CODE_CLASS (code))
3413 case tcc_exceptional:
3415 case tcc_declaration:
3416 case tcc_comparison:
3418 case tcc_expression:
3421 /* If the expression has side-effects, then encase it in a SAVE_EXPR
3422 so that it will only be evaluated once. */
3423 /* The reference (r) and comparison (<) classes could be handled as
3424 below, but it is generally faster to only evaluate them once. */
3425 if (TREE_SIDE_EFFECTS (e))
3426 return save_expr (e);
3430 /* Constants need no processing. In fact, we should never reach
3435 /* Division is slow and tends to be compiled with jumps,
3436 especially the division by powers of 2 that is often
3437 found inside of an array reference. So do it just once. */
3438 if (code == TRUNC_DIV_EXPR || code == TRUNC_MOD_EXPR
3439 || code == FLOOR_DIV_EXPR || code == FLOOR_MOD_EXPR
3440 || code == CEIL_DIV_EXPR || code == CEIL_MOD_EXPR
3441 || code == ROUND_DIV_EXPR || code == ROUND_MOD_EXPR)
3442 return save_expr (e);
3443 /* Recursively stabilize each operand. */
3444 result = build_nt (code, stabilize_reference_1 (TREE_OPERAND (e, 0)),
3445 stabilize_reference_1 (TREE_OPERAND (e, 1)));
3449 /* Recursively stabilize each operand. */
3450 result = build_nt (code, stabilize_reference_1 (TREE_OPERAND (e, 0)));
3457 TREE_TYPE (result) = TREE_TYPE (e);
3458 TREE_READONLY (result) = TREE_READONLY (e);
3459 TREE_SIDE_EFFECTS (result) = TREE_SIDE_EFFECTS (e);
3460 TREE_THIS_VOLATILE (result) = TREE_THIS_VOLATILE (e);
3465 /* Low-level constructors for expressions. */
3467 /* A helper function for build1 and constant folders. Set TREE_CONSTANT,
3468 and TREE_SIDE_EFFECTS for an ADDR_EXPR. */
3471 recompute_tree_invariant_for_addr_expr (tree t)
3474 bool tc = true, se = false;
3476 /* We started out assuming this address is both invariant and constant, but
3477 does not have side effects. Now go down any handled components and see if
3478 any of them involve offsets that are either non-constant or non-invariant.
3479 Also check for side-effects.
3481 ??? Note that this code makes no attempt to deal with the case where
3482 taking the address of something causes a copy due to misalignment. */
3484 #define UPDATE_FLAGS(NODE) \
3485 do { tree _node = (NODE); \
3486 if (_node && !TREE_CONSTANT (_node)) tc = false; \
3487 if (_node && TREE_SIDE_EFFECTS (_node)) se = true; } while (0)
3489 for (node = TREE_OPERAND (t, 0); handled_component_p (node);
3490 node = TREE_OPERAND (node, 0))
3492 /* If the first operand doesn't have an ARRAY_TYPE, this is a bogus
3493 array reference (probably made temporarily by the G++ front end),
3494 so ignore all the operands. */
3495 if ((TREE_CODE (node) == ARRAY_REF
3496 || TREE_CODE (node) == ARRAY_RANGE_REF)
3497 && TREE_CODE (TREE_TYPE (TREE_OPERAND (node, 0))) == ARRAY_TYPE)
3499 UPDATE_FLAGS (TREE_OPERAND (node, 1));
3500 if (TREE_OPERAND (node, 2))
3501 UPDATE_FLAGS (TREE_OPERAND (node, 2));
3502 if (TREE_OPERAND (node, 3))
3503 UPDATE_FLAGS (TREE_OPERAND (node, 3));
3505 /* Likewise, just because this is a COMPONENT_REF doesn't mean we have a
3506 FIELD_DECL, apparently. The G++ front end can put something else
3507 there, at least temporarily. */
3508 else if (TREE_CODE (node) == COMPONENT_REF
3509 && TREE_CODE (TREE_OPERAND (node, 1)) == FIELD_DECL)
3511 if (TREE_OPERAND (node, 2))
3512 UPDATE_FLAGS (TREE_OPERAND (node, 2));
3514 else if (TREE_CODE (node) == BIT_FIELD_REF)
3515 UPDATE_FLAGS (TREE_OPERAND (node, 2));
3518 node = lang_hooks.expr_to_decl (node, &tc, &se);
3520 /* Now see what's inside. If it's an INDIRECT_REF, copy our properties from
3521 the address, since &(*a)->b is a form of addition. If it's a constant, the
3522 address is constant too. If it's a decl, its address is constant if the
3523 decl is static. Everything else is not constant and, furthermore,
3524 taking the address of a volatile variable is not volatile. */
3525 if (TREE_CODE (node) == INDIRECT_REF)
3526 UPDATE_FLAGS (TREE_OPERAND (node, 0));
3527 else if (CONSTANT_CLASS_P (node))
3529 else if (DECL_P (node))
3530 tc &= (staticp (node) != NULL_TREE);
3534 se |= TREE_SIDE_EFFECTS (node);
3538 TREE_CONSTANT (t) = tc;
3539 TREE_SIDE_EFFECTS (t) = se;
3543 /* Build an expression of code CODE, data type TYPE, and operands as
3544 specified. Expressions and reference nodes can be created this way.
3545 Constants, decls, types and misc nodes cannot be.
3547 We define 5 non-variadic functions, from 0 to 4 arguments. This is
3548 enough for all extant tree codes. */
3551 build0_stat (enum tree_code code, tree tt MEM_STAT_DECL)
3555 gcc_assert (TREE_CODE_LENGTH (code) == 0);
3557 t = make_node_stat (code PASS_MEM_STAT);
3564 build1_stat (enum tree_code code, tree type, tree node MEM_STAT_DECL)
3566 int length = sizeof (struct tree_exp);
3567 #ifdef GATHER_STATISTICS
3568 tree_node_kind kind;
3572 #ifdef GATHER_STATISTICS
3573 switch (TREE_CODE_CLASS (code))
3575 case tcc_statement: /* an expression with side effects */
3578 case tcc_reference: /* a reference */
3586 tree_node_counts[(int) kind]++;
3587 tree_node_sizes[(int) kind] += length;
3590 gcc_assert (TREE_CODE_LENGTH (code) == 1);
3592 t = (tree) ggc_alloc_zone_pass_stat (length, &tree_zone);
3594 memset (t, 0, sizeof (struct tree_common));
3596 TREE_SET_CODE (t, code);
3598 TREE_TYPE (t) = type;
3599 SET_EXPR_LOCATION (t, UNKNOWN_LOCATION);
3600 TREE_OPERAND (t, 0) = node;
3601 TREE_BLOCK (t) = NULL_TREE;
3602 if (node && !TYPE_P (node))
3604 TREE_SIDE_EFFECTS (t) = TREE_SIDE_EFFECTS (node);
3605 TREE_READONLY (t) = TREE_READONLY (node);
3608 if (TREE_CODE_CLASS (code) == tcc_statement)
3609 TREE_SIDE_EFFECTS (t) = 1;
3613 /* All of these have side-effects, no matter what their
3615 TREE_SIDE_EFFECTS (t) = 1;
3616 TREE_READONLY (t) = 0;
3619 case MISALIGNED_INDIRECT_REF:
3620 case ALIGN_INDIRECT_REF:
3622 /* Whether a dereference is readonly has nothing to do with whether
3623 its operand is readonly. */
3624 TREE_READONLY (t) = 0;
3629 recompute_tree_invariant_for_addr_expr (t);
3633 if ((TREE_CODE_CLASS (code) == tcc_unary || code == VIEW_CONVERT_EXPR)
3634 && node && !TYPE_P (node)
3635 && TREE_CONSTANT (node))
3636 TREE_CONSTANT (t) = 1;
3637 if (TREE_CODE_CLASS (code) == tcc_reference
3638 && node && TREE_THIS_VOLATILE (node))
3639 TREE_THIS_VOLATILE (t) = 1;
3646 #define PROCESS_ARG(N) \
3648 TREE_OPERAND (t, N) = arg##N; \
3649 if (arg##N &&!TYPE_P (arg##N)) \
3651 if (TREE_SIDE_EFFECTS (arg##N)) \
3653 if (!TREE_READONLY (arg##N) \
3654 && !CONSTANT_CLASS_P (arg##N)) \
3655 (void) (read_only = 0); \
3656 if (!TREE_CONSTANT (arg##N)) \
3657 (void) (constant = 0); \
3662 build2_stat (enum tree_code code, tree tt, tree arg0, tree arg1 MEM_STAT_DECL)
3664 bool constant, read_only, side_effects;
3667 gcc_assert (TREE_CODE_LENGTH (code) == 2);
3669 if ((code == MINUS_EXPR || code == PLUS_EXPR || code == MULT_EXPR)
3670 && arg0 && arg1 && tt && POINTER_TYPE_P (tt)
3671 /* When sizetype precision doesn't match that of pointers
3672 we need to be able to build explicit extensions or truncations
3673 of the offset argument. */
3674 && TYPE_PRECISION (sizetype) == TYPE_PRECISION (tt))
3675 gcc_assert (TREE_CODE (arg0) == INTEGER_CST
3676 && TREE_CODE (arg1) == INTEGER_CST);
3678 if (code == POINTER_PLUS_EXPR && arg0 && arg1 && tt)
3679 gcc_assert (POINTER_TYPE_P (tt) && POINTER_TYPE_P (TREE_TYPE (arg0))
3680 && INTEGRAL_TYPE_P (TREE_TYPE (arg1))
3681 && useless_type_conversion_p (sizetype, TREE_TYPE (arg1)));
3683 t = make_node_stat (code PASS_MEM_STAT);
3686 /* Below, we automatically set TREE_SIDE_EFFECTS and TREE_READONLY for the
3687 result based on those same flags for the arguments. But if the
3688 arguments aren't really even `tree' expressions, we shouldn't be trying
3691 /* Expressions without side effects may be constant if their
3692 arguments are as well. */
3693 constant = (TREE_CODE_CLASS (code) == tcc_comparison
3694 || TREE_CODE_CLASS (code) == tcc_binary);
3696 side_effects = TREE_SIDE_EFFECTS (t);
3701 TREE_READONLY (t) = read_only;
3702 TREE_CONSTANT (t) = constant;
3703 TREE_SIDE_EFFECTS (t) = side_effects;
3704 TREE_THIS_VOLATILE (t)
3705 = (TREE_CODE_CLASS (code) == tcc_reference
3706 && arg0 && TREE_THIS_VOLATILE (arg0));
3713 build3_stat (enum tree_code code, tree tt, tree arg0, tree arg1,
3714 tree arg2 MEM_STAT_DECL)
3716 bool constant, read_only, side_effects;
3719 gcc_assert (TREE_CODE_LENGTH (code) == 3);
3720 gcc_assert (TREE_CODE_CLASS (code) != tcc_vl_exp);
3722 t = make_node_stat (code PASS_MEM_STAT);
3727 /* As a special exception, if COND_EXPR has NULL branches, we
3728 assume that it is a gimple statement and always consider
3729 it to have side effects. */
3730 if (code == COND_EXPR
3731 && tt == void_type_node
3732 && arg1 == NULL_TREE
3733 && arg2 == NULL_TREE)
3734 side_effects = true;
3736 side_effects = TREE_SIDE_EFFECTS (t);
3742 if (code == COND_EXPR)
3743 TREE_READONLY (t) = read_only;
3745 TREE_SIDE_EFFECTS (t) = side_effects;
3746 TREE_THIS_VOLATILE (t)
3747 = (TREE_CODE_CLASS (code) == tcc_reference
3748 && arg0 && TREE_THIS_VOLATILE (arg0));